structure ACCESS_RANGE (srb.h)
Une ACCESS_RANGE décrit une plage de ports de mémoire ou d’E/S utilisée par un adaptateur 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 passée dans 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 quand true, plutôt que dans l’espace d’E/S. Lorsque la valeur est FALSE, la plage se trouve dans l’espace d’E/S.
Remarques
Chaque ACCESS_RANGE est un élément de tableau AccessRanges au sein de la structure PORT_CONFIGURATION_INFORMATION qui est passé à 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 met à zéro les é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 tenter de trouver d’autres adaptateurs HBA sur le même bus à l’aide d’adresses de sa propre conception. La tentative d’accès à d’autres plages de port ou de mémoire relatives au 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, peut 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 à 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 case activée la sécurité de toute plage d’accès fournie par le pilote miniport avant de tenter de mapper une telle plage avec ScsiPortGetDeviceBase et d’utiliser les adresses logiques retournées pour accéder à un adaptateur, en particulier si l’un de ses 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 de 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 .
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | srb.h (include Srb.h, Storport.h, Strmini.h) |
Voir aussi
PORT_CONFIGURATION_INFORMATION (SCSI)