estrutura ACCESS_RANGE (srb.h)

Um ACCESS_RANGE descreve um intervalo de portas de E/S ou memória usado por um HBA.

Nota O driver de porta SCSI e os modelos de driver de miniporta SCSI podem ser alterados ou indisponíveis no futuro. Em vez disso, recomendamos usar os modelos de driver storport e driver de miniporto Storport .
 

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 ao 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 miniporta 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.

Comentários

Cada ACCESS_RANGE é um elemento de matriz AccessRanges dentro da estrutura PORT_CONFIGURATION_INFORMATION que é passada para a rotina HwScsiFindAdapter de um driver de miniport.

Se possível, o driver de porta específico do sistema operacional configura cada elemento de intervalo de acesso com um intervalo HBA relativo ao barramento para o driver de miniport 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 miniport deve usar apenas os endereços fornecidos e nunca deve tentar encontrar outros HBAs no mesmo barramento usando endereços de sua própria criação. Tentar acessar outros intervalos de porta ou memória relativos ao barramento quando o driver de porta tiver fornecido informações de intervalo, especialmente 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 miniporta deve ter um conjunto de intervalos padrão relativos ao barramento 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 marcar a segurança de qualquer intervalo de acesso fornecido pelo driver de miniport antes de tentar 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 membro RangeStart 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 de dispositivo do driver de miniport, como o endereço RangeStart 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 (inclua Srb.h, Storport.h, Strmini.h)

Confira também

HwScsiFindAdapter

PORT_CONFIGURATION_INFORMATION (SCSI)

ScsiPortConvertUlongToPhysicalAddress

ScsiPortGetBusData

ScsiPortGetDeviceBase

ScsiPortValidateRange