免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1896 | 回复: 0
打印 上一主题 下一主题

zz一篇solaris电源管理的博客 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-27 20:16 |只看该作者 |倒序浏览

最近在测试solaris电源管理时发现了两片牛人的博客,转载一下
More Power to You
Typically, I wonder if my posts are more small snippits of tidbits (ahhh, Kibbles and Bits!!!!), but here is a bit more.
The Solaris operating environment supports various aspects of power management, including Suspend and Resumve (a.k.a. CheckPoint and Resume, or CPR), and soon, so will Solaris on x86 (much of which will go through the ACPI interfaces). It is, therefore, important that your drivers support the Solaris power management interfaces:

  • DDI_SUSPEND (a flag passed to detatch(9e))
  • DDI_RESUME (a flag passed to attach(9e))
  • power(9e) (a driver entry point)

Much on these interfaces can be found at
http://docs.sun.com
, or on the relevant man pages for the attach(9e), detatch(9e), and power(9d) man pages.
But in a nutshell, DDI_SUSPEND and DDI_RESUME cases should handle the saving and restoring of hardware state before a device is shutdown or restored after a shutdown. And power(9e) is the procedure that Power Management framework functions will call when it wants to manage components that provide power management facilities in the hardware.
the power(9e) entry point also works in conjunction with:

  • pm_lower_power(9f) - Lower power on a component
  • pm_raise_power(9f) - Raise power on a component
  • pm_busy_component(9f) - Indicate that the component is busy
  • pm_idle_component(9f) - Indicate that the component is idle
  • pm_create_components(9f) - Create manageble components
  • pm_destroy_components(9f) - Destroy manageble components

So are you writing a driver, and expect it to work with Solaris Power Management. Well, the first and most important part of this equasion is that you MUST implement the DDI_SUSPEND and DDI_RESUME commands to the attach and detach routines in your driver. And in this section of the code, it is important to take information from the hardware, and save it into kernel memory (maybe a pointer within the driver soft state). On resume, all that is necessary, is to take this saved state, and put it back in the hardware:
xxx_detach() [
     switch (cmd) {            
     case DDI_SUSPEND:
          /* Save hardware state */
          if (OK)
             return (DDI_SUCCESS);
          else
             return (DDI_FAILURE);
          break;
     case DDI_DETACH:
          /* Do attach processing */
          if (OK)
             return (DDI_SUCCESS);
          else
             return (DDI_FAILURE);
          break;
     default:
          /* Shouldn't be here */
          return (DDI_VAILURE);
      }
xxxattach() {
     case DDI_RESUME:
          /* Restore hardware state */
          /* See the return related information in detach */
          break;
     case DDI_DETACH:
          /* Do attach processing */
     default:
          /* Shouldn't be here */
          return (DDI_FAILURE);
     }
Of course, the relevent hardware information needed to save and/or restore the driver after a suspend/resume needs to be put inside the DDI_SUSPEND/DDI_RESUME case, and cannot really be presented here. However, if a the driver is written well, it can very well have a drv_suspend() function, (or even a save_state or restore_state function), and the attach/detach routines become very easy to manage.
And should your driver be able to handle various power states, say a laptop framebuffer that allows for the backligh to be at lower intensity, or a disk driver that allows for the drive to spin down, then you must also implement the power(9e) entry point and many of the pm_* routines above (gotta register the components, and let the Solaris power management framework know when they are idle).
But alas, this may be a lot of thinking for a day, so maybe it is time for a California Pale Ale!
OK, there really isn't a category for a California Pale Ale, but one of the classic Pale Ales from California, is the Sierra Nevada Pale Ale. Light and crisp, with a hit of hop fruitiness. A great ale for a fine fall day.
And sometime later, I will add some more details to Power Mangement
Do you have some questions or suggestions, just add a comment, I will happily elaborate more!


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/58855/showart_1751741.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP