mirror of https://gitee.com/openkylin/qemu.git
dp8393x: Flush packets when link comes up
.can_receive callback changes semantics that once return 0, backend will try sending again until explicitly flushed, change the device to meet that. dp8393x_can_receive checks SONIC_CR_RXEN bit in SONIC_CR register and SONIC_ISR_RBE bit in SONIC_ISR register, try flushing the queue when either bit is being updated. Signed-off-by: Fam Zheng <famz@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Jason Wang <jasowang@redhat.com> Message-id: 1436955553-22791-12-git-send-email-famz@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
1ef4a6069f
commit
4594f93a73
|
@ -327,9 +327,14 @@ static void dp8393x_do_stop_timer(dp8393xState *s)
|
|||
dp8393x_update_wt_regs(s);
|
||||
}
|
||||
|
||||
static int dp8393x_can_receive(NetClientState *nc);
|
||||
|
||||
static void dp8393x_do_receiver_enable(dp8393xState *s)
|
||||
{
|
||||
s->regs[SONIC_CR] &= ~SONIC_CR_RXDIS;
|
||||
if (dp8393x_can_receive(s->nic->ncs)) {
|
||||
qemu_flush_queued_packets(qemu_get_queue(s->nic));
|
||||
}
|
||||
}
|
||||
|
||||
static void dp8393x_do_receiver_disable(dp8393xState *s)
|
||||
|
@ -569,6 +574,9 @@ static void dp8393x_write(void *opaque, hwaddr addr, uint64_t data,
|
|||
dp8393x_do_read_rra(s);
|
||||
}
|
||||
dp8393x_update_irq(s);
|
||||
if (dp8393x_can_receive(s->nic->ncs)) {
|
||||
qemu_flush_queued_packets(qemu_get_queue(s->nic));
|
||||
}
|
||||
break;
|
||||
/* Ignore least significant bit */
|
||||
case SONIC_RSA:
|
||||
|
|
Loading…
Reference in New Issue