aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorGreg Ungerer <gerg@uclinux.org>2015-06-26 15:27:16 +1000
committerStefan Hajnoczi <stefanha@redhat.com>2015-07-27 14:12:04 +0100
commit491a1f494ed4c0d1a8593dd04b645f8e63c4cfae (patch)
treec280a5dc8b5a1255de97a5de35c8a11e2cb7bc03 /hw
parent299f7bec5a109db7563e1286cedf1f4d84e69e6d (diff)
hw/net: fix mcf_fec driver receiver
The network mcf_fec driver emulated receive side method is returning a result of 0 causing the network layer to disable receive for this emulated device. This results in the guest only ever receiving one packet. Fix the recieve side processing to return the number of bytes that we passed back through to the guest. Signed-off-by: Greg Ungerer <gerg@uclinux.org> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Message-id: 1435296436-12152-5-git-send-email-gerg@uclinux.org Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'hw')
-rw-r--r--hw/net/mcf_fec.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/hw/net/mcf_fec.c b/hw/net/mcf_fec.c
index ea590172b9..e63af1be34 100644
--- a/hw/net/mcf_fec.c
+++ b/hw/net/mcf_fec.c
@@ -413,6 +413,7 @@ static ssize_t mcf_fec_receive(NetClientState *nc, const uint8_t *buf, size_t si
uint32_t buf_addr;
uint8_t *crc_ptr;
unsigned int buf_len;
+ size_t retsize;
DPRINTF("do_rx len %d\n", size);
if (!s->rx_enabled) {
@@ -432,6 +433,7 @@ static ssize_t mcf_fec_receive(NetClientState *nc, const uint8_t *buf, size_t si
flags |= FEC_BD_LG;
}
addr = s->rx_descriptor;
+ retsize = size;
while (size > 0) {
mcf_fec_read_bd(&bd, addr);
if ((bd.flags & FEC_BD_E) == 0) {
@@ -476,7 +478,7 @@ static ssize_t mcf_fec_receive(NetClientState *nc, const uint8_t *buf, size_t si
s->rx_descriptor = addr;
mcf_fec_enable_rx(s);
mcf_fec_update(s);
- return size;
+ return retsize;
}
static const MemoryRegionOps mcf_fec_ops = {