qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2] rtl8139: implement 8139cp link status


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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]