2021年05月20日 : OS自作本 xHCIまだできない

xHCI

先日話した通りなんですが、 まだマウスが動かせません。 本ではさらりとメソッド呼んでますが、重いよxHCI……。 「ゼロから」というタイトルなのに、この端折りっぷりは酷いんじゃないかなー。 まだ割り込みも動いてないのになー。 xHCIで5章くらいつかってくれても良いのになー。

と、まぁ文句ばっかり言っとらずに勉強した事を書いてみると、 ひとまずxHCIはリングバッファを色々な通信のために使うのだけど、リングバッファにクセがあるようだ。 詳細は仕様書を 読んでね&この後嘘書いてたらゴメンねって話しではあるのだけど、 どうやら、メモリがフラグメンテーションを起こしてもよいように工夫しているらしい。

リングバッファって、単純に作るとライト/リードポインタの2つ(仕様書ではEnqueue/Dequeue Pointerって書いてる。)で管理すると思うんだけど、 フラグメントしたメモリも使えるように、 各ブロックの終端に、次のブロックの先頭アドレスを含んだ終端と解るデータ (Link TRB) を書くようだ。 なので、ハードとしてはリングバッファの本当の先頭のアドレスしか覚えていない。

ただ、そうするとライト/リードポインタ相当の事はどうやるかって話になるんだけど、 どうやらライトするとき各エントリのcycle bitと呼ばれるビットをトグルしていくらしい (仕様のFig.4-6)。 で、それとは別に、書き手と読み手で、それぞれ一周するごとにトグルする値を持っておき、 それと比較して判断するのだそうな。 邪悪なことしてるなぁ……。

本日のタグ