pci_save_config_regs(9F)




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

     Solaris DDI-specific (Solaris 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  con-
     text.


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(5) for descriptions of the  following  attri-
     butes:

     ____________________________________________________________
    |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
    |_____________________________|_____________________________|
    | Interface Stability         | Evolving                    |
    |_____________________________|_____________________________|


SEE ALSO

     attributes(5), power(9E)

     Writing Device Drivers

     PCI Bus Power Management Interface Specification Version 1.1

     PCI Bus Specification Revision 2.1


Man(1) output converted with man2html