Re: Execute BIOS function

From: Doug White <dwhite_at_gumbysoft.com>
Date: Sun, 6 Jun 2004 22:05:03 -0700 (PDT)
On Mon, 7 Jun 2004, Phil Schulz wrote:

> Hello List!
>
>  The radio transmitter of my new centrino laptop is turned on by a BIOS
> function which resides at a certain location in memory. I know how to
> find the adress of the function's start but I don't yet know how to tell
> the OS that I do want to execute that memory region and make it let me
> do so. When running the program I get "Bus error (core dumped)". So the
> question is: Can I actually execute the BIOS code from userland or do I
> have to do it from kernelspace? How do I tell the kernel that I want the
> memory region to be executed and make it let me do so?

You'll have to do it from the kernel. The BIOS call will probably want to
poke memory and I/O ports you won't have access to.

You'll also need to know if its 32-bit protected mode safe or not; if not
you'll have to set up VM86() to make the call.

Have you checked for an ACPI method that implements the same thing?

>
> Any help is appreciated.
>
> Thanks,
> Phil.
>
> --
>
>  This is a part of the code (I hope it's not going to be wrapped).
> bios_code_addr holds the BIOS function's start address and dev_mem is a
> file-descriptor to /dev/mem.
>
> ptr = mmap( 0, BIOS_CODE_SIZE, PROT_EXEC,
>     0, dev_mem, bios_code_addr );
>
> __asm__ __volatile__ (
>  "call *%3 \t\n"
>  : "=a"(eax)
>  : "a"(eax), "b"(ebx), "c"(ptr)
> );
>
>
> _______________________________________________
> freebsd-current_at_freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe_at_freebsd.org"
>

-- 
Doug White                    |  FreeBSD: The Power to Serve
dwhite_at_gumbysoft.com          |  www.FreeBSD.org
Received on Mon Jun 07 2004 - 03:05:03 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:56 UTC