Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/dev/pci return the ifmedia active status correctly even ...
details: https://anonhg.NetBSD.org/src/rev/8daf0688cbc0
branches: trunk
changeset: 848952:8daf0688cbc0
user: ryo <ryo%NetBSD.org@localhost>
date: Sat Feb 15 12:20:35 2020 +0000
description:
return the ifmedia active status correctly even while the link is not up after attach.
pointed out by msaitoh@. thanks.
diffstat:
sys/dev/pci/if_aq.c | 73 ++++++++++++++++++++++------------------------------
1 files changed, 31 insertions(+), 42 deletions(-)
diffs (119 lines):
diff -r dff635e8ab59 -r 8daf0688cbc0 sys/dev/pci/if_aq.c
--- a/sys/dev/pci/if_aq.c Sat Feb 15 10:41:25 2020 +0000
+++ b/sys/dev/pci/if_aq.c Sat Feb 15 12:20:35 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: if_aq.c,v 1.10 2020/02/10 05:53:12 ryo Exp $ */
+/* $NetBSD: if_aq.c,v 1.11 2020/02/15 12:20:35 ryo Exp $ */
/**
* aQuantia Corporation Network Driver
@@ -62,7 +62,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_aq.c,v 1.10 2020/02/10 05:53:12 ryo Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_aq.c,v 1.11 2020/02/15 12:20:35 ryo Exp $");
#ifdef _KERNEL_OPT
#include "opt_if_aq.h"
@@ -1005,8 +1005,6 @@
bool sc_intr_moderation_enable;
bool sc_rss_enable;
- int sc_media_active;
-
struct ethercom sc_ethercom;
struct ether_addr sc_enaddr;
struct ifmedia sc_media;
@@ -2717,39 +2715,6 @@
return error;
}
-static void
-aq_mediastatus_update(struct aq_softc *sc)
-{
- sc->sc_media_active = 0;
-
- if (sc->sc_link_fc & AQ_FC_RX)
- sc->sc_media_active |= IFM_ETH_RXPAUSE;
- if (sc->sc_link_fc & AQ_FC_TX)
- sc->sc_media_active |= IFM_ETH_TXPAUSE;
-
- switch (sc->sc_link_rate) {
- case AQ_LINK_100M:
- /* XXX: need to detect fulldup or halfdup */
- sc->sc_media_active |= IFM_100_TX | IFM_FDX;
- break;
- case AQ_LINK_1G:
- sc->sc_media_active |= IFM_1000_T | IFM_FDX;
- break;
- case AQ_LINK_2G5:
- sc->sc_media_active |= IFM_2500_T | IFM_FDX;
- break;
- case AQ_LINK_5G:
- sc->sc_media_active |= IFM_5000_T | IFM_FDX;
- break;
- case AQ_LINK_10G:
- sc->sc_media_active |= IFM_10G_T | IFM_FDX;
- break;
- default:
- sc->sc_media_active |= IFM_NONE;
- break;
- }
-}
-
static int
aq_ifmedia_change(struct ifnet * const ifp)
{
@@ -2805,13 +2770,39 @@
{
struct aq_softc *sc = ifp->if_softc;
+ /* update ifm_active */
ifmr->ifm_active = IFM_ETHER;
+ if (sc->sc_link_fc & AQ_FC_RX)
+ ifmr->ifm_active |= IFM_ETH_RXPAUSE;
+ if (sc->sc_link_fc & AQ_FC_TX)
+ ifmr->ifm_active |= IFM_ETH_TXPAUSE;
+
+ switch (sc->sc_link_rate) {
+ case AQ_LINK_100M:
+ /* XXX: need to detect fulldup or halfdup */
+ ifmr->ifm_active |= IFM_100_TX | IFM_FDX;
+ break;
+ case AQ_LINK_1G:
+ ifmr->ifm_active |= IFM_1000_T | IFM_FDX;
+ break;
+ case AQ_LINK_2G5:
+ ifmr->ifm_active |= IFM_2500_T | IFM_FDX;
+ break;
+ case AQ_LINK_5G:
+ ifmr->ifm_active |= IFM_5000_T | IFM_FDX;
+ break;
+ case AQ_LINK_10G:
+ ifmr->ifm_active |= IFM_10G_T | IFM_FDX;
+ break;
+ default:
+ ifmr->ifm_active |= IFM_NONE;
+ break;
+ }
+
+ /* update ifm_status */
ifmr->ifm_status = IFM_AVALID;
-
if (sc->sc_link_rate != AQ_LINK_NONE)
ifmr->ifm_status |= IFM_ACTIVE;
-
- ifmr->ifm_active |= sc->sc_media_active;
}
static void
@@ -3385,8 +3376,6 @@
sc->sc_link_fc = fc;
sc->sc_link_eee = eee;
- aq_mediastatus_update(sc);
-
/* update interrupt timing according to new link speed */
aq_hw_interrupt_moderation_set(sc);
}
Home |
Main Index |
Thread Index |
Old Index