I am presuming this specification provides a standard Power Management mechanism for all PCI devices, and it is possible to manage power for PCI devices that the kernel does not have drivers for.
This presumption is incorrect. The PCI specification defines power management to the level under the control of a PCI card, which allows you to get down to the D3warm state. However, D3cold is fundamentally outside the PCI spec - the entire point is to cut power to the PCI device entirely, and that can't be done on-device because how would you wake it back up? That has to be controlled by the platform instead (even the chipset doesn't know how power rails are wired up!). The normal ACPI method for _OFF will simply be a single write to a GPIO line that will turn off the power, and the _ON method will be similarly trivial. Of course, it could be more complicated than that - some devices may have more complicated power sequencing requirements and could be fed by multiple power rails, so having this be code rather than a static table of GPIO mappings is still preferable.
no subject
This presumption is incorrect. The PCI specification defines power management to the level under the control of a PCI card, which allows you to get down to the D3warm state. However, D3cold is fundamentally outside the PCI spec - the entire point is to cut power to the PCI device entirely, and that can't be done on-device because how would you wake it back up? That has to be controlled by the platform instead (even the chipset doesn't know how power rails are wired up!). The normal ACPI method for _OFF will simply be a single write to a GPIO line that will turn off the power, and the _ON method will be similarly trivial. Of course, it could be more complicated than that - some devices may have more complicated power sequencing requirements and could be fed by multiple power rails, so having this be code rather than a static table of GPIO mappings is still preferable.