structure ACCESS_RANGE (srb.h)
Un ACCESS_RANGE décrit une plage de ports d’E/S ou de mémoire utilisée par un HBA.
Syntaxe
typedef struct _ACCESS_RANGE {
SCSI_PHYSICAL_ADDRESS RangeStart;
ULONG RangeLength;
BOOLEAN RangeInMemory;
} ACCESS_RANGE, *PACCESS_RANGE;
Membres
RangeStart
Contient une adresse de type SCSI_PHYSICAL_ADDRESS qui spécifie l’adresse de base relative du bus de la plage. Il s’agit d’une adresse qui peut être transmise à ScsiPortGetDeviceBase.
RangeLength
Spécifie la taille, en octets ou le nombre de ports de la plage. Un pilote miniport doit s’assurer que cette valeur correspond à la plage réellement décodée par l’adaptateur. Par exemple, si l’adaptateur HBA utilise sept registres, mais répond à huit, ce membre doit être défini sur 8.
RangeInMemory
Indique que la plage est en mémoire lorsque TRUE, plutôt que dans l’espace d’E/S. Lorsque FALSE, la plage est dans l’espace d’E/S.
Remarques
Chaque ACCESS_RANGE est un élément de tableau AccessRanges dans la structure PORT_CONFIGURATION_INFORMATION passée à la routine HwScsiFindAdapter d’un pilote miniport.
Si possible, le pilote de port spécifique au système d’exploitation configure chaque élément de plage d’accès avec une plage HBA relative au bus pour le pilote miniport avant d’appeler la routine HwScsiFindAdapter du pilote miniport. Sinon, le pilote de port zéros éléments de plage pour lesquels il ne peut pas fournir d’informations de configuration.
Si le pilote de port fournit une plage, la routine HwScsiFindAdapter du pilote miniport doit utiliser uniquement les adresses fournies et ne doit jamais jamais tenter de trouver d’autres HBA sur le même bus à l’aide d’adresses de son propre devis. La tentative d’accès à d’autres plages de mémoire ou de port relatives aux bus lorsque le pilote de port a fourni des informations de plage, en particulier dans les systèmes x86 uniquement dans lesquels certains appareils sont initialisés en mode réel x86, peuvent entraîner l’échec de l’initialisation d’autres appareils sur le bus ou même provoquer l’échec du processus de démarrage du système.
Chaque pilote miniport doit avoir un ensemble de plages par défaut relatives au bus pour essayer si le pilote de port spécifique au système d’exploitation ne peut pas fournir les informations. Un pilote miniport doit appeler ScsiPortValidateRange pour vérifier la sécurité de toute plage d’accès fournie par le pilote miniport avant il tente de mapper une telle plage avec ScsiPortGetDeviceBase et utiliser les adresses logiques retournées pour accéder à un adaptateur, en particulier si l’un de ses adaptateurs HBA a un BIOS.
Toute plage d’accès qu’un pilote miniport remplit pour le pilote de port spécifique au système d’exploitation dans le PORT_CONFIGURATION_INFORMATION doit avoir le membre RangeStart défini sur une adresse relative au bus, telle qu’une valeur retournée par ScsiPortGetBusData.
L’adresse logique de base correspondante retournée par ScsiPortGetDeviceBase doit être stockée, généralement dans l’extension de périphérique du pilote miniport, en tant qu’adresse RangeStart pour une plage mappée de ports d’E/S ou d’adresses mémoire utilisées pour appeler les routines ScsiPortReadXxx et ScsiPortWriteXxx.
Exigences
Exigence | Valeur |
---|---|
d’en-tête | srb.h (include Srb.h, Storport.h, Strmini.h) |
Voir aussi
PORT_CONFIGURATION_INFORMATION (SCSI)