structure ACCESS_RANGE (strmini.h)
Une ACCESS_RANGE décrit une plage de ports mémoire ou E/S utilisée par un adaptateur HBA.
Les modèles de pilote de port SCSI et de pilote miniport SCSI peuvent être modifiés ou indisponibles à l’avenir. Au lieu de cela, nous vous recommandons d’utiliser les modèles de pilote Storport et de pilote Miniport Storport .
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 dans 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 E/S.
Reserved
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 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 ports relatifs au bus ou à d’autres plages de mémoire 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 d’essayer de mapper une telle plage avec ScsiPortGetDeviceBase et d’utiliser les adresses logiques retournées pour accéder à une carte, 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 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 | strmini.h (include Srb.h, Storport.h, Strmini.h) |
Voir aussi
PORT_CONFIGURATION_INFORMATION (SCSI)