Freigeben über


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).

Hinweis Der SCSI-Porttreiber und die SCSI-Miniporttreibermodelle können in Zukunft geändert oder nicht mehr verfügbar sein. Stattdessen empfehlen wir die Verwendung des Storport-Treibers und Storport Miniport Treibermodelle.
 

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.
Die logische Adresse, die von ScsiPortGetDeviceBase- zurückgegeben wird, sollte für alle nachfolgenden Verweise auf die Hardware verwendet werden, aber nicht einer AccessRanges- Spezifikation im PORT_CONFIGURATION_INFORMATION hinzugefügt werden. Miniport-Treiberautoren sollten keine Annahmen darüber machen, wie viele Bits in der logischen Basisadresse verwendet werden, die von ScsiPortGetDeviceBasezurückgegeben wird.

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.

Hinweis Der SCSI-Porttreiber und die SCSI-Miniporttreibermodelle können in Zukunft geändert oder nicht mehr verfügbar sein. Stattdessen empfehlen wir die Verwendung des Storport-Treibers und Storport Miniport Treibermodelle.
 

Anforderungen

Anforderung Wert
Zielplattform- Desktop
Header- srb.h (include Miniport.h, Scsi.h)
Library Scsiport.lib

Siehe auch

ACCESS_RANGE

HwScsiFindAdapter-

PORT_CONFIGURATION_INFORMATION (SCSI)-

ScsiPortFreeDeviceBase-

ScsiPortGetBusData-

ScsiPortValidateRange