Lines Matching +full:phy +full:- +full:s
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
4 * Copyright (c) 2011-2012 Stefan Bethke.
82 static inline int arswitch_portforphy(int phy);
90 static int arswitch_setled(struct arswitch_softc *sc, int phy, int led,
102 sc->page = -1; in arswitch_probe()
106 sc->chip_rev = (id & AR8X16_MASK_CTRL_REV_MASK); in arswitch_probe()
107 sc->chip_ver = (id & AR8X16_MASK_CTRL_VER_MASK) >> AR8X16_MASK_CTRL_VER_SHIFT; in arswitch_probe()
111 sc->sc_switchtype = AR8X16_SWITCH_AR8216; in arswitch_probe()
115 sc->sc_switchtype = AR8X16_SWITCH_AR8226; in arswitch_probe()
117 /* 0x0301 - AR8236 */ in arswitch_probe()
121 sc->sc_switchtype = AR8X16_SWITCH_AR8316; in arswitch_probe()
126 sc->sc_switchtype = AR8X16_SWITCH_AR8327; in arswitch_probe()
127 sc->mii_lo_first = 1; in arswitch_probe()
133 DPRINTF(sc, ARSWITCH_DBG_ANY, "chipname=%s, id=%08x\n", chipname, id); in arswitch_probe()
136 "Atheros %s Ethernet Switch (ver %d rev %d)", in arswitch_probe()
137 chipname, sc->chip_ver, sc->chip_rev); in arswitch_probe()
146 int phy, err = 0; in arswitch_attach_phys() local
150 snprintf(name, IFNAMSIZ, "%sport", device_get_nameunit(sc->sc_dev)); in arswitch_attach_phys()
151 for (phy = 0; phy < sc->numphys; phy++) { in arswitch_attach_phys()
152 sc->ifp[phy] = if_alloc(IFT_ETHER); in arswitch_attach_phys()
153 if_setsoftc(sc->ifp[phy], sc); in arswitch_attach_phys()
154 if_setflagbits(sc->ifp[phy], IFF_UP | IFF_BROADCAST | in arswitch_attach_phys()
156 sc->ifname[phy] = malloc(strlen(name)+1, M_DEVBUF, M_WAITOK); in arswitch_attach_phys()
157 bcopy(name, sc->ifname[phy], strlen(name)+1); in arswitch_attach_phys()
158 if_initname(sc->ifp[phy], sc->ifname[phy], in arswitch_attach_phys()
159 arswitch_portforphy(phy)); in arswitch_attach_phys()
160 err = mii_attach(sc->sc_dev, &sc->miibus[phy], sc->ifp[phy], in arswitch_attach_phys()
162 BMSR_DEFCAPMASK, phy, MII_OFFSET_ANY, 0); in arswitch_attach_phys()
164 DPRINTF(sc->sc_dev, "%s attached to pseudo interface %s\n", in arswitch_attach_phys()
165 device_get_nameunit(sc->miibus[phy]), in arswitch_attach_phys()
166 if_name(sc->ifp[phy])); in arswitch_attach_phys()
169 device_printf(sc->sc_dev, in arswitch_attach_phys()
170 "attaching PHY %d failed\n", in arswitch_attach_phys()
171 phy); in arswitch_attach_phys()
180 sprintf(ledname, "%s%dled%d", name, in arswitch_attach_phys()
181 arswitch_portforphy(phy), led+1); in arswitch_attach_phys()
182 sc->dev_led[phy][led].sc = sc; in arswitch_attach_phys()
183 sc->dev_led[phy][led].phy = phy; in arswitch_attach_phys()
184 sc->dev_led[phy][led].lednum = led; in arswitch_attach_phys()
201 return (-1); in arswitch_reset()
211 if ((mode & sc->info.es_vlan_caps) != mode) in arswitch_set_vlan_mode()
216 sc->vlan_mode = ETHERSWITCH_VLAN_DOT1Q; in arswitch_set_vlan_mode()
219 sc->vlan_mode = ETHERSWITCH_VLAN_PORT; in arswitch_set_vlan_mode()
222 sc->vlan_mode = 0; in arswitch_set_vlan_mode()
226 sc->hal.arswitch_vlan_init_hw(sc); in arswitch_set_vlan_mode()
235 /* Port0 - CPU */ in ar8xxx_port_init()
237 arswitch_writereg(sc->sc_dev, AR8X16_REG_PORT_STS(0), in ar8xxx_port_init()
245 arswitch_writereg(sc->sc_dev, AR8X16_REG_PORT_CTRL(0), in ar8xxx_port_init()
246 arswitch_readreg(sc->sc_dev, AR8X16_REG_PORT_CTRL(0)) & in ar8xxx_port_init()
250 arswitch_writereg(sc->sc_dev, AR8X16_REG_PORT_STS(port), in ar8xxx_port_init()
252 arswitch_writereg(sc->sc_dev, AR8X16_REG_PORT_CTRL(port), in ar8xxx_port_init()
253 arswitch_readreg(sc->sc_dev, AR8X16_REG_PORT_CTRL(port)) & in ar8xxx_port_init()
265 ret = arswitch_waitreg(sc->sc_dev, in ar8xxx_atu_wait_ready()
284 DPRINTF(sc, ARSWITCH_DBG_ATU, "%s: flushing all ports\n", __func__); in ar8xxx_atu_flush()
288 device_printf(sc->sc_dev, "%s: waitreg failed\n", __func__); in ar8xxx_atu_flush()
291 arswitch_writereg(sc->sc_dev, in ar8xxx_atu_flush()
306 DPRINTF(sc, ARSWITCH_DBG_ATU, "%s: flushing port %d\n", __func__, in ar8xxx_atu_flush_port()
321 device_printf(sc->sc_dev, "%s: waitreg failed\n", __func__); in ar8xxx_atu_flush_port()
324 arswitch_writereg(sc->sc_dev, in ar8xxx_atu_flush_port()
350 DPRINTF(sc, ARSWITCH_DBG_ATU, "%s: initializing\n", __func__); in ar8xxx_atu_fetch_table()
353 arswitch_writereg(sc->sc_dev, in ar8xxx_atu_fetch_table()
355 arswitch_writereg(sc->sc_dev, in ar8xxx_atu_fetch_table()
357 arswitch_writereg(sc->sc_dev, in ar8xxx_atu_fetch_table()
362 DPRINTF(sc, ARSWITCH_DBG_ATU, "%s: reading next\n", __func__); in ar8xxx_atu_fetch_table()
370 val = arswitch_readreg(sc->sc_dev, AR8216_REG_ATU); in ar8xxx_atu_fetch_table()
372 arswitch_writereg(sc->sc_dev, AR8216_REG_ATU, val); in ar8xxx_atu_fetch_table()
378 ret0 = arswitch_readreg(sc->sc_dev, AR8216_REG_ATU); in ar8xxx_atu_fetch_table()
379 ret1 = arswitch_readreg(sc->sc_dev, AR8216_REG_ATU_DATA); in ar8xxx_atu_fetch_table()
380 ret2 = arswitch_readreg(sc->sc_dev, AR8216_REG_ATU_CTRL2); in ar8xxx_atu_fetch_table()
384 return (-1); in ar8xxx_atu_fetch_table()
387 e->es_macaddr[5] = MS(ret0, AR8216_ATU_ADDR5); in ar8xxx_atu_fetch_table()
388 e->es_macaddr[4] = MS(ret0, AR8216_ATU_ADDR4); in ar8xxx_atu_fetch_table()
389 e->es_macaddr[3] = MS(ret1, AR8216_ATU_ADDR3); in ar8xxx_atu_fetch_table()
390 e->es_macaddr[2] = MS(ret1, AR8216_ATU_ADDR2); in ar8xxx_atu_fetch_table()
391 e->es_macaddr[1] = MS(ret1, AR8216_ATU_ADDR1); in ar8xxx_atu_fetch_table()
392 e->es_macaddr[0] = MS(ret1, AR8216_ATU_ADDR0); in ar8xxx_atu_fetch_table()
395 e->es_portmask = MS(ret2, AR8216_ATU_CTRL2_DESPORT); in ar8xxx_atu_fetch_table()
399 DPRINTF(sc, ARSWITCH_DBG_ATU, "%s: MAC %6D portmask 0x%08x\n", in ar8xxx_atu_fetch_table()
401 e->es_macaddr, ":", e->es_portmask); in ar8xxx_atu_fetch_table()
404 return (-1); in ar8xxx_atu_fetch_table()
406 return (-1); in ar8xxx_atu_fetch_table()
418 DPRINTF(sc, ARSWITCH_DBG_ATU, "%s: resetting learning\n", __func__); in ar8xxx_atu_learn_default()
423 * + ARP_EN - enable "acknowledgement" of ARP frames - they are in ar8xxx_atu_learn_default()
425 * + LEARN_CHANGE_EN - hash table violations when learning MAC addresses in ar8xxx_atu_learn_default()
428 * + AGE_EN - enable address table aging in ar8xxx_atu_learn_default()
429 * + AGE_TIME - set to 5 minutes in ar8xxx_atu_learn_default()
437 ret = arswitch_writereg(sc->sc_dev, in ar8xxx_atu_learn_default()
442 device_printf(sc->sc_dev, "%s: writereg failed\n", __func__); in ar8xxx_atu_learn_default()
460 char *s; in ar8xxx_hw_get_switch_macaddr() local
462 s = (void *) ea; in ar8xxx_hw_get_switch_macaddr()
464 ret0 = arswitch_readreg(sc->sc_dev, AR8X16_REG_SW_MAC_ADDR0); in ar8xxx_hw_get_switch_macaddr()
465 ret1 = arswitch_readreg(sc->sc_dev, AR8X16_REG_SW_MAC_ADDR1); in ar8xxx_hw_get_switch_macaddr()
467 s[5] = MS(ret0, AR8X16_REG_SW_MAC_ADDR0_BYTE5); in ar8xxx_hw_get_switch_macaddr()
468 s[4] = MS(ret0, AR8X16_REG_SW_MAC_ADDR0_BYTE4); in ar8xxx_hw_get_switch_macaddr()
469 s[3] = MS(ret1, AR8X16_REG_SW_MAC_ADDR1_BYTE3); in ar8xxx_hw_get_switch_macaddr()
470 s[2] = MS(ret1, AR8X16_REG_SW_MAC_ADDR1_BYTE2); in ar8xxx_hw_get_switch_macaddr()
471 s[1] = MS(ret1, AR8X16_REG_SW_MAC_ADDR1_BYTE1); in ar8xxx_hw_get_switch_macaddr()
472 s[0] = MS(ret1, AR8X16_REG_SW_MAC_ADDR1_BYTE0); in ar8xxx_hw_get_switch_macaddr()
501 /* sc->sc_switchtype is already decided in arswitch_probe() */ in arswitch_attach()
502 sc->sc_dev = dev; in arswitch_attach()
503 mtx_init(&sc->sc_mtx, "arswitch", NULL, MTX_DEF); in arswitch_attach()
504 sc->page = -1; in arswitch_attach()
505 strlcpy(sc->info.es_name, device_get_desc(dev), in arswitch_attach()
506 sizeof(sc->info.es_name)); in arswitch_attach()
509 ctx = device_get_sysctl_ctx(sc->sc_dev); in arswitch_attach()
510 tree = device_get_sysctl_tree(sc->sc_dev); in arswitch_attach()
512 "debug", CTLFLAG_RW, &sc->sc_debug, 0, in arswitch_attach()
517 sc->atu.entries = malloc(sizeof(etherswitch_atu_entry_t) * 128, in arswitch_attach()
519 if (sc->atu.entries == NULL) { in arswitch_attach()
520 device_printf(sc->sc_dev, "%s: failed to allocate ATU table\n", in arswitch_attach()
524 sc->atu.count = 0; in arswitch_attach()
525 sc->atu.size = 128; in arswitch_attach()
528 sc->hal.arswitch_port_init = ar8xxx_port_init; in arswitch_attach()
529 sc->hal.arswitch_port_vlan_setup = ar8xxx_port_vlan_setup; in arswitch_attach()
530 sc->hal.arswitch_port_vlan_get = ar8xxx_port_vlan_get; in arswitch_attach()
531 sc->hal.arswitch_vlan_init_hw = ar8xxx_reset_vlans; in arswitch_attach()
532 sc->hal.arswitch_hw_get_switch_macaddr = ar8xxx_hw_get_switch_macaddr; in arswitch_attach()
533 sc->hal.arswitch_hw_set_switch_macaddr = ar8xxx_hw_set_switch_macaddr; in arswitch_attach()
535 sc->hal.arswitch_vlan_getvgroup = ar8xxx_getvgroup; in arswitch_attach()
536 sc->hal.arswitch_vlan_setvgroup = ar8xxx_setvgroup; in arswitch_attach()
538 sc->hal.arswitch_vlan_get_pvid = ar8xxx_get_pvid; in arswitch_attach()
539 sc->hal.arswitch_vlan_set_pvid = ar8xxx_set_pvid; in arswitch_attach()
541 sc->hal.arswitch_get_dot1q_vlan = ar8xxx_get_dot1q_vlan; in arswitch_attach()
542 sc->hal.arswitch_set_dot1q_vlan = ar8xxx_set_dot1q_vlan; in arswitch_attach()
543 sc->hal.arswitch_flush_dot1q_vlan = ar8xxx_flush_dot1q_vlan; in arswitch_attach()
544 sc->hal.arswitch_purge_dot1q_vlan = ar8xxx_purge_dot1q_vlan; in arswitch_attach()
545 sc->hal.arswitch_get_port_vlan = ar8xxx_get_port_vlan; in arswitch_attach()
546 sc->hal.arswitch_set_port_vlan = ar8xxx_set_port_vlan; in arswitch_attach()
548 sc->hal.arswitch_atu_flush = ar8xxx_atu_flush; in arswitch_attach()
549 sc->hal.arswitch_atu_flush_port = ar8xxx_atu_flush_port; in arswitch_attach()
550 sc->hal.arswitch_atu_learn_default = ar8xxx_atu_learn_default; in arswitch_attach()
551 sc->hal.arswitch_atu_fetch_table = ar8xxx_atu_fetch_table; in arswitch_attach()
553 sc->hal.arswitch_phy_read = arswitch_readphy_internal; in arswitch_attach()
554 sc->hal.arswitch_phy_write = arswitch_writephy_internal; in arswitch_attach()
569 "%s: unknown switch (%d)?\n", __func__, sc->sc_switchtype); in arswitch_attach()
574 sc->info.es_nports = 5; /* XXX technically 6, but 6th not used */ in arswitch_attach()
577 sc->numphys = 4; in arswitch_attach()
578 sc->phy4cpu = 1; in arswitch_attach()
579 sc->is_rgmii = 1; in arswitch_attach()
580 sc->is_gmii = 0; in arswitch_attach()
581 sc->is_mii = 0; in arswitch_attach()
584 "numphys", &sc->numphys); in arswitch_attach()
586 "phy4cpu", &sc->phy4cpu); in arswitch_attach()
588 "is_rgmii", &sc->is_rgmii); in arswitch_attach()
590 "is_gmii", &sc->is_gmii); in arswitch_attach()
592 "is_mii", &sc->is_mii); in arswitch_attach()
594 if (sc->numphys > AR8X16_NUM_PHYS) in arswitch_attach()
595 sc->numphys = AR8X16_NUM_PHYS; in arswitch_attach()
600 "%s: arswitch_reset: failed\n", __func__); in arswitch_attach()
604 err = sc->hal.arswitch_hw_setup(sc); in arswitch_attach()
607 "%s: hw_setup: err=%d\n", __func__, err); in arswitch_attach()
611 err = sc->hal.arswitch_hw_global_setup(sc); in arswitch_attach()
614 "%s: hw_global_setup: err=%d\n", __func__, err); in arswitch_attach()
622 err = sc->hal.arswitch_atu_learn_default(sc); in arswitch_attach()
625 "%s: atu_learn_default: err=%d\n", __func__, err); in arswitch_attach()
630 for (port = 0; port <= sc->numphys; port++) { in arswitch_attach()
631 sc->hal.arswitch_port_init(sc, port); in arswitch_attach()
640 "%s: attach_phys: err=%d\n", __func__, err); in arswitch_attach()
648 "%s: set_vlan_mode: err=%d\n", __func__, err); in arswitch_attach()
656 callout_init_mtx(&sc->callout_tick, &sc->sc_mtx, 0); in arswitch_attach()
671 callout_drain(&sc->callout_tick); in arswitch_detach()
677 for (i=0; i < sc->numphys; i++) { in arswitch_detach()
678 if (sc->ifp[i] != NULL) in arswitch_detach()
679 if_free(sc->ifp[i]); in arswitch_detach()
680 free(sc->ifname[i], M_DEVBUF); in arswitch_detach()
683 free(sc->atu.entries, M_DEVBUF); in arswitch_detach()
685 mtx_destroy(&sc->sc_mtx); in arswitch_detach()
691 * Convert PHY number to port number. PHY0 is connected to port 1, PHY1 to
695 arswitch_portforphy(int phy) in arswitch_portforphy() argument
697 return (phy+1); in arswitch_portforphy()
703 int phy = port-1; in arswitch_miiforport() local
705 if (phy < 0 || phy >= sc->numphys) in arswitch_miiforport()
707 return (device_get_softc(sc->miibus[phy])); in arswitch_miiforport()
713 int phy = port-1; in arswitch_ifpforport() local
715 if (phy < 0 || phy >= sc->numphys) in arswitch_ifpforport()
717 return (sc->ifp[phy]); in arswitch_ifpforport()
759 * taken that the resulting ifmedia_active is identical to what the PHY will
774 for (i = 0; i < sc->numphys; i++) { in arswitch_miipollstat()
775 if (sc->miibus[i] == NULL) in arswitch_miipollstat()
777 mii = device_get_softc(sc->miibus[i]); in arswitch_miipollstat()
778 /* XXX This would be nice to have abstracted out to be per-chip */ in arswitch_miipollstat()
781 portstatus = arswitch_readreg(sc->sc_dev, in arswitch_miipollstat()
784 portstatus = arswitch_readreg(sc->sc_dev, in arswitch_miipollstat()
798 if ((mii->mii_media_status & IFM_ACTIVE) == 0 && in arswitch_miipollstat()
800 device_printf(sc->sc_dev, "%s: port %d: port -> UP\n", in arswitch_miipollstat()
806 * and maybe if a port goes up->down? in arswitch_miipollstat()
808 if ((mii->mii_media_status & IFM_ACTIVE) != 0 && in arswitch_miipollstat()
810 device_printf(sc->sc_dev, "%s: port %d: port -> DOWN\n", in arswitch_miipollstat()
815 arswitch_update_ifmedia(portstatus, &mii->mii_media_status, in arswitch_miipollstat()
816 &mii->mii_media_active); in arswitch_miipollstat()
817 LIST_FOREACH(miisc, &mii->mii_phys, mii_list) { in arswitch_miipollstat()
818 if (IFM_INST(mii->mii_media.ifm_cur->ifm_media) != in arswitch_miipollstat()
819 miisc->mii_inst) in arswitch_miipollstat()
825 /* If a port went from down->up, flush the ATU */ in arswitch_miipollstat()
827 sc->hal.arswitch_atu_flush(sc); in arswitch_miipollstat()
836 callout_reset(&sc->callout_tick, hz, arswitch_tick, sc); in arswitch_tick()
862 return (&sc->info); in arswitch_getinfo()
873 sc->hal.arswitch_vlan_get_pvid(sc, p->es_port, &p->es_pvid); in ar8xxx_port_vlan_get()
876 reg = arswitch_readreg(sc->sc_dev, AR8X16_REG_PORT_CTRL(p->es_port)); in ar8xxx_port_vlan_get()
878 p->es_flags |= ETHERSWITCH_PORT_DOUBLE_TAG; in ar8xxx_port_vlan_get()
881 p->es_flags |= ETHERSWITCH_PORT_ADDTAG; in ar8xxx_port_vlan_get()
883 p->es_flags |= ETHERSWITCH_PORT_STRIPTAG; in ar8xxx_port_vlan_get()
908 if (p->es_port < 0 || p->es_port > sc->info.es_nports) in arswitch_getport()
911 err = sc->hal.arswitch_port_vlan_get(sc, p); in arswitch_getport()
915 mii = arswitch_miiforport(sc, p->es_port); in arswitch_getport()
916 if (arswitch_is_cpuport(sc, p->es_port)) { in arswitch_getport()
919 p->es_flags |= ETHERSWITCH_PORT_CPU; in arswitch_getport()
920 ifmr = &p->es_ifmr; in arswitch_getport()
921 ifmr->ifm_count = 0; in arswitch_getport()
922 ifmr->ifm_current = ifmr->ifm_active = in arswitch_getport()
924 ifmr->ifm_mask = 0; in arswitch_getport()
925 ifmr->ifm_status = IFM_ACTIVE | IFM_AVALID; in arswitch_getport()
927 err = ifmedia_ioctl(mii->mii_ifp, &p->es_ifr, in arswitch_getport()
928 &mii->mii_media, SIOCGIFMEDIA); in arswitch_getport()
935 if (!arswitch_is_cpuport(sc, p->es_port) && in arswitch_getport()
938 p->es_nleds = 3; in arswitch_getport()
940 for (led = 0; led < p->es_nleds; led++) in arswitch_getport()
947 ar8327_led_mapping[p->es_port-1][led].reg); in arswitch_getport()
948 val = (val>>ar8327_led_mapping[p->es_port-1][led].shift)&0x03; in arswitch_getport()
959 p->es_led[led] = style; in arswitch_getport()
963 p->es_nleds = 0; in arswitch_getport()
978 if (p->es_pvid != 0) in ar8xxx_port_vlan_setup()
979 sc->hal.arswitch_vlan_set_pvid(sc, p->es_port, p->es_pvid); in ar8xxx_port_vlan_setup()
982 if (p->es_flags & ETHERSWITCH_PORT_ADDTAG && in ar8xxx_port_vlan_setup()
983 p->es_flags & ETHERSWITCH_PORT_STRIPTAG) { in ar8xxx_port_vlan_setup()
989 if (p->es_flags & ETHERSWITCH_PORT_DOUBLE_TAG) in ar8xxx_port_vlan_setup()
991 if (p->es_flags & ETHERSWITCH_PORT_ADDTAG) in ar8xxx_port_vlan_setup()
994 if (p->es_flags & ETHERSWITCH_PORT_STRIPTAG) in ar8xxx_port_vlan_setup()
998 err = arswitch_modifyreg(sc->sc_dev, in ar8xxx_port_vlan_setup()
999 AR8X16_REG_PORT_CTRL(p->es_port), in ar8xxx_port_vlan_setup()
1017 if (p->es_port < 0 || p->es_port > sc->info.es_nports) in arswitch_setport()
1021 if (sc->vlan_mode == ETHERSWITCH_VLAN_DOT1Q) { in arswitch_setport()
1022 err = sc->hal.arswitch_port_vlan_setup(sc, p); in arswitch_setport()
1028 if (arswitch_is_cpuport(sc, p->es_port)) in arswitch_setport()
1036 err = arswitch_setled(sc, p->es_port-1, i, p->es_led[i]); in arswitch_setport()
1042 mii = arswitch_miiforport(sc, p->es_port); in arswitch_setport()
1046 ifp = arswitch_ifpforport(sc, p->es_port); in arswitch_setport()
1048 ifm = &mii->mii_media; in arswitch_setport()
1049 return (ifmedia_ioctl(ifp, &p->es_ifr, ifm, SIOCSIFMEDIA)); in arswitch_setport()
1053 arswitch_setled(struct arswitch_softc *sc, int phy, int led, int style) in arswitch_setled() argument
1058 if (phy < 0 || phy > sc->numphys) in arswitch_setled()
1066 shift = ar8327_led_mapping[phy][led].shift; in arswitch_setled()
1067 err = (arswitch_modifyreg(sc->sc_dev, in arswitch_setled()
1068 ar8327_led_mapping[phy][led].reg, in arswitch_setled()
1080 DPRINTF(sc, ARSWITCH_DBG_POLL, "%s\n", __func__); in arswitch_statchg()
1101 DPRINTF(sc, ARSWITCH_DBG_POLL, "%s\n", __func__); in arswitch_ifmedia_sts()
1106 ifmr->ifm_active = mii->mii_media_active; in arswitch_ifmedia_sts()
1107 ifmr->ifm_status = mii->mii_media_status; in arswitch_ifmedia_sts()
1119 conf->cmd = ETHERSWITCH_CONF_VLAN_MODE; in arswitch_getconf()
1120 conf->vlan_mode = sc->vlan_mode; in arswitch_getconf()
1123 ret = sc->hal.arswitch_hw_get_switch_macaddr(sc, in arswitch_getconf()
1124 &conf->switch_macaddr); in arswitch_getconf()
1126 conf->cmd |= ETHERSWITCH_CONF_SWITCH_MACADDR; in arswitch_getconf()
1141 if (conf->cmd & ETHERSWITCH_CONF_VLAN_MODE) { in arswitch_setconf()
1142 err = arswitch_set_vlan_mode(sc, conf->vlan_mode); in arswitch_setconf()
1160 err = sc->hal.arswitch_atu_flush(sc); in arswitch_atu_flush_all()
1162 sc->atu.count = 0; in arswitch_atu_flush_all()
1175 err = sc->hal.arswitch_atu_flush_port(sc, port); in arswitch_atu_flush_port()
1177 sc->atu.count = 0; in arswitch_atu_flush_port()
1193 err = sc->hal.arswitch_atu_fetch_table(sc, NULL, 0); in arswitch_atu_fetch_table()
1195 /* fetch - ideally yes we'd fetch into a separate table then switch */ in arswitch_atu_fetch_table()
1196 while (err == 0 && nitems < sc->atu.size) { in arswitch_atu_fetch_table()
1197 err = sc->hal.arswitch_atu_fetch_table(sc, in arswitch_atu_fetch_table()
1198 &sc->atu.entries[nitems], 1); in arswitch_atu_fetch_table()
1200 sc->atu.entries[nitems].id = nitems; in arswitch_atu_fetch_table()
1204 sc->atu.count = nitems; in arswitch_atu_fetch_table()
1207 table->es_nitems = nitems; in arswitch_atu_fetch_table()
1219 id = e->id; in arswitch_atu_fetch_table_entry()
1222 if (id > sc->atu.count) { in arswitch_atu_fetch_table_entry()
1227 memcpy(e, &sc->atu.entries[id], sizeof(*e)); in arswitch_atu_fetch_table_entry()
1237 return (sc->hal.arswitch_vlan_getvgroup(sc, e)); in arswitch_getvgroup()
1245 return (sc->hal.arswitch_vlan_setvgroup(sc, e)); in arswitch_setvgroup()
1249 arswitch_readphy(device_t dev, int phy, int reg) in arswitch_readphy() argument
1253 return (sc->hal.arswitch_phy_read(dev, phy, reg)); in arswitch_readphy()
1257 arswitch_writephy(device_t dev, int phy, int reg, int val) in arswitch_writephy() argument
1261 return (sc->hal.arswitch_phy_write(dev, phy, reg, val)); in arswitch_writephy()