HW_INITIALIZATION_DATA struttura (srb.h)
Ogni routine driver driver SCSI Miniport deve inizializzare con zero e quindi compilare le informazioni relative 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;
Members
HwInitializationDataSize
Specifica le dimensioni di questa struttura in byte, come restituito da sizeof(). In effetti, questo membro indica la versione di questa struttura usata dal driver miniport. La routine DriverEntry di un miniport deve impostare il valore di questo membro per il driver della porta.
AdapterInterfaceType
Specifica il tipo di bus di I/O a cui è connesso l'HBA, che può essere uno dei seguenti: Internal, Isa, Eisa, MicroChannel, TurboChannel o PCIBus. Tuttavia, altri tipi di autobus saranno supportati in futuro. Il limite superiore sui tipi di autobus supportati è sempre MaximumInterfaceType.
Se questo è impostato su PCIBus, il driver miniport deve fornire valori per i membri VendorIdLength, VendorId, DeviceIdLength e DeviceId, descritti più avanti.
HwInitialize
Puntatore alla routine HwSCSIInitialize del driver miniport, che è 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, che è un punto di ingresso obbligatorio per tutti i driver miniport. Il prototipo per questa routine è PHW_STARTIO.
HwInterrupt
Puntatore alla routine HwSCSIInterrupt del driver miniport, che è un punto di ingresso obbligatorio per qualsiasi driver miniport di un HBA che genera interruzioni. Impostare questa opzione su NULL se il driver miniport non necessita di ISR. Il prototipo per questa routine è PHW_INTERRUPT.
HwFindAdapter
Puntatore alla routine HwScsiFindAdapter 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, che è 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 la sua HBA usa il sistema DMA, ovvero un controller DMA di sistema. Impostare questa opzione 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, che è un punto di ingresso obbligatorio per i driver miniport di HBA con BIOS collegati a un driver di porta dipendente dal sistema operativo, x86-platform-only driver che deve passare tra modalità di processore protette e reali x86. Se il driver miniport non necessita di 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 x86 solo. Il prototipo per questa routine è PHW_ADAPTER_STATE.
DeviceExtensionSize
Specifica le dimensioni in byte richieste dal driver miniport per l'estensione del dispositivo PER HBA. Un driver miniport usa l'estensione del dispositivo come archiviazione per informazioni HBA determinate dal driver. Il driver di porta specifico del sistema operativo inizializza ogni estensione del dispositivo allocata con zero e passa un puntatore all'estensione specifica del dispositivo HBA in ogni chiamata a un driver miniport, ad eccezione della routine DriverEntry . Le dimensioni specificate non includono alcun driver miniport richiesto per l'archiviazione per unità logica, descritto di seguito.
SpecificLuExtensionSize
Specifica le dimensioni in byte richieste dal driver miniport per l'archiviazione per unità logica, se presente. Un driver miniport può usare le estensioni LU come archiviazione per le informazioni sull'unità logica determinata dal driver sulle periferiche SCSI sul bus. Il driver di porta specifico del sistema operativo inizializza ogni estensione LU allocata con zero. Lasciare questo membro impostato su zero se il driver miniport non gestisce 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 usarle 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 estensioni SRB come archiviazione per informazioni specifiche del driver determinate dal driver, ad esempio i dati necessari per elaborare una richiesta specifica. 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 che invia 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 gestisce 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 usarle con routine come SCSIPortGetUncachedExtension.
NumberOfAccessRanges
Specifica il numero di intervalli di accesso usati dall'adapter. Ogni è un intervallo di indirizzi di memoria o indirizzi di porta di I/O. Una tipica HBA 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, tutti gli indirizzi del buffer dati devono essere mappati agli indirizzi virtuali per l'accesso dal driver miniport. Quando FALSE, gli indirizzi del buffer dei dati non devono essere mappati agli indirizzi virtuali.
NeedPhysicalAddresses
Indica, quando true, che il driver miniport deve tradurre il proprio dispositivo, qualsiasi per LU e qualsiasi indirizzo di estensione per SRB, nonché indirizzi buffer SRB, agli 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 richiesta senza richiedere una richiesta esplicita. Quando FALSE, l'HBA richiede una richiesta esplicita prima di poter eseguire un'operazione di richiesta. Solo i driver miniport che guidano HBA con firmware predefinito per eseguire operazioni di rilevamento delle richieste devono impostare questo membro su TRUE.
MultipleRequestPerLu
Indica, quando TRUE, 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 la SRB_FLAGS_QUEUE_ACTION_ENABLE non è impostata nel membro SrbFlags della struttura SCSI_REQUEST_BLOCK.
ReceiveEvent
Indica, quando TRUE, il driver miniport esegue un'HBA che può supportare l'evento di ricezione SRB per gli eventi asincroni SCSI. Quando FALSE, l'HBA non può supportare l'evento di ricezione SRB per gli eventi asincroni SCSI.
VendorIdLength
Specifica le dimensioni in byte della stringa VendorId , descritte di seguito.
VendorId
Puntatore a una stringa di byte ASCII che identifica il produttore dell'HBA. Questo membro è irrilevante per i driver di 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, la stringa VendorId fornita dal driver miniport sarà ('1', '0', '0', '1', '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 , descritte 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 di Plug and Play.
Se l'adapterInterfaceType specificato è PCIBus, un ID dispositivo è un valore USHORT assegnato dal produttore dell'HBA. Il driver miniport deve convertire qualsiasi valore ID dispositivo PCI per gli HBA(s) che può supportare in stringhe di byte DeviceId , 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, che è 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.
Commenti
Ogni driver miniport deve inizializzare la struttura di HW_INITIALIZATION_DATA con zero prima di impostare i valori dei membri pertinenti in questa struttura e chiama SCSIPortInitialize.
Il membro Dma64BitAddresses di HW_INITIALIZATION_DATA è stato eliminato in Windows 2000 (Vedere la discussione in PORT_CONFIGURATION_DATA per altri dettagli).
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 dal supporto effettivo del controller. Per ulteriori dettagli, vedere la discussione in PORT_CONFIGURATION_DATA.
Requisiti
Requisito | Valore |
---|---|
Intestazione | srb.h (include Srb.h, Strmini.h) |