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