applestar666
发表于 2023-4-15 11:48
lwx1901 发表于 2023-4-14 13:03 https://bbs.pcbeta.com/static/image/common/back.gif
应该不会,有错必纠嘛
试过了,usb 还是失灵了
lwx1901
发表于 2023-4-15 22:13
本帖最后由 lwx1901 于 2023-4-15 22:27 编辑
applestar666 发表于 2023-4-15 11:48 https://bbs.pcbeta.com/static/image/common/back.gif
试过了,usb 还是失灵了
检查对比一下我的定义方法与你的不同之处:我在调试中发现,各USB端口也必须同时引入_PLD函数(顾名思义:设备物理位置,照搬各端口原_PLD函数代码段过来即可)
applestar666
发表于 2023-4-16 00:13
本帖最后由 applestar666 于 2023-4-16 00:34 编辑
lwx1901 发表于 2023-4-15 22:13 https://bbs.pcbeta.com/static/image/common/back.gif
检查对比一下我的定义方法与你的不同之处:我在调试中发现,各USB端口也必须同时引入_PLD函数(顾名思义: ...
_PLD 我没加,我加下_PLD 原始代码是这样的
Method (_PLD, 0, NotSerialized)// _PLD: Physical Location of Device
{
If (((UMAP & One) == One))
{
Return (GPLD (One, One))
}
Else
{
Return (GPLD (Zero, One))
}
}
话说有 _ADR 还不够吗,还需要这个 _PLD 这个物理地址吗,如果不加会有什么影响呢
applestar666
发表于 2023-4-16 00:38
lwx1901 发表于 2023-4-15 22:13 https://bbs.pcbeta.com/static/image/common/back.gif
检查对比一下我的定义方法与你的不同之处:我在调试中发现,各USB端口也必须同时引入_PLD函数(顾名思义: ...
还有话说不是新定义个 RHU0 吗,怎么还是在 RHUB 下
lwx1901
发表于 2023-4-16 00:50
本帖最后由 lwx1901 于 2023-4-16 00:54 编辑
applestar666 发表于 2023-4-16 00:38 https://bbs.pcbeta.com/static/image/common/back.gif
还有话说不是新定义个 RHU0 吗,怎么还是在 RHUB 下
我是已将自定义端口类型代码通过系统判断整合进原RHUB集线器,加入的自定义代码仅对macOS生效,If (OSDW ()){新加入的定制端口类型代码段) Else {原代码段},通过此方式已经使RHUB符合ACPI规范,故RHUB集线器不再需要屏蔽(保持默认启用状态,开机不会再卡内核)。这样RHUB集线器设备名称就原样保持与macOS兼容一致(白果机XHC和TXHC下集线器名称就叫RHUB)。故不再需要新增定义RHU0集线器了。
applestar666
发表于 2023-4-16 00:55
lwx1901 发表于 2023-4-16 00:50 https://bbs.pcbeta.com/static/image/common/back.gif
我是已将自定义端口类型代码通过系统判断整合进原RHUB集线器,加入的自定义代码仅对macOS生效,If (OSDW...
明白了,你看看我现在的代码结构有问题吗
applestar666
发表于 2023-4-16 00:59
lwx1901 发表于 2023-4-16 00:50 https://bbs.pcbeta.com/static/image/common/back.gif
我是已将自定义端口类型代码通过系统判断整合进原RHUB集线器,加入的自定义代码仅对macOS生效,If (OSDW...
还有有了 _ADR 还不够吗,还需要这个 _PLD 这个物理地址吗,如果不加会有什么影响呢
applestar666
发表于 2023-4-16 01:04
补充下 hackintool 的图
applestar666
发表于 2023-4-16 01:05
applestar666 发表于 2023-4-16 01:04 https://bbs.pcbeta.com/static/image/common/back.gif
补充下 hackintool 的图
internal 的那个是蓝牙 usb
lwx1901
发表于 2023-4-16 11:27
applestar666 发表于 2023-4-16 00:13 https://bbs.pcbeta.com/static/image/common/back.gif
_PLD 我没加,我加下_PLD 原始代码是这样的
Method (_PLD, 0, NotSerialized)// _PLD: Physical Lo ...
_STA函数放在RHU0范围内即可,就放一个,不要每个USB端口都放,放了也没用。
applestar666
发表于 2023-4-16 12:43
lwx1901 发表于 2023-4-16 11:27 https://bbs.pcbeta.com/static/image/common/back.gif
_STA函数放在RHU0范围内即可,就放一个,不要每个USB端口都放,放了也没用。
是的,我是这么处理的
lwx1901
发表于 2023-4-16 15:48
本帖最后由 lwx1901 于 2023-4-16 19:07 编辑
applestar666 发表于 2023-4-16 12:43 https://bbs.pcbeta.com/static/image/common/back.gif
是的,我是这么处理的
我把调试好的修补SSDT传上来,你可以结合原机DSDT及相关原机SSDT参考比较,希望能帮到你:
注意程序代码树形结构:
applestar666
发表于 2023-4-16 21:21
lwx1901 发表于 2023-4-16 15:48 https://bbs.pcbeta.com/static/image/common/back.gif
我把调试好的修补SSDT传上来,你可以结合原机DSDT及相关原机SSDT参考比较,希望能帮到你:
谢谢,我学习下
lwx1901
发表于 2023-4-17 09:50
本帖最后由 lwx1901 于 2023-4-17 09:59 编辑
applestar666 发表于 2023-4-16 21:21 https://bbs.pcbeta.com/static/image/common/back.gif
谢谢,我学习下
照搬_PLD保留函数需要注意一个问题,就是它调用的预设函数GPLD 是否在\_SB.PCI0.XHC内或\_SB.PCI0.XHC.RHUB内定义,如果是在外部定义,则可以直接照搬,如果是在\_SB.PCI0.XHC或\_SB.PCI0.XHC.RHUB内定义的,在SSDT开头的调用声明中要明确好GPLD函数的具体路径位置,如:External (\_SB.PCI0.XHC_.GPLD,MethodObj)或 External (\_SB.PCI0.XHC_.RHUB.GPLD,MethodObj),而不是直接:External(GPLD,MethodObj)。所以要具体情况具体处理。
applestar666
发表于 2023-4-17 11:10
lwx1901 发表于 2023-4-17 09:50 https://bbs.pcbeta.com/static/image/common/back.gif
照搬_PLD保留函数需要注意一个问题,就是它调用的预设函数GPLD 是否在\_SB.PCI0.XHC内或\_SB.PCI0.XHC.RH ...
是在内部,我就在想这个问题,哈哈哈哈哈
Dynamix
发表于 2023-4-17 11:20
本帖最后由 Dynamix 于 2023-4-17 11:49 编辑
我用的这个方法直接通过GUPC 方法被调用的次数判断端口序号, 因为GUPC是序列化方法只能允许单线程调用上一个调用完成之前会一直等待,执行结束才允许下一个调用 所以每次调用重新执行时都会给变量 UPRT+1 这样被调用 的次数=USB端口序号 直接判断UPRT的值就可设置条件为特定端口设定状态和连接器类型,因为我的OEM表 _UPC 调用的GUPC用的是相对路径所以直接接将重 构的GUPC声明在 Scope (\){}
出处:https://github.com/daliansky/OC-little/issues/18
Dynamix
发表于 2023-4-17 11:37
lwx1901 发表于 2023-4-15 22:13 https://bbs.pcbeta.com/static/image/common/back.gif
检查对比一下我的定义方法与你的不同之处:我在调试中发现,各USB端口也必须同时引入_PLD函数(顾名思义: ...
你这个写首先就是冗余 其次就是在Method内创建 NameSpace 要用序列化定义 Serialized 在方法中没有其他操作的时候创建这个UPCP 不如直接If (OSDW) { Return (Package(){255,9,0,0}) }Else{Return (GUPC (1,255))}
lwx1901
发表于 2023-4-17 12:51
本帖最后由 lwx1901 于 2023-4-17 13:07 编辑
Dynamix 发表于 2023-4-17 11:37 https://bbs.pcbeta.com/static/image/common/back.gif
你这个写首先就是冗余 其次就是在Method内创建 NameSpace 要用序列化定义 Serialized 在方法中没有其他 ...
主要是Else {..........}部分我考虑的是不改动原机代码段全部照搬过来,尽可能减少对非macOS系统的影响。另外,参考白果机ACPI,自定义操作系统判断函数OSDW:
Scope (\)
{
Method (OSDW, 0,Serialized)
{
If (_OSI ("Darwin"))
{
Return (One)
}
Return (Zero)
}
}
白果笔记本是用OSYS = 2710来作为判断条件,由于我的笔记本需要兼顾OSYS<=07DF以驱动触控板,故不能完全照搬白果笔记本的OSYS =2710作为OSDW函数的判定条件。
Dynamix
发表于 2023-4-17 13:49
本帖最后由 Dynamix 于 2023-4-17 13:55 编辑
lwx1901 发表于 2023-4-17 12:51 https://bbs.pcbeta.com/static/image/common/back.gif
主要是Else {..........}部分我考虑的是不改动原机代码段全部照搬过来,尽可能减少对非macOS系统的影响。 ...
我说的是UPC方法里面创建 UPCP再返回UPCP多此一举 而且 在方法内部创建以外部声明的形式对象需要将方法定义为序列化 (Serialized 而不是 NotSerialized)另外当OSPM评估方法时初始化命名空间效率也更低, 直接返回Package更高效 , 或者把UPCP以内部变量形式声明 例如 Local0 = Package(){255,9,0,0}然后再Return (Local0)
lwx1901
发表于 2023-4-17 15:05
本帖最后由 lwx1901 于 2023-4-17 15:21 编辑
Dynamix 发表于 2023-4-17 13:49 https://bbs.pcbeta.com/static/image/common/back.gif
我说的是UPC方法里面创建 UPCP再返回UPCP多此一举 而且 在方法内部创建以外部声明的形式对象需要将方法定 ...
确实如此,正解,先定义UPCP再返回UPCP,执行环节多了点,效率是不高,按你的思路作优化修改,谢谢指导!是否正确?