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 <john.williams@xilinx.com> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
This commit is contained in:
parent
808fb9f277
commit
2f991adb8e
@ -135,11 +135,14 @@ eth_write(void *opaque, hwaddr addr,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
/* Keep these native. */
|
/* 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_LEN0:
|
||||||
case R_TX_LEN1:
|
case R_TX_LEN1:
|
||||||
case R_TX_GIE0:
|
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));
|
D(qemu_log("%s addr=%x val=%x\n", __func__, addr * 4, value));
|
||||||
s->regs[addr] = value;
|
s->regs[addr] = value;
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user