Sun Microsystems, Inc.
spacerspacer
spacer   www.sun.com docs.sun.com | | |  
spacer
black dot
   
A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z
    
 
Kernel Functions for Driverspci_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 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(5) for descriptions of the following attributes:

ATTRIBUTE TYPEATTRIBUTE VALUE
Interface StabilityEvolving

SEE ALSO

 

attributes(5), power(9E)

Writing Device Drivers

PCI Bus Power Management Interface Specification Version 1.1

PCI Bus Specification Revision 2.1


SunOS 5.9Go To TopLast Changed 02 June 2000

 
      
      
Copyright 2002 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms.