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

Der Einheitentreiber des EHCI-Adapters unterstützt die folgenden 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.