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;