Função StorPortAllocateHostMemoryBuffer (storport.h)

StorPortAllocateHostMemoryBuffer aloca um ou mais intervalos de memória fisicamente contígua a serem usados como um HMB (Buffer de Memória de Host).

Sintaxe

ULONG StorPortAllocateHostMemoryBuffer(
  [in]           PVOID            HwDeviceExtension,
  [in]           SIZE_T           MinimumBytes,
  [in]           SIZE_T           PreferredBytes,
  [in]           ULONGLONG        UtilizationBytes,
  [in]           ULONG            AlignmentBytes,
  [in]           PHYSICAL_ADDRESS LowestAcceptableAddress,
  [in]           PHYSICAL_ADDRESS HighestAcceptableAddress,
  [in, optional] PHYSICAL_ADDRESS BoundaryAddressMultiple,
  [in, out]      PACCESS_RANGE    PhysicalAddressRanges,
  [in, out]      PULONG           PhysicalAddressRangeCount
);

Parâmetros

[in] HwDeviceExtension

Um ponteiro para a extensão do dispositivo de hardware para o HBA (adaptador de barramento de host).

[in] MinimumBytes

A quantidade mínima de memória que será útil para o dispositivo, em bytes. Um valor 0 indica que qualquer tamanho de memória até o tamanho preferencial é aceitável.

[in] PreferredBytes

A quantidade de memória que o dispositivo prefere, em bytes. Deve ser um múltiplo do tamanho da página.

[in] UtilizationBytes

O número total de blocos alocados no dispositivo, em bytes.

[in] AlignmentBytes

O requisito de alinhamento do Buffer de Memória do Host do dispositivo.

[in] LowestAcceptableAddress

O endereço físico mais baixo válido para a alocação. Por exemplo, se o dispositivo só puder fazer referência à memória física no intervalo de 8 MB a 16 MB, esse valor será definido como 0x800000 (8 MB).

[in] HighestAcceptableAddress

O endereço físico mais alto válido para a alocação. Por exemplo, se o dispositivo só puder fazer referência à memória física abaixo de 16 MB, esse valor será definido como 0xFFFFFF (16 MB a 1).

[in, optional] BoundaryAddressMultiple

O endereço físico múltiplo que essa alocação não deve cruzar. Atualmente, esse parâmetro não é usado e deve ser definido como 0.

[in, out] PhysicalAddressRanges

Uma matriz de intervalos de endereços físicos que compõem o Buffer de Memória do Host. O chamador deve fornecer uma matriz pré-alocada. StorPortAllocateHostMemoryBuffer preencherá a matriz com um ou mais intervalos de endereços físicos.

[in, out] PhysicalAddressRangeCount

O número de entradas em PhysicalAddressRanges. Essa função atualizará esse parâmetro para indicar quantos intervalos de endereços físicos ele preencheu.

Retornar valor

StorPortAllocateHostMemoryBuffer retorna um dos seguintes códigos de status:

Código de retorno Descrição
STOR_STATUS_SUCCESS A matriz PhysicalAddressRanges contém um ou mais intervalos de endereços físicos válidos que representam o buffer de memória do host.
STOR_STATUS_INVALID_PARAMETER Isso pode indicar um valor mínimo maior que um valor máximo, um tamanho não alinhado à página ou que PhysicalAddressRanges está vazio.
STOR_STATUS_INSUFFICIENT_RESOURCES Não foi possível alocar o buffer de memória do host.

Comentários

HMB é a memória que o dispositivo pode usar direta e exclusivamente. O dispositivo pode usar essa memória como achar adequado, mas deve garantir que não haja perda de dados ou dados corrompidos no caso de uma remoção surpresa ou perda de energia inesperada.

Dependendo da política de alocação, essa função pode alocar tanto quanto o tamanho preferencial do dispositivo, tão pouco quanto o tamanho mínimo do dispositivo ou nenhuma memória.

Essa função tentará alocar o menor número possível de intervalos de endereços fisicamente contíguos, mas pode ter que usar vários intervalos de endereços físicos para atender ao tamanho de HMB desejado.

Posteriormente, o chamador deve chamar StorPortFreeHostMemoryBuffer quando for feito com o buffer de memória do host.

Requisitos

Requisito Valor
Plataforma de Destino Universal
Cabeçalho storport.h (inclua Storport.h)

Confira também

StorPortFreeHostMemoryBuffer