OS開発

Intel® 8254x, 8256x, 8257xのドライバの書き方をまとめます.

Custom Search

Intel® 8254x/8256x/8257x

PCIのBase Address Register (BAR)を読み込み,Memory Mapped I/Oのアドレスを取得する.PCI/PCIeについては,[OSDev Wiki:PCI] および [OSDev Wiki:PCI Express] を参照.PCIのvendor/device IDリストは PCIDatabase.com で調べられる(有名なものはおおよそ載っている?).

Intel® 8254xの開発者マニュアルは, PCI/PCI-X GbE Family of Controllers: Software Developer's Manual, Intel® 8256x/8257xの開発者マニュアルは, PCIe* GbE Controllers Open Source Software Developer's Manual にそれぞれありますので,こちらを参考にすると良いと思います.Intel® 8254xについては, [OSDev Wiki:Intel 8254x] も多少参考になります.

初期化

パケットの送出

Intel® 8254x, 82573Lなどであれば,マニュアル通り.Intel® 82567LM, 82577LMは,長さが0よりも大きいディスクリプタのTDESC.CMDにEOPフラグを立てるとパケットが送出されない(謎).代わりに,長さが0よりも大きいディスクリプタにはTDESC.CMDにEOPフラグを立てずに,次のディスクリプタを長さ0(Nullディスクリプタ)にしてTDESC.CMDにEOPフラグを立てる. ほぼ同じコードでリファクタリングしたらパケットごとにEOPを立てても送出されました(謎).