Compartir a través de


Función StorPortAllocateHostMemoryBuffer (storport.h)

StorPortAllocateHostMemoryBuffer asigna uno o varios intervalos de memoria físicamente contiguos que se usarán como búfer de memoria de host (HMB).

Sintaxis

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

Puntero a la extensión de dispositivo de hardware para el adaptador de bus host (HBA).

[in] MinimumBytes

Cantidad mínima de memoria que será útil para el dispositivo, en bytes. Un valor de 0 indica que cualquier tamaño de memoria hasta el tamaño preferido es aceptable.

[in] PreferredBytes

Cantidad de memoria que prefiere el dispositivo, en bytes. Debe ser un múltiplo del tamaño de página.

[in] UtilizationBytes

Número total de bloques asignados en el dispositivo, en bytes.

[in] AlignmentBytes

Requisito de alineación del búfer de memoria del host del dispositivo.

[in] LowestAcceptableAddress

La dirección física más baja que es válida para la asignación. Por ejemplo, si el dispositivo solo puede hacer referencia a la memoria física en el intervalo de 8 MB a 16 MB, este valor se establecería en 0x800000 (8 MB).

[in] HighestAcceptableAddress

Dirección física más alta que es válida para la asignación. Por ejemplo, si el dispositivo solo puede hacer referencia a la memoria física por debajo de 16 MB, este valor se establecería en 0xFFFFFF (16 MB - 1).

[in, optional] BoundaryAddressMultiple

Dirección física múltiple que esta asignación no debe cruzar. Este parámetro no se usa actualmente y debe establecerse en 0.

[in, out] PhysicalAddressRanges

Matriz de intervalos de direcciones físicos que componen el búfer de memoria del host. El autor de la llamada debe proporcionar una matriz asignada previamente. StorPortAllocateHostMemoryBuffer rellenará la matriz con uno o varios intervalos de direcciones físicos.

[in, out] PhysicalAddressRangeCount

Número de entradas en PhysicalAddressRanges. Esta función actualizará este parámetro para indicar cuántos intervalos de direcciones físicos ha rellenado.

Valor devuelto

StorPortAllocateHostMemoryBuffer devuelve uno de los siguientes códigos de estado:

Código devuelto Descripción
STOR_STATUS_SUCCESS La matriz PhysicalAddressRanges contiene uno o varios intervalos de direcciones físicos válidos que representan el búfer de memoria del host.
STOR_STATUS_INVALID_PARAMETER Esto podría indicar un valor mínimo mayor que un valor máximo, un tamaño no alineado con páginas o que PhysicalAddressRanges está vacío.
STOR_STATUS_INSUFFICIENT_RESOURCES No se pudo asignar el búfer de memoria del host.

Comentarios

HMB es la memoria que el dispositivo puede usar directamente y exclusivamente. Sin embargo, el dispositivo puede usar esta memoria, pero debe asegurarse de que no haya pérdida de datos o daños en los datos en caso de una eliminación sorpresa o pérdida inesperada de energía.

En función de la directiva de asignación, esta función puede asignar tanto como el tamaño preferido del dispositivo, tan poco como el tamaño mínimo del dispositivo o ninguna memoria.

Esta función intentará asignar el menor número posible de intervalos de direcciones contiguos físicamente, pero puede que tenga que usar varios intervalos de direcciones físicos para satisfacer el tamaño de HMB deseado.

Posteriormente, el autor de la llamada debe llamar a StorPortFreeHostMemoryBuffer cuando se realiza con el búfer de memoria del host.

Requisitos

Requisito Value
Plataforma de destino Universal
Encabezado storport.h (incluya Storport.h)

Consulte también

StorPortFreeHostMemoryBuffer