HW_INITIALIZATION_DATA-Struktur (srb.h)
Die DriverEntry-Routine jedes SCSI-Miniporttreibers muss mit Nullen initialisiert werden und dann die relevanten HW_INITIALIZATION_DATA (SCSI)-Informationen für den betriebssystemspezifischen Porttreiber eingeben.
Syntax
typedef struct _HW_INITIALIZATION_DATA {
ULONG HwInitializationDataSize;
INTERFACE_TYPE AdapterInterfaceType;
PHW_INITIALIZE HwInitialize;
PHW_STARTIO HwStartIo;
PHW_INTERRUPT HwInterrupt;
PHW_FIND_ADAPTER HwFindAdapter;
PHW_RESET_BUS HwResetBus;
PHW_DMA_STARTED HwDmaStarted;
PHW_ADAPTER_STATE HwAdapterState;
ULONG DeviceExtensionSize;
ULONG SpecificLuExtensionSize;
ULONG SrbExtensionSize;
ULONG NumberOfAccessRanges;
PVOID Reserved;
BOOLEAN MapBuffers;
BOOLEAN NeedPhysicalAddresses;
BOOLEAN TaggedQueuing;
BOOLEAN AutoRequestSense;
BOOLEAN MultipleRequestPerLu;
BOOLEAN ReceiveEvent;
USHORT VendorIdLength;
PVOID VendorId;
union {
USHORT ReservedUshort;
USHORT PortVersionFlags;
};
USHORT DeviceIdLength;
PVOID DeviceId;
PHW_ADAPTER_CONTROL HwAdapterControl;
} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
Member
HwInitializationDataSize
Gibt die Größe dieser Struktur in Bytes an, wie von sizeof() zurückgegeben. Tatsächlich gibt dieses Member die Version dieser Struktur an, die vom Miniporttreiber verwendet wird. Die DriverEntry-Routine eines Miniporttreibers sollte den Wert dieses Elements für den Porttreiber festlegen.
AdapterInterfaceType
Gibt den Typ des E/A-Busses an, mit dem der HBA verbunden ist. Dies kann einer der folgenden Sein: Internal, Isa, Eisa, MicroChannel, TurboChannel oder PCIBus. In Zukunft werden jedoch weitere Bustypen unterstützt. Die obere Grenze für die unterstützten Bustypen ist immer MaximumInterfaceType.
Wenn dies auf PCIBus festgelegt ist, muss der Miniporttreiber Werte für die Member VendorIdLength, VendorId, DeviceIdLength und DeviceId angeben, die weiter unten beschrieben werden.
HwInitialize
Zeiger auf die HwScsiInitialize-Routine des Miniporttreibers, die ein erforderlicher Einstiegspunkt für alle Miniporttreiber ist. Der Prototyp für diese Routine ist PHW_INITIALIZE.
HwStartIo
Zeiger auf die HwScsiStartIo-Routine des Miniporttreibers, die ein erforderlicher Einstiegspunkt für alle Miniporttreiber ist. Der Prototyp für diese Routine ist PHW_STARTIO.
HwInterrupt
Zeiger auf die HwScsiInterrupt-Routine des Miniporttreibers, die ein erforderlicher Einstiegspunkt für jeden Miniporttreiber eines HBA ist, der Interrupts generiert. Legen Sie diesen Wert auf NULL fest, wenn der Miniporttreiber keine ISR benötigt. Der Prototyp für diese Routine ist PHW_INTERRUPT.
HwFindAdapter
Zeiger auf die HwScsiFindAdapter-Routine des Miniporttreibers, die ein erforderlicher Einstiegspunkt für alle Miniporttreiber ist. Der Prototyp für diese Routine ist PHW_FIND_ADAPTER.
HwResetBus
Zeiger auf die HwScsiResetBus-Routine des Miniporttreibers, die ein erforderlicher Einstiegspunkt für alle Miniporttreiber ist. Der Prototyp für diese Routine ist PHW_RESET_BUS.
HwDmaStarted
Zeiger auf die HwScsiDmaStarted-Routine des Miniporttreibers, wenn dessen HBA System-DMA verwendet, d. h. einen System-DMA-Controller. Legen Sie dies auf NULL fest, wenn der HBA ein Bus master ist oder PIO verwendet. Der Prototyp für diese Routine ist PHW_DMA_STARTED.
HwAdapterState
Zeiger auf die HwScsiAdapterState-Routine des Miniporttreibers, die ein erforderlicher Einstiegspunkt für Miniporttreiber von HBAs mit BIOSs ist, die mit einem betriebssystemabhängigen x86-Plattformporttreiber verknüpft sind, der zwischen x86-geschützten und echten Prozessormodi wechseln muss. Wenn der Miniporttreiber keine HwScsiAdapterState-Routine benötigt, legen Sie diesen Member auf NULL fest. Ein Miniporttreiber für einen HBA, der über ein BIOS verfügt, muss über eine HwScsiAdapterState-Routine verfügen, um mit dem reinen x86-Porttreiber kompatibel zu sein und in eine reine x86-Betriebssystemumgebung portierbar zu sein. Der Prototyp für diese Routine ist PHW_ADAPTER_STATE.
DeviceExtensionSize
Gibt die Größe in Byte an, die der Miniporttreiber für seine HBA-Geräteerweiterung pro HBA benötigt. Ein Miniporttreiber verwendet seine Geräteerweiterung als Speicher für vom Treiber bestimmte HBA-Informationen. Der betriebssystemspezifische Porttreiber initialisiert jede zuzuordnende Geräteerweiterung mit Nullen und übergibt bei jedem Aufruf eines Miniporttreibers einen Zeiger auf die HBA-spezifische Geräteerweiterung, mit Ausnahme der DriverEntry-Routine . Die angegebene Größe enthält keinen miniporttreiber-angeforderten Speicher pro logischer Einheit, wie als Nächstes beschrieben.
SpecificLuExtensionSize
Gibt die Größe in Byte an, die der Miniporttreiber für den Speicher pro logischer Einheit benötigt, falls vorhanden. Ein Miniporttreiber kann seine LU-Erweiterungen als Speicher für treiberbestimmte Informationen zu SCSI-Peripheriegeräten auf dem Bus verwenden. Der betriebssystemspezifische Porttreiber initialisiert jede LU-Erweiterung, die er ordnet, mit Nullen. Lassen Sie diesen Member auf 0 festgelegt, wenn der Miniporttreiber keine Lu-Informationen verwaltet, für die er Speicher benötigt. Dieser Wert basiert auf der Annahme, dass der HBA 32-Bit-Adressen empfangen kann, unabhängig davon, was der Controller tatsächlich unterstützen kann. Wenn zusätzlicher Speicherplatz in den LUN- oder SRB-Erweiterungen benötigt wird, um 64-Bit-Adressen zu verarbeiten, müssen entsprechende Anpassungen an diesem Wert vorgenommen werden, bevor sie mit Routinen wie ScsiPortGetUncachedExtension verwendet werden.
SrbExtensionSize
Gibt die Größe in Byte an, die der Miniporttreiber für seinen Speicher pro Anforderung benötigt( falls vorhanden). Ein Miniporttreiber kann SRB-Erweiterungen als Speicher für treiberbestimmte, anforderungsspezifische Informationen verwenden, z. B. Daten, die für die Verarbeitung einer bestimmten Anforderung erforderlich sind. Der betriebssystemspezifische Porttreiber initialisiert keine SRB-Erweiterungen, legt aber einen Zeiger auf diesen Speicher in jedem SRB fest, den er an den Miniporttreiber sendet. Auf eine SRB-Erweiterung kann von der HBA-Hardware sicher zugegriffen werden. Lassen Sie diesen Member auf 0 festgelegt, wenn der Miniporttreiber keine SRB-Informationen verwaltet, für die er Speicher benötigt. Dieser Wert basiert auf der Annahme, dass der HBA 32-Bit-Adressen empfangen kann, unabhängig davon, was der Controller tatsächlich unterstützen kann. Wenn zusätzlicher Speicherplatz in den LUN- oder SRB-Erweiterungen benötigt wird, um 64-Bit-Adressen zu verarbeiten, müssen entsprechende Anpassungen an diesem Wert vorgenommen werden, bevor sie mit Routinen wie ScsiPortGetUncachedExtension verwendet werden.
NumberOfAccessRanges
Gibt an, wie viele Zugriffsbereiche der Adapter verwendet. Jede ist ein Bereich von Speicheradressen oder E/A-Portadressen. Ein typischer HBA verwendet zwei Bereiche: einen für seine E/A-Ports und einen anderen für den Gerätespeicherbereich.
Reserved
Reserviert für die Systemnutzung und nicht für die Verwendung durch Miniporttreiber verfügbar.
MapBuffers
Gibt bei TRUE an, dass alle Datenpufferadressen virtuellen Adressen zugeordnet werden müssen, damit der Miniporttreiber darauf zugreifen kann. Bei FALSE müssen Datenpufferadressen nicht virtuellen Adressen zugeordnet werden.
NeedPhysicalAddresses
Gibt bei TRUE an, dass der Miniporttreiber sein Gerät, jede pro LU und jede SRB-Erweiterungsadresse sowie SRB-Pufferadressen gemäß den Anforderungen des HBA in physische Adressen übersetzen muss. Bei FALSE muss keine dieser Adressen in physische Adressen übersetzt werden.
TaggedQueuing
Gibt an, wenn TRUE, dass dieser Miniporttreiber SCSI-Markiertes Warteschlangen unterstützen kann. Wenn FALSE festgelegt ist, kann der Miniporttreiber SCSI-markiertes Warteschlangen nicht unterstützen.
AutoRequestSense
Gibt bei TRUE an, dass der HBA einen Anforderungsoptimierungsvorgang ausführen kann, ohne dass hierfür eine explizite Anforderung erforderlich ist. Bei FALSE erfordert der HBA eine explizite Anforderung, bevor ein Anforderungsoptimierungsvorgang ausgeführt werden kann. Nur Miniporttreiber, die HBAs mit integrierter Firmware zum Ausführen von Anforderungsoptimierungsvorgängen steuern, sollten diesen Member auf TRUE festlegen.
MultipleRequestPerLu
Gibt bei TRUE an, dass der Miniporttreiber mehrere Anforderungen pro logischer Einheit in die Warteschlange stellen kann, insbesondere innerhalb des HBA. Bei FALSE kann der Miniporttreiber nicht mehrere Anforderungen pro logischer Einheit in die Warteschlange stellen. Beachten Sie, dass ein HBA die Automatische Anforderungsoptimierung für seinen Miniporttreiber unterstützen muss, um diese Funktionalität zu aktivieren. Wenn ein Miniporttreiber diesen Member auf TRUE festlegt, muss er jedes SRB QueueTag-Element für Anforderungen dieses Typs verwenden, aber die SRB_FLAGS_QUEUE_ACTION_ENABLE ist nicht im SrbFlags-Member der SCSI_REQUEST_BLOCK-Struktur festgelegt.
ReceiveEvent
Gibt bei TRUE an, dass der Miniporttreiber einen HBA antreibt, der den Empfangsereignis-SRB für asynchrone SCSI-Ereignisse unterstützen kann. Bei FALSE kann der HBA den Empfangsereignis-SRB für asynchrone SCSI-Ereignisse nicht unterstützen.
VendorIdLength
Gibt die Größe der VendorId-Zeichenfolge in Byte an, die als Nächstes beschrieben wird.
VendorId
Zeiger auf eine ASCII-Bytezeichenfolge, die den Hersteller des HBA identifiziert. Dieses Element ist für Plug & Play Treiber irrelevant.
Wenn der angegebene AdapterInterfaceTypePCIBus ist, ist die Anbieter-ID ein von der PCI-SIG zugeordneter USHORT-Wert, der vom Miniporttreiber in eine Bytezeichenfolge konvertiert werden muss. Wenn der zugewiesene PCI-Anbieter-ID-Wert beispielsweise 1001 ist, lautet die vom Miniporttreiber bereitgestellte VendorId-Zeichenfolge ("1", "0", "0", "1").
ReservedUshort
Reserviert für die Systemnutzung und ist nicht für die Verwendung durch Miniporttreiber verfügbar.
PortVersionFlags
DeviceIdLength
Gibt die Größe der DeviceId-Zeichenfolge in Bytes an, die als Nächstes beschrieben wird.
DeviceId
Zeiger auf eine ASCII-Bytezeichenfolge, die die vom Miniporttreiber unterstützten HBA-Modelle identifiziert. Dieses Element ist für Plug & Play Treiber irrelevant.
Wenn der angegebene AdapterInterfaceTypePCIBus ist, ist eine Geräte-ID ein USHORT-Wert, der vom Hersteller des HBA zugewiesen wird. Der Miniporttreiber muss alle PCI-Geräte-ID-Werte für die unterstützten HBA(n) wie für das VendorId-Mitglied in DeviceId-Bytezeichenfolgen konvertieren. Wenn ein Miniporttreiber beispielsweise HBAs mit den PCI-Geräte-IDs 8040 und 8050 unterstützen kann, kann deviceId mit einem Zeiger auf die Bytezeichenfolge ("8", "0") festgelegt werden.
HwAdapterControl
Zeiger auf die HwScsiAdapterControl-Routine des Miniporttreibers, die ein erforderlicher Einstiegspunkt für alle PnP-Miniporttreiber ist. Legen Sie dies auf NULL fest, wenn der Miniporttreiber Plug & Play nicht unterstützt.
Hinweise
Jeder Miniporttreiber muss die HW_INITIALIZATION_DATA-Struktur mit Nullen initialisieren, bevor die Werte der relevanten Member in dieser Struktur festgelegt und ScsiPortInitialize aufgerufen wird.
Das Dma64BitAddresses-Mitglied von HW_INITIALIZATION_DATA wurde in Windows 2000 entfernt (weitere Details finden Sie in der Diskussion unter PORT_CONFIGURATION_DATA).
Sowohl HW_INITIALIZATION_DATA als auch PORT_CONFIGURATION_INFORMATION verfügen über ein Paar von Membern namens SpecificLuExtensionSize und SrbExtensionSize , deren Werte anders behandelt werden als vor Windows 2000. Der Miniporttreiber muss die Anfangswerte von SpecificLuExtensionSize und SrbExtensionSize in HW_INITIALIZATION_DATA basierend auf der Annahme berechnen, dass der HBA 32-Bit-Adressen verarbeiten kann, unabhängig davon, was der Controller tatsächlich unterstützen kann. (Weitere Details finden Sie in der Diskussion unter PORT_CONFIGURATION_DATA.)
Anforderungen
Anforderung | Wert |
---|---|
Header | srb.h (include Srb.h, Strmini.h) |