Memory
Generic memory management APIs for libmango.
Example
Here is an example of creating a 2MB hugepage backed host memory.
example_memory.cc
#include <libmango.h>
#define SZ_2MB (2 * 1024 * 1024)
int main() {
// Create a memory handle
mango_memory_h memory;
mango_memory_create(MANGO_MEMORY_HUGE_MEM, SZ_2MB, SZ_2MB, &memory);
// Get the data pointer of memory handle
void *data;
mango_memory_get_data(memory, &data);
// Get the DMA address of memory handle
uint64_t addr;
mango_memory_get_addr(memory, &addr);
// Get the size of memory handle
size_t size;
mango_memory_get_size(memory, &size);
...
// Cleanup
mango_memory_destroy(memory);
return 0;
}
Datatypes
mango_memory_h
typedef void * mango_memory_h;
A handle of mango memory.
mango_memory_type_e
typedef enum _mango_memory_type mango_memory_type_e;
Define Memory types compatible with libmango APIs.
Values
MANGO_MEMORY_SHMEM_OWNER | Host shared memory owner |
MANGO_MEMORY_SHMEM_USER | Host shared memory user |
MANGO_MEMORY_PCIE_BAR | Host PCIe BAR memory |
MANGO_MEMORY_HUGE_MEM | Host hugepage memory |
MANGO_MEMORY_HOST_MEM | Host DMA memory |
MANGO_MEMORY_DEVICE_MAP | Memory map for device file |
MANGO_MEMORY_DPU_MEM | DPU internal DMA memory |
MANGO_MEMORY_DPU_MEM_EXT | DPU external DMA memory |
MANGO_MEMORY_DPU_HUGE_MEM | DPU external hugepage memory |
Functions
mango_memory_create
mango_status_e mango_memory_create(mango_memory_type_e type,
uint64_t key,
size_t size,
mango_memory_h *memory)
Create an memory handle.
Parameters
- in
typeThe memory type. - in
keyThe memory key identifier. - in
sizeThe memory buffer size. - out
memoryThe output memory handle.
Returns
0 on success, Otherwise, a negative error value.
note
The key has different semantics depending a given memory type.
- MANGO_MEMORY_SHMEM_OWNER: shmem key for sharing.
- MANGO_MEMORY_SHMEM_USER: shmem key for sharing.
- MANGO_MEMORY_PCIE_BAR: PCIe BAR Index.
- MANGO_MEMORY_HUGE_MEM: Hugepage size.
- MANGO_MEMORY_HOST_MEM: Host DMA address.
- MANGO_MEMORY_DEVICE_MAP: device memory type (see mango_mmap_type in <linux/mango.h>).
- MANGO_MEMORY_DPU_MEM: DPU DMA address.
- MANGO_MEMORY_DPU_MEM_EXT: DPU DMA address (external RAM).
- MANGO_MEMORY_DPU_HUGE_MEM: Hugepage size.
mango_memory_destroy
mango_status_e mango_memory_destroy(mango_memory_h memory)
Destroy the memory handle.
Parameters
- in
memoryThe memory handle to be destroyed.
Returns
0 on success, Otherwise, a negative error value.
mango_memory_get_addr
mango_status_e mango_memory_get_addr(mango_memory_h mem, uint64_t *addr)
Get the dma address if mapped.
Parameters
- in
memthe memory handle. - out
addrthe dma address mapped.
Returns
0 on success, Otherwise, a negative error value.
mango_memory_get_data
mango_status_e mango_memory_get_data(mango_memory_h mem, void **data)
Get the data pointer in memory buffer.
Parameters
- in
memthe memory handle. - out
datathe output data pointer.
Returns
0 on success, Otherwise, a negative error value.
mango_memory_get_size
mango_status_e mango_memory_get_size(mango_memory_h mem, size_t *size)
Get the memory size mapped.
Parameters
- in
memthe memory handle. - out
sizethe memory size mapped.
Returns
0 on success, Otherwise, a negative error value.