Realtek以太网卡DSM功能的实现

DSM:Deep Slumber Mode

 

Realtek公司2007年开始,在他们的以太网卡上推出了一项新技术,就是DSM功能,这项技术主要针对笔记本平台。简单来说,就是如果网线没有插时,就需要让网卡断电或者进入深度睡眠模式,以节省功耗来延长电池的使用寿命。整个流程很简单,但是我实现起来却走了不少弯路。网卡主要提供了一个DSM_en的bit(IO base + offset 6Dh bit 7), 还有2个GPIO,一个是LAN_Link, 另一个是LAN_DSM,分别对应SB GPIO8 和GPIO13.主要步骤如下:

 

(1)在POST过程中把DSM_en位置为1.

(2)在OS下,如果网线有插,LAN_LINK为高电平,否则为低电平。

        当LAN_link的状态发生变化时,必须发出一个GPE event出来,然后在GPE event里去设置LAN_DSM位。

        需要注意的地方有2点:

        1. 南桥的GPIO只能水平触发GPE event(高电平或者低电平), 所以每次都必须在event完毕的时候更改GPIO8的触发模式。

        2. ASL代码里,变量路径设置不对或者没有设置时,编译时不会报错,但是在执行这行代码时却会因为出错而跳过去。

 

     Method(_L18)     // GPIO8 = LAN link event
    {
                     Store(0x18, P80H)
                     Xor(/_SB.PCI0.LPC0.GNV8, 1, /_SB.PCI0.LPC0.GNV8) //trigger SCI when GPIO8 value change

                     If(/_SB.PCI0.LPC0.GP08)                                                      //if cable plug
                    {
                                Store(0, /_SB.PCI0.LPC0.GO13)
                                Sleep(100)                                                                //need wait 100ms after VCC33 high
                     }
                    Else                                                                                       //if cable unplug
                    {
                                Store(1, /_SB.PCI0.LPC0.GO13)
                     }

                    Notify(/_SB.PCI0.EXP1,0)
    }

(3)在S3回来时,需要去restore DSM_en这个bit。

        在restore时,我遇到了麻烦,因为code一直跑到_WAK这个method里,网卡的IO 资源都处于丢失状态,而进入OS之后

        , IO又有回来,证明是OS来管理网卡的资源的。所以在BIOS里,我们需要再给网卡分一次IO资源后,才能去访问到

        DSM_en这个bit。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值