From 2f991adb8e8cad3233ae653be12cfd72d44168ba Mon Sep 17 00:00:00 2001 From: Peter Crosthwaite Date: Sat, 26 Jan 2013 12:36:23 -0800 Subject: [PATCH] xilinx_ethlite: Flush queued packets on SW service Software services a received packet by clearing the CTRL_S bit in the RX_CTRLn register. If this bit is cleared, flush any packets queued for the device. Reported-by: John Williams Signed-off-by: Peter Crosthwaite Signed-off-by: Edgar E. Iglesias --- hw/xilinx_ethlite.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/hw/xilinx_ethlite.c b/hw/xilinx_ethlite.c index 972b85e291..9463e921b9 100644 --- a/hw/xilinx_ethlite.c +++ b/hw/xilinx_ethlite.c @@ -135,11 +135,14 @@ eth_write(void *opaque, hwaddr addr, break; /* Keep these native. */ + case R_RX_CTRL0: + case R_RX_CTRL1: + if (!(value & CTRL_S)) { + qemu_flush_queued_packets(&s->nic->nc); + } case R_TX_LEN0: case R_TX_LEN1: case R_TX_GIE0: - case R_RX_CTRL0: - case R_RX_CTRL1: D(qemu_log("%s addr=%x val=%x\n", __func__, addr * 4, value)); s->regs[addr] = value; break;