PCI_SAVE_CONFIG_REGS(9F)                        Kernel Functions for Drivers
NAME
       pci_save_config_regs, pci_restore_config_regs - save and restore the
       PCI configuration registers
SYNOPSIS
       #include <sys/ddi.h>       #include <sys/sunddi.h>       int pci_save_config_regs(
dev_info_t *dip);       
int pci_restore_config_regs(
dev_info_t *dip);
INTERFACE LEVEL
       illumos DDI-specific (illumos DDI).
ARGUMENTS
       dip              Pointer to the device's 
dev_info structure.
DESCRIPTION
       pci_save_config_regs() saves the current configuration registers on
       persistent system memory. 
pci_restore_config_regs() restores
       configuration registers previously saved by 
pci_save_config_regs().       
pci_save_config_regs() should be called by the driver's 
power() entry
       point before powering a device off (to PCI state D3). Likewise,       
pci_restore_config_regs() should be called after powering a device on
       (from PCI state D3), but before accessing the device. See 
power(9E).
RETURN VALUES
       pci_save_config_regs() and 
pci_restore_config_regs() return:       
DDI_SUCCESS                      Operation completed successfully.       
DDI_FAILURE                      Operation failed to complete successfully.
CONTEXT
       Both these functions can be called from user or kernel context.
EXAMPLES
       Example 1: Invoking the save and restore functions
         static int
         xx_power(dev_info_t *dip, int component, int level) {
            struct xx *xx;
            int rval = DDI_SUCCESS;
            xx = ddi_get_soft_state(xx_softstate, ddi_get_instance(dip));
            if (xx == NULL) {
                return (DDI_FAILURE);
            }
            mutex_enter(&xx->x_mutex);
            switch (level) {
            case PM_LEVEL_D0:
                XX_POWER_ON(xx);
                if (pci_restore_config_regs(dip) == DDI_FAILURE) {
                    /*
                     * appropriate error path handling here
                     */
                    ...
                    rval = DDI_FAILURE;
                    }
                break;
            case PM_LEVEL_D3:
                if (pci_save_config_regs(dip) == DDI_FAILURE) {
                     /*
                      * appropriate error path handling here
                      */
                     ...
                     rval = DDI_FAILURE;
                     }
                 else {
                     XX_POWER_OFF(xx);
                 }
                 break;
             default:
                   rval = DDI_FAILURE;
                   break;
             }
             mutex_exit(&xx->x_mutex);
             return (rval);
         }
ATTRIBUTES
       See 
attributes(7) for descriptions of the following attributes:
       +--------------------+-----------------+
       |  ATTRIBUTE TYPE    | ATTRIBUTE VALUE |
       +--------------------+-----------------+
       |Interface Stability | Committed       |
       +--------------------+-----------------+
SEE ALSO
       attributes(7), 
power(9E)       Writing Device Drivers       PCI Bus Power Management Interface Specification Version 1.1       PCI Bus Specification Revision 2.1                                June 2, 2000        PCI_SAVE_CONFIG_REGS(9F)