acpi no sound, acpi disabled no serial on IBM kiosk

John Baldwin jhb at freebsd.org
Wed Jul 23 18:46:12 UTC 2008


On Tuesday 22 July 2008 06:52:38 pm Brock Williams wrote:
> On Tuesday 22 July 2008 4:47:58 pm Nate Lawson wrote:
> > John Baldwin wrote:
> > > On Tuesday 22 July 2008 05:28:45 pm Brock Williams wrote:
> > >> Yeah, I guess I should have said more about the problem.  in the ACPI
> > >> case I do see the devices there, but they don't work.  For example,
> > >> the machine has an elotouch touchscreen which works great w/o ACPI
> > >> but doesn't with. When I try to cat the device with ACPI enabled,  I
> > >> get nothing.  Without acpi I get the expected touchscreen data when
> > >> touching the screen.  We also have a dallas ibutton reader hooked up
> > >> to another port and it acts the same way.
> > >
> > > Hmm, they seem to have all the same I/O resources (ports and IRQs), so
> > > I don't see anything that would make them not work.  Also, there isn't
> > > anything in the AML for these devices that I can see that would help
> > > (no _INI or _REG methods, etc.).
> >
> > Just to confirm -- you are switching the device names when you "cat the
> > device", right (sio0, 1, 2)?
> 
> Yep, I've tried cat'ing every cuad device that shows up, and I can't get 
> data out of any of them when I enable acpi. Also while catting with ACPI I 
> regularly get a message like:
> 
> sio1: 5 more silo overflows (total 5)
> 
> Thanks for the help,

Oh, it looks like your brain-damaged BIOS has told us that the interrupts are 
active-low instead of active-high, so you probably aren't getting any 
interrupts.  Stupid BIOS writers.  A quick hack would be to #if 0 the call 
to 'acpi_config_intr()' in acpi_alloc_resource() in sys/dev/acpica/acpi.c.  
You could also patch your ASL by fixing each "PNP0501" device like so:

--- brock-ibm-anyplace.asl.orig 2008-07-23 10:20:57.000000000 -0400
+++ brock-ibm-anyplace.asl      2008-07-23 10:21:29.000000000 -0400
@@ -5307,7 +5307,7 @@
                             0x00,               // Alignment
                             0x08,               // Length
                             _Y0F)
-                        IRQ (Edge, ActiveLow, Shared, _Y10)
+                        IRQ (Edge, ActiveHigh, Shared, _Y10)
                             {}
                     })
                     CreateByteField (BUF1, \_SB.PCI0.UAR1._CRS._Y0F._MIN, 
IOLO)

Unfortunately, there are some systems where we really need the 
acpi_config_intr() to work (some serial ports on ia64 machines have 
interrupts that are level/low like PCI interrupts, and w/o the 
acpi_config_intr() call they end up being edge/high), so we can't just 
disable them altogether in FreeBSD proper.

-- 
John Baldwin


More information about the freebsd-acpi mailing list