第 1 部分针对 Oracle Solaris 平台设计设备驱动程序
9. 直接内存访问 (Direct Memory Access, DMA)
14. 分层驱动程序接口 (Layered Driver Interface, LDI)
图 12-1 说明了电源管理框架中的控制流程。
完成组件活动后,驱动程序可以调用 pm_idle_component(9F) 将该组件标记为空闲。如果组件在其阈值时间内一直处于空闲状态,则框架可以将该组件的能耗降低到下一个较低级别。框架调用 power(9E) 函数将组件的能耗设置为支持的下一个较低电源级别(如果存在较低级别)。当组件处于繁忙状态时,驱动程序的 power(9E) 函数应拒绝任何降低该组件电源级别的尝试。在转换到较低级别之前 power(9E) 函数应保存可能在转换过程中丢失的任何状态。
需要较高级别的组件时,驱动程序将调用 pm_busy_component(9F)。此调用将阻止框架进一步降低能耗,然后针对组件调用 pm_raise_power(9F)。在对 pm_raise_power(9F) 的调用返回之前,框架接着调用 power(9E) 以提高组件的能耗。驱动程序的 power(9E) 代码必须恢复在较低级别中丢失、但在较高级别中需要的任何状态。
分离某个驱动程序时,该驱动程序应针对每个组件调用 pm_lower_power(9F),以将其能耗降低到最低级别。在对 pm_lower_power(9F) 的调用返回之前,框架可以随后调用驱动程序的 power(9E) 例程以降低组件的能耗。
图 12-1 电源管理概念状态图