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.
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
type
The memory type. - in
key
The memory key identifier. - in
size
The memory buffer size. - out
memory
The 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_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
memory
The memory handle to be destroyed.
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
mem
the memory handle. - out
data
the output data pointer.
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
mem
the memory handle. - out
addr
the dma address mapped.
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
mem
the memory handle. - out
size
the memory size mapped.
Returns
0
on success, Otherwise, a negative error value.