ACPI
ちょっとした出来心で、ACPI BIOSのテーブルを読もうとして見ました。
まず、BIOSだから0xe0000-0xfffffまでをmmapしてそれでRoot System Description
Pointerは16バイト境界で配置されてる筈だから.....っと。ふんふん。
シグネチャ読めて、OEMIDも読めたと。で一つスキップして、(アライメントの
ためだろーなあ。)次が...ん?アドレス?これSegment:Offsetの形?それとも
物理アドレス?それにどういう並び方?いわゆるIntel型のLittle Endian?
どうやっても絶対ある筈のRSDT(Root System Description Descriptor)シグネチャ
がみえないよお。ええい、ならBIOSの範囲を/dev/mem開けて直接stringsかけて
検索じゃあ...やっぱりない。どうなっとんじゃあとかおもって、もう一度
ACPIスペックを読み直す。ん?RSD PTRのみ"In Low Memory space on 16 byte
boundry"で他は"Located in memory space(0-4G)"!?つまり、ブート時に認識して
保護してやんないとOSは構わずに上書きしてしまうっつーこと?改めて、
Intel型のLittle Endianとしてポインタを見るとそこは0x3ff3000で、64MB実装
されている物理メモリのうしろ64KByteあたりってこと?そ、そんなあ。
どうやってあげれば良いんでしょ?をれ様カーネルでメモリはいじったことないです。
で、久しぶりにACPIホームページを見るとACPIのスペックがバージョンアップ
してて、ACPI 2.0に向けてのコメントを求むと言う話があるそうな。
しかし、フル実装する気は更々ないけど......ややこしいよー。