PERFORCE change 36551 for review
Marcel Moolenaar
marcel at xcllnt.net
Thu Aug 21 12:22:22 PDT 2003
On Thu, Aug 21, 2003 at 10:32:25AM -0700, Marcel Moolenaar wrote:
>
> > If the UART devices raise an ISA interrupt, then by my reading,
> > the ACPI resource should specify the ISA interrupt number (0-15),
> > and the MADT should include a source override that maps that
> > ISA interrupt number to a global interrupt number of 66 or
> > whatever (which maps to a SAPIC:intpin).
>
> This makes sense. It's however not how it is (unfortunately).
The updated SPPA specification (HP's ia64 platform) has a section
devoted to the interrupt polarity and mode of the UART. It basicly
says this:
o The DIG64 HCDP table [supported] or the Mcrosoft SPCR table
[unsupported] tells whether the UART is a PCI device or not.
o PCI UARTs have level triggered, active low interrupts. They
are not described in ACPI then (reminder: this is SPPA).
o Non-PCI UARTs described in the ACPI namespace have interrupt
polarity and mode as described by _CRS in the device object!
o Non-PCI devices that are not decribed in the ACPI namespace
can still be mentioned in the HCDP table and we [FreeBSD]
will use the UART as console. Interrupt polarity and mode
should be assumed active low, level sensitive.
Currently we will panic the moment we try to go single-user
or multi-user because there will not be a device major number
assigned to the console. We need to catch this case someday.
So: It appears that we need to interpret the _CRS method, field
or whatever. Especially the Interrupt Descriptor.
Going to the source: in acpi_parse_resources() we need to create
a callback to MD code to tell it about polarity and mode. This
means tweaking the ACPI_RSTYPE_IRQ or ACPI_RSTYPE_EXT_IRQ cases.
Better would be to create bus methods for this (see for example
acpi_res_set_irq()).
--
Marcel Moolenaar USPA: A-39004 marcel at xcllnt.net
More information about the p4-projects
mailing list