Instead of spewing error messages about link status, support link status
authorderaadt <deraadt@openbsd.org>
Fri, 22 Aug 2008 17:09:06 +0000 (17:09 +0000)
committerderaadt <deraadt@openbsd.org>
Fri, 22 Aug 2008 17:09:06 +0000 (17:09 +0000)
like all drivers should
ok miod

sys/arch/vax/if/if_ze.c
sys/arch/vax/if/sgec.c
sys/arch/vax/if/sgecvar.h
sys/arch/vax/vsa/if_ze_vsbus.c
sys/arch/vax/vxt/if_ze_vxtbus.c

index bc5f9c9..51f8dd5 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_ze.c,v 1.7 2006/08/30 19:28:11 miod Exp $  */
+/*     $OpenBSD: if_ze.c,v 1.8 2008/08/22 17:09:06 deraadt Exp $       */
 /*      $NetBSD: if_ze.c,v 1.3 2000/01/24 02:54:03 matt Exp $ */
 /*
  * Copyright (c) 1999 Ludd, University of Lule}, Sweden. All rights reserved.
@@ -38,6 +38,8 @@
 
 #include <net/if.h>
 #include <net/if_dl.h>
+#include <net/if_media.h>
+
 #include <netinet/in.h>
 #include <netinet/if_ether.h>
 
index ba11abc..e7dce2e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: sgec.c,v 1.15 2006/08/31 22:10:57 miod Exp $  */
+/*     $OpenBSD: sgec.c,v 1.16 2008/08/22 17:09:06 deraadt Exp $       */
 /*      $NetBSD: sgec.c,v 1.5 2000/06/04 02:14:14 matt Exp $ */
 /*
  * Copyright (c) 1999 Ludd, University of Lule}, Sweden. All rights reserved.
@@ -56,6 +56,7 @@
 
 #include <net/if.h>
 #include <net/if_dl.h>
+#include <net/if_media.h>
 
 #include <netinet/in.h>
 #include <netinet/if_ether.h>
@@ -74,6 +75,8 @@ void  sgec_rxintr(struct ze_softc *);
 void   sgec_txintr(struct ze_softc *);
 void   zeinit(struct ze_softc *);
 int    zeioctl(struct ifnet *, u_long, caddr_t);
+int    ze_ifmedia_change(struct ifnet *const);
+void   ze_ifmedia_status(struct ifnet *const, struct ifmediareq *);
 void   zekick(struct ze_softc *);
 int    zereset(struct ze_softc *);
 void   zestart(struct ifnet *);
@@ -215,6 +218,12 @@ sgec_attach(sc)
        ether_ifattach(ifp);
 
        printf(": address %s\n", ether_sprintf(sc->sc_ac.ac_enaddr));
+
+       ifmedia_init(&sc->sc_ifmedia, 0, ze_ifmedia_change,
+           ze_ifmedia_status);
+       ifmedia_add(&sc->sc_ifmedia, IFM_ETHER | IFM_10_5, 0, 0);
+       ifmedia_set(&sc->sc_ifmedia, IFM_ETHER | IFM_10_5);
+       sc->sc_flags |= SGECF_LINKUP;
        return;
 
        /*
@@ -250,6 +259,23 @@ sgec_attach(sc)
        return;
 }
 
+int
+ze_ifmedia_change(struct ifnet *const ifp)
+{
+       return (0);
+}
+
+void
+ze_ifmedia_status(struct ifnet *const ifp, struct ifmediareq *req)
+{
+       struct ze_softc *sc = ifp->if_softc;
+
+       req->ifm_status = IFM_AVALID;
+       if (sc->sc_flags & SGECF_LINKUP)
+               req->ifm_status |= IFM_ACTIVE;
+       req->ifm_active = IFM_10_5 | IFM_ETHER;
+}
+
 /*
  * Initialization of interface.
  */
@@ -503,6 +529,7 @@ sgec_txintr(struct ze_softc *sc)
        struct ifnet *ifp = &sc->sc_if;
        u_short tdes0;
 
+       sc->sc_flags |= SGECF_LINKUP;
        while ((zc->zc_xmit[sc->sc_lastack].ze_tdr & ZE_TDR_OW) == 0) {
                int idx = sc->sc_lastack;
 
@@ -523,8 +550,7 @@ sgec_txintr(struct ze_softc *sc)
                                printf("%s: transmit watchdog timeout\n",
                                    sc->sc_dev.dv_xname);
                        if (tdes0 & (ZE_TDES0_LO | ZE_TDES0_NC))
-                               printf("%s: no carrier\n",
-                                   sc->sc_dev.dv_xname);
+                               sc->sc_flags &= ~SGECF_LINKUP;
                        if (tdes0 & ZE_TDES0_EC) {
                                printf("%s: excessive collisions, tdr %d\n",
                                    sc->sc_dev.dv_xname,
@@ -617,6 +643,12 @@ zeioctl(ifp, cmd, data)
                }
                break;
 
+       case SIOCSIFMEDIA:
+       case SIOCGIFMEDIA:
+               error = ifmedia_ioctl(ifp, (struct ifreq *)data,
+                   &sc->sc_ifmedia, cmd);
+               break;
+
        case SIOCSIFFLAGS:
                if ((ifp->if_flags & IFF_UP) == 0 &&
                    (ifp->if_flags & IFF_RUNNING) != 0) {
index 6e14175..9418bcf 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: sgecvar.h,v 1.5 2006/08/30 19:28:11 miod Exp $        */
+/*     $OpenBSD: sgecvar.h,v 1.6 2008/08/22 17:09:06 deraadt Exp $     */
 /*      $NetBSD: sgecvar.h,v 1.2 2000/06/04 02:14:14 matt Exp $ */
 /*
  * Copyright (c) 1999 Ludd, University of Lule}, Sweden. All rights reserved.
@@ -47,6 +47,7 @@ struct        ze_softc {
        struct evcount  sc_intrcnt;     /* Interrupt counters           */
        struct arpcom   sc_ac;          /* Ethernet common part         */
 #define sc_if  sc_ac.ac_if             /* network-visible interface    */
+       struct ifmedia sc_ifmedia;
        bus_space_tag_t sc_iot;
        bus_addr_t      sc_ioh;
        bus_dma_tag_t   sc_dmat;
@@ -65,6 +66,7 @@ struct        ze_softc {
        int             sc_flags;
 #define        SGECF_SETUP             0x00000001      /* need to send setup packet */
 #define        SGECF_VXTQUIRKS         0x00000002      /* need VXT2000 care */
+#define SGECF_LINKUP           0x00000004      /* got link */
 };
 
 void   sgec_attach(struct ze_softc *);
index 24035da..e2bb483 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_ze_vsbus.c,v 1.4 2006/08/30 19:28:13 miod Exp $    */
+/*     $OpenBSD: if_ze_vsbus.c,v 1.5 2008/08/22 17:09:08 deraadt Exp $ */
 /*      $NetBSD: if_ze_vsbus.c,v 1.5 2000/07/26 21:50:49 matt Exp $ */
 /*
  * Copyright (c) 1999 Ludd, University of Lule}, Sweden. All rights reserved.
@@ -38,6 +38,7 @@
 
 #include <net/if.h>
 #include <net/if_dl.h>
+#include <net/if_media.h>
 
 #include <netinet/in.h>
 #include <netinet/if_ether.h>
index 727cded..383e462 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_ze_vxtbus.c,v 1.2 2006/08/30 19:28:13 miod Exp $   */
+/*     $OpenBSD: if_ze_vxtbus.c,v 1.3 2008/08/22 17:09:08 deraadt Exp $        */
 /*
  * Copyright (c) 1999 Ludd, University of Lule}, Sweden. All rights reserved.
  *
@@ -36,6 +36,8 @@
 
 #include <net/if.h>
 #include <net/if_dl.h>
+#include <net/if_media.h>
+
 #include <netinet/in.h>
 #include <netinet/if_ether.h>