Compartilhar via


Função ScsiPortGetUncachedExtension (srb.h)

A rotina ScsiPortGetUncachedExtension aloca memória que pode ser usada pela CPU e por um barramento master HBA para DMA ou para dados compartilhados.

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

SCSIPORT_API PVOID ScsiPortGetUncachedExtension(
  [in] PVOID                           HwDeviceExtension,
  [in] PPORT_CONFIGURATION_INFORMATION ConfigInfo,
  [in] ULONG                           NumberOfBytes
);

Parâmetros

[in] HwDeviceExtension

Ponteiro para a extensão do dispositivo de hardware. Essa é uma área de armazenamento por HBA que o driver de porta aloca e inicializa em nome do driver de miniporto. Os drivers de miniporta geralmente armazenam informações específicas do HBA nessa extensão, como o estado do HBA e os intervalos de acesso mapeados do HBA. Essa área está disponível para o driver de miniporto no membro DeviceExtension-HwDeviceExtension> do objeto de dispositivo do HBA imediatamente após o driver de miniporto chamar ScsiPortInitialize. O driver de porta libera essa memória quando remove o dispositivo.

[in] ConfigInfo

Especifica informações sobre os recursos de DMA do HBA. Os seguintes membros devem ser preenchidos: DmaChannel ou DmaPort, DmaWidth, DmaSpeed, MaximumTransferLength, ScatterGather, Master definido como TRUE, NumberOfPhysicalBreaks, AdapterInterfaceType, Dma32BitAddresses, SystemIoBusNumber, AutoRequestSense e SrbExtensionSize.

Os membros que não são pertinentes ao HBA, como o DmaChannel para um adaptador de master de barramento EISA, devem ser deixados como estão.

[in] NumberOfBytes

Indica o tamanho em bytes da extensão não armazenado em cache a ser alocada. Os drivers no Windows XP e em sistemas operacionais anteriores não devem alocar mais de 100 quilobytes de extensão não armazenados em cache e, se participarem de operações de E/S no arquivo de hibernação ou no arquivo de despejo de memória, eles deverão limitar a quantidade de extensão não armazenado em cache que alocam a menos de 32 quilobytes.

Retornar valor

ScsiPortGetUncachedExtension retorna um ponteiro de endereço virtual para a extensão não armazenado em cache. Se não puder alocar a memória solicitada, ela retornará NULL.

Comentários

ScsiPortGetUncachedExtension só pode ser chamado da rotina HwScsiFindAdapter do driver de miniport e apenas para um HBA master ônibus. Chamadas de outras rotinas de driver de miniporta resultarão em falha do sistema ou operação incorreta para o chamador.

Como os computadores high-end têm caches e memórias grandes, qualquer memória a ser compartilhada entre um HBA e a CPU deve ser especialmente alocada. Caixas de correio ou filas de solicitação de E/S na memória do sistema são exemplos desse tipo de memória compartilhada.

Um driver de miniporto deve definir SrbExtensionSize. Antes de chamar ScsiPortGetUncachedExtension para alterar o tamanho de seu armazenamento por solicitação com base em NumberOfPhysicalBreaks.

A rotina HwScsiFindAdapter pode chamar ScsiPortGetUncachedExtension apenas uma vez para cada barramento master HBA compatível com o driver de miniporto.

Para obter o endereço físico da extensão não armazenado em cache que o HBA pode usar, chame ScsiPortGetPhysicalAddress.

O driver ScsiPort liberará a memória alocada por ScsiPortGetUncachedExtension quando o dispositivo adaptador for interrompido.

Requisitos

Requisito Valor
Plataforma de Destino Área de Trabalho
Cabeçalho srb.h (inclua Miniport.h, Scsi.h)
Biblioteca Scsiport.lib

Confira também

HwScsiFindAdapter

PORT_CONFIGURATION_INFORMATION (SCSI)

ScsiPortGetPhysicalAddress