mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 00:03:54 -06:00
dp8393x: Clear descriptor in_use field to release packet
When the SONIC receives a packet into the last available descriptor, it retains ownership of that descriptor for as long as necessary. Section 3.4.7 of the datasheet says, When the system appends more descriptors, the SONIC releases ownership of the descriptor after writing 0000h to the RXpkt.in_use field. The packet can now be processed by the host, so raise a PKTRX interrupt, just like the normal case. 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
350e7d9a77
commit
d9fae13196
1 changed files with 10 additions and 0 deletions
|
@ -811,7 +811,17 @@ static ssize_t dp8393x_receive(NetClientState *nc, const uint8_t * buf,
|
|||
return -1;
|
||||
}
|
||||
/* Link has been updated by host */
|
||||
|
||||
/* Clear in_use */
|
||||
size = sizeof(uint16_t) * width;
|
||||
address = dp8393x_crda(s) + sizeof(uint16_t) * 6 * width;
|
||||
dp8393x_put(s, width, 0, 0);
|
||||
address_space_rw(&s->as, address, 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;
|
||||
}
|
||||
|
||||
/* Save current position */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue