tarosukeの日記: [talos]8139 iii
日記 by
tarosuke
8139の送信は普通にパケットのアドレスと長さを指定して送信させるだけ。受信は...バッファを構築して設定しておくと8139が受信パケットをそこにリングバッファとして書き込んで行くから割り込みが入ってステータスが受信済だったら「ここまで読んだ」レジスタからパケット先頭に書いてある長さまでをパケットバッファに転送(当然ラップし得る)、「ここまで読んだ」レジスタをパケット長+4bytesアライン進める(ここでもラップし得る)。という感じ。パケットで最大長がわかってる塊をわざわざラップ処理しなければならないストリームに固めてしまっているのが8139の最大の糞な点。
受信バッファ用に物理的に連続している複数ページを確保しなきゃならんしな。これがE100とか8169みたいにパケットはパケットとして処理できる造りなら普通にメモリ確保して実アドレスを求めるだけで済む。
[talos]8139 iii More ログイン