|
| From: | Amos Kong |
| Subject: | Re: [Qemu-devel] [PATCH v2] rtl8139: implement 8139cp link status |
| Date: | Fri, 14 Sep 2012 09:34:59 +0800 |
| User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:14.0) Gecko/20120717 Thunderbird/14.0 |
On 13/09/12 20:29, Stefan Hajnoczi wrote:
On Thu, Sep 13, 2012 at 9:51 AM, Amos Kong <address@hidden> wrote:From: Jason Wang <address@hidden> Add a link status chang callback and change the link status bit in BMSR & MSR accordingly. Tested in Linux/Windows guests. The link status bit of MediaStatus is infered from BasicModeStatus, they are reverse. Signed-off-by: Jason Wang <address@hidden> Signed-off-by: Amos Kong <address@hidden> --- v2: don't add MediaState in RTL8139State to avoid migration trouble --- hw/rtl8139.c | 19 +++++++++++++++++-- 1 files changed, 17 insertions(+), 2 deletions(-) diff --git a/hw/rtl8139.c b/hw/rtl8139.c index 844f1b8..fa949ca 100644 --- a/hw/rtl8139.c +++ b/hw/rtl8139.c @@ -167,7 +167,7 @@ enum IntrStatusBits { PCIErr = 0x8000, PCSTimeout = 0x4000, RxFIFOOver = 0x40, - RxUnderrun = 0x20, + RxUnderrun = 0x20, /* Packet Underrun / Link Change */ RxOverflow = 0x10, TxErr = 0x08, TxOK = 0x04, @@ -3007,7 +3007,7 @@ static uint32_t rtl8139_io_readb(void *opaque, uint8_t addr) break; case MediaStatus: - ret = 0xd0; + ret = 0xd0 | ~(s->BasicModeStatus & 0x0004); DPRINTF("MediaStatus read 0x%x\n", ret); break;This does not give any hint that BMSR & 0x4 is the link status (inverted).
only mentioned in the commitlog, will add a comment here.
I suggest adding an enum like the other constants at the top of the file: ret = 0xd0 | (nc->link_down ? MSRLinkDown : 0);
Ok, I will update the patch.
Regarding migration: do we migrate the NetClient->link_down field? If we only migrate the status register value then the link may actually be up at the net.c level.
I tried to add 'MediaStatus' to 'struct RTL8139State', and update 'VMStateDescription vmstate_rtl8139', then the value of MediaStatus will be migrated. But the idea in v2 is better.
Stefan
Thanks.
--
Amos.
| [Prev in Thread] | Current Thread | [Next in Thread] |