借り初めのひみつきち

仮ブログです。

違和感?

とある機種でデバイスマネージャを眺めてたところ違和感が・・・。

PS/2 キーボードはご存知の通りレガシーデバイスです。
あるとき Intel はいずれなくなるであろうレガシーデバイスの機能をチップセットに載せることを拒否しました。
一方で多くのユーザーはまだレガシーデバイスを必要としていたので、過渡的な処置として ISA バスを縮小した LPC バスを搭載することでこの問題は決着しました。
LPC バスは Low Pin Count という名前の通り ISA バスに比べて少ない配線で同等の機能を実現できるためコストカットもできてみんなハッピーハッピーでした。
そんなわけで、今日の PC においてレガシーデバイスは通常は LPC バスに接続されたスーパー IO チップというチップが担当しています。

PS/2 コントローラーのバス階層は

CPU → システムバス → [PCI ルートブリッジ] → PCIバス → [PCI-LPC ブリッジ] → LPC バス → PS/2

のようになり、これを ACPI のデバイスパスで表すと

\_SB.PCI0.LPCB.PS2K

となるのが普通です。

ところが、とある機種のデバイスマネージャではそのような構造になっておらず、 PCI バスの直下に PS/2 コントローラーがあるように見えます。

どう考えても PCIバイスではないのにおかしいですね。

そもそもデバイスマネージャはどうやってこの階層を読み取っているのかというと ACPI 規格が絡んできます。
ACPI というと電源管理の規格というイメージが強いかもしれませんが*1、実際は PC の構成に関する統一的な規格で、分厚い仕様書の大半を占めているのは PC に繋がっているデバイスの構成や動作を記述した ASL/AML という言語です。
おそらくデバイスマネージャはこの ASL/AML を読み取って内部デバイスの構成を判別しています。

そこで実際に ASL を辿ってみたところ

\_SB.PCI0.PS2K

というパスで PS/2 コントローラーが記述されていました。

おかしいですね。

でも、違和感を感じるだけで大した実害もなさそうなので ACPI の仕様が無駄に壮大すぎたったことですかね・・・。

*1:実際に APM と ACPI という対比もある