Date: Mon, 10 Mar 2008 17:53:51 -0400 From: John Baldwin <jhb@FreeBSD.org> To: Anish Mistry <amistry@am-productions.biz> Cc: freebsd-acpi@FreeBSD.org Subject: Re: kern/121504: [patch] Correctly set hw.acpi.osname on certain machines Message-ID: <200803101753.51267.jhb@freebsd.org> In-Reply-To: <200803101714.11219.amistry@am-productions.biz> References: <200803101910.m2AJA26c037165@freefall.freebsd.org> <200803101522.39154.jhb@freebsd.org> <200803101714.11219.amistry@am-productions.biz>
next in thread | previous in thread | raw e-mail | index | archive | help
On Monday 10 March 2008 05:14:02 pm Anish Mistry wrote: > On Monday 10 March 2008, John Baldwin wrote: > > On Monday 10 March 2008 03:10:02 pm Anish Mistry wrote: > > > The following reply was made to PR kern/121504; it has been noted > > > by GNATS. > > > > > > From: Anish Mistry <amistry@am-productions.biz> > > > To: John Baldwin <jhb@freebsd.org> > > > Cc: bug-followup@freebsd.org, njl@freebsd.org > > > Subject: Re: kern/121504: [patch] Correctly set hw.acpi.osname on > > > certain > > > > machines > > > > > Date: Mon, 10 Mar 2008 15:09:04 -0400 > > > > > > --nextPart11816881.8XfUQkhbdk > > > Content-Type: text/plain; > > > charset="iso-8859-1" > > > Content-Transfer-Encoding: quoted-printable > > > Content-Disposition: inline > > > > > > On Monday 10 March 2008, John Baldwin wrote: > > > > This is not the correct patch. The _OSI method does not > > > > return an OS name like _OS. Instead, it is a function that > > > > returns a boolean (True/False) to say if a given OS name is > > > > supported (OS name is passed as an argument). The proper fix > > > > is to say that the osname is supported in the > > > > AcpiOsValidateInterface() method. Something like this should > > > > work: > > > > > > > > Index: Osd/OsdMemory.c > > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3 > > > >D=3D=3D=3D= > > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= > >3D=3D=3D= > > > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > > > > > > RCS file: /usr/cvs/src/sys/dev/acpica/Osd/OsdMemory.c,v > > > > retrieving revision 1.15 > > > > diff -u -r1.15 OsdMemory.c > > > > --- Osd/OsdMemory.c 22 Mar 2007 18:16:41 -0000 1.15 > > > > +++ Osd/OsdMemory.c 10 Mar 2008 16:20:03 -0000 > > > > @@ -77,6 +77,9 @@ > > > > ACPI_STATUS > > > > AcpiOsValidateInterface (char *Interface) > > > > { > > > > + > > > > + if (strcmp(Interface, acpi_osname) =3D=3D 0) > > > > + return (AE_OK); > > > > return (AE_SUPPORT); > > > > } > > > > > > I get acpi_osname undeclared on compile. > > > > Try this: > > > > Index: acpivar.h > > =================================================================== > > RCS file: /usr/cvs/src/sys/dev/acpica/acpivar.h,v > > retrieving revision 1.108 > > diff -u -r1.108 acpivar.h > > --- acpivar.h 9 Oct 2007 07:48:07 -0000 1.108 > > +++ acpivar.h 10 Mar 2008 19:18:53 -0000 > > @@ -229,6 +229,11 @@ > > #define ACPI_IVAR_FLAGS 0x103 > > > > /* > > + * Storage for hw.acpi.osname tunable to override _OS or _OSI. > > + */ > > +extern char acpi_osname[]; > > + > > +/* > > * Accessor functions for our ivars. Default value for > > BUS_READ_IVAR is * (type) 0. The <sys/bus.h> accessor functions > > don't check return values. */ > > Index: Osd/OsdMemory.c > > =================================================================== > > RCS file: /usr/cvs/src/sys/dev/acpica/Osd/OsdMemory.c,v > > retrieving revision 1.15 > > diff -u -r1.15 OsdMemory.c > > --- Osd/OsdMemory.c 22 Mar 2007 18:16:41 -0000 1.15 > > +++ Osd/OsdMemory.c 10 Mar 2008 19:21:38 -0000 > > @@ -33,13 +33,17 @@ > > #include <sys/cdefs.h> > > __FBSDID("$FreeBSD: src/sys/dev/acpica/Osd/OsdMemory.c,v 1.15 > > 2007/03/22 18:16:41 jkim Exp $"); > > > > -#include <contrib/dev/acpica/acpi.h> > > - > > +#include <sys/param.h> > > +#include <sys/bus.h> > > #include <sys/kernel.h> > > #include <sys/malloc.h> > > #include <vm/vm.h> > > #include <vm/pmap.h> > > > > +#include <contrib/dev/acpica/acpi.h> > > + > > +#include <dev/acpica/acpivar.h> > > + > > MALLOC_DEFINE(M_ACPICA, "acpica", "ACPI CA memory pool"); > > > > void * > > @@ -77,6 +81,9 @@ > > ACPI_STATUS > > AcpiOsValidateInterface (char *Interface) > > { > > + > > + if (strcmp(Interface, acpi_osname) == 0) > > + return (AE_OK); > > return (AE_SUPPORT); > > } > > > > Index: Osd/OsdTable.c > > =================================================================== > > RCS file: /usr/cvs/src/sys/dev/acpica/Osd/OsdTable.c,v > > retrieving revision 1.12 > > diff -u -r1.12 OsdTable.c > > --- Osd/OsdTable.c 22 Mar 2007 18:16:41 -0000 1.12 > > +++ Osd/OsdTable.c 10 Mar 2008 19:20:39 -0000 > > @@ -32,6 +32,7 @@ > > __FBSDID("$FreeBSD: src/sys/dev/acpica/Osd/OsdTable.c,v 1.12 > > 2007/03/22 18:16:41 jkim Exp $"); > > > > #include <sys/param.h> > > +#include <sys/bus.h> > > #include <sys/endian.h> > > #include <sys/kernel.h> > > #include <sys/linker.h> > > @@ -39,10 +40,12 @@ > > #include <contrib/dev/acpica/acpi.h> > > #include <contrib/dev/acpica/actables.h> > > > > +#include <dev/acpica/acpivar.h> > > + > > #undef _COMPONENT > > #define _COMPONENT ACPI_TABLES > > > > -static char acpi_osname[128]; > > +char acpi_osname[128]; > > TUNABLE_STR("hw.acpi.osname", acpi_osname, sizeof(acpi_osname)); > > > > ACPI_STATUS > > Ok, this compiles, but doesn't seem to set the override correctly. > > Here is my asl. > http://am-productions.biz/docs/smallguy.asl > > Basically the entire reason for this is that the code calls the > external method: > External (\_SB_.PCI0.GFX0.LCD_.BLNF, MethodObj) > > When I press the backlight function keys and they don't do anything > besides displaying a Namespace lookup error since that method is not > defined. No one responded to my previous email about creating an > external method that would get called. Getting the right _OSI name > set just allows it to go to the fallback code that works with > acpi_fujitsu. > > ACPI Error (psargs-0459): [\_SB_.PCI0.GFX0.LCD_.BLNF] Namespace lookup > failure, AE_NOT_FOUND > ACPI Error (psparse-0626): Method parse/execution failed [\_GPE._L1C] > (Node 0xff ffff00011bd780), AE_NOT_FOUND ACPI Exception (evgpe-0687): > AE_NOT_FOUND, while evaluating GPE method [_L1C] [20070320] The problem is that ACPI-CA matches "Windows 2006" internally and thus sets OSTB to 0x40. The garbage you were using for _OSI must have made it always fail. You probably will need to just patch your ASL and/or figure out what BLNF does and implement it. Perhaps check to see what folks with Linux are seeing with this laptop as it has the same ACPI-CA code. -- John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200803101753.51267.jhb>