mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 02:03:56 -06:00
hw/core: stream: Add an end-of-packet flag
Some stream clients stream an endless stream of data while other clients stream data in packets. Stream interfaces usually have a way to signal the end of a packet or the last beat of a transfer. This adds an end-of-packet flag to the push interface. Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Francisco Iglesias <frasse.iglesias@gmail.com> Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> Message-Id: <20200506082513.18751-6-edgar.iglesias@gmail.com>
This commit is contained in:
parent
e3a8926d0e
commit
51b19950ca
5 changed files with 22 additions and 13 deletions
|
@ -283,7 +283,7 @@ static void stream_process_mem2s(struct Stream *s, StreamSlave *tx_data_dev,
|
|||
|
||||
if (stream_desc_sof(&s->desc)) {
|
||||
s->pos = 0;
|
||||
stream_push(tx_control_dev, s->desc.app, sizeof(s->desc.app));
|
||||
stream_push(tx_control_dev, s->desc.app, sizeof(s->desc.app), true);
|
||||
}
|
||||
|
||||
txlen = s->desc.control & SDESC_CTRL_LEN_MASK;
|
||||
|
@ -298,7 +298,7 @@ static void stream_process_mem2s(struct Stream *s, StreamSlave *tx_data_dev,
|
|||
s->pos += txlen;
|
||||
|
||||
if (stream_desc_eof(&s->desc)) {
|
||||
stream_push(tx_data_dev, s->txbuf, s->pos);
|
||||
stream_push(tx_data_dev, s->txbuf, s->pos, true);
|
||||
s->pos = 0;
|
||||
stream_complete(s);
|
||||
}
|
||||
|
@ -384,7 +384,7 @@ static void xilinx_axidma_reset(DeviceState *dev)
|
|||
|
||||
static size_t
|
||||
xilinx_axidma_control_stream_push(StreamSlave *obj, unsigned char *buf,
|
||||
size_t len)
|
||||
size_t len, bool eop)
|
||||
{
|
||||
XilinxAXIDMAStreamSlave *cs = XILINX_AXI_DMA_CONTROL_STREAM(obj);
|
||||
struct Stream *s = &cs->dma->streams[1];
|
||||
|
@ -416,12 +416,14 @@ xilinx_axidma_data_stream_can_push(StreamSlave *obj,
|
|||
}
|
||||
|
||||
static size_t
|
||||
xilinx_axidma_data_stream_push(StreamSlave *obj, unsigned char *buf, size_t len)
|
||||
xilinx_axidma_data_stream_push(StreamSlave *obj, unsigned char *buf, size_t len,
|
||||
bool eop)
|
||||
{
|
||||
XilinxAXIDMAStreamSlave *ds = XILINX_AXI_DMA_DATA_STREAM(obj);
|
||||
struct Stream *s = &ds->dma->streams[1];
|
||||
size_t ret;
|
||||
|
||||
assert(eop);
|
||||
ret = stream_process_s2mem(s, buf, len);
|
||||
stream_update_irq(s);
|
||||
return ret;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue