本帖最后由 紫米 于 2011-10-15 22:01 编辑
[二] DSDT 修改部分
1. 可驅動 AppleIntelCPUPowerManagement.kext(修改 DSDT 和 更改 BIOS )
2. 重新啓動不重置 BIOS(修改 DSDT和 修改 AppleRTC.kext)
3. 磁碟內建識別(修改 DSDT)
4. 網路卡識別(修改DSDT)
5. kernel.log 無 FireWire 錯誤訊息(修改DSDT)
6. USB 識別正確識別為內建(修改DSDT)
7. 可關機斷電(修改 DSDT)
8. 可手動睡眠(修改 DSDT)
9. 可鍵盤、滑鼠、電源鍵喚醒(修改 DSDT)
「Lion 完善紀實之二」
在開始此章節前,請先深呼吸,然後在心中虔誠向你敬愛的蘋果之神禱告,
也許經過這一番折騰…你的慧根就會悄悄開啟。(當然!紫米是隨便說說)
DSDT 的修改確實比起前一章要困難許多,因為程式語言的部分很難用簡單的文字說明清楚。
儘管貼圖恐怕也很難解決大家看到一推作用不明的符號的恐懼…
所以,先談談一些紫米接觸到現在的一些經驗談。希望能祝你一臂之力更瞭解 DSDT 的作用。
首先,紫米不會 C 語言....也不會 Java…僅僅上過很初階 Visual Basic 網路應用程式。
所以,不用很懂程式語言…你仍然可以順利修改 DSDT。
感很像寫網頁用 html 標籤,你不用很懂為什麼要這樣寫,只要會剪剪貼貼,
然後請確認貼的位置不要太離譜....其他的事情電腦都能幫你解決…
既然這樣還有什麼好猶豫的…準備好救援系統…就放寬心一個一個修改就是了。
當然,如果你是剛接觸的朋友,紫米先建議你去看看 DSDT 修改討論 (技嘉) 02/04 更新 的帖子。
稍為瞭解一下 DSDT 大概的架構,再來進入這章閱讀…也許你會瞭解紫米在寫什麼?(這是紫米天真的幻想)
一般來說,DSDT 跟做數學題蠻像的,裡面會有 "定義" "公式" "假設" 再來就是一堆 "運算過程 " "證明題" "是非題" 架構。
而在修改 DSDT 的過程中我們一般不會去更動 "定義" "公式" "假設" 頂多去新增 "公式" 來幫助後來的過程。
於是乎,我們的動作就是在原本交給電腦去判斷或證明的過程中順著我們的意去執行我們內定的值。
以此來讓 Mac 運作順利。那麼現在就開始進入以下說明。
1. 可驅動 AppleIntelCPUPowerManagement.kext
AppleIntelCPUPowerManagement.kext 是有關於 Intel CPU 電源管理的插件。
若不能順利加載 AppleIntelCPUPowerManagement.kext 這個插件,那麼許多功能將會喪失。
這也是當然的… CPU 的存在…相當於主機的心臟。而導致不能順利加載這個插件的原因,
一般來說,就是你使用非 Intel Core 2 Duo 以上版本的 CPU …當然 AMD、Atom、Core Solo 等等就別多想了。
當然你可以強制修改內核…來解除限制,不過之後你也只能勉強地享受 Mac OS X 系統的功能…
對此…紫米建議你…要麼就狠下心買個蘋果來玩(蘋果系統值得玩玩)…
不然最起碼換成可以順利使用的 Intel Core 2 Duo 以上等級的主板來玩…
否則你拿著 那些根本就無法完善的板子來裝蘋果…我會建議你好好去玩 Win 吧…(生命就該浪費在美好的事物上!)
當然,也與主機板 BIOS 與 DSDT 中的值有關,所以請先使用 "文字編輯" 開啓 DSDT.dsl 檔案。
(當然…你可以使用你喜歡的編輯程式來編輯)
請先找尋到 Device (HPET) 這個部分,
<如果你找不到這個 HPET,請使用 PNP0103 這個值來搜尋>
然後在不更動紅色區塊的情況下,將 Device (HPET) { } 區域修改成以下的樣子。
因為紫米的兩塊技嘉主機板紅色區塊內值都一樣,所以就直接複製貼上。- Device (HPET)
- {
- Name (_HID, EisaId ("PNP0103"))
- Name (_STA, 0x0F)
- Name (_CRS, ResourceTemplate ()
- {
- IRQNoFlags ()
- {0}
- IRQNoFlags ()
- {8}
- Memory32Fixed (ReadWrite,
- 0xFED00000, // Address Base
- 0x00000400, // Address Length
- )
- })
- }
复制代码 有些主機板缺了下方四行幾段字符:- IRQNoFlags ()
- {0}
- IRQNoFlags ()
- {8}
复制代码 而無法順利加載 AppleHPET.kext 而導致在加載 AppleIntelCPUPowerManagement.kext 產生 Kernel Panic 的錯誤。
接著進入主機板的 BIOS > Power Management Setup 設定以下兩個選項。
HPET Support [Enabled]
HPET Mode [64-bit mode] <若是使用 64 位元系統請改成此設定>
如果你的主機板沒有這些選項,
也可以通過修改 org.chameleon.Boot.plist 添加 ForceHPET=Yes。 可強制啓用 HPET 功能。
最後,請確認你沒有在 /Extra/Extensions 或 /System/Library/Extensions 的位置加載以下插件:
NullCPUPowerManagement.kext
Disabler.kext
這些插件都是用來阻止加載 AppleIntelCPUPowerManagement.kext 的插件。
<驗證方式>
Turbo Ratios 的值沒有一定,
舊的 Core i7 9XX 系列是 1112
新的 Core i7 2XXX 系列是 6689
如果值不是以上兩種也請不要懷疑,就紫米查看 iMac Core i5 2.7 GHz,
Turbo Ratios 的值為 159A,所以一目前看來值變動很大。
2. 重新啓動不重置 BIOS
因為技嘉主機板使用 ACPI 1.0 的規範,在 DSDT 中可以看到 32-bit table (V1), no 64-bit math support。
也因此在加載 AppleRTC.kext 需要修改長度 0x04 變成 0x02。
請先使用 "文字編輯" 開啓 DSDT.dsl 檔案。並找到 Device (RTC) { } 這個區域。
<如果你找不到這個 RTC,請使用 PNP0B00 這個值來搜尋>
在不修改紅色區塊的情況下修改成以下的樣子。
以下提供紫米的參數:- Device (RTC)
- {
- Name (_HID, EisaId ("PNP0B00"))
- Name (_CRS, ResourceTemplate ()
- {
- IO (Decode16,
- 0x0070, // Range Minimum
- 0x0070, // Range Maximum
- 0x00, // Alignment
- 0x02, // Length
- )
- })
- }
复制代码 主要是把原本的
0x04, // Length
改成
0x02, // Length
這樣就行了。
然而升級到 Lion 後,你可能會遇上…睡眠然後喚醒之後執行重新啓動會發生重置 BIOS 的情況。
原因是 Lion 的 AppleRTC.kext 已經有些更動導致以上狀況發生。
所以,有兩種解決方式:
(1)使用舊版的 AppleRTC.kext
(2)使用終端機指令修改 AppleRTC.kext
開啓 "終端機"後,輸入以下指令:- sudo perl -pi -e 's|\x75\x30\x44\x89\xf8|\xeb\x30\x44\x89\xf8|; s|\x75\x3d\x8b\x75\x08|\xeb\x3d\x8b\x75\x08|' /System/Library/Extensions/AppleRTC.kext/Contents/MacOS/AppleRTC
复制代码 紫米是建議使用方法(2),
但無論是哪個方法,只要以後軟體更新有更動到 AppleRTC.kext 勢必都要再做一次以上的動作。
3. 磁碟內建識別
一般來說,黑 Mac 的磁碟在沒有修改的狀態會顯示成橙黃色外接硬碟。
所以需要透過修改裝置 ID,讓 SATA ICHX 辨識為 ESB2 AHCI 即可顯示為內建。
這裡究竟為什麼除了 ESB2 AHCI 外其他任一裝置代碼都會變成橙黃色外接硬碟的原因目前還不知。
一般來說技嘉的 SATA 位置在 Device (IDE1)
再者,使用 "文字編輯" 開啓 DSDT.dsl 檔案。並找到 Device (IDE1) { } 這個區域。
<如果你找不到這個 IDE1,請使用 0x001F0002 這個值來搜尋。>
添加 Method (_DSM, 4, NotSerialized) { } 至其中:
Method (_DSM, 4, NotSerialized) { } 參數:- Method (_DSM, 4, NotSerialized)
- {
- Store (Package (0x02)
- {
- "device-id",
- Buffer (0x04)
- {
- 0x81, 0x26, 0x00, 0x00
- }
- }, Local0)
- DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
- Return (Local0)
- }
复制代码 因為參數使用到 DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)),
這是呼叫 "DTGP 函數" 的指令,可以理解為這裡需要一個名為 "DTGP" 的公式來幫忙運算結果。
但是這是蘋果特有的 "公式",一般 PC 不會出現,如果不補上,DSDT 就會出錯。
所以需要補上 Mac 的 DSDT 獨特的 Method (DTGP, 5, NotSerialized) { } 來完整指令過程,
一般 DSDT 中較前方的位置會有許多 Method (XXX, X, XXX...) { } 格式的如前面紫米所說類似 “公式” 的函數群。
你只要把以下紅色區塊的位置的 Method (DTGP, 5, NotSerialized) { } 添加進去即可。
Method (DTGP, 5, NotSerialized) { } :- Method (DTGP, 5, NotSerialized)
- {
- If (LEqual (Arg0, Buffer (0x10)
- {
- /* 0000 */ 0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44,
- /* 0008 */ 0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
- }))
- {
- If (LEqual (Arg1, One))
- {
- If (LEqual (Arg2, Zero))
- {
- Store (Buffer (One)
- {
- 0x03
- }, Arg4)
- Return (One)
- }
- If (LEqual (Arg2, One))
- {
- Return (One)
- }
- }
- }
- Store (Buffer (One)
- {
- 0x00
- }, Arg4)
- Return (Zero)
- }
复制代码 4. 網路卡識別
網路卡識別不是驅動教學,只是讓網路卡可以成為內建識別。
網路卡內建識別了解決某些程式需要連接網路卻無法正常連接。(如:App Srore)
而此番修改的手法只是類似預先替網路卡為之所在位置作命名。
這樣 Mac 系統就會認定此張網路卡是內建。
要修改 DSDT 前,需要先驅動網路卡,因為 GA-965P-DS4 的網路卡可以原生驅動。
所以在此謹介紹 GA-EX58-UD5 的網路驅動方式。
首先,請先選擇你要安裝的驅動 RealtekR1000SL.kext 或 RealtekRTL81xx.kext。
目前的 RealtekRTL81xx.kext 有自動安裝版了,所以紫米只就 RealtekR1000SL.kext 來說明。
請先開啟 "終端機" 鍵入以下指令執行安裝動作:
- sudo cp -R + "拖曳檔案" + /System/Library/Extensions/IONetworkingFamily.kext/Contents/PlugIns
复制代码 在使用以下指令重建 Cache:<這個指令非常重要,重建 Cache 後,重新啓動新加入驅動才能被加載>
- sudo touch /System/Library/Extensions
复制代码 接著,請使用 IORegistryExplorer.app 查詢網路卡的位置。
<若你有安裝 Xcode,可以在 /Developer/Applications/Utilities 發現它>
一般來說技嘉的網路卡位置在 Device (PEX4)
再者,使用 "文字編輯" 開啓 DSDT.dsl 檔案。並找到 Device (PEX4) { } 這個區域。
在 Device (PEX4) { } 內添加參數 < GA-965P-DS4 >:
在 Device (PEX4) { } 內添加參數 < GA-EX58-UD5 >:
以下兩組參數其實各自 MacPro 5,1 與 iMac 8,1 的 DSDT 擷取。
參數 < GA-965P-DS4 >:- Device (GIGE)
- {
- Name (_ADR, Zero)
- Name (_PRW, Package (0x02)
- {
- 0x09,
- 0x03
- })
- }
复制代码 參數 < GA-EX58-UD5 >:- Device (ETH0)
- {
- Name (_ADR, Zero)
- Name (_PRW, Package (0x02)
- {
- 0x09,
- 0x03
- })
- Method (_DSM, 4, NotSerialized)
- {
- Store (Package (0x02)
- {
- "location",
- Buffer (0x02)
- {
- "1"
- }
- }, Local0)
- DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
- Return (Local0)
- }
- }
复制代码- Device (ETH1)
- {
- Name (_ADR, Zero)
- Name (_PRW, Package (0x02)
- {
- 0x09,
- 0x03
- })
- Method (_DSM, 4, NotSerialized)
- {
- Store (Package (0x02)
- {
- "location",
- Buffer (0x02)
- {
- "2"
- }
- }, Local0)
- DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
- Return (Local0)
- }
- }
复制代码 因為 GA-EX58-UD5 的參數使用到 DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)),
這是呼叫 "DTGP 函數" 的指令,可以理解為這裡需要一個名為 "DTGP" 的公式來幫忙運算結果。
但是這是蘋果特有的 "公式",一般 PC 不會出現,如果不補上,DSDT 就會出錯。
所以請至 3. 磁碟內建識別 後面,複製 Method (DTGP, 5, NotSerialized) { } 並貼上來完整指令過程。
<如果你已經在 3. 磁碟內建識別 操作過此項步驟,則可以略過。不需重復此步驟。>
基本上 GIGE、ETH0、ETH1 只是一個命名,並沒有規定一定得這樣。
這些名稱只是跟著 Mac 裡面的參數來命名。
<驗證方式>
5. kernel.log 無 FireWire 錯誤訊息
Mac OS X 系統在開機時會去讀取 FireWire 接口,因為 Mac 的 DSDT 有針對這個部分寫入一些參數是一般 PC 所沒有。
因此,會導致黑 Mac 在開機時會出現錯誤訊息。
開啟 IORegistryExplorer.app 查詢 FireWire 所在位置,
<非技嘉主機板,也許你的名稱就不是 HUB0>
將查詢到的值 (6) 以及裝置順序 PCI0 -> HUB0 -> FRWR 註記起來。
<非技嘉主機板,也許你的名稱就不是 0x00060000 >
<當然這邊你的路徑與值不會跟紫米一樣,如果出現是 pci-bridge 或 pciXXXX-XXXX 也別緊張,>
<之後,你都可以做命名的動作。>
接著,使用 "文字編輯" 開啓 DSDT.dsl 檔案。並找到 Device (HUB0) { } 這個區域。
<如果你找不到這個 HUB0,請使用 0x001E000 這個值來搜尋,或者是你剛剛搜尋的有命名的裝置名稱。>
添加 Device (FRWR) { } 至其中。
Device (FRWR) { } 參數:- Device (FRWR)
- {
- Name (_ADR, 0x00060000)
- Method (_DSM, 4, NotSerialized)
- {
- Store (Package (0x02)
- {
- "fwhub",
- Buffer (0x04)
- {
- 0x00, 0x00, 0x00, 0x00
- }
- }, Local0)
- DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
- Return (Local0)
- }
- }
复制代码 接著,找到 Scope (_GPE) { } 這個區域。
添加 Method (_L1A, 0, NotSerialized) { } 至其中。
Method (_L1A, 0, NotSerialized) { } 參數:- Method (_L1A, 0, NotSerialized)
- {
- Notify (\_SB.PCI0.HUB0.FRWR, Zero)
- }
复制代码 <請務必確認 \_SB.PCI0.HUB0.FRWR 裝置的順序與名稱是否與之前添加 Device (FRWR) 相符。>
最後,因為參數使用到 DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)),
這是呼叫 "DTGP 函數" 的指令,可以理解為這裡需要一個名為 "DTGP" 的公式來幫忙運算結果。
但是這是蘋果特有的 "公式",一般 PC 不會出現,如果不補上,DSDT 就會出錯。
所以請至 3. 磁碟內建識別 後面,複製 Method (DTGP, 5, NotSerialized) { } 並貼上來完整指令過程。
<如果你已經在 3. 磁碟內建識別 操作過此項步驟,則可以略過。不需重復此步驟。>
<驗證方式>
6. USB 識別正確識別為內建
USB 若能識別為內建可以讓睡眠喚醒後不會出現裝置未正常退出訊息外,也能解決部分睡眠時立即喚醒的問題。
而部分會出現 USB 為外接狀態多半是因為 PC 某些位置的裝置識別碼並不是 Mac 所使用。
而導致 Mac 系統認為接口是額外接上去的。此時,只要針對部分作修改即可。
一般來說 USB 位置與順序為:
表格說明
0x001D0000 | 0x001D0001 | 0x001D0002 | 0x001A0000 | 0x001A00001 | 0x001A00002 | 0x001D00007 | 0x001A00007 | USB0
0x3a34 | USB1
0x3a35 | USB2
0x3a36 | USB3
0x3a37 | USB4
0x3a38 | USB5
0x3a39 | USBE
0x3a3A | USE2
0x3a3C | USB0
0x2830 | USB1
0x2831 | USB2
0x2832 | USB3
0x2834 | USB4
0x2835 | | USBE
0x2836 | USE2
0x283A |
接著,將沒有識別為內建部分依照第一列的位址對應以下硬體裝置 ID,
然後在 DSDT 裡加上參數得以欺騙系統識別 USB 為內建。
使用 "文字編輯" 開啓 DSDT.dsl 檔案。
並找到 0x001D0000 這個區域添加 Method (_DSM, 4, NotSerialized) { } 參數:
Method (_DSM, 4, NotSerialized) { } 參數:- Method (_DSM, 4, NotSerialized)
- {
- Store (Package (0x02)
- {
- "device-id",
- Buffer (0x04)
- {
- 0x34, 0x3A, 0x00, 0x00
- }
- }, Local0)
- DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
- Return (Local0)
- }
复制代码 以上 0x34, 0x3A, 0x00, 0x00 請依據表格替換成需要參數。
然而,也有像 ICH8R 的高速 USB 2.0 接口雖然位置對了,但仍然會被顯示為外接。就需要在額外做些修改。
請對照 0x001D00007、0x001A00007 這兩個管理 USB 2.0 的裝置並添加以下參數:
USBE:- Method (_DSM, 4, NotSerialized)
- {
- Store (Package (0x04)
- {
- "AAPL,clock-id",
- Buffer (One)
- {
- 0x01
- },
- "device_type",
- Buffer (0x05)
- {
- "EHCI"
- }
- }, Local0)
- DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
- Return (Local0)
- }
复制代码 USE2:- Method (_DSM, 4, NotSerialized)
- {
- Store (Package (0x04)
- {
- "AAPL,clock-id",
- Buffer (One)
- {
- 0x02
- },
- "device_type",
- Buffer (0x05)
- {
- "EHCI"
- }
- }, Local0)
- DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
- Return (Local0)
- }
复制代码 如果有需要添加裝置參數和這個額外參數,請務必合併兩項(舉例):- Method (_DSM, 4, NotSerialized)
- {
- Store (Package (0x06)
- {
- "device-id",
- Buffer (0x04)
- {
- 0x36, 0x3A, 0x00, 0x00
- },
- "AAPL,clock-id",
- Buffer (One)
- {
- 0x01
- },
- "device_type",
- Buffer (0x05)
- {
- "EHCI"
- }
- }, Local0)
- DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
- Return (Local0)
- }
复制代码 因為參數使用到 DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)),
這是呼叫 "DTGP 函數" 的指令,可以理解為這裡需要一個名為 "DTGP" 的公式來幫忙運算結果。
但是這是蘋果特有的 "公式",一般 PC 不會出現,如果不補上,DSDT 就會出錯。
所以請至 3. 磁碟內建識別 後面,複製 Method (DTGP, 5, NotSerialized) { } 並貼上來完整指令過程。
<如果你已經在 3. 磁碟內建識別 操作過此項步驟,則可以略過。不需重復此步驟。>
<驗證方式>
7.可關機斷電
承接先前說明的,黑 Mac 在電源管理這個部分是有些問題的。
先前的重新啓動可以透過 Chameleon 來解決,但是關機的部分就必須花一些心思編輯 DSDT。
此次的編輯無法透過對照原 Mac DSDT 來修改,以下的參數及修改說明。
完全是國外的高手從 ACPI 裡面尋找到控制關機斷電的參數值,才造就以下成果。
首先,必須先找到控制關機斷電的參數值,然後將此值定義於 DSDT 中。
一般在 DSDT 前面部分就存在許多定義值。請在合適位置添加紅色區塊的定義值:
定義值為:- OperationRegion (PMRS, SystemIO, 0x0430, One)
- Field (PMRS, ByteAcc, NoLock, Preserve)
- {
- , 4,
- SLPE, 1
- }
复制代码 接著找到控制控制關機與睡眠的函數 Method (_PTS, 1, NotSerialized) { },
此處會進行是否進行關機的判斷,所以,我們必須寫入一些函數來告知系統,
如果,執行關機動作時,給予 SLPE 一個值即可控制系統關機:
函數值:- If (LEqual (Arg0, 0x05))
- {
- Store (0x99, SMIP)
- Store (Zero, SLPE)
- Sleep (0x10)
- }
复制代码 8. 可手動睡眠
9. 可鍵盤、滑鼠、電源鍵喚醒
因為,這兩項修改牽涉項目雷同,所以一併說明。
首先,PC 和 Mac 預設的睡眠方式不同...,也就是 S1 與 S3 的不同。(到了 Win7 預設也是 S3)
不過一般主機板的設定可能仍停留在 S1,所以請進入 BIOS 做設定。
找到 Power Management Setup 的 ACPI Suspend Type 將 S1 (POS) 改為 S3 (STR)
並順便將 Soft-Off by PWR-BTTN 由 Instant-Off 改為 Delay 4 Sec.
<以上 BIOS 操作是以技嘉為準,其他主板請找到相關參數改為上述的值>
<當然,筆記本的 BIOS 也許沒有這麼細的選系可供調整>
接著跟著修改 DSDT 中的 Device (USBX) { } 各個項目,
因為參數裡面的涉及範圍很多,我想先貼上所有參數再一一說明。
GA-EX58-UD5 的參數 <參考 Mac Pro 5,1 ICH10 修改模樣>:- Device (USB0)
- {
- Name (_ADR, 0x001D0000)
- Name (_PRW, Package (0x02)
- {
- 0x03,
- 0x03
- })
- OperationRegion (U1CS, PCI_Config, 0xC4, 0x04)
- Field (U1CS, DWordAcc, NoLock, Preserve)
- {
- U1EN, 2
- }
- Method (_PSW, 1, NotSerialized)
- {
- If (Arg0)
- {
- Store (0x03, U1EN)
- }
- Else
- {
- Store (Zero, U1EN)
- }
- }
- }
- Device (USB1)
- {
- Name (_ADR, 0x001D0001)
- Name (_PRW, Package (0x02)
- {
- 0x04,
- 0x03
- })
- OperationRegion (U2CS, PCI_Config, 0xC4, 0x04)
- Field (U2CS, DWordAcc, NoLock, Preserve)
- {
- U2EN, 2
- }
- Method (_PSW, 1, NotSerialized)
- {
- If (Arg0)
- {
- Store (0x03, U2EN)
- }
- Else
- {
- Store (Zero, U2EN)
- }
- }
- }
- Device (USB2)
- {
- Name (_ADR, 0x001D0002)
- Name (_PRW, Package (0x02)
- {
- 0x0C,
- 0x03
- })
- OperationRegion (U2CS, PCI_Config, 0xC4, 0x04)
- Field (U2CS, DWordAcc, NoLock, Preserve)
- {
- U3EN, 2
- }
- Method (_PSW, 1, NotSerialized)
- {
- If (Arg0)
- {
- Store (0x03, U3EN)
- }
- Else
- {
- Store (Zero, U3EN)
- }
- }
- }
- Device (USB3)
- {
- Name (_ADR, 0x001A0000)
- Name (_PRW, Package (0x02)
- {
- 0x0E,
- 0x03
- })
- OperationRegion (U4CS, PCI_Config, 0xC4, 0x04)
- Field (U4CS, DWordAcc, NoLock, Preserve)
- {
- U4EN, 2
- }
- Method (_PSW, 1, NotSerialized)
- {
- If (Arg0)
- {
- Store (0x03, U4EN)
- }
- Else
- {
- Store (Zero, U4EN)
- }
- }
- }
- Device (USB4)
- {
- Name (_ADR, 0x001A0001)
- Name (_PRW, Package (0x02)
- {
- 0x05,
- 0x03
- })
- OperationRegion (U5CS, PCI_Config, 0xC4, 0x04)
- Field (U5CS, DWordAcc, NoLock, Preserve)
- {
- U5EN, 2
- }
- Method (_PSW, 1, NotSerialized)
- {
- If (Arg0)
- {
- Store (0x03, U5EN)
- }
- Else
- {
- Store (Zero, U5EN)
- }
- }
- }
- Device (USB5)
- {
- Name (_ADR, 0x001A0002)
- Name (_PRW, Package (0x02)
- {
- 0x20,
- 0x03
- })
- OperationRegion (U6CS, PCI_Config, 0xC4, 0x04)
- Field (U6CS, DWordAcc, NoLock, Preserve)
- {
- U6EN, 2
- }
- Method (_PSW, 1, NotSerialized)
- {
- If (Arg0)
- {
- Store (0x03, U6EN)
- }
- Else
- {
- Store (Zero, U6EN)
- }
- }
- }
- Device (USBE)
- {
- Name (_ADR, 0x001D0007)
- Name (_PRW, Package (0x02)
- {
- 0x0D,
- 0x03
- })
- OperationRegion (U7CS, PCI_Config, 0x54, 0x02)
- Field (U7CS, WordAcc, NoLock, Preserve)
- {
- , 15,
- PMES, 1
- }
- OperationRegion (USBR, PCI_Config, 0x62, 0x02)
- Field (USBR, AnyAcc, NoLock, Preserve)
- {
- URE2, 9
- }
- Method (_PSW, 1, NotSerialized)
- {
- If (LEqual (Arg0, Zero))
- {
- Store (Zero, URE2)
- }
- If (LEqual (Arg0, One))
- {
- Store (0x01FF, URE2)
- }
- }
- Method (_DSM, 4, NotSerialized)
- {
- Store (Package (0x07)
- {
- "AAPL,current-available",
- 0x05DC,
- "AAPL,current-extra",
- 0x04B0,
- "AAPL,current-in-sleep",
- 0x09C4,
- Buffer (One)
- {
- 0x00
- }
- }, Local0)
- DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
- Return (Local0)
- }
- }
- Device (USE2)
- {
- Name (_ADR, 0x001A0007)
- Name (_PRW, Package (0x02)
- {
- 0x0D,
- 0x03
- })
- OperationRegion (U7CS, PCI_Config, 0x54, 0x02)
- Field (U7CS, WordAcc, NoLock, Preserve)
- {
- , 15,
- PMES, 1
- }
- OperationRegion (USBR, PCI_Config, 0x62, 0x02)
- Field (USBR, AnyAcc, NoLock, Preserve)
- {
- URE2, 9
- }
- Method (_PSW, 1, NotSerialized)
- {
- If (LEqual (Arg0, Zero))
- {
- Store (Zero, URE2)
- }
- If (LEqual (Arg0, One))
- {
- Store (0x01FF, URE2)
- }
- }
- Method (_DSM, 4, NotSerialized)
- {
- Store (Package (0x07)
- {
- "AAPL,current-available",
- 0x05DC,
- "AAPL,current-extra",
- 0x04B0,
- "AAPL,current-in-sleep",
- 0x09C4,
- Buffer (One)
- {
- 0x00
- }
- }, Local0)
- DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
- Return (Local0)
- }
- }
复制代码 GA-965P-DS4 的參數 <參考 iMac 8,1 ICH8 修改模樣>:- Device (USB0)
- {
- Name (_ADR, 0x001D0000)
- OperationRegion (U1CS, PCI_Config, 0xC4, 0x04)
- Field (U1CS, DWordAcc, NoLock, Preserve)
- {
- U1EN, 2
- }
- Name (_PRW, Package (0x02)
- {
- 0x03,
- 0x03
- })
- Method (_PSW, 1, NotSerialized)
- {
- If (Arg0)
- {
- Store (0x03, U1EN)
- }
- Else
- {
- Store (Zero, U1EN)
- }
- }
- Method (_S3D, 0, NotSerialized)
- {
- Return (0x03)
- }
- Method (_S4D, 0, NotSerialized)
- {
- Return (0x03)
- }
- }
- Device (USB1)
- {
- Name (_ADR, 0x001D0001)
- OperationRegion (U2CS, PCI_Config, 0xC4, 0x04)
- Field (U2CS, DWordAcc, NoLock, Preserve)
- {
- U2EN, 2
- }
- Name (_PRW, Package (0x02)
- {
- 0x04,
- 0x03
- })
- Method (_PSW, 1, NotSerialized)
- {
- If (Arg0)
- {
- Store (0x03, U2EN)
- }
- Else
- {
- Store (Zero, U2EN)
- }
- }
- Method (_S3D, 0, NotSerialized)
- {
- Return (0x03)
- }
- Method (_S4D, 0, NotSerialized)
- {
- Return (0x03)
- }
- }
- Device (USB2)
- {
- Name (_ADR, 0x001D0002)
- OperationRegion (U2CS, PCI_Config, 0xC4, 0x04)
- Field (U2CS, DWordAcc, NoLock, Preserve)
- {
- U3EN, 2
- }
- Name (_PRW, Package (0x02)
- {
- 0x0C,
- 0x03
- })
- Method (_PSW, 1, NotSerialized)
- {
- If (Arg0)
- {
- Store (0x03, U3EN)
- }
- Else
- {
- Store (Zero, U3EN)
- }
- }
- Method (_S3D, 0, NotSerialized)
- {
- Return (0x03)
- }
- Method (_S4D, 0, NotSerialized)
- {
- Return (0x03)
- }
- }
- Device (USB3)
- {
- Name (_ADR, 0x001A0000)
- OperationRegion (U4CS, PCI_Config, 0xC4, 0x04)
- Field (U4CS, DWordAcc, NoLock, Preserve)
- {
- U4EN, 2
- }
- Name (_PRW, Package (0x02)
- {
- 0x0E,
- 0x03
- })
- Method (_PSW, 1, NotSerialized)
- {
- If (Arg0)
- {
- Store (0x03, U4EN)
- }
- Else
- {
- Store (Zero, U4EN)
- }
- }
- Method (_S3D, 0, NotSerialized)
- {
- Return (0x03)
- }
- Method (_S4D, 0, NotSerialized)
- {
- Return (0x03)
- }
- }
- Device (USB4)
- {
- Name (_ADR, 0x001A0001)
- OperationRegion (U5CS, PCI_Config, 0xC4, 0x04)
- Field (U5CS, DWordAcc, NoLock, Preserve)
- {
- U5EN, 2
- }
- Name (_PRW, Package (0x02)
- {
- 0x05,
- 0x03
- })
- Method (_PSW, 1, NotSerialized)
- {
- If (Arg0)
- {
- Store (0x03, U5EN)
- }
- Else
- {
- Store (Zero, U5EN)
- }
- }
- Method (_S3D, 0, NotSerialized)
- {
- Return (0x03)
- }
- Method (_S4D, 0, NotSerialized)
- {
- Return (0x03)
- }
- }
- Device (USBE)
- {
- Name (_ADR, 0x001D0007)
- OperationRegion (U7CS, PCI_Config, 0x54, 0x02)
- Field (U7CS, WordAcc, NoLock, Preserve)
- {
- , 15,
- PMES, 1
- }
- Name (_PRW, Package (0x02)
- {
- 0x0D,
- 0x03
- })
- OperationRegion (USBR, PCI_Config, 0x62, 0x02)
- Field (USBR, AnyAcc, NoLock, Preserve)
- {
- URE2, 9
- }
- Method (_PSW, 1, NotSerialized)
- {
- If (LEqual (Arg0, Zero))
- {
- Store (Zero, URE2)
- }
- If (LEqual (Arg0, One))
- {
- Store (0x01FF, URE2)
- }
- }
- Method (_S3D, 0, NotSerialized)
- {
- Return (0x03)
- }
- Method (_S4D, 0, NotSerialized)
- {
- Return (0x03)
- }
- Method (_DSM, 4, NotSerialized)
- {
- Store (Package (0x09)
- {
- "AAPL,clock-id",
- Buffer (One)
- {
- 0x01
- },
- "AAPL,current-available",
- 0x05DC,
- "AAPL,current-extra",
- 0x04B0,
- "AAPL,current-in-sleep",
- 0x09C4,
- Buffer (One)
- {
- 0x00
- }
- }, Local0)
- DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
- Return (Local0)
- }
- }
- Device (USE2)
- {
- Name (_ADR, 0x001A0007)
- OperationRegion (U7CS, PCI_Config, 0x54, 0x02)
- Field (U7CS, WordAcc, NoLock, Preserve)
- {
- , 15,
- PMES, 1
- }
- Name (_PRW, Package (0x02)
- {
- 0x0D,
- 0x03
- })
- OperationRegion (USBR, PCI_Config, 0x62, 0x02)
- Field (USBR, AnyAcc, NoLock, Preserve)
- {
- URE2, 9
- }
- Method (_PSW, 1, NotSerialized)
- {
- If (LEqual (Arg0, Zero))
- {
- Store (Zero, URE2)
- }
- If (LEqual (Arg0, One))
- {
- Store (0x01FF, URE2)
- }
- }
- Method (_S3D, 0, NotSerialized)
- {
- Return (0x03)
- }
- Method (_S4D, 0, NotSerialized)
- {
- Return (0x03)
- }
- Method (_DSM, 4, NotSerialized)
- {
- Store (Package (0x09)
- {
- "AAPL,clock-id",
- Buffer (One)
- {
- 0x02
- },
- "AAPL,current-available",
- 0x05DC,
- "AAPL,current-extra",
- 0x04B0,
- "AAPL,current-in-sleep",
- 0x09C4,
- Buffer (One)
- {
- 0x00
- }
- }, Local0)
- DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
- Return (Local0)
- }
- }
复制代码 為了解決睡眠喚醒後,"裝置未正常移除"...等 USB 電源供電問題之解決方案:- Scope (_GPE)
- {
- Method (_L03, 0, NotSerialized)
- {
- Notify (\_SB.PCI0.USB0, 0x02)
- Notify (\_SB.PWRB, 0x02)
- }
- Method (_L04, 0, NotSerialized)
- {
- Notify (\_SB.PCI0.USB1, 0x02)
- Notify (\_SB.PWRB, 0x02)
- }
- Method (_L0C, 0, NotSerialized)
- {
- Notify (\_SB.PCI0.USB2, 0x02)
- Notify (\_SB.PWRB, 0x02)
- }
- Method (_L0E, 0, NotSerialized)
- {
- Notify (\_SB.PCI0.USB3, 0x02)
- Notify (\_SB.PWRB, 0x02)
- }
- Method (_L05, 0, NotSerialized)
- {
- Notify (\_SB.PCI0.USB4, 0x02)
- Notify (\_SB.PWRB, 0x02)
- }
- Method (_L20, 0, NotSerialized)
- {
- Notify (\_SB.PCI0.USB5, 0x02)
- Notify (\_SB.PWRB, 0x02)
- }
- Method (_L0D, 0, NotSerialized)
- {
- If (\_SB.PCI0.USBE.PMES)
- {
- Store (One, \_SB.PCI0.USBE.PMES)
- Notify (\_SB.PCI0.USBE, 0x02)
- Notify (\_SB.PWRB, 0x02)
- }
- If (\_SB.PCI0.USE2.PMES)
- {
- Store (One, \_SB.PCI0.USE2.PMES)
- Notify (\_SB.PCI0.USE2, 0x02)
- Notify (\_SB.PWRB, 0x02)
- }
- }
- }
复制代码 USB0 的 Method (_L03 之中的 3 要對應以下的,
Name (_PRW, Package (0x02)
{
0x03,
0x03
USB1 的 Method (_L04 之中的 4 要對應以下的,
Name (_PRW, Package (0x02)
{
0x04,
0x03
USB2 的 Method (_L0C 之中的 C 要對應以下的,
Name (_PRW, Package (0x02)
{
0x0C,
0x03
USB3 的 Method (_L0E 之中的 E 要對應以下的,
Name (_PRW, Package (0x02)
{
0x0E,
0x03
USB4 的 Method (_L05 之中的 5 要對應以下的,
Name (_PRW, Package (0x02)
{
0x05,
0x03
USBE、USE2 的 Method (_L0D 之中的 D 要對應以下的,
Name (_PRW, Package (0x02)
{
0x0D,
0x03
然後,在 Scope (_GPE) { } 中 USBX 項目添加 Notify (\_SB.PWRB, 0x02)。
接著,解決喚醒的部分,請尋找到 Method (_WAK, 1, NotSerialized) { } 這個控制喚醒的函數。
有些主機板並未將高速 USB 2.0 喚醒的參數 USBE、USE2 加入。
參數:- Notify (\_SB.PCI0.USB0, Zero)
- Notify (\_SB.PCI0.USB1, Zero)
- Notify (\_SB.PCI0.USB2, Zero)
- Notify (\_SB.PCI0.USB3, Zero)
- Notify (\_SB.PCI0.USB4, Zero)
- Notify (\_SB.PCI0.USBE, Zero)
- Notify (\_SB.PCI0.USE2, Zero)
复制代码 以上參數,是讓使用 USB 裝置可以作為喚醒的開關。
最後,仍必須提醒因為 GA-EX58-UD5 需使用第三方驅動來去驅動。
而有相同問題的朋友會選用 Realtek 官方的 RTGMac 驅動,
在此紫米的建議是別使用經紫米反覆測試,
儘管是 2.0.6 的新版驅動仍會造成在執行喚醒時螢幕無反應黑屏。
所以,紫米推薦 Lnx2Mac 開發的 RealtekRTL81xx 0.0.90
可以至 「Realtek RTL81xx Driver 0.0.90( Lnx2Mac 開發)【09/30】」 參閱詳細說明。
<驗證方式>
至此,第二階段修改已告一段落,實在沒辦法涵蓋許多細項說明。
紫米建議有心修改 DSDT 的朋友可以參考 Mac 的 DSDT 來針對細向作修改。
而相關 Mac 的數據可以至以下網站下載:
http://tdev.me/2010/12/apple-hardware-dumps/?lang=en
但是,紫米要提醒選擇 Mac 型號請以主機板晶片組為準,就像紫米的 GA-EX58-UD5 選用 MacPro5,1 因為兩者都是 LGA1366 X58 ICH10
而 GA-965P-DS4 選用 iMac8,1 因為兩者是 LGA775 965 ICH8M
最後,提供紫米的兩個主機板目前所用的 DSDT。
DSDT.zip
(22.28 KB, 下载次数: 242)
「紫米 Lion 完善紀實之一」
「紫米 Lion 完善紀實之二」
「紫米 Lion 完善紀實之三」
|