DSDT 応用カスタマイズ集:電源ボタン(PWRB)の有効化、スリープ復帰時のブラックアウト修正、クラムシェルスリープ、ASUSホットキー対応
システムのDSDTテーブルを編集して、PCケースの電源ボタンによるシャットダウンダイアログ表示(PWRB)、スリープ復帰後の画面ブラックアウト修正、クラムシェル(リッドクローズ)スリープ、およびASUSノートPCのホットキーを有効化する実践的なパッチ集。
- 筆頭著者
- @pentiumpc 公開日: 2009-01-19
- 収録コレクション
- OSx86 10.X コア基盤&ブートアーキテクチャ
- アーカイブ記録規模
- 累計閲覧 625,378 回 · 厳選フィールドノート 101 件(全 107 件の投稿より抽出) · 2009-01-19 – 2013-01-21
- 参加・検証メンバー (32)
- @uman (21)@kizwan (18)@pentiumpc (8)@Slither2008 (6)@candykane (6)@richarda (5)@THeKiNG (4)@breakky (4)@Thireus (3)@Alexaar (2)@The Edge3000 (2)@Gurruwiwi (2)@EnzoFX (2)@Sweaty (2)@ping99 (2)@Nameci (2)+16 more
- 対応ハードウェア参照
- Workstation Coolers & Thermal Gear ↗ Gigabyte Motherboards ↗ Laptop RAM & SSD Upgrades ↗
DSDTオーバーライドを用いたOS Xのインストールについてはすでに多くのスレッドがありますが、DSDTを活用すればさらに一歩進んで、さまざまな不具合の修正や機能の有効化を行うことができます。
DSDTで実現・修正できる項目:
1. PWRB(電源ボタン)の有効化。
2. システムのスリープ復帰時に画面が真っ暗になる(ブラックアウトする)問題の修正。
3. Clamshell.kext と組み合わせたクラムシェルスリープの有効化(Superhai氏が開発を終了しつつあるため)。
4. ASUSホットキーの有効化。
未確定(環境依存)の修正:
1. USBスリープ問題の修正(私の Eee PC 1000H では機能しましたが、GA-P35-DS3L では機能しませんでした)。
以上が先週末に私が調べて検証した内容のまとめです。他にも有用なDSDTカスタムをご存知の方がいれば、ぜひこのスレッドで共有してください。
これらはすべて私の手元のシステムで動作を確認したものですが、ハードウェア構成が異なる場合は各自の環境に合わせて試してみる必要があります。
ご自身のDSDT修正の参考資料としてお役立てください。
コミュニティ検証報告・技術フィールドノート
全 107 件のオリジナル投稿から技術的価値の高い 101 件の検証報告を収録
電源ボタン(Power button)の有効化
_HID を _CID に変更します:
Device (PWRB)
{
Name (_HID, EisaId ("PNP0C0C")) ---> Name (_CID, EisaId ("PNP0C0C"))
Name (_UID, 0xAA)
Name (_STA, 0x0B)
}
これはどこかのサイトで見つけた手法です(どこだったか思い出せませんが、クレジットは元の発見者の方に帰属します)。
これにより、電源ボタンを押した際にシャットダウンメニューが表示されるようになります。
スリープ復帰時のブラックアウト(画面が真っ暗になる問題)の修正
Eee PC 1000Hでは、スリープから復帰した際に画面が真っ暗なままになり、バックライトを点灯させるために輝度調整キーを押す必要があります。従来の回避策は、SleepWatcherとReggieを使って直接レジスタに書き込み、画面を点灯させるというものでした。
しかし、DSDTを改造して復帰時に輝度をセットするようにすれば、この問題をスマートに解決できます。
Method (WAK, 1, NotSerialized) //WAKE up
{
\_SB.PCI0.SBRG.EC0.EC0W (Arg0)
\_SB.PCI0.NWAK (Arg0)
\_SB.PCI0.SBRG.SWAK (Arg0)
LPWK (Arg0)
Store(\_SB.ATKD.PBLG,local0) //---> Get Brightness level from NVS
\_SB.ATKD.PBLS(local0) //---> Set Brightness level.
}
スリープ復帰時に輝度を再設定するため、末尾の2行を追加します。
お使いのシステムによってメソッド名は異なる場合があるため、似たような処理を探してみてください。
また、輝度を取得・設定するためのメソッドがどれなのかを特定する必要もあります。
この手法は他の類似する問題の修正にも応用できます。
クラムシェルスリープ(Clamshell sleep)
ほとんどのノートPCでは、液晶カバー(LID)を閉じてもスリープに入りません。そのためのDSDT修正を探してみたのですが見つからなかったため(Googleは私の親友ですが)、自分の環境向けに自作しました。
もしもっと良い方法や別のアプローチをご存知の方がいれば、ぜひ教えてください。よろしくお願いします。
Device (LID0)
{
Name (_HID, EisaId ("PNP0C0D")) //LID detection
Method (_PRW, 0, NotSerialized)
{
Return (Package (0x02)
{
0x0B,
0x04
})
}
Name (LIDS, One)
Method (_LID, 0, NotSerialized)
{
Store (^^PCI0.SBRG.EC0.SF13, LIDS) //LID register
XOr (LIDS, One, Local0)
IF (Local0) //if LID is closed
{
Notify (SLPB, 0x80) //Set system to sleep
}
Return (LIDS)
}
LID デバイス自体は簡単に見つかるはずですので、そこにシステムへスリープを通知する行を追加するだけです。
(私の推測では)大半のシステムではOS側がLIDデバイスからの通知を受け取ってスリープ処理を行いますが、OS XはPCのLIDデバイスが送る通知を理解できないため、代わりにハードウェア(ACPI)レベルで直接スリープボタン(SLPB)へ通知を飛ばすようにしました。
ASUSホットキーの有効化
IORegツリーを確認して「ASUS010」または「ATKD」が見つかれば、お使いのマシンにはASUSホットキーデバイスが搭載されており、Fn+Fx ボタンを機能させることができます。
まずはどのキーがどのACPI通知(Notification)を送っているかを調べる必要があります。私は通知コードをログ記録・解析するためのKextを自作し、続いて _GPE スコープ内を調べて対応する割り込みメソッドを特定しました。すべてのマッピングが判明したら、各機能のオン・オフを切り替えるトグルコードをDSDTに追加しました。
これにより、現在私の環境ではバックライト、Wi-Fi、Bluetooth、カードリーダー、Webカメラのオン・オフや輝度調整などがすべて機能しています。外部モニターへの出力切り替えキーやFSB設定など、いくつかの機能についてはまだ解析中です。
サンプルコード:
Method (CAMS, 1, Serialized) //Camera Set
{
Return (OCMS (Arg0))
}
Method (CAMR, 0, Serialized) //Camera toggle : added
{
Store (OCMG , Local0)
XOr (Local0, One, Local0)
Return (OCMS (Local0))
}
Method (CAMG, 0, Serialized) //Camera Set
{
Return (OCMG )
}
上記のコードは一見して分かる通り、Webカメラのオン・オフを切り替えるためのものです。
Method (_Q2A, 0, NotSerialized) //Camera
{
^^^^ATKD.CAMR //Toggle Camera
ATKN (0x1D) //notify ATKD
}
そしてこちらが、イベントを処理する割り込みハンドラです。
USBスリープ問題の修正
Device (HPET)
{
Name (_HID, EisaId ("PNP0103"))
Name (_CID, EisaId ("PNP0C01"))
Name (CRS, ResourceTemplate
{
Memory32Fixed (ReadOnly,
0xFED00000, // Address Base
0x00000400, // Address Length
_Y03)
})
OperationRegion (^LPCR, SystemMemory, 0xFED1F404, 0x04)
Field (LPCR, AnyAcc, NoLock, Preserve)
{
HPTS, 2,
, 5,
HPTE, 1,
Offset (0x04)
}
Method (_STA, 0, NotSerialized)
{
Return (0x0F)
}
HPET のステータス(_STA)として 0x0F を返すようにしたところ、スリープ復帰後にUSBが使えなくなったりホットプラグが効かなくなったりするUSBスリープ問題が解消したようです。
ただ、この問題は優先度が高くなかったため、あえて問題を再発させる検証までは行っておらず未確定の修正としています。なお、私のシステムはバニラの10.5.6上で、Decrypter、AnV SMBIOS、PS2Nub & Controller、およびOpenHaltRestartのみで稼働しています。
IOUSB系の修正Kextは一切使っていません(私のシステムではクラッシュしてしまうため)。
追記 -- この問題はDSDT Patcherに -newHPET オプションを付けて実行することでも修正されます。パッチ適用後はDisablerも不要になります。
ASUS Eee PC 1000Hの dsdt.aml をじっくり読み解きながら、_SB 配下のメソッドへの理解を深めようとしています。
以下の解釈で合っていますでしょうか?
メソッド名 - 説明
PBL (S/G) = バックライト(BackLight)
CAM (S/G) = カメラ(Camera)
CRD (S/G) = カードリーダー(Card Reader)
WLD (S/G) = 無線LANの設定 / 取得(Wireless LAN Set / Get)
CFV (S/G) = FSB速度&電圧の設定 / 取得(FSB Speed & Voltage Set / Get)
CAM (S/G) = カメラの設定 / 取得(Camera Set / Get)
BTH (S/G) = Bluetoothの設定 / 取得(BlueTooth Set / Get)
SDSP = ディスプレイの切り替え(Switch/Swap Display)
CRD (S/G) = カードリーダーの設定 / 取得(Card Reader Set / Get)
HDPS = ?
PBP (S/G) =
M3G (S/G) = モバイル3G(Mobile 3G)
HWCF = ?
GNVS = 音量の取得?(たぶん違いますよね。おそらくメモリ参照の取得・設定でしょうか?)
SNVS = 音量の設定?(たぶん違いますよね。おそらくメモリ参照の取得・設定でしょうか?)
予備のホットキー(0x1d)を使ってカメラとBluetoothをオフにすることには成功しました。Wi-Fiも動かそうとしたのですが、そちらのメソッド呼び出しは単純な ATKN(value) よりも少し複雑な構造になっていることに気づきました。
0x11 と 0x10 のどちらの値を渡すかを判定するロジックが入っているようです。今のところオフにすることしかできず、一度オフにするとオンに戻せなくなってしまいます(おそらく私の方の判定ロジックが足りていないのだと思います)。
また、あなたが作成されたASUSテスト用Kextを使ったところ、Wi-Fiオフ用のFnキーを除くすべてのボタンが正しく認識されることを確認しました。Wi-FiのFnキーを押すと未マッピングのメソッドに関するメッセージが出た後、BluetoothまたはWi-Fiが省電力状態への移行に失敗したというメッセージが表示され、もう一度Wi-FiのFnキーを押すとメッセージが止まります。
これについてどう思われますか?
よろしくお願いします。
Steve
こちらが現在私が参考にしているイベントコードの一覧です。
# シルバーボタン(画面上部のショートカットキー)
KEY_SILVER1="0000001a" # 画面オフ(Blank)
KEY_SILVER2="0000001b" # 解像度変更
KEY_SILVER3="0000001c" # ユーザー定義 1
KEY_SILVER4="0000001d" # ユーザー定義 2
# Fn+F? コンビネーションキー
KEY_Fn_F1="00000080" # スリープ
KEY_Fn_F2=("00000010" "00000011") # Wi-Fiトグル
KEY_Fn_F5="0000002*" # 輝度を下げる
KEY_Fn_F6="0000002*" # 輝度を上げる
KEY_Fn_F7="00000016" # バックライトオフ
KEY_Fn_F8=("00000030" "00000031" "00000032") # XRandR(画面出力切替)
KEY_Fn_F9="00000012" # タスクマネージャー
KEY_Fn_F10="00000013" # ミュート
KEY_Fn_F11="00000014" # 音量を下げる
KEY_Fn_F12="00000015" # 音量を上げる
# その他のACPIイベント
POWER_AC="00000001"
POWER_BAT="00000000"
もしF3やF4を使ってカスタムFnキーを作りたい場合は、Linux上で acpi_listen を使うのがコードを取得する一番確実な方法だと思います。
それにしても、なぜ音量キー関連の関数だけがDSDT内で簡単に見つからないのか、いまだに謎を解こうと苦戦しています。
Fn+F1 はコードを返しませんが、Notify (SLPB, 0x80) でシステムをスリープさせることができます。Fn+F5、Fn+F6 は 0x20 から 0x2F の間(15段階の輝度レベル)を返します。Fn+F8 は次のディスプレイ出力コード(LCD、外部VGA、または両画面スパン)を返します。
AC電源接続時は 0x50 を返します。
バッテリー駆動時は 0x51 を返します。
これらのキーの大半は、実際に機能させるために専用のドライバを必要とします。
現在本業の仕事に忙殺されており、開発中だったドライバの作業を中断せざるを得ない状況です。
ベータ版のものが1つ手元にありますので、よろしければ自由に試してみてください。
ASUS hotkey enabler (media fire.com/download.php?4lnemnhjnzt)
このパッケージはホットキーを有効化するための各種ソリューションをまとめたもので、SleepWatcherを不要にし、Fn+F1 をディープスリープに、液晶カバー(LID)閉鎖をスリープ(Doze)に設定します。
plist内の値を書き換えることで、ほとんどのキーに任意のスクリプト実行を割り当ててカスタマイズできます。私のシステムでしばらく運用していますが、かなり良好に動作しています。
インストール前には必ずご自身の「DSDT.aml」をバックアップしてください。
@Slither2008Method - Description CFV (S/G) = FSB Speed & Voltage Set / Get SDSP = Switch/Swap Display HDPS = ? PBP (S/G) = HWCF = ? GNVS = Get Volume (I'm sure this is wrong. Probably gets and sets memory references?) SNVS = Set Volume (I'm sure this is wrong. Probably gets and sets memory references?) .
CFV = FSBの設定のみです(電圧とは無関係です)。HDP / PBP = LCD、外部モニター、または両画面の設定です。設定自体は可能ですが、実際に反映させるにはMac側の解像度リフレッシュを行う必要があり、非常に扱いが厄介です。HWCF = 不明です。GNVS / SNVS = NVS(不揮発性SRAM、おそらくBIOS領域)の取得および設定です。
BIOS メソッドは現在のBIOSバージョンを返します。INIT は ATKD を初期化します(キーコードの戻り値を得るために必ず実行する必要があります)。
自宅のネット環境からだとipisフォーラムから勝手にログアウトされてしまい、職場では時間がなくて作業できないため、あちらに投稿できません。もし可能であれば、私のパッケージをあちらのフォーラムにも転載していただけると助かります。よろしくお願いします。
情報のご提供と、ベータ版のFnキードライバの共有をありがとうございます。
早速ipisのフォーラムに行って、これらに関する情報とガイドをまとめて投稿してきます。
よろしくお願いします。
Steve
あなたのDSDT修正を適用するためのスレッド:
ipis-osx.wik idot.com/forum/t-135417/enabling-function-keys-by-modifying-your-dsdt#post-403326
あなたの実験的Kextに関するスレッド:
ipis-osx.wik idot.com/forum/t-135405/experimental-asus-hotkey-enabler-kext-driver#post-403338
ぜひ私のプログラミングスキルを活かして、あなたのKext開発に協力したいと考えています。
もし差し支えなければ、実験的Kextのソースコードを共有していただけないでしょうか?
よろしくお願いします。
Steve
基本的な IOWorkLoop を備えたスケルトンKextを作成してみました。
Kextの初期化(init)、プローブ(probe)、ATKD デバイスNubの検出とマッチングまでは成功し、start メソッドに入るところまでは動いています。
ところが、IOInterruptEventSource を追加する部分で問題が発生しています。
start メソッド内で以下のように宣言しています:
interruptSrc = IOInterruptEventSource::interruptEventSource(
(OSObject*)this,
OSMemberFunctionCast( IOInterruptEventAction,
this,
&com_ipis_driver_AsusFNKeys::interruptOccurred ),
(IOService*)provider,
(int)0);
WorkLoopに追加できなかった場合にエラーを報告するテストコードを入れてあるのですが、Kextを起動した瞬間にカーネルパニック(KP)になってしまいます。
上記のコードを取り除いて最小限のベアボーン・スケルトン状態に戻すとドライバが正常にロードされるため、この割り込みイベントソース(Interrupt Event Source)がKPの原因であることは確認済みです。
正しい実装の方向性について何かヒントをいただけると大変助かります。
こんにちは!その後の調子はいかがですか?
1000HのDSDTにさらなる改良を加えたいと考えており、お知恵をお借りしたいです。
1つ目の質問はPS/2コントローラについてです(http://www.insanelymac.com/forum/index.php?showtopic=90… ↗ とのマルチポストになります):
私たちは皆、以下のコードを使用しています:
Device (PS2K)
{
Name (_HID, EisaId ("PNP0303"))
Name (_CID, 0x0B03D041)
Method (_STA, 0, NotSerialized)
{
ShiftLeft (One, 0x0A, Local0)
If (And (IOST, Local0))
{
Return (0x0F)
}
Return (Zero)
}
Name (_CRS, ResourceTemplate ()
{
IO (Decode16, 0x0060, 0x0060, 0x00, 0x01)
IO (Decode16, 0x0064, 0x0064, 0x00, 0x01)
IRQNoFlags () {1}
})
}
Device (PS2M)
{
Name (_HID, EisaId ("SYN0A04"))
Name (_CID, Package (0x03)
{
0x000A2E4F,
0x02002E4F,
0x130FD041
})
Method (_STA, 0, NotSerialized)
{
ShiftLeft (One, 0x0C, Local0)
If (And (IOST, Local0))
{
Return (0x0F)
}
Return (Zero)
}
Name (_CRS, ResourceTemplate ()
{
IRQNoFlags () {12}
})
}
しかし、これを使うとIOReg上でデバイスが二重登録(ダブり)されてしまいます。
参考として、OpenBSD起動時のログも載せておきます:
ichpcib0 at pci0 dev 31 function 0 "Intel 82801GBM LPC" rev 0x02: PM disabled
isa0 at ichpcib0
isadma0 at isa0
pckbc0 at isa0 port 0x60/5
pckbc0: using irq 1 for kbd slot
pckbd0 at pckbc0 (kbd slot)
wskbd0 at pckbd0: console keyboard, using wsdisplay0
pmsi0 at pckbc0 (aux slot)
pckbc0: using irq 12 for aux slot
wsmouse0 at pmsi0 mux 0
上記のDSDTコード自体よく動いてはいるのですが、この二重登録を修正できればなお良いと考えています。何かアイデアはありますか?
2つ目の質問は、液晶カバーを開けたときのスリープ復帰(Wakeup on clamshell open)機能についてです。どなたか実装を試みた方はいらっしゃいますか?
まだ回答がつかず、とても残念です。
その間、上記の修正と自分自身の修正をベースに独自のDSDTを作成しています。現在、私のシステムは10.5.6上で動作・スリープともに完璧に機能していますが、Fnキーの修正だけは私の環境ではまだ少しバグっぽいです。
1000HのDSDTのさらなる改善策を引き続き探しています。特にクラムシェルを開いたときのスリープ復帰を実現したいと夢見ているのですが、どなたかアイデアはありませんか?
以下の設定でFSBを動作させるには、DSDTのどこでどのように設定すればよいか教えていただきたいです:
FSB=54
PCIE=176
これはEee PC 1000Hで1.9GHzの動作クロックを得るための設定で、Windows XP上でeeectlを使ってオーバークロックしているのと同じ状態をOS Xでも実現したいのです。
InsanelyMacで見つけた情報ですが、このスレッドのコレクションに加えておくと非常に有用だと思うので共有します。_WAK メソッドを使ったスリープモードの修正です:
information about the _WAK method.
Arguments:
0 The value of the sleeping state (1 for S1, 2 for S2, and so on).
Result Code (2 DWORD package):
Status Bit field of defined conditions that occurred during sleep.
0x00000000 Wake was signaled and was successful
0x00000001 Wake was signaled but failed due to lack of power.
0x00000002 Wake was signaled but failed due to thermal condition.
Other Reserved
PSS If non-zero, the effective S-state the power supply really entered.
この値は、電源から引き出される電流が大きすぎたために目標のSステートに入れなかった場合などを検出するために使用されます。
つまり、_WAK メソッドは要求されたスリープステートの番号を表す1つの引数を受け取り、その結果を2つのDWORDからなるパッケージとして返します。1つ目の値はスリープ復帰が成功したかどうか(成功なら 0、失敗なら非ゼロ)とその理由を示すコードです。2つ目の値も成功時は 0 で、失敗時には実際に遷移したスリープステートの値を返します。要するに成功・失敗を示すステータスコードです。
Package 宣言の第1引数はパッケージ内の要素数を指定し、第2引数以降がパッケージの中身そのものになります。したがって、以下の記述は単に各要素がゼロである2要素のパッケージを定義しているだけです。ACPI仕様上、_WAK メソッドは2つの値を返すことが義務付けられているため、この記述が必要になります。
詰まるところ、これは仕様を満たす(それによってコンパイル時のWarningを消す)ためのダミーの戻り値であり、常に成功状態を返す以上の特別な処理をしているわけではありません。
スリープモードの修正手順:
_WAK を検索します:
CODE
Method (_WAK, 1, NotSerialized)
{
Store (0xFF, DBG1)
If (LEqual (Arg0, 0x03))
{
Store (0x8F, SCP)
}
If (LEqual (Arg0, 0x04))
{
If (LEqual (OSFL, Zero))
{
If (LEqual (OSFX, 0x03))
{
Store (0x59, SMIP)
}
Else
{
Store (0x58, SMIP)
}
}
If (LEqual (OSFL, One))
{
Store (0x56, SMIP)
}
If (LEqual (OSFL, 0x02))
{
Store (0x57, SMIP)
}
If (LEqual (OSFX, 0x03))
{
Store (0x59, SMIP)
}
}
If (LEqual (Arg0, One)) {}
If (OSFL)
{
Notify (\_SB.PWRB, 0x02)
}
Else
{
If (LEqual (RTCW, Zero))
{
Notify (\_SB.PWRB, 0x02)
}
}
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.USB5, Zero)
Return(Package(0x02){0x00, 0x00}) <------ ここに追加します。コンパイル前に dsdt_fixed.txt を編集してください
}
バックライト制御(Backlight control)
ノートPCのDSDTに追加しておくと便利なもう1つの項目です(_SB 配下に追加します):
CODE
Device (PNLF)
{
Name (_HID, EisaId ("APP0002"))
Name (_CID, "backlight")
Name (_UID, 0x0A)
Name (_STA, 0x0B)
}
バックライト制御ドライバをロードさせる助けになるはずです。
うーん… どなたか私の質問(FSB設定)に答えてくださる方はいらっしゃいませんか?
スリープとスリープ復帰後のUSB問題の修正
ついに自分のノートPCでスリープを完全に修正できました!
原因はUSB周りにありました…
修正方法はシンプルで、_WAK メソッドの時と同じ考え方です:
DSDT内のすべてのUSBエントリの配下を見ると、以下のような記述があるはずです:
QUOTE
Method (_PRW, 0, NotSerialized)
{
Return (GPRW (0xYZ, 0xYZ))
}
そこで Method (GPRW を検索し、その末尾にある Return (PRWP(またはそれに類する記述)を以下のように変更します:
CODE
Return (Package (0x02)
{
Zero,
Zero
})
なお、私の環境では依然としてEHCI/UHCI用の改変Kextを併用する必要があります。それらがない状態でもノートPC自体は問題なくスリープしますが、スリープから復帰した際にUHCIデバイス(Bluetoothと指紋センサー)を見失ってしまうためです。
修正版EHCI Kextについて言えば、あの所有権(Ownership)関連のデバッグメッセージが本当に嫌いです。なぜ多くの開発者がKextにあんな煩わしいデバッグ出力を入れたがるのか理解できません。通常版とデバッグ版の2バージョンを作るか、plist内に有効・無効を切り替えるブール値を入れるくらい簡単にできるはずなのに…
追記:デバッグ出力を消した編集版Kextを作ってくれたSlice氏に大感謝です!おかげで私と私のシステムログはとても幸せになりました。
ところで、それらのUSB修正Kextの中身についてまだ回答を待っている状態です。ソースコードが公開されていないためKextが内部で実際に何をしているのか分かりませんが、もし処理内容が分かればDSDT側にそれらの修正を組み込めるかもしれません(少なくとも試してみる価値はあるはずです)。
再追記:昨夜は疲れていて Device (PWRB)(Power Button)について書くのを忘れていました。自分のDSDTには PWRB が欠けていることに気づいたため追加したのですが、というのもMacBook実機のDSDTを見ると、USBデバイス側にも PWRB を参照するエントリが存在しているためです。
もしお使いのDSDTに PWRB がない場合は、Device (SLPB) を検索し、その上下に以下のように追加してください:
CODE
Scope (_SB)
{
Device (PWRB)
{
Name (_HID, EisaId ("PNP0C0C"))
}
Device (SLPB)
{
Name (_HID, EisaId ("PNP0C0E"))
Method (_PRW, 0, NotSerialized)
{
Return (Package (0x02)
{
0x0B,
0x04
})
}
}
}
次に Method (_Lxy(x, yは16進数字)を検索すると、そこにすべてのUSBデバイスが並んでいるのが分かります。各UHCIデバイスの下に Notify (\_SB.PWRB, 0x02) を追加し、EHCIエントリについてはMacBook実機からエントリ全体を移植しました。以下のようになるはずです:
CODE
Scope (_GPE)
{
Method (_L03, 0, Serialized)
{
Notify (\_SB.PCI0.UHC1, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L04, 0, Serialized)
{
Notify (\_SB.PCI0.UHC2, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L0C, 0, Serialized)
{
Notify (\_SB.PCI0.UHC3, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L0E, 0, Serialized)
{
Notify (\_SB.PCI0.UHC4, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L05, 0, Serialized)
{
Notify (\_SB.PCI0.UHC5, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L0D, 0, Serialized)
{
If (\_SB.PCI0.EHC1.PMES)
{
Store (0x01, \_SB.PCI0.EHC1.PMES)
Notify (\_SB.PCI0.EHC1, 0x02)
Notify (\_SB.PWRB, 0x02)
}
If (\_SB.PCI0.EHC2.PMES)
{
Store (0x01, \_SB.PCI0.EHC2.PMES)
Notify (\_SB.PCI0.EHC2, 0x02)
Notify (\_SB.PWRB, 0x02)
}
}
このEHCI側のエントリによってEHCIのスリープ問題が解消したようで、少なくとも私の環境ではEHCISleepEnablerが不要になりました。
なお、これらの _Lxy メソッド内に HDEF が含まれている場合は削除してください。残っているとスリープが壊れる原因になります!
もう1つのヒントとして、マウスやキーボードを使ってノートPCやデスクトップをスリープから復帰させたい場合は、IORegから対象のデバイスがどのUSBポートに接続されているかを特定し、DSDT内の該当するUSBエントリの通知先を PWRB から SLPB に変更してください。
それではお楽しみください!
電源ボタンを押したときにログアウト/シャットダウンダイアログが表示されるようになりました:
CODE
Device (PWRB)
{
Name (_HID, EisaId ("PNP0C0C"))
}
_HID を _CID に変更しただけで一発で動きました。
DSDT経由でオーディオを修正する方法のガイド
オーディオの設定は本来そこまで複雑なはずがありません。多くの方はすでにグラフィックス用に device-properties(EFI文字列)を使っているか、改変DSDTを使用しているのですから、わざわざ別のインジェクタKextを読み込ませてシステムに情報を渡すのは無駄が多く、リソースを節約する意味でもDSDTやEFI文字列にまとめるべきです。
オーディオを正しく機能させるために HDAEnabler.kext や ALCinject.kext は必要ありません。
本当に必要なのは、AlainTox714氏の AppleHDA.kext と以下の3つの情報だけです:layout-idcodec-idPinConfigurations
これらは device-properties 文字列経由でもDSDT経由でも注入できます(DSDT経由の方がより良い結果が得られます)。
私は両方の方法を試してどちらでもオーディオが動作することを確認しましたが、DSDTによる解決策の方がACPI仕様により準拠しているように見えます。
/System/Library/Extensions/AppleHDA.kext/Contents/PlugIns/AppleHDAController.kext/Contents/Info.plist ファイル内に ConfigData がある場合は、そこから PinConfigurations データを作成できます。
(各4バイトセグメントの最後の1バイトだけを抜き出します):
<00a71c1f 00a71d40 00a71e21 00a71f02 00b71c40 00b71d90 00b71ea1 00b71f02 00c71c2e 00c71d30 00c71e81 00c71f01 00d71c10 00d71d40 00d71e11 00d71f01 00e71c20 00e71d90 00e71ea1 00e71f01 00f71c12 00f71d10 00f71e11 00f71f01 01071c11 01071d70 01071e11 01071f01 02171c50 02171d21 02171e45 02171f01>
もう1つの方法は、コーデックダンプファイル内で [Jack] を含む行を検索し、その16進数値をバイト単位で逆順(リトルエンディアン)にして、ノード番号順に並べるやり方です:
CODE
Codec: SigmaTel STAC9274D
Address: 2
Vendor Id: 0x83847621
Subsystem Id: 0x80860419
Revision Id: 0x100201
Default PCM: rates 0x7e0, bits 0x0e, types 0x1
Default Amp-In caps: ofs=0x00, nsteps=0x0e, stepsize=0x05, mute=0
Default Amp-Out caps: ofs=0x7f, nsteps=0x7f, stepsize=0x02, mute=1
Node 0x0a [Pin Complex] wcaps 0x400181: Stereo
Pin Default 0x0221401f: [Jack] HP Out at Ext Front
Conn = 1/8, Color = Green
becomes 1f402101
00a71c1f 00a71d40 00a71e21 00a71f02
Node 0x0b [Pin Complex] wcaps 0x400181: Stereo
Pin Default 0x02a19040: [Jack] Mic at Ext Front
Conn = 1/8, Color = Pink
becomes 4090a102
00b71c40 00b71d90 00b71ea1 00b71f02
Node 0x0c [Pin Complex] wcaps 0x400181: Stereo
Pin Default 0x0181302e: [Jack] Line In at Ext Rear
Conn = 1/8, Color = Blue
becomes 2e308101
00c71c2e 00c71d30 00c71e81 00c71f01
Node 0x0d [Pin Complex] wcaps 0x400181: Stereo
Pin Default 0x01114010: [Jack] Speaker at Ext Rear
Conn = 1/8, Color = Green
becomes 10401101
00d71c10 00d71d40 00d71e11 00d71f01
Node 0x0e [Pin Complex] wcaps 0x400181: Stereo
Pin Default 0x01a19020: [Jack] Mic at Ext Rear
Conn = 1/8, Color = Pink
becomes 2090a101
00e71c20 00e71d90 00e71ea1 00e71f01
Node 0x0f [Pin Complex] wcaps 0x400181: Stereo
Pin Default 0x01111012: [Jack] Speaker at Ext Rear
Conn = 1/8, Color = Black
becomes 12101101
00f71c12 00f71d10 00f71e11 00f71f01
Node 0x10 [Pin Complex] wcaps 0x400181: Stereo
Pin Default 0x01117011: [Jack] Speaker at Ext Rear
Conn = 1/8, Color = Yellow
becomes 11701101
01071c11 01071d70 01071e11 01071f01
Node 0x21 [Pin Complex] wcaps 0x400301: Stereo Digital
Pin Default 0x01452150: [Jack] SPDIF Out at Ext Rear
Conn = Optical, Color = Grey
becomes 50214501
02171c50 02171d21 02171e45 02171f01
抽出した PinConfigurations データは、以下のコマンドを使って device-properties 文字列のXMLファイル用(Base64)に変換できます:
CODE
echo "1f4021014090a1022e308101104011012090a101121011011170110150214501" | xxd -r -p | openssl enc -base64
私のIntel D975XBX2(通称BadAxe2、コーデックはSTAC9274D)では、以下の値が得られました:
CODE
H0AhAUCQoQIuMIEBEEARASCQoQESEBEBEXARAVAhRQE=
次に、オーディオハードウェアが接続されているPCIスロットのパスを調べます:
CODE
gfxutil -f HDEF; # 失敗する場合は HDEF の代わりに AZAL を試してください
BadAxe2では以下の結果が得られました:
CODE
DevicePath = PciRoot(0x0)/Pci(0x1b,0x0)
以下の記述をXMLファイルに追加し、gfxutil(gfxutil -s -v -n -i xml -o hex in.plist out.hex)を使って16進文字列を再生成しました:
CODE
<key>PciRoot(0x0)/Pci(0x1b,0x0)</key>
<dict>
<key>PinConfigurations</key>
<data>
H0AhAUCQoQIuMIEBEEARASCQoQESEBEBEXARAVAhRQE=
</data>
<key>codec-id</key>
<string>0x83847683</string>
<key>layout-id</key>
<string>0x04000000</string>
</dict>
コーデックダンプをドラッグ&ドロップするだけで PinConfigurations データを自動出力してくれるスクリプトやプログラムがあれば最高ですね。
最終的に、私のBadAxe2ではDSDTに直接書き込む方法を選びました。すでにDSDT内で多くの処理を行っているため数バイト増えてもまったく問題ありませんし、本来不要なKextをもう1つ余計にロードせずに済むからです。
以下の条件を満たしていれば、同じことが実現可能です:
・現在 HDAEnabler.kext または ALCinject.kext を使用している
・AppleHDA.kext を使用している
・お使いのオーディオハードウェアに関する3つの必須情報と、対応する改変済み AppleHDA.kext を持っている(または入手できる)device-properties 文字列でもDSDTでも実装できますが、DSDTメソッドの方が断然優れています。現在作業を進めている STAC9221D A2 を搭載した BadAxe1(D975XBX)と BadAxe2 の PinConfigurations およびIOReg詳細を以下に載せておきます。DSDTの作業がすべて完了したら、DSDT全体か関連セクションを公開する予定です。
BadAxe1:
CODE
| | +-o HDEF@1B <class IOPCIDevice, registered, matched, active, busy 0, retain 8>
| | | | {
| | | | "IOPCIResourced" = Yes
| | | | "IOInterruptControllers" = ("io-apic-0","IOPCIMessagedInterruptController")
| | | | "IOName" = "pci8086,27d8"
| | | | "subsystem-id" = <17040000>
| | | | "IODeviceMemory" = (({"address"=18446744073225109504,"length"=16384}))
| | | | "class-code" = <00030400>
| | | | "revision-id" = <01000000>
| | | | "assigned-addresses" = <10d8008200000000000020e30000000000400000>
| | | | "built-in" = <00>
| | | | "acpi-device" = "IOACPIPlatformDevice is not serializable"
| | | | "name" = "pci8086,27d8"
| | | | "acpi-path" = "IOACPIPlane:/_SB/PCI0@0/HDEF@1b0000"
| | | | "subsystem-vendor-id" = <86800000>
| | | | "reg" = <00d800000000000000000000000000000000000010d800020000000000000000000000000040
000>
| | | | "compatible" = <"pci8086,417","pci8086,27d8","pciclass,040300">
| | | | "PinConfigurations" = <104021021010010120308101104001012190a1011160010130214501>
| | | | "layout-id" = 2
| | | | "IOPCIExpressLinkCapabilities" = 0
| | | | "IOPowerManagement" = {"ChildrenPowerState"=2,"CurrentPowerState"=2}
| | | | "IOInterruptSpecifiers" = (<1600000007000000>,<0400000000000100>)
| | | | "device-id" = <d8270000>
| | | | "vendor-id" = <86800000>
| | | | "device_type" = <"STAC9221A2">
| | | | "codec-id" = 2206496387
| | | | "IOPCIExpressLinkStatus" = 0
| | | | }
BadAxe2:
CODE
| | +-o HDEF@1B <class IOPCIDevice, registered, matched, active, busy 0, retain 8>
| | | | {
| | | | "IOPCIResourced" = Yes
| | | | "IOInterruptControllers" = ("io-apic-0","IOPCIMessagedInterruptController")
| | | | "IOName" = "pci8086,27d8"
| | | | "layout-id" = <04000000>
| | | | "subsystem-id" = <19040000>
| | | | "IOPCIExpressLinkCapabilities" = 0
| | | | "IODeviceMemory" = (({"address"=18446744073226158080,"length"=16384}))
| | | | "class-code" = <00030400>
| | | | "IOPowerManagement" = {"ChildrenPowerState"=2,"CurrentPowerState"=2}
| | | | "revision-id" = <01000000>
| | | | "IOInterruptSpecifiers" = (<1600000007000000>,<0200000000000100>)
| | | | "assigned-addresses" = <10d8008200000000000030e30000000000400000>
| | | | "built-in" = <00>
| | | | "acpi-device" = "IOACPIPlatformDevice is not serializable"
| | | | "device-id" = <d8270000>
| | | | "vendor-id" = <86800000>
| | | | "acpi-path" = "IOACPIPlane:/_SB/PCI0@0/HDEF@1b0000"
| | | | "subsystem-vendor-id" = <86800000>
| | | | "name" = "pci8086,27d8"
| | | | "IOPCIExpressLinkStatus" = 0
| | | | "reg" = <00d800000000000000000000000000000000000010d800020000000000000000000000000040
000>
| | | | "compatible" = <"pci8086,419","pci8086,27d8","pciclass,040300">
| | | | "PinConfigurations" = <1f4021014090a1022e308101104011012090a101121011011170110150214501>
| | | | "codec-id" = 2206496289
| | | | }
HDAEnabler.kext や ALCinject.kext なしでオーディオが動くなんて信じられないという方は、ぜひ device-properties 文字列か、さらに優れたDSDTでのインジェクションを試してみてください。
こちらが基本となるDSDTコードです。1つ目がBadAxe1用、2つ目がBadAxe2用のサンプルコードですので、両方を同時に使わないよう注意してください。
DSDT内のオーディオ定義(AUDIO IN DSDT):
CODE
______________________________________________________________
// this goes near the beginning of your DSDT (right after Method (_WAK, 1, Serialized)
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)
}
______________________________________________________________
// change all occurrences of AZAL to HDEF
______________________________________________________________
// example for BadAxe1 (with comments)
______________________________________________________________
// this goes at end of Device (HDEF)
// BadAxe1 (D975XBXLKR)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x08)
{
"codec-id",
Buffer (0x04)
{
0x83, 0x76, 0x84, 0x83 // the hex codec ID (reverse order)
},
"layout-id",
Buffer (0x04)
{
0x02, 0x00, 0x00, 0x00 // the hex layout ID (reverse order)
},
"device_type",
Buffer (0x16) // the hex count + 1 for null terminated ascii string
{
"SigmaTel STAC9221D A2" // the string identifier
},
"PinConfigurations",
Buffer (0x1C) // the actual hex count
{
/* the PinConfigurations data as it appears.
/* 0000 */ 0x10, 0x40, 0x21, 0x02, 0x10, 0x10, 0x01, 0x01,
/* 0008 */ 0x20, 0x30, 0x81, 0x01, 0x10, 0x40, 0x01, 0x01,
/* 0010 */ 0x21, 0x90, 0xa1, 0x01, 0x11, 0x60, 0x01, 0x01,
/* 0018 */ 0x30, 0x21, 0x45, 0x01 /* one entry seems missing */
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
______________________________________________________________
// example for BadAxe2
______________________________________________________________
// this goes at end of Device (HDEF)
// BadAxe2 (D975XBX2KR)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x08)
{
"codec-id",
Buffer (0x04)
{
0x21, 0x76, 0x84, 0x83 // the hex codec ID (reverse order)
},
"layout-id",
Buffer (0x02)
{
0x04, 0x00, 0x00, 0x00 // the hex layout ID (reverse order)
},
"device_type",
Buffer (0x13)
{
"SigmaTel STAC9274D"
},
"PinConfigurations",
Buffer (0x20)
{
/* 0000 */ 0x1f, 0x40, 0x21, 0x02, 0x40, 0x90, 0xa1, 0x02,
/* 0008 */ 0x2e, 0x30, 0x81, 0x01, 0x10, 0x40, 0x11, 0x01,
/* 0010 */ 0x20, 0x90, 0xa1, 0x01, 0x12, 0x10, 0x11, 0x01,
/* 0018 */ 0x11, 0x70, 0x11, 0x01, 0x50, 0x21, 0x45, 0x01
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
______________________________________________________________
Acerホットキーイネーブラについて
@pentiumpcFN+F1はコードを返しませんが、notify SLPB 0x80でシステムをスリープさせることができます。FN+F5、FN+F6は0x20から0x2Fの間(15段階の輝度)を返します。FN+F8は次のディスプレイコード(LCD、外部VGA、または両画面スパン)を返します。AC電源は0x50、バッテリーは0x51を返します。これらのキーの大半は駆動するためのドライバを必要とします。現在本業の仕事に忙殺されており、そのため…
こんにちは、pentiumpc。
ぜひお力をお借りしたいことがあります。OS X上でいくつかのホットキーを有効にしたいのですが、これらのホットキーを機能させるにはWindowsでは「Launch Manager」というアプリケーション、Linuxでは「acer-acpi」というモジュールが必要になります。これらは無線LANカードとBluetoothという2つの重要なデバイスのオン・オフを制御しています。幸い、無線LANカードはノートPCの起動時に自動でオンになるのですが、残念ながらBluetoothは自動でオンにならないため、OS X上でまったく認識されず動作もしません。「acer-acpi」をOS Xへ移植するのを手伝っていただけないでしょうか。ドライバやカーネル拡張(Kext)のプログラミング経験はありませんが、物覚えは早い方です。
kizwan
acer-acpiについて
@kizwan「acer-acpi」をOS Xへ移植するのを手伝っていただけないでしょうか。ドライバやカーネル拡張(Kext)のプログラミング経験はありませんが、物覚えは早い方です。kizwan
こんにちは、kizwan。InsanelyMacだけでなくこちらでもお会いできて嬉しいです。私も以前はあちらにいたのですが、掲示板が新システムに移行した際にアカウントが消えてしまいまして…
acer_acpi の件ですが、私の息子がAcerのノートPC(確かあなたと同じ機種だったと思います)を持っているものの、現在HDDが死にかけているため今はテストができません。ともあれ、(pentiumpc氏が見つけた通り)出発点として最適なのはSuperhai氏の AMW0.kext です。ただ、Superhai氏はメインのダウンロードページからソースコードを削除してしまったようで、どこを探してもコピーが見つからないため、彼に直接PMを送って頼んでみる必要があると思います。
-u
Acer ACPIのDSDT解析
もしかすると、これはDSDT内で直接処理できるかもしれません。私のGateway製ノートPCのDSDTを見ていたところ、無線LANなどの各種機能のオン・オフを切り替えるホットキーと連動していると思しき制御レジスタが多数定義されていることに気づきました。
DSDT内の Notify メソッドを一通り調べて、スリープからの復帰時に通知を受け取っているものがないか探してみてください。スリープ時にはBluetoothの電源がオフになるため、スリープ前にオンだった場合は復帰時に再びオンに戻す処理が入っているはずです。そのため、レジスタの状態を判定して再有効化するようなロジックが見つかるかもしれません。
kizwanさんへ:
お使いのDSDT内に AMW0 デバイスが存在しているはずです(acer_acpi の実装作者であるCarlos氏によるこちらの記事[strang eworlds.co.uk/2007/11/24/amw0-later-models-aka-version-2-notes/]を参照してください)。
(あなたのDSDTを直接見ないでの推測になりますが)デバイス制御用のファンクションキーは、OSがWindowsであるかどうかをチェックするDSDTブロック内に実装されている可能性があります。お使いのDSDTには、_OSI がWindowsである場合にのみ処理を実行するような呼び出しが含まれていませんか?私のマシンには含まれています。
もしそうであれば、Windows固有の分岐部分を有効化した上で、シンプルなKextからDSDT内に定義された AMW0 デバイスを呼び出すことが可能かもしれません。おそらくSuperhai氏がやっていたのもそういうアプローチではないかと思います。
返信が遅くなり申し訳ありません。返信がついた際の通知メールが届いていませんでした。
おっしゃる通りです。私の dsdt.dsl ファイル内に以下の記述が見つかりました:
Device (AMW0)
{
Name (_HID, "pnp0c14")
Name (_UID, Zero)
Name (WLMP, Zero)
Name (WMID, Zero)
Name (B0ED, Buffer (0x04)
{
0x00, 0x00, 0x00, 0x00
})
CreateDWordField (B0ED, Zero, WLID)
Name (B1ED, Buffer (0x04)
{
0x00, 0x00, 0x00, 0x00
})
Name (B2ED, Buffer (0x04)
{
0x00, 0x00, 0x00, 0x00
})
CreateDWordField (B2ED, Zero, BUID)
Name (_WDG, Buffer (0x0118)
さらにこちらも見つかりました:
Scope (_SB)
{
Method (_INI, 0, NotSerialized)
{
Store (0x07D0, OSYS)
If (CondRefOf (_OSI, Local0))
{
If (_OSI ("Linux"))
{
Store (One, LINX)
}
If (_OSI ("Windows 2001"))
{
Store (0x07D1, OSYS)
}
If (_OSI ("Windows 2001 SP1"))
{
Store (0x07D1, OSYS)
}
If (_OSI ("Windows 2001 SP2"))
{
Store (0x07D2, OSYS)
}
If (_OSI ("Windows 2006"))
{
Store (0x07D6, OSYS)
}
}
ここ数日間、DSDTの修正でこの問題を解決できないかいろいろと調べてみましたが、まだうまくいっていません。Superhai氏に AMW0.kext について尋ねてみるつもりです。実際、Windows(XPおよびVista)上でさえ、「Launch Manager」というアプリケーションをインストールするまではBluetoothボタンもワイヤレスボタンも一切機能しないのです。
引き続き自分のDSDTを調べて、可能であれば修正を試みてみます。
ご返信いただきありがとうございました。
kizwan
_INI のコードは無視して構いません。あれは他のメソッドがOSのバージョンを判定して処理を分岐できるように変数をセットしているだけです。
確認すべきなのは、Device (AMW0) の内部でWindows固有の条件分岐ロジックが走っていないかという点だけです。そこさえクリアすればデバイスが完全に定義され、IOReg内に登録されるようになります。あとはSuperhai氏のKextを使えば、(a) 望む動作をハードコードするか、あるいは (b) カーネル内オブジェクト(Kext)と通信するいくつかの手法を使って、OS X向けにLaunch ManagerのようなGUIアプリを作成することができるはずです。
もしSuperhai氏の AMW0 がIOKitベースで書かれているなら、デバイスインターフェイスを利用できます(こちらを参照:gemma.apple.com/documentation/DeviceDrivers/Conceptual/AccessingHardware/AH_IOKitLib_API/AH_IOKitLib_API.html#//apple_ref/doc/uid/TP30000380-BAJDAJDJ)。
お手伝いしたいところですが、現在手元に触れるAcer実機がないため、あまりお役に立てそうにありません。もしpentiumpc氏がソースコードを公開してくれれば、ASUSの「ASUS010」や「ATKD」デバイスもAcerの AMW0 と同様にMicrosoftのWMIインターフェイスをベースにしている可能性が高いため、彼の実装が非常に参考になるはずです。
最大の指針となるのは、やはりLinux界隈におけるCarlos氏の acer_acpi の実装でしょう。健闘を祈ります!
私はASUS M50SvノートPCの(ちょっぴり不幸な)ユーザーです。
私もFnキー関連で同じ問題を抱えています…
私の環境で箱出し(OOB)で動作するのは、Wi-Fi/BT切替(F2)、スリープ(F1)、輝度調整(F5+F6、ただし先にWindows側で環境光センサーを無効化しておく必要あり)、LCDオン/オフ(F7)で、LCD/VGA切替(F8)を押すと即座に再起動してしまい、残りのFnキーやマルチメディアボタンは一切動作しません。
pentiumpc氏のKext(pkg)も試してみましたが、何も起きませんでした。私のDSDTには ASUS010 が存在せず、代わりに ATKD デバイス配下に ATK0100 があるため当然といえば当然かもしれません。Kextのplistを自分の環境に合わせて書き換えてもみましたが、やはりダメでした。
(残念ながらWindows専用ですが)メディアキーやFnキーのリマップができる「ASUS Notebook Keys」(forum.noteboo kreview.com/showthread.php?t=150016)という素晴らしいアプリを見つけ、これを使ってOS Xで動かないメディアボタンやFnキーのイベントコードをキャプチャすることができました。さらにそのソースコード(rapid share.com/files/74365305/AsusNbKeys_v1.3_SRC.zip)も公開されているため、Linux用のACPIイベントデーモンであるACPID(acpid.sourc eforge.net/)を誰かがOS Xに移植してくれれば、それと組み合わせることで本来の動作を実現できるかもしれません…
なお、マルチメディア・トラックパッドの機能/アクションはこのアプリでもキャプチャできなかったため、Synapticsドライバ側だけで処理されているのだと思います。ただ奇妙なことに、Windows側でトラックパッドを「常にマルチメディアモード(外付けマウス検出時)」に設定しておくと、OS X上でもトラックパッドのバックライトが点灯したままになり、外付けマウスを抜いても消えません。どうやらドライバのその機能が何らかのACPIフラグをセットしているようです… これについてはもう少し詳しく調べる必要があります。
キャプチャしたイベントコードの一覧は以下の通りです:
メディアプレイヤー矢印キー(動作せず):
Fn + "":
->: Event: 0x41 - 早送り(Fast forward)
<-: Event: 0x40 - 巻き戻し(Rewind)
^ : Event: 0x43 - 停止(Stop)
v : Event: 0x45 - 再生/一時停止(Play/Pause)
ファンクションキー(Fn + F1〜F12):
Fn + "":
F1: Event: 動作する - 押すとスリープに入るためキャプチャ不可
F2: Event: 0x5D 動作する - Wi-Fi/BTスイッチ
F3: Event: 0x50 - メールアプリ起動
F4: Event: 0x51 - ブラウザ起動
F5: Event: 0x2D 動作する - 輝度を下げる
F6: Event: 0x1E 動作する - 輝度を上げる
F7: Event: 0x34 動作する - LCDオン/オフ
F8: Event: 0x61 - LCD/VGA切替(押すと即座に再起動してしまう)
F9: Event: 0x68 - 不明
F10: Event: 0x32 - ミュート
F11: Event: 0x31 - 音量を下げる
F12: Event: 0x30 - 音量を上げる
動作しないその他のキーボードコンビネーション(+Fn):
Fn + "":
T: Event: 0x99 - モデム オン/オフ
A: Event: 0x7A - 環境光センサー(Ambient light sensor)
C: Event: 0x8A - 不明
V: Event: 0x82 - スクリーンキャプチャ(推測)
Space: Event: 0x5C - Power4Gearの起動
メディアボタンキー:
Button 1: Event: 0x5C - Fn+Spaceと同じ機能(Power4Gearの起動)
Button 2: Event: 0x6B - 不明
Button 3: Event: 0x5C - 不明
Button 4: Event: 0x95 - 不明
残りの動作しないFnキーを修正する方法について、どなたかアイデアはありませんか?
acpid について少し調べてみますね。
私はASUS機を持っておらず詳しくもないため、以下の点くらいしかアドバイスできませんが:
1. Linuxの実装を参考にすること —— この分野ではLinux陣営の方がOS Xシーンよりはるかに先を行っています。
2. あなたの考えは正しいと思います。この厄介な問題を解決する王道は、Linuxが試みてきたように汎用的な基盤ソリューションを作り、その上で各ノートPC/デスクトップ固有のコードをライブラリやプラグインとして読み込ませるアプローチです。現状ではあまりにも個別の機種に特化した場当たり的なコードで解決されるケースが多すぎます。たとえばDell Miniのコミュニティは ApplePS2Keyboard.cpp を徹底的にハックして他のマシンでも起きているバグまで修正しましたが、あまりにもDell Mini専用に作り込んでしまったため、他の機種ではまったく使い物になりません。
3. もし異なるメーカーのノートPCやデスクトップを持つ少数の開発者グループを集めることができれば、各種プラグインやユーザースペースGUIでカスタマイズ可能な汎用ACPI/WMIデバイスドライバを作れるかもしれません。
@umanacpidについて少し調べてみますね。私はASUS機を持っておらず詳しくもないため、以下の点くらいしかアドバイスできませんが:1. Linuxの実装を参考にすること —— この分野ではLinux陣営の方がOS Xシーンよりはるかに先を行っています。2. あなたの考えは正しいと思います。この厄介な問題を解決する王道は、Linuxが試みてきたように汎用的な基盤ソリューションを作り、その上で各ノートPC/デスクトップ固有のコードを…
わあ、素早い返信ありがとうございます!
今思い出したのですが、以前Superhai氏が「OS Xには何かが欠けているためACPIDは役に立たない」と言っていたので、ACPIDについては手間をかけなくて大丈夫です…
信じていただきたいのですが、このノートPCとLinuxに関する情報は見つけられる限りすべて調べ上げました。ただ、使っている仕組みが違いすぎてOS Xにはそのまま応用できなかったのです。
ApplePS2といえば、VoodooPS2は試されましたか?私はかなり前から使っていますが、大きなバグもなく快適です。
やはりSuperhai氏の AMW0 が良い出発点になると思いますし、おっしゃる通りベースは汎用設計にして、各ベンダー固有の処理はプラグインで対応する形にすべきだと思います。
残念ながら私は開発者ではなくプログラミング言語も分かりませんが、論理的思考と徹底的な検索を武器に見つけられる限りのものをいじり回しています。
@uman_INIのコードは無視して構いません。あれは他のメソッドがOSのバージョンを判定して処理を分岐できるように変数をセットしているだけです。確認すべきなのは、Device (AMW0) の内部でWindows固有の条件分岐ロジックが走っていないかという点だけです。そこさえクリアすればデバイスが完全に定義され、IOReg内に登録されるようになります。あとはSuperhai氏のKextを使えば…
教えていただいたAppleのドキュメントを勉強してみます。理解するまでに少し時間がかかりそうですが。
その間、自分の dsdt.dsl に存在するNameやMethodに合わせて AMW0.kext のソースコードを書き換えてみました。その結果、IOReg内に AMW0 の新しいエントリが表示されるようにはなったものの、ホットキーボタン自体は依然として機能していません。
AMW0.kext にはまだまだ多くの作業が必要です。ACPI4ASUS.kext のソースコードからも何か学べるかもしれません。
ところで、dsdt.dsl 内でどのNameやMethodがホットキーボタンの動作を処理しているのかを特定するコツがあれば教えていただけませんか?自分のDSDTをMacBook3,1のDSDTと比較してみたりもしたのですが、まだ解明できていません。ちなみに、以下の関数は「POST(起動)時にワイヤレスデバイスをオンにする」よう指示しているものだと解釈して合っていますでしょうか?
Method (LAMN, 1, NotSerialized)
{
If (\_SB.AMW0.WLMP)
{
Store (Arg0, \_SB.AMW0.WLID)
Notify (\_SB.AMW0, 0xB0)
}
Else
{
PHSR (0x1F, Arg0)
}
}
kizwan
残念ながら、私自身もまだDSDTを勉強している最中なのです。しかも、ほとんどのメーカーはデバイスやそのメソッドに関するドキュメントを一切公開していないため、どうしても試行錯誤(トライ&エラー)頼みになってしまいます。
もしよろしければ、その AMW0.kext を送っていただけませんか?息子のAcer機が修理から戻ってくる前提ですが、現在作成中のSDカードドライバが完成したら、そちらもいろいろといじってみることができます。
@umanあ、AMW0 kextのソースコードのことです。よろしくお願いします。
AMW0.kext とソースコードはこちらからダウンロードできますよ:
supe rhai.com/xdarwin.html
なんと、SDカードリーダー用のドライバを開発されているのですね!それは非常に興味深いです。もしかして、Texas Instruments(TI)製のSDカードリーダーもあなたのドライバでサポートされる可能性はありますか?
GMA950の描画ノイズ(アーティファクト)問題はその後も続いていますか?Natit.kext やEFI文字列は試されましたか?
kizwan
@kizwanAMW0.kextとソースコードはこちらからダウンロードできますよ:supe rhai.com/xdarwin.html
[思わず額を叩く]うっかりそのページを見落としていました。リンクをありがとうございます!来週あたりに息子のAcer機が戻ってきたら、それを使って何か動かせるか試してみます。
@kizwanなんと、SDカードリーダー用のドライバを開発されているのですね!それは非常に興味深いです。もしかして、Texas Instruments(TI)製のSDカードリーダーもあなたのドライバでサポートされる可能性はありますか?
はい、まさにTI製チップ用です —— 手元のGateway機とAcer機に搭載されているのがそれなのです。主にIOKitやカーネルドライバ開発に慣れるための入門用として取り組んでいます。他にもやりたいことはいくつかあるのですが、まずは手頃な規模のプロジェクトから始めたいと思いまして。
@kizwanGMA950の描画ノイズ(アーティファクト)問題はその後も続いていますか?Natit.kextやEFI文字列は試されましたか?
iPCに含まれていた2つのKextをそのまま使っており、内部で何をしているかはあまり詳しく見ていません。アーティファクト自体はごく軽微なので、わざわざ原因を追跡する気になれず放置しています。DSDTの改造スキルを上達させたいのでDSDTアプローチを試してみるかもしれませんが、あなたも痛感されている通り、DSDTの解析はとにかく時間がかかりますからね!
-u
@kizwanなんと、SDカードリーダー用のドライバを開発されているのですね!それは非常に興味深いです。もしかして、Texas Instruments(TI)製のSDカードリーダーもあなたのドライバでサポートされる可能性はありますか?
昨日発表された新型MacBookシリーズにSDカードスロットが標準搭載されるというニュースを受けて、このドライバ開発は一旦保留にしました。先に進む前に、まずはApple純正ドライバがどのような実装になっているか確認してみたいと思います。
さらに 64 件のコミュニティ検証ノートを表示完全なアーカイブ記録
@umanI've put this on hold with yesterday's news that Apple is including SD card slots on the new macbooks. I'd like to see what they have done before proceeding.
For sure they use USB SD Reader i bet on that...
Wonder where did PentiumPC go...
Maybe he can release the source for ACPI4Asus.kext to help us understand what he did and maybe someone can continue his work, if he has no time for that, for the rest of the custom "OEM" stuff that make our life's so PITA.
@umanI'm using the two? kexts that I found in iPC. I didn't really pay much attention to what they do. The artifacts are minor enough that I haven't bothered to track them down. I may try the DSDT approach, since I want to get better at DSDT mods, but it's so time-consuming, as you've no doubt found out! -u
I was using Natit.kext for GMA950 on Acer Aspire 3680. No artifacts…that I can confirm. Right now I'm using EFI string. Don't forget to restore vanilla AppleIntelIntegratedFramebuffer.kext. Don't get excited yet, dual monitor only works with mirror mode.
I still unable to get display working with DSDT yet except for nVidia Go 7300 on Aspire 9420.
kizwan
@umanI've put this on hold with yesterday's news that Apple is including SD card slots on the new macbooks. I'd like to see what they have done before proceeding.
I only heard new iPhone is coming soon…iPhone 3G S. ^_^
King,
It may be that your DSDT just has functions defined for Windows, especially since Linux guys also had problems.
Have you talked to or contacted the people at OSXCORES? They have patched BIOSes for OSX:
M50SV AS207 (osxcores.sit e50.net/user/image/asus-m50sv-as207.zip)
ASUS
M50V as209 (osxcores.sit e50.net/user/image/m50vas.209.zip)
ASUS
I'm not sure what fixes they have made, but they do custom work too. See:
osxcores.sit e50.net/services.htm
Perhaps they can help.
-u
uman,
Just got a reply from Superhai. Its look like Superhai will not continue AMW0 project. Is there anybody interested continuing his project? :'(
Other topic…
Sleep:-
I found out that by deleting entry for EHCI devices in Acer Aspire 9420 DSDT, it was able to sleep. Now the EHCI devices detected as external/expansion card. Funny thing is external hard disk, which connected to EHCI port, is not turn off when putting laptop to sleep. Is this also happen with real MacBook?
I tried to compare DSDT from MacBook3,1 with mine and I found this:-
Acer Aspire 9420:-
Method (_L03, 0, NotSerialized)
{
Notify (\_SB.PCI0.USB1, 0x02)
}
MacBook3,1:-
Method (_L03, 0, NotSerialized)
{
Notify (\_SB.PCI0.UHC1, 0x02)
Notify (\_SB.PWRB, 0x02)
}
I know that "Notify (\_SB.SLPB, 0x80)" will put computer to sleep but I don't know what "Notify (\_SB.PWRB, 0x02)" do. Do you know what "Notify (\_SB.PWRB, 0x02)" means? In my DSDT, PWRB is handle by SLPB (handle both sleep-button & power-button).
I also found "extra" method in EHCI function (MacBook3,1):-
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x07)
{
"AAPL,current-available",
0x04B0,
"AAPL,current-extra",
0x02BC,
"AAPL,current-in-sleep",
0x03E8,
Buffer (0x01)
{
0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
I think instead of removing EHCI entry from DSDT, maybe I can use this code to set EHCI device as external device. Maybe this can fix sleep issue too.
Clamshell:-
Does real MacBook automatically resume from sleep when lid is open? Or still need to push keyboard button to resume from sleep, just like windows?
kizwan
@kizwanuman, Just got a reply from Superhai. Its look like Superhai will not continue AMW0 project. Is there anybody interested continuing his project? :'(
I wish I could say yes, but my son's Acer has qualified for a replacement. So I won't have a machine that has an AMW0 to test. And that is a huge problem for development. As I understand it, Superhai's AMW0 basically allows you to call into the AMW0 device. The Linux project acer-acpi (and it's successor wmi-acpi) does the same, and supplies some utilities so that you can call/respond to the AMW0 methods.
The IOKit doc is pretty good at showing how to make a user-callable module that calls in-kernel routines. So if you know (or have someone who has an Acer and knows C) it shouldn't be hard to hack. My suggestion is to start a mini-group of Acer users, and see if anyone has any dev experience amongst the group.
Other topic… Sleep:- I found out that by deleting entry for EHCI devices in Acer Aspire 9420 DSDT, it was able to sleep. Now the EHCI devices detected as external/expansion card. Funny thing is external hard disk, which connected to EHCI port, is not turn off when putting laptop to sleep. Is this also happen with real MacBook?
I don't think you want to delete the EHCI devices. I think you need to Notify them like on my MacBook Pro DSDT.
I know that "Notify (\_SB.SLPB, 0x80)" will put computer to sleep but I don't know what "Notify (\_SB.PWRB, 0x02)" do. Do you know what "Notify (\_SB.PWRB, 0x02)" means? In my DSDT, PWRB is handle by SLPB (handle both sleep-button & power-button).
The Mac has 3 devices: PWRB (power button), SLPB (sleep button), and LID0 (the lid switch). Most hackbooks don't have all of these. I believe my gateway only had SLPB (although I am not sure-- my DSDT.dsl does have a PWRB, but I may have added it).
The power button has multiple functions. Normally if you hit it, it brings up a menu to sleep, shutdown, restart or cancel. But when the Mac is already sleeping (not thru lid sleep), it will wake from sleep. there is also some programmatic control of it in the System preferences. When a Mac has slept through the lid switch, then opening the lid switch resumes the Mac.
I also found "extra" method in EHCI function (MacBook3,1):- Method (_DSM, 4, NotSerialized) { Store (Package (0x07) { "AAPL,current-available", 0x04B0, "AAPL,current-extra", 0x02BC, "AAPL,current-in-sleep", 0x03E8, Buffer (0x01) { 0x00 } }, Local0) DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) Return (Local0) } I think instead of…
Strange my Macbook dsdt does not have this code AT ALL.
Clamshell:- Does real MacBook automatically resume from sleep when lid is open? Or still need to push keyboard button to resume from sleep, just like windows?
Opening the lid resumes from sleep.
I'm sorry I can't be of much use now. I'm hoping next week that I will find the time to backup and do a retail install of 10.5.7. Only then will I try more DSDT hacking, since right now my machine is a mess of hacked kexts!
-u
Multiple video card mods
Has anyone done any work trying to integrate multiple video cards? I've been searching for weeks. Trying to find info regarding DSDT in general is tough.
Fixing sleep and usb after wake up
I finally fixed sleep on my lappie!
Hi candykane,
did you already update to 10.5.8 and is your sleep fix stillworking?
Apple probably changed something in Powermanagement which is breaking sleep on most installs.
Do you use Openhaltrestart.kext or is sleep working without it?
Thanks Al
@pentiumpcchange _HID to _CID Device (PWRB) { Name (_HID, EisaId ("PNP0C0C")) ---> Name (_CID, EisaId ("PNP0C0C")) Name (_UID, 0xAA) Name (_STA, 0x0B) } This one I got it off some site, cannot remember where. (credit goes to him/her) This will activate your power button to bring up the shutdown menu.
hmm weird, tried doing this on my gigabyte board but the shutdown menu wont show, when i press the power button my hack will just sleep thats it
@sk1nhd33thmm weird, tried doing this on my gigabyte board but the shutdown menu wont show, when i press the power button my hack will just sleep thats it
Uncheck "Allow power button to put the computer to sleep" in energy saver =P.
I dont mean to hijack the thread, but what beeter place for 2 quick DSDT questions for people who actually seem to know what they are talking about !
No one has been able to answer me, well... because no one seems to actually KNOW what they are saying... Please please help!
DSDT is the voodoo of computers for to me loool...
Ok, I've got 2 Acer laptops and 1 Asus laptop. Just for reference. All had OSx, 10.4 to 10.5, many distros, my latest and greatest in my sig.
How on earth do I know if DSDT is doing something or not ?
iAtkos v7 Chameleon 2 RC1 (now RC2) and fassls DSDT script checked. DSDT.aml
is in root, but I tried in Extra folder and felt absolutely no difference.
On first boot I press power, poweroff window comes up (native install) My multimedia controller on my keyboard controls volume and front row funtions! (photos in link in signature) - Video card not detected (but with strings + 2 kext native HD res QE etc)
Out of the box, FN and up down increases/decreases screen brightness. Other fn work, very few dont.
. Audio works OTB, clicks pops etc, no internal or external mic. VoodooHDA is the same,
Ehternet with kext only... didnt try stringing it because I got it to work
So how do I know if DSDT is working? if I remove it I am almost certain my laptop will respond the same.
My previous laptops, NONE used DSDT, I pressed power button, they worked fine! Brightness and other stuff too... etc etc
and I am scared because I read sometimes
"Patch DSDT at you own risk! !
as in flashing the bios or something... can I bick my laptop with DSDT !?! When can DSDT be dangerous?
I want to try decompiling and fixing my dsdt for Snow... but I dont even know if
1) I actually need it
2) If it is working or not
3) it is dangerous, or when is it dangerous?
ok, three questions
"
@Gurruwiwi1) I actually need it 2) If it is working or not 3) it is dangerous, or when is it dangerous? …
1) You don't need it unless you need it. If everything is working properly, so you don't need it. DSDT override just for PC that have problem with CPU alias (only can use one core), sound, graphic card, power management & etc.
2) It is working.
3) No hard evidence that it is dangerous. DSDT override can be applied by 2 ways; i) by using dsdt.aml file. ii) by flashing it to ROM permanently. Of course the second one is dangerous if you do it wrongly.
kizwan
thanks for the reply
Ah, ok, you can actually flash a BIOS to mimic hardware change... ouch! no thanks.
The thing is kizwan, if I remove the DSDT.aml file, my system boots (Leo) and behaves the same! Which is really weird since I have perfect use of my multimedia pad (volume, next song, ff, rw, mute, hold and, believe it or not, and, the "enter" button works the same as Enter key, the arrows next to it like cursor, and the envolving white lines "tabs" stuffs depending on program, firefox, openoffice, folders, etc...) and 75% of bios FN keys etc.
For instance, my webcam, out of the box, reads in profile as "Acer Crystal Eye Webcam" - 100% opertional including ichat, ibooth, etc, which is know to crash with some "working" webcams - this withou dsdt or patching or stringing
That is why I say I have no idea, following logic from what I read, how the DSDT WORKS to help boot or not. even if its not present this laptop boots Leo like if it had.
Now I do have dual boot with dsdt present on both sides, but I guarantee you with single boot I had this behaviour
So the powerbutton fix, will make my power button do either sleep or shutdown/logout/resatart prompt? It depends on the setting in System Prefs is what you guys are saying? (Once enabled through dsdt)
My power button currently does nothing! =P
@EnzoFXSo the powerbutton fix, will make my power button do either sleep or shutdown/logout/resatart prompt? It depends on the setting in System Prefs is what you guys are saying? (Once enabled through dsdt) My power button currently does nothing! =P
For a working power button in Mac OS X, a dialog box will appear if you press the power button. In this dialog box, you have a choice either you want to sleep, restart or shutdown (you will see all of the 3 choices).
If your power button does nothing, it means it have not yet enabled in DSDT (most machine has this enabled by default). If you have tried to enabled it in DSDT, maybe the code is wrong. Try to check it again.
kizwan
I have not tried, but I will.
I was just wondering if what it did (Once working) depended on the setting in Sys Prefs. I.e. whether it just sleeps, or if it gives you the shutdown/etc options.
@EnzoFXI have not tried, but I will. I was just wondering if what it did (Once working) depended on the setting in Sys Prefs. I.e. whether it just sleeps, or if it gives you the shutdown/etc options.
Once it working it will always shows you the options, either sleep, shutdown or restart. There is no setting in System Preferences for power button.
kizwan
I applied the power button fix. However, It only seems to work when I check the box to allow it to sleep the computer. Other than that, it does nothing - no menu or anything.
I applied the power button fix but it doesn't work, when I press it my computer will enter sleep mode without displaying any message just like it did before I applied the fix, I have a gigabyte EP45-DS3LR, anyone knows whats wrong?, this is how the DSDT looks like:
Device (PWRB)
{
Name (_HID, EisaId ("PNP0C0C")) --> Name (_CID, EisaId ("PNP0C0C"))
Method (_STA, 0, NotSerialized)
{
Return (0x0B)
}
}
I have a Thinkpad X300, that whenever I put to sleep, I see the wireless light blink, and the the laptop wakes up. It seems as though the wireless card is waking the system after a second or two every time I sleep it.
Does anyone have any recommendations for this in terms of the DSDT? I've attached mine if it helps.
DSDT advice needed
My system is a Dell D830.
After a lot of tinkering around, I managed to install Snow Leopard on it. Please see my guide ↗.
I did a few DSDT mods to get some basic fixes.
Now, the system sleeps (S3 suspend to ram) but does not deep sleep (S5 suspend to disk), shutdown or reboot. I am using OpenHaltRestart.kext and SleepEnabler.kext. The latter made it possible to even suspend.
I am including my dsdt.dsl (which includes my fixes, by the way).
I see tantalizing references to the sleep button, SBTN, etc., but I have not found any systematic documentation for the code (btw. I am comfortable with coding as I do plenty of numerical coding in my work).
Can anyone take a look and let me know what I need to do to fix my poweroff and hibernate problem ?
The DSDT repository does not contain a fixed DSDT for my laptop.
PS: Microsoft's ASL compiler should be outlawed.
@sk1nhd33tchange _HID to _CID Device (PWRB) { Name (_HID, EisaId ("PNP0C0C")) ---> Name (_CID, EisaId ("PNP0C0C")) Name (_UID, 0xAA) Name (_STA, 0x0B) } This one I got it off some site, cannot remember where. (credit goes to him/her) This will activate your power button to bring up the shutdown menu.
hmm weird, tried doing this on my gigabyte board but the shutdown menu wont show, when i press the power button my hack will just sleep thats it
mine will shut down instantly
edit: well actually it just goes to sleep mode verry fast^^ too bad my system wont wake from sleep...
DSDT shutdown patch
With this and new restart patch chameleon booter from Duvel (strong beer that) I have only fakesmc as an added kext, although I'm about to reinstall voodoohda so I can hopefully have two soundcards working.. anyway this is mm67's work I just found it a pain to find the detail on insane so posting it here.. Thanks to all who put together these fixes. Need to add the two operation region bits and change your method PTS
OperationRegion (DEBG, SystemIO, 0x80, One)
Field (DEBG, ByteAcc, NoLock, Preserve)
{
DBG1, 8
}
OperationRegion (PMRS, SystemIO, 0x0430, 0x13)
Field (PMRS, ByteAcc, NoLock, Preserve)
{
, 4,
SLPE, 1,
Offset (0x08),
GPSE, 16,
GPSS, 16,
Offset (0x12),
, 1,
SWGC, 1
}
Method (_PTS, 1, NotSerialized)
{
Or (Arg0, 0xF0, Local0)
Store (Local0, DBG1)
Store (Zero, \_SB.PCI0.LPCB.AG3E)
If (LEqual (Arg0, 0x05))
{
Store (Zero, SLPE)
Sleep(0x10)
}
}
also your LPCB has to be like so
Device (LPCB)
{
Name (_ADR, 0x001F0000)
OperationRegion (LPC0, PCI_Config, 0xA4, 0x02)
Field (LPC0, ByteAcc, NoLock, Preserve)
{
AG3E, 1
}
I suppose add device ID if you need it, I'm on ICH10 so don't.
Also attaching blackosx's duvel+rekursor version of RC4 here, replace your chameleon boot file with the one from here and add these to boot.plist to get unique UUID and restart fix:
<key>DeviceID</key>
<string>XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</string>
<key>RestartFix</key>
<string>YES</string>
@SweatyWith this and new restart patch chameleon booter from Duvel (strong beer that) I have only fakesmc as an added kext, although I'm about to reinstall voodoohda so I can hopefully have two soundcards working.. anyway this is mm67's work I just found it a pain to find the detail on insane so posting it here.. Thanks to all who put…
It's only this :
OperationRegion (PMRS, SystemIO, 0x0430, 0x13)
Field (PMRS, ByteAcc, NoLock, Preserve)
{
, 4,
SLPE, 1,
and this:
If (LEqual (Arg0, 0x05))
{
Store (Zero, SLPE)
Sleep(0x10)
}
that make the shutdown work, rest of the code is Gigabyte specific. This address 0x0430 is also motherboard specific, it is PMBASE+30h. Address of PMBASE is defined in FACP, on most boards it can also be checked from processor definitions. For example I have this in my dsdt:
Processor (CPU0, 0x00, 0x00000410, 0x06)
Here 0x00000410 is referring to PMBASE+10h so I use 0x430 on my Gigabyte board. On my MSI board's dsdt I have this:
Processor (P001, 0x01, 0x00000810, 0x06) {}
So in MSI shutdown code I use this:
OperationRegion (PMRS, SystemIO, 0x0830, 0x13)
Ok cheers mate, had to add the other bits on my board (asus p5ql/epu) to get it to compile, I'll try the simpler way later.. At least it did work the way I bodged it
EDIT: OK fixed code as you suggested I needed to use 0x830, also got rid of unnecessary bits, sometimes I needed to turn PSU off with 0x430 (before I could restart, shutdown was complete), that seems fixed now. Thanks a lot.
Im in a fix.. Everywhere there is a DSDT Fix for getting the USB port to be displayed as Built-in but i need the opposite..
USB - 3 shows as built-in, but it has bluetooth. hence on sleep i loose bluetooth.. if i remove the entry altogether, i have it as external but my sleep fails..
Am having Lenovo T60p. with ICH7-M chipset.
Thanks,
Xavier
Shutdown & Restart with sleep fix-Thanks to Sweaty & mm67
Many thanks to Sweaty and mm67. You are really nice. This resolve the problem I thought it would never be resloved.
I just made a small change to Method (_PTS, 1, NotSerialized) in order to resolve sleep issue on my notebook CQ60-202TX. Now let me put all together step by step as a guide. This might help newbie.
1 Add OperationRegion below before Method (_PTS, 1, NotSerialized)
OperationRegion (DEBG, SystemIO, 0x80, One)
Field (DEBG, ByteAcc, NoLock, Preserve)
{
DBG1, 8
}
OperationRegion (PMRS, SystemIO, 0x0430, 0x13)
Field (PMRS, ByteAcc, NoLock, Preserve)
{
, 4,
SLPE, 1,
Offset (0x08),
GPSE, 16,
GPSS, 16,
Offset (0x12),
, 1,
SWGC, 1
}
2 Check Device (LPC) if there is a similar Operation Region "LPC" like below. If you don't have LPC device, just search Name (_ADR, 0x001F0000), sometimes the device name is different.
Device (LPC)
{
Name (_ADR, 0x001F0000)
OperationRegion (LPC0, PCI_Config, 0xA4, 0x02)
Field (LPC0, ByteAcc, NoLock, Preserve)
{
AG3E, 1
}
If there is no OperationRegion LPC, please add code above. In my dsdt's OperationRegion LPC0, there is an EXPE instead of AG3E. So I did not modify it, but had to change a bit in Method (_PTS, 1, NotSerialized) . See mine below:
OperationRegion (LPC0, PCI_Config, 0x40, 0xC0)
Field (LPC0, AnyAcc, NoLock, Preserve)
{
Offset (0x60),
, 10,
EXPE, 1
}
3 Add code below in Method (_PTS, 1, NotSerialized) like this
Method (_PTS, 1, NotSerialized)
{
Or (Arg0, 0xF0, Local0)
Store (Local0, DBG1)
Store (Zero, \_SB.PCI0.LPC.EXPE) //Please change to \_SB.PCI0.LPC.AG3E if you don't have the EXPE, but add AG3E.
If (LEqual (Arg0, 0x05))
{
Store (Zero, SLPE)
Sleep(0x10)
}
Else
{
//**Original Code, this resolved my sleep issue.
}
}
//This is written by mm67. You are really nice.
This address 0x0430 is also motherboard specific, it is PMBASE+30h. Address of PMBASE is defined in FACP, on most boards it can also be checked from processor definitions. For example I have this in my dsdt:
Processor (CPU0, 0x00, 0x00000410, 0x06)
Here 0x00000410 is referring to PMBASE+10h so I use 0x430 on my Gigabyte board. On my MSI board's dsdt I have this:
Processor (P001, 0x01, 0x00000810, 0x06) {}
So in MSI shutdown code I use this:
OperationRegion (PMRS, SystemIO, 0x0830, 0x13)
4 Add these in your com.apple.Boot.plist and then put "boot_RC4_Duvelv2.1_Rekursor" under your boot partition.
<key>DeviceID</key>
<string>******XX-***X-***X-***X-************</string>
<key>RestartFix</key>
<string>YES</string>
Now you can remove OpenHaltRestart.kext and PlatformUUID.kext or other similar kexts.
@pentiumpcMost portable system don't sleep on closing the LID, I tried to find a DSDT fix for it but cannot find it. (google is my best friend.) so I wrote 1 to fix my own. If you have a better or alternative method, please let me know. Thanks. Device (LID0) { Name (_HID, EisaId ("PNP0C0D")) //LID detection Method (_PRW, 0, NotSerialized) {…
Noob here.
Never did work on my dsdt, I have errors after compiling on which it cannot find the registers. After much of googling, I have edited one value on my dsdt, on the LID0, instead of 0x03 I have made it to 0x04. I have sleep on lid close now, but I still don't have wake on lid open or wake on keyboard press after sleep via Fn+F1.
Here is my DSDT.dsl if somebody care to point me to the right direction.
I have repatched the dsdt once again with a fresh one. I delete all dsdt and did the patching once again, i still have sleep on lid close, Fn+F1, on the power button. I can wake thru power button with no problems, I can wake buy plugging or unplugging a usb device. But no wake on lid open or keyboard.
With this dsdt, clamshelldisplay.kext is not necessary anymore, so I have removed this kext.
Btw I have modded my dsdt on LID as almost the same on earlier post by pentiumpc.
Any ideas on how to enabel wake on lid open?
What you need to find is the method that is called upon a lid switch event, which means it is under EC0, the embedded controller device. On a MacBook, it's typically _Q20, which looks like this:
Method (_Q20, 0, NotSerialized)
{
Store (LSTE, LIDS)
Notify (\_SB.LID0, 0x80)
}
On my Gateway, it's _Q8A:
Method (_Q8A, 0, NotSerialized)
{
If (LIDE)
{
Store ("_Q8A : LID Switch Event", Debug)
Store (0x01, LIDE)
If (IGDS)
{
Store (0x90, SMIF)
Store (0x00, TRP0)
}
Notify (\_SB.LID0, 0x80)
}
on many other notebooks, it's _Q09. So you'll need to find where it is, and add the appropriate Notify call, to inform the OS that the laptop should be woken up. (I've modified my DSDT to use LID0, to better match the MacBook DSDT).
Enabled bluetooth on Acer Aspire 9420
Do you remember, not a long time a go, I'm pursuing to enable bluetooth in Mac OS X? I'm still unable to get the bluetooth button working but I'm able to make the bluetooth device working via DSDT hacking. I'm still however unable to trigger the bluetooth ON/OFF button. I even trying to re-map the bluetooth ON/OFF button to another button (Fn+..) but unsuccessful. Therefore, I modify System Wake (_WAK) to enable bluetooth. This is for temporary solution. When hot booting the computer, it need to be put to sleep one time only & waking up the computer will turning ON the bluetooth device. To make it working cleanly, I modify both System Wake (_WAK) and Prepare to Sleep (_PTS). In the process, I also fixed the wireless device won't turn ON after waking from sleep.
_WAK code:-
Method (_WAK, 1, NotSerialized)
{
Store (Arg0, P80H)
If (LEqual (Arg0, 0x03))
{
Store (CIRT, \_SB.PCI0.LPCB.EC0.CIRE)
}
If (LOr (LEqual (Arg0, 0x03), LEqual (Arg0, 0x04)))
{
Store (EEPM, \_SB.PCI0.LPCB.EC0.WEPM)
Store (CAST, \_SB.PCI0.LPCB.EC0.CAME)
Store (WLPW, \_SB.PCI0.LPCB.EC0.WLEN)
Store (BTPW, \_SB.PCI0.LPCB.EC0.BTEN)
Store (WLLE, \_SB.PCI0.LPCB.EC0.WLLD)
Store (BTLE, \_SB.PCI0.LPCB.EC0.BTLD)
}
Store (0x00, \_SB.PCI0.LPCB.EC0.MUTE)
Store (0x00, \_SB.PCI0.LPCB.EC0.KTAF)
Store (0x01, \_SB.PCI0.LPCB.EC0.KTEE)
// start
// Add support for Wireless & Bluetooth devices (power & LED).
// Turned ON Wireless & Bluetooth devices after resume from Sleep.
Store (0x01, \_SB.PCI0.LPCB.EC0.WLEN)
Store (0x01, \_SB.PCI0.LPCB.EC0.WLLD)
Store (0x01, \_SB.PCI0.LPCB.EC0.BTEN)
Store (0x01, \_SB.PCI0.LPCB.EC0.BTLD)
// end
..................
_PTS code:-
- Preventing the wireless device from turn OFF before goes to sleep. Therefore, the wireless device can be turn ON after waking from sleep.
Method (_PTS, 1, NotSerialized)
{
Store (Arg0, P80H)
Store (0x01, \_SB.PCI0.LPCB.EC0.MUTE)
If (LEqual (Arg0, 0x03))
{
Store (\_SB.PCI0.LPCB.EC0.CIRE, CIRT)
}
If (LEqual (Arg0, 0x04))
{
Store (0x01, \_SB.PCI0.LPCB.EC0.BLNK)
Store (0x00, \_SB.PCI0.LPCB.EC0.CIRE)
}
If (LOr (LEqual (Arg0, 0x03), LEqual (Arg0, 0x04)))
{
Store (\_SB.PCI0.LPCB.EC0.WEPM, EEPM)
Store (\_SB.PCI0.LPCB.EC0.CAME, CAST)
Store (\_SB.PCI0.LPCB.EC0.WLEN, WLPW)
Store (\_SB.PCI0.LPCB.EC0.BTEN, BTPW)
Store (\_SB.PCI0.LPCB.EC0.WLLD, WLLE)
Store (\_SB.PCI0.LPCB.EC0.BTLD, BTLE)
}
Store (0x00, \_SB.PCI0.LPCB.EC0.CAME)
Store (0x00, \_SB.PCI0.LPCB.EC0.CIRE)
// Preventing Wireless device from turning OFF when system going to Sleep.
// Store (0x00, \_SB.PCI0.LPCB.EC0.WLEN)
// start
// Add support for Wireless (LED) & Bluetooth (power & LED) devices.
// Turned OFF Wireless (LED) & Bluetooth (power & LED) devices before going to Sleep.
Store (0x00, \_SB.PCI0.LPCB.EC0.WLLD)
Store (0x00, \_SB.PCI0.LPCB.EC0.BTEN)
Store (0x00, \_SB.PCI0.LPCB.EC0.BTLD)
// end
If (LEqual (Arg0, 0x05))
{
PHSR (0x28, 0x00)
}
}
Applying this fix causing the computer unable to sleep anymore because USB4 device (where the bluetooth device attached to) causing the system wake immediately. I remember that according to ACPI Specification revision 4 documentation; in addition to the _PRW control method, _PSW control method can be used to enable or disable the device’s ability to wake a sleeping system.
Arguments: (1) Arg0 – An Integer containing a wake capability control 0 – Disable the device’s wake capabilities 1 – Enable the device’s wake capabilities
By looking at USB4 device in DSDT, there is _PSW entry that can be manipulate. This is the entry for USB4 device in DSDT after modifying the argument (set to 0):-
Device (USB4)
{
Name (_ADR, 0x001D0003)
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)
// Disable USB4 capability to wake a sleeping system
Store (0x00, U4EN)
}
Else
{
Store (0x00, U4EN)
}
}
Method (_S3D, 0, NotSerialized)
{
Return (0x02)
}
Method (_S4D, 0, NotSerialized)
{
Return (0x02)
}
}
The last FIX enable the computer to sleep again.
kizwan
Nice work! Too bad I don't have bluetooth!
I've come to the conclusion that getting access to keyboard events is impossible in DSDT. I think you have three choices: construct an AMW0 device kext to bind to the AMW0 (which I presume is in your DSDT). This would be a challenge, but might allow you to be straight retail. Two, hack at ApplePS2Keyboard (if PS2) or something else if USB. Or three, do the same with VoodooPS2 (again if PS2).
If you have USB, your job may be easier, since you might be able to do it outside kernel space.
Battery indicator
I'm successfully compiled AMW0.kext for SL but got kernel panic while initializing some MethodTerm at boot. Since AMW0.kext project is not finished, I think I'm going to try ACPI4ASUS.kext instead. If ACPI4ASUS.kext developed to works with AMW0 v2 interface (AMW0 and WMID), it should works with other laptop model too.
I'm trying to enable battery icon by patching DSDT. It is being done by adjusting ADP1 & BAT0 code according to DSDT from MBP4,1. Not successful yet, but the battery indicator did show up. It said battery is not detected & current power source is power adapter. Do you think it is possible to make it working by just patching the DSDT?
EDIT: I have found the right "query method" to automatically turn ON Bluetooth device during boot-up. I just tried all of the "query method" in the DSDT until I found the right one.
Method (_Q3F, 0, NotSerialized)
{
// start
// auto turn ON Bluetooth device during computer startup
Store (0x01, \_SB.PCI0.LPCB.EC0.BTEN)
Store (0x01, \_SB.PCI0.LPCB.EC0.BTLD)
// end
HKEY (0x3F)
}
kizwan
Can you somebody help me to enable my audio on Snow Leopard?My audio chip is Realtek ALC662:
I make a codec dump:You can download and see it.
hot file.com/dl/32500771/8b28fa6/Realtek_ALC662_dump.txt.rar.html
I want to fix my audio in DSDT, so I read your tutorial and convert the Default pinconfig on each "[JACK]" device:
Mic (colour:Pink) 01a19830 ---> reversed 3098a101
Mic which is not a jack 99a3093f ---> 3f09a399
HP - 0121401f ---> 1f402101
SPDIF -01441120 ---> 20114401
This is my audio configuration on my laptop.
I don't know how to generate values which I haveto enter in my DSDT.This is my DSDT (HDEF):
Device (HDEF)
{
Name (_ADR, 0x001B0000)
OperationRegion (HDAR, PCI_Config, 0x4C, 0x10)
Field (HDAR, WordAcc, NoLock, Preserve)
{
DCKA, 1,
Offset (0x01),
DCKM, 1,
, 6,
DCKS, 1,
Offset (0x08),
, 15,
PMES, 1
}
Name (_PRW, Package (0x02)
{
0x0D,
0x03
})
}
@kizwanEDIT: I have found the right "query method" to automatically turn ON Bluetooth device during boot-up. I just tried all of the "query method" in the DSDT until I found the right one. Method (_Q3F, 0, NotSerialized) { // start // auto turn ON Bluetooth device during computer startup Store (0x01, \_SB.PCI0.LPCB.EC0.BTEN) Store (0x01,…
Where you put this code?
I searched in my DSDT for
Method (_Q3F, 0, NotSerialized)
, But didn't find it.I have a laptop with Bluetooth, where to put this code?
@kizwanI'm successfully compiled AMW0.kext for SL but got kernel panic while initializing some MethodTerm at boot. Since AMW0.kext project is not finished, I think I'm going to try ACPI4ASUS.kext instead. If ACPI4ASUS.kext developed to works with AMW0 v2 interface (AMW0 and WMID), it should works with other laptop model too.
So does Asus use AMW0, or do you need to add that code from AMW0. A WMID kext would be useful as many PC vendors use that interface. uninc's DSDT was hideously intertwined with WMID.
I'm trying to enable battery icon by patching DSDT. It is being done by adjusting ADP1 & BAT0 code according to DSDT from MBP4,1. Not successful yet, but the battery indicator did show up. It said battery is not detected & current power source is power adapter. Do you think it is possible to make it working by just patching the DSDT?
I'm not sure, but given that the ACPI 4.0 spec devotes pages and pages to battery and power issues, I think it is at least possible. I also intend to try to solve this (but it's a lower priority for me because my laptop battery is toast anyway). I tried VoodooBattery, which worked great (it told me my battery was toast, lol), but then it kernel panic'ed HARD and I had to repair my disk, so I won't be using that again.
EDIT: I have found the right "query method" to automatically turn ON Bluetooth device during boot-up. I just tried all of the "query method" in the DSDT until I found the right one. Method (_Q3F, 0, NotSerialized) { // start // auto turn ON Bluetooth device during computer startup Store (0x01, \_SB.PCI0.LPCB.EC0.BTEN) Store (0x01,…
I still don't understand how query methods are executed, nor how they are bound to some device. ACPI says:
"For an embedded controller event, OSPM will queue the control method of the name _QXX, where XX is the hex format of the query code. Notice that each embedded controller device can have query event control methods. Similarly, for an SMBus driver, if no driver registers for SMBus alarms, the SMBus driver will queue control methods to…
And then they discuss it more with a completely unhelpful example. Oh wait, the acpi implementers guide is more helpful:
What’s the trap? Using decimal instead of hexadecimal numbers in _Lxx, _Exx, and _Qxx names in your ASL code. When the number (xx) in the _Lxx, _Exx, or _Qxx event handler object name in the ASL code does not match the number of the bit in the GPE register block (or match the number of the embedded controller query number in the case…
DSDT is fun but time consuming!
@breakkyWhere you put this code? I searched in my DSDT for Method (_Q3F, 0, NotSerialized) , But didn't find it.I have a laptop with Bluetooth, where to put this code?
Each laptop model is going to be different. That's why you have to be prepared to do some work to get DSDT going. You will first need to determine what symbols, events, and queries correspond to your bluetooth device. Then kizwan's code can act as a guide.
@breakkyWhere you put this code? I searched in my DSDT for Method (_Q3F, 0, NotSerialized) , But didn't find it.I have a laptop with Bluetooth, where to put this code?
It is hardware & BIOS specific. You may have different query method. I'm afraid, you need to try & error every query method in your DSDT.
EDIT: You may want to follow uman suggestion (next post) to get your audio working. It is much easier.
As for your sound, you need to do a lot of work to get your sound working. You already have HDEF entry in DSDT, so you just missing legacy/patched kext. You need to put your ConfigData & Pin Config in legacy/patched kext. Use this legacy kext as a template:-
media fire.com/?vkzyzmtzozo
If you like to put ConfigData & PinConfigurations in DSDT, this is how HDEF entry will look like (between "// start" & "// end"):-
Device (HDEF)
{
Name (_ADR, 0x001B0000)
Name (HDWA, 0x00)
Name (_PRW, Package (0x02)
{
0x05,
0x03
})
Method (_PS0, 0, Serialized)
{
If (LEqual (HDWA, 0x00))
{
Store (0x01, HDWA)
HKEY (0x8F)
}
}
Method (_PS3, 0, Serialized)
{
Store (0x00, HDWA)
}
// start - required code
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x0C)
{
"built-in",
Buffer (One)
{
0x00
},
"codec-id",
Buffer (0x04)
{
0x83, 0x08, 0xEC, 0x10
},
"ConfigData",
Buffer (0x40)
{
/* 0000 */ 0x01, 0x47, 0x1C, 0x30, 0x01, 0x47, 0x1D, 0x11,
/* 0008 */ 0x01, 0x47, 0x1E, 0x0B, 0x01, 0x47, 0x1F, 0x01,
/* 0010 */ 0x01, 0x87, 0x1C, 0x10, 0x01, 0x87, 0x1D, 0x01,
/* 0018 */ 0x01, 0x87, 0x1E, 0xA0, 0x01, 0x87, 0x1F, 0x90,
/* 0020 */ 0x01, 0xA7, 0x1C, 0x20, 0x01, 0xA7, 0x1D, 0x31,
/* 0028 */ 0x01, 0xA7, 0x1E, 0x81, 0x01, 0xA7, 0x1F, 0x01,
/* 0030 */ 0x01, 0xE7, 0x1C, 0x40, 0x01, 0xE7, 0x1D, 0xE1,
/* 0038 */ 0x01, 0xE7, 0x1E, 0x45, 0x01, 0xE7, 0x1F, 0x01
},
"layout-id",
Buffer (0x04)
{
0x0C, 0x00, 0x00, 0x00
},
"device-type",
Buffer (0x11)
{
"Mobile ALC883 S/T"
},
"PinConfigurations",
Buffer (0x10)
{
/* 0000 */ 0x30, 0x11, 0x0B, 0x01, 0x10, 0x91, 0xAB, 0x01,
/* 0008 */ 0x20, 0x31, 0x81, 0x01, 0x40, 0xE1, 0x45, 0x01
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
// end - required code
}
I'll try to construct ConfigData & PinConfigurations for you but I can't promise.
kizwan
Are you planning to use VoodooHDA, or AppleHDA? If Voodoo, first rename all references to HDEF to ALC6 (or whatever turns you on :)) Doing so will prevent AppleHDA from loading and matching your HDA device. If AppleHDA is loaded, then VoodooHDA doesn't load.
Next, and this is common for both Apple and Voodoo. Add this to your HDEF or ALC6 device:
Method (_DSM, 4, NotSerialized) { Store (Package (0x04) { "layout-id", Buffer (0x04) { 0x0C, 0x00, 0x00, 0x00 }, "PinConfigurations", Buffer (Zero) {} }, Local0) DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) Return (Local0) }
You can then add your pin configs in there or in the plist depending on how you want to get sound going. See the great guide on infinitemac, or the one on projectosx.
Search my posts and look for my question on pinconfigs to find the links. I'm still trying to find out how to get my pinconfigs without Windows, since I don't run that anymore!
@kizwanBy looking at USB4 device in DSDT, there is _PSW entry that can be manipulate. This is the entry for USB4 device in DSDT after modifying the argument (set to 0):- Device (USB4) { Name (_ADR, 0x001D0003) OperationRegion (U4CS, PCI_Config, 0xC4, 0x04) Field (U4CS, DWordAcc, NoLock, Preserve) { U4EN, 2 } Name (_PRW, Package (0x02) {…
can you tell me what modification should I apply to this code to disable sleep for a device in usb2 ?
regards,
Vincent
@umanSo does Asus use AMW0, or do you need to add that code from AMW0. A WMID kext would be useful as many PC vendors use that interface. uninc's DSDT was hideously intertwined with WMID.
Looks like I still need to go through WMI and ACPI documentation to have better understanding. Then I can make this successful.
@umanI'm not sure, but given that the ACPI 4.0 spec devotes pages and pages to battery and power issues, I think it is at least possible. I also intend to try to solve this (but it's a lower priority for me because my laptop battery is toast anyway). I tried VoodooBattery, which worked great (it told me my battery was toast, lol), but then…
Yeah, it's a low priority for me too. Just playing around.
I guess to make it working, maybe need to determine which query method it use. I said that because I found that there are query method that called ADP1 & BAT0 device. Just don't know what it do & what it contribute to battery detection.
@umanI still don't understand how query methods are executed, nor how they are bound to some device. ACPI says: And then they discuss it more with a completely unhelpful example. Oh wait, the acpi implementers guide is more helpful:
I'm going to grab the acpi implementers guide.
@umanDSDT is fun but time consuming!
I agree.
@barnum… can you tell me what modification should I apply to this code to disable sleep for a device in usb2 ? …
Do you mean you want to disable USB2 capability to wake a sleeping system, don't you? If in "Device (USB2)" entry it have _PSW (Power State Wake) method, you will need to change it according to my modification.
Method (_PSW, 1, NotSerialized)
{
If (Arg0)
{
// Store (0x03, U4EN)
// Disable USB4 capability to wake a sleeping system
Store (0x00, U4EN)
}
Else
{
Store (0x00, U4EN)
}
}
Refer to arguments for _PSW:
Arguments: (1) Arg0 – An Integer containing a wake capability control 0 – Disable the device’s wake capabilities 1 – Enable the device’s wake capabilities
That is why I change both condition to execute the same thing. So that it always execute the same "Store" operation as if it is Arg0=0.
kizwan
@umanAre you planning to use VoodooHDA, or AppleHDA? If Voodoo, first rename all references to HDEF to ALC6 (or whatever turns you on :)) Doing so will prevent AppleHDA from loading and matching your HDA device. If AppleHDA is loaded, then VoodooHDA doesn't load. Next, and this is common for both Apple and Voodoo. Add this to your HDEF or…
I planed to use AppleHDA with DSDT.aml fix.This is my original DSDT.aml
hot file.com/dl/32576445/45eb3b8/DSDT.dsl.zip.html
By the way I use AsereBLN booter 1.1.9.
@breakkyI planed to use AppleHDA with DSDT.aml fix.This is my original DSDT.aml
Try this legacy kext for ALC662 (Snow Leopard):-
media fire.com/?kmnykkqmy5m
Make sure AppleHDA.kext in /System/Library/Extensions/ folder is original kext. Remember to put _DSM method in Device (HDEF) (please refer to uman's post #81 →).
You also need to put DTGP code in DSDT. Put it afterMethod (_WAK) function.
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)
}
kizwan
When I try to compile my dsdt.dsl I get one error:
4644: DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Error 4067 - ^ Object is not accessible from this scope (DTGP)
Nevermind I found where is the error and fix it!
@breakkyWhen I try to compile my dsdt.dsl I get one error: 4644: DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0)) Error 4067 - ^ Object is not accessible from this scope (DTGP) Nevermind I found where is the error and fix it!
How about the sound? Is it working?
This thread has been very useful for me. I now just miss one last step to have the "perfect" install.
I'm running Snow Leopard on an ASUS eeePC 901 from the SD card. It's a bit slow but this is OK.
My problem: whenever I go to sleep and wake-up from sleep, I guess the SD card (my "boot drive") gets brutally ejected and…well, it's bad.
My question: is there any DSDT mod that would allow my SD card to stay mounted (powered maybe) during all the cycle wake-sleep-wake ?
I found a lot of approaching stuff on the thread but nothing exactly like that. this would make may day.
Any idea anyone ?
Thanks, Richard.
@richardaThis thread has been very useful for me. I now just miss one last step to have the "perfect" install. I'm running Snow Leopard on an ASUS eeePC 901 from the SD card. It's a bit slow but this is OK. My problem: whenever I go to sleep and wake-up from sleep, I guess the SD card (my "boot drive") gets brutally ejected and…well, it's bad.…
Yes, but it depends on the underlying hardware. I've found los of good info about my own laptop in my chipset doc (ICH7), and there is lots of good info on the SATA part of the device control. I assume the SSD is controled through SATA?
Thanks for the info. Not sure I was clear enough tough. I'm having the problem with the SD card (I believe it's using an internal USB port) and the machine is an eeePC 901.
I need help on this one…please.
@richardaThanks for the info. Not sure I was clear enough tough. I'm having the problem with the SD card (I believe it's using an internal USB port) and the machine is an eeePC 901. I need help on this one…please.
My bad. I'm so used to SD cards not working, that I assumed you meant SSD.
You could try the following:
1. Determine what USB slot your SD card is occupying. Easiest is to highlight he drive in disk utility and right-click Information. You should see something like: IODeviceTree:/PCI0@0/USB7@1D,7. That tells me that it's using USB7.
2. Edit your DSDT to replace the _PRW for the indicated USB slot with:
Device (USB7)
{
...
// package (argnum) {GPEbit, Wakelevel, PowerResource}
Name(_PRW, Package()
{
<xx>, // Bit number in GPEx_EN to enable USB resume
0x01 // Reference to lowest sleeping state which can be
// entered while still providing wake functionality
// no relative power resource specified
})
where I have <xx> above, keep your DSDT's existing value, as that's the handler in the GPE for USB7. What I've highlighted in red is the change. Your existing DSDT likely has 0x03, which is effectively powered off.
What the 0x01 does is says that the drive still needs power. That *might* be enough to keep it from being ejected. But it might also prevent the computer from sleeping.
Take a look at the ACPI spec (4.0 rev) Chapter 7.2 for some of the things you can do with power management.
ive been lurking around on this thread for a week or two now, and i'm more interested in getting my laptop fully working. ive been running osx for about a year now and i'm pretty familiar with everything except DSDT.
basically what i'm trying to get working:
- GMA X3100: was working with leo, but with 10.6.2 i lost the ability to make the
screen turn off.(although i still have QE/CI)
- Backlight: has never worked, "invalid firmware max backlight" problem. i was
hoping DSDT would be able to fix this
- Sleep: although i'm not too worried about it, it would be nice.
I have a Gateway M6841. I don't think it's a too popular system to be using for a hackintosh, so there's not much help that i've found in the forums.
here is my patched DSDT. its patched for sleep, backlight, and gmax3100 but it hasnt changed any of the problems. thanks to anyone that can help or at least point me in the right direction, i do have programming experience if it helps.
@umanMy bad. I'm so used to SD cards not working, that I assumed you meant SSD. You could try the following: 1. Determine what USB slot your SD card is occupying. Easiest is to highlight he drive in disk utility and right-click Information. You should see something like: IODeviceTree:/PCI0@0/USB7@1D,7. That tells me that it's using USB7.…
Hello,
Thanks a lot. In the disk utility I got: /PCI0@0/EUSB@1D,7
And in the DSDT file, at Device(EUSB) I don't have a lot of things. Just
{
Name (_ADR, 0x001D0007)
}
nothing else. Any idea what else I can add to make it working in that case ?
@richardaThanks a lot. In the disk utility I got: /PCI0@0/EUSB@1D,7 And in the DSDT file, at Device(EUSB) I don't have a lot of things. Just { Name (_ADR, 0x001D0007) } nothing else. Any idea what else I can add to make it working in that case ?
You're allowed to add what it don't have.
kizwan
Allright, I got that but in this case I guess I have to pute something like
Name(_PRW, Package
{
<xx>, // Bit number in GPEx_EN to enable USB resume
0x01 // Reference to lowest sleeping state which can be
// entered while still providing wake functionality
// no relative power resource specified
})
But how to determine the <xx> value then ?
@richardaAllright, I got that but in this case I guess I have to pute something like Name(_PRW, Package { <xx>, // Bit number in GPEx_EN to enable USB resume 0x01 // Reference to lowest sleeping state which can be // entered while still providing wake functionality // no relative power resource specified }) But how to determine the <xx> value…
That's the problem then. You really need to have some of the resources specified for your USB (UHCI) and EHCI ports. Since you don't have anything, you can add the GPE handlers, and things should work. The best way to proceed, is to first identify which Mac model your machine is closest to, and then take the requisite parts, carefully excising out the problematic parts.
For my hack, I looked at the list of mac models on wikipedia, and then chose MacBook 2,1 as the closest. I then edited my smbios.plist to reflect those values. I then compared my DSDT to the MacBook 2,1 DSDT and ioreg, and found they were surprisingly close. I've included below, some pieces for you to try from a MacBook 2,1 DSDT:
Scope (\_GPE)
{
...
Method (_L03, 0, NotSerialized)
{
Notify (\_SB.PCI0.USB1, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L04, 0, NotSerialized)
{
Notify (\_SB.PCI0.USB2, 0x02)
Notify (\_SB.PWRB, 0x02)
}
...
Method (_L0C, 0, NotSerialized)
{
Notify (\_SB.PCI0.USB3, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L0D, 0, NotSerialized)
{
Notify (\_SB.PCI0.USB7, 0x02)
Notify (\_SB.PWRB, 0x02)
}
Method (_L0E, 0, NotSerialized)
{
Notify (\_SB.PCI0.USB4, 0x02)
Notify (\_SB.PWRB, 0x02)
}
...
Note the parts in red. If you already have level handlers in your GPE scope that use these numbers (so say you already have _L03), you will have to change them, and change the part in the USB1 declaration for, say, _L03. Don't put really large numbers, because there's a part in the DSDT that says the handlers go only up to 0xXX (I've forgotten where that is). Just make sure you use unused numbers. For example, in my DSDT I added one for _L11 for my firewire.
Device (USB1)
{
Name (_ADR, 0x001D0000) // keep your existing ADDR lines!!!
Device (HUB1) // will become HUB2 for USB2
{
Name (_ADR, 0x00)
Device (PRT1)
{
Name (_ADR, 0x01)
}
Device (PRT2)
{
Name (_ADR, 0x02)
}
}
OperationRegion (U1CS, PCI_Config, 0xC4, 0x04)
Field (U1CS, DWordAcc, NoLock, Preserve)
{
U1EN, 2
}
Name (_PRW, Package (0x02)
{
0x03, // must match number you use in _Lxx handler
0x03
})
Method (_PSW, 1, NotSerialized)
{
If (Arg0)
{
Store (0x03, U1EN)
}
Else
{
Store (0x00, U1EN)
}
}
Method (_S3D, 0, NotSerialized) // note: I don't have these
{
Return (0x03)
}
Method (_S4D, 0, NotSerialized) // note: I don't have these
{
Return (0x03)
}
}
The parts in red will change to match each USB port, so U1CS, U1EN becomes U2CS and U2EN for USB2, along with changing HUB1 to HUB2. I don't have the _S3D and _S4D methods in my DSDT and from reading the spec, I don't think they are needed.
So USB2, looks like:
Device (USB2)
{
Name (_ADR, 0x001D0001)
Device (HUB2)
{
Name (_ADR, 0x00)
Device (PRT1)
{
Name (_ADR, 0x01)
}
Device (PRT2)
{
Name (_ADR, 0x02)
}
}
OperationRegion (U2CS, PCI_Config, 0xC4, 0x04)
Field (U2CS, DWordAcc, NoLock, Preserve)
{
U2EN, 2
}
Name (_PRW, Package (0x02)
{
0x04, // A different _L04 is a different _LXX handler than USB1!
0x03
})
Method (_PSW, 1, NotSerialized)
{
If (Arg0)
{
Store (0x03, U2EN)
}
Else
{
Store (0x00, U2EN)
}
}
Method (_S3D, 0, NotSerialized)
{
Return (0x03)
}
Method (_S4D, 0, NotSerialized)
{
Return (0x03)
}
}
Do the same edits for USB3 and USB4 (if you have USB4) and even USB5, and USB6 if you have a desktop with lots of USB ports (although I suspect you will need another EHCI hub there, but I don't know).
USB7 is quite different:
Device (USB7)
{
Name (_ADR, 0x001D0007)
Device (HUB7)
{
Name (_ADR, 0x00)
Device (PRT1)
{
Name (_ADR, 0x01)
}
Device (PRT2)
{
Name (_ADR, 0x02)
}
Device (PRT3)
{
Name (_ADR, 0x03)
}
Device (PRT4)
{
Name (_ADR, 0x04)
}
Device (PRT5)
{
Name (_ADR, 0x05)
}
Device (PRT6)
{
Name (_ADR, 0x06)
}
Device (PRT7)
{
Name (_ADR, 0x07)
}
Device (PRT8)
{
Name (_ADR, 0x08)
}
}
Name (_PRW, Package (0x02)
{
0x0D, // yet another different handler
0x03 // I suggested you change this to 0x1
})
Method (_S3D, 0, NotSerialized)
{
Return (0x03)
}
Method (_S4D, 0, NotSerialized)
{
Return (0x03)
}
}
Remove the parts in yellow for the USB7, since they don't match the change from 0x03 -> 0x01. Plus I suspect they really aren't needed.
Oh, and if this doesn't work, there are bits you can set that essentially control power settings, ejectability, etc. But that is hugely dependent on your chipset. I have an ICH7, and most of that is the same in ICH9, and ICH10, but if you have an nvidia chipset, that's *totally* different.
OK, I'm 200% lost now. This is way too complex for me. I guess I have to find somebody litterate enough who solved the problem on the eee901 and just copy his settings.
Thanks anyway.
Device (HUB1) // will become HUB2 for USB2
{
Name (_ADR, 0x00)
Device (PRT1)
{
Name (_ADR, 0x01)
}
Device (PRT2)
{
Name (_ADR, 0x02)
}
}
Hi,
Can You explain me what the "utility" of this part of the usb declaration"
In my dsdt, I doesn't have that.
Thank,
Barnum
You won't need it, then. It's because on my gateway, the ports have integrated hubs. See ACPI spec, section 9.13 for full details.
Sorry of reviving this and cutting in
@ping99
I have an ASRock x58 Extreme (similar to ASUS boards), and sleep doesn't work OTB. I've been looking around, and it seems I would need to modify Method (_PTS, 1, NotSerialized).
I read your post, and it seems that the edits you did are somewhat similar to what I should do in my DSDT, whoever I have a few doubts:
@ping99... 1 Add OperationRegion below before Method (_PTS, 1, NotSerialized) OperationRegion (DEBG, SystemIO, 0x80, One) Field (DEBG, ByteAcc, NoLock, Preserve) { DBG1, 8 } OperationRegion (PMRS, SystemIO, 0x0430, 0x13) Field (PMRS, ByteAcc, NoLock, Preserve) { , 4, SLPE, 1, Offset (0x08), GPSE, 16, GPSS, 16, Offset (0x12), , 1, SWGC, 1 }
Is
OperationRegion (DEBG, SystemIO, 0x80, One)
Field (DEBG, ByteAcc, NoLock, Preserve)
{
DBG1, 8
}
really necessary? mm67 seems to think not (or is that for shutdown only?)
@ping99...2 Check Device (LPC) if there is a similar Operation Region "LPC" like below. If you don't have LPC device, just search Name (_ADR, 0x001F0000), sometimes the device name is different. Device (LPC) { Name (_ADR, 0x001F0000) OperationRegion (LPC0, PCI_Config, 0xA4, 0x02) Field (LPC0, ByteAcc, NoLock, Preserve) { AG3E, 1 } If there…
Here is my LPCB:
Device (LPCB)
{
Name (_ADR, 0x001F0000)
Device (IELK)
{
Name (_HID, "AWY0001")
OperationRegion (RXA0, PCI_Config, 0xA0, 0x20)
Field (RXA0, ByteAcc, NoLock, Preserve)
{
, 9,
PBLV, 1,
Offset (0x10),
, 1,
PBMS, 1,
, 1,
PMCS, 1,
ECNS, 1,
Offset (0x11),
ECT1, 16,
ELEN, 1,
Offset (0x14)
}
Method (\_GPE._L0A, 0, NotSerialized)....
Where should I put OperationRegion (LPC0...? Before Device (IELK)? After Name (_HID, "AWY0001")? Inside OperationRegion (RXA0, PCI_Config, 0xA0, 0x20) somehow?
@ping993 Add code below in Method (_PTS, 1, NotSerialized) like this Method (_PTS, 1, NotSerialized) { Or (Arg0, 0xF0, Local0) Store (Local0, DBG1) Store (Zero, \_SB.PCI0.LPC.EXPE) //Please change to \_SB.PCI0.LPC.AG3E if you don't have the EXPE, but add AG3E. If (LEqual (Arg0, 0x05)) { Store (Zero, SLPE) Sleep(0x10) } Else { //**Original…
Here is my current -disastrous- Method (_PTS, 1, NotSerialized):
Method (_PTS, 1, NotSerialized)
{
Or (Arg0, 0xF0, Local0)
Store (Arg0, DBG8)
PTS (Arg0)
Store (Zero, Index (WAKP, Zero))
Store (Zero, Index (WAKP, One))
If (LAnd (LEqual (Arg0, 0x04), LEqual (OSFL (), 0x02)))
{
Sleep (0x0BB8)
}
If (LEqual (Arg0, 0x05))
{
Store (0x99, SMIP)
Store (One, \_SB.PCI0.LPCB.IELK.AG3E)
Store (Zero, SLPE)
Sleep (0x10)
}
Else
{
Store (Zero, \_SB.PCI0.LPCB.IELK.AG3E)
}
Store (ASSB, WSSB)
OSYS ()
Store (AOTB, WOTB)
Store (AAXB, WAXB)
Store (Arg0, ASSB)
Store (OSFL (), AOTB)
Store (OSYS (), OSTP)
Store (Zero, AAXB)
}
The original is:
Method (_PTS, 1, NotSerialized)
{
Store (Arg0, DBG8)
PTS (Arg0)
Store (Zero, Index (WAKP, Zero))
Store (Zero, Index (WAKP, One))
If (LAnd (LEqual (Arg0, 0x04), LEqual (OSFL (), 0x02)))
{
Sleep (0x0BB8)
}
Store (ASSB, WSSB)
Store (AOTB, WOTB)
Store (AAXB, WAXB)
Store (Arg0, ASSB)
Store (OSFL (), AOTB)
Store (OSYS (), OSTP)
Store (Zero, AAXB)
}
, Adrian
Post Scriptum (P.S.): I attached my DSDT's, CST and IST tables, so if someone could lok at them and tell me if I -for example- managed to insert the C-States, P-States, etc-States into the DSDT correctly, I would be eternally grateful.
First all, you just need to add OperationRegion PMRS below.
OperationRegion (PMRS, SystemIO, 0x0430, 0x13)
Field (PMRS, ByteAcc, NoLock, Preserve)
{
, 4,
SLPE, 1
}
* Pay attention to 0x0430 in red. It depends your motherboard. You have Processor (CPU0, 0x00, 0x00000410, 0x06) in your dsdt, you can use 0x0430. If you have Processor (P001, 0x01, 0x00000810, 0x06) then use 0x0830. It is PMBASE+30h.
Secondly, look into Method (_PTS, 1, NotSerialized) to see whether "If (LEqual (Arg0, 0x05))" there. If not, add code as below. If already there, just insert.
If (LEqual (Arg0, 0x05))
{
Store (0x01, \_SB.PCI0.LPC.EXPE) // hibernate fix. Will return to S5 after power back
Store (Zero, SLPE) // zero SLP_SMI_EN, else won't shutdown
Sleep (0x10) // wait for bit to set
}
Yours is modified as below:
Method (_PTS, 1, NotSerialized)
{
Store (Zero, \_SB.PCI0.LPC.EXPE) //Check Device (LPC) or LPCB if you have this EXPE or something like this. change it to match yours.
If (LEqual (Arg0, 0x05))
{
Store (0x01, \_SB.PCI0.LPC.EXPE) // hibernate fix. Will return to S5 after power back
Store (Zero, SLPE) // zero SLP_SMI_EN, else won't shutdown
Sleep (0x10) // wait for bit to set
}
Store (Arg0, DBG8)
PTS (Arg0)
Store (Zero, Index (WAKP, Zero))
Store (Zero, Index (WAKP, One))
If (LAnd (LEqual (Arg0, 0x04), LEqual (OSFL , 0x02)))
{
Sleep (0x0BB8)
}
Store (ASSB, WSSB)
Store (AOTB, WOTB)
Store (AAXB, WAXB)
Store (Arg0, ASSB)
Store (OSFL , AOTB)
Store (OSYS , OSTP)
Store (Zero, AAXB)
}
i tried the sleep fix, but i can't get it to work, sleep in general doesn't work, when i press the sleep button, my screen freezes and that's all, when i press the powerbutton i get the restart/shutdown popup and all works again.
Lidsleep also does the same, screen freezes but stays on.
i wanna ask you if you plz wanna look at it?
really nice job!
Here is my problem... I have a Compal Ifl90 with intel 7300 @ 2GHz and 8600m gt 512mb with Snow Leopard 10.6.3 .
The problem i have is that my screen brightness slider at setting wasn't there! But with some dsdt editing i managed to show up but when i move the slider nothing happen and returns to it's original position! Any help please below is my code from Device (LCD)
Device (LCD)
{
Method (_ADR, 0, NotSerialized)
{
Return (0x0110)
}
Method (_DCS, 0, NotSerialized)
{
^^^^LPCB.PHSS (0x0C)
Store (CADL, Local0)
Store (CSTE, Local1)
And (Local0, One, Local0)
And (Local1, One, Local1)
If (Local0)
{
Store (One, LCDA)
}
Else
{
Store (Zero, LCDA)
}
If (LCDA)
{
If (LEqual (Local1, One))
{
Return (0x1F)
}
Else
{
Return (0x1D)
}
}
Else
{
If (LEqual (Local1, One))
{
Return (0x0F)
}
Else
{
Return (0x0D)
}
}
}
Method (_DGS, 0, NotSerialized)
{
If (LCDA)
{
Return (One)
}
Else
{
Return (Zero)
}
}
Method (_DSS, 1, NotSerialized)
{
}
Method (_BCL, 0, NotSerialized)
{
If (^^^^LPCB.ECOK ())
{
If (LEqual (OSYS, 0x07D6))
{
If (LEqual (^^^^LPCB.EC0.OSTY, Zero))
{
Store (One, ^^^^LPCB.EC0.OSTY)
}
}
Else
{
If (LEqual (^^^^LPCB.EC0.OSTY, One))
{
Store (Zero, ^^^^LPCB.EC0.OSTY)
}
}
}
Return (Package (0x0A)
{
0x46,
0x28,
Zero,
0x0A,
0x14,
0x1E,
0x28,
0x32,
0x3C,
0x46
})
}
Method (_BCM, 1, NotSerialized)
{
Divide (Arg0, 0x0A, Local0, Local1)
Store (Local1, ^^^^LPCB.EC0.BRTS)
}
Method (_BQC, 0, NotSerialized)
{
Multiply (^^^^LPCB.EC0.BRTS, 0x0A, Local0)
Return (Local0)
}
}
In my try to make it show up i also added
Name (_HID, EisaId ("LCD1234"))
in Device (LCD)
And
Device (PNLF)
{
Name (_HID, EisaId ("APP0002"))
Name (_CID, "backlight")
Name (_UID, 0x0A)
Name (_STA, 0x0B)
}
right above Device (LCD)
Also i am able to change brightness from my Fn Buttons but no notification is shows as the sound changing does!
Please any ideas?
Led Wireless
How I can turn on wireless led with code in DSDT?
出典および貢献者来歴(クレジット登録 32 名 · 元スレッド #1960)
| ユーザー名 | 貢献ロール | 投稿数 | 活動期間 |
|---|---|---|---|
| @uman | 主要貢献者 | 21 | 2009-06-02 → 2010-03-29 |
| @kizwan | 主要貢献者 | 18 | 2009-06-01 → 2010-03-20 |
| @pentiumpc | 筆頭著者 | 8 | 2009-01-19 → 2009-03-03 |
| @Slither2008 | 主要貢献者 | 6 | 2009-03-03 → 2009-03-05 |
| @candykane | 主要貢献者 | 6 | 2009-05-13 |
| @richarda | 主要貢献者 | 5 | 2010-03-16 → 2010-03-21 |
| @THeKiNG | 主要貢献者 | 4 | 2009-06-03 → 2009-06-18 |
| @breakky | 主要貢献者 | 4 | 2010-03-13 → 2010-03-14 |
| @Thireus | 主要貢献者 | 3 | 2009-05-07 → 2009-05-13 |
| @Alexaar | 検証メンバー | 2 | 2009-04-13 → 2009-04-29 |
| @The Edge3000 | 検証メンバー | 2 | 2009-08-11 → 2009-09-07 |
| @Gurruwiwi | 検証メンバー | 2 | 2009-08-17 |
| @EnzoFX | 検証メンバー | 2 | 2009-09-03 |
| @Sweaty | 検証メンバー | 2 | 2009-12-21 |
| @ping99 | 検証メンバー | 2 | 2010-01-18 → 2010-07-04 |
| @Nameci | 検証メンバー | 2 | 2010-01-31 |
| @barnum | 検証メンバー | 2 | 2010-03-13 → 2010-03-26 |
| @adriangb | 検証メンバー | 2 | 2010-04-01 |
| @kDawg | 検証メンバー | 1 | 2009-07-15 |
| @aschar1 | 検証メンバー | 1 | 2009-08-07 |
| @sk1nhd33t | 検証メンバー | 1 | 2009-08-09 |
| @Common_Sense | 検証メンバー | 1 | 2009-09-08 |
| @gnychis | 検証メンバー | 1 | 2009-09-25 |
| @msingh | 検証メンバー | 1 | 2009-10-05 |
| @2nerd4u | 検証メンバー | 1 | 2009-10-20 |
| @mm67 | 検証メンバー | 1 | 2009-12-21 |
| @adityaxavier | 検証メンバー | 1 | 2010-01-09 |
| @pocenk | 検証メンバー | 1 | 2010-01-29 |
| @saul1d | 検証メンバー | 1 | 2010-03-20 |
| @SaGaR | 検証メンバー | 1 | 2010-12-20 |
| @ribben89 | 検証メンバー | 1 | 2011-02-05 |
| @Marchrius | 検証メンバー | 1 | 2013-01-21 |