structure HW_INITIALIZATION_DATA (srb.h)
Chaque routine de miniporteur SCSI DriverEntry doit s’initialiser avec des zéros, puis renseigner les informations de HW_INITIALIZATION_DATA (SCSI) pertinentes pour le pilote de port spécifique au système d’exploitation.
Syntaxe
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;
Membres
HwInitializationDataSize
Spécifie la taille de cette structure en octets, comme retourné par taille de(). En effet, ce membre indique la version de cette structure utilisée par le pilote miniport. La routine de pilote miniport doit définir la valeur de ce membre pour le pilote de port.
AdapterInterfaceType
Spécifie le type de bus d’E/S auquel l’adaptateur HBA est connecté, qui peut être l’un des éléments suivants : interne , Isa, Eisa, MicroChannel, TurboChannelou PCIBus. Toutefois, d’autres types d’autobus seront pris en charge à l’avenir. La limite supérieure sur les types de bus pris en charge est toujours MaximumInterfaceType.
Si cette valeur est définie sur PCIBus, le pilote miniport doit fournir des valeurs pour les vendorIdLength, VendorId, DeviceIdLengthet DeviceId membres, décrits ultérieurement.
HwInitialize
Pointeur vers la routine HwScsiInitialize du pilote miniport, qui est un point d’entrée requis pour tous les pilotes miniports. Le prototype de cette routine est PHW_INITIALIZE.
HwStartIo
Pointeur vers la routine HwScsiStartIo du pilote miniport, qui est un point d’entrée requis pour tous les pilotes miniports. Le prototype de cette routine est PHW_STARTIO.
HwInterrupt
Pointeur vers la routine du pilote miniport HwScsiInterrupt, qui est un point d’entrée requis pour tout pilote miniport d’un HBA qui génère des interruptions. Définissez cette valeur sur NULL si le pilote miniport n’a pas besoin d’ISR. Le prototype de cette routine est PHW_INTERRUPT.
HwFindAdapter
Pointeur vers la routine du pilote miniport HwScsiFindAdapter, qui est un point d’entrée requis pour tous les pilotes miniports. Le prototype de cette routine est PHW_FIND_ADAPTER.
HwResetBus
Pointeur vers la routine HwScsiResetBus du pilote miniport, qui est un point d’entrée requis pour tous les pilotes miniports. Le prototype de cette routine est PHW_RESET_BUS.
HwDmaStarted
Pointeur vers la routine du pilote miniport HwScsiDmaStarted si son HBA utilise la DMA système, autrement dit, un contrôleur DMA système. Définissez cette valeur sur NULL si l’adaptateur HBA est un maître de bus ou utilise l’authentification personnelle. Le prototype de cette routine est PHW_DMA_STARTED.
HwAdapterState
Pointeur vers la routine HwScsiAdapterState du pilote miniport, qui est un point d’entrée requis pour les pilotes miniports des HBA avec DES BIOS liés à un pilote de port x86-platform-only dépendant du système d’exploitation qui doit basculer entre les modes de processeurs protégés et réels x86. Si le pilote miniport n’a pas besoin de routine HwScsiAdapterState, définissez ce membre sur NULL. Un pilote miniport pour un HBA doté d’un BIOS doit avoir une routine HwScsiAdapterState afin d’être compatible avec le pilote de port x86 uniquement et portable dans un environnement de système d’exploitation x86 uniquement. Le prototype de cette routine est PHW_ADAPTER_STATE.
DeviceExtensionSize
Spécifie la taille en octets requise par le pilote miniport pour son extension de périphérique par HBA. Un pilote miniport utilise son extension de périphérique comme stockage pour les informations HBA déterminées par le pilote. Le pilote de port spécifique au système d’exploitation initialise chaque extension de périphérique qu’il alloue avec zéros et transmet un pointeur à l’extension de périphérique spécifique à HBA dans chaque appel à un pilote miniport, sauf à sa routine DriverEntry. La taille donnée n’inclut aucun stockage par unité logique demandé par pilote miniport, décrit ensuite.
SpecificLuExtensionSize
Spécifie la taille en octets requise par le pilote miniport pour son stockage par unité logique, le cas échéant. Un pilote miniport peut utiliser ses extensions LU comme stockage pour les informations d’unité logique déterminée par le pilote sur les périphériques SCSI sur le bus. Le pilote de port spécifique au système d’exploitation initialise chaque extension lu qu’il alloue avec zéros. Laissez ce membre défini sur zéro si le pilote miniport ne conserve pas les informations par lu pour lesquelles il nécessite un stockage. Cette valeur est basée sur l’hypothèse que l’adaptateur HBA peut recevoir des adresses 32 bits, quelle que soit la prise en charge du contrôleur. Si un espace supplémentaire est nécessaire dans les extensions LUN ou SRB pour gérer les adresses 64 bits, les ajustements appropriés doivent être apportés à cette valeur avant de l’utiliser avec des routines telles que ScsiPortGetUncachedExtension.
SrbExtensionSize
Spécifie la taille en octets requise par le pilote miniport pour son stockage par requête, le cas échéant. Un pilote miniport peut utiliser des extensions SRB comme stockage pour les informations spécifiques au pilote, telles que les données nécessaires pour traiter une requête particulière. Le pilote de port spécifique au système d’exploitation n’initialise pas les extensions SRB, mais définit un pointeur vers ce stockage dans chaque SRB qu’il envoie au pilote miniport. Une extension SRB est accessible en toute sécurité par le matériel HBA. Laissez ce membre défini sur zéro si le pilote miniport ne conserve pas les informations par SRB pour lesquelles il nécessite un stockage. Cette valeur est basée sur l’hypothèse que l’adaptateur HBA peut recevoir des adresses 32 bits, quelle que soit la prise en charge du contrôleur. Si un espace supplémentaire est nécessaire dans les extensions LUN ou SRB pour gérer les adresses 64 bits, les ajustements appropriés doivent être apportés à cette valeur avant de l’utiliser avec des routines telles que ScsiPortGetUncachedExtension.
NumberOfAccessRanges
Spécifie le nombre de plages d’accès que l’adaptateur utilise. Il s’agit d’une plage d’adresses mémoire ou d’adresses de port d’E/S. Un HBA classique utilise deux plages, une pour ses ports d’E/S et une autre pour sa plage de mémoire d’appareil.
Reserved
Réservé à l’utilisation du système et non disponible pour une utilisation par les pilotes miniport.
MapBuffers
Indique, quand TRUE, que toutes les adresses de mémoire tampon de données doivent être mappées aux adresses virtuelles pour l’accès par le pilote miniport. Lorsque faux, les adresses de mémoire tampon de données n’ont pas besoin d’être mappées aux adresses virtuelles.
NeedPhysicalAddresses
Indique, quand TRUE, que le pilote miniport doit traduire son appareil, n’importe quelle unité logique et toutes les adresses d’extension par SRB, ainsi que les adresses de mémoire tampon SRB, en adresses physiques, comme requis par l’adaptateur HBA. Lorsque FAUX, aucune de ces adresses ne doit être traduite en adresses physiques.
TaggedQueuing
Indique, quand TRUE, ce pilote miniport peut prendre en charge la mise en file d’attente étiquetée SCSI. Lorsque faux, le pilote miniport ne peut pas prendre en charge la mise en file d’attente avec étiquette SCSI.
AutoRequestSense
Indique, lorsque TRUE, que l’adaptateur HBA peut effectuer une opération de sens des requêtes sans nécessiter de demande explicite. Lorsque FAUX, l’adaptateur HBA nécessite une requête explicite avant de pouvoir effectuer une opération de sens de la requête. Seuls les pilotes miniports qui pilotent des HBA avec microprogramme intégré pour effectuer des opérations de sens des requêtes doivent définir ce membre sur TRUE.
MultipleRequestPerLu
Indique, quand VRAI, que le pilote miniport peut mettre en file d’attente plusieurs requêtes par unité logique, en particulier dans l’adaptateur HBA. Lorsque FAUX, le pilote miniport ne peut pas mettre en file d’attente plusieurs requêtes par unité logique. Notez qu’un HBA doit prendre en charge le sens de la demande automatique pour son pilote miniport afin d’activer cette fonctionnalité. Si un pilote miniport définit ce membre sur TRUE, il doit utiliser chaque membre QueueTag membre pour les demandes de ce type, mais le SRB_FLAGS_QUEUE_ACTION_ENABLE n’est pas défini dans le SrbFlags membre de la structure SCSI_REQUEST_BLOCK.
ReceiveEvent
Indique, quand TRUE, que le pilote miniport pilote un HBA capable de prendre en charge le SRB d’événement de réception pour les événements asynchrones SCSI. Quand FALSE, l’adaptateur HBA ne peut pas prendre en charge le SRB d’événement de réception pour les événements asynchrones SCSI.
VendorIdLength
Spécifie la taille en octets de la chaîne VendorId, décrite ci-dessous.
VendorId
Pointeur vers une chaîne d’octet ASCII identifiant le fabricant de l’adaptateur HBA. Ce membre n’est pas pertinent pour les pilotes Plug-and-Play.
Si l'AdapterInterfaceType donné est PCIBus, l’ID du fournisseur est une valeur USHORT allouée par le PCI SIG, qui doit être convertie en chaîne d’octets par le pilote miniport. Par exemple, si la valeur d’ID du fournisseur PCI affectée est 1001, le pilote miniport fourni VendorId chaîne serait ('1', '0', '0', '1').
ReservedUshort
Réservé à l’utilisation du système et n’est pas disponible pour une utilisation par les pilotes miniport.
PortVersionFlags
DeviceIdLength
Spécifie la taille en octets de la chaîne DeviceId, décrite ci-dessous.
DeviceId
Pointeur vers une chaîne d’octet ASCII identifiant le ou les modèles HBA pris en charge par le pilote miniport. Ce membre n’est pas pertinent pour les pilotes Plug-and-Play.
Si l'AdapterInterfaceType donné est PCIBus, un ID d’appareil est une valeur USHORT attribuée par le fabricant de l’adaptateur HBA. Le pilote miniport doit convertir les valeurs d’ID de périphérique PCI pour les adaptateurs HBA qu’il peut prendre en charge en DeviceId chaînes d’octets, comme pour le membre VendorId. Par exemple, si un pilote miniport peut prendre en charge les adaptateurs HB avec les ID de périphérique PCI 8040 et 8050, il peut définir DeviceId avec un pointeur vers la chaîne d’octets ('8', '0').
HwAdapterControl
Pointeur vers la routine HwScsiAdapterControl du pilote miniport, qui est un point d’entrée requis pour tous les pilotes miniport PnP. Définissez cette valeur sur NULL si le pilote miniport ne prend pas en charge Plug-and-Play.
Remarques
Chaque pilote miniport doit initialiser la structure HW_INITIALIZATION_DATA avec des zéros avant de définir les valeurs des membres pertinents dans cette structure et appelle ScsiPortInitialize.
Le Dma64BitAddresses membre de HW_INITIALIZATION_DATA a été éliminé dans Windows 2000 (voir la discussion sous PORT_CONFIGURATION_DATA pour plus d’informations).
Les deux HW_INITIALIZATION_DATA et PORT_CONFIGURATION_INFORMATION ont une paire de membres appelés SpecificLuExtensionSize et SrbExtensionSize dont les valeurs sont gérées différemment de Celles antérieures à Windows 2000. Le pilote miniport doit calculer les valeurs initiales de SpecificLuExtensionSize et SrbExtensionSize dans HW_INITIALIZATION_DATA en fonction de l’hypothèse que l’adaptateur HBA est capable de gérer les adresses 32 bits, quelle que soit la prise en charge du contrôleur. (Consultez la discussion sous PORT_CONFIGURATION_DATA pour plus d’informations.)
Exigences
Exigence | Valeur |
---|---|
d’en-tête | srb.h (include Srb.h, Strmini.h) |