Module Name:    src
Committed By:   msaitoh
Date:           Wed May 29 10:07:30 UTC 2019

Modified Files:
        src/sys/arch/amiga/dev: if_es.c
        src/sys/arch/arm/broadcom: bcm53xx_eth.c
        src/sys/arch/arm/gemini: if_gpn.c
        src/sys/arch/emips/ebus: if_le_ebus.c
        src/sys/arch/macppc/dev: am79c950.c
        src/sys/arch/next68k/dev: mb8795.c
        src/sys/arch/sun2/dev: if_ec.c
        src/sys/arch/usermode/dev: if_veth.c
        src/sys/arch/x86/pci: if_vmx.c
        src/sys/dev/hyperv: if_hvn.c
        src/sys/dev/ic: cs89x0.c dm9000.c dp8390.c i82586.c i82596.c lance.c
            lemac.c mb86950.c mb86960.c pdq_ifsubr.c tropic.c
        src/sys/dev/isa: if_iy.c
        src/sys/dev/pci: if_bge.c if_de.c if_dge.c if_ena.c if_kse.c if_ti.c
            if_txp.c if_xge.c
        src/sys/dev/pci/ixgbe: ixgbe.c ixv.c
        src/sys/dev/sbus: be.c qe.c
        src/sys/net: if_ether.h if_ethersubr.c if_tap.c

Log Message:
Even if we don't use MII(4), use the common path of SIOC[GS]IFMEDIA in
sys/net/if_ethersubr.c if we can.
 - Add ec_ifmedia into struct ethercom.
 - ec_mii in struct ethercom is kept and used as it is. It might be used in
   future. Note that some Ethernet drivers which _DOESN'T_ use mii(4) use
   ec_mii for keeping the if_media. Those should be changed in future.


To generate a diff of this commit:
cvs rdiff -u -r1.63 -r1.64 src/sys/arch/amiga/dev/if_es.c
cvs rdiff -u -r1.36 -r1.37 src/sys/arch/arm/broadcom/bcm53xx_eth.c
cvs rdiff -u -r1.11 -r1.12 src/sys/arch/arm/gemini/if_gpn.c
cvs rdiff -u -r1.19 -r1.20 src/sys/arch/emips/ebus/if_le_ebus.c
cvs rdiff -u -r1.45 -r1.46 src/sys/arch/macppc/dev/am79c950.c
cvs rdiff -u -r1.64 -r1.65 src/sys/arch/next68k/dev/mb8795.c
cvs rdiff -u -r1.33 -r1.34 src/sys/arch/sun2/dev/if_ec.c
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/usermode/dev/if_veth.c
cvs rdiff -u -r1.28 -r1.29 src/sys/arch/x86/pci/if_vmx.c
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/hyperv/if_hvn.c
cvs rdiff -u -r1.46 -r1.47 src/sys/dev/ic/cs89x0.c
cvs rdiff -u -r1.20 -r1.21 src/sys/dev/ic/dm9000.c
cvs rdiff -u -r1.94 -r1.95 src/sys/dev/ic/dp8390.c
cvs rdiff -u -r1.84 -r1.85 src/sys/dev/ic/i82586.c
cvs rdiff -u -r1.41 -r1.42 src/sys/dev/ic/i82596.c
cvs rdiff -u -r1.57 -r1.58 src/sys/dev/ic/lance.c
cvs rdiff -u -r1.53 -r1.54 src/sys/dev/ic/lemac.c
cvs rdiff -u -r1.31 -r1.32 src/sys/dev/ic/mb86950.c
cvs rdiff -u -r1.92 -r1.93 src/sys/dev/ic/mb86960.c
cvs rdiff -u -r1.66 -r1.67 src/sys/dev/ic/pdq_ifsubr.c
cvs rdiff -u -r1.52 -r1.53 src/sys/dev/ic/tropic.c
cvs rdiff -u -r1.108 -r1.109 src/sys/dev/isa/if_iy.c
cvs rdiff -u -r1.333 -r1.334 src/sys/dev/pci/if_bge.c
cvs rdiff -u -r1.162 -r1.163 src/sys/dev/pci/if_de.c
cvs rdiff -u -r1.54 -r1.55 src/sys/dev/pci/if_dge.c
cvs rdiff -u -r1.14 -r1.15 src/sys/dev/pci/if_ena.c
cvs rdiff -u -r1.37 -r1.38 src/sys/dev/pci/if_kse.c
cvs rdiff -u -r1.110 -r1.111 src/sys/dev/pci/if_ti.c
cvs rdiff -u -r1.56 -r1.57 src/sys/dev/pci/if_txp.c
cvs rdiff -u -r1.31 -r1.32 src/sys/dev/pci/if_xge.c
cvs rdiff -u -r1.186 -r1.187 src/sys/dev/pci/ixgbe/ixgbe.c
cvs rdiff -u -r1.114 -r1.115 src/sys/dev/pci/ixgbe/ixv.c
cvs rdiff -u -r1.93 -r1.94 src/sys/dev/sbus/be.c
cvs rdiff -u -r1.74 -r1.75 src/sys/dev/sbus/qe.c
cvs rdiff -u -r1.78 -r1.79 src/sys/net/if_ether.h
cvs rdiff -u -r1.274 -r1.275 src/sys/net/if_ethersubr.c
cvs rdiff -u -r1.112 -r1.113 src/sys/net/if_tap.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/amiga/dev/if_es.c
diff -u src/sys/arch/amiga/dev/if_es.c:1.63 src/sys/arch/amiga/dev/if_es.c:1.64
--- src/sys/arch/amiga/dev/if_es.c:1.63	Wed May 29 06:21:56 2019
+++ src/sys/arch/amiga/dev/if_es.c	Wed May 29 10:07:28 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_es.c,v 1.63 2019/05/29 06:21:56 msaitoh Exp $ */
+/*	$NetBSD: if_es.c,v 1.64 2019/05/29 10:07:28 msaitoh Exp $ */
 
 /*
  * Copyright (c) 1995 Michael L. Hitch
@@ -33,7 +33,7 @@
 #include "opt_ns.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_es.c,v 1.63 2019/05/29 06:21:56 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_es.c,v 1.64 2019/05/29 10:07:28 msaitoh Exp $");
 
 
 #include <sys/param.h>
@@ -176,6 +176,8 @@ esattach(device_t parent, device_t self,
 	ifp->if_watchdog = eswatchdog;
 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
 
+	/* Setup ifmedia interface */
+	sc->sc_ethercom.ec_ifmedia = &sc->sc_media;
 	ifmedia_init(&sc->sc_media, 0, esmediachange, esmediastatus);
 	ifmedia_add(&sc->sc_media, IFM_ETHER | IFM_MANUAL, 0, NULL);
 	ifmedia_set(&sc->sc_media, IFM_ETHER | IFM_MANUAL);
@@ -943,7 +945,6 @@ esioctl(struct ifnet *ifp, u_long cmd, v
 {
 	struct es_softc *sc = ifp->if_softc;
 	register struct ifaddr *ifa = (struct ifaddr *)data;
-	struct ifreq *ifr = (struct ifreq *)data;
 	int s, error = 0;
 
 	s = splnet();
@@ -1018,11 +1019,6 @@ esioctl(struct ifnet *ifp, u_long cmd, v
 		}
 		break;
 
-	case SIOCGIFMEDIA:
-	case SIOCSIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->sc_media, cmd);
-		break;
-
 	default:
 		error = ether_ioctl(ifp, cmd, data);
 		break;

Index: src/sys/arch/arm/broadcom/bcm53xx_eth.c
diff -u src/sys/arch/arm/broadcom/bcm53xx_eth.c:1.36 src/sys/arch/arm/broadcom/bcm53xx_eth.c:1.37
--- src/sys/arch/arm/broadcom/bcm53xx_eth.c:1.36	Wed May 29 06:21:56 2019
+++ src/sys/arch/arm/broadcom/bcm53xx_eth.c	Wed May 29 10:07:28 2019
@@ -35,7 +35,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(1, "$NetBSD: bcm53xx_eth.c,v 1.36 2019/05/29 06:21:56 msaitoh Exp $");
+__KERNEL_RCSID(1, "$NetBSD: bcm53xx_eth.c,v 1.37 2019/05/29 10:07:28 msaitoh Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -379,6 +379,7 @@ bcmeth_ccb_attach(device_t parent, devic
 	 */
 	int ifmedia = IFM_ETHER | IFM_1000_T | IFM_FDX;
 	//ifmedia |= IFM_FLOW | IFM_ETH_TXPAUSE | IFM_ETH_RXPAUSE;
+	ec->ec_ifmedia = &sc->sc_media;
 	ifmedia_init(&sc->sc_media, IFM_IMASK, bcmeth_mediachange,
 	    bcmeth_mediastatus);
 	ifmedia_add(&sc->sc_media, ifmedia, 0, NULL);
@@ -686,16 +687,10 @@ static int
 bcmeth_ifioctl(struct ifnet *ifp, u_long cmd, void *data)
 {
 	struct bcmeth_softc *sc	 = ifp->if_softc;
-	struct ifreq * const ifr = data;
 	const int s = splnet();
 	int error;
 
 	switch (cmd) {
-	case SIOCSIFMEDIA:
-	case SIOCGIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->sc_media, cmd);
-		break;
-
 	default:
 		error = ether_ioctl(ifp, cmd, data);
 		if (error != ENETRESET)

Index: src/sys/arch/arm/gemini/if_gpn.c
diff -u src/sys/arch/arm/gemini/if_gpn.c:1.11 src/sys/arch/arm/gemini/if_gpn.c:1.12
--- src/sys/arch/arm/gemini/if_gpn.c:1.11	Wed May 29 06:21:56 2019
+++ src/sys/arch/arm/gemini/if_gpn.c	Wed May 29 10:07:28 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: if_gpn.c,v 1.11 2019/05/29 06:21:56 msaitoh Exp $ */
+/* $NetBSD: if_gpn.c,v 1.12 2019/05/29 10:07:28 msaitoh Exp $ */
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -32,7 +32,7 @@
 
 #include "opt_gemini.h"
 
-__KERNEL_RCSID(0, "$NetBSD: if_gpn.c,v 1.11 2019/05/29 06:21:56 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_gpn.c,v 1.12 2019/05/29 10:07:28 msaitoh Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -617,10 +617,6 @@ gpn_ifioctl(struct ifnet *ifp, u_long cm
 	s = splnet();
 
 	switch (cmd) {
-	case SIOCSIFMEDIA:
-	case SIOCGIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->sc_im, cmd);
-		break;
 	case SIOCSIFPHYADDR: {
 		const struct sockaddr_dl *sdl = satosdl(&ifra->ifra_addr);
 
@@ -688,10 +684,10 @@ gpn_attach(device_t parent, device_t sel
 	sc->sc_dev = self;
 	sc->sc_dmat = &gemini_bus_dma_tag;
 
-	/*
-	 * Pretend we are full-duplex gigabit ethernet.
-	 */
+	/* Setup ifmedia interface */
+	sc->sc_ec.ec_ifmedia = &sc->sc_im;
 	ifmedia_init(&sc->sc_im, 0, gpn_mediachange, gpn_mediastatus);
+	/* Pretend we are full-duplex gigabit ethernet. */
 	ifmedia_add(&sc->sc_im, IFM_ETHER | IFM_1000_T | IFM_FDX, 0, NULL);
 	ifmedia_add(&sc->sc_im, IFM_ETHER | IFM_NONE, 0, NULL);
 	ifmedia_set(&sc->sc_im, IFM_ETHER | IFM_NONE);

Index: src/sys/arch/emips/ebus/if_le_ebus.c
diff -u src/sys/arch/emips/ebus/if_le_ebus.c:1.19 src/sys/arch/emips/ebus/if_le_ebus.c:1.20
--- src/sys/arch/emips/ebus/if_le_ebus.c:1.19	Wed May 29 06:21:57 2019
+++ src/sys/arch/emips/ebus/if_le_ebus.c	Wed May 29 10:07:28 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_le_ebus.c,v 1.19 2019/05/29 06:21:57 msaitoh Exp $	*/
+/*	$NetBSD: if_le_ebus.c,v 1.20 2019/05/29 10:07:28 msaitoh Exp $	*/
 
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_le_ebus.c,v 1.19 2019/05/29 06:21:57 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_le_ebus.c,v 1.20 2019/05/29 10:07:28 msaitoh Exp $");
 
 #include "opt_inet.h"
 
@@ -194,6 +194,7 @@ enic_attach(device_t parent, device_t se
 	IFQ_SET_READY(&ifp->if_snd);
 
 	/* Initialize ifmedia structures. */
+	sc->sc_ethercom.ec_ifmedia = &sc->sc_media;
 	ifmedia_init(&sc->sc_media, 0, enic_mediachange, enic_mediastatus);
 	ifmedia_add(&sc->sc_media, IFM_ETHER | IFM_MANUAL, 0, NULL);
 	ifmedia_set(&sc->sc_media, IFM_ETHER | IFM_MANUAL);
@@ -597,7 +598,6 @@ enic_ioctl(struct ifnet *ifp, u_long cmd
 	s = splnet();
 
 	switch (cmd) {
-	case SIOCGIFMEDIA:
 	case SIOCSIFMEDIA:
 #if 0 /*DEBUG*/
 	    {

Index: src/sys/arch/macppc/dev/am79c950.c
diff -u src/sys/arch/macppc/dev/am79c950.c:1.45 src/sys/arch/macppc/dev/am79c950.c:1.46
--- src/sys/arch/macppc/dev/am79c950.c:1.45	Tue May 28 07:41:47 2019
+++ src/sys/arch/macppc/dev/am79c950.c	Wed May 29 10:07:28 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: am79c950.c,v 1.45 2019/05/28 07:41:47 msaitoh Exp $	*/
+/*	$NetBSD: am79c950.c,v 1.46 2019/05/29 10:07:28 msaitoh Exp $	*/
 
 /*-
  * Copyright (c) 1997 David Huang <k...@bga.com>
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: am79c950.c,v 1.45 2019/05/28 07:41:47 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: am79c950.c,v 1.46 2019/05/29 10:07:28 msaitoh Exp $");
 
 #include "opt_inet.h"
 
@@ -154,6 +154,7 @@ mcsetup(struct mc_softc *sc, uint8_t *ll
 	ifp->if_watchdog = mcwatchdog;
 
 	/* Initialize ifmedia structures */
+	sc->sc_ethercom.ec_ifmedia = &sc->sc_media;
 	ifmedia_init(&sc->sc_media, 0, mc_mediachange, mc_mediastatus);
 	ifmedia_add(&sc->sc_media, IFM_ETHER | IFM_MANUAL, 0, NULL);
 	ifmedia_set(&sc->sc_media, IFM_ETHER | IFM_MANUAL);
@@ -170,7 +171,6 @@ mcioctl(struct ifnet *ifp, u_long cmd, v
 {
 	struct mc_softc *sc = ifp->if_softc;
 	struct ifaddr *ifa;
-	struct ifreq *ifr;
 
 	int	s = splnet(), err = 0;
 
@@ -233,12 +233,6 @@ mcioctl(struct ifnet *ifp, u_long cmd, v
 		}
 		break;
 
-	case SIOCGIFMEDIA:
-	case SIOCSIFMEDIA:
-		ifr = (struct ifreq *) data;
-		err = ifmedia_ioctl(ifp, ifr, &sc->sc_media, cmd);
-		break;
-
 	default:
 		err = ether_ioctl(ifp, cmd, data);
 		break;

Index: src/sys/arch/next68k/dev/mb8795.c
diff -u src/sys/arch/next68k/dev/mb8795.c:1.64 src/sys/arch/next68k/dev/mb8795.c:1.65
--- src/sys/arch/next68k/dev/mb8795.c:1.64	Wed May 29 06:21:57 2019
+++ src/sys/arch/next68k/dev/mb8795.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: mb8795.c,v 1.64 2019/05/29 06:21:57 msaitoh Exp $	*/
+/*	$NetBSD: mb8795.c,v 1.65 2019/05/29 10:07:29 msaitoh Exp $	*/
 /*
  * Copyright (c) 1998 Darrin B. Jewell
  * All rights reserved.
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mb8795.c,v 1.64 2019/05/29 06:21:57 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mb8795.c,v 1.65 2019/05/29 10:07:29 msaitoh Exp $");
 
 #include "opt_inet.h"
 
@@ -111,8 +111,8 @@ mb8795_config(struct mb8795_softc *sc, i
 	ifp->if_flags = IFF_BROADCAST;
 
 	/* Initialize media goo. */
-	ifmedia_init(&sc->sc_media, 0, mb8795_mediachange,
-		     mb8795_mediastatus);
+	sc->sc_ethercom.ec_ifmedia = &sc->sc_media;
+	ifmedia_init(&sc->sc_media, 0, mb8795_mediachange, mb8795_mediastatus);
 	if (media != NULL) {
 		int i;
 		for (i = 0; i < nmedia; i++)
@@ -561,7 +561,6 @@ mb8795_ioctl(struct ifnet *ifp, u_long c
 {
 	struct mb8795_softc *sc = ifp->if_softc;
 	struct ifaddr *ifa = (struct ifaddr *)data;
-	struct ifreq *ifr = (struct ifreq *)data;
 	int s, error = 0;
 
 	s = splnet();
@@ -642,13 +641,6 @@ mb8795_ioctl(struct ifnet *ifp, u_long c
 		}
 		break;
 
-	case SIOCGIFMEDIA:
-	case SIOCSIFMEDIA:
-		DPRINTF(("%s: mb8795_ioctl() SIOCSIFMEDIA\n",
-			device_xname(sc->sc_dev)));
-		error = ifmedia_ioctl(ifp, ifr, &sc->sc_media, cmd);
-		break;
-
 	default:
 		error = ether_ioctl(ifp, cmd, data);
 		break;

Index: src/sys/arch/sun2/dev/if_ec.c
diff -u src/sys/arch/sun2/dev/if_ec.c:1.33 src/sys/arch/sun2/dev/if_ec.c:1.34
--- src/sys/arch/sun2/dev/if_ec.c:1.33	Wed May 29 06:21:57 2019
+++ src/sys/arch/sun2/dev/if_ec.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ec.c,v 1.33 2019/05/29 06:21:57 msaitoh Exp $	*/
+/*	$NetBSD: if_ec.c,v 1.34 2019/05/29 10:07:29 msaitoh Exp $	*/
 
 /*
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ec.c,v 1.33 2019/05/29 06:21:57 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ec.c,v 1.34 2019/05/29 10:07:29 msaitoh Exp $");
 
 #include "opt_inet.h"
 #include "opt_ns.h"
@@ -223,6 +223,7 @@ ec_attach(device_t parent, device_t self
 	IFQ_SET_READY(&ifp->if_snd);
 
         /* Initialize ifmedia structures. */
+	sc->sc_ethercom.ec_ifmedia = &sc->sc_media;
 	ifmedia_init(&sc->sc_media, 0, ec_mediachange, ec_mediastatus);
 	ifmedia_add(&sc->sc_media, IFM_ETHER | IFM_MANUAL, 0, NULL);
 	ifmedia_set(&sc->sc_media, IFM_ETHER | IFM_MANUAL);
@@ -559,8 +560,6 @@ int
 ec_ioctl(struct ifnet *ifp, u_long cmd, void *data)
 {
 	struct ifaddr *ifa = (struct ifaddr *)data;
-	struct ifreq *ifr = (struct ifreq *)data;
-	struct ec_softc *sc = ifp->if_softc;
 	int s, error = 0;
 
 	s = splnet();
@@ -611,11 +610,6 @@ ec_ioctl(struct ifnet *ifp, u_long cmd, 
 		}
 		break;
 
-	case SIOCGIFMEDIA:
-	case SIOCSIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->sc_media, cmd);
-		break;
-
 	default:
 		error = ether_ioctl(ifp, cmd, data);
 		break;

Index: src/sys/arch/usermode/dev/if_veth.c
diff -u src/sys/arch/usermode/dev/if_veth.c:1.12 src/sys/arch/usermode/dev/if_veth.c:1.13
--- src/sys/arch/usermode/dev/if_veth.c:1.12	Wed May 29 06:21:57 2019
+++ src/sys/arch/usermode/dev/if_veth.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: if_veth.c,v 1.12 2019/05/29 06:21:57 msaitoh Exp $ */
+/* $NetBSD: if_veth.c,v 1.13 2019/05/29 10:07:29 msaitoh Exp $ */
 
 /*-
  * Copyright (c) 2011 Jared D. McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_veth.c,v 1.12 2019/05/29 06:21:57 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_veth.c,v 1.13 2019/05/29 10:07:29 msaitoh Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -148,9 +148,10 @@ veth_attach(device_t parent, device_t se
 	ether_ifattach(ifp, sc->sc_eaddr);
 	if_register(ifp);
 
+	/* Initialize ifmedia structures. */
+	sc->sc_ec.ec_ifmedia = &sc->sc_ifmedia;
 	ifmedia_init(&sc->sc_ifmedia, 0,
-	    veth_ifmedia_change,
-	    veth_ifmedia_status);
+	    veth_ifmedia_change, veth_ifmedia_status);
 	ifmedia_add(&sc->sc_ifmedia, IFM_ETHER | IFM_100_TX, 0, NULL);
 	ifmedia_set(&sc->sc_ifmedia, IFM_ETHER | IFM_100_TX);
 
@@ -322,8 +323,6 @@ veth_watchdog(struct ifnet *ifp)
 static int
 veth_ioctl(struct ifnet *ifp, u_long cmd, void *data)
 {
-	struct veth_softc *sc = ifp->if_softc;
-	struct ifreq *ifr;
 	int s, error;
 
 	vethprintf("%s: %s flags=%x\n", __func__, ifp->if_xname, ifp->if_flags);
@@ -331,11 +330,6 @@ veth_ioctl(struct ifnet *ifp, u_long cmd
 	s = splnet();
 
 	switch (cmd) {
-	case SIOCSIFMEDIA:
-	case SIOCGIFMEDIA:
-		ifr = data;
-		error = ifmedia_ioctl(ifp, ifr, &sc->sc_ifmedia, cmd);
-		break;
 	case SIOCADDMULTI:
 	case SIOCDELMULTI:
 		if ((error = ether_ioctl(ifp, cmd, data)) == ENETRESET) {

Index: src/sys/arch/x86/pci/if_vmx.c
diff -u src/sys/arch/x86/pci/if_vmx.c:1.28 src/sys/arch/x86/pci/if_vmx.c:1.29
--- src/sys/arch/x86/pci/if_vmx.c:1.28	Thu May 23 10:57:27 2019
+++ src/sys/arch/x86/pci/if_vmx.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vmx.c,v 1.28 2019/05/23 10:57:27 msaitoh Exp $	*/
+/*	$NetBSD: if_vmx.c,v 1.29 2019/05/29 10:07:29 msaitoh Exp $	*/
 /*	$OpenBSD: if_vmx.c,v 1.16 2014/01/22 06:04:17 brad Exp $	*/
 
 /*
@@ -19,7 +19,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_vmx.c,v 1.28 2019/05/23 10:57:27 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vmx.c,v 1.29 2019/05/29 10:07:29 msaitoh Exp $");
 
 #include <sys/param.h>
 #include <sys/cpu.h>
@@ -1726,6 +1726,8 @@ vmxnet3_setup_interface(struct vmxnet3_s
 	IFQ_SET_MAXLEN(&ifp->if_snd, sc->vmx_ntxdescs);
 	IFQ_SET_READY(&ifp->if_snd);
 
+	/* Initialize ifmedia structures. */
+	sc->vmx_ethercom.ec_ifmedia = &sc->vmx_media;
 	ifmedia_init(&sc->vmx_media, IFM_IMASK, vmxnet3_media_change,
 	    vmxnet3_media_status);
 	ifmedia_add(&sc->vmx_media, IFM_ETHER | IFM_AUTO, 0, NULL);
@@ -2910,12 +2912,6 @@ vmxnet3_ioctl(struct ifnet *ifp, u_long 
 			VMXNET3_CORE_UNLOCK(sc);
 		}
 		break;
-	case SIOCSIFMEDIA:
-	case SIOCGIFMEDIA:
-		s = splnet();
-		error = ifmedia_ioctl(ifp, ifr, &sc->vmx_media, cmd);
-		splx(s);
-		break;
 	case SIOCGIFDATA:
 	case SIOCZIFDATA:
 		ifp->if_ipackets = 0;

Index: src/sys/dev/hyperv/if_hvn.c
diff -u src/sys/dev/hyperv/if_hvn.c:1.2 src/sys/dev/hyperv/if_hvn.c:1.3
--- src/sys/dev/hyperv/if_hvn.c:1.2	Tue Mar  5 08:25:02 2019
+++ src/sys/dev/hyperv/if_hvn.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_hvn.c,v 1.2 2019/03/05 08:25:02 msaitoh Exp $	*/
+/*	$NetBSD: if_hvn.c,v 1.3 2019/05/29 10:07:29 msaitoh Exp $	*/
 /*	$OpenBSD: if_hvn.c,v 1.39 2018/03/11 14:31:34 mikeb Exp $	*/
 
 /*-
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_hvn.c,v 1.2 2019/03/05 08:25:02 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_hvn.c,v 1.3 2019/05/29 10:07:29 msaitoh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -289,6 +289,8 @@ hvn_attach(device_t parent, device_t sel
 	IFQ_SET_MAXLEN(&ifp->if_snd, HVN_TX_DESC - 1);
 	IFQ_SET_READY(&ifp->if_snd);
 
+	/* Initialize ifmedia structures. */
+	sc->sc_ec.ec_ifmedia = &sc->sc_media;
 	ifmedia_init(&sc->sc_media, IFM_IMASK, hvn_media_change,
 	    hvn_media_status);
 	ifmedia_add(&sc->sc_media, IFM_ETHER | IFM_MANUAL, 0, NULL);
@@ -369,7 +371,6 @@ static int
 hvn_ioctl(struct ifnet *ifp, u_long command, void * data)
 {
 	struct hvn_softc *sc = IFP2SC(ifp);
-	struct ifreq *ifr = (struct ifreq *)data;
 	int s, error = 0;
 
 	s = splnet();
@@ -389,10 +390,6 @@ hvn_ioctl(struct ifnet *ifp, u_long comm
 				hvn_stop(ifp, 1);
 		}
 		break;
-	case SIOCGIFMEDIA:
-	case SIOCSIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->sc_media, command);
-		break;
 	default:
 		error = ether_ioctl(ifp, command, data);
 		break;

Index: src/sys/dev/ic/cs89x0.c
diff -u src/sys/dev/ic/cs89x0.c:1.46 src/sys/dev/ic/cs89x0.c:1.47
--- src/sys/dev/ic/cs89x0.c:1.46	Tue May 28 07:41:48 2019
+++ src/sys/dev/ic/cs89x0.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: cs89x0.c,v 1.46 2019/05/28 07:41:48 msaitoh Exp $	*/
+/*	$NetBSD: cs89x0.c,v 1.47 2019/05/29 10:07:29 msaitoh Exp $	*/
 
 /*
  * Copyright (c) 2004 Christopher Gilbert
@@ -212,7 +212,7 @@
 */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cs89x0.c,v 1.46 2019/05/28 07:41:48 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cs89x0.c,v 1.47 2019/05/29 10:07:29 msaitoh Exp $");
 
 #include "opt_inet.h"
 
@@ -399,6 +399,7 @@ cs_attach(struct cs_softc *sc, uint8_t *
 	IFQ_SET_READY(&ifp->if_snd);
 
 	/* Initialize ifmedia structures. */
+	sc->sc_ethercom.ec_ifmedia = &sc->sc_media;
 	ifmedia_init(&sc->sc_media, 0, cs_mediachange, cs_mediastatus);
 
 	if (media != NULL) {
@@ -1318,7 +1319,6 @@ int
 cs_ioctl(struct ifnet *ifp, u_long cmd, void *data)
 {
 	struct cs_softc *sc = ifp->if_softc;
-	struct ifreq *ifr = data;
 	int state;
 	int result;
 
@@ -1327,11 +1327,6 @@ cs_ioctl(struct ifnet *ifp, u_long cmd, 
 	result = 0;		/* Only set if something goes wrong */
 
 	switch (cmd) {
-	case SIOCGIFMEDIA:
-	case SIOCSIFMEDIA:
-		result = ifmedia_ioctl(ifp, ifr, &sc->sc_media, cmd);
-		break;
-
 	default:
 		result = ether_ioctl(ifp, cmd, data);
 		if (result == ENETRESET) {

Index: src/sys/dev/ic/dm9000.c
diff -u src/sys/dev/ic/dm9000.c:1.20 src/sys/dev/ic/dm9000.c:1.21
--- src/sys/dev/ic/dm9000.c:1.20	Tue May 28 07:41:48 2019
+++ src/sys/dev/ic/dm9000.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: dm9000.c,v 1.20 2019/05/28 07:41:48 msaitoh Exp $	*/
+/*	$NetBSD: dm9000.c,v 1.21 2019/05/29 10:07:29 msaitoh Exp $	*/
 
 /*
  * Copyright (c) 2009 Paul Fleischer
@@ -437,6 +437,7 @@ dme_attach(struct dme_softc *sc, const u
 	IFQ_SET_READY(&ifp->if_snd);
 
 	/* Initialize ifmedia structures. */
+	sc->sc_ethercom.ec_ifmedia = &sc->sc_media;
 	ifmedia_init(&sc->sc_media, 0, dme_mediachange, dme_mediastatus);
 	ifmedia_add(&sc->sc_media, IFM_ETHER | IFM_AUTO, 0, NULL);
 	ifmedia_add(&sc->sc_media, IFM_ETHER | IFM_10_T | IFM_FDX, 0, NULL);
@@ -693,16 +694,11 @@ int
 dme_ioctl(struct ifnet *ifp, u_long cmd, void *data)
 {
 	struct dme_softc *sc = ifp->if_softc;
-	struct ifreq *ifr = data;
 	int s, error = 0;
 
 	s = splnet();
 
 	switch (cmd) {
-	case SIOCGIFMEDIA:
-	case SIOCSIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->sc_media, cmd);
-		break;
 	default:
 		error = ether_ioctl(ifp, cmd, data);
 		if (error == ENETRESET) {

Index: src/sys/dev/ic/dp8390.c
diff -u src/sys/dev/ic/dp8390.c:1.94 src/sys/dev/ic/dp8390.c:1.95
--- src/sys/dev/ic/dp8390.c:1.94	Tue May 28 07:41:48 2019
+++ src/sys/dev/ic/dp8390.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: dp8390.c,v 1.94 2019/05/28 07:41:48 msaitoh Exp $	*/
+/*	$NetBSD: dp8390.c,v 1.95 2019/05/29 10:07:29 msaitoh Exp $	*/
 
 /*
  * Device driver for National Semiconductor DS8390/WD83C690 based ethernet
@@ -14,7 +14,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dp8390.c,v 1.94 2019/05/28 07:41:48 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dp8390.c,v 1.95 2019/05/29 10:07:29 msaitoh Exp $");
 
 #include "opt_inet.h"
 
@@ -66,6 +66,7 @@ void
 dp8390_media_init(struct dp8390_softc *sc)
 {
 
+	sc->sc_ec.ec_ifmedia = &sc->sc_media;
 	ifmedia_init(&sc->sc_media, 0, dp8390_mediachange, dp8390_mediastatus);
 	ifmedia_add(&sc->sc_media, IFM_ETHER | IFM_MANUAL, 0, NULL);
 	ifmedia_set(&sc->sc_media, IFM_ETHER | IFM_MANUAL);
@@ -812,7 +813,6 @@ dp8390_ioctl(struct ifnet *ifp, u_long c
 {
 	struct dp8390_softc *sc = ifp->if_softc;
 	struct ifaddr *ifa = data;
-	struct ifreq *ifr = data;
 	int s, error = 0;
 
 	s = splnet();
@@ -892,11 +892,6 @@ dp8390_ioctl(struct ifnet *ifp, u_long c
 		}
 		break;
 
-	case SIOCGIFMEDIA:
-	case SIOCSIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->sc_media, cmd);
-		break;
-
 	default:
 		error = ether_ioctl(ifp, cmd, data);
 		break;

Index: src/sys/dev/ic/i82586.c
diff -u src/sys/dev/ic/i82586.c:1.84 src/sys/dev/ic/i82586.c:1.85
--- src/sys/dev/ic/i82586.c:1.84	Tue May 28 07:41:48 2019
+++ src/sys/dev/ic/i82586.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: i82586.c,v 1.84 2019/05/28 07:41:48 msaitoh Exp $	*/
+/*	$NetBSD: i82586.c,v 1.85 2019/05/29 10:07:29 msaitoh Exp $	*/
 
 /*-
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -137,7 +137,7 @@ Mode of operation:
 */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i82586.c,v 1.84 2019/05/28 07:41:48 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i82586.c,v 1.85 2019/05/29 10:07:29 msaitoh Exp $");
 
 
 #include <sys/param.h>
@@ -245,6 +245,7 @@ i82586_attach(struct ie_softc *sc, const
 	IFQ_SET_READY(&ifp->if_snd);
 
 	/* Initialize media goo. */
+	sc->sc_ethercom.ec_ifmedia = &sc->sc_media;
 	ifmedia_init(&sc->sc_media, 0, i82586_mediachange, i82586_mediastatus);
 	if (media != NULL) {
 		for (i = 0; i < nmedia; i++)
@@ -1725,15 +1726,10 @@ int
 i82586_ioctl(struct ifnet *ifp, unsigned long cmd, void *data)
 {
 	struct ie_softc *sc = ifp->if_softc;
-	struct ifreq *ifr = (struct ifreq *)data;
 	int s, error = 0;
 
 	s = splnet();
 	switch (cmd) {
-	case SIOCGIFMEDIA:
-	case SIOCSIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->sc_media, cmd);
-		break;
 	default:
 		error = ether_ioctl(ifp, cmd, data);
 		if (error == ENETRESET) {

Index: src/sys/dev/ic/i82596.c
diff -u src/sys/dev/ic/i82596.c:1.41 src/sys/dev/ic/i82596.c:1.42
--- src/sys/dev/ic/i82596.c:1.41	Tue May 28 07:41:48 2019
+++ src/sys/dev/ic/i82596.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: i82596.c,v 1.41 2019/05/28 07:41:48 msaitoh Exp $ */
+/* $NetBSD: i82596.c,v 1.42 2019/05/29 10:07:29 msaitoh Exp $ */
 
 /*
  * Copyright (c) 2003 Jochen Kunz.
@@ -43,7 +43,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i82596.c,v 1.41 2019/05/28 07:41:48 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i82596.c,v 1.42 2019/05/29 10:07:29 msaitoh Exp $");
 
 /* autoconfig and device stuff */
 #include <sys/param.h>
@@ -646,6 +646,8 @@ iee_attach(struct iee_softc *sc, uint8_t
 	bus_dmamap_sync(sc->sc_dmat, sc->sc_shmem_map, 0, sc->sc_shmem_sz,
 	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 
+	/* Initialize ifmedia structures. */
+	sc->sc_ethercom.ec_ifmedia = &sc->sc_ifmedia;
 	ifmedia_init(&sc->sc_ifmedia, 0, iee_mediachange, iee_mediastatus);
 	if (media != NULL) {
 		for (n = 0 ; n < nmedia ; n++)
@@ -833,12 +835,6 @@ iee_ioctl(struct ifnet *ifp, u_long cmd,
 
 	s = splnet();
 	switch (cmd) {
-	case SIOCSIFMEDIA:
-	case SIOCGIFMEDIA:
-		err = ifmedia_ioctl(ifp, (struct ifreq *)data,
-		    &sc->sc_ifmedia, cmd);
-		break;
-
 	default:
 		err = ether_ioctl(ifp, cmd, data);
 		if (err == ENETRESET) {

Index: src/sys/dev/ic/lance.c
diff -u src/sys/dev/ic/lance.c:1.57 src/sys/dev/ic/lance.c:1.58
--- src/sys/dev/ic/lance.c:1.57	Tue May 28 07:41:48 2019
+++ src/sys/dev/ic/lance.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: lance.c,v 1.57 2019/05/28 07:41:48 msaitoh Exp $	*/
+/*	$NetBSD: lance.c,v 1.58 2019/05/29 10:07:29 msaitoh Exp $	*/
 
 /*-
  * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
@@ -65,7 +65,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lance.c,v 1.57 2019/05/28 07:41:48 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lance.c,v 1.58 2019/05/29 10:07:29 msaitoh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -182,6 +182,7 @@ lance_config(struct lance_softc *sc)
 	IFQ_SET_READY(&ifp->if_snd);
 
 	/* Initialize ifmedia structures. */
+	sc->sc_ethercom.ec_ifmedia = &sc->sc_media;
 	ifmedia_init(&sc->sc_media, 0, lance_mediachange, lance_mediastatus);
 	if (sc->sc_supmedia != NULL) {
 		for (i = 0; i < sc->sc_nsupmedia; i++)
@@ -516,16 +517,11 @@ int
 lance_ioctl(struct ifnet *ifp, u_long cmd, void *data)
 {
 	struct lance_softc *sc = ifp->if_softc;
-	struct ifreq *ifr = (struct ifreq *)data;
 	int s, error = 0;
 
 	s = splnet();
 
 	switch (cmd) {
-	case SIOCGIFMEDIA:
-	case SIOCSIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->sc_media, cmd);
-		break;
 	default:
 		if ((error = ether_ioctl(ifp, cmd, data)) != ENETRESET)
 			break;

Index: src/sys/dev/ic/lemac.c
diff -u src/sys/dev/ic/lemac.c:1.53 src/sys/dev/ic/lemac.c:1.54
--- src/sys/dev/ic/lemac.c:1.53	Tue May 28 07:41:48 2019
+++ src/sys/dev/ic/lemac.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: lemac.c,v 1.53 2019/05/28 07:41:48 msaitoh Exp $ */
+/* $NetBSD: lemac.c,v 1.54 2019/05/29 10:07:29 msaitoh Exp $ */
 
 /*-
  * Copyright (c) 1994, 1995, 1997 Matt Thomas <m...@3am-software.com>
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lemac.c,v 1.53 2019/05/28 07:41:48 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lemac.c,v 1.54 2019/05/29 10:07:29 msaitoh Exp $");
 
 #include "opt_inet.h"
 
@@ -771,12 +771,6 @@ lemac_ifioctl(
 		}
 		break;
 
-	case SIOCSIFMEDIA:
-	case SIOCGIFMEDIA:
-		error = ifmedia_ioctl(ifp, (struct ifreq *)data,
-		    &sc->sc_ifmedia, cmd);
-		break;
-
 	default:
 		error = ether_ioctl(ifp, cmd, data);
 		break;
@@ -981,9 +975,10 @@ lemac_ifattach(lemac_softc_t *sc)
 		rnd_attach_source(&sc->rnd_source, device_xname(sc->sc_dev),
 		    RND_TYPE_NET, RND_FLAG_DEFAULT);
 
+		/* Initialize ifmedia structures. */
+		sc->sc_ec.ec_ifmedia = &sc->sc_ifmedia;
 		ifmedia_init(&sc->sc_ifmedia, 0,
-		    lemac_ifmedia_change,
-		    lemac_ifmedia_status);
+		    lemac_ifmedia_change, lemac_ifmedia_status);
 		if (sc->sc_prodname[4] == '5')	/* DE205 is UTP/AUI */
 			ifmedia_add(&sc->sc_ifmedia, IFM_ETHER | IFM_AUTO,
 			    0, 0);

Index: src/sys/dev/ic/mb86950.c
diff -u src/sys/dev/ic/mb86950.c:1.31 src/sys/dev/ic/mb86950.c:1.32
--- src/sys/dev/ic/mb86950.c:1.31	Thu May 23 13:10:51 2019
+++ src/sys/dev/ic/mb86950.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: mb86950.c,v 1.31 2019/05/23 13:10:51 msaitoh Exp $	*/
+/*	$NetBSD: mb86950.c,v 1.32 2019/05/29 10:07:29 msaitoh Exp $	*/
 
 /*
  * All Rights Reserved, Copyright (C) Fujitsu Limited 1995
@@ -67,7 +67,7 @@
   */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mb86950.c,v 1.31 2019/05/23 13:10:51 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mb86950.c,v 1.32 2019/05/29 10:07:29 msaitoh Exp $");
 
 /*
  * Device driver for Fujitsu mb86950 based Ethernet cards.
@@ -276,6 +276,7 @@ mb86950_config(struct mb86950_softc *sc,
 	/* XXX The Tiara LANCard uses board jumpers to change media.
 	 *       This code may have to be changed for other cards.
 	 */
+	sc->sc_ec.ec_ifmedia = &sc->sc_media;
 	ifmedia_init(&sc->sc_media, 0, mb86950_mediachange,
 	    mb86950_mediastatus);
 	ifmedia_add(&sc->sc_media, IFM_ETHER | IFM_MANUAL, 0, NULL);
@@ -428,7 +429,6 @@ mb86950_ioctl(struct ifnet *ifp, unsigne
 {
 	struct mb86950_softc *sc = ifp->if_softc;
 	struct ifaddr *ifa = (struct ifaddr *)data;
-	struct ifreq *ifr = (struct ifreq *)data;
 
 	int s, error = 0;
 
@@ -504,11 +504,6 @@ mb86950_ioctl(struct ifnet *ifp, unsigne
 #endif
 		break;
 
-	case SIOCGIFMEDIA:
-	case SIOCSIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->sc_media, cmd);
-		break;
-
 	default:
 		error = ether_ioctl(ifp, cmd, data);
 		break;

Index: src/sys/dev/ic/mb86960.c
diff -u src/sys/dev/ic/mb86960.c:1.92 src/sys/dev/ic/mb86960.c:1.93
--- src/sys/dev/ic/mb86960.c:1.92	Tue May 28 07:41:48 2019
+++ src/sys/dev/ic/mb86960.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: mb86960.c,v 1.92 2019/05/28 07:41:48 msaitoh Exp $	*/
+/*	$NetBSD: mb86960.c,v 1.93 2019/05/29 10:07:29 msaitoh Exp $	*/
 
 /*
  * All Rights Reserved, Copyright (C) Fujitsu Limited 1995
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mb86960.c,v 1.92 2019/05/28 07:41:48 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mb86960.c,v 1.93 2019/05/29 10:07:29 msaitoh Exp $");
 
 /*
  * Device driver for Fujitsu MB86960A/MB86965A based Ethernet cards.
@@ -229,6 +229,7 @@ mb86960_config(struct mb86960_softc *sc,
 	}
 
 	/* Initialize media goo. */
+	sc->sc_ec.ec_ifmedia = &sc->sc_media;
 	ifmedia_init(&sc->sc_media, 0, mb86960_mediachange,
 	    mb86960_mediastatus);
 	if (media != NULL) {
@@ -1159,7 +1160,6 @@ mb86960_ioctl(struct ifnet *ifp, u_long 
 {
 	struct mb86960_softc *sc = ifp->if_softc;
 	struct ifaddr *ifa = (struct ifaddr *)data;
-	struct ifreq *ifr = (struct ifreq *)data;
 	int s, error = 0;
 
 #if FE_DEBUG >= 3
@@ -1248,11 +1248,6 @@ mb86960_ioctl(struct ifnet *ifp, u_long 
 		}
 		break;
 
-	case SIOCGIFMEDIA:
-	case SIOCSIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->sc_media, cmd);
-		break;
-
 	default:
 		error = ether_ioctl(ifp, cmd, data);
 		break;

Index: src/sys/dev/ic/pdq_ifsubr.c
diff -u src/sys/dev/ic/pdq_ifsubr.c:1.66 src/sys/dev/ic/pdq_ifsubr.c:1.67
--- src/sys/dev/ic/pdq_ifsubr.c:1.66	Tue May 28 07:41:48 2019
+++ src/sys/dev/ic/pdq_ifsubr.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: pdq_ifsubr.c,v 1.66 2019/05/28 07:41:48 msaitoh Exp $	*/
+/*	$NetBSD: pdq_ifsubr.c,v 1.67 2019/05/29 10:07:29 msaitoh Exp $	*/
 
 /*-
  * Copyright (c) 1995, 1996 Matt Thomas <m...@3am-software.com>
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pdq_ifsubr.c,v 1.66 2019/05/28 07:41:48 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pdq_ifsubr.c,v 1.67 2019/05/29 10:07:29 msaitoh Exp $");
 
 #ifdef __NetBSD__
 #include "opt_inet.h"
@@ -436,15 +436,6 @@ pdq_ifioctl(struct ifnet *ifp, ioctl_cmd
 	}
 #endif /* SIOCSIFMTU */
 
-#if defined(IFM_FDDI) && defined(SIOCSIFMEDIA)
-	case SIOCSIFMEDIA:
-	case SIOCGIFMEDIA: {
-		struct ifreq *ifr = (struct ifreq *)data;
-		error = ifmedia_ioctl(ifp, ifr, &sc->sc_ifmedia, cmd);
-		break;
-	}
-#endif
-
 	default: {
 		error = ether_ioctl(ifp, cmd, data);
 		break;
@@ -479,6 +470,9 @@ pdq_ifattach(pdq_softc_t *sc, ifnet_ret_
 #if defined(IFM_FDDI)
 	{
 	const int media = sc->sc_ifmedia.ifm_media;
+
+	/* Initialize ifmedia structures. */
+	PDQ_FDDICOM(sc)->ec_ifmedia = &sc->sc_ifmedia;
 	ifmedia_init(&sc->sc_ifmedia, IFM_FDX,
 	    pdq_ifmedia_change, pdq_ifmedia_status);
 	ifmedia_add(&sc->sc_ifmedia, media, 0, 0);

Index: src/sys/dev/ic/tropic.c
diff -u src/sys/dev/ic/tropic.c:1.52 src/sys/dev/ic/tropic.c:1.53
--- src/sys/dev/ic/tropic.c:1.52	Tue Feb  5 06:17:02 2019
+++ src/sys/dev/ic/tropic.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: tropic.c,v 1.52 2019/02/05 06:17:02 msaitoh Exp $	*/
+/*	$NetBSD: tropic.c,v 1.53 2019/05/29 10:07:29 msaitoh Exp $	*/
 
 /*
  * Ported to NetBSD by Onno van der Linden
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tropic.c,v 1.52 2019/02/05 06:17:02 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tropic.c,v 1.53 2019/05/29 10:07:29 msaitoh Exp $");
 
 #include "opt_inet.h"
 
@@ -396,6 +396,8 @@ tr_attach(struct tr_softc *sc)
 		}
 	}
 
+	/* Initialize ifmedia structures. */
+	sc->sc_ethercom.ec_ifmedia = &sc->sc_media;
 	ifmedia_init(&sc->sc_media, 0, tr_mediachange, tr_mediastatus);
 	if (mediaptr != NULL) {
 		for (i = 0; i < nmedia; i++)
@@ -1547,10 +1549,6 @@ tr_ioctl(struct ifnet *ifp, u_long cmd, 
 			break;
 		}
 		break;
-	case SIOCGIFMEDIA:
-	case SIOCSIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->sc_media, cmd);
-		break;
 	case SIOCSIFMTU:
 		if (ifr->ifr_mtu > sc->sc_maxmtu)
 			error = EINVAL;

Index: src/sys/dev/isa/if_iy.c
diff -u src/sys/dev/isa/if_iy.c:1.108 src/sys/dev/isa/if_iy.c:1.109
--- src/sys/dev/isa/if_iy.c:1.108	Tue May 28 07:41:49 2019
+++ src/sys/dev/isa/if_iy.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_iy.c,v 1.108 2019/05/28 07:41:49 msaitoh Exp $	*/
+/*	$NetBSD: if_iy.c,v 1.109 2019/05/29 10:07:29 msaitoh Exp $	*/
 /* #define IYDEBUG */
 /* #define IYMEMDEBUG */
 
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_iy.c,v 1.108 2019/05/28 07:41:49 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_iy.c,v 1.109 2019/05/29 10:07:29 msaitoh Exp $");
 
 #include "opt_inet.h"
 
@@ -334,6 +334,8 @@ iyattach(device_t parent, device_t self,
 	myaddr[5] = eaddr[EEPPEther2] & 0xFF;
 	myaddr[4] = eaddr[EEPPEther2] >> 8;
 
+	/* Initialize ifmedia structures. */
+	sc->sc_ethercom.ec_ifmedia = &sc->iy_ifmedia;
 	ifmedia_init(&sc->iy_ifmedia, 0, iy_mediachange, iy_mediastatus);
 	ifmedia_add(&sc->iy_ifmedia, IFM_ETHER | IFM_10_2, 0, NULL);
 	ifmedia_add(&sc->iy_ifmedia, IFM_ETHER | IFM_10_5, 0, NULL);
@@ -1161,12 +1163,10 @@ iyioctl(struct ifnet *ifp, u_long cmd, v
 {
 	struct iy_softc *sc;
 	struct ifaddr *ifa;
-	struct ifreq *ifr;
 	int s, error = 0;
 
 	sc = ifp->if_softc;
 	ifa = (struct ifaddr *)data;
-	ifr = (struct ifreq *)data;
 
 #ifdef IYDEBUG
 	printf("iyioctl called with ifp %p (%s) cmd 0x%lx data %p\n",
@@ -1246,10 +1246,6 @@ iyioctl(struct ifnet *ifp, u_long cmd, v
 		}
 		break;
 
-	case SIOCSIFMEDIA:
-	case SIOCGIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->iy_ifmedia, cmd);
-		break;
 	default:
 		error = ether_ioctl(ifp, cmd, data);
 	}

Index: src/sys/dev/pci/if_bge.c
diff -u src/sys/dev/pci/if_bge.c:1.333 src/sys/dev/pci/if_bge.c:1.334
--- src/sys/dev/pci/if_bge.c:1.333	Tue May 28 07:41:49 2019
+++ src/sys/dev/pci/if_bge.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_bge.c,v 1.333 2019/05/28 07:41:49 msaitoh Exp $	*/
+/*	$NetBSD: if_bge.c,v 1.334 2019/05/29 10:07:29 msaitoh Exp $	*/
 
 /*
  * Copyright (c) 2001 Wind River Systems
@@ -79,7 +79,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_bge.c,v 1.333 2019/05/28 07:41:49 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_bge.c,v 1.334 2019/05/29 10:07:29 msaitoh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -3870,7 +3870,9 @@ bge_attach(device_t parent, device_t sel
 	prop_dictionary_set_uint32(dict, "phyflags", sc->bge_phy_flags);
 	prop_dictionary_set_uint32(dict, "chipid", sc->bge_chipid);
 
+	/* Initialize ifmedia structures. */
 	if (sc->bge_flags & BGEF_FIBER_TBI) {
+		sc->ethercom.ec_ifmedia = &sc->bge_ifmedia;
 		ifmedia_init(&sc->bge_ifmedia, IFM_IMASK, bge_ifmedia_upd,
 		    bge_ifmedia_sts);
 		ifmedia_add(&sc->bge_ifmedia, IFM_ETHER |IFM_1000_SX, 0, NULL);
@@ -3891,6 +3893,7 @@ bge_attach(device_t parent, device_t sel
 		BGE_CLRBIT(sc, BGE_MODE_CTL, BGE_MODECTL_STACKUP);
 		bge_asf_driver_up(sc);
 
+		sc->ethercom.ec_mii = mii;
 		ifmedia_init(&mii->mii_media, 0, bge_ifmedia_upd,
 			     bge_ifmedia_sts);
 		mii_flags = MIIF_DOPAUSE;
@@ -5814,8 +5817,7 @@ bge_ioctl(struct ifnet *ifp, u_long comm
 			}
 			sc->bge_flowflags = ifr->ifr_media & IFM_ETH_FMASK;
 		}
-		/* FALLTHROUGH */
-	case SIOCGIFMEDIA:
+
 		if (sc->bge_flags & BGEF_FIBER_TBI) {
 			error = ifmedia_ioctl(ifp, ifr, &sc->bge_ifmedia,
 			    command);

Index: src/sys/dev/pci/if_de.c
diff -u src/sys/dev/pci/if_de.c:1.162 src/sys/dev/pci/if_de.c:1.163
--- src/sys/dev/pci/if_de.c:1.162	Tue May 28 07:41:49 2019
+++ src/sys/dev/pci/if_de.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_de.c,v 1.162 2019/05/28 07:41:49 msaitoh Exp $	*/
+/*	$NetBSD: if_de.c,v 1.163 2019/05/29 10:07:29 msaitoh Exp $	*/
 
 /*-
  * Copyright (c) 1994-1997 Matt Thomas (m...@3am-software.com)
@@ -37,7 +37,7 @@
  *   board which support 21040, 21041, or 21140 (mostly).
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_de.c,v 1.162 2019/05/28 07:41:49 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_de.c,v 1.163 2019/05/29 10:07:29 msaitoh Exp $");
 
 #define	TULIP_HDR_DATA
 
@@ -4821,11 +4821,6 @@ tulip_ifioctl(struct ifnet *ifp, unsigne
 			break;
 		tulip_init(sc);
 		break;
-	case SIOCSIFMEDIA:
-	case SIOCGIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->tulip_ifmedia, cmd);
-		break;
-
 	case SIOCADDMULTI:
 	case SIOCDELMULTI:
 		/*
@@ -5089,6 +5084,9 @@ tulip_attach(tulip_softc_t * const sc)
 #endif
 
 	(*sc->tulip_boardsw->bd_media_probe)(sc);
+
+	/* Initialize ifmedia structures. */
+	TULIP_ETHERCOM(sc)->ec_ifmedia = &sc->tulip_ifmedia;
 	ifmedia_init(&sc->tulip_ifmedia, 0,
 	    tulip_ifmedia_change, tulip_ifmedia_status);
 	sc->tulip_flags &= ~TULIP_DEVICEPROBE;

Index: src/sys/dev/pci/if_dge.c
diff -u src/sys/dev/pci/if_dge.c:1.54 src/sys/dev/pci/if_dge.c:1.55
--- src/sys/dev/pci/if_dge.c:1.54	Tue May 28 07:41:49 2019
+++ src/sys/dev/pci/if_dge.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_dge.c,v 1.54 2019/05/28 07:41:49 msaitoh Exp $ */
+/*	$NetBSD: if_dge.c,v 1.55 2019/05/29 10:07:29 msaitoh Exp $ */
 
 /*
  * Copyright (c) 2004, SUNET, Swedish University Computer Network.
@@ -80,7 +80,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_dge.c,v 1.54 2019/05/28 07:41:49 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_dge.c,v 1.55 2019/05/29 10:07:29 msaitoh Exp $");
 
 
 
@@ -908,6 +908,7 @@ dge_attach(device_t parent, device_t sel
 	/*
 	 * Setup media stuff.
 	 */
+	sc->sc_ethercom.ec_ifmedia = &sc->sc_media;
 	ifmedia_init(&sc->sc_media, IFM_IMASK, dge_xgmii_mediachange,
 	    dge_xgmii_mediastatus);
 	if (dgep->dgep_flags & DGEP_F_10G_SR) {
@@ -1454,11 +1455,6 @@ dge_ioctl(struct ifnet *ifp, u_long cmd,
 	s = splnet();
 
 	switch (cmd) {
-	case SIOCSIFMEDIA:
-	case SIOCGIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->sc_media, cmd);
-		break;
-
 	case SIOCSIFMTU:
 		if (ifr->ifr_mtu < ETHERMIN || ifr->ifr_mtu > DGE_MAX_MTU)
 			error = EINVAL;

Index: src/sys/dev/pci/if_ena.c
diff -u src/sys/dev/pci/if_ena.c:1.14 src/sys/dev/pci/if_ena.c:1.15
--- src/sys/dev/pci/if_ena.c:1.14	Fri Apr 26 04:33:00 2019
+++ src/sys/dev/pci/if_ena.c	Wed May 29 10:07:29 2019
@@ -31,7 +31,7 @@
 #if 0
 __FBSDID("$FreeBSD: head/sys/dev/ena/ena.c 333456 2018-05-10 09:37:54Z mw $");
 #endif
-__KERNEL_RCSID(0, "$NetBSD: if_ena.c,v 1.14 2019/04/26 04:33:00 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ena.c,v 1.15 2019/05/29 10:07:29 msaitoh Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -2371,11 +2371,6 @@ ena_ioctl(struct ifnet *ifp, u_long comm
 	case SIOCDELMULTI:
 		break;
 
-	case SIOCSIFMEDIA:
-	case SIOCGIFMEDIA:
-		rc = ifmedia_ioctl(ifp, ifr, &adapter->media, command);
-		break;
-
 	case SIOCSIFCAP:
 		{
 			struct ifcapreq *ifcr = data;
@@ -2542,6 +2537,7 @@ ena_setup_ifnet(device_t pdev, struct en
 	 * Specify the media types supported by this adapter and register
 	 * callbacks to update media and link information
 	 */
+	adapter->sc_ec.ec_ifmedia = &adapter->media;
 	ifmedia_init(&adapter->media, IFM_IMASK,
 	    ena_media_change, ena_media_status);
 	ifmedia_add(&adapter->media, IFM_ETHER | IFM_AUTO, 0, NULL);

Index: src/sys/dev/pci/if_kse.c
diff -u src/sys/dev/pci/if_kse.c:1.37 src/sys/dev/pci/if_kse.c:1.38
--- src/sys/dev/pci/if_kse.c:1.37	Tue May 28 07:41:49 2019
+++ src/sys/dev/pci/if_kse.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_kse.c,v 1.37 2019/05/28 07:41:49 msaitoh Exp $	*/
+/*	$NetBSD: if_kse.c,v 1.38 2019/05/29 10:07:29 msaitoh Exp $	*/
 
 /*-
  * Copyright (c) 2006 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_kse.c,v 1.37 2019/05/28 07:41:49 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_kse.c,v 1.38 2019/05/29 10:07:29 msaitoh Exp $");
 
 
 #include <sys/param.h>
@@ -490,7 +490,9 @@ kse_attach(device_t parent, device_t sel
 	callout_init(&sc->sc_callout, 0);
 	callout_init(&sc->sc_stat_ch, 0);
 
+	/* Initialize ifmedia structures. */
 	ifm = &sc->sc_media;
+	sc->sc_ethercom.ec_ifmedia = ifm;
 	if (sc->sc_chip == 0x8841) {
 		ifmedia_init(ifm, 0, ifmedia_upd, ifmedia_sts);
 		ifmedia_add(ifm, IFM_ETHER | IFM_10_T, 0, NULL);
@@ -638,17 +640,11 @@ static int
 kse_ioctl(struct ifnet *ifp, u_long cmd, void *data)
 {
 	struct kse_softc *sc = ifp->if_softc;
-	struct ifreq *ifr = (struct ifreq *)data;
 	int s, error;
 
 	s = splnet();
 
 	switch (cmd) {
-	case SIOCSIFMEDIA:
-	case SIOCGIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->sc_media, cmd);
-		break;
-
 	default:
 		if ((error = ether_ioctl(ifp, cmd, data)) != ENETRESET)
 			break;

Index: src/sys/dev/pci/if_ti.c
diff -u src/sys/dev/pci/if_ti.c:1.110 src/sys/dev/pci/if_ti.c:1.111
--- src/sys/dev/pci/if_ti.c:1.110	Tue May 28 07:41:49 2019
+++ src/sys/dev/pci/if_ti.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: if_ti.c,v 1.110 2019/05/28 07:41:49 msaitoh Exp $ */
+/* $NetBSD: if_ti.c,v 1.111 2019/05/29 10:07:29 msaitoh Exp $ */
 
 /*
  * Copyright (c) 1997, 1998, 1999
@@ -81,7 +81,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ti.c,v 1.110 2019/05/28 07:41:49 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ti.c,v 1.111 2019/05/29 10:07:29 msaitoh Exp $");
 
 #include "opt_inet.h"
 
@@ -1841,6 +1841,7 @@ ti_attach(device_t parent, device_t self
 	    IFCAP_CSUM_UDPv4_Tx | IFCAP_CSUM_UDPv4_Rx;
 
 	/* Set up ifmedia support. */
+	sc->ethercom.ec_ifmedia = &sc->ifmedia;
 	ifmedia_init(&sc->ifmedia, IFM_IMASK, ti_ifmedia_upd, ti_ifmedia_sts);
 	if (sc->ti_copper) {
 		/*
@@ -2766,10 +2767,6 @@ ti_ioctl(struct ifnet *ifp, u_long comma
 		sc->ti_if_flags = ifp->if_flags;
 		error = 0;
 		break;
-	case SIOCSIFMEDIA:
-	case SIOCGIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->ifmedia, command);
-		break;
 	default:
 		if ((error = ether_ioctl(ifp, command, data)) != ENETRESET)
 			break;

Index: src/sys/dev/pci/if_txp.c
diff -u src/sys/dev/pci/if_txp.c:1.56 src/sys/dev/pci/if_txp.c:1.57
--- src/sys/dev/pci/if_txp.c:1.56	Tue May 28 07:41:49 2019
+++ src/sys/dev/pci/if_txp.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: if_txp.c,v 1.56 2019/05/28 07:41:49 msaitoh Exp $ */
+/* $NetBSD: if_txp.c,v 1.57 2019/05/29 10:07:29 msaitoh Exp $ */
 
 /*
  * Copyright (c) 2001
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_txp.c,v 1.56 2019/05/28 07:41:49 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_txp.c,v 1.57 2019/05/29 10:07:29 msaitoh Exp $");
 
 #include "opt_inet.h"
 
@@ -291,6 +291,8 @@ txp_attach(device_t parent, device_t sel
 	    ether_sprintf(enaddr));
 	sc->sc_cold = 0;
 
+	/* Initialize ifmedia structures. */
+	sc->sc_arpcom.ec_ifmedia = &sc->sc_ifmedia;
 	ifmedia_init(&sc->sc_ifmedia, 0, txp_ifmedia_upd, txp_ifmedia_sts);
 	if (flags & TXP_FIBER) {
 		ifmedia_add(&sc->sc_ifmedia, IFM_ETHER | IFM_100_FX,
@@ -1249,7 +1251,6 @@ int
 txp_ioctl(struct ifnet *ifp, u_long command, void *data)
 {
 	struct txp_softc *sc = ifp->if_softc;
-	struct ifreq *ifr = (struct ifreq *)data;
 	struct ifaddr *ifa = (struct ifaddr *)data;
 	int s, error = 0;
 
@@ -1303,10 +1304,6 @@ txp_ioctl(struct ifnet *ifp, u_long comm
 			txp_set_filter(sc);
 		}
 		break;
-	case SIOCGIFMEDIA:
-	case SIOCSIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->sc_ifmedia, command);
-		break;
 	default:
 		error = ether_ioctl(ifp, command, data);
 		break;

Index: src/sys/dev/pci/if_xge.c
diff -u src/sys/dev/pci/if_xge.c:1.31 src/sys/dev/pci/if_xge.c:1.32
--- src/sys/dev/pci/if_xge.c:1.31	Tue May 28 07:41:49 2019
+++ src/sys/dev/pci/if_xge.c	Wed May 29 10:07:29 2019
@@ -1,4 +1,4 @@
-/*      $NetBSD: if_xge.c,v 1.31 2019/05/28 07:41:49 msaitoh Exp $ */
+/*      $NetBSD: if_xge.c,v 1.32 2019/05/29 10:07:29 msaitoh Exp $ */
 
 /*
  * Copyright (c) 2004, SUNET, Swedish University Computer Network.
@@ -43,7 +43,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_xge.c,v 1.31 2019/05/28 07:41:49 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_xge.c,v 1.32 2019/05/29 10:07:29 msaitoh Exp $");
 
 
 #include <sys/param.h>
@@ -517,6 +517,7 @@ xge_attach(device_t parent, device_t sel
 	/*
 	 * Setup media stuff.
 	 */
+	sc->sc_ethercom.ec_ifmedia = &sc->xena_media;
 	ifmedia_init(&sc->xena_media, IFM_IMASK, xge_xgmii_mediachange,
 	    xge_ifmedia_status);
 	ifmedia_add(&sc->xena_media, IFM_ETHER | IFM_10G_LR, 0, NULL);
@@ -853,11 +854,6 @@ xge_ioctl(struct ifnet *ifp, u_long cmd,
 		}
 		break;
 
-	case SIOCGIFMEDIA:
-	case SIOCSIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->xena_media, cmd);
-		break;
-
 	default:
 		if ((error = ether_ioctl(ifp, cmd, data)) != ENETRESET)
 			break;

Index: src/sys/dev/pci/ixgbe/ixgbe.c
diff -u src/sys/dev/pci/ixgbe/ixgbe.c:1.186 src/sys/dev/pci/ixgbe/ixgbe.c:1.187
--- src/sys/dev/pci/ixgbe/ixgbe.c:1.186	Thu May 23 13:10:52 2019
+++ src/sys/dev/pci/ixgbe/ixgbe.c	Wed May 29 10:07:30 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe.c,v 1.186 2019/05/23 13:10:52 msaitoh Exp $ */
+/* $NetBSD: ixgbe.c,v 1.187 2019/05/29 10:07:30 msaitoh Exp $ */
 
 /******************************************************************************
 
@@ -1372,6 +1372,7 @@ ixgbe_setup_interface(device_t dev, stru
 	 * Specify the media types supported by this adapter and register
 	 * callbacks to update media and link information
 	 */
+	ec->ec_ifmedia = &adapter->media;
 	ifmedia_init(&adapter->media, IFM_IMASK, ixgbe_media_change,
 	    ixgbe_media_status);
 
@@ -6231,9 +6232,6 @@ ixgbe_ioctl(struct ifnet * ifp, u_long c
 	}
 
 	switch (command) {
-	case SIOCSIFMEDIA:
-	case SIOCGIFMEDIA:
-		return ifmedia_ioctl(ifp, ifr, &adapter->media, command);
 	case SIOCGI2C:
 	{
 		struct ixgbe_i2c_req	i2c;

Index: src/sys/dev/pci/ixgbe/ixv.c
diff -u src/sys/dev/pci/ixgbe/ixv.c:1.114 src/sys/dev/pci/ixgbe/ixv.c:1.115
--- src/sys/dev/pci/ixgbe/ixv.c:1.114	Thu May 23 13:10:52 2019
+++ src/sys/dev/pci/ixgbe/ixv.c	Wed May 29 10:07:30 2019
@@ -1,4 +1,4 @@
-/*$NetBSD: ixv.c,v 1.114 2019/05/23 13:10:52 msaitoh Exp $*/
+/*$NetBSD: ixv.c,v 1.115 2019/05/29 10:07:30 msaitoh Exp $*/
 
 /******************************************************************************
 
@@ -1572,6 +1572,7 @@ ixv_setup_interface(device_t dev, struct
 	 * Specify the media types supported by this adapter and register
 	 * callbacks to update media and link information
 	 */
+	ec->ec_ifmedia = &adapter->media;
 	ifmedia_init(&adapter->media, IFM_IMASK, ixv_media_change,
 	    ixv_media_status);
 	ifmedia_add(&adapter->media, IFM_ETHER | IFM_AUTO, 0, NULL);
@@ -2776,7 +2777,6 @@ ixv_ioctl(struct ifnet *ifp, u_long comm
 {
 	struct adapter	*adapter = ifp->if_softc;
 	struct ifcapreq *ifcr = data;
-	struct ifreq	*ifr = data;
 	int		error = 0;
 	int l4csum_en;
 	const int l4csum = IFCAP_CSUM_TCPv4_Rx | IFCAP_CSUM_UDPv4_Rx |
@@ -2806,9 +2806,6 @@ ixv_ioctl(struct ifnet *ifp, u_long comm
 	}
 
 	switch (command) {
-	case SIOCSIFMEDIA:
-	case SIOCGIFMEDIA:
-		return ifmedia_ioctl(ifp, ifr, &adapter->media, command);
 	case SIOCSIFCAP:
 		/* Layer-4 Rx checksum offload has to be turned on and
 		 * off as a unit.

Index: src/sys/dev/sbus/be.c
diff -u src/sys/dev/sbus/be.c:1.93 src/sys/dev/sbus/be.c:1.94
--- src/sys/dev/sbus/be.c:1.93	Tue May 28 07:41:49 2019
+++ src/sys/dev/sbus/be.c	Wed May 29 10:07:30 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: be.c,v 1.93 2019/05/28 07:41:49 msaitoh Exp $	*/
+/*	$NetBSD: be.c,v 1.94 2019/05/29 10:07:30 msaitoh Exp $	*/
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -57,7 +57,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: be.c,v 1.93 2019/05/28 07:41:49 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: be.c,v 1.94 2019/05/29 10:07:30 msaitoh Exp $");
 
 #include "opt_ddb.h"
 #include "opt_inet.h"
@@ -337,6 +337,7 @@ beattach(device_t parent, device_t self,
 	mii->mii_writereg = be_mii_writereg;
 	mii->mii_statchg = be_mii_statchg;
 
+	sc->sc_ethercom.ec_mii = mii;
 	ifmedia_init(&mii->mii_media, 0, be_ifmedia_upd, be_ifmedia_sts);
 
 	/*
@@ -932,9 +933,10 @@ berint(struct be_softc *sc)
 int
 beioctl(struct ifnet *ifp, u_long cmd, void *data)
 {
+#ifdef BEDEBUG
 	struct be_softc *sc = ifp->if_softc;
+#endif
 	struct ifaddr *ifa = data;
-	struct ifreq *ifr = data;
 	int s, error = 0;
 
 	s = splnet();
@@ -991,10 +993,6 @@ beioctl(struct ifnet *ifp, u_long cmd, v
 #endif
 		break;
 
-	case SIOCGIFMEDIA:
-	case SIOCSIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->sc_media, cmd);
-		break;
 	default:
 		if ((error = ether_ioctl(ifp, cmd, data)) == ENETRESET) {
 			/*

Index: src/sys/dev/sbus/qe.c
diff -u src/sys/dev/sbus/qe.c:1.74 src/sys/dev/sbus/qe.c:1.75
--- src/sys/dev/sbus/qe.c:1.74	Tue May 28 07:41:49 2019
+++ src/sys/dev/sbus/qe.c	Wed May 29 10:07:30 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: qe.c,v 1.74 2019/05/28 07:41:49 msaitoh Exp $	*/
+/*	$NetBSD: qe.c,v 1.75 2019/05/29 10:07:30 msaitoh Exp $	*/
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: qe.c,v 1.74 2019/05/28 07:41:49 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: qe.c,v 1.75 2019/05/29 10:07:30 msaitoh Exp $");
 
 #define QEDEBUG
 
@@ -283,6 +283,7 @@ qeattach(device_t parent, device_t self,
 	sc->sc_rb.rb_dmabase = sc->sc_dmamap->dm_segs[0].ds_addr;
 
 	/* Initialize media properties */
+	sc->sc_ethercom.ec_ifmedia = &sc->sc_ifmedia;
 	ifmedia_init(&sc->sc_ifmedia, 0, qe_ifmedia_upd, qe_ifmedia_sts);
 	ifmedia_add(&sc->sc_ifmedia,
 		    IFM_MAKEWORD(IFM_ETHER, IFM_10_T, 0, 0),
@@ -872,7 +873,6 @@ qeioctl(struct ifnet *ifp, u_long cmd, v
 {
 	struct qe_softc *sc = ifp->if_softc;
 	struct ifaddr *ifa = data;
-	struct ifreq *ifr = data;
 	int s, error = 0;
 
 	s = splnet();
@@ -939,11 +939,6 @@ qeioctl(struct ifnet *ifp, u_long cmd, v
 		}
 		break;
 
-	case SIOCGIFMEDIA:
-	case SIOCSIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->sc_ifmedia, cmd);
-		break;
-
 	default:
 		error = ether_ioctl(ifp, cmd, data);
 		break;

Index: src/sys/net/if_ether.h
diff -u src/sys/net/if_ether.h:1.78 src/sys/net/if_ether.h:1.79
--- src/sys/net/if_ether.h:1.78	Wed May 15 02:56:48 2019
+++ src/sys/net/if_ether.h	Wed May 29 10:07:30 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ether.h,v 1.78 2019/05/15 02:56:48 ozaki-r Exp $	*/
+/*	$NetBSD: if_ether.h,v 1.79 2019/05/29 10:07:30 msaitoh Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1993
@@ -183,6 +183,7 @@ struct ethercom {
 	int	ec_nvlans;			/* # VLANs on this interface */
 	/* The device handle for the MII bus child device. */
 	struct mii_data				*ec_mii;
+	struct ifmedia				*ec_ifmedia;
 	/* Called after a change to ec_if.if_flags.  Returns
 	 * ENETRESET if the device should be reinitialized with
 	 * ec_if.if_init, 0 on success, not 0 on failure.

Index: src/sys/net/if_ethersubr.c
diff -u src/sys/net/if_ethersubr.c:1.274 src/sys/net/if_ethersubr.c:1.275
--- src/sys/net/if_ethersubr.c:1.274	Wed May 15 02:56:48 2019
+++ src/sys/net/if_ethersubr.c	Wed May 29 10:07:30 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ethersubr.c,v 1.274 2019/05/15 02:56:48 ozaki-r Exp $	*/
+/*	$NetBSD: if_ethersubr.c,v 1.275 2019/05/29 10:07:30 msaitoh Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ethersubr.c,v 1.274 2019/05/15 02:56:48 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ethersubr.c,v 1.275 2019/05/29 10:07:30 msaitoh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -1503,9 +1503,14 @@ ether_ioctl(struct ifnet *ifp, u_long cm
 		return ether_delmulti(ifreq_getaddr(cmd, ifr), ec);
 	case SIOCSIFMEDIA:
 	case SIOCGIFMEDIA:
-		if (ec->ec_mii == NULL)
+		if (ec->ec_mii != NULL)
+			return ifmedia_ioctl(ifp, ifr, &ec->ec_mii->mii_media,
+			    cmd);
+		else if (ec->ec_ifmedia != NULL)
+			return ifmedia_ioctl(ifp, ifr, ec->ec_ifmedia, cmd);
+		else
 			return ENOTTY;
-		return ifmedia_ioctl(ifp, ifr, &ec->ec_mii->mii_media, cmd);
+		break;
 	case SIOCALIFADDR:
 		sdl = satocsdl(sstocsa(&iflr->addr));
 		if (sdl->sdl_family != AF_LINK)

Index: src/sys/net/if_tap.c
diff -u src/sys/net/if_tap.c:1.112 src/sys/net/if_tap.c:1.113
--- src/sys/net/if_tap.c:1.112	Tue May 21 09:18:37 2019
+++ src/sys/net/if_tap.c	Wed May 29 10:07:30 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_tap.c,v 1.112 2019/05/21 09:18:37 msaitoh Exp $	*/
+/*	$NetBSD: if_tap.c,v 1.113 2019/05/29 10:07:30 msaitoh Exp $	*/
 
 /*
  *  Copyright (c) 2003, 2004, 2008, 2009 The NetBSD Foundation.
@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_tap.c,v 1.112 2019/05/21 09:18:37 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_tap.c,v 1.113 2019/05/29 10:07:30 msaitoh Exp $");
 
 #if defined(_KERNEL_OPT)
 
@@ -350,6 +350,7 @@ tap_attach(device_t parent, device_t sel
 	 * list of supported media, and in the end, the selection of one
 	 * of them.
 	 */
+	sc->sc_ec.ec_ifmedia = &sc->sc_im;
 	ifmedia_init(&sc->sc_im, 0, tap_mediachange, tap_mediastatus);
 	ifmedia_add(&sc->sc_im, IFM_ETHER | IFM_1000_T, 0, NULL);
 	ifmedia_add(&sc->sc_im, IFM_ETHER | IFM_1000_T | IFM_FDX, 0, NULL);
@@ -573,17 +574,11 @@ tap_softintr(void *cookie)
 static int
 tap_ioctl(struct ifnet *ifp, u_long cmd, void *data)
 {
-	struct tap_softc *sc = (struct tap_softc *)ifp->if_softc;
-	struct ifreq *ifr = (struct ifreq *)data;
 	int s, error;
 
 	s = splnet();
 
 	switch (cmd) {
-	case SIOCSIFMEDIA:
-	case SIOCGIFMEDIA:
-		error = ifmedia_ioctl(ifp, ifr, &sc->sc_im, cmd);
-		break;
 	case SIOCSIFPHYADDR:
 		error = tap_lifaddr(ifp, cmd, (struct ifaliasreq *)data);
 		break;

Reply via email to