Compartir a través de


estructura ACCESS_RANGE (strmini.h)

Un ACCESS_RANGE describe un intervalo de puertos de E/S o memoria usado por un HBA.

Los modelos de controlador de puerto SCSI y de miniporte SCSI pueden modificarse o no estar disponibles en el futuro. En su lugar, se recomienda usar el del controlador storport de y modelos de controlador de storport.

Sintaxis

typedef struct _ACCESS_RANGE {
  SCSI_PHYSICAL_ADDRESS RangeStart;
  ULONG                 RangeLength;
  BOOLEAN               RangeInMemory;
} ACCESS_RANGE, *PACCESS_RANGE;

Miembros

RangeStart

Contiene una dirección de tipo SCSI_PHYSICAL_ADDRESS que especifica la dirección base relativa al bus del intervalo. Se trata de una dirección que se puede pasar a ScsiPortGetDeviceBase.

RangeLength

Especifica el tamaño, en bytes o el número de puertos del intervalo. Un controlador de miniport debe asegurarse de que este valor coincide con el intervalo descodificado realmente por el adaptador. Por ejemplo, si el HBA usa siete registros, pero responde a ocho, este miembro debe establecerse en 8.

RangeInMemory

Indica que el intervalo está en memoria cuando TRUE, en lugar de en el espacio de E/S. Cuando FALSE, el intervalo está en espacio de E/S.

Reserved

Observaciones

Cada ACCESS_RANGE es un elemento de matriz de AccessRanges dentro de la estructura PORT_CONFIGURATION_INFORMATION que se pasa a la rutina HwScsiFindAdapter del controlador de miniporte.

Si es posible, el controlador de puerto específico del sistema operativo configura cada elemento de intervalo de acceso con un intervalo HBA relativo al bus para el controlador de miniport antes de llamar a la rutina HwScsiFindAdapter del controlador de miniporte. De lo contrario, el controlador de puerto ceros elementos de intervalo para los que no puede proporcionar información de configuración.

Si el controlador de puerto proporciona un rango, la rutina HwScsiFindAdapter del controlador de miniporte debe usar solo las direcciones proporcionadas y no debe nunca intentar encontrar otras HBA en el mismo bus mediante direcciones de su propio diseño. Si intenta acceder a otros intervalos de memoria o puerto relativos al bus cuando el controlador de puerto ha proporcionado información de intervalo, especialmente en sistemas x86 en los que algunos dispositivos se inicializan en modo real x86, pueden hacer que otros dispositivos del bus produzcan errores de inicialización o incluso provocar que el sistema produzca un error en el proceso de arranque.

Cada controlador de miniport debe tener un conjunto de intervalos predeterminados relativos al bus para probar si el controlador de puerto específico del sistema operativo no puede proporcionar la información. Un controlador de miniport debe llamar a ScsiPortValidateRange para comprobar la seguridad de cualquier intervalo de acceso proporcionado por el controlador de miniporte antes de intenta asignar este intervalo con ScsiPortGetDeviceBase y usar las direcciones lógicas devueltas para acceder a un adaptador, especialmente si una de sus HBA tiene un BIOS.

Cualquier intervalo de acceso que un controlador de miniporte rellene para el controlador de puerto específico del sistema operativo en la PORT_CONFIGURATION_INFORMATION debe tener el miembro RangeStart establecido en una dirección relativa al bus, como un valor devuelto por ScsiPortGetBusData.

La dirección lógica base correspondiente devuelta por ScsiPortGetDeviceBase debe almacenarse, normalmente en la extensión de dispositivo del controlador de miniporte, como dirección rangeStart para un intervalo asignado de puertos de E/S o direcciones de memoria que se usan para llamar a las rutinas de ScsiPortReadXxx y ScsiPortWriteXxx.

Requisitos

Requisito Valor
encabezado de strmini.h (include Srb.h, Storport.h, Strmini.h)

Consulte también

de PORT_CONFIGURATION_INFORMATION (SCSI)

ScsiPortGetBusData

ScsiPortGetDeviceBase

ScsiPortValidateRange

ScsiPortConvertUlongToPhysicalAddress

HwScsiFindAdapter