From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:40345) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TAzCH-00014V-Bd for qemu-devel@nongnu.org; Mon, 10 Sep 2012 04:18:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TAzCB-0004dY-Fz for qemu-devel@nongnu.org; Mon, 10 Sep 2012 04:18:21 -0400 Received: from mx1.redhat.com ([209.132.183.28]:38598) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TAzCB-0004dS-7N for qemu-devel@nongnu.org; Mon, 10 Sep 2012 04:18:15 -0400 Message-ID: <504DA1A9.2000908@redhat.com> Date: Mon, 10 Sep 2012 16:15:37 +0800 From: Jason Wang MIME-Version: 1.0 References: <1347263959-3051-1-git-send-email-akong@redhat.com> In-Reply-To: <1347263959-3051-1-git-send-email-akong@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] rtl8139: implement 8139cp link status List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Amos Kong Cc: aliguori@us.ibm.com, qemu-devel@nongnu.org, stefanha@linux.vnet.ibm.com, mst@redhat.com On 09/10/2012 03:59 PM, Amos Kong wrote: > From: Jason Wang > > 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 > Signed-off-by: Amos Kong > --- > 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; > So the content of this register would be lost after migration? > @@ -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)