私が知っていたように、AHCI拡張ROMはIDP(インデックス/データペア)を使用してAHCIレジスタ(グローバルおよびポートレジスタ)にアクセスします。
ahci 仕様 v1.3 には次のように書かれています。
IDP メカニズムにより、ホスト ソフトウェアは間接 I/O アドレッシングを使用してすべての MMIO レジスタにアクセスできます。
したがって、ABAR が 1MB を超えていても、拡張 ROM はこの方法でリアル モードでMMIO にアクセスできます。
しかし、AHCI MMIO レジスタにアクセスする場合は、以下の展開で OK であることがわかりました。
push 0000h
pop es ; set es = 0
mov bx, F732h
shl ebx, 16
mov bx, 0000h ; put ABAR to ebx register
mov eax, es:[ebx] ; read AHCI CAP registers to eax(4byte)
上記で問題ない場合、メモリ モデルがリアル モードではないことを意味します (ビッグ リアル モードだと思います。つまり、4G でのアクセスは問題ありません)。
私たちの質問は、BIOS が制御を Expansion に転送するときのメモリ モデルが、最近ではビッグ リアル モードであるかどうかです (とにかく、リアル モードではありません)。はいの場合、いつでもメモリ操作を使用して AHCI の MMIO にアクセスできます...それは正しいですか?
- 以前 IDP を使っていたのは、当時は拡張に制御が移る時点でまだリアルモードだったからではないでしょうか。つまり、メモリ モデルはシステム BIOS に依存しますね。