LCOV - code coverage report
Current view: top level - src - cmem_buffer.hpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 2 2 100.0 %
Date: 2025-09-09 12:09:29 Functions: 0 0 -

          Line data    Source code
       1             : #ifndef FELIX_DMA_H_
       2             : #define FELIX_DMA_H_
       3             : 
       4             : #include <string>
       5             : 
       6             : /**
       7             :  * Base class for a FELIX DMA buffer.
       8             :  * The buffer is defined by a physical address (paddr - used by the FELIX card),
       9             :  * a size (size) and end-address (pend).
      10             :  * The physical address is mapped to a virtual address (vaddr) used by software
      11             :  * in user space.
      12             :  * Software and firmware maintain each a read/write address depending on the
      13             :  * data transfer direction. The address managed by software is pc_ptr.
      14             :  * The firmware pointer is read from the card register or is emulated in software
      15             :  * by emu_fw_ptr.
      16             :  * */
      17             : class DmaBuffer {
      18             :     public:
      19             :         uint64_t paddr;
      20             :         uint64_t vaddr;
      21             :         size_t size;
      22             :         uint64_t pend;
      23             : 
      24             :         uint64_t pc_ptr;
      25             :         uint64_t emu_fw_ptr;
      26             : 
      27             :         /**
      28             :          * @brief Constructor for a DMA buffer.
      29             :          * @details All address are initialised to zero.
      30             :          * @param size buffer size.
      31             :          */ 
      32          27 :         explicit DmaBuffer(size_t c) : paddr(0), vaddr(0), size(c), pend(0), pc_ptr(0), emu_fw_ptr(0) {};
      33          27 :         virtual ~DmaBuffer() {};
      34             : 
      35             : };
      36             : 
      37             : /**
      38             :  * DMA buffer allocated by the CMEM driver.
      39             :  * */
      40             : class CmemBuffer : public DmaBuffer {
      41             :     public:
      42             :         int handle;
      43             :         bool free_previous_cmem;
      44             : 
      45             :         /**
      46             :          * @brief Allocate a CMEM buffer
      47             :          * @param size requested buffer size.
      48             :          * @param cmem_name buffer name passed to the CMEM driver.
      49             :          * @param free_previous_cmem let CMEM free an existing buffer with same name if not locked.
      50             :          */ 
      51             :         explicit CmemBuffer(size_t size, const std::string& cmem_name, bool free_previous_cmem = false);
      52             :         ~CmemBuffer();
      53             : 
      54             :         CmemBuffer(const CmemBuffer&) = delete;
      55             :         CmemBuffer& operator=(CmemBuffer&&) = delete;
      56             : 
      57             :         /**
      58             :          * @brief Check if a buffer with the same name is already allocated.
      59             :          * @param cmem_name buffer name passed to the CMEM driver.
      60             :          */ 
      61             :         static bool cmem_buffer_exists(const std::string& cmem_name);
      62             : };
      63             : 
      64             : /**
      65             :  * Buffer allocated in memory to emulate a CMEM DMA buffer.
      66             :  * */
      67             : class VmemBuffer : public DmaBuffer {
      68             :     public:
      69             :         /**
      70             :          * @brief Allocate a buffer in memory
      71             :          * @param size requested buffer size.
      72             :          */ 
      73             :         explicit VmemBuffer(size_t size);
      74             :         ~VmemBuffer();
      75             : 
      76             :         VmemBuffer(const VmemBuffer&) = delete;
      77             :         VmemBuffer& operator=(VmemBuffer&&) = delete;
      78             : 
      79             :     private:
      80             :         void* ptr;
      81             : };
      82             : 
      83             : #endif /* FELIX_DMA_H_ */

Generated by: LCOV version 1.0