ScsiPortGetDeviceBase-Funktion (srb.h)
Die ScsiPortGetDeviceBase Routine gibt eine zugeordnete logische Basisadresse zurück, die für die Kommunikation mit einer HBA verwendet werden kann. Jeder Miniporttreiber muss zugeordnete, logische Zugriffsbereichsadressen an den ScsiPort übergeben. PortXxx und ScsiPort.. Registrieren SieXxx Routinen für die Kommunikation mit ihren HBA(n).
Syntax
SCSIPORT_API PVOID ScsiPortGetDeviceBase(
[in] PVOID HwDeviceExtension,
[in] INTERFACE_TYPE BusType,
[in] ULONG SystemIoBusNumber,
[in] SCSI_PHYSICAL_ADDRESS IoAddress,
[in] ULONG NumberOfBytes,
[in] BOOLEAN InIoSpace
);
Parameter
[in] HwDeviceExtension
Zeiger auf die Hardwaregeräteerweiterung. Dies ist ein Speicherbereich pro HBA, den der Porttreiber im Namen des Miniporttreibers zuordnet und initialisiert. Miniporttreiber speichern in der Regel HBA-spezifische Informationen in dieser Erweiterung, z. B. den Zustand der HBA und die zugeordneten Zugriffsbereiche der HBA. Dieser Bereich steht dem Miniporttreiber im DeviceExtension->HwDeviceExtension Mitglied des Geräteobjekts der HBA unmittelbar nach dem Aufruf ScsiPortInitializezur Verfügung. Der Porttreiber gibt diesen Speicher frei, wenn es das Gerät entfernt.
[in] BusType
Gibt den Schnittstellentyp des E/A-Busses an, an dem die HBA angeschlossen ist. Die HwScsiFindAdapter Routine des Miniporttreibers ruft den Wert für diesen Parameter aus dem AdapterInterfaceType Member der Eingabe-PORT_CONFIGURATION_INFORMATION ab.
[in] SystemIoBusNumber
Gibt die vom System zugewiesene Nummer des E/A-Buss an, an dem die HBA angeschlossen ist. Die HwScsiFindAdapter Routine ruft den Wert für diesen Parameter aus dem SystemIoBusNumber Member der Eingabe-PORT_CONFIGURATION_INFORMATION ab.
[in] IoAddress
Gibt die busrelative Basisadresse eines Bereichs an, der von der HBA verwendet wird. Die HwScsiFindAdapter Routine ruft den Wert für diesen Parameter aus einem der AccessRanges Elemente in der PORT_CONFIGURATION_INFORMATION ab, wenn der Porttreiber Bereichskonfigurationsinformationen bereitstellt. Andernfalls kann es sich bei dieser Adresse um einen Wert handeln, der von ScsiPortGetBusData- oder einem vom Miniport-Treiber bereitgestellten Standardwert zurückgegeben wird. Vermeiden Sie die Verwendung einer Basisadresse von Null, da der erfolgreiche Rückgabestatus mit dem Fehlerstatus in Konflikt geraten kann (NULL-).
[in] NumberOfBytes
Gibt die Größe in Byte des Bereichs an, den die Zuordnung abdecken soll. Die HwScsiFindAdapter Routine ruft den Wert dieses Parameters aus demselben AccessRanges Element wie IoAddress ab, wenn der Porttreiber Bereichskonfigurationsinformationen bereitstellt. Andernfalls kann dieser Wert von ScsiPortGetBusData- oder einem vom Miniporttreiber bereitgestellten Standard zurückgegeben werden. In jedem Fall darf der Treiber nicht auf die Hardware außerhalb des zurückgegebenen zugeordneten Bereichs zugreifen.
[in] InIoSpace
TRUE gibt an, dass sich der zuzuordnende Bereich im E/A-Bereich befindet, und der Miniporttreiber übergibt zugeordnete Adressen in diesem Bereich an den ScsiPort... PortierenXxx- für die Kommunikation mit der HBA. Die HwScsiFindAdapter Routine ruft den Wert dieses Parameters aus demselben AccessRanges Element wie IoAddressab. Beachten Sie, dass ein Miniporttreiber den Wert des InMemorySpace--Elements in einem ACCESS_RANGE-Typ-Element umkehren muss, bevor er an ScsiPortGetDeviceBase als InIoSpace-Argument übergeben wird. FALSE gibt an, dass sich der zuzuordnende Bereich im Arbeitsspeicher befindet.
Rückgabewert
ScsiPortGetDeviceBase gibt eine zugeordnete logische Basisadresse für die angegebene IoAddress- zurück, wenn der angegebene Bereich erfolgreich von IoAddressNumberOfByteszugeordnet wurde. Wenn ein bestimmter Bereich nicht zugeordnet werden kann, gibt ScsiPortGetDeviceBase-NULL-zurück.
Bemerkungen
NT-basierte Betriebssystemplattformen können mehrere Typen von E/A-Bussen und mehrere I/O-Busse desselben Typs haben. Darüber hinaus kann die HAL E/A-Speicher auf einigen Plattformen dem Speicher zuordnen.
Folglich kann ein Miniporttreiber keine busrelativen Zugriffsbereichsadressen verwenden, um mit seiner HBA zu kommunizieren. Um die Miniporttreiberübertragbarkeit auf CISC- und RISC-basierten Computern aufrechtzuerhalten, müssen die Adressen, die sie für den Zugriff auf HBAs verwenden, mit ScsiPortGetDeviceBaseübersetzt werden.
Jeder Miniporttreiber muss logische Bereichsadressen im Systembereich verwenden, die von ScsiPortGetDeviceBasezugeordnet werden, um mit seinen HBA(n) zu kommunizieren. Aufrufe an den ScsiPort... Port/RegisterXxx Routinen erfordern diese zugeordneten logischen Adressen.
ScsiPortGetDeviceBase- kann mehrmals aufgerufen werden, je nachdem, wie viele HBAs der Miniporttreiber unterstützt und wie viele Zugriffsbereiche die einzelnen HBA erfordern. Jeder zugeordnete Bereich entspricht einem Bereich von busrelativen Geräteadressen, die in einem ACCESS_RANGE-Typ-Element des AccessRanges Arrays angegeben sind.
ScsiPortGetDeviceBase- kann nur aus der HwScsiFindAdapter Routine eines Miniporttreibers oder von HwScsiAdapterControl aufgerufen werden, wenn der Steuerelementtyp ScsiSetRunningConfigist. Anrufe von anderen Miniporttreiberroutinen führen zu Systemfehlern oder zu einem falschen Vorgang für den Anrufer.
Befolgen Sie die folgenden Richtlinien zum Aufrufen von ScsiPortGetDeviceBase-:
- Wenn HwScsiFindAdapter einen vom Miniport bereitgestellten Satz von standardmäßigen busrelativen Zugriffsbereichen oder -werten verwendet, die von ScsiPortGetBusDatazurückgegeben werden, sollte ScsiPortValidateRange aufgerufen werden, bevor versucht wird, ScsiPortGetDeviceBaseaufzurufen.
- Wenn HwScsiFindAdapter- bestimmt, dass ein bestimmter HBA nicht einer ist, der vom Miniporttreiber unterstützt wird, muss ScsiPortFreeDeviceBase- aufgerufen werden, um die für die Kommunikation mit dieser HBA eingerichteten Zuordnungen freizugeben.
ScsiPortGetDeviceBase verwendet SCSI_PHYSICAL_ADDRESS, um busrelative Adressen darzustellen.
typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;
Der SCSI_PHYSICAL_ADDRESS Typ ist ein betriebssystemunabhängiger Datentyp, den SCSI-Miniporttreiber verwenden, um eine physische Adresse oder eine busrelative Adresse darzustellen.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Desktop |
Header- | srb.h (include Miniport.h, Scsi.h) |
Library | Scsiport.lib |