1*7a9a30c5Sthorpej /* $NetBSD: mii_ethersubr.c,v 1.3 2020/03/15 23:04:50 thorpej Exp $ */
25c6d6dbdSmsaitoh
35c6d6dbdSmsaitoh /*
45c6d6dbdSmsaitoh * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
55c6d6dbdSmsaitoh * All rights reserved.
65c6d6dbdSmsaitoh *
75c6d6dbdSmsaitoh * Redistribution and use in source and binary forms, with or without
85c6d6dbdSmsaitoh * modification, are permitted provided that the following conditions
95c6d6dbdSmsaitoh * are met:
105c6d6dbdSmsaitoh * 1. Redistributions of source code must retain the above copyright
115c6d6dbdSmsaitoh * notice, this list of conditions and the following disclaimer.
125c6d6dbdSmsaitoh * 2. Redistributions in binary form must reproduce the above copyright
135c6d6dbdSmsaitoh * notice, this list of conditions and the following disclaimer in the
145c6d6dbdSmsaitoh * documentation and/or other materials provided with the distribution.
155c6d6dbdSmsaitoh * 3. Neither the name of the project nor the names of its contributors
165c6d6dbdSmsaitoh * may be used to endorse or promote products derived from this software
175c6d6dbdSmsaitoh * without specific prior written permission.
185c6d6dbdSmsaitoh *
195c6d6dbdSmsaitoh * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
205c6d6dbdSmsaitoh * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
215c6d6dbdSmsaitoh * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
225c6d6dbdSmsaitoh * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
235c6d6dbdSmsaitoh * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
245c6d6dbdSmsaitoh * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
255c6d6dbdSmsaitoh * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
265c6d6dbdSmsaitoh * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
275c6d6dbdSmsaitoh * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
285c6d6dbdSmsaitoh * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
295c6d6dbdSmsaitoh * SUCH DAMAGE.
305c6d6dbdSmsaitoh */
315c6d6dbdSmsaitoh
325c6d6dbdSmsaitoh /*
335c6d6dbdSmsaitoh * Copyright (c) 1982, 1989, 1993
345c6d6dbdSmsaitoh * The Regents of the University of California. All rights reserved.
355c6d6dbdSmsaitoh *
365c6d6dbdSmsaitoh * Redistribution and use in source and binary forms, with or without
375c6d6dbdSmsaitoh * modification, are permitted provided that the following conditions
385c6d6dbdSmsaitoh * are met:
395c6d6dbdSmsaitoh * 1. Redistributions of source code must retain the above copyright
405c6d6dbdSmsaitoh * notice, this list of conditions and the following disclaimer.
415c6d6dbdSmsaitoh * 2. Redistributions in binary form must reproduce the above copyright
425c6d6dbdSmsaitoh * notice, this list of conditions and the following disclaimer in the
435c6d6dbdSmsaitoh * documentation and/or other materials provided with the distribution.
445c6d6dbdSmsaitoh * 3. Neither the name of the University nor the names of its contributors
455c6d6dbdSmsaitoh * may be used to endorse or promote products derived from this software
465c6d6dbdSmsaitoh * without specific prior written permission.
475c6d6dbdSmsaitoh *
485c6d6dbdSmsaitoh * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
495c6d6dbdSmsaitoh * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
505c6d6dbdSmsaitoh * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
515c6d6dbdSmsaitoh * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
525c6d6dbdSmsaitoh * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
535c6d6dbdSmsaitoh * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
545c6d6dbdSmsaitoh * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
555c6d6dbdSmsaitoh * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
565c6d6dbdSmsaitoh * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
575c6d6dbdSmsaitoh * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
585c6d6dbdSmsaitoh * SUCH DAMAGE.
595c6d6dbdSmsaitoh *
605c6d6dbdSmsaitoh * @(#)if_ethersubr.c 8.2 (Berkeley) 4/4/96
615c6d6dbdSmsaitoh */
625c6d6dbdSmsaitoh
635c6d6dbdSmsaitoh #include <sys/cdefs.h>
64*7a9a30c5Sthorpej __KERNEL_RCSID(0, "$NetBSD: mii_ethersubr.c,v 1.3 2020/03/15 23:04:50 thorpej Exp $");
65*7a9a30c5Sthorpej
66*7a9a30c5Sthorpej #define __IFMEDIA_PRIVATE
675c6d6dbdSmsaitoh
6860e2cd65Sdyoung #include <sys/param.h>
6960e2cd65Sdyoung #include <sys/systm.h>
7060e2cd65Sdyoung #include <sys/kernel.h>
7160e2cd65Sdyoung #include <sys/errno.h>
7260e2cd65Sdyoung #include <sys/device.h>
7360e2cd65Sdyoung
7460e2cd65Sdyoung #include <net/if.h>
7560e2cd65Sdyoung #include <net/if_types.h>
7660e2cd65Sdyoung
7760e2cd65Sdyoung #include <net/if_ether.h>
7860e2cd65Sdyoung #include <net/if_media.h>
7960e2cd65Sdyoung #include <dev/mii/mii.h>
8060e2cd65Sdyoung #include <dev/mii/miivar.h>
8160e2cd65Sdyoung
8260e2cd65Sdyoung int
ether_mediachange(struct ifnet * ifp)8360e2cd65Sdyoung ether_mediachange(struct ifnet *ifp)
8460e2cd65Sdyoung {
8560e2cd65Sdyoung struct ethercom *ec = (struct ethercom *)ifp;
8660e2cd65Sdyoung int rc;
8760e2cd65Sdyoung
8860e2cd65Sdyoung KASSERT(ec->ec_mii != NULL);
89*7a9a30c5Sthorpej KASSERT(mii_locked(ec->ec_mii) ||
90*7a9a30c5Sthorpej ifmedia_islegacy(&ec->ec_mii->mii_media));
9160e2cd65Sdyoung
9260e2cd65Sdyoung if ((ifp->if_flags & IFF_UP) == 0)
9360e2cd65Sdyoung return 0;
9460e2cd65Sdyoung if ((rc = mii_mediachg(ec->ec_mii)) == ENXIO)
9560e2cd65Sdyoung return 0;
9660e2cd65Sdyoung return rc;
9760e2cd65Sdyoung }
9860e2cd65Sdyoung
9960e2cd65Sdyoung void
ether_mediastatus(struct ifnet * ifp,struct ifmediareq * ifmr)10060e2cd65Sdyoung ether_mediastatus(struct ifnet *ifp, struct ifmediareq *ifmr)
10160e2cd65Sdyoung {
10260e2cd65Sdyoung struct ethercom *ec = (struct ethercom *)ifp;
10360e2cd65Sdyoung struct mii_data *mii;
10460e2cd65Sdyoung
10560e2cd65Sdyoung KASSERT(ec->ec_mii != NULL);
106*7a9a30c5Sthorpej KASSERT(mii_locked(ec->ec_mii) ||
107*7a9a30c5Sthorpej ifmedia_islegacy(&ec->ec_mii->mii_media));
10860e2cd65Sdyoung
10960e2cd65Sdyoung #ifdef notyet
11060e2cd65Sdyoung if ((ifp->if_flags & IFF_RUNNING) == 0) {
11160e2cd65Sdyoung ifmr->ifm_active = IFM_ETHER | IFM_NONE;
11260e2cd65Sdyoung ifmr->ifm_status = 0;
11360e2cd65Sdyoung return;
11460e2cd65Sdyoung }
11560e2cd65Sdyoung #endif
11660e2cd65Sdyoung
11760e2cd65Sdyoung mii = ec->ec_mii;
11860e2cd65Sdyoung
11960e2cd65Sdyoung mii_pollstat(mii);
12060e2cd65Sdyoung ifmr->ifm_active = mii->mii_media_active;
12160e2cd65Sdyoung ifmr->ifm_status = mii->mii_media_status;
12260e2cd65Sdyoung }
123