| Zeile 1: | Zeile 1: | ||
| − | |||
{{TODO| | {{TODO| | ||
*Die Liste der Register vervollständigen (Spezifikation: Seite 137ff) | *Die Liste der Register vervollständigen (Spezifikation: Seite 137ff) | ||
*Isochronous Transfers (Spezifikation: Seite 39ff und 48ff) | *Isochronous Transfers (Spezifikation: Seite 39ff und 48ff) | ||
| − | *Initialisierung des HCs | + | *Initialisierung des HCs (Seite 52ff) |
}} | }} | ||
| Zeile 230: | Zeile 229: | ||
//Aufbau ED / TD | //Aufbau ED / TD | ||
| − | Es ist dabei Aufgabe des USB-Treibers diese Listen im Arbeitsspeicher anzulegen, wobei beide Deskriptoren an 16 Byte Grenzen im Arbeitsspeicher ausgerichtet sein müssen. Außerdem muss der Treiber die Felder HcBulkHeadED, HcControlHeadED sowie die Bits CLE/BLE im Feld HcControl entsprechend zu setzen. | + | Es ist dabei Aufgabe des USB-Treibers diese Listen im Arbeitsspeicher anzulegen, wobei beide Deskriptoren an 16 Byte Grenzen im Arbeitsspeicher ausgerichtet sein müssen. Außerdem muss der Treiber die Felder ''HcBulkHeadED'', ''HcControlHeadED'' sowie die Bits ''CLE/BLE'' im Feld ''HcControl'' sowie ''CLF/BLF'' in ''HcCommandStatus'' entsprechend zu setzen. |
| − | Es ist dann Aufgabe des HCs die Listen abzuarbeiten und die Felder HcBulkCurrentED und HcControlCurrentED zu setzen. Außerdem entfernt er die TDs und fügt sie in die sogenannte Done-Liste ein, auf die HcDoneHead zeigt. | + | Es ist dann Aufgabe des HCs die Listen abzuarbeiten und die Felder ''HcBulkCurrentED'' und HcControlCurrentED zu setzen. Außerdem entfernt er die TDs und fügt sie in die sogenannte Done-Liste ein, auf die ''HcDoneHead'' zeigt. |
==== Organisation von Interrupt Transfers ==== | ==== Organisation von Interrupt Transfers ==== | ||
| Zeile 237: | Zeile 236: | ||
==== Organisation von Isochronous Transfers ==== | ==== Organisation von Isochronous Transfers ==== | ||
| + | //TODO | ||
== Initialisierung des HCs == | == Initialisierung des HCs == | ||
| + | === Finden eines OHCI kompatiblen Host Controller === | ||
| + | Bei PCs sind die Host Controller über den [[PCI]-Bus mit der CPU verbunden. Man muss also die Konfigurationsadressräume nach einem Geräte mit dem Classcode 0x0C und der Subclass 0x03 durchsuchen. Weitere Informationen dazu im Artikel zum [[PCI]]. | ||
| + | Das DWord an Offset 0x10 im Konfigurationsadressraum enthält die Basisadresse der Register. Bei diesen sollte man nun zuerst das ''HcRevision'' Feld überprüfen, welches den Wert 0x10 enthalten muss. Andernfalls ist der HC mit dieser Spezifikation möglicherweise nicht kompatibel. | ||
| + | |||
| + | === Kontrolle über den Host Controller übernehmen === | ||
| + | Nun muss der [[SMI]] deaktiviert werden, der momentan die Steuerung des HCs übernimmt. Dafür muss nur das OCR-Bit in HcCommandStatus gesetzt werden. Wenn der SMI erfolgreich deaktiviert wurde, setzt der HC das IR-Bit in HcControl. Sollte sich die CPU im [[Real Mode]] befinden, dann ist möglicherweise der [[BIOS]] USB-Treiber aktiv, der ebenfalls deaktiviert werden muss. | ||
| + | |||
| + | === Host Controller zurücksetzen === | ||
| + | |||
| + | |||
| + | === Host Controller einrichten === | ||
| + | |||
== Weblinks == | == Weblinks == | ||