Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 21 Aug 2003 12:22:14 -0700
From:      Marcel Moolenaar <marcel@xcllnt.net>
To:        John Baldwin <jhb@freebsd.org>
Cc:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   Re: PERFORCE change 36551 for review
Message-ID:  <20030821192214.GA25805@ns1.xcllnt.net>
In-Reply-To: <20030821173225.GA780@dhcp42.pn.xcllnt.net>
References:  <20030821164706.GA566@dhcp42.pn.xcllnt.net> <XFMail.20030821131303.jhb@FreeBSD.org> <20030821173225.GA780@dhcp42.pn.xcllnt.net>

next in thread | previous in thread | raw e-mail | index | archive | help
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@xcllnt.net



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030821192214.GA25805>