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