The system calls attach(9E) to attach a device instance to the system or to resume operation after power has been suspended. The driver's attach(9E) entry point should handle these commands:
DDI_ATTACH: Initialize the device instance.
DDI_PM_RESUME: Restore the hardware state of a device after the device has been suspended.
DDI_RESUME: Restore the hardware state of a device after the system has been suspended.
When power is restored to the device that was suspended with DDI_PM_SUSPEND, that device is resumed using the DDI_PM_RESUME command. The device driver should restore the hardware state, set up timeouts again if necessary, and enable interrupts again.
The DDI_PM_RESUME code should make no assumptions about the state of the hardware, which may or may not have lost power.
When power is restored to the system or the system is unquiesced, each device that was suspended will be resumed using the DDI_RESUME command. The device driver should restore the hardware state, set up timeouts again if necessary, and enable interrupts again.
If the device is still suspended by DDI_PM_SUSPEND, the driver has to enter a state where it will call ddi_dev_is_needed(9F) for any new or pending requests, since an attach(9E) with DDI_PM_RESUME is still forthcoming.
The resume code should make no assumptions about the state of the hardware, which may or may not have lost power.