基本的には、Intel E1000 FreeBSDドライバをコピーしてきて、FreeBSDカーネル内の関数、 定数を定義してあげるだけ。全てを定義しているわけではなく、不要な部分については コメントアウト等で雑に対応している部分もあり。
ラッパー関数は自作OS内のfreebsdディレクトリ(本リポジトリには含まれていない)に 定義したり、e1000_raph.h/ccに定義したりしている
// いつか綺麗にしたい
if_em.cc, if_lem.ccはFreeBSD依存部なので、主にこのコードを改造する事で、パケット処理の 流れを自作OS側に寄せてる。em.h/cc, lem.h/cc, bem.hで自作OSのC++インターフェースとリンク させている。
自作OS側で以下を実装する必要がある(このリポジトリには含まれていない)
- PCI Expressサポート
- タイマー
- ロック
- 仮想メモリ管理
- 物理メモリ管理
自作OS側でポーリングで処理したかったので、割り込みについては全くの未対応 また、デバドラが開放される事態については全く考慮していない