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