Multi Channel DMA Intel® FPGA IP for PCI Express User Guide

ID 683821
Date 11/01/2022
Document Table of Contents

8.3.2. libmcmem Library Information

libmcmem library manages the DMA memory used by the application. It uses hugepages to provide application with required DMA memory.


  • Function description: Allocate & Initialize hugepages
  • Prototype: int ifc_env_init(char *bdf, size_t payload)
  • Return values: Returns 0 if successful, negative otherwise


  • Function description: Free hugepages
  • Prototype: void ifc_env_exit(void)


  • Function description: Allocate buffer for I/O request
  • Prototype: struct ifc_mem_struct *ifc_dma_alloc(void)
  • Return values: pointer to ifc_mem_struct on success. NULL in case of fails


  • Function description: Free buffer
  • Prototype: void ifc_dma_free(struct ifc_mem_struct *r)


  • Function description: Get total number of DMA buffer chunks allocated
  • Prototype: int ifc_allocated_chunks(void)

libmcmem uses ifc_mem_struct as shown below to pass the DMA buffer to the application.


Table 136.  Strucutre Description
Structure DMA buffer structure
void *virt_addr Virtual address of the buffer
uint64_t phy_addr Physical address of the buffer
size_t len Length of the buffer
int ctx For library, not for application

You can configure the number of huge pages that the library should use using the following NUM_HUGE_PAGES macro in software/user/common/include/ifc_libmcmem.h

Did you find the information on this page useful?

Characters remaining:

Feedback Message