cvs commit: src/sys/dev/acpica acpi_pci.c src/sys/dev/pci pci.c pci_private.h

John Baldwin jhb at FreeBSD.org
Wed Sep 17 12:35:43 PDT 2003


On 17-Sep-2003 Doug Rabson wrote:
> On Wed, 2003-09-17 at 15:58, John Baldwin wrote:
>> On 17-Sep-2003 Mitsuru IWASAKI wrote:
>> > iwasaki     2003/09/17 01:32:44 PDT
>> > 
>> >   FreeBSD src repository
>> > 
>> >   Modified files:
>> >     sys/dev/acpica       acpi_pci.c 
>> >     sys/dev/pci          pci.c pci_private.h 
>> >   Log:
>> >   Add pci_resume() to reestablish interrupt routing after
>> >   suspend/resume.
>> >   Especially after hibernation, interrupt routing went back to initial
>> >   status on some machines.
>> 
>> The values in memory should still be the same, so it should be sufficient
>> simply to write back the already existent intline value back to the
>> register.  IOW, you shouldn't hae to call PCI_ASSIGN_INTERRUPT(), but
>> should do something more like:
>> 
>>         if (cfg->intpin > 0 && PCI_INTERRUPT_VALID(cfg->intline))
>>                 pci_write_config(child, PCIR_INTLINE, cfg->intline, 1);
>> 
>> Eventually pci_suspend/resume should be saving and restoring all of the
>> header registers and known capability registers for child devices.
> 
> How will this re-establish irq routing? The intline register is just
> informative - don't you have to re-program the host chipset via acpi or
> pcibios?

For the APIC case, there is no programming, it's hardwired on the board.
For actual link devices, I'm inclined to think that they should have their
own suspend/resume methods at the device level for each link device.
This means that the $PIR code would have to be smarter and use link devices
like the ACPI code does though.

-- 

John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/


More information about the cvs-src mailing list