Erweiterter Einheitentreiber für Host-Controller-Adapter
Zweck
Unterstützt die EHCI-Spezifikation (Enhanced Host Controller Interface) für Adaptereinheitentreiber.
Syntax
#include <sys/hcdi.h>
#include <sys/usbdi.h>
#include <sys/usb.h>Beschreibung
Die /dev/usbhcn -Gerätedateien stellen Schnittstellen bereit, die den Zugriff auf die USB-Hostcontrolleradaptereinheiten (USB = Universal Serial Bus) ermöglichen. Diese Dateien verwalten die Adapterressourcen, sodass mehrere USB-Clienttreiber und das USB-System (oder der Protokolltreiber) gleichzeitig auf die USB-Einheiten auf demselben USB-Host-Controller-Adapter zugreifen können.
Im Design von USB 2.0 implementierte das USB Implementers Forum (USB-IF) eine Spezifikation, die als EHCI bekannt ist und nur Hochgeschwindigkeitsdatenübertragungen unterstützt. EHCI-basierte Adapter sind Multifunktions-PCI-Einheiten (Peripheral Component Interconnect), die aus virtuellen Host-Controller-Funktionen bestehen, die als Zusatzcontroller bezeichnet werden, um die OHCI-Konnektivität (Open Host Controller Interface) zu USB 1.0 -und 1.1 -Einheiten zu unterstützen. Das AttributODM(Object Data Manager) alt_usb_ctrl des EHCI-Adapters stellt die Positionswerte für die zugehörigen OHCI-Controller bereit.
Subroutinen für Adaptereinheitentreibereingangspunkt
Der Einheitentreiber des USB-Adapters unterstützt nur die Eingangspunkte open, close, ioctlund config . Die Eingangspunkte read und write werden nicht unterstützt.
Subroutinen öffnen und schließen
Die Subroutine open ordnet die Einheitennummer, die als Parameter für den Systemaufruf open angegeben ist, der internen Adaptereinheitenstruktur zu. Wenn die Subroutine open eine Adapterstruktur findet, überprüft sie, ob die entsprechende Adaptereinheit konfiguriert und nicht als inaktiv markiert ist. Wenn die Subroutine open keine Adapterstruktur findet, gibt sie einen Fehler zurück. Wenn das Feature Enhanced Error Handling (EEH) aktiviert ist, greift die Subroutine open nicht auf die Einheit zu, wenn ein EEH-Ereignis verarbeitet wird.
ioctl, Subroutine
ioctl -Unteroperationen:| Operation | Beschreibung |
|---|---|
| HCD_REGISTER_HC | Registriert die Aufrufvektoren zwischen dem USB-System (oder dem Protokolltreiber) und dem Host-Controller-Treiber. Nach der Registrierung der Rufvektoren erfolgt durch diese Vektoren die gesamte weitere Kommunikation zwischen dem USB-System (oder dem Protokolltreiber) und dem Host-Controller-Treiber. |
| HCD_REQUEST_COMPANIONS | Fordert Port-Routing-Informationen zu den OHCI-Host-Controllern an. |
Zusammenfassung der vom EHCI-Adaptereinheitentreiber zurückgegebenen Fehlerbedingungen
Mögliche Werte des USBstatus -Rückgabewerts für den Einheitentreiber des EHCI-Adapters sind:
| Fehlercode | Beschreibung |
|---|---|
| USBD_ABORTED | Der zugeordnete IRP wurde beendet. |
| USBD_ABBRECHEN | Das zugeordnete E/A-Anforderungspaket (IRP) schlägt fehl. |
| USBD_AKTIV | Die logische Pipe ist in Betrieb und wird nicht angehalten. |
| USBD_BADHANDLE | Die Kennung, die als Parameter über die Aufrufvektorschnittstelle übergeben wird, ist ungültig. |
| USBD_BANDBREITE | Die Verbindung zur logischen Pipe ist aufgrund von Bandbreitenanforderungen fehlgeschlagen. |
| USBD_CONNECT | Die logische Pipe ist bereits verbunden. |
| USBD_DATEN | Ungültige Antwort von der Einheit |
| USBD_DISCONNECT | Die Einheit, die der Transaktion zugeordnet ist, wird getrennt oder entfernt. |
| USBD_FEHLER | Allgemeine Fehlerbedingung. |
| USBD_XX_ENCODE_CASE_ONE angehalten | Die logische Pipe, die der Transaktion zugeordnet ist, wird angehalten. |
| USBD_POWER | Das Gerät hat das Strombudget überschritten. |
| USBD_GESCHWINDIGKEIT | Die Operation zum Zurücksetzen des Ports ist aufgrund einer Abweichung bei der Einheitengeschwindigkeit fehlgeschlagen. |
| USBD_STALLE | Die logische Pipe, die der Transaktion zugeordnet ist, wird verzögert. |
| USBD_TIMEOUT | Die E/A-Operation hat das zulässige Zeitlimit überschritten. |
Aufrufvektoren
Wenn die USB-Konfigurationsmethode ausgeführt wird, öffnet sie die Gerätedatei des USB-Systemtreibers (USBD) /dev/usb0 und versucht, jeden erkannten und verfügbaren USB-Host-Controller mithilfe einer USBD_REGISTER_HC ioctl -Operation bei USBD zu registrieren. Wenn die USBD_REGISTER_HC ioctl -Operation verarbeitet wird, öffnet die USBD den Host-Controller-Treiber und fordert mithilfe einer HCD_REGISTER_HC ioctl -Operation die Registrierung von Aufrufvektoren an, die im Host-Controller-Treiber gespeichert sind. Nachdem die Rufvektoren beim USBD registriert sind, erfolgt die gesamte weitere Kommunikation zwischen dem USBD und dem Host-Controller-Treiber durch die Rufvektoren. Die Zusammenfassung der Aufrufvektoren folgt:
| Aufrufvektor | Beschreibung |
|---|---|
| hcdGetFrame | Ruft die aktuelle Rahmennummer vom verbundenen Host-Controller ab. Dieser Aufrufvektor wird von der USBD bereitgestellt. |
| hcdPipeAbort | Bricht die Verarbeitung eines E/A-Puffers ab. Die vom E/A-Puffer angegebene Pipe wird bereits angehalten, bevor der Aufrufvektor hcdPipeAbort aufgerufen wird. Dieser Aufrufvektor wird von der USBD bereitgestellt. |
| hcdPipeAddIOB | Erhöht die maximale Anzahl ausstehender E/A-Puffer. Dieser Aufrufvektor wird von der USBD bereitgestellt. |
| hcdPipeClear | Löscht die E/A-Operationen an einem bestimmten Endpunkt, stoppt sie und startet sie erneut. Wenn dieser Aufrufvektor aufgerufen wird, überprüft die Funktion, ob sich der Ring im angehaltenen Zustand befindet. |
| hcdPipeConnect | Erstellt eine Pipe-Verbindung zu einem Endpunkt auf einem bestimmten USB-Gerät. |
| hcdPipeDisconnect | Entfernt die zuvor eingerichtete Pipeverbindung mit dem Endpunkt auf einer bestimmten USB-Einheit. |
| hcdPipeHalt | Hält eine Pipe aus der Perspektive des Host-Controllers an Alle anstehenden E/A-Operationen verbleiben im Wartestatus. Dieser Aufrufvektor wird von der USBD bereitgestellt. |
| hcdPipeIO | Führt E/A-Operationen auf der USB-Einheit aus. Die E/A-Operationen können die folgenden Übertragungstypen aufweisen: Steuerung, Massenoperationen, isochronische Operationen und Unterbrechungen. |
| hcdPipeResetToggle | Setzt das Umschaltbit für die Datensynchronisation auf DATA0zurück. Dieser Aufrufvektor wird von der USBD bereitgestellt. |
| hcdPipeStatus | Ruft den Status der Pipe aus der Perspektive des Host-Controllers ab Dieser Aufrufvektor wird von der USBD bereitgestellt. |
| hcdShutdownComplete | Informiert den Host-Controller-Treiber darüber, dass die Anforderung usbdReqHCshutdown abgeschlossen ist. Dieser Aufrufvektor wird von der USBD bereitgestellt. |
| hcdUnregisterHC | Hebt die Registrierung eines Host-Controllers bei der USBD auf. |
| usbdBusMap | Ordnet den Speicher für das Bus-Mastering zu. Dieser Aufrufvektor wird vom Treiber des erweiterbaren Host-Controllers (xHCD) bereitgestellt. |
| usbdPostIOB | Zieht einen E/A-Puffer zurück. Dieser Aufrufvektor wird vom Adaptertreiber bereitgestellt. |
| usbdReqHCrestart | Dieser Aufrufvektor wird bereitgestellt, wenn ein Fehler im Adapter erkannt wird, und die Wiederherstellung des Adaptertreibers nach diesem Fehler erfordert einen Neustart des Adapters. |
| usbdReqHCshutdown | Dieser Aufrufvektor wird beim Entfernen des Host-Controllers bereitgestellt. |
| usbdReqHCunregister | Die Funktion CFG TERM des Adaptertreibers fordert die USBD auf, die Registrierung des Host-Controllers aufzuheben. Dieser Aufrufvektor wird beim Entfernen des Host-Controllers bereitgestellt. |