qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] rtl8139: implement 8139cp link status
@ 2012-09-10  7:59 Amos Kong
  2012-09-10  8:15 ` Jason Wang
  0 siblings, 1 reply; 17+ messages in thread
From: Amos Kong @ 2012-09-10  7:59 UTC (permalink / raw)
  To: qemu-devel; +Cc: jasowang, Amos Kong, aliguori, stefanha, mst

From: Jason Wang <jasowang@redhat.com>

Add a link status chang callback and change the link status bit in BMSR
& MSR accordingly. Tested in Linux/Windows guests.

Signed-off-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Amos Kong <akong@redhat.com>
---
 hw/rtl8139.c |   23 +++++++++++++++++++++--
 1 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/hw/rtl8139.c b/hw/rtl8139.c
index 844f1b8..3c33908 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,
@@ -452,6 +452,7 @@ typedef struct RTL8139State {
     uint8_t  Config0;
     uint8_t  Config1;
     uint8_t  Config3;
+    uint8_t  MediaStatus;
     uint8_t  Config4;
     uint8_t  Config5;
 
@@ -1246,6 +1247,7 @@ static void rtl8139_reset(DeviceState *d)
     /* set initial state data */
     s->Config0 = 0x0; /* No boot ROM */
     s->Config1 = 0xC; /* IO mapped and MEM mapped registers available */
+    s->MediaStatus = 0xd0; /* Power is present, TX/RX flow control enable */
     s->Config3 = 0x1; /* fast back-to-back compatible */
     s->Config5 = 0x0;
 
@@ -3007,7 +3009,7 @@ static uint32_t rtl8139_io_readb(void *opaque, uint8_t addr)
             break;
 
         case MediaStatus:
-            ret = 0xd0;
+            ret = s->MediaStatus;
             DPRINTF("MediaStatus read 0x%x\n", ret);
             break;
 
@@ -3453,12 +3455,29 @@ static void pci_rtl8139_uninit(PCIDevice *dev)
     qemu_del_net_client(&s->nic->nc);
 }
 
+static void rtl8139_set_link_status(NetClientState *nc)
+{
+    RTL8139State *s = DO_UPCAST(NICState, nc, nc)->opaque;
+
+    if (nc->link_down) {
+        s->BasicModeStatus &= ~0x0004;
+        s->MediaStatus |= 0x0004;
+    } else {
+        s->BasicModeStatus |= 0x0004;
+        s->MediaStatus &= ~0x0004;
+    }
+
+    s->IntrStatus |= RxUnderrun;
+    rtl8139_update_irq(s);
+}
+
 static NetClientInfo net_rtl8139_info = {
     .type = NET_CLIENT_OPTIONS_KIND_NIC,
     .size = sizeof(NICState),
     .can_receive = rtl8139_can_receive,
     .receive = rtl8139_receive,
     .cleanup = rtl8139_cleanup,
+    .link_status_changed = rtl8139_set_link_status,
 };
 
 static int pci_rtl8139_init(PCIDevice *dev)
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2012-09-27  9:30 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-09-10  7:59 [Qemu-devel] [PATCH] rtl8139: implement 8139cp link status Amos Kong
2012-09-10  8:15 ` Jason Wang
2012-09-13  8:48   ` Jason Wang
2012-09-13  8:51   ` [Qemu-devel] [PATCH v2] " Amos Kong
2012-09-13 12:29     ` Stefan Hajnoczi
2012-09-14  1:34       ` Amos Kong
2012-09-14  7:30         ` Stefan Hajnoczi
2012-09-14  9:01           ` Jason Wang
2012-09-14  2:16   ` [Qemu-devel] [PATCH v3] " Amos Kong
2012-09-14  8:36     ` Paolo Bonzini
2012-09-14  9:20       ` Amos Kong
2012-09-17  2:25   ` [Qemu-devel] [PATCH v4 0/3] net: fix " Amos Kong
2012-09-17  2:44     ` Jason Wang
2012-09-17  2:25   ` [Qemu-devel] [PATCH v4 1/3] rtl8139: implement 8139cp " Amos Kong
2012-09-27  9:30     ` Stefan Hajnoczi
2012-09-17  2:25   ` [Qemu-devel] [PATCH v4 2/3] e1000: update nc.link_down in e1000_post_load() Amos Kong
2012-09-17  2:25   ` [Qemu-devel] [PATCH v4 3/3] update nc.link_down in virtio_net_load() Amos Kong

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).