Lines Matching refs:sc_if
399 struct msk_if_softc *sc_if; in msk_miibus_readreg() local
401 sc_if = device_get_softc(dev); in msk_miibus_readreg()
403 return (msk_phy_readreg(sc_if, phy, reg)); in msk_miibus_readreg()
407 msk_phy_readreg(struct msk_if_softc *sc_if, int phy, int reg) in msk_phy_readreg() argument
412 sc = sc_if->msk_softc; in msk_phy_readreg()
414 GMAC_WRITE_2(sc, sc_if->msk_port, GM_SMI_CTRL, in msk_phy_readreg()
419 val = GMAC_READ_2(sc, sc_if->msk_port, GM_SMI_CTRL); in msk_phy_readreg()
421 val = GMAC_READ_2(sc, sc_if->msk_port, GM_SMI_DATA); in msk_phy_readreg()
427 if_printf(sc_if->msk_ifp, "phy failed to come ready\n"); in msk_phy_readreg()
437 struct msk_if_softc *sc_if; in msk_miibus_writereg() local
439 sc_if = device_get_softc(dev); in msk_miibus_writereg()
441 return (msk_phy_writereg(sc_if, phy, reg, val)); in msk_miibus_writereg()
445 msk_phy_writereg(struct msk_if_softc *sc_if, int phy, int reg, int val) in msk_phy_writereg() argument
450 sc = sc_if->msk_softc; in msk_phy_writereg()
452 GMAC_WRITE_2(sc, sc_if->msk_port, GM_SMI_DATA, val); in msk_phy_writereg()
453 GMAC_WRITE_2(sc, sc_if->msk_port, GM_SMI_CTRL, in msk_phy_writereg()
457 if ((GMAC_READ_2(sc, sc_if->msk_port, GM_SMI_CTRL) & in msk_phy_writereg()
462 if_printf(sc_if->msk_ifp, "phy write timeout\n"); in msk_phy_writereg()
471 struct msk_if_softc *sc_if; in msk_miibus_statchg() local
476 sc_if = device_get_softc(dev); in msk_miibus_statchg()
477 sc = sc_if->msk_softc; in msk_miibus_statchg()
479 MSK_IF_LOCK_ASSERT(sc_if); in msk_miibus_statchg()
481 mii = device_get_softc(sc_if->msk_miibus); in msk_miibus_statchg()
482 ifp = sc_if->msk_ifp; in msk_miibus_statchg()
487 sc_if->msk_flags &= ~MSK_FLAG_LINK; in msk_miibus_statchg()
493 sc_if->msk_flags |= MSK_FLAG_LINK; in msk_miibus_statchg()
499 if ((sc_if->msk_flags & MSK_FLAG_FASTETHER) == 0) in msk_miibus_statchg()
500 sc_if->msk_flags |= MSK_FLAG_LINK; in msk_miibus_statchg()
507 if ((sc_if->msk_flags & MSK_FLAG_LINK) != 0) { in msk_miibus_statchg()
509 CSR_WRITE_1(sc, MR_ADDR(sc_if->msk_port, GMAC_IRQ_MSK), in msk_miibus_statchg()
540 GMAC_WRITE_2(sc, sc_if->msk_port, GM_GP_CTRL, gmac); in msk_miibus_statchg()
542 GMAC_READ_2(sc, sc_if->msk_port, GM_GP_CTRL); in msk_miibus_statchg()
549 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, GMAC_CTRL), gmac); in msk_miibus_statchg()
552 msk_phy_writereg(sc_if, PHY_ADDR_MARV, in msk_miibus_statchg()
559 msk_phy_writereg(sc_if, PHY_ADDR_MARV, PHY_MARV_INT_MASK, 0); in msk_miibus_statchg()
561 gmac = GMAC_READ_2(sc, sc_if->msk_port, GM_GP_CTRL); in msk_miibus_statchg()
564 GMAC_WRITE_2(sc, sc_if->msk_port, GM_GP_CTRL, gmac); in msk_miibus_statchg()
566 GMAC_READ_2(sc, sc_if->msk_port, GM_GP_CTRL); in msk_miibus_statchg()
587 msk_rxfilter(struct msk_if_softc *sc_if) in msk_rxfilter() argument
594 sc = sc_if->msk_softc; in msk_rxfilter()
596 MSK_IF_LOCK_ASSERT(sc_if); in msk_rxfilter()
598 ifp = sc_if->msk_ifp; in msk_rxfilter()
601 mode = GMAC_READ_2(sc, sc_if->msk_port, GM_RX_CTRL); in msk_rxfilter()
615 GMAC_WRITE_2(sc, sc_if->msk_port, GM_MC_ADDR_H1, in msk_rxfilter()
617 GMAC_WRITE_2(sc, sc_if->msk_port, GM_MC_ADDR_H2, in msk_rxfilter()
619 GMAC_WRITE_2(sc, sc_if->msk_port, GM_MC_ADDR_H3, in msk_rxfilter()
621 GMAC_WRITE_2(sc, sc_if->msk_port, GM_MC_ADDR_H4, in msk_rxfilter()
623 GMAC_WRITE_2(sc, sc_if->msk_port, GM_RX_CTRL, mode); in msk_rxfilter()
627 msk_setvlan(struct msk_if_softc *sc_if, if_t ifp) in msk_setvlan() argument
631 sc = sc_if->msk_softc; in msk_setvlan()
633 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, RX_GMF_CTRL_T), in msk_setvlan()
635 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, TX_GMF_CTRL_T), in msk_setvlan()
638 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, RX_GMF_CTRL_T), in msk_setvlan()
640 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, TX_GMF_CTRL_T), in msk_setvlan()
646 msk_rx_fill(struct msk_if_softc *sc_if, int jumbo) in msk_rx_fill() argument
651 if ((sc_if->msk_flags & MSK_FLAG_DESCV2) == 0 && in msk_rx_fill()
652 (if_getcapenable(sc_if->msk_ifp) & IFCAP_RXCSUM) != 0) { in msk_rx_fill()
656 idx = CSR_READ_2(sc_if->msk_softc, in msk_rx_fill()
657 Y2_PREF_Q_ADDR(sc_if->msk_rxq, in msk_rx_fill()
663 device_printf(sc_if->msk_if_dev, in msk_rx_fill()
673 if (msk_jumbo_newbuf(sc_if, 0) != 0) in msk_rx_fill()
675 bus_dmamap_sync(sc_if->msk_cdata.msk_jumbo_rx_ring_tag, in msk_rx_fill()
676 sc_if->msk_cdata.msk_jumbo_rx_ring_map, in msk_rx_fill()
679 if (msk_newbuf(sc_if, 0) != 0) in msk_rx_fill()
681 bus_dmamap_sync(sc_if->msk_cdata.msk_rx_ring_tag, in msk_rx_fill()
682 sc_if->msk_cdata.msk_rx_ring_map, in msk_rx_fill()
685 sc_if->msk_cdata.msk_rx_prod = 0; in msk_rx_fill()
686 CSR_WRITE_2(sc_if->msk_softc, in msk_rx_fill()
687 Y2_PREF_Q_ADDR(sc_if->msk_rxq, PREF_UNIT_PUT_IDX_REG), in msk_rx_fill()
688 sc_if->msk_cdata.msk_rx_prod); in msk_rx_fill()
694 msk_init_rx_ring(struct msk_if_softc *sc_if) in msk_init_rx_ring() argument
700 MSK_IF_LOCK_ASSERT(sc_if); in msk_init_rx_ring()
702 sc_if->msk_cdata.msk_rx_cons = 0; in msk_init_rx_ring()
703 sc_if->msk_cdata.msk_rx_prod = 0; in msk_init_rx_ring()
704 sc_if->msk_cdata.msk_rx_putwm = MSK_PUT_WM; in msk_init_rx_ring()
706 rd = &sc_if->msk_rdata; in msk_init_rx_ring()
709 rxd = &sc_if->msk_cdata.msk_rxdesc[prod]; in msk_init_rx_ring()
717 if ((sc_if->msk_flags & MSK_FLAG_DESCV2) == 0 && in msk_init_rx_ring()
718 (if_getcapenable(sc_if->msk_ifp) & IFCAP_RXCSUM) != 0) { in msk_init_rx_ring()
720 rxd = &sc_if->msk_cdata.msk_rxdesc[prod]; in msk_init_rx_ring()
727 MSK_INC(sc_if->msk_cdata.msk_rx_cons, MSK_RX_RING_CNT); in msk_init_rx_ring()
729 rxd = &sc_if->msk_cdata.msk_rxdesc[prod]; in msk_init_rx_ring()
736 MSK_INC(sc_if->msk_cdata.msk_rx_cons, MSK_RX_RING_CNT); in msk_init_rx_ring()
740 if (msk_newbuf(sc_if, prod) != 0) in msk_init_rx_ring()
745 bus_dmamap_sync(sc_if->msk_cdata.msk_rx_ring_tag, in msk_init_rx_ring()
746 sc_if->msk_cdata.msk_rx_ring_map, in msk_init_rx_ring()
750 sc_if->msk_cdata.msk_rx_prod = prod; in msk_init_rx_ring()
751 CSR_WRITE_2(sc_if->msk_softc, in msk_init_rx_ring()
752 Y2_PREF_Q_ADDR(sc_if->msk_rxq, PREF_UNIT_PUT_IDX_REG), in msk_init_rx_ring()
753 (sc_if->msk_cdata.msk_rx_prod + MSK_RX_RING_CNT - 1) % in msk_init_rx_ring()
755 if (msk_rx_fill(sc_if, 0) != 0) in msk_init_rx_ring()
761 msk_init_jumbo_rx_ring(struct msk_if_softc *sc_if) in msk_init_jumbo_rx_ring() argument
767 MSK_IF_LOCK_ASSERT(sc_if); in msk_init_jumbo_rx_ring()
769 sc_if->msk_cdata.msk_rx_cons = 0; in msk_init_jumbo_rx_ring()
770 sc_if->msk_cdata.msk_rx_prod = 0; in msk_init_jumbo_rx_ring()
771 sc_if->msk_cdata.msk_rx_putwm = MSK_PUT_WM; in msk_init_jumbo_rx_ring()
773 rd = &sc_if->msk_rdata; in msk_init_jumbo_rx_ring()
777 rxd = &sc_if->msk_cdata.msk_jumbo_rxdesc[prod]; in msk_init_jumbo_rx_ring()
785 if ((sc_if->msk_flags & MSK_FLAG_DESCV2) == 0 && in msk_init_jumbo_rx_ring()
786 (if_getcapenable(sc_if->msk_ifp) & IFCAP_RXCSUM) != 0) { in msk_init_jumbo_rx_ring()
788 rxd = &sc_if->msk_cdata.msk_jumbo_rxdesc[prod]; in msk_init_jumbo_rx_ring()
795 MSK_INC(sc_if->msk_cdata.msk_rx_cons, MSK_JUMBO_RX_RING_CNT); in msk_init_jumbo_rx_ring()
797 rxd = &sc_if->msk_cdata.msk_jumbo_rxdesc[prod]; in msk_init_jumbo_rx_ring()
804 MSK_INC(sc_if->msk_cdata.msk_rx_cons, MSK_JUMBO_RX_RING_CNT); in msk_init_jumbo_rx_ring()
808 if (msk_jumbo_newbuf(sc_if, prod) != 0) in msk_init_jumbo_rx_ring()
813 bus_dmamap_sync(sc_if->msk_cdata.msk_jumbo_rx_ring_tag, in msk_init_jumbo_rx_ring()
814 sc_if->msk_cdata.msk_jumbo_rx_ring_map, in msk_init_jumbo_rx_ring()
818 sc_if->msk_cdata.msk_rx_prod = prod; in msk_init_jumbo_rx_ring()
819 CSR_WRITE_2(sc_if->msk_softc, in msk_init_jumbo_rx_ring()
820 Y2_PREF_Q_ADDR(sc_if->msk_rxq, PREF_UNIT_PUT_IDX_REG), in msk_init_jumbo_rx_ring()
821 (sc_if->msk_cdata.msk_rx_prod + MSK_JUMBO_RX_RING_CNT - 1) % in msk_init_jumbo_rx_ring()
823 if (msk_rx_fill(sc_if, 1) != 0) in msk_init_jumbo_rx_ring()
829 msk_init_tx_ring(struct msk_if_softc *sc_if) in msk_init_tx_ring() argument
835 sc_if->msk_cdata.msk_tso_mtu = 0; in msk_init_tx_ring()
836 sc_if->msk_cdata.msk_last_csum = 0; in msk_init_tx_ring()
837 sc_if->msk_cdata.msk_tx_prod = 0; in msk_init_tx_ring()
838 sc_if->msk_cdata.msk_tx_cons = 0; in msk_init_tx_ring()
839 sc_if->msk_cdata.msk_tx_cnt = 0; in msk_init_tx_ring()
840 sc_if->msk_cdata.msk_tx_high_addr = 0; in msk_init_tx_ring()
842 rd = &sc_if->msk_rdata; in msk_init_tx_ring()
845 txd = &sc_if->msk_cdata.msk_txdesc[i]; in msk_init_tx_ring()
850 bus_dmamap_sync(sc_if->msk_cdata.msk_tx_ring_tag, in msk_init_tx_ring()
851 sc_if->msk_cdata.msk_tx_ring_map, in msk_init_tx_ring()
856 msk_discard_rxbuf(struct msk_if_softc *sc_if, int idx) in msk_discard_rxbuf() argument
863 rxd = &sc_if->msk_cdata.msk_rxdesc[idx]; in msk_discard_rxbuf()
868 rxd = &sc_if->msk_cdata.msk_rxdesc[idx]; in msk_discard_rxbuf()
875 msk_discard_jumbo_rxbuf(struct msk_if_softc *sc_if, int idx) in msk_discard_jumbo_rxbuf() argument
882 rxd = &sc_if->msk_cdata.msk_jumbo_rxdesc[idx]; in msk_discard_jumbo_rxbuf()
887 rxd = &sc_if->msk_cdata.msk_jumbo_rxdesc[idx]; in msk_discard_jumbo_rxbuf()
894 msk_newbuf(struct msk_if_softc *sc_if, int idx) in msk_newbuf() argument
908 if ((sc_if->msk_flags & MSK_FLAG_RAMBUF) == 0) in msk_newbuf()
915 if (bus_dmamap_load_mbuf_sg(sc_if->msk_cdata.msk_rx_tag, in msk_newbuf()
916 sc_if->msk_cdata.msk_rx_sparemap, m, segs, &nsegs, in msk_newbuf()
923 rxd = &sc_if->msk_cdata.msk_rxdesc[idx]; in msk_newbuf()
929 rxd = &sc_if->msk_cdata.msk_rxdesc[idx]; in msk_newbuf()
932 bus_dmamap_sync(sc_if->msk_cdata.msk_rx_tag, rxd->rx_dmamap, in msk_newbuf()
934 bus_dmamap_unload(sc_if->msk_cdata.msk_rx_tag, rxd->rx_dmamap); in msk_newbuf()
938 rxd->rx_dmamap = sc_if->msk_cdata.msk_rx_sparemap; in msk_newbuf()
939 sc_if->msk_cdata.msk_rx_sparemap = map; in msk_newbuf()
940 bus_dmamap_sync(sc_if->msk_cdata.msk_rx_tag, rxd->rx_dmamap, in msk_newbuf()
952 msk_jumbo_newbuf(struct msk_if_softc *sc_if, int idx) in msk_jumbo_newbuf() argument
965 if ((sc_if->msk_flags & MSK_FLAG_RAMBUF) == 0) in msk_jumbo_newbuf()
972 if (bus_dmamap_load_mbuf_sg(sc_if->msk_cdata.msk_jumbo_rx_tag, in msk_jumbo_newbuf()
973 sc_if->msk_cdata.msk_jumbo_rx_sparemap, m, segs, &nsegs, in msk_jumbo_newbuf()
980 rxd = &sc_if->msk_cdata.msk_jumbo_rxdesc[idx]; in msk_jumbo_newbuf()
986 rxd = &sc_if->msk_cdata.msk_jumbo_rxdesc[idx]; in msk_jumbo_newbuf()
989 bus_dmamap_sync(sc_if->msk_cdata.msk_jumbo_rx_tag, in msk_jumbo_newbuf()
991 bus_dmamap_unload(sc_if->msk_cdata.msk_jumbo_rx_tag, in msk_jumbo_newbuf()
996 rxd->rx_dmamap = sc_if->msk_cdata.msk_jumbo_rx_sparemap; in msk_jumbo_newbuf()
997 sc_if->msk_cdata.msk_jumbo_rx_sparemap = map; in msk_jumbo_newbuf()
998 bus_dmamap_sync(sc_if->msk_cdata.msk_jumbo_rx_tag, rxd->rx_dmamap, in msk_jumbo_newbuf()
1015 struct msk_if_softc *sc_if; in msk_mediachange() local
1019 sc_if = if_getsoftc(ifp); in msk_mediachange()
1021 MSK_IF_LOCK(sc_if); in msk_mediachange()
1022 mii = device_get_softc(sc_if->msk_miibus); in msk_mediachange()
1024 MSK_IF_UNLOCK(sc_if); in msk_mediachange()
1035 struct msk_if_softc *sc_if; in msk_mediastatus() local
1038 sc_if = if_getsoftc(ifp); in msk_mediastatus()
1039 MSK_IF_LOCK(sc_if); in msk_mediastatus()
1041 MSK_IF_UNLOCK(sc_if); in msk_mediastatus()
1044 mii = device_get_softc(sc_if->msk_miibus); in msk_mediastatus()
1049 MSK_IF_UNLOCK(sc_if); in msk_mediastatus()
1055 struct msk_if_softc *sc_if; in msk_ioctl() local
1060 sc_if = if_getsoftc(ifp); in msk_ioctl()
1066 MSK_IF_LOCK(sc_if); in msk_ioctl()
1071 if ((sc_if->msk_flags & MSK_FLAG_JUMBO) == 0) { in msk_ioctl()
1073 MSK_IF_UNLOCK(sc_if); in msk_ioctl()
1076 if ((sc_if->msk_flags & in msk_ioctl()
1088 msk_init_locked(sc_if); in msk_ioctl()
1091 MSK_IF_UNLOCK(sc_if); in msk_ioctl()
1094 MSK_IF_LOCK(sc_if); in msk_ioctl()
1097 ((if_getflags(ifp) ^ sc_if->msk_if_flags) & in msk_ioctl()
1099 msk_rxfilter(sc_if); in msk_ioctl()
1100 else if ((sc_if->msk_flags & MSK_FLAG_DETACH) == 0) in msk_ioctl()
1101 msk_init_locked(sc_if); in msk_ioctl()
1103 msk_stop(sc_if); in msk_ioctl()
1104 sc_if->msk_if_flags = if_getflags(ifp); in msk_ioctl()
1105 MSK_IF_UNLOCK(sc_if); in msk_ioctl()
1109 MSK_IF_LOCK(sc_if); in msk_ioctl()
1111 msk_rxfilter(sc_if); in msk_ioctl()
1112 MSK_IF_UNLOCK(sc_if); in msk_ioctl()
1116 mii = device_get_softc(sc_if->msk_miibus); in msk_ioctl()
1121 MSK_IF_LOCK(sc_if); in msk_ioctl()
1134 if ((sc_if->msk_flags & MSK_FLAG_DESCV2) == 0) in msk_ioctl()
1157 msk_setvlan(sc_if, ifp); in msk_ioctl()
1160 (sc_if->msk_flags & MSK_FLAG_JUMBO_NOCSUM) != 0) { in msk_ioctl()
1167 msk_init_locked(sc_if); in msk_ioctl()
1169 MSK_IF_UNLOCK(sc_if); in msk_ioctl()
1589 struct msk_if_softc *sc_if; in msk_attach() local
1599 sc_if = device_get_softc(dev); in msk_attach()
1604 sc_if->msk_if_dev = dev; in msk_attach()
1605 sc_if->msk_port = port; in msk_attach()
1606 sc_if->msk_softc = sc; in msk_attach()
1607 sc_if->msk_flags = sc->msk_pflags; in msk_attach()
1608 sc->msk_if[port] = sc_if; in msk_attach()
1611 sc_if->msk_txq = Q_XA1; in msk_attach()
1612 sc_if->msk_txsq = Q_XS1; in msk_attach()
1613 sc_if->msk_rxq = Q_R1; in msk_attach()
1615 sc_if->msk_txq = Q_XA2; in msk_attach()
1616 sc_if->msk_txsq = Q_XS2; in msk_attach()
1617 sc_if->msk_rxq = Q_R2; in msk_attach()
1620 callout_init_mtx(&sc_if->msk_tick_ch, &sc_if->msk_softc->msk_mtx, 0); in msk_attach()
1621 msk_sysctl_node(sc_if); in msk_attach()
1623 if ((error = msk_txrx_dma_alloc(sc_if)) != 0) in msk_attach()
1625 msk_rx_dma_jalloc(sc_if); in msk_attach()
1627 ifp = sc_if->msk_ifp = if_alloc(IFT_ETHER); in msk_attach()
1628 if_setsoftc(ifp, sc_if); in msk_attach()
1636 if ((sc_if->msk_flags & MSK_FLAG_DESCV2) == 0 && in msk_attach()
1639 if ((sc_if->msk_flags & MSK_FLAG_DESCV2) != 0 && in msk_attach()
1640 (sc_if->msk_flags & MSK_FLAG_NORX_CSUM) == 0) in msk_attach()
1658 MSK_IF_LOCK(sc_if); in msk_attach()
1665 MSK_IF_UNLOCK(sc_if); in msk_attach()
1667 MSK_IF_LOCK(sc_if); in msk_attach()
1671 if ((sc_if->msk_flags & MSK_FLAG_NOHWVLAN) == 0) { in msk_attach()
1683 if ((sc_if->msk_flags & MSK_FLAG_DESCV2) != 0 && in msk_attach()
1684 (sc_if->msk_flags & MSK_FLAG_NORX_CSUM) == 0) in msk_attach()
1692 if ((sc_if->msk_flags & MSK_FLAG_DESCV2) == 0) in msk_attach()
1705 MSK_IF_UNLOCK(sc_if); in msk_attach()
1706 error = mii_attach(dev, &sc_if->msk_miibus, ifp, msk_mediachange, in msk_attach()
1710 device_printf(sc_if->msk_if_dev, "attaching PHYs failed\n"); in msk_attach()
2002 struct msk_if_softc *sc_if; in msk_detach() local
2005 sc_if = device_get_softc(dev); in msk_detach()
2006 KASSERT(mtx_initialized(&sc_if->msk_softc->msk_mtx), in msk_detach()
2008 MSK_IF_LOCK(sc_if); in msk_detach()
2010 ifp = sc_if->msk_ifp; in msk_detach()
2013 sc_if->msk_flags |= MSK_FLAG_DETACH; in msk_detach()
2014 msk_stop(sc_if); in msk_detach()
2016 MSK_IF_UNLOCK(sc_if); in msk_detach()
2017 callout_drain(&sc_if->msk_tick_ch); in msk_detach()
2020 MSK_IF_LOCK(sc_if); in msk_detach()
2023 msk_rx_dma_jfree(sc_if); in msk_detach()
2024 msk_txrx_dma_free(sc_if); in msk_detach()
2027 sc = sc_if->msk_softc; in msk_detach()
2028 sc->msk_if[sc_if->msk_port] = NULL; in msk_detach()
2029 MSK_IF_UNLOCK(sc_if); in msk_detach()
2182 msk_txrx_dma_alloc(struct msk_if_softc *sc_if) in msk_txrx_dma_alloc() argument
2192 bus_get_dma_tag(sc_if->msk_if_dev), /* parent */ in msk_txrx_dma_alloc()
2202 &sc_if->msk_cdata.msk_parent_tag); in msk_txrx_dma_alloc()
2204 device_printf(sc_if->msk_if_dev, in msk_txrx_dma_alloc()
2209 error = bus_dma_tag_create(sc_if->msk_cdata.msk_parent_tag,/* parent */ in msk_txrx_dma_alloc()
2219 &sc_if->msk_cdata.msk_tx_ring_tag); in msk_txrx_dma_alloc()
2221 device_printf(sc_if->msk_if_dev, in msk_txrx_dma_alloc()
2227 error = bus_dma_tag_create(sc_if->msk_cdata.msk_parent_tag,/* parent */ in msk_txrx_dma_alloc()
2237 &sc_if->msk_cdata.msk_rx_ring_tag); in msk_txrx_dma_alloc()
2239 device_printf(sc_if->msk_if_dev, in msk_txrx_dma_alloc()
2245 error = bus_dma_tag_create(sc_if->msk_cdata.msk_parent_tag,/* parent */ in msk_txrx_dma_alloc()
2255 &sc_if->msk_cdata.msk_tx_tag); in msk_txrx_dma_alloc()
2257 device_printf(sc_if->msk_if_dev, in msk_txrx_dma_alloc()
2267 if ((sc_if->msk_flags & MSK_FLAG_RAMBUF) != 0) in msk_txrx_dma_alloc()
2270 error = bus_dma_tag_create(sc_if->msk_cdata.msk_parent_tag,/* parent */ in msk_txrx_dma_alloc()
2280 &sc_if->msk_cdata.msk_rx_tag); in msk_txrx_dma_alloc()
2282 device_printf(sc_if->msk_if_dev, in msk_txrx_dma_alloc()
2288 error = bus_dmamem_alloc(sc_if->msk_cdata.msk_tx_ring_tag, in msk_txrx_dma_alloc()
2289 (void **)&sc_if->msk_rdata.msk_tx_ring, BUS_DMA_WAITOK | in msk_txrx_dma_alloc()
2290 BUS_DMA_COHERENT | BUS_DMA_ZERO, &sc_if->msk_cdata.msk_tx_ring_map); in msk_txrx_dma_alloc()
2292 device_printf(sc_if->msk_if_dev, in msk_txrx_dma_alloc()
2298 error = bus_dmamap_load(sc_if->msk_cdata.msk_tx_ring_tag, in msk_txrx_dma_alloc()
2299 sc_if->msk_cdata.msk_tx_ring_map, sc_if->msk_rdata.msk_tx_ring, in msk_txrx_dma_alloc()
2302 device_printf(sc_if->msk_if_dev, in msk_txrx_dma_alloc()
2306 sc_if->msk_rdata.msk_tx_ring_paddr = ctx.msk_busaddr; in msk_txrx_dma_alloc()
2309 error = bus_dmamem_alloc(sc_if->msk_cdata.msk_rx_ring_tag, in msk_txrx_dma_alloc()
2310 (void **)&sc_if->msk_rdata.msk_rx_ring, BUS_DMA_WAITOK | in msk_txrx_dma_alloc()
2311 BUS_DMA_COHERENT | BUS_DMA_ZERO, &sc_if->msk_cdata.msk_rx_ring_map); in msk_txrx_dma_alloc()
2313 device_printf(sc_if->msk_if_dev, in msk_txrx_dma_alloc()
2319 error = bus_dmamap_load(sc_if->msk_cdata.msk_rx_ring_tag, in msk_txrx_dma_alloc()
2320 sc_if->msk_cdata.msk_rx_ring_map, sc_if->msk_rdata.msk_rx_ring, in msk_txrx_dma_alloc()
2323 device_printf(sc_if->msk_if_dev, in msk_txrx_dma_alloc()
2327 sc_if->msk_rdata.msk_rx_ring_paddr = ctx.msk_busaddr; in msk_txrx_dma_alloc()
2331 txd = &sc_if->msk_cdata.msk_txdesc[i]; in msk_txrx_dma_alloc()
2334 error = bus_dmamap_create(sc_if->msk_cdata.msk_tx_tag, 0, in msk_txrx_dma_alloc()
2337 device_printf(sc_if->msk_if_dev, in msk_txrx_dma_alloc()
2343 if ((error = bus_dmamap_create(sc_if->msk_cdata.msk_rx_tag, 0, in msk_txrx_dma_alloc()
2344 &sc_if->msk_cdata.msk_rx_sparemap)) != 0) { in msk_txrx_dma_alloc()
2345 device_printf(sc_if->msk_if_dev, in msk_txrx_dma_alloc()
2350 rxd = &sc_if->msk_cdata.msk_rxdesc[i]; in msk_txrx_dma_alloc()
2353 error = bus_dmamap_create(sc_if->msk_cdata.msk_rx_tag, 0, in msk_txrx_dma_alloc()
2356 device_printf(sc_if->msk_if_dev, in msk_txrx_dma_alloc()
2367 msk_rx_dma_jalloc(struct msk_if_softc *sc_if) in msk_rx_dma_jalloc() argument
2374 if (jumbo_disable != 0 || (sc_if->msk_flags & MSK_FLAG_JUMBO) == 0) { in msk_rx_dma_jalloc()
2375 sc_if->msk_flags &= ~MSK_FLAG_JUMBO; in msk_rx_dma_jalloc()
2376 device_printf(sc_if->msk_if_dev, in msk_rx_dma_jalloc()
2381 error = bus_dma_tag_create(sc_if->msk_cdata.msk_parent_tag,/* parent */ in msk_rx_dma_jalloc()
2391 &sc_if->msk_cdata.msk_jumbo_rx_ring_tag); in msk_rx_dma_jalloc()
2393 device_printf(sc_if->msk_if_dev, in msk_rx_dma_jalloc()
2403 if ((sc_if->msk_flags & MSK_FLAG_RAMBUF) != 0) in msk_rx_dma_jalloc()
2406 error = bus_dma_tag_create(sc_if->msk_cdata.msk_parent_tag,/* parent */ in msk_rx_dma_jalloc()
2416 &sc_if->msk_cdata.msk_jumbo_rx_tag); in msk_rx_dma_jalloc()
2418 device_printf(sc_if->msk_if_dev, in msk_rx_dma_jalloc()
2424 error = bus_dmamem_alloc(sc_if->msk_cdata.msk_jumbo_rx_ring_tag, in msk_rx_dma_jalloc()
2425 (void **)&sc_if->msk_rdata.msk_jumbo_rx_ring, in msk_rx_dma_jalloc()
2427 &sc_if->msk_cdata.msk_jumbo_rx_ring_map); in msk_rx_dma_jalloc()
2429 device_printf(sc_if->msk_if_dev, in msk_rx_dma_jalloc()
2435 error = bus_dmamap_load(sc_if->msk_cdata.msk_jumbo_rx_ring_tag, in msk_rx_dma_jalloc()
2436 sc_if->msk_cdata.msk_jumbo_rx_ring_map, in msk_rx_dma_jalloc()
2437 sc_if->msk_rdata.msk_jumbo_rx_ring, MSK_JUMBO_RX_RING_SZ, in msk_rx_dma_jalloc()
2440 device_printf(sc_if->msk_if_dev, in msk_rx_dma_jalloc()
2444 sc_if->msk_rdata.msk_jumbo_rx_ring_paddr = ctx.msk_busaddr; in msk_rx_dma_jalloc()
2447 if ((error = bus_dmamap_create(sc_if->msk_cdata.msk_jumbo_rx_tag, 0, in msk_rx_dma_jalloc()
2448 &sc_if->msk_cdata.msk_jumbo_rx_sparemap)) != 0) { in msk_rx_dma_jalloc()
2449 device_printf(sc_if->msk_if_dev, in msk_rx_dma_jalloc()
2454 jrxd = &sc_if->msk_cdata.msk_jumbo_rxdesc[i]; in msk_rx_dma_jalloc()
2457 error = bus_dmamap_create(sc_if->msk_cdata.msk_jumbo_rx_tag, 0, in msk_rx_dma_jalloc()
2460 device_printf(sc_if->msk_if_dev, in msk_rx_dma_jalloc()
2469 msk_rx_dma_jfree(sc_if); in msk_rx_dma_jalloc()
2470 device_printf(sc_if->msk_if_dev, "disabling jumbo frame support " in msk_rx_dma_jalloc()
2472 sc_if->msk_flags &= ~MSK_FLAG_JUMBO; in msk_rx_dma_jalloc()
2477 msk_txrx_dma_free(struct msk_if_softc *sc_if) in msk_txrx_dma_free() argument
2484 if (sc_if->msk_cdata.msk_tx_ring_tag) { in msk_txrx_dma_free()
2485 if (sc_if->msk_rdata.msk_tx_ring_paddr) in msk_txrx_dma_free()
2486 bus_dmamap_unload(sc_if->msk_cdata.msk_tx_ring_tag, in msk_txrx_dma_free()
2487 sc_if->msk_cdata.msk_tx_ring_map); in msk_txrx_dma_free()
2488 if (sc_if->msk_rdata.msk_tx_ring) in msk_txrx_dma_free()
2489 bus_dmamem_free(sc_if->msk_cdata.msk_tx_ring_tag, in msk_txrx_dma_free()
2490 sc_if->msk_rdata.msk_tx_ring, in msk_txrx_dma_free()
2491 sc_if->msk_cdata.msk_tx_ring_map); in msk_txrx_dma_free()
2492 sc_if->msk_rdata.msk_tx_ring = NULL; in msk_txrx_dma_free()
2493 sc_if->msk_rdata.msk_tx_ring_paddr = 0; in msk_txrx_dma_free()
2494 bus_dma_tag_destroy(sc_if->msk_cdata.msk_tx_ring_tag); in msk_txrx_dma_free()
2495 sc_if->msk_cdata.msk_tx_ring_tag = NULL; in msk_txrx_dma_free()
2498 if (sc_if->msk_cdata.msk_rx_ring_tag) { in msk_txrx_dma_free()
2499 if (sc_if->msk_rdata.msk_rx_ring_paddr) in msk_txrx_dma_free()
2500 bus_dmamap_unload(sc_if->msk_cdata.msk_rx_ring_tag, in msk_txrx_dma_free()
2501 sc_if->msk_cdata.msk_rx_ring_map); in msk_txrx_dma_free()
2502 if (sc_if->msk_rdata.msk_rx_ring) in msk_txrx_dma_free()
2503 bus_dmamem_free(sc_if->msk_cdata.msk_rx_ring_tag, in msk_txrx_dma_free()
2504 sc_if->msk_rdata.msk_rx_ring, in msk_txrx_dma_free()
2505 sc_if->msk_cdata.msk_rx_ring_map); in msk_txrx_dma_free()
2506 sc_if->msk_rdata.msk_rx_ring = NULL; in msk_txrx_dma_free()
2507 sc_if->msk_rdata.msk_rx_ring_paddr = 0; in msk_txrx_dma_free()
2508 bus_dma_tag_destroy(sc_if->msk_cdata.msk_rx_ring_tag); in msk_txrx_dma_free()
2509 sc_if->msk_cdata.msk_rx_ring_tag = NULL; in msk_txrx_dma_free()
2512 if (sc_if->msk_cdata.msk_tx_tag) { in msk_txrx_dma_free()
2514 txd = &sc_if->msk_cdata.msk_txdesc[i]; in msk_txrx_dma_free()
2516 bus_dmamap_destroy(sc_if->msk_cdata.msk_tx_tag, in msk_txrx_dma_free()
2521 bus_dma_tag_destroy(sc_if->msk_cdata.msk_tx_tag); in msk_txrx_dma_free()
2522 sc_if->msk_cdata.msk_tx_tag = NULL; in msk_txrx_dma_free()
2525 if (sc_if->msk_cdata.msk_rx_tag) { in msk_txrx_dma_free()
2527 rxd = &sc_if->msk_cdata.msk_rxdesc[i]; in msk_txrx_dma_free()
2529 bus_dmamap_destroy(sc_if->msk_cdata.msk_rx_tag, in msk_txrx_dma_free()
2534 if (sc_if->msk_cdata.msk_rx_sparemap) { in msk_txrx_dma_free()
2535 bus_dmamap_destroy(sc_if->msk_cdata.msk_rx_tag, in msk_txrx_dma_free()
2536 sc_if->msk_cdata.msk_rx_sparemap); in msk_txrx_dma_free()
2537 sc_if->msk_cdata.msk_rx_sparemap = 0; in msk_txrx_dma_free()
2539 bus_dma_tag_destroy(sc_if->msk_cdata.msk_rx_tag); in msk_txrx_dma_free()
2540 sc_if->msk_cdata.msk_rx_tag = NULL; in msk_txrx_dma_free()
2542 if (sc_if->msk_cdata.msk_parent_tag) { in msk_txrx_dma_free()
2543 bus_dma_tag_destroy(sc_if->msk_cdata.msk_parent_tag); in msk_txrx_dma_free()
2544 sc_if->msk_cdata.msk_parent_tag = NULL; in msk_txrx_dma_free()
2549 msk_rx_dma_jfree(struct msk_if_softc *sc_if) in msk_rx_dma_jfree() argument
2555 if (sc_if->msk_cdata.msk_jumbo_rx_ring_tag) { in msk_rx_dma_jfree()
2556 if (sc_if->msk_rdata.msk_jumbo_rx_ring_paddr) in msk_rx_dma_jfree()
2557 bus_dmamap_unload(sc_if->msk_cdata.msk_jumbo_rx_ring_tag, in msk_rx_dma_jfree()
2558 sc_if->msk_cdata.msk_jumbo_rx_ring_map); in msk_rx_dma_jfree()
2559 if (sc_if->msk_rdata.msk_jumbo_rx_ring) in msk_rx_dma_jfree()
2560 bus_dmamem_free(sc_if->msk_cdata.msk_jumbo_rx_ring_tag, in msk_rx_dma_jfree()
2561 sc_if->msk_rdata.msk_jumbo_rx_ring, in msk_rx_dma_jfree()
2562 sc_if->msk_cdata.msk_jumbo_rx_ring_map); in msk_rx_dma_jfree()
2563 sc_if->msk_rdata.msk_jumbo_rx_ring = NULL; in msk_rx_dma_jfree()
2564 sc_if->msk_rdata.msk_jumbo_rx_ring_paddr = 0; in msk_rx_dma_jfree()
2565 bus_dma_tag_destroy(sc_if->msk_cdata.msk_jumbo_rx_ring_tag); in msk_rx_dma_jfree()
2566 sc_if->msk_cdata.msk_jumbo_rx_ring_tag = NULL; in msk_rx_dma_jfree()
2569 if (sc_if->msk_cdata.msk_jumbo_rx_tag) { in msk_rx_dma_jfree()
2571 jrxd = &sc_if->msk_cdata.msk_jumbo_rxdesc[i]; in msk_rx_dma_jfree()
2574 sc_if->msk_cdata.msk_jumbo_rx_tag, in msk_rx_dma_jfree()
2579 if (sc_if->msk_cdata.msk_jumbo_rx_sparemap) { in msk_rx_dma_jfree()
2580 bus_dmamap_destroy(sc_if->msk_cdata.msk_jumbo_rx_tag, in msk_rx_dma_jfree()
2581 sc_if->msk_cdata.msk_jumbo_rx_sparemap); in msk_rx_dma_jfree()
2582 sc_if->msk_cdata.msk_jumbo_rx_sparemap = 0; in msk_rx_dma_jfree()
2584 bus_dma_tag_destroy(sc_if->msk_cdata.msk_jumbo_rx_tag); in msk_rx_dma_jfree()
2585 sc_if->msk_cdata.msk_jumbo_rx_tag = NULL; in msk_rx_dma_jfree()
2590 msk_encap(struct msk_if_softc *sc_if, struct mbuf **m_head) in msk_encap() argument
2601 MSK_IF_LOCK_ASSERT(sc_if); in msk_encap()
2605 if (((sc_if->msk_flags & MSK_FLAG_AUTOTX_CSUM) == 0 && in msk_encap()
2607 ((sc_if->msk_flags & MSK_FLAG_DESCV2) == 0 && in msk_encap()
2665 } else if ((sc_if->msk_flags & MSK_FLAG_AUTOTX_CSUM) == 0 && in msk_encap()
2696 prod = sc_if->msk_cdata.msk_tx_prod; in msk_encap()
2697 txd = &sc_if->msk_cdata.msk_txdesc[prod]; in msk_encap()
2700 error = bus_dmamap_load_mbuf_sg(sc_if->msk_cdata.msk_tx_tag, map, in msk_encap()
2710 error = bus_dmamap_load_mbuf_sg(sc_if->msk_cdata.msk_tx_tag, in msk_encap()
2726 if (sc_if->msk_cdata.msk_tx_cnt + nseg >= in msk_encap()
2728 bus_dmamap_unload(sc_if->msk_cdata.msk_tx_tag, map); in msk_encap()
2738 if ((sc_if->msk_flags & MSK_FLAG_DESCV2) != 0) in msk_encap()
2742 if (tso_mtu != sc_if->msk_cdata.msk_tso_mtu) { in msk_encap()
2743 tx_le = &sc_if->msk_rdata.msk_tx_ring[prod]; in msk_encap()
2745 if ((sc_if->msk_flags & MSK_FLAG_DESCV2) != 0) in msk_encap()
2750 sc_if->msk_cdata.msk_tx_cnt++; in msk_encap()
2752 sc_if->msk_cdata.msk_tso_mtu = tso_mtu; in msk_encap()
2759 tx_le = &sc_if->msk_rdata.msk_tx_ring[prod]; in msk_encap()
2763 sc_if->msk_cdata.msk_tx_cnt++; in msk_encap()
2773 if ((sc_if->msk_flags & MSK_FLAG_AUTOTX_CSUM) != 0) in msk_encap()
2783 if (csum != sc_if->msk_cdata.msk_last_csum) { in msk_encap()
2784 tx_le = &sc_if->msk_rdata.msk_tx_ring[prod]; in msk_encap()
2788 sc_if->msk_cdata.msk_tx_cnt++; in msk_encap()
2790 sc_if->msk_cdata.msk_last_csum = csum; in msk_encap()
2797 sc_if->msk_cdata.msk_tx_high_addr) { in msk_encap()
2798 sc_if->msk_cdata.msk_tx_high_addr = in msk_encap()
2800 tx_le = &sc_if->msk_rdata.msk_tx_ring[prod]; in msk_encap()
2803 sc_if->msk_cdata.msk_tx_cnt++; in msk_encap()
2808 tx_le = &sc_if->msk_rdata.msk_tx_ring[prod]; in msk_encap()
2816 sc_if->msk_cdata.msk_tx_cnt++; in msk_encap()
2820 tx_le = &sc_if->msk_rdata.msk_tx_ring[prod]; in msk_encap()
2823 sc_if->msk_cdata.msk_tx_high_addr) { in msk_encap()
2824 sc_if->msk_cdata.msk_tx_high_addr = in msk_encap()
2826 tx_le = &sc_if->msk_rdata.msk_tx_ring[prod]; in msk_encap()
2830 sc_if->msk_cdata.msk_tx_cnt++; in msk_encap()
2832 tx_le = &sc_if->msk_rdata.msk_tx_ring[prod]; in msk_encap()
2838 sc_if->msk_cdata.msk_tx_cnt++; in msk_encap()
2842 sc_if->msk_cdata.msk_tx_prod = prod; in msk_encap()
2846 tx_le = &sc_if->msk_rdata.msk_tx_ring[prod]; in msk_encap()
2850 tx_le = &sc_if->msk_rdata.msk_tx_ring[si]; in msk_encap()
2853 txd = &sc_if->msk_cdata.msk_txdesc[prod]; in msk_encap()
2860 bus_dmamap_sync(sc_if->msk_cdata.msk_tx_tag, map, BUS_DMASYNC_PREWRITE); in msk_encap()
2861 bus_dmamap_sync(sc_if->msk_cdata.msk_tx_ring_tag, in msk_encap()
2862 sc_if->msk_cdata.msk_tx_ring_map, in msk_encap()
2871 struct msk_if_softc *sc_if; in msk_start() local
2873 sc_if = if_getsoftc(ifp); in msk_start()
2874 MSK_IF_LOCK(sc_if); in msk_start()
2876 MSK_IF_UNLOCK(sc_if); in msk_start()
2882 struct msk_if_softc *sc_if; in msk_start_locked() local
2886 sc_if = if_getsoftc(ifp); in msk_start_locked()
2887 MSK_IF_LOCK_ASSERT(sc_if); in msk_start_locked()
2890 IFF_DRV_RUNNING || (sc_if->msk_flags & MSK_FLAG_LINK) == 0) in msk_start_locked()
2894 sc_if->msk_cdata.msk_tx_cnt < in msk_start_locked()
2904 if (msk_encap(sc_if, &m_head) != 0) { in msk_start_locked()
2922 CSR_WRITE_2(sc_if->msk_softc, in msk_start_locked()
2923 Y2_PREF_Q_ADDR(sc_if->msk_txq, PREF_UNIT_PUT_IDX_REG), in msk_start_locked()
2924 sc_if->msk_cdata.msk_tx_prod); in msk_start_locked()
2927 sc_if->msk_watchdog_timer = MSK_TX_TIMEOUT; in msk_start_locked()
2932 msk_watchdog(struct msk_if_softc *sc_if) in msk_watchdog() argument
2936 MSK_IF_LOCK_ASSERT(sc_if); in msk_watchdog()
2938 if (sc_if->msk_watchdog_timer == 0 || --sc_if->msk_watchdog_timer) in msk_watchdog()
2940 ifp = sc_if->msk_ifp; in msk_watchdog()
2941 if ((sc_if->msk_flags & MSK_FLAG_LINK) == 0) { in msk_watchdog()
2943 if_printf(sc_if->msk_ifp, "watchdog timeout " in msk_watchdog()
2947 msk_init_locked(sc_if); in msk_watchdog()
2954 msk_init_locked(sc_if); in msk_watchdog()
3059 msk_rxcsum(struct msk_if_softc *sc_if, uint32_t control, struct mbuf *m) in msk_rxcsum() argument
3067 if ((sc_if->msk_flags & MSK_FLAG_DESCV2) != 0) { in msk_rxcsum()
3091 if ((sc_if->msk_csum & 0xFFFF) != (sc_if->msk_csum >> 16)) { in msk_rxcsum()
3093 device_printf(sc_if->msk_if_dev, in msk_rxcsum()
3133 csum = bswap16(sc_if->msk_csum & 0xFFFF); in msk_rxcsum()
3149 msk_rxeof(struct msk_if_softc *sc_if, uint32_t status, uint32_t control, in msk_rxeof() argument
3157 ifp = sc_if->msk_ifp; in msk_rxeof()
3159 MSK_IF_LOCK_ASSERT(sc_if); in msk_rxeof()
3161 cons = sc_if->msk_cdata.msk_rx_cons; in msk_rxeof()
3167 if ((sc_if->msk_flags & MSK_FLAG_NORXCHK) != 0) { in msk_rxeof()
3175 msk_discard_rxbuf(sc_if, cons); in msk_rxeof()
3178 } else if (len > sc_if->msk_framesize || in msk_rxeof()
3184 msk_discard_rxbuf(sc_if, cons); in msk_rxeof()
3188 rxd = &sc_if->msk_cdata.msk_rxdesc[(cons + 1) % in msk_rxeof()
3191 rxd = &sc_if->msk_cdata.msk_rxdesc[cons]; in msk_rxeof()
3194 if (msk_newbuf(sc_if, cons) != 0) { in msk_rxeof()
3197 msk_discard_rxbuf(sc_if, cons); in msk_rxeof()
3203 if ((sc_if->msk_flags & MSK_FLAG_RAMBUF) != 0) in msk_rxeof()
3208 msk_rxcsum(sc_if, control, m); in msk_rxeof()
3212 m->m_pkthdr.ether_vtag = sc_if->msk_vtag; in msk_rxeof()
3215 MSK_IF_UNLOCK(sc_if); in msk_rxeof()
3217 MSK_IF_LOCK(sc_if); in msk_rxeof()
3220 MSK_RX_INC(sc_if->msk_cdata.msk_rx_cons, MSK_RX_RING_CNT); in msk_rxeof()
3221 MSK_RX_INC(sc_if->msk_cdata.msk_rx_prod, MSK_RX_RING_CNT); in msk_rxeof()
3225 msk_jumbo_rxeof(struct msk_if_softc *sc_if, uint32_t status, uint32_t control, in msk_jumbo_rxeof() argument
3233 ifp = sc_if->msk_ifp; in msk_jumbo_rxeof()
3235 MSK_IF_LOCK_ASSERT(sc_if); in msk_jumbo_rxeof()
3237 cons = sc_if->msk_cdata.msk_rx_cons; in msk_jumbo_rxeof()
3243 if (len > sc_if->msk_framesize || in msk_jumbo_rxeof()
3249 msk_discard_jumbo_rxbuf(sc_if, cons); in msk_jumbo_rxeof()
3253 jrxd = &sc_if->msk_cdata.msk_jumbo_rxdesc[(cons + 1) % in msk_jumbo_rxeof()
3256 jrxd = &sc_if->msk_cdata.msk_jumbo_rxdesc[cons]; in msk_jumbo_rxeof()
3259 if (msk_jumbo_newbuf(sc_if, cons) != 0) { in msk_jumbo_rxeof()
3262 msk_discard_jumbo_rxbuf(sc_if, cons); in msk_jumbo_rxeof()
3268 if ((sc_if->msk_flags & MSK_FLAG_RAMBUF) != 0) in msk_jumbo_rxeof()
3273 msk_rxcsum(sc_if, control, m); in msk_jumbo_rxeof()
3277 m->m_pkthdr.ether_vtag = sc_if->msk_vtag; in msk_jumbo_rxeof()
3280 MSK_IF_UNLOCK(sc_if); in msk_jumbo_rxeof()
3282 MSK_IF_LOCK(sc_if); in msk_jumbo_rxeof()
3285 MSK_RX_INC(sc_if->msk_cdata.msk_rx_cons, MSK_JUMBO_RX_RING_CNT); in msk_jumbo_rxeof()
3286 MSK_RX_INC(sc_if->msk_cdata.msk_rx_prod, MSK_JUMBO_RX_RING_CNT); in msk_jumbo_rxeof()
3290 msk_txeof(struct msk_if_softc *sc_if, int idx) in msk_txeof() argument
3298 MSK_IF_LOCK_ASSERT(sc_if); in msk_txeof()
3300 ifp = sc_if->msk_ifp; in msk_txeof()
3302 bus_dmamap_sync(sc_if->msk_cdata.msk_tx_ring_tag, in msk_txeof()
3303 sc_if->msk_cdata.msk_tx_ring_map, in msk_txeof()
3309 cons = sc_if->msk_cdata.msk_tx_cons; in msk_txeof()
3312 if (sc_if->msk_cdata.msk_tx_cnt <= 0) in msk_txeof()
3315 cur_tx = &sc_if->msk_rdata.msk_tx_ring[cons]; in msk_txeof()
3317 sc_if->msk_cdata.msk_tx_cnt--; in msk_txeof()
3321 txd = &sc_if->msk_cdata.msk_txdesc[cons]; in msk_txeof()
3322 bus_dmamap_sync(sc_if->msk_cdata.msk_tx_tag, txd->tx_dmamap, in msk_txeof()
3324 bus_dmamap_unload(sc_if->msk_cdata.msk_tx_tag, txd->tx_dmamap); in msk_txeof()
3334 sc_if->msk_cdata.msk_tx_cons = cons; in msk_txeof()
3335 if (sc_if->msk_cdata.msk_tx_cnt == 0) in msk_txeof()
3336 sc_if->msk_watchdog_timer = 0; in msk_txeof()
3345 struct msk_if_softc *sc_if; in msk_tick() local
3348 sc_if = xsc_if; in msk_tick()
3350 MSK_IF_LOCK_ASSERT(sc_if); in msk_tick()
3352 mii = device_get_softc(sc_if->msk_miibus); in msk_tick()
3355 if ((sc_if->msk_flags & MSK_FLAG_LINK) == 0) in msk_tick()
3356 msk_miibus_statchg(sc_if->msk_if_dev); in msk_tick()
3358 msk_handle_events(sc_if->msk_softc); in msk_tick()
3360 msk_watchdog(sc_if); in msk_tick()
3361 callout_reset(&sc_if->msk_tick_ch, hz, msk_tick, sc_if); in msk_tick()
3365 msk_intr_phy(struct msk_if_softc *sc_if) in msk_intr_phy() argument
3369 msk_phy_readreg(sc_if, PHY_ADDR_MARV, PHY_MARV_INT_STAT); in msk_intr_phy()
3370 status = msk_phy_readreg(sc_if, PHY_ADDR_MARV, PHY_MARV_INT_STAT); in msk_intr_phy()
3373 device_printf(sc_if->msk_if_dev, in msk_intr_phy()
3378 msk_intr_gmac(struct msk_if_softc *sc_if) in msk_intr_gmac() argument
3383 sc = sc_if->msk_softc; in msk_intr_gmac()
3384 status = CSR_READ_1(sc, MR_ADDR(sc_if->msk_port, GMAC_IRQ_SRC)); in msk_intr_gmac()
3388 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, RX_GMF_CTRL_T), in msk_intr_gmac()
3392 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, TX_GMF_CTRL_T), in msk_intr_gmac()
3394 device_printf(sc_if->msk_if_dev, "Tx FIFO underrun!\n"); in msk_intr_gmac()
3409 msk_handle_hwerr(struct msk_if_softc *sc_if, uint32_t status) in msk_handle_hwerr() argument
3413 sc = sc_if->msk_softc; in msk_handle_hwerr()
3415 device_printf(sc_if->msk_if_dev, in msk_handle_hwerr()
3418 CSR_WRITE_2(sc, SELECT_RAM_BUFFER(sc_if->msk_port, B3_RI_CTRL), in msk_handle_hwerr()
3422 device_printf(sc_if->msk_if_dev, in msk_handle_hwerr()
3425 CSR_WRITE_2(sc, SELECT_RAM_BUFFER(sc_if->msk_port, B3_RI_CTRL), in msk_handle_hwerr()
3429 device_printf(sc_if->msk_if_dev, "Tx MAC parity error\n"); in msk_handle_hwerr()
3431 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, TX_GMF_CTRL_T), in msk_handle_hwerr()
3435 device_printf(sc_if->msk_if_dev, "Rx parity error\n"); in msk_handle_hwerr()
3437 CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_rxq, Q_CSR), BMU_CLR_IRQ_PAR); in msk_handle_hwerr()
3440 device_printf(sc_if->msk_if_dev, "TCP segmentation error\n"); in msk_handle_hwerr()
3442 CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_txq, Q_CSR), BMU_CLR_IRQ_TCP); in msk_handle_hwerr()
3532 msk_rxput(struct msk_if_softc *sc_if) in msk_rxput() argument
3536 sc = sc_if->msk_softc; in msk_rxput()
3537 if (sc_if->msk_framesize > (MCLBYTES - MSK_RX_BUF_ALIGN)) in msk_rxput()
3539 sc_if->msk_cdata.msk_jumbo_rx_ring_tag, in msk_rxput()
3540 sc_if->msk_cdata.msk_jumbo_rx_ring_map, in msk_rxput()
3544 sc_if->msk_cdata.msk_rx_ring_tag, in msk_rxput()
3545 sc_if->msk_cdata.msk_rx_ring_map, in msk_rxput()
3547 CSR_WRITE_2(sc, Y2_PREF_Q_ADDR(sc_if->msk_rxq, in msk_rxput()
3548 PREF_UNIT_PUT_IDX_REG), sc_if->msk_cdata.msk_rx_prod); in msk_rxput()
3554 struct msk_if_softc *sc_if; in msk_handle_events() local
3580 sc_if = sc->msk_if[port]; in msk_handle_events()
3581 if (sc_if == NULL) { in msk_handle_events()
3589 sc_if->msk_vtag = ntohs(len); in msk_handle_events()
3592 sc_if->msk_vtag = ntohs(len); in msk_handle_events()
3595 sc_if->msk_csum = status; in msk_handle_events()
3598 if (!(if_getdrvflags(sc_if->msk_ifp) & IFF_DRV_RUNNING)) in msk_handle_events()
3600 if (sc_if->msk_framesize > in msk_handle_events()
3602 msk_jumbo_rxeof(sc_if, status, control, len); in msk_handle_events()
3604 msk_rxeof(sc_if, status, control, len); in msk_handle_events()
3613 if (rxput[port] >= sc_if->msk_cdata.msk_rx_putwm) { in msk_handle_events()
3614 msk_rxput(sc_if); in msk_handle_events()
3722 msk_set_tx_stfwd(struct msk_if_softc *sc_if) in msk_set_tx_stfwd() argument
3727 ifp = sc_if->msk_ifp; in msk_set_tx_stfwd()
3728 sc = sc_if->msk_softc; in msk_set_tx_stfwd()
3732 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, TX_GMF_CTRL_T), in msk_set_tx_stfwd()
3738 MR_ADDR(sc_if->msk_port, TX_GMF_AE_THR), in msk_set_tx_stfwd()
3741 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, TX_GMF_CTRL_T), in msk_set_tx_stfwd()
3744 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, TX_GMF_CTRL_T), in msk_set_tx_stfwd()
3753 struct msk_if_softc *sc_if = xsc; in msk_init() local
3755 MSK_IF_LOCK(sc_if); in msk_init()
3756 msk_init_locked(sc_if); in msk_init()
3757 MSK_IF_UNLOCK(sc_if); in msk_init()
3761 msk_init_locked(struct msk_if_softc *sc_if) in msk_init_locked() argument
3771 MSK_IF_LOCK_ASSERT(sc_if); in msk_init_locked()
3773 ifp = sc_if->msk_ifp; in msk_init_locked()
3774 sc = sc_if->msk_softc; in msk_init_locked()
3775 mii = device_get_softc(sc_if->msk_miibus); in msk_init_locked()
3782 msk_stop(sc_if); in msk_init_locked()
3785 sc_if->msk_framesize = ETHERMTU; in msk_init_locked()
3787 sc_if->msk_framesize = if_getmtu(ifp); in msk_init_locked()
3788 sc_if->msk_framesize += ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN; in msk_init_locked()
3790 (sc_if->msk_flags & MSK_FLAG_JUMBO_NOCSUM) != 0) { in msk_init_locked()
3796 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, GMAC_CTRL), GMC_RST_SET); in msk_init_locked()
3797 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, GMAC_CTRL), GMC_RST_CLR); in msk_init_locked()
3798 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, GMAC_CTRL), GMC_F_LOOPB_OFF); in msk_init_locked()
3801 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, GMAC_CTRL), in msk_init_locked()
3809 GMAC_WRITE_2(sc, sc_if->msk_port, GM_GP_CTRL, 0); in msk_init_locked()
3812 CSR_READ_1(sc, MR_ADDR(sc_if->msk_port, GMAC_IRQ_SRC)); in msk_init_locked()
3815 msk_stats_clear(sc_if); in msk_init_locked()
3818 GMAC_WRITE_2(sc, sc_if->msk_port, GM_RX_CTRL, GM_RXCR_CRC_DIS); in msk_init_locked()
3821 GMAC_WRITE_2(sc, sc_if->msk_port, GM_TX_CTRL, TX_COL_THR(TX_COL_DEF)); in msk_init_locked()
3824 GMAC_WRITE_2(sc, sc_if->msk_port, GM_TX_FLOW_CTRL, 0xffff); in msk_init_locked()
3827 GMAC_WRITE_2(sc, sc_if->msk_port, GM_TX_PARAM, in msk_init_locked()
3836 GMAC_WRITE_2(sc, sc_if->msk_port, GM_SERIAL_MODE, gmac); in msk_init_locked()
3840 GMAC_WRITE_2(sc, sc_if->msk_port, GM_SRC_ADDR_1L, in msk_init_locked()
3842 GMAC_WRITE_2(sc, sc_if->msk_port, GM_SRC_ADDR_1M, in msk_init_locked()
3844 GMAC_WRITE_2(sc, sc_if->msk_port, GM_SRC_ADDR_1H, in msk_init_locked()
3846 GMAC_WRITE_2(sc, sc_if->msk_port, GM_SRC_ADDR_2L, in msk_init_locked()
3848 GMAC_WRITE_2(sc, sc_if->msk_port, GM_SRC_ADDR_2M, in msk_init_locked()
3850 GMAC_WRITE_2(sc, sc_if->msk_port, GM_SRC_ADDR_2H, in msk_init_locked()
3854 GMAC_WRITE_2(sc, sc_if->msk_port, GM_TX_IRQ_MSK, 0); in msk_init_locked()
3855 GMAC_WRITE_2(sc, sc_if->msk_port, GM_RX_IRQ_MSK, 0); in msk_init_locked()
3856 GMAC_WRITE_2(sc, sc_if->msk_port, GM_TR_IRQ_MSK, 0); in msk_init_locked()
3859 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, RX_GMF_CTRL_T), GMF_RST_SET); in msk_init_locked()
3860 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, RX_GMF_CTRL_T), GMF_RST_CLR); in msk_init_locked()
3865 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, RX_GMF_CTRL_T), reg); in msk_init_locked()
3868 msk_rxfilter(sc_if); in msk_init_locked()
3872 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, RX_GMF_FL_MSK), 0); in msk_init_locked()
3875 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, RX_GMF_FL_MSK), in msk_init_locked()
3888 CSR_WRITE_2(sc, MR_ADDR(sc_if->msk_port, RX_GMF_FL_THR), reg); in msk_init_locked()
3891 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, TX_GMF_CTRL_T), GMF_RST_SET); in msk_init_locked()
3892 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, TX_GMF_CTRL_T), GMF_RST_CLR); in msk_init_locked()
3893 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, TX_GMF_CTRL_T), GMF_OPER_ON); in msk_init_locked()
3896 msk_setvlan(sc_if, ifp); in msk_init_locked()
3898 if ((sc_if->msk_flags & MSK_FLAG_RAMBUF) == 0) { in msk_init_locked()
3900 CSR_WRITE_2(sc, MR_ADDR(sc_if->msk_port, RX_GMF_LP_THR), in msk_init_locked()
3902 CSR_WRITE_2(sc, MR_ADDR(sc_if->msk_port, RX_GMF_UP_THR), in msk_init_locked()
3905 msk_set_tx_stfwd(sc_if); in msk_init_locked()
3911 reg = CSR_READ_4(sc, MR_ADDR(sc_if->msk_port, TX_GMF_EA)); in msk_init_locked()
3913 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, TX_GMF_EA), reg); in msk_init_locked()
3920 CSR_WRITE_1(sc, MR_ADDR(sc_if->msk_port, TXA_CTRL), in msk_init_locked()
3923 CSR_WRITE_1(sc, MR_ADDR(sc_if->msk_port, TXA_CTRL), TXA_ENA_ARB); in msk_init_locked()
3926 msk_set_rambuffer(sc_if); in msk_init_locked()
3929 CSR_WRITE_1(sc, RB_ADDR(sc_if->msk_txsq, RB_CTRL), RB_RST_SET); in msk_init_locked()
3932 CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_txq, Q_CSR), BMU_CLR_RESET); in msk_init_locked()
3933 CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_txq, Q_CSR), BMU_OPER_INIT); in msk_init_locked()
3934 CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_txq, Q_CSR), BMU_FIFO_OP_ON); in msk_init_locked()
3935 CSR_WRITE_2(sc, Q_ADDR(sc_if->msk_txq, Q_WM), MSK_BMU_TX_WM); in msk_init_locked()
3940 CSR_WRITE_2(sc, Q_ADDR(sc_if->msk_txq, Q_AL), in msk_init_locked()
3950 CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_txq, Q_F), in msk_init_locked()
3956 CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_rxq, Q_CSR), BMU_CLR_RESET); in msk_init_locked()
3957 CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_rxq, Q_CSR), BMU_OPER_INIT); in msk_init_locked()
3958 CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_rxq, Q_CSR), BMU_FIFO_OP_ON); in msk_init_locked()
3959 CSR_WRITE_2(sc, Q_ADDR(sc_if->msk_rxq, Q_WM), MSK_BMU_RX_WM); in msk_init_locked()
3963 CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_rxq, Q_F), F_M_RX_RAM_DIS); in msk_init_locked()
3966 msk_set_prefetch(sc, sc_if->msk_txq, in msk_init_locked()
3967 sc_if->msk_rdata.msk_tx_ring_paddr, MSK_TX_RING_CNT - 1); in msk_init_locked()
3968 msk_init_tx_ring(sc_if); in msk_init_locked()
3972 if ((sc_if->msk_flags & MSK_FLAG_DESCV2) == 0 && in msk_init_locked()
3977 CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_rxq, Q_CSR), reg); in msk_init_locked()
3978 if (sc_if->msk_framesize > (MCLBYTES - MSK_RX_BUF_ALIGN)) { in msk_init_locked()
3979 msk_set_prefetch(sc, sc_if->msk_rxq, in msk_init_locked()
3980 sc_if->msk_rdata.msk_jumbo_rx_ring_paddr, in msk_init_locked()
3982 error = msk_init_jumbo_rx_ring(sc_if); in msk_init_locked()
3984 msk_set_prefetch(sc, sc_if->msk_rxq, in msk_init_locked()
3985 sc_if->msk_rdata.msk_rx_ring_paddr, in msk_init_locked()
3987 error = msk_init_rx_ring(sc_if); in msk_init_locked()
3990 device_printf(sc_if->msk_if_dev, in msk_init_locked()
3992 msk_stop(sc_if); in msk_init_locked()
3998 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, RX_GMF_CTRL_T), in msk_init_locked()
4003 if (sc_if->msk_port == MSK_PORT_A) { in msk_init_locked()
4029 sc_if->msk_flags &= ~MSK_FLAG_LINK; in msk_init_locked()
4032 callout_reset(&sc_if->msk_tick_ch, hz, msk_tick, sc_if); in msk_init_locked()
4036 msk_set_rambuffer(struct msk_if_softc *sc_if) in msk_set_rambuffer() argument
4041 sc = sc_if->msk_softc; in msk_set_rambuffer()
4042 if ((sc_if->msk_flags & MSK_FLAG_RAMBUF) == 0) in msk_set_rambuffer()
4046 CSR_WRITE_1(sc, RB_ADDR(sc_if->msk_rxq, RB_CTRL), RB_RST_CLR); in msk_set_rambuffer()
4047 CSR_WRITE_4(sc, RB_ADDR(sc_if->msk_rxq, RB_START), in msk_set_rambuffer()
4048 sc->msk_rxqstart[sc_if->msk_port] / 8); in msk_set_rambuffer()
4049 CSR_WRITE_4(sc, RB_ADDR(sc_if->msk_rxq, RB_END), in msk_set_rambuffer()
4050 sc->msk_rxqend[sc_if->msk_port] / 8); in msk_set_rambuffer()
4051 CSR_WRITE_4(sc, RB_ADDR(sc_if->msk_rxq, RB_WP), in msk_set_rambuffer()
4052 sc->msk_rxqstart[sc_if->msk_port] / 8); in msk_set_rambuffer()
4053 CSR_WRITE_4(sc, RB_ADDR(sc_if->msk_rxq, RB_RP), in msk_set_rambuffer()
4054 sc->msk_rxqstart[sc_if->msk_port] / 8); in msk_set_rambuffer()
4056 utpp = (sc->msk_rxqend[sc_if->msk_port] + 1 - in msk_set_rambuffer()
4057 sc->msk_rxqstart[sc_if->msk_port] - MSK_RB_ULPP) / 8; in msk_set_rambuffer()
4058 ltpp = (sc->msk_rxqend[sc_if->msk_port] + 1 - in msk_set_rambuffer()
4059 sc->msk_rxqstart[sc_if->msk_port] - MSK_RB_LLPP_B) / 8; in msk_set_rambuffer()
4062 CSR_WRITE_4(sc, RB_ADDR(sc_if->msk_rxq, RB_RX_UTPP), utpp); in msk_set_rambuffer()
4063 CSR_WRITE_4(sc, RB_ADDR(sc_if->msk_rxq, RB_RX_LTPP), ltpp); in msk_set_rambuffer()
4066 CSR_WRITE_1(sc, RB_ADDR(sc_if->msk_rxq, RB_CTRL), RB_ENA_OP_MD); in msk_set_rambuffer()
4067 CSR_READ_1(sc, RB_ADDR(sc_if->msk_rxq, RB_CTRL)); in msk_set_rambuffer()
4070 CSR_WRITE_1(sc, RB_ADDR(sc_if->msk_txq, RB_CTRL), RB_RST_CLR); in msk_set_rambuffer()
4071 CSR_WRITE_4(sc, RB_ADDR(sc_if->msk_txq, RB_START), in msk_set_rambuffer()
4072 sc->msk_txqstart[sc_if->msk_port] / 8); in msk_set_rambuffer()
4073 CSR_WRITE_4(sc, RB_ADDR(sc_if->msk_txq, RB_END), in msk_set_rambuffer()
4074 sc->msk_txqend[sc_if->msk_port] / 8); in msk_set_rambuffer()
4075 CSR_WRITE_4(sc, RB_ADDR(sc_if->msk_txq, RB_WP), in msk_set_rambuffer()
4076 sc->msk_txqstart[sc_if->msk_port] / 8); in msk_set_rambuffer()
4077 CSR_WRITE_4(sc, RB_ADDR(sc_if->msk_txq, RB_RP), in msk_set_rambuffer()
4078 sc->msk_txqstart[sc_if->msk_port] / 8); in msk_set_rambuffer()
4080 CSR_WRITE_1(sc, RB_ADDR(sc_if->msk_txq, RB_CTRL), RB_ENA_STFWD); in msk_set_rambuffer()
4081 CSR_WRITE_1(sc, RB_ADDR(sc_if->msk_txq, RB_CTRL), RB_ENA_OP_MD); in msk_set_rambuffer()
4082 CSR_READ_1(sc, RB_ADDR(sc_if->msk_txq, RB_CTRL)); in msk_set_rambuffer()
4111 msk_stop(struct msk_if_softc *sc_if) in msk_stop() argument
4121 MSK_IF_LOCK_ASSERT(sc_if); in msk_stop()
4122 sc = sc_if->msk_softc; in msk_stop()
4123 ifp = sc_if->msk_ifp; in msk_stop()
4125 callout_stop(&sc_if->msk_tick_ch); in msk_stop()
4126 sc_if->msk_watchdog_timer = 0; in msk_stop()
4129 if (sc_if->msk_port == MSK_PORT_A) { in msk_stop()
4142 val = GMAC_READ_2(sc, sc_if->msk_port, GM_GP_CTRL); in msk_stop()
4144 GMAC_WRITE_2(sc, sc_if->msk_port, GM_GP_CTRL, val); in msk_stop()
4146 GMAC_READ_2(sc, sc_if->msk_port, GM_GP_CTRL); in msk_stop()
4148 msk_stats_update(sc_if); in msk_stop()
4151 CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_txq, Q_CSR), BMU_STOP); in msk_stop()
4152 val = CSR_READ_4(sc, Q_ADDR(sc_if->msk_txq, Q_CSR)); in msk_stop()
4155 CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_txq, Q_CSR), in msk_stop()
4157 val = CSR_READ_4(sc, Q_ADDR(sc_if->msk_txq, Q_CSR)); in msk_stop()
4163 device_printf(sc_if->msk_if_dev, "Tx BMU stop failed\n"); in msk_stop()
4164 CSR_WRITE_1(sc, RB_ADDR(sc_if->msk_txq, RB_CTRL), in msk_stop()
4168 CSR_WRITE_1(sc, MR_ADDR(sc_if->msk_port, GMAC_IRQ_MSK), 0); in msk_stop()
4170 msk_phy_writereg(sc_if, PHY_ADDR_MARV, PHY_MARV_INT_MASK, 0); in msk_stop()
4173 CSR_WRITE_1(sc, MR_ADDR(sc_if->msk_port, TXA_CTRL), TXA_DIS_ARB); in msk_stop()
4176 CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_txq, Q_CSR), in msk_stop()
4180 CSR_WRITE_4(sc, Y2_PREF_Q_ADDR(sc_if->msk_txq, PREF_UNIT_CTRL_REG), in msk_stop()
4184 CSR_WRITE_1(sc, RB_ADDR(sc_if->msk_txq, RB_CTRL), RB_RST_SET); in msk_stop()
4187 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, TX_GMF_CTRL_T), GMF_RST_SET); in msk_stop()
4189 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, GMAC_CTRL), GMC_PAUSE_OFF); in msk_stop()
4203 CSR_WRITE_1(sc, RB_ADDR(sc_if->msk_rxq, RB_CTRL), RB_DIS_OP_MD); in msk_stop()
4205 if (CSR_READ_1(sc, RB_ADDR(sc_if->msk_rxq, Q_RSL)) == in msk_stop()
4206 CSR_READ_1(sc, RB_ADDR(sc_if->msk_rxq, Q_RL))) in msk_stop()
4211 device_printf(sc_if->msk_if_dev, "Rx BMU stop failed\n"); in msk_stop()
4212 CSR_WRITE_4(sc, Q_ADDR(sc_if->msk_rxq, Q_CSR), in msk_stop()
4215 CSR_WRITE_4(sc, Y2_PREF_Q_ADDR(sc_if->msk_rxq, PREF_UNIT_CTRL_REG), in msk_stop()
4218 CSR_WRITE_1(sc, RB_ADDR(sc_if->msk_rxq, RB_CTRL), RB_RST_SET); in msk_stop()
4220 CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, RX_GMF_CTRL_T), GMF_RST_SET); in msk_stop()
4224 rxd = &sc_if->msk_cdata.msk_rxdesc[i]; in msk_stop()
4226 bus_dmamap_sync(sc_if->msk_cdata.msk_rx_tag, in msk_stop()
4228 bus_dmamap_unload(sc_if->msk_cdata.msk_rx_tag, in msk_stop()
4235 jrxd = &sc_if->msk_cdata.msk_jumbo_rxdesc[i]; in msk_stop()
4237 bus_dmamap_sync(sc_if->msk_cdata.msk_jumbo_rx_tag, in msk_stop()
4239 bus_dmamap_unload(sc_if->msk_cdata.msk_jumbo_rx_tag, in msk_stop()
4246 txd = &sc_if->msk_cdata.msk_txdesc[i]; in msk_stop()
4248 bus_dmamap_sync(sc_if->msk_cdata.msk_tx_tag, in msk_stop()
4250 bus_dmamap_unload(sc_if->msk_cdata.msk_tx_tag, in msk_stop()
4261 sc_if->msk_flags &= ~MSK_FLAG_LINK; in msk_stop()
4277 msk_stats_clear(struct msk_if_softc *sc_if) in msk_stats_clear() argument
4283 MSK_IF_LOCK_ASSERT(sc_if); in msk_stats_clear()
4285 sc = sc_if->msk_softc; in msk_stats_clear()
4287 gmac = GMAC_READ_2(sc, sc_if->msk_port, GM_PHY_ADDR); in msk_stats_clear()
4288 GMAC_WRITE_2(sc, sc_if->msk_port, GM_PHY_ADDR, gmac | GM_PAR_MIB_CLR); in msk_stats_clear()
4291 (void)MSK_READ_MIB32(sc_if->msk_port, i); in msk_stats_clear()
4294 GMAC_WRITE_2(sc, sc_if->msk_port, GM_PHY_ADDR, gmac); in msk_stats_clear()
4298 msk_stats_update(struct msk_if_softc *sc_if) in msk_stats_update() argument
4305 MSK_IF_LOCK_ASSERT(sc_if); in msk_stats_update()
4307 ifp = sc_if->msk_ifp; in msk_stats_update()
4310 sc = sc_if->msk_softc; in msk_stats_update()
4311 stats = &sc_if->msk_stats; in msk_stats_update()
4313 gmac = GMAC_READ_2(sc, sc_if->msk_port, GM_PHY_ADDR); in msk_stats_update()
4314 GMAC_WRITE_2(sc, sc_if->msk_port, GM_PHY_ADDR, gmac | GM_PAR_MIB_CLR); in msk_stats_update()
4318 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_UC_OK); in msk_stats_update()
4320 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_BC_OK); in msk_stats_update()
4322 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_MPAUSE); in msk_stats_update()
4324 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_MC_OK); in msk_stats_update()
4326 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_FCS_ERR); in msk_stats_update()
4328 MSK_READ_MIB64(sc_if->msk_port, GM_RXO_OK_LO); in msk_stats_update()
4330 MSK_READ_MIB64(sc_if->msk_port, GM_RXO_ERR_LO); in msk_stats_update()
4332 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_SHT); in msk_stats_update()
4334 MSK_READ_MIB32(sc_if->msk_port, GM_RXE_FRAG); in msk_stats_update()
4336 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_64B); in msk_stats_update()
4338 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_127B); in msk_stats_update()
4340 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_255B); in msk_stats_update()
4342 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_511B); in msk_stats_update()
4344 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_1023B); in msk_stats_update()
4346 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_1518B); in msk_stats_update()
4348 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_MAX_SZ); in msk_stats_update()
4350 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_LNG_ERR); in msk_stats_update()
4352 MSK_READ_MIB32(sc_if->msk_port, GM_RXF_JAB_PKT); in msk_stats_update()
4354 MSK_READ_MIB32(sc_if->msk_port, GM_RXE_FIFO_OV); in msk_stats_update()
4358 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_UC_OK); in msk_stats_update()
4360 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_BC_OK); in msk_stats_update()
4362 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_MPAUSE); in msk_stats_update()
4364 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_MC_OK); in msk_stats_update()
4366 MSK_READ_MIB64(sc_if->msk_port, GM_TXO_OK_LO); in msk_stats_update()
4368 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_64B); in msk_stats_update()
4370 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_127B); in msk_stats_update()
4372 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_255B); in msk_stats_update()
4374 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_511B); in msk_stats_update()
4376 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_1023B); in msk_stats_update()
4378 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_1518B); in msk_stats_update()
4380 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_MAX_SZ); in msk_stats_update()
4382 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_COL); in msk_stats_update()
4384 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_LAT_COL); in msk_stats_update()
4386 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_ABO_COL); in msk_stats_update()
4388 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_MUL_COL); in msk_stats_update()
4390 MSK_READ_MIB32(sc_if->msk_port, GM_TXF_SNG_COL); in msk_stats_update()
4392 MSK_READ_MIB32(sc_if->msk_port, GM_TXE_FIFO_UR); in msk_stats_update()
4395 GMAC_WRITE_2(sc, sc_if->msk_port, GM_PHY_ADDR, gmac); in msk_stats_update()
4402 struct msk_if_softc *sc_if; in msk_sysctl_stat32() local
4406 sc_if = (struct msk_if_softc *)arg1; in msk_sysctl_stat32()
4407 sc = sc_if->msk_softc; in msk_sysctl_stat32()
4409 stat = (uint32_t *)((uint8_t *)&sc_if->msk_stats + off); in msk_sysctl_stat32()
4411 MSK_IF_LOCK(sc_if); in msk_sysctl_stat32()
4412 result = MSK_READ_MIB32(sc_if->msk_port, GM_MIB_CNT_BASE + off * 2); in msk_sysctl_stat32()
4414 MSK_IF_UNLOCK(sc_if); in msk_sysctl_stat32()
4423 struct msk_if_softc *sc_if; in msk_sysctl_stat64() local
4427 sc_if = (struct msk_if_softc *)arg1; in msk_sysctl_stat64()
4428 sc = sc_if->msk_softc; in msk_sysctl_stat64()
4430 stat = (uint64_t *)((uint8_t *)&sc_if->msk_stats + off); in msk_sysctl_stat64()
4432 MSK_IF_LOCK(sc_if); in msk_sysctl_stat64()
4433 result = MSK_READ_MIB64(sc_if->msk_port, GM_MIB_CNT_BASE + off * 2); in msk_sysctl_stat64()
4435 MSK_IF_UNLOCK(sc_if); in msk_sysctl_stat64()
4455 msk_sysctl_node(struct msk_if_softc *sc_if) in msk_sysctl_node() argument
4461 ctx = device_get_sysctl_ctx(sc_if->msk_if_dev); in msk_sysctl_node()
4462 child = SYSCTL_CHILDREN(device_get_sysctl_tree(sc_if->msk_if_dev)); in msk_sysctl_node()
4470 MSK_SYSCTL_STAT32(sc_if, ctx, "ucast_frames", in msk_sysctl_node()
4472 MSK_SYSCTL_STAT32(sc_if, ctx, "bcast_frames", in msk_sysctl_node()
4474 MSK_SYSCTL_STAT32(sc_if, ctx, "pause_frames", in msk_sysctl_node()
4476 MSK_SYSCTL_STAT32(sc_if, ctx, "mcast_frames", in msk_sysctl_node()
4478 MSK_SYSCTL_STAT32(sc_if, ctx, "crc_errs", in msk_sysctl_node()
4480 MSK_SYSCTL_STAT64(sc_if, ctx, "good_octets", in msk_sysctl_node()
4482 MSK_SYSCTL_STAT64(sc_if, ctx, "bad_octets", in msk_sysctl_node()
4484 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_64", in msk_sysctl_node()
4486 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_65_127", in msk_sysctl_node()
4488 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_128_255", in msk_sysctl_node()
4490 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_256_511", in msk_sysctl_node()
4492 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_512_1023", in msk_sysctl_node()
4494 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_1024_1518", in msk_sysctl_node()
4496 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_1519_max", in msk_sysctl_node()
4498 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_too_long", in msk_sysctl_node()
4500 MSK_SYSCTL_STAT32(sc_if, ctx, "jabbers", in msk_sysctl_node()
4502 MSK_SYSCTL_STAT32(sc_if, ctx, "overflows", in msk_sysctl_node()
4508 MSK_SYSCTL_STAT32(sc_if, ctx, "ucast_frames", in msk_sysctl_node()
4510 MSK_SYSCTL_STAT32(sc_if, ctx, "bcast_frames", in msk_sysctl_node()
4512 MSK_SYSCTL_STAT32(sc_if, ctx, "pause_frames", in msk_sysctl_node()
4514 MSK_SYSCTL_STAT32(sc_if, ctx, "mcast_frames", in msk_sysctl_node()
4516 MSK_SYSCTL_STAT64(sc_if, ctx, "octets", in msk_sysctl_node()
4518 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_64", in msk_sysctl_node()
4520 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_65_127", in msk_sysctl_node()
4522 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_128_255", in msk_sysctl_node()
4524 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_256_511", in msk_sysctl_node()
4526 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_512_1023", in msk_sysctl_node()
4528 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_1024_1518", in msk_sysctl_node()
4530 MSK_SYSCTL_STAT32(sc_if, ctx, "frames_1519_max", in msk_sysctl_node()
4532 MSK_SYSCTL_STAT32(sc_if, ctx, "colls", in msk_sysctl_node()
4534 MSK_SYSCTL_STAT32(sc_if, ctx, "late_colls", in msk_sysctl_node()
4536 MSK_SYSCTL_STAT32(sc_if, ctx, "excess_colls", in msk_sysctl_node()
4538 MSK_SYSCTL_STAT32(sc_if, ctx, "multi_colls", in msk_sysctl_node()
4540 MSK_SYSCTL_STAT32(sc_if, ctx, "single_colls", in msk_sysctl_node()
4542 MSK_SYSCTL_STAT32(sc_if, ctx, "underflows", in msk_sysctl_node()