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 controlador de minipuerto SCSI pueden modificarse o no estar disponibles en el futuro. En su lugar, se recomienda usar los modelos del controlador Storport y del controlador storport miniport .
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 minipuerto debe asegurarse de que este valor coincida con el rango realmente descodificado 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 es TRUE, en lugar de en el espacio de E/S. Cuando es FALSE, el intervalo está en el espacio de E/S.
Reserved
Comentarios
Cada ACCESS_RANGE es un elemento de matriz 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 minipuerto antes de llamar a la rutina HwScsiFindAdapter del controlador de miniporte. De lo contrario, el controlador de puerto no tiene ceros elementos de intervalo para los que no puede proporcionar información de configuración.
Si el controlador de puerto proporciona un intervalo, la rutina HwScsiFindAdapter del controlador de miniporte debe usar solo las direcciones proporcionadas y nunca debe intentar encontrar otros 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 solo x86 en los que algunos dispositivos se inicializan en modo real x86, pueden hacer que otros dispositivos del bus produzcan un error en la inicialización o incluso provocar que el sistema produzca un error en el proceso de arranque.
Cada controlador de minipuerto 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 minipuerto debe llamar a ScsiPortValidateRange para comprobar la seguridad de cualquier intervalo de acceso proporcionado por el controlador de miniporte antes de intentar asignar dicho rango con ScsiPortGetDeviceBase y usar las direcciones lógicas devueltas para acceder a un adaptador, especialmente si uno 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 el 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 del 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 ScsiPortReadXxx y ScsiPortWriteXxx .
Requisitos
Requisito | Valor |
---|---|
Header | strmini.h (include Srb.h, Storport.h, Strmini.h) |
Consulte también
PORT_CONFIGURATION_INFORMATION (SCSI)