yokobuttonの不定期で競技プログラミングをするブログ

不定期で解けた競技プログラミングコンテストの問題を載せています。

XHCIのINTERRUPT INについて 2

1,pciからxhciコントローラを取得する。
 pciのclass codeのbase,sub,interfaceが0x0c,0x03,0x30のものを探して取得する。

2,msiを設定する。
 0xfee00020からlocal apic idを取得する。
 1で取得したpciバイスとlocal apic idでmsiを設定する。

3,barを取得する。
 1で取得したpciバイスからbarを取得する。
 barからmmio baseを計算する

4,各種registerを取得する。
 mmio baseから次を取得する。
  capabiliry registers
  operational registers
  runtime registers
  interrupter register set
  port register set
  doorbell register

5,xhc controllerを設定する。
 xhc controllerをリセットする。
 operational registerのdevice context base address array pointerを設定する。
 command ringをcrcrに設定する。
 event ringにinterrupter register setの0番を設定する。
 interrupter register setの0番の設定をする。
 割り込みの設定をする。

6,xhc controllerを開始する。
 xhc controllerの開始の設定をする。