structure HW_INITIALIZATION_DATA (srb.h)
La routine DriverEntry de chaque pilote miniport SCSI doit s’initialiser avec des zéros, puis remplir les informations de HW_INITIALIZATION_DATA (SCSI) appropriées 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 sizeof(). En effet, ce membre indique la version de cette structure utilisée par le pilote miniport. La routine DriverEntry d’un 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 : Internal, Isa, Eisa, MicroChannel, TurboChannel ou PCIBus. Toutefois, d’autres types d’autobus seront pris en charge à l’avenir. La limite supérieure des types de bus pris en charge est toujours MaximumInterfaceType.
S’il est défini sur PCIBus, le pilote miniport doit fournir des valeurs pour les membres VendorIdLength, VendorId, DeviceIdLength et DeviceId , décrits plus loin.
HwInitialize
Pointeur vers la routine HwScsiInitialize du pilote miniport, qui est un point d’entrée obligatoire pour tous les pilotes miniport. Le prototype de cette routine est PHW_INITIALIZE.
HwStartIo
Pointeur vers la routine HwScsiStartIo du pilote miniport, qui est un point d’entrée obligatoire pour tous les pilotes miniport. Le prototype de cette routine est PHW_STARTIO.
HwInterrupt
Pointeur vers la routine HwScsiInterrupt du pilote miniport, qui est un point d’entrée obligatoire pour tout pilote miniport d’un adaptateur 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 HwScsiFindAdapter du pilote miniport, qui est un point d’entrée obligatoire pour tous les pilotes miniport. 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 obligatoire pour tous les pilotes miniport. Le prototype de cette routine est PHW_RESET_BUS.
HwDmaStarted
Pointeur vers la routine HwScsiDmaStarted du pilote miniport si son adaptateur HBA utilise la DMA système, c’est-à-dire un contrôleur DMA système. Définissez cette valeur sur NULL si l’adaptateur HBA est un bus master ou utilise PIO. 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 obligatoire pour les pilotes miniports de HBA avec DES BIOS liés à un pilote de port x86 dépendant du système d’exploitation, qui doit basculer entre les modes processeur x86 protégé et réel. 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 par périphérique 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 d’appareil qu’il alloue avec des zéros et transmet un pointeur vers l’extension de périphérique spécifique au HBA dans chaque appel à un pilote miniport, à l’exception de sa routine DriverEntry . La taille donnée n’inclut pas de stockage miniport demandé par unité logique, décrit ci-dessous.
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ées 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 des 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 est en mesure de recevoir des adresses 32 bits, indépendamment de ce que le contrôleur peut réellement prendre en charge. Si un espace supplémentaire est nécessaire dans les extensions LUN ou SRB pour gérer les adresses 64 bits, des 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 les extensions SRB comme stockage pour les informations spécifiques aux demandes déterminées par le pilote, telles que les données nécessaires pour traiter une demande 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 est en mesure de recevoir des adresses 32 bits, indépendamment de ce que le contrôleur peut réellement prendre en charge. Si un espace supplémentaire est nécessaire dans les extensions LUN ou SRB pour gérer les adresses 64 bits, des 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. Chacune est une plage d’adresses mémoire ou d’adresses de port d’E/S. Un adaptateur HBA classique utilise deux plages, l’une pour ses ports d’E/S et l’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 miniports.
MapBuffers
Indique, quand TRUE, que toutes les adresses de mémoire tampon de données doivent être mappées à des adresses virtuelles pour l’accès par le pilote miniport. Lorsque la valeur est FALSE, les adresses de mémoire tampon de données n’ont pas besoin d’être mappées à des adresses virtuelles.
NeedPhysicalAddresses
Indique, quand TRUE, que le pilote miniport doit traduire son appareil, toutes les adresses d’extension par lu et par SRB, ainsi que les adresses de mémoire tampon SRB, en adresses physiques, comme requis par l’adaptateur HBA. Lorsque la valeur est FALSE, aucune de ces adresses ne doit être traduite en adresses physiques.
TaggedQueuing
Indique, quand TRUE, que le pilote miniport peut prendre en charge la file d’attente marquée SCSI. Lorsque la valeur est FALSE, le pilote miniport ne peut pas prendre en charge la mise en file d’attente marquée par SCSI.
AutoRequestSense
Indique, quand TRUE, que l’adaptateur HBA peut effectuer une opération de détection de requête sans nécessiter de requête explicite. Quand la valeur est FALSE, l’adaptateur HBA nécessite une requête explicite avant de pouvoir effectuer une opération de détection de requête. Seuls les pilotes miniports qui conduisent des HBA avec microprogramme intégré pour effectuer des opérations de sens de requête doivent définir ce membre sur TRUE.
MultipleRequestPerLu
Indique, quand TRUE, que le pilote miniport peut mettre en file d’attente plusieurs requêtes par unité logique, en particulier, au sein de l’adaptateur HBA. Lorsque la valeur est FALSE, le pilote miniport ne peut pas mettre en file d’attente plusieurs requêtes par unité logique. Notez qu’un adaptateur HBA doit prendre en charge le sens de requête 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 SRB pour les requêtes de ce type, mais le SRB_FLAGS_QUEUE_ACTION_ENABLE n’est pas défini dans le membre SrbFlags de la structure SCSI_REQUEST_BLOCK.
ReceiveEvent
Indique, quand TRUE, que le pilote miniport pilote un HBA qui peut prendre en charge le SRB d’événement de réception pour les événements asynchrones SCSI. Avec 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 ensuite.
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’élément AdapterInterfaceType donné est PCIBus, l’ID du fournisseur est une valeur USHORT allouée par le SIG PCI, qui doit être convertie en chaîne d’octets par le pilote miniport. Par exemple, si la valeur de l’ID fournisseur PCI attribuée est 1001, la chaîne VendorId fournie par le pilote miniport est ( '1', '0', '0', '1').
ReservedUshort
Réservé à l’utilisation du système et n’est pas disponible pour une utilisation par les pilotes miniports.
PortVersionFlags
DeviceIdLength
Spécifie la taille en octets de la chaîne DeviceId , décrite ensuite.
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 le type 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 toutes les valeurs d’ID de périphérique PCI pour les adaptateurs HBA qu’il peut prendre en charge en chaînes d’octets DeviceId , comme pour le membre VendorId . Par exemple, si un pilote miniport peut prendre en charge des adaptateurs HBA 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 obligatoire 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 d’appeler ScsiPortInitialize.
Le membre Dma64BitAddresses de HW_INITIALIZATION_DATA a été supprimé dans Windows 2000 (pour plus d’informations, voir la discussion sous PORT_CONFIGURATION_DATA).
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 d’avant Windows 2000. Le pilote miniport doit calculer les valeurs initiales de SpecificLuExtensionSize et de SrbExtensionSize dans HW_INITIALIZATION_DATA en partant de l’hypothèse que l’adaptateur HBA est capable de gérer les adresses 32 bits, quelle que soit la prise en charge par le contrôleur. (Pour plus d’informations, voir la discussion sous PORT_CONFIGURATION_DATA.)
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | srb.h (inclure Srb.h, Strmini.h) |