[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 04/10] dp8393x: Don't advance RX descriptor twice
From: |
Finn Thain |
Subject: |
[PATCH 04/10] dp8393x: Don't advance RX descriptor twice |
Date: |
Sat, 14 Dec 2019 12:25:57 +1100 |
Follow the algorithm given in the National Semiconductor DP83932C
datasheet in sections 3.4.5 and 3.4.6.
Signed-off-by: Finn Thain <address@hidden>
---
hw/net/dp8393x.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c
index 462f8646e0..49d7d9769e 100644
--- a/hw/net/dp8393x.c
+++ b/hw/net/dp8393x.c
@@ -771,8 +771,6 @@ static ssize_t dp8393x_receive(NetClientState *nc, const
uint8_t * buf,
if (dp8393x_get(s, width, 0) & 0x1) {
/* Still EOL ; stop reception */
return -1;
- } else {
- s->regs[SONIC_CRDA] = s->regs[SONIC_LLFA];
}
}
@@ -821,7 +819,7 @@ static ssize_t dp8393x_receive(NetClientState *nc, const
uint8_t * buf,
address_space_rw(&s->as, dp8393x_crda(s),
MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, size, 1);
- /* Move to next descriptor */
+ /* Check link field */
size = sizeof(uint16_t) * width;
address_space_rw(&s->as, dp8393x_crda(s) + sizeof(uint16_t) * 5 * width,
MEMTXATTRS_UNSPECIFIED, (uint8_t *)s->data, size, 0);
@@ -836,6 +834,8 @@ static ssize_t dp8393x_receive(NetClientState *nc, const
uint8_t * buf,
dp8393x_put(s, width, 0, 0);
address_space_rw(&s->as, offset, MEMTXATTRS_UNSPECIFIED,
(uint8_t *)s->data, size, 1);
+
+ /* Move to next descriptor */
s->regs[SONIC_CRDA] = s->regs[SONIC_LLFA];
s->regs[SONIC_ISR] |= SONIC_ISR_PKTRX;
s->regs[SONIC_RSC] = (s->regs[SONIC_RSC] & 0xff00) |
(((s->regs[SONIC_RSC] & 0x00ff) + 1) & 0x00ff);
--
2.23.0
- [PATCH 00/10] Fixes for DP8393X SONIC device emulation, Finn Thain, 2019/12/13
- [PATCH 05/10] dp8393x: Update LLFA register, Finn Thain, 2019/12/13
- [PATCH 07/10] dp8393x: Implement TBWC0 and TBWC1 registers to restore buffer state, Finn Thain, 2019/12/13
- [PATCH 10/10] dp8393x: Don't clobber packet checksum, Finn Thain, 2019/12/13
- [PATCH 09/10] dp8393x: Don't stop reception upon RBE interrupt assertion, Finn Thain, 2019/12/13
- [PATCH 04/10] dp8393x: Don't advance RX descriptor twice,
Finn Thain <=
- [PATCH 06/10] dp8393x: Clear RRRA command register bit only when appropriate, Finn Thain, 2019/12/13
- [PATCH 02/10] dp8393x: Clean up endianness hacks, Finn Thain, 2019/12/13
- [PATCH 01/10] dp8393x: Mask EOL bit from descriptor addresses, Finn Thain, 2019/12/13
- [PATCH 03/10] dp8393x: Have dp8393x_receive() return the packet size, Finn Thain, 2019/12/13
- [PATCH 08/10] dp8393x: Implement packet size limit and RBAE interrupt, Finn Thain, 2019/12/13
- Re: [PATCH 00/10] Fixes for DP8393X SONIC device emulation, no-reply, 2019/12/13