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