Função ScsiPortGetUncachedExtension (srb.h)
A rotina ScsiPortGetUncachedExtension aloca memória que pode ser usada pela CPU e por um HBA mestre de barramento 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 miniporto 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 DeviceExtension->HwDeviceExtension membro 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, AutoRequestSensee SrbExtensionSize.
Os membros que não são pertinentes ao HBA, como DmaChannel para um adaptador mestre de barramento EISA, devem ser deixados como estão.
[in] NumberOfBytes
Indica o tamanho em bytes da extensão não 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 em cache e, se participarem de operações de E/S no arquivo de hibernação ou no arquivo de despejo de falha, eles deverão limitar a quantidade de extensão não armazenado que alocam a menos de 32 quilobytes.
Valor de retorno
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.
Observações
scsiPortGetUncachedExtension só pode ser chamado a partir da rotina de HwScsiFindAdapter do do driver de minitransporte e somente para um HBA mestre de ônibus. Chamadas de outras rotinas de driver de miniporto 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 de HwScsiFindAdapter pode chamar ScsiPortGetUncachedExtension apenas uma vez para cada HBA mestre de ônibus que o driver de miniporto dá suporte.
Para obter o endereço físico da extensão não 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 |
---|---|
da Plataforma de Destino | Área de trabalho |
cabeçalho | srb.h (inclua Miniport.h, Scsi.h) |
biblioteca | Scsiport.lib |