struttura HW_INITIALIZATION_DATA (srb.h)
Ogni driver miniport SCSI driverEntry routine deve inizializzare con zeri e quindi compilare le informazioni pertinenti HW_INITIALIZATION_DATA (SCSI) per il driver di porta specifico del sistema operativo.
Sintassi
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;
Membri
HwInitializationDataSize
Specifica le dimensioni di questa struttura in byte, come restituito da sizeof(). In effetti, questo membro indica la versione di questa struttura utilizzata dal driver miniport. La routine DriverEntry di un driver miniport deve impostare il valore di questo membro per il driver di porta.
AdapterInterfaceType
Specifica il tipo di bus di I/O a cui è connesso l'HBA, che può essere uno dei seguenti: interno , Isa, Eisa, MicroChannel, TurboChannelo PCIBus. Tuttavia, in futuro saranno supportati altri tipi di autobus. Il limite superiore per i tipi di autobus supportati è sempre MaximumInterfaceType.
Se questa proprietà è impostata su PCIBus, il driver miniport deve fornire valori per i membri VendorIdLength, VendorId, DeviceIdLengthe Membri deviceId, descritti più avanti.
HwInitialize
Puntatore alla routine del driver miniport HwScsiInitialize, ovvero un punto di ingresso obbligatorio per tutti i driver miniport. Il prototipo per questa routine è PHW_INITIALIZE.
HwStartIo
Puntatore alla routine HwScsiStartIo del driver miniport, un punto di ingresso obbligatorio per tutti i driver miniport. Il prototipo per questa routine è PHW_STARTIO.
HwInterrupt
Puntatore alla routine HwScsiInterrup t del driver miniport, che è un punto di ingresso obbligatorio per qualsiasi driver miniport di un HBA che genera interrupt. Impostare questa opzione su null se il driver miniport non necessita di ISR. Il prototipo per questa routine è PHW_INTERRUPT.
HwFindAdapter
Puntatore alla routine HwScsiFindAda pter del driver miniport, che è un punto di ingresso obbligatorio per tutti i driver miniport. Il prototipo per questa routine è PHW_FIND_ADAPTER.
HwResetBus
Puntatore alla routine HwScsiResetBus del driver miniport, un punto di ingresso obbligatorio per tutti i driver miniport. Il prototipo per questa routine è PHW_RESET_BUS.
HwDmaStarted
Puntatore alla routine HwScsiDmaStarted del driver miniport se l'HBA usa DMA di sistema, ovvero un controller DMA di sistema. Impostarla su NULL se l'HBA è un master del bus o usa PIO. Il prototipo per questa routine è PHW_DMA_STARTED.
HwAdapterState
Puntatore alla routine HwScsiAdapterState del driver miniport, un punto di ingresso obbligatorio per i driver miniport di HBA con BIOS collegati a un driver di porta x86 dipendente dal sistema operativo che deve passare tra le modalità di processore protette x86 e reali. Se il driver miniport non richiede routine HwScsiAdapterState, impostare questo membro su NULL. Un driver miniport per un HBA che dispone di un BIOS deve avere una routine HwScsiAdapterState per essere compatibile con il driver di porta x86 e portabile in un ambiente del sistema operativo solo x86. Il prototipo per questa routine è PHW_ADAPTER_STATE.
DeviceExtensionSize
Specifica le dimensioni in byte richieste dal driver miniport per l'estensione per dispositivo HBA. Un driver miniport usa l'estensione del dispositivo come risorsa di archiviazione per informazioni HBA determinate dal driver. Il driver di porta specifico del sistema operativo inizializza ogni estensione del dispositivo allocata con zeri e passa un puntatore all'estensione del dispositivo specifico di HBA in ogni chiamata a un driver miniport, ad eccezione della routine DriverEntry. Le dimensioni specificate non includono alcun driver miniport richiesto per unità logica di archiviazione, descritto di seguito.
SpecificLuExtensionSize
Specifica le dimensioni in byte richieste dal driver miniport per lo spazio di archiviazione per unità logica, se presente. Un driver miniport può usare le estensioni LU come risorsa di archiviazione per informazioni sulle unità logiche determinate dal driver sulle periferiche SCSI nel bus. Il driver di porta specifico del sistema operativo inizializza ogni estensione lu allocata con zeri. Lasciare questo membro impostato su zero se il driver miniport non mantiene le informazioni per lu per cui richiede l'archiviazione. Questo valore si basa sul presupposto che l'HBA sia in grado di ricevere indirizzi a 32 bit, indipendentemente da ciò che il controller può effettivamente supportare. Se è necessario spazio aggiuntivo nelle estensioni LUN o SRB per gestire gli indirizzi a 64 bit, è necessario apportare modifiche appropriate a questo valore prima di usarlo con routine come ScsiPortGetUncachedExtension.
SrbExtensionSize
Specifica le dimensioni in byte richieste dal driver miniport per l'archiviazione per richiesta, se presente. Un driver miniport può usare le estensioni SRB come risorsa di archiviazione per informazioni specifiche del driver, ad esempio i dati necessari per elaborare una determinata richiesta. Il driver di porta specifico del sistema operativo non inizializza le estensioni SRB, ma imposta un puntatore a questa risorsa di archiviazione in ogni SRB inviato al driver miniport. Un'estensione SRB può essere accessibile in modo sicuro dall'hardware HBA. Lasciare questo membro impostato su zero se il driver miniport non mantiene le informazioni per SRB per cui richiede l'archiviazione. Questo valore si basa sul presupposto che l'HBA sia in grado di ricevere indirizzi a 32 bit, indipendentemente da ciò che il controller può effettivamente supportare. Se è necessario spazio aggiuntivo nelle estensioni LUN o SRB per gestire gli indirizzi a 64 bit, è necessario apportare modifiche appropriate a questo valore prima di usarlo con routine come ScsiPortGetUncachedExtension.
NumberOfAccessRanges
Specifica il numero di intervalli di accesso utilizzati dall'adapter. Ogni è un intervallo di indirizzi di memoria o di porte di I/O. Un hba tipico usa due intervalli, uno per le porte di I/O e un altro per l'intervallo di memoria del dispositivo.
Reserved
Riservato per l'uso del sistema e non disponibile per l'uso da parte dei driver miniport.
MapBuffers
Indica, quando TRUE, è necessario eseguire il mapping di tutti gli indirizzi del buffer di dati agli indirizzi virtuali per l'accesso da parte del driver miniport. Quando FALSE, non è necessario eseguire il mapping degli indirizzi del buffer dei dati agli indirizzi virtuali.
NeedPhysicalAddresses
Indica, quando TRUE, che il driver miniport deve convertire il proprio dispositivo, qualsiasi indirizzo di estensione PER LU e qualsiasi indirizzo di estensione SRB per SRB, nonché indirizzi del buffer SRB, in indirizzi fisici, come richiesto dall'HBA. Quando FALSE, nessuno di questi indirizzi deve essere convertito in indirizzi fisici.
TaggedQueuing
Indica, quando TRUE, tale driver miniport può supportare l'accodamento con tag SCSI. Quando false, il driver miniport non può supportare l'accodamento con tag SCSI.
AutoRequestSense
Indica, quando TRUE, che l'HBA può eseguire un'operazione di tipo request-sense senza richiedere una richiesta esplicita. Quando FALSE, l'HBA richiede una richiesta esplicita prima di poter eseguire un'operazione di tipo request-sense. Solo i driver miniport che guidano HBA con firmware predefinito per eseguire operazioni di tipo request-sense devono impostare questo membro su TRUE.
MultipleRequestPerLu
Indica, quando TRUE, che il driver miniport può accodamento di più richieste per unità logica, in particolare, all'interno dell'HBA. Quando FALSE, il driver miniport non può accodamento di più richieste per unità logica. Si noti che un HBA deve supportare il senso della richiesta automatica per il driver miniport per abilitare questa funzionalità. Se un driver miniport imposta questo membro su TRUE, deve usare ogni membro SRB QueueTag per le richieste di questo tipo, ma il SRB_FLAGS_QUEUE_ACTION_ENABLE non è impostato nel SrbFlags membro della struttura SCSI_REQUEST_BLOCK.
ReceiveEvent
Indica, quando TRUE, che il driver miniport guida un HBA in grado di supportare l'SRB dell'evento di ricezione per gli eventi asincroni SCSI. Quando FALSE, l'HBA non può supportare l'SRB dell'evento di ricezione per gli eventi asincroni SCSI.
VendorIdLength
Specifica le dimensioni in byte della stringa VendorId descritta di seguito.
VendorId
Puntatore a una stringa di byte ASCII che identifica il produttore dell'HBA. Questo membro è irrilevante per i driver Plug and Play.
Se l'AdapterInterfaceType specificato è PCIBus, l'ID fornitore è un valore USHORT allocato da PCI SIG, che deve essere convertito in una stringa di byte dal driver miniport. Ad esempio, se il valore ID fornitore PCI assegnato è 1001, il driver miniport fornito VendorId stringa sarà ('1', '0', '0', '1').
ReservedUshort
Riservato per l'uso del sistema e non è disponibile per l'uso da parte dei driver miniport.
PortVersionFlags
DeviceIdLength
Specifica le dimensioni in byte della stringa DeviceId descritta di seguito.
DeviceId
Puntatore a una stringa di byte ASCII che identifica i modelli HBA supportati dal driver miniport. Questo membro è irrilevante per i driver Plug and Play.
Se il AdapterInterfaceType specificato è PCIBus, un ID dispositivo è un valore USHORT assegnato dal produttore dell'HBA. Il driver miniport deve convertire qualsiasi valore di ID dispositivo PCI per l'HBA(s) che può supportare in DeviceId stringhe di byte, come per il membro VendorId. Ad esempio, se un driver miniport può supportare hba con ID dispositivo PCI 8040 e 8050, potrebbe impostare DeviceId con un puntatore alla stringa di byte ('8', '0').
HwAdapterControl
Puntatore alla routine HwScsiAdapterControl del driver miniport, un punto di ingresso obbligatorio per tutti i driver miniport PnP. Impostare questa opzione su NULL se il driver miniport non supporta Plug and Play.
Osservazioni
Ogni driver miniport deve inizializzare la struttura HW_INITIALIZATION_DATA con zeri prima di impostare i valori dei membri pertinenti in questa struttura e chiama ScsiPortInitialize.
Il Dma64BitAddresses membro di HW_INITIALIZATION_DATA è stato eliminato in Windows 2000 (per altri dettagli, vedere la discussione in PORT_CONFIGURATION_DATA).
Sia HW_INITIALIZATION_DATA che PORT_CONFIGURATION_INFORMATION hanno una coppia di membri denominati SpecificLuExtensionSize e SrbExtensionSize i cui valori vengono gestiti in modo diverso rispetto a quelli precedenti a Windows 2000. Il driver miniport deve calcolare i valori iniziali di SpecificLuExtensionSize e SrbExtensionSize in HW_INITIALIZATION_DATA in base al presupposto che l'HBA sia in grado di gestire gli indirizzi a 32 bit, indipendentemente da ciò che il controller può effettivamente supportare. Per altri dettagli, vedere la discussione in PORT_CONFIGURATION_DATA.
Fabbisogno
Requisito | Valore |
---|---|
intestazione | srb.h (include Srb.h, Strmini.h) |