Kernel Functions for Drivers ddi_dev_is_needed(9F)
NAME
ddi_dev_is_needed - inform the system that a device's com-
ponent is requiredSYNOPSIS
#include
#include
int ddi_dev_is_needed(dev_info_t *dip, int component, int level);
INTERFACE LEVEL
Solaris DDI specific (Solaris DDI)PARAMETERS
dip Pointer to the device's dev_info structure.
component Component of the driver which is needed. level Power level at which the component is needed.DESCRIPTION
The ddi_dev_is_needed() function is obsolete and will be
removed in a future release. It is recommended that devicedrivers use pm_raise_power(9F) and pm_lower_power(9F).
The ddi_dev_is_needed() function informs the system that a
device component is needed at the specified power level. Thelevel argument must be non-zero.
This function sets a component to the required level and sets all devices which depend on this to their normal power levels.The state of the device should be examined before each phy-
sical access. The ddi_dev_is_needed() function should be
called to set a component to the required power level if the operation to be performed requires the component to be at a power level other than its current level.The ddi_dev_is_needed() function might cause re-entry of the
driver. Deadlock may result if driver locks are held acrossthe call to ddi_dev_is_needed().
SunOS 5.11 Last change: 7 Dec 2003 1
Kernel Functions for Drivers ddi_dev_is_needed(9F)
RETURN VALUES
The ddi_dev_is_needed() function returns:
DDI_SUCCESS Power successfully set to the requested
level.DDI_FAILURE An error occurred.
EXAMPLES
Example 1 disk driver code A hypothetical disk driver might include this code: static intxxdisk_spun_down(struct xxstate *xsp)
{return (xsp->power_level[DISK_COMPONENT] < POWER_SPUN_UP);
} static intxxdisk_strategy(struct buf *bp)
{ ...mutex_enter(&xxstate_lock);
/* * Since we have to drop the mutex, we have to do this in a loop * in case we get preempted and the device gets taken away from * us again */while (device_spun_down(sp)) {
mutex_exit(&xxstate_lock);
if (ddi_dev_is_needed(xsp->mydip,
XXDISK_COMPONENT, XXPOWER_SPUN_UP) != DDI_SUCCESS) {
bioerror(bp,EIO); biodone(bp); return (0); }mutex_enter(&xxstate_lock);
}xsp->device_busy++;
mutex_exit(&xxstate_lock);
... }SunOS 5.11 Last change: 7 Dec 2003 2
Kernel Functions for Drivers ddi_dev_is_needed(9F)
CONTEXT
This function can be called from user or kernel context.ATTRIBUTES
See attributes(5) for descriptions of the following attri-
butes:____________________________________________________________
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
|_____________________________|_____________________________|
| Interface Stability | Obsolete ||_____________________________|_____________________________|
SEE ALSO
pm(7D), pm-components(9P), attach(9E), detach(9E),
power(9E), pm_busy_component(9F), pm_idle_component(9F)
Writing Device DriversSunOS 5.11 Last change: 7 Dec 2003 3