estrutura ACCESS_RANGE (srb.h)
Um ACCESS_RANGE descreve um intervalo de portas de E/S ou memória usado por um HBA.
Sintaxe
typedef struct _ACCESS_RANGE {
SCSI_PHYSICAL_ADDRESS RangeStart;
ULONG RangeLength;
BOOLEAN RangeInMemory;
} ACCESS_RANGE, *PACCESS_RANGE;
Membros
RangeStart
Contém um endereço do tipo SCSI_PHYSICAL_ADDRESS que especifica o endereço base relativo do barramento do intervalo. Esse é um endereço que pode ser passado para ScsiPortGetDeviceBase.
RangeLength
Especifica o tamanho, em bytes ou o número de portas no intervalo. Um driver de miniporto deve garantir que esse valor corresponda ao intervalo realmente decodificado pelo adaptador. Por exemplo, se o HBA usar sete registros, mas responder a oito, esse membro deverá ser definido como 8.
RangeInMemory
Indica que o intervalo está na memória quando TRUE, em vez de no espaço de E/S. Quando FALSE, o intervalo está no espaço de E/S.
Observações
Cada ACCESS_RANGE é um elemento AccessRanges matriz dentro da estrutura PORT_CONFIGURATION_INFORMATION que é passada para a rotina HwScsiFindAdapter de um driver de miniporto.
Se possível, o driver de porta específico do sistema operacional configura cada elemento de intervalo de acesso com um intervalo de HBA relativo ao barramento para o driver de miniporto antes de chamar a rotina HwScsiFindAdapter do driver de miniport. Caso contrário, o driver de porta zeros elementos de intervalo para os quais ele não pode fornecer informações de configuração.
Se o driver de porta fornecer um intervalo, a rotina HwScsiFindAdapter do driver de miniporto deverá usar apenas os endereços fornecidos e nunca nunca tentar encontrar outros HBAs no mesmo ônibus usando endereços de sua própria criação. A tentativa de acessar outros intervalos de memória ou porta relativa ao barramento quando o driver de porta tiver fornecido informações de intervalo, particularmente em sistemas somente x86 nos quais alguns dispositivos são inicializados no modo real x86, pode fazer com que outros dispositivos no barramento falhem na inicialização ou até mesmo fazer com que o sistema falhe no processo de inicialização.
Cada driver de miniporto deve ter um conjunto de intervalos padrão relativos ao ônibus para tentar se o driver de porta específico do sistema operacional não puder fornecer as informações. Um driver de miniporto deve chamar ScsiPortValidateRange para verificar a segurança de qualquer intervalo de acesso fornecido pelo motorista de miniporto antes de ele tenta mapear esse intervalo com ScsiPortGetDeviceBase e usar os endereços lógicos retornados para acessar um adaptador, especialmente se um de seus HBAs tiver um BIOS.
Qualquer intervalo de acesso que um driver de miniporto preenche para o driver de porta específico do sistema operacional no PORT_CONFIGURATION_INFORMATION deve ter o RangeStart membro definido como um endereço relativo ao barramento, como um valor retornado por ScsiPortGetBusData.
O endereço lógico base correspondente retornado por ScsiPortGetDeviceBase deve ser armazenado, geralmente na extensão do dispositivo do driver de miniporto, como o rangeStart endereço para um intervalo mapeado de portas de E/S ou endereços de memória usados para chamar as rotinas ScsiPortReadXxx e ScsiPortWritexxx.
Requisitos
Requisito | Valor |
---|---|
cabeçalho | srb.h (incluem Srb.h, Storport.h, Strmini.h) |
Consulte também
PORT_CONFIGURATION_INFORMATION (SCSI)