LCOV - code coverage report
Current view: top level - src - tohost_buffer_flx.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 56 0.0 %
Date: 2025-09-09 12:09:29 Functions: 0 15 0.0 %

          Line data    Source code
       1             : #include "tohost_buffer.hpp"
       2             : 
       3           0 : FlxToHostBuffer::FlxToHostBuffer(int dmaid, std::shared_ptr<Device> d)
       4           0 :     : ToHostBuffer(dmaid, d){}
       5             : 
       6             : 
       7           0 : FlxToHostBuffer::~FlxToHostBuffer()
       8             : {
       9           0 :     m_device->dma_stop(m_dmaid);
      10           0 : }
      11             : 
      12           0 : void FlxToHostBuffer::allocate_buffer(size_t size,
      13             :                             const std::string& name,
      14             :                             bool vmem, bool free_previous_cmem)
      15             : {
      16           0 :     m_size = size;
      17           0 :     m_buffer = std::make_unique<CmemBuffer>(size, name, free_previous_cmem);
      18           0 :     m_block_size = m_device->get_block_size();
      19           0 : }
      20             : 
      21             : 
      22           0 : void FlxToHostBuffer::dma_start_continuous()
      23             : {
      24           0 :     m_device->dma_to_host(m_buffer.get(), m_dmaid);
      25           0 :     m_device->dma_set_sw_ptr(m_dmaid, m_buffer->paddr);
      26           0 : }
      27             : 
      28             : 
      29           0 : void FlxToHostBuffer::dma_wait_for_data_irq()
      30             : {
      31           0 :     m_device->irq_wait(m_irq_on_data);
      32           0 : }
      33             : 
      34             : 
      35           0 : size_t FlxToHostBuffer::dma_bytes_available()
      36             : {
      37           0 :     u_long dma_ptr = m_device->dma_get_fw_ptr(m_dmaid);
      38           0 :     if( dma_ptr > m_buffer->pc_ptr ) {
      39           0 :         return dma_ptr - m_buffer->pc_ptr;
      40             :     }
      41           0 :     else if( dma_ptr < m_buffer->pc_ptr ) {
      42           0 :         return m_buffer->size + dma_ptr - m_buffer->pc_ptr;
      43             :     }
      44             :     else { // dma_ptr == buf->pc_ptr
      45           0 :         if( m_device->dma_cmp_even_bits(m_dmaid) ) {
      46             :             return 0; // Buffer empty
      47             :         } else {
      48           0 :             return m_buffer->size; // Buffer full
      49             :         }
      50             :     }
      51             : }
      52             : 
      53             : 
      54           0 : bool FlxToHostBuffer::dma_is_full()
      55             : {
      56           0 :     u_long write_ptr = m_device->dma_get_fw_ptr(m_dmaid);
      57           0 :     u_long read_ptr  = m_buffer->pc_ptr;
      58           0 :     return (write_ptr == read_ptr and not m_device->dma_cmp_even_bits(m_dmaid));
      59             : }
      60             : 
      61             : 
      62           0 : size_t FlxToHostBuffer::dma_bytes_available_nowrap()
      63             : {
      64           0 :     size_t available = dma_bytes_available();
      65           0 :     return MIN(available, m_buffer->pend - m_buffer->pc_ptr);
      66             : }
      67             : 
      68             : 
      69           0 : uint64_t FlxToHostBuffer::dma_get_write_ptr()
      70             : {
      71           0 :     u_long dma_ptr = m_device->dma_get_fw_ptr(m_dmaid);
      72           0 :     return (m_buffer->vaddr + (dma_ptr - m_buffer->paddr));
      73             : }
      74             : 
      75             : 
      76           0 : uint64_t FlxToHostBuffer::dma_get_read_ptr()
      77             : {
      78           0 :     return (m_buffer->vaddr + (m_buffer->pc_ptr - m_buffer->paddr));
      79             : }
      80             : 
      81             : 
      82           0 : uint64_t FlxToHostBuffer::dma_get_write_offset()
      83             : {
      84           0 :     return ( m_device->dma_get_fw_ptr(m_dmaid) - m_buffer->paddr );
      85             : }
      86             : 
      87             : 
      88           0 : uint64_t FlxToHostBuffer::dma_get_read_offset()
      89             : {
      90           0 :     return (m_buffer->pc_ptr - m_buffer->paddr);
      91             : }
      92             : 
      93             : 
      94           0 : void FlxToHostBuffer::dma_set_read_ptr_vaddr(uint64_t v_addr)
      95             : {
      96           0 :     uint64_t pnew = m_buffer->paddr + (v_addr - m_buffer->vaddr);
      97           0 :     m_buffer->pc_ptr = pnew;
      98           0 :     m_device->dma_set_sw_ptr(m_dmaid, pnew);
      99           0 : }
     100             : 
     101             : 
     102           0 : void FlxToHostBuffer::dma_set_read_ptr_paddr(uint64_t p_addr)
     103             : {
     104           0 :     m_buffer->pc_ptr = p_addr;
     105           0 :     m_device->dma_set_sw_ptr(m_dmaid, p_addr);
     106           0 : }
     107             : 
     108             : 
     109           0 : void FlxToHostBuffer::dma_advance_read_ptr(size_t bytes)
     110             : {
     111           0 :     m_buffer->pc_ptr += bytes;
     112           0 :     if(m_buffer->pc_ptr == m_buffer->pend){
     113           0 :         m_buffer->pc_ptr = m_buffer->paddr;
     114             :     }
     115           0 :     m_device->dma_set_sw_ptr(m_dmaid, m_buffer->pc_ptr);
     116           0 : }

Generated by: LCOV version 1.0