From owner-freebsd-current@FreeBSD.ORG Tue Jun 8 11:22:30 2004 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 4739016A4CE for ; Tue, 8 Jun 2004 11:22:30 +0000 (GMT) Received: from mail.gmx.net (pop.gmx.de [213.165.64.20]) by mx1.FreeBSD.org (Postfix) with SMTP id 3CF6A43D1D for ; Tue, 8 Jun 2004 11:22:29 +0000 (GMT) (envelope-from ph.schulz@gmx.de) Received: (qmail 14094 invoked by uid 65534); 8 Jun 2004 11:22:27 -0000 Received: from p5090D1EE.dip0.t-ipconnect.de (EHLO gmx.de) (80.144.209.238) by mail.gmx.net (mp008) with SMTP; 08 Jun 2004 13:22:27 +0200 X-Authenticated: #1954550 Message-ID: <40C5A154.7010900@gmx.de> Date: Tue, 08 Jun 2004 13:21:56 +0200 From: Phil Schulz User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.6) Gecko/20040520 X-Accept-Language: de, en-us, en MIME-Version: 1.0 To: Doug White References: <40C3960F.4080305@gmx.de> <20040606220342.W12662@carver.gumbysoft.com> In-Reply-To: <20040606220342.W12662@carver.gumbysoft.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit cc: freebsd-current@freebsd.org Subject: Re: Execute BIOS function X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 08 Jun 2004 11:22:30 -0000 Doug White wrote: >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? > > > How do I check that? I managed to get the code running in the kernel. I plan on posting the code at the ipw(4) homepage soon. I'm not sure if I did things 'right' but it works reliably. Phil. >>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@freebsd.org mailing list >>http://lists.freebsd.org/mailman/listinfo/freebsd-current >>To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org" >> >> >> > > >