Vom SCSI-Port bereitgestellte Funktionen
Der SCSI-Porttreiber bietet die folgenden Funktionen:
Microsoft Windows unterstützt Systeme, die verschiedene Typen von E/A-Bussen und/oder mehrere E/A-Busse desselben Typs enthalten. Um diese Sorte zu behandeln, ist ein allgemeines Adressierungsschema erforderlich.
PCI-Geräte können sowohl über E/A-Port- als auch über Speicherregisterressourcen verfügen. Logische Adressen helfen dabei, diese Unterscheidung für den Porttreiber transparent zu machen.
Einige Systeme enthalten HBAs, die mit mehr als einem Bus verbunden sind. Ein solcher HBA erfordert möglicherweise mehrere Adressübersetzungen.
Logische Adressen werden für die Portabilität zwischen CISC-basierten und RISC-basierten Computern benötigt.
Wiederholen von IRPs, wenn ein Gerät zu ausgelastet ist, um sie zu verarbeiten.
Speicherklassentreiber müssen keine Algorithmen zum Wiederholen von IRPs implementieren, wenn Geräte zu ausgelastet sind, um sie zu verarbeiten. Der SCSI-Porttreiber implementiert diese Funktionalität.
Erzwingen von Timeoutwerten für Anforderungen.
Der Klassentreiber legt einen Timeoutwert für Anforderungen fest, und der SCSI-Port ist für die Erzwingung verantwortlich. Der SCSI-Porttreiber kann jedoch die Timeoutwerte des Klassentreibers unter Berücksichtigung des Zustands des Busses flexibel erzwingen. Wenn z. B. eine vom SCSI-Port verwaltete Fibre Channel-Verbindung für 20 Sekunden unterbrochen wird, kann der SCSI-Port den Timeoutzähler während der Ausfallzeit anhalten, sodass für instance Anforderungen mit einem Timeout von 10 Sekunden erst 10 Sekunden nach dem Wiedereinsetzen des Links fehlschlagen. Der SCSI-Port erhöht die Timeoutwerte, die Anforderungen als Reaktion auf eine Zunahme des E/A-Datenverkehrs zugewiesen werden, da die Geräte bei höherem E/A-Datenverkehr mehr Zeit benötigen, um Anforderungen abzuschließen.
Behandeln von Ziel- und Controller-Gebucht-Fehlern sowie Transportfehlerbedingungen (d. h. Fehler, die mit der tatsächlichen Übertragung von Daten auf dem Bus zusammenhängen). Beispiel:
- Busparitätsfehler
- Timeouts für die Auswahl
Bereitstellen von Klassentreibern mit Informationen zu Hostadapterbeschränkungen.
Es liegt in der Verantwortung des Klassentreibers, die Größe der Datenübertragungen entsprechend den Grenzwerten der Host bus Adapter (HBA) zu regeln. Der SCSI-Port stellt dem Klassentreiber jedoch die Informationen bereit, die er zum Ausführen dieser Aufgabe benötigt. Der SCSI-Port stellt diese Informationen in einem Adapterdeskriptor (STORAGE_ADAPTER_DESCRIPTOR) als Reaktion auf eine IOCTL_STORAGE_QUERY_PROPERTY IOCTL-Anforderung bereit. Der Klassentreiber ist für das Aufteilen von Anforderungen in Blöcke der entsprechenden Größe verantwortlich, die auf den in diesem Deskriptor gemeldeten Informationen basieren.
Übersetzen relativer Busadressen in logische Adressen.
Wenn sie abgefragt werden, stellen Adapter busrelative Adressen für E/A-Ports, Befehlsregister und Steuerung status Register bereit. Ein Miniporttreiber kann jedoch keine busrelativen Adressen verwenden, um mit seinem Host Busadapter (HBA) zu kommunizieren. Der SCSI-Port übersetzt busrelative Adressen in logische Adressen, sodass Miniporttreiber transparent auf Busadressen zugreifen können. Dafür gibt es mehrere Gründe:
Sicherstellen, dass ein Gerät und alle zugrunde liegenden Geräte (im D0 Gerätestromzustand) vor dem Starten des Geräts eingeschaltet werden.
Wenn ein Gerät nicht zum Einschalten bereit ist, stellt der SCSI-Port eine D0-Anforderung für dieses Gerät in die Warteschlange, bis das Gerät bereit ist.
Warteschlangen für asynchrone Anforderungen von Klassentreibern und synchrones Weiterleiten an das Zielgerät.
Klassentreiber müssen nicht warten, bis eine Anforderung abgeschlossen ist, bevor sie die nächste Anforderung senden. Der SCSI-Port übernimmt die Verantwortung für das Anstehen dieser Anforderungen, um die Verarbeitungsleistung der zugrunde liegenden Hardware nicht zu überfordern.
Unterstützung sowohl der internen als auch der externen Verwaltung interner E/A-Anforderungswarteschlangen.
Die meisten Warteschlangenverwaltungsvorgänge werden vom SCSI-Port selbst initiiert. Für instance friert der SCSI-Port seine Warteschlange ein, wenn ein Fehler auftritt, und meldet die Fehlerbedingung an den Klassentreiber, sodass der Klassentreiber reagieren kann, bevor weitere Anforderungen verarbeitet werden. Der SCSI-Port reagiert jedoch auch auf Anforderungen des Klassentreibers oder anderer höherstufiger Treiber zum Sperren, Entsperren, Einfrieren oder Einfrieren der internen Anforderungswarteschlange. Übergeordnete Treiber können erzwingen, dass der SCSI-Port die interne Warteschlange mithilfe der SRB_FUNCTION_RELEASE_QUEUE-Anforderung aufzuheben. Eine Erläuterung, was es bedeutet, eine Warteschlange einzufrieren, zu sperren oder zu entsperren, finden Sie unter Warteschlangenverwaltung des SCSI-Porttreibers.
Übersetzen von Fehlern, die vom Gerät zur Verarbeitung durch den Klassentreiber in das SCSI-2-Sense-Datenformat gemeldet werden.
Der SCSI-Port stellt Dienste für den Miniporttreiber mithilfe der SCSI-Portbibliotheksroutinen bereit. Miniport-Treiberschreiber können diese Routinen aufrufen, anstatt die von ihnen bereitgestellten Funktionen in einem einzelnen monolithischen Porttreiber zu codieren. Einige der wichtigsten Dienste, die durch die Verwendung dieser Routinen bereitgestellt werden, sind wie folgt:
Ein Miniporttreiber für SCSI-Ports kann viele betriebssystemabhängige Initialisierungsvorgänge an die SCSI-Port-Bibliotheksroutine ScsiPortInitialize delegieren . Dadurch wird ein SCSI-Port-Miniporttreiber für verschiedene Versionen des Betriebssystems portierbarer. Eine Erläuterung der Initialisierungspflichten eines SCSI-Port-Miniporttreibers finden Sie unter DriverEntry-Routine des SCSI-Miniport-Treibers.
SCSI-Port-Miniporttreibern für Nicht-PnP-Geräte bleibt es erspart, Adapter zu suchen und ihre Ressourcen an den PnP-Manager zu melden. Dies geschieht in ScsiPortInitialize.
Miniporttreiber für SCSI-Port initialisieren keine Dispatch-Einstiegspunkte im Treiberobjekt. Der SCSI-Porttreiber übernimmt dies im Namen des Miniporttreibers, wenn der Miniporttreiber ScsiPortInitialize aufruft.
SCSI-Port-Miniporttreiber konvertieren keine busrelativen Adressen in logische Adressen mithilfe von HalTranslateBusAddress. SCSI-Port-Miniporttreiber tun dies durch einen Aufruf von ScsiPortGetDeviceBase.
Eine Zusammenfassung der Bibliotheksroutinen, die SCSI-Port für SCSI-Port-Miniporttreiber verfügbar macht, finden Sie unter Unterstützungsroutinen für SCSI-Porttreiber.