HW_INITIALIZATION_DATA Struktur (srb.h)
Jeder SCSI-Miniporttreiber DriverEntry Routine 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;
Angehörige
HwInitializationDataSize
Gibt die Größe dieser Struktur in Byte an, wie von Sizeof() zurückgegeben. In Der Tat gibt dieses Element die Version dieser Struktur an, die vom Miniporttreiber verwendet wird. Die DriverEntry Routine eines Miniporttreibers sollte den Wert dieses Mitglieds für den Porttreiber festlegen.
AdapterInterfaceType
Gibt den Typ des E/A-Bus an, mit dem der HBA verbunden ist, der eine der folgenden Sein kann: Internal, Isa, Eisa, MicroChannel, TurboChannel, oder PCIBus. Weitere Bustypen werden jedoch künftig unterstützt. Die obere Grenze für die unterstützten Typen von Bussen wird immer MaximumInterfaceType.
Wenn dies auf PCIBus-festgelegt ist, muss der Miniporttreiber Werte für die VendorIdLength-, VendorId-, DeviceIdLength-und DeviceId Member bereitstellen.
HwInitialize
Zeiger auf die HwScsiInitialize Routine des Miniporttreibers, bei der es sich um einen erforderlichen Einstiegspunkt für alle Miniporttreiber handelt. Der Prototyp für diese Routine ist PHW_INITIALIZE.
HwStartIo
Zeiger auf die HwScsiStartIo Routine des Miniporttreibers, bei der es sich um einen erforderlichen Einstiegspunkt für alle Miniporttreiber handelt. Der Prototyp für diese Routine ist PHW_STARTIO.
HwInterrupt
Zeiger auf die HwScsiInterrupt Routine des Miniporttreibers, bei dem es sich um einen erforderlichen Einstiegspunkt für jeden Miniporttreiber eines HBA handelt, der Unterbrechungen generiert. Legen Sie dies auf NULL- fest, wenn der Miniporttreiber keinen ISR benötigt. Der Prototyp für diese Routine ist PHW_INTERRUPT.
HwFindAdapter
Zeiger auf die HwScsiFindAdapter Routine des Miniporttreibers, bei der es sich um einen erforderlichen Einstiegspunkt für alle Miniporttreiber handelt. Der Prototyp für diese Routine ist PHW_FIND_ADAPTER.
HwResetBus
Zeiger auf den HwScsiResetBus Routine des Miniporttreibers, der 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 die HBA system-DMA verwendet, d. h. einen System-DMA-Controller. Legen Sie dies auf NULL- fest, wenn die HBA ein Busmaster ist oder PIO verwendet. Der Prototyp für diese Routine ist PHW_DMA_STARTED.
HwAdapterState
Zeiger auf den HwScsiAdapterState Routine des Miniporttreibers, der für Miniporttreiber von HBAs mit BIOSs erforderlich ist, die mit einem betriebssystemabhängigen, x86-plattformbasierten Porttreiber verknüpft sind, der zwischen x86 geschützten und realen Prozessormodi wechseln muss. Wenn der Miniporttreiber keine HwScsiAdapterState- Routine benötigt, legen Sie dieses Element auf NULL-fest. Ein Miniporttreiber für eine HBA mit einem BIOS muss über eine HwScsiAdapterState-Routine verfügen, um mit dem nur x86-Porttreiber kompatibel zu sein und in einer x86-betriebssystemumgebung portierbar zu sein. Der Prototyp für diese Routine ist PHW_ADAPTER_STATE.
DeviceExtensionSize
Gibt die Größe in Bytes an, die vom Miniporttreiber für die Erweiterung pro HBA-Geräte erforderlich sind. Ein Miniporttreiber verwendet seine Geräteerweiterung als Speicher für treiberbezogene HBA-Informationen. Der betriebssystemspezifische Porttreiber initialisiert jede Geräteerweiterung mit Nullen und übergibt einen Zeiger an die HBA-spezifische Geräteerweiterung in jedem Aufruf eines Miniporttreibers, mit Ausnahme seiner DriverEntry Routine. Die angegebene Größe enthält keinen Miniporttreiber, der pro logischer Einheit angefordert wird, wie im nächsten Schritt 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 Wahrheitseinheitsinformationen zu SCSI-Peripheriegeräten auf dem Bus verwenden. Der betriebssystemspezifische Porttreiber initialisiert jede LU-Erweiterung, die er mit Nullen zuweist. Lassen Sie dieses Element auf Null festgelegt, wenn der Miniporttreiber keine Lu-Informationen verwaltet, für die er Speicher benötigt. Dieser Wert basiert auf der Annahme, dass die HBA 32-Bit-Adressen empfangen kann, unabhängig davon, was der Controller tatsächlich unterstützen kann. Wenn in den LUN- oder SRB-Erweiterungen zusätzlichen Speicherplatz benötigt wird, um 64-Bit-Adressen zu verarbeiten, müssen an diesem Wert entsprechende Anpassungen vorgenommen werden, bevor sie mit Routinen wie ScsiPortGetUncachedExtensionverwendet werden.
SrbExtensionSize
Gibt die Größe in Byte an, die der Miniporttreiber für den 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 jedoch einen Zeiger auf diesen Speicher in jedem SRB fest, der an den Miniporttreiber gesendet wird. Auf eine SRB-Erweiterung kann über die HBA-Hardware sicher zugegriffen werden. Lassen Sie dieses Element auf Null festgelegt, wenn der Miniporttreiber keine SRB-Informationen pro SRB verwaltet, für die er Speicher benötigt. Dieser Wert basiert auf der Annahme, dass die HBA 32-Bit-Adressen empfangen kann, unabhängig davon, was der Controller tatsächlich unterstützen kann. Wenn in den LUN- oder SRB-Erweiterungen zusätzlichen Speicherplatz benötigt wird, um 64-Bit-Adressen zu verarbeiten, müssen an diesem Wert entsprechende Anpassungen vorgenommen werden, bevor sie mit Routinen wie ScsiPortGetUncachedExtensionverwendet 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 die E/A-Ports und einen für den Gerätespeicherbereich.
Reserved
Reserviert für die Systemverwendung und nicht für die Verwendung durch Miniporttreiber.
MapBuffers
Gibt an, wenn TRUE, dass alle Datenpufferadressen virtuellen Adressen für den Zugriff durch den Miniporttreiber zugeordnet werden müssen. Wenn FALSE-, müssen Datenpufferadressen nicht virtuellen Adressen zugeordnet werden.
NeedPhysicalAddresses
Gibt an, wann TRUE-, dass der Miniporttreiber sein Gerät, jede pro LU und alle Adressen pro SRB-Erweiterung sowie SRB-Pufferadressen in physische Adressen übersetzen muss, wie dies von der HBA erforderlich ist. Wenn FALSE-, müssen keine dieser Adressen in physische Adressen übersetzt werden.
TaggedQueuing
Gibt an, wann TRUE-, kann dieser Miniporttreiber SCSI-markierte Warteschlangen unterstützen. Wenn FALSE-, kann der Miniporttreiber SCSI-markierte Warteschlange nicht unterstützen.
AutoRequestSense
Gibt an, wann TRUE-, dass die HBA einen Anforderungsoptimierungsvorgang ausführen kann, ohne dass eine explizite Anforderung erforderlich ist. Wenn FALSE-, erfordert die 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 dieses Element auf TRUE-festlegen.
MultipleRequestPerLu
Gibt an, wann TRUE-, dass der Miniporttreiber mehrere Anforderungen pro logische Einheit, insbesondere innerhalb der HBA, in die Warteschlange stellen kann. Wenn FALSE-, kann der Miniporttreiber nicht mehrere Anforderungen pro logische 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 dieses Element auf TRUEfestlegt, muss er jedes SRB-QueueTag Member für Anforderungen dieses Typs verwenden, der SRB_FLAGS_QUEUE_ACTION_ENABLE wird jedoch nicht im SrbFlags Member der SCSI_REQUEST_BLOCK Struktur festgelegt.
ReceiveEvent
Gibt an, wenn TRUE-, dass der Miniporttreiber einen HBA steuert, der den Empfangen-Ereignis-SRB für asynchrone SCSI-Ereignisse unterstützen kann. Wenn FALSE-, kann die HBA den Empfangen-Ereignis-SRB für asynchrone SCSI-Ereignisse nicht unterstützen.
VendorIdLength
Gibt die Größe in Byte der VendorId- Zeichenfolge an, die als Nächstes beschrieben wird.
VendorId
Zeiger auf eine ASCII-Bytezeichenfolge, die den Hersteller der HBA identifiziert. Dieses Element ist für Plug- und Play-Treiber irrelevant.
Wenn der angegebene AdapterInterfaceType-PCIBusist, ist die Anbieter-ID ein USHORT-Wert, der vom PCI SIG zugewiesen wird, der vom Miniporttreiber in eine Bytezeichenfolge konvertiert werden muss. Wenn beispielsweise der zugewiesene PCI-Anbieter-ID-Wert 1001 ist, lautet die vom Miniport-Treiber bereitgestellte VendorId Zeichenfolge ('1', '0', '1').
ReservedUshort
Reserviert für die Systemverwendung und ist nicht für die Verwendung durch Miniporttreiber verfügbar.
PortVersionFlags
DeviceIdLength
Gibt die Größe in Byte der DeviceId- Zeichenfolge an, die als Nächstes beschrieben wird.
DeviceId
Zeigen Sie auf eine ASCII-Bytezeichenfolge, die die vom Miniporttreiber unterstützten HBA-Modelle identifiziert. Dieses Element ist für Plug- und Play-Treiber irrelevant.
Wenn der angegebene AdapterInterfaceType-PCIBus-ist, ist eine Geräte-ID ein USHORT-Wert, der vom Hersteller der HBA zugewiesen wird. Der Miniporttreiber muss alle PCI-Geräte-ID-Werte für die HBA(n) konvertieren, die er unterstützen kann, in DeviceId Bytezeichenfolge(n), wie für das VendorId Mitglied. Wenn beispielsweise ein Miniporttreiber HBAs mit den PCI-Geräte-IDs 8040 und 8050 unterstützen kann, kann er DeviceId- mit einem Zeiger auf die Bytezeichenfolge ('8', '0') festlegen.
HwAdapterControl
Zeiger auf die HwScsiAdapterControl Routine des Miniporttreibers, die für alle PnP-Miniporttreiber erforderlich ist. Legen Sie dies auf NULL- fest, wenn der Miniporttreiber Plug and Play nicht unterstützt.
Bemerkungen
Jeder Miniporttreiber muss die HW_INITIALIZATION_DATA Struktur mit Nullen initialisieren, bevor die Werte der relevanten Member in dieser Struktur festgelegt werden und ScsiPortInitializeaufgerufen wird.
Die Dma64BitAddresses Mitglied von HW_INITIALIZATION_DATA wurde in Windows 2000 eliminiert (Weitere Details finden Sie in der Diskussion unter PORT_CONFIGURATION_DATA).
Sowohl HW_INITIALIZATION_DATA als auch PORT_CONFIGURATION_INFORMATION haben ein Elementpaar namens SpecificLuExtensionSize und SrbExtensionSize, dessen 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 die HBA 32-Bit-Adressen verarbeiten kann, unabhängig davon, was der Controller tatsächlich unterstützen kann. (Weitere Informationen finden Sie in der Diskussion unter PORT_CONFIGURATION_DATA.)
Anforderungen
Anforderung | Wert |
---|---|
Header- | srb.h (include Srb.h, Strmini.h) |