What are the different address spaces a PCI driver can access?
A driver can access all three address spaces by setting up appropriate mappings and using the memory, I/O, or configuration space access routines provided in the DDI/DKI framework. A common example is during the driver attach routine: the driver could read the configuration space by setting up a mapping via the DDI call pci_config_setup(9f), and read/write to the configuration registers via the pci_config_get*/pci_config_put* routines.