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