Partager via


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.

Note 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 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

HwScsiFindAdapter

PORT_CONFIGURATION_INFORMATION (SCSI)

ScsiPortConvertUlongToPhysicalAddress

ScsiPortGetBusData

ScsiPortGetDeviceBase

ScsiPortValidateRange