17#ifndef __ROGUE_HARDWARE_AXI_AXI_STREAM_DMA_H__
18#define __ROGUE_HARDWARE_AXI_AXI_STREAM_DMA_H__
95 static std::map<std::string, std::shared_ptr<rogue::hardware::axi::AxiStreamDmaShared> > sharedBuffers_;
98 static const uint32_t RxBufferCount = 100;
101 std::shared_ptr<rogue::hardware::axi::AxiStreamDmaShared> desc_;
110 struct timeval timeout_;
116 std::thread* thread_;
120 std::shared_ptr<rogue::Logging> log_;
123 void runThread(std::weak_ptr<int>);
132 static std::shared_ptr<rogue::hardware::axi::AxiStreamDmaShared> openShared(std::string path,
133 std::shared_ptr<rogue::Logging> log);
136 static void closeShared(std::shared_ptr<rogue::hardware::axi::AxiStreamDmaShared>);
155 static std::shared_ptr<rogue::hardware::axi::AxiStreamDma>
create(std::string path, uint32_t dest,
bool ssiEnable);
198 AxiStreamDma(std::string path, uint32_t dest,
bool ssiEnable);
254 std::shared_ptr<rogue::interfaces::stream::Frame>
acceptReq(uint32_t size,
bool zeroCopyEn);
266 void acceptFrame(std::shared_ptr<rogue::interfaces::stream::Frame> frame);
274 void retBuffer(uint8_t* data, uint32_t meta, uint32_t rawSize);
Thread-safe bounded queue with optional busy threshold.
Bridge between Rogue stream interfaces and AXI Stream DMA drivers.
uint32_t getTxBuffMissCount()
Gets TX buffer missing count.
void dmaAck()
Sends an ACK strobe through driver-specific DMA control path.
uint32_t getRxBuffMissCount()
Gets RX buffer missing count.
uint32_t getTxBuffinUserCount()
Gets TX buffers currently held by user space.
void retBuffer(uint8_t *data, uint32_t meta, uint32_t rawSize)
Returns DMA-backed buffer memory after frame release.
void setDriverDebug(uint32_t level)
Sets DMA driver debug level.
static void setup_python()
Registers Python bindings for this class.
std::shared_ptr< rogue::interfaces::stream::Frame > acceptReq(uint32_t size, bool zeroCopyEn)
Allocates a frame for upstream writers.
uint32_t getBuffSize()
Gets DMA buffer size.
uint32_t getRxBuffinUserCount()
Gets RX buffers currently held by user space.
void acceptFrame(std::shared_ptr< rogue::interfaces::stream::Frame > frame)
Accepts a frame for DMA transmit.
uint32_t getTxBuffinSwQCount()
Gets TX buffers queued in software.
uint32_t getTxBuffinHwCount()
Gets TX buffers currently held by hardware.
uint32_t getRxBuffinPreHwQCount()
Gets RX buffers queued before hardware.
~AxiStreamDma()
Destroys the interface and stops background activity.
uint32_t getRxBuffinSwQCount()
Gets RX buffers queued in software.
std::string getGitVersion()
Gets DMA driver Git version string.
void stop()
Stops RX thread and closes DMA file descriptors.
void setTimeout(uint32_t timeout)
Sets TX/alloc wait timeout.
uint32_t getApiVersion()
Gets DMA driver API version.
uint32_t getTxBuffinPreHwQCount()
Gets TX buffers queued before hardware.
uint32_t getRxBuffinHwCount()
Gets RX buffers currently held by hardware.
uint32_t getTxBuffCount()
Gets TX DMA buffer count.
static void zeroCopyDisable(std::string path)
Disables zero-copy mode for a device path.
uint32_t getRxBuffCount()
Gets RX DMA buffer count.
static std::shared_ptr< rogue::interfaces::stream::Master > create()
Creates a stream master.
Stream slave endpoint and default frame pool.
std::shared_ptr< rogue::hardware::axi::AxiStreamDma > AxiStreamDmaPtr
std::shared_ptr< rogue::hardware::axi::AxiStreamDmaShared > AxiStreamDmaSharedPtr