diff options
-rw-r--r-- | hw/lance.c | 1 | ||||
-rw-r--r-- | hw/pcnet-pci.c | 1 | ||||
-rw-r--r-- | hw/pcnet.c | 7 | ||||
-rw-r--r-- | hw/pcnet.h | 1 |
4 files changed, 10 insertions, 0 deletions
diff --git a/hw/lance.c b/hw/lance.c index d83e7f57a9..93d5fda35b 100644 --- a/hw/lance.c +++ b/hw/lance.c @@ -97,6 +97,7 @@ static NetClientInfo net_lance_info = { .size = sizeof(NICState), .can_receive = pcnet_can_receive, .receive = pcnet_receive, + .link_status_changed = pcnet_set_link_status, .cleanup = lance_cleanup, }; diff --git a/hw/pcnet-pci.c b/hw/pcnet-pci.c index ea5dfdef76..4e164da3ac 100644 --- a/hw/pcnet-pci.c +++ b/hw/pcnet-pci.c @@ -288,6 +288,7 @@ static NetClientInfo net_pci_pcnet_info = { .size = sizeof(NICState), .can_receive = pcnet_can_receive, .receive = pcnet_receive, + .link_status_changed = pcnet_set_link_status, .cleanup = pci_pcnet_cleanup, }; diff --git a/hw/pcnet.c b/hw/pcnet.c index add3ec2559..cba253ba7b 100644 --- a/hw/pcnet.c +++ b/hw/pcnet.c @@ -1197,6 +1197,13 @@ ssize_t pcnet_receive(VLANClientState *nc, const uint8_t *buf, size_t size_) return size_; } +void pcnet_set_link_status(VLANClientState *nc) +{ + PCNetState *d = DO_UPCAST(NICState, nc, nc)->opaque; + + d->lnkst = nc->link_down ? 0 : 0x40; +} + static void pcnet_transmit(PCNetState *s) { target_phys_addr_t xmit_cxda = 0; diff --git a/hw/pcnet.h b/hw/pcnet.h index 52cc52e940..edc81c90ac 100644 --- a/hw/pcnet.h +++ b/hw/pcnet.h @@ -58,6 +58,7 @@ uint32_t pcnet_ioport_readl(void *opaque, uint32_t addr); uint32_t pcnet_bcr_readw(PCNetState *s, uint32_t rap); int pcnet_can_receive(VLANClientState *nc); ssize_t pcnet_receive(VLANClientState *nc, const uint8_t *buf, size_t size_); +void pcnet_set_link_status(VLANClientState *nc); void pcnet_common_cleanup(PCNetState *d); int pcnet_common_init(DeviceState *dev, PCNetState *s, NetClientInfo *info); extern const VMStateDescription vmstate_pcnet; |