黑苹果-ssdt屏蔽独显的一次记录

先说我电脑的基本情况

在这里插入图片描述
众所周知,我的2060独显是没救了,不仅如此,还要考虑屏蔽它的情况(很多人说装完笔记本很烫,建议可以往独显屏蔽不完全这方面考虑一下)。最开始的时候,我花了10块钱在某鱼上,请求帮忙屏蔽独显,他给我加了个 -wegnoegpu的参数。我不知道其他电脑情况如何,但是我的电脑是没有效果的,风扇该转还是转(异常情况,开机什么都没干转速就很高(也不是在搞元数据索引))。所以最终他也表示无能为力,因此我只能从ssdt下手了

寻找ssdt

我在获取了我的acpi表后,一个一个找,依然没有找到网上所说的在独显路径(通过win的设备管理器里看)下的_off方法,但是我找到了nvdtable,这个记录了很多我独显路径的定义,方法。但是依然没有_off方法,就很失望。但是发现有_ps3(我的理解里是电脑进入s3会执行的)方法

成功屏蔽了独显

找到了貌似相关的方法后,我就赶紧新建ssdt,模板套进去,新建一个_ini(代表了初始化)方法,方法体只调用ps3(),发现这么糙的操作居然到mac下真的风扇就不怎么转了,都是我真的高度运行软件的时候才会发烫。然后我就没去管了

关于睡眠的问题

因为我很少去睡眠,所以基本不考虑睡眠会带来什么问题。但是偶然一次睡眠尝试我发现在睡完后温度就高起来了,当时第一反应就是独显可能又开启了。因为我只在_ini在调用了ps3,所以我不了解是否是睡眠里的方法(_wak)调用了类似ps0的方法
为此,需要重写_wak。感谢互联网,发现通过补丁方式将_wak重命名成_zwak,然后自己写_wak,调用_zwak的内容+自己想写的内容(其实就是热补丁,但是我却啥也不知道)。最终就是_ini和_wak分别调用一次ps3,_pts调用ps0(进入睡眠时需要开启独显,但是不会导致睡眠高温)

最终即使睡眠独显依然是屏蔽状态。

具体代码

设备名称用于其他方法调用这个ssdt时使用。

/*
	ssdt-NDGP
*/
DefinitionBlock ("", "SSDT", 2, "OCLT", "NDGP", 0x00000000)
{
    External (_SB_.PCI0.PEG0.PEGP._DSM, MethodObj)    // 4 Arguments
    External (_SB_.PCI0.PEG0.PEGP._PS0, MethodObj)    // 0 Arguments
    External (_SB_.PCI0.PEG0.PEGP._PS3, MethodObj)    // 0 Arguments

    Device (DGPU)
    {
        Name (_HID, "DGPU1000")  // _HID: Hardware ID
        Method (_STA, 0, NotSerialized)  // _STA: Status
        {
            If (_OSI ("Darwin"))
            {
                Return (0x0F)
            }
            Else
            {
                Return (Zero)
            }
        }

        Method (_INI, 0, NotSerialized)  // _INI: Initialize
        {
            _OFF ()
        }

        Method (_ON, 0, NotSerialized)  // _ON_: Power On
        {
            If (CondRefOf (\_SB.PCI0.PEG0.PEGP._PS0))
            {
                \_SB.PCI0.PEG0.PEGP._PS0 ()
            }
        }

        Method (_OFF, 0, NotSerialized)  // _OFF: Power Off
        {
            If (_OSI ("Darwin"))
            {
                If ((CondRefOf (\_SB.PCI0.PEG0.PEGP._DSM) && CondRefOf (\_SB.PCI0.PEG0.PEGP._PS3)))
                {
                    \_SB.PCI0.PEG0.PEGP._DSM (ToUUID ("a486d8f8-0bda-471b-a72b-6042a6b5bee0") /* Unknown UUID */, 0x0100, 0x1A, Buffer (0x04)
                        {
                             0x01, 0x00, 0x00, 0x03                           // ....
                        })
                    \_SB.PCI0.PEG0.PEGP._PS3 ()
                }
            }
            Else
            {
            }
        }
    }
}

/*
 ssdt-ptswak   
*/

DefinitionBlock ("", "SSDT", 2, "OCLT", "PTSWAK", 0x00000000)
{
    External (DGPU._OFF, MethodObj)    // 0 Arguments
    External (DGPU._ON_, MethodObj)    // 0 Arguments
    External (ZPTS, MethodObj)    // 1 Arguments
    External (ZWAK, MethodObj)    // 1 Arguments

    Method (_PTS, 1, NotSerialized)  // _PTS: Prepare To Sleep
    {
        If (_OSI ("Darwin"))
        {
            If (CondRefOf (\DGPU._ON))
            {
                \DGPU._ON ()
            }
        }

        ZPTS (Arg0)
    }

    Method (_WAK, 1, NotSerialized)  // _WAK: Wake
    {
        If (_OSI ("Darwin"))
        {
            If (CondRefOf (\DGPU._OFF))
            {
                \DGPU._OFF ()
            }
        }

        Local0 = ZWAK (Arg0)
        Return (Local0)
    }
}

感谢

  • daliansky: oc-liitle
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@957

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值