Partager via


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.

Remarque Le pilote de port SCSI et les modèles de pilotes miniport SCSI peuvent être modifiés ou indisponibles à l’avenir. Au lieu de cela, nous vous recommandons d’utiliser le du pilote Storport et modèles de pilotes Storport miniport.
 

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

HwScsiFindAdapter

PORT_CONFIGURATION_INFORMATION (SCSI)

ScsiPortConvertUlongToPhysicalAddress

ScsiPortGetBusData

ScsiPortGetDeviceBase

ScsiPortValidateRange