Class ToHostBuffer
Defined in File tohost_buffer.hpp
Inheritance Relationships
Derived Types
public FileToHostBuffer
(Class FileToHostBuffer)public FlxToHostBuffer
(Class FlxToHostBuffer)
Class Documentation
-
class ToHostBuffer
Abstract class representing a ToHost DMA buffer. The elinks enabled for the corresponding DMA buffers are read from the device in the constructors.
Subclassed by FileToHostBuffer, FlxToHostBuffer
Public Functions
-
inline void irq_data_enable()
enable on_data interrupt for this DMA buffer.
-
inline void irq_data_disable()
disable on_data interrupt for this DMA buffer.
-
inline void irq_busy_enable()
enable busy interrupt for this DMA buffer.
-
inline void irq_busy_disable()
disable busy interrupt for this DMA buffer.
-
inline std::shared_ptr<Device> get_device()
- Returns:
a shared pointer to the device serving this DMA buffer.
-
inline int get_dmaid() const
- Returns:
identifying number of this DMA buffer.
-
inline std::vector<Elink> get_elinks_of_type(elink_type_t t)
- Parameters:
t -- the e-link type, determined from the encoding.
- Returns:
read e-links enabled for this DMA buffer of a given type.
-
std::vector<std::vector<Elink>> split_elinks_of_type(elink_type_t t, size_t n)
- Parameters:
t -- the e-link type, determined from the encoding.
- Returns:
fraction of e-links enabled for this DMA buffer of a given type.
-
virtual void allocate_buffer(size_t size, const std::string &name, bool vmem, bool free_previous_cmem = true) = 0
fraction of e-links enabled for this DMA buffer of a given type.
- Parameters:
name -- of the buffers passed to the CMEM driver.
vmem -- if true, do not use CMEM but malloc a buffer in memory.
free_previous_cmem -- if true, re-claim a buffer with the same name if present and not locked.
-
virtual void dma_start_continuous() = 0
inform the FELIX card of the allocated buffer, to be used as a circular DMA buffer.
-
virtual void dma_wait_for_data_irq() = 0
wait for an on-data MSI-X interrupt.
-
virtual size_t dma_bytes_available() = 0
- Returns:
number of bytes written by firmware, to be read by software.
-
virtual size_t dma_bytes_available_nowrap() = 0
- Returns:
number of bytes written by firmware up to the end of the buffer, to be read by software.
-
virtual bool dma_is_full() = 0
- Returns:
true if the DMA buffer is full.
-
virtual uint64_t dma_get_write_ptr() = 0
- Returns:
address in virtual memory of write pointer (moved by firmware).
-
virtual uint64_t dma_get_read_ptr() = 0
- Returns:
address in virtual memory of read pointer (moved by software).
-
virtual void dma_set_read_ptr_vaddr(uint64_t v_addr) = 0
set a new read pointer.
software uses the virtual addresses, firmware uses the physical ones.
- Parameters:
v_addr -- virtual address of new read pointer.
-
virtual void dma_set_read_ptr_paddr(uint64_t p_addr) = 0
set a new read pointer.
software uses the virtual addresses, firmware uses the physical ones.
- Parameters:
p_addr -- physical address of new read pointer.
-
virtual uint64_t dma_get_read_offset() = 0
- Returns:
read pointer offset with respect to the start of buffer.
-
virtual uint64_t dma_get_write_offset() = 0
- Returns:
write pointer offset with respect to the start of buffer.
-
virtual void dma_advance_read_ptr(size_t bytes) = 0
advance read pointer.
- Parameters:
bytes -- number of bytes processed by software.
-
inline uint64_t dma_get_vaddr()
- Returns:
virtual address of start of buffer.
-
inline size_t dma_get_size()
- Returns:
buffer size.
-
uint32_t reader_register(bool zc_flag)
register a new reader to this DMA buffer.
- Parameters:
zc_flag -- true if the reader uses zero-copy.
- Returns:
reader identifier.
-
bool reader_is_data_available(uint32_t reader_id)
- Parameters:
reader_id -- reader identifier.
- Returns:
whether there are data in the DMA buffer for this reader to read.
-
size_t reader_get_available_bytes(uint32_t reader_id)
- Parameters:
reader_id -- reader identifier.
- Returns:
bytes available for reading for the given reader.
-
std::span<Block> reader_get_available_blocks(uint32_t reader_id)
- Parameters:
reader_id -- reader identifier.
- Returns:
blocks to be read by the given reader.
-
void reader_advance_read_ptr(uint32_t reader_id, uint32_t read_bytes, uint32_t sent_bytes)
advance the DMA buffer read pointer according to the readers' progress
single synchronisation point of the different ToHostReaders.
- Parameters:
reader_id -- reader identifier.
read_bytes -- bytes read by the reader.
reader_id -- bytes sent by the reader (sent != read only in zero-copy mode).
-
inline bool has_zero_copy_reader() const
- Returns:
whether a zero-copy reader is present among those registered to this buffer.
-
inline void set_zero_copy_reader()
set flag for the presence of a zero-copy reader.
-
inline void stop()
stop reading operations.
-
inline bool is_stopped() const
- Returns:
whether read operations have been stopped.
-
uint32_t dma_get_free_MB()
- Returns:
free space in the buffer in MB.
-
inline void dma_increase_irq_counter()
increase the on-data interrupt counter.
-
inline uint64_t dma_get_irq_counter() const
- Returns:
the number of on-data interrupts.
Protected Functions
-
inline size_t dma_compute_bytes_to_read(uint64_t rd_ptr, uint64_t wr_ptr, bool even)
-
inline void irq_data_enable()