mirror of https://github.com/xemu-project/xemu.git
dp8393x: Always update RRA pointers and sequence numbers
These operations need to take place regardless of whether or not rx descriptors have been used up (that is, EOL flag was observed). The algorithm is now the same for a packet that was withheld as for a packet that was not. Signed-off-by: Finn Thain <fthain@telegraphics.com.au> Tested-by: Laurent Vivier <laurent@vivier.eu> Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
parent
d9fae13196
commit
80b60673ea
|
@ -901,12 +901,14 @@ static ssize_t dp8393x_receive(NetClientState *nc, const uint8_t * buf,
|
|||
/* 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);
|
||||
}
|
||||
|
||||
if (s->regs[SONIC_RCR] & SONIC_RCR_LPKT) {
|
||||
/* Read next RRA */
|
||||
dp8393x_do_read_rra(s);
|
||||
}
|
||||
s->regs[SONIC_RSC] = (s->regs[SONIC_RSC] & 0xff00) |
|
||||
((s->regs[SONIC_RSC] + 1) & 0x00ff);
|
||||
|
||||
if (s->regs[SONIC_RCR] & SONIC_RCR_LPKT) {
|
||||
/* Read next RRA */
|
||||
dp8393x_do_read_rra(s);
|
||||
}
|
||||
|
||||
/* Done */
|
||||
|
|
Loading…
Reference in New Issue