Lines Matching refs:sc_if
434 struct sk_if_softc *sc_if; in sk_miibus_readreg() local
437 sc_if = device_get_softc(dev); in sk_miibus_readreg()
439 SK_IF_MII_LOCK(sc_if); in sk_miibus_readreg()
440 switch(sc_if->sk_softc->sk_type) { in sk_miibus_readreg()
442 v = sk_xmac_miibus_readreg(sc_if, phy, reg); in sk_miibus_readreg()
447 v = sk_marv_miibus_readreg(sc_if, phy, reg); in sk_miibus_readreg()
453 SK_IF_MII_UNLOCK(sc_if); in sk_miibus_readreg()
461 struct sk_if_softc *sc_if; in sk_miibus_writereg() local
464 sc_if = device_get_softc(dev); in sk_miibus_writereg()
466 SK_IF_MII_LOCK(sc_if); in sk_miibus_writereg()
467 switch(sc_if->sk_softc->sk_type) { in sk_miibus_writereg()
469 v = sk_xmac_miibus_writereg(sc_if, phy, reg, val); in sk_miibus_writereg()
474 v = sk_marv_miibus_writereg(sc_if, phy, reg, val); in sk_miibus_writereg()
480 SK_IF_MII_UNLOCK(sc_if); in sk_miibus_writereg()
488 struct sk_if_softc *sc_if; in sk_miibus_statchg() local
490 sc_if = device_get_softc(dev); in sk_miibus_statchg()
492 SK_IF_MII_LOCK(sc_if); in sk_miibus_statchg()
493 switch(sc_if->sk_softc->sk_type) { in sk_miibus_statchg()
495 sk_xmac_miibus_statchg(sc_if); in sk_miibus_statchg()
500 sk_marv_miibus_statchg(sc_if); in sk_miibus_statchg()
503 SK_IF_MII_UNLOCK(sc_if); in sk_miibus_statchg()
509 sk_xmac_miibus_readreg(struct sk_if_softc *sc_if, int phy, int reg) in sk_xmac_miibus_readreg() argument
513 SK_XM_WRITE_2(sc_if, XM_PHY_ADDR, reg|(phy << 8)); in sk_xmac_miibus_readreg()
514 SK_XM_READ_2(sc_if, XM_PHY_DATA); in sk_xmac_miibus_readreg()
515 if (sc_if->sk_phytype != SK_PHYTYPE_XMAC) { in sk_xmac_miibus_readreg()
518 if (SK_XM_READ_2(sc_if, XM_MMUCMD) & in sk_xmac_miibus_readreg()
524 if_printf(sc_if->sk_ifp, "phy failed to come ready\n"); in sk_xmac_miibus_readreg()
529 i = SK_XM_READ_2(sc_if, XM_PHY_DATA); in sk_xmac_miibus_readreg()
535 sk_xmac_miibus_writereg(struct sk_if_softc *sc_if, int phy, int reg, int val) in sk_xmac_miibus_writereg() argument
539 SK_XM_WRITE_2(sc_if, XM_PHY_ADDR, reg|(phy << 8)); in sk_xmac_miibus_writereg()
541 if (!(SK_XM_READ_2(sc_if, XM_MMUCMD) & XM_MMUCMD_PHYBUSY)) in sk_xmac_miibus_writereg()
546 if_printf(sc_if->sk_ifp, "phy failed to come ready\n"); in sk_xmac_miibus_writereg()
550 SK_XM_WRITE_2(sc_if, XM_PHY_DATA, val); in sk_xmac_miibus_writereg()
553 if (!(SK_XM_READ_2(sc_if, XM_MMUCMD) & XM_MMUCMD_PHYBUSY)) in sk_xmac_miibus_writereg()
557 if_printf(sc_if->sk_ifp, "phy write timed out\n"); in sk_xmac_miibus_writereg()
563 sk_xmac_miibus_statchg(struct sk_if_softc *sc_if) in sk_xmac_miibus_statchg() argument
567 mii = device_get_softc(sc_if->sk_miibus); in sk_xmac_miibus_statchg()
573 if (sc_if->sk_phytype != SK_PHYTYPE_XMAC) { in sk_xmac_miibus_statchg()
575 SK_XM_SETBIT_2(sc_if, XM_MMUCMD, XM_MMUCMD_GMIIFDX); in sk_xmac_miibus_statchg()
577 SK_XM_CLRBIT_2(sc_if, XM_MMUCMD, XM_MMUCMD_GMIIFDX); in sk_xmac_miibus_statchg()
583 sk_marv_miibus_readreg(struct sk_if_softc *sc_if, int phy, int reg) in sk_marv_miibus_readreg() argument
588 if (sc_if->sk_phytype != SK_PHYTYPE_MARV_COPPER && in sk_marv_miibus_readreg()
589 sc_if->sk_phytype != SK_PHYTYPE_MARV_FIBER) { in sk_marv_miibus_readreg()
593 SK_YU_WRITE_2(sc_if, YUKON_SMICR, YU_SMICR_PHYAD(phy) | in sk_marv_miibus_readreg()
598 val = SK_YU_READ_2(sc_if, YUKON_SMICR); in sk_marv_miibus_readreg()
604 if_printf(sc_if->sk_ifp, "phy failed to come ready\n"); in sk_marv_miibus_readreg()
608 val = SK_YU_READ_2(sc_if, YUKON_SMIDR); in sk_marv_miibus_readreg()
614 sk_marv_miibus_writereg(struct sk_if_softc *sc_if, int phy, int reg, int val) in sk_marv_miibus_writereg() argument
618 SK_YU_WRITE_2(sc_if, YUKON_SMIDR, val); in sk_marv_miibus_writereg()
619 SK_YU_WRITE_2(sc_if, YUKON_SMICR, YU_SMICR_PHYAD(phy) | in sk_marv_miibus_writereg()
624 if ((SK_YU_READ_2(sc_if, YUKON_SMICR) & YU_SMICR_BUSY) == 0) in sk_marv_miibus_writereg()
628 if_printf(sc_if->sk_ifp, "phy write timeout\n"); in sk_marv_miibus_writereg()
634 sk_marv_miibus_statchg(struct sk_if_softc *sc_if) in sk_marv_miibus_statchg() argument
653 sk_setfilt(struct sk_if_softc *sc_if, u_int16_t *addr, int slot) in sk_setfilt() argument
659 SK_XM_WRITE_2(sc_if, base, addr[0]); in sk_setfilt()
660 SK_XM_WRITE_2(sc_if, base + 2, addr[1]); in sk_setfilt()
661 SK_XM_WRITE_2(sc_if, base + 4, addr[2]); in sk_setfilt()
667 sk_rxfilter(struct sk_if_softc *sc_if) in sk_rxfilter() argument
671 SK_IF_LOCK_ASSERT(sc_if); in sk_rxfilter()
673 sc = sc_if->sk_softc; in sk_rxfilter()
675 sk_rxfilter_genesis(sc_if); in sk_rxfilter()
677 sk_rxfilter_yukon(sc_if); in sk_rxfilter()
681 struct sk_if_softc *sc_if; member
697 sk_setfilt(ctx->sc_if, (uint16_t *)LLADDR(sdl), cnt + 1); in sk_add_maddr_genesis()
712 sk_rxfilter_genesis(struct sk_if_softc *sc_if) in sk_rxfilter_genesis() argument
714 if_t ifp = sc_if->sk_ifp; in sk_rxfilter_genesis()
715 struct sk_add_maddr_genesis_ctx ctx = { sc_if, { 0, 0 } }; in sk_rxfilter_genesis()
719 SK_IF_LOCK_ASSERT(sc_if); in sk_rxfilter_genesis()
721 ctx.mode = SK_XM_READ_4(sc_if, XM_MODE); in sk_rxfilter_genesis()
726 sk_setfilt(sc_if, dummy, i); in sk_rxfilter_genesis()
740 SK_XM_WRITE_4(sc_if, XM_MODE, ctx.mode); in sk_rxfilter_genesis()
741 SK_XM_WRITE_4(sc_if, XM_MAR0, ctx.hashes[0]); in sk_rxfilter_genesis()
742 SK_XM_WRITE_4(sc_if, XM_MAR2, ctx.hashes[1]); in sk_rxfilter_genesis()
760 sk_rxfilter_yukon(struct sk_if_softc *sc_if) in sk_rxfilter_yukon() argument
765 SK_IF_LOCK_ASSERT(sc_if); in sk_rxfilter_yukon()
767 ifp = sc_if->sk_ifp; in sk_rxfilter_yukon()
768 mode = SK_YU_READ_2(sc_if, YUKON_RCR); in sk_rxfilter_yukon()
782 SK_YU_WRITE_2(sc_if, YUKON_MCAH1, hashes[0] & 0xffff); in sk_rxfilter_yukon()
783 SK_YU_WRITE_2(sc_if, YUKON_MCAH2, (hashes[0] >> 16) & 0xffff); in sk_rxfilter_yukon()
784 SK_YU_WRITE_2(sc_if, YUKON_MCAH3, hashes[1] & 0xffff); in sk_rxfilter_yukon()
785 SK_YU_WRITE_2(sc_if, YUKON_MCAH4, (hashes[1] >> 16) & 0xffff); in sk_rxfilter_yukon()
786 SK_YU_WRITE_2(sc_if, YUKON_RCR, mode); in sk_rxfilter_yukon()
790 sk_init_rx_ring(struct sk_if_softc *sc_if) in sk_init_rx_ring() argument
797 sc_if->sk_cdata.sk_rx_cons = 0; in sk_init_rx_ring()
801 rd = &sc_if->sk_rdata; in sk_init_rx_ring()
804 if (sk_newbuf(sc_if, i) != 0) in sk_init_rx_ring()
807 addr = SK_RX_RING_ADDR(sc_if, 0); in sk_init_rx_ring()
809 addr = SK_RX_RING_ADDR(sc_if, i + 1); in sk_init_rx_ring()
814 bus_dmamap_sync(sc_if->sk_cdata.sk_rx_ring_tag, in sk_init_rx_ring()
815 sc_if->sk_cdata.sk_rx_ring_map, in sk_init_rx_ring()
822 sk_init_jumbo_rx_ring(struct sk_if_softc *sc_if) in sk_init_jumbo_rx_ring() argument
829 sc_if->sk_cdata.sk_jumbo_rx_cons = 0; in sk_init_jumbo_rx_ring()
833 rd = &sc_if->sk_rdata; in sk_init_jumbo_rx_ring()
837 if (sk_jumbo_newbuf(sc_if, i) != 0) in sk_init_jumbo_rx_ring()
840 addr = SK_JUMBO_RX_RING_ADDR(sc_if, 0); in sk_init_jumbo_rx_ring()
842 addr = SK_JUMBO_RX_RING_ADDR(sc_if, i + 1); in sk_init_jumbo_rx_ring()
847 bus_dmamap_sync(sc_if->sk_cdata.sk_jumbo_rx_ring_tag, in sk_init_jumbo_rx_ring()
848 sc_if->sk_cdata.sk_jumbo_rx_ring_map, in sk_init_jumbo_rx_ring()
855 sk_init_tx_ring(struct sk_if_softc *sc_if) in sk_init_tx_ring() argument
862 STAILQ_INIT(&sc_if->sk_cdata.sk_txfreeq); in sk_init_tx_ring()
863 STAILQ_INIT(&sc_if->sk_cdata.sk_txbusyq); in sk_init_tx_ring()
865 sc_if->sk_cdata.sk_tx_prod = 0; in sk_init_tx_ring()
866 sc_if->sk_cdata.sk_tx_cons = 0; in sk_init_tx_ring()
867 sc_if->sk_cdata.sk_tx_cnt = 0; in sk_init_tx_ring()
869 rd = &sc_if->sk_rdata; in sk_init_tx_ring()
873 addr = SK_TX_RING_ADDR(sc_if, 0); in sk_init_tx_ring()
875 addr = SK_TX_RING_ADDR(sc_if, i + 1); in sk_init_tx_ring()
877 txd = &sc_if->sk_cdata.sk_txdesc[i]; in sk_init_tx_ring()
878 STAILQ_INSERT_TAIL(&sc_if->sk_cdata.sk_txfreeq, txd, tx_q); in sk_init_tx_ring()
881 bus_dmamap_sync(sc_if->sk_cdata.sk_tx_ring_tag, in sk_init_tx_ring()
882 sc_if->sk_cdata.sk_tx_ring_map, in sk_init_tx_ring()
887 sk_discard_rxbuf(struct sk_if_softc *sc_if, int idx) in sk_discard_rxbuf() argument
893 r = &sc_if->sk_rdata.sk_rx_ring[idx]; in sk_discard_rxbuf()
894 rxd = &sc_if->sk_cdata.sk_rxdesc[idx]; in sk_discard_rxbuf()
900 sk_discard_jumbo_rxbuf(struct sk_if_softc *sc_if, int idx) in sk_discard_jumbo_rxbuf() argument
906 r = &sc_if->sk_rdata.sk_jumbo_rx_ring[idx]; in sk_discard_jumbo_rxbuf()
907 rxd = &sc_if->sk_cdata.sk_jumbo_rxdesc[idx]; in sk_discard_jumbo_rxbuf()
913 sk_newbuf(struct sk_if_softc *sc_if, int idx) in sk_newbuf() argument
928 if (bus_dmamap_load_mbuf_sg(sc_if->sk_cdata.sk_rx_tag, in sk_newbuf()
929 sc_if->sk_cdata.sk_rx_sparemap, m, segs, &nsegs, 0) != 0) { in sk_newbuf()
935 rxd = &sc_if->sk_cdata.sk_rxdesc[idx]; in sk_newbuf()
937 bus_dmamap_sync(sc_if->sk_cdata.sk_rx_tag, rxd->rx_dmamap, in sk_newbuf()
939 bus_dmamap_unload(sc_if->sk_cdata.sk_rx_tag, rxd->rx_dmamap); in sk_newbuf()
942 rxd->rx_dmamap = sc_if->sk_cdata.sk_rx_sparemap; in sk_newbuf()
943 sc_if->sk_cdata.sk_rx_sparemap = map; in sk_newbuf()
944 bus_dmamap_sync(sc_if->sk_cdata.sk_rx_tag, rxd->rx_dmamap, in sk_newbuf()
947 r = &sc_if->sk_rdata.sk_rx_ring[idx]; in sk_newbuf()
956 sk_jumbo_newbuf(struct sk_if_softc *sc_if, int idx) in sk_jumbo_newbuf() argument
976 if (bus_dmamap_load_mbuf_sg(sc_if->sk_cdata.sk_jumbo_rx_tag, in sk_jumbo_newbuf()
977 sc_if->sk_cdata.sk_jumbo_rx_sparemap, m, segs, &nsegs, 0) != 0) { in sk_jumbo_newbuf()
983 rxd = &sc_if->sk_cdata.sk_jumbo_rxdesc[idx]; in sk_jumbo_newbuf()
985 bus_dmamap_sync(sc_if->sk_cdata.sk_jumbo_rx_tag, rxd->rx_dmamap, in sk_jumbo_newbuf()
987 bus_dmamap_unload(sc_if->sk_cdata.sk_jumbo_rx_tag, in sk_jumbo_newbuf()
991 rxd->rx_dmamap = sc_if->sk_cdata.sk_jumbo_rx_sparemap; in sk_jumbo_newbuf()
992 sc_if->sk_cdata.sk_jumbo_rx_sparemap = map; in sk_jumbo_newbuf()
993 bus_dmamap_sync(sc_if->sk_cdata.sk_jumbo_rx_tag, rxd->rx_dmamap, in sk_jumbo_newbuf()
996 r = &sc_if->sk_rdata.sk_jumbo_rx_ring[idx]; in sk_jumbo_newbuf()
1010 struct sk_if_softc *sc_if = if_getsoftc(ifp); in sk_ifmedia_upd() local
1013 mii = device_get_softc(sc_if->sk_miibus); in sk_ifmedia_upd()
1014 sk_init(sc_if); in sk_ifmedia_upd()
1026 struct sk_if_softc *sc_if; in sk_ifmedia_sts() local
1029 sc_if = if_getsoftc(ifp); in sk_ifmedia_sts()
1030 mii = device_get_softc(sc_if->sk_miibus); in sk_ifmedia_sts()
1042 struct sk_if_softc *sc_if = if_getsoftc(ifp); in sk_ioctl() local
1053 if (sc_if->sk_jumbo_disable != 0 && in sk_ioctl()
1057 SK_IF_LOCK(sc_if); in sk_ioctl()
1061 sk_init_locked(sc_if); in sk_ioctl()
1063 SK_IF_UNLOCK(sc_if); in sk_ioctl()
1068 SK_IF_LOCK(sc_if); in sk_ioctl()
1071 if ((if_getflags(ifp) ^ sc_if->sk_if_flags) in sk_ioctl()
1073 sk_rxfilter(sc_if); in sk_ioctl()
1075 sk_init_locked(sc_if); in sk_ioctl()
1078 sk_stop(sc_if); in sk_ioctl()
1080 sc_if->sk_if_flags = if_getflags(ifp); in sk_ioctl()
1081 SK_IF_UNLOCK(sc_if); in sk_ioctl()
1085 SK_IF_LOCK(sc_if); in sk_ioctl()
1087 sk_rxfilter(sc_if); in sk_ioctl()
1088 SK_IF_UNLOCK(sc_if); in sk_ioctl()
1092 mii = device_get_softc(sc_if->sk_miibus); in sk_ioctl()
1096 SK_IF_LOCK(sc_if); in sk_ioctl()
1097 if (sc_if->sk_softc->sk_type == SK_GENESIS) { in sk_ioctl()
1098 SK_IF_UNLOCK(sc_if); in sk_ioctl()
1113 SK_IF_UNLOCK(sc_if); in sk_ioctl()
1250 struct sk_if_softc *sc_if; in sk_attach() local
1261 sc_if = device_get_softc(dev); in sk_attach()
1265 sc_if->sk_if_dev = dev; in sk_attach()
1266 sc_if->sk_port = port; in sk_attach()
1267 sc_if->sk_softc = sc; in sk_attach()
1268 sc->sk_if[port] = sc_if; in sk_attach()
1270 sc_if->sk_tx_bmu = SK_BMU_TXS_CSR0; in sk_attach()
1272 sc_if->sk_tx_bmu = SK_BMU_TXS_CSR1; in sk_attach()
1274 callout_init_mtx(&sc_if->sk_tick_ch, &sc_if->sk_softc->sk_mtx, 0); in sk_attach()
1275 callout_init_mtx(&sc_if->sk_watchdog_ch, &sc_if->sk_softc->sk_mtx, 0); in sk_attach()
1277 if (sk_dma_alloc(sc_if) != 0) { in sk_attach()
1281 sk_dma_jumbo_alloc(sc_if); in sk_attach()
1283 ifp = sc_if->sk_ifp = if_alloc(IFT_ETHER); in sk_attach()
1284 if_setsoftc(ifp, sc_if); in sk_attach()
1290 if (sc_if->sk_softc->sk_type != SK_GENESIS) { in sk_attach()
1323 SK_IF_LOCK(sc_if); in sk_attach()
1330 device_printf(sc_if->sk_if_dev, in sk_attach()
1361 sc_if->sk_rx_ramstart = val; in sk_attach()
1363 sc_if->sk_rx_ramend = val - 1; in sk_attach()
1364 sc_if->sk_tx_ramstart = val; in sk_attach()
1366 sc_if->sk_tx_ramend = val - 1; in sk_attach()
1371 val = (sc->sk_rboff + (chunk * 2 * sc_if->sk_port)) / in sk_attach()
1373 sc_if->sk_rx_ramstart = val; in sk_attach()
1375 sc_if->sk_rx_ramend = val - 1; in sk_attach()
1376 sc_if->sk_tx_ramstart = val; in sk_attach()
1378 sc_if->sk_tx_ramend = val - 1; in sk_attach()
1382 sc_if->sk_phytype = sk_win_read_1(sc, SK_EPROM1) & 0xF; in sk_attach()
1384 switch(sc_if->sk_phytype) { in sk_attach()
1386 sc_if->sk_phyaddr = SK_PHYADDR_XMAC; in sk_attach()
1389 sc_if->sk_phyaddr = SK_PHYADDR_BCOM; in sk_attach()
1393 sc_if->sk_phytype); in sk_attach()
1395 SK_IF_UNLOCK(sc_if); in sk_attach()
1399 if (sc_if->sk_phytype < SK_PHYTYPE_MARV_COPPER && in sk_attach()
1402 sc_if->sk_phytype = SK_PHYTYPE_MARV_COPPER; in sk_attach()
1406 sc_if->sk_phyaddr = SK_PHYADDR_MARV; in sk_attach()
1409 sc_if->sk_phytype = SK_PHYTYPE_MARV_FIBER; in sk_attach()
1415 SK_IF_UNLOCK(sc_if); in sk_attach()
1417 SK_IF_LOCK(sc_if); in sk_attach()
1440 sk_init_xmac(sc_if); in sk_attach()
1441 if (sc_if->sk_phytype == SK_PHYTYPE_XMAC) in sk_attach()
1447 sk_init_yukon(sc_if); in sk_attach()
1452 SK_IF_UNLOCK(sc_if); in sk_attach()
1453 error = mii_attach(dev, &sc_if->sk_miibus, ifp, sk_ifmedia_upd, in sk_attach()
1456 device_printf(sc_if->sk_if_dev, "attaching PHYs failed\n"); in sk_attach()
1755 struct sk_if_softc *sc_if; in sk_detach() local
1758 sc_if = device_get_softc(dev); in sk_detach()
1759 KASSERT(mtx_initialized(&sc_if->sk_softc->sk_mtx), in sk_detach()
1761 SK_IF_LOCK(sc_if); in sk_detach()
1763 ifp = sc_if->sk_ifp; in sk_detach()
1766 sk_stop(sc_if); in sk_detach()
1768 SK_IF_UNLOCK(sc_if); in sk_detach()
1769 callout_drain(&sc_if->sk_tick_ch); in sk_detach()
1770 callout_drain(&sc_if->sk_watchdog_ch); in sk_detach()
1772 SK_IF_LOCK(sc_if); in sk_detach()
1775 sk_dma_jumbo_free(sc_if); in sk_detach()
1776 sk_dma_free(sc_if); in sk_detach()
1777 SK_IF_UNLOCK(sc_if); in sk_detach()
1837 sk_dma_alloc(struct sk_if_softc *sc_if) in sk_dma_alloc() argument
1854 bus_get_dma_tag(sc_if->sk_if_dev),/* parent */ in sk_dma_alloc()
1864 &sc_if->sk_cdata.sk_parent_tag); in sk_dma_alloc()
1866 device_printf(sc_if->sk_if_dev, in sk_dma_alloc()
1872 error = bus_dma_tag_create(sc_if->sk_cdata.sk_parent_tag,/* parent */ in sk_dma_alloc()
1882 &sc_if->sk_cdata.sk_tx_ring_tag); in sk_dma_alloc()
1884 device_printf(sc_if->sk_if_dev, in sk_dma_alloc()
1890 error = bus_dma_tag_create(sc_if->sk_cdata.sk_parent_tag,/* parent */ in sk_dma_alloc()
1900 &sc_if->sk_cdata.sk_rx_ring_tag); in sk_dma_alloc()
1902 device_printf(sc_if->sk_if_dev, in sk_dma_alloc()
1908 error = bus_dma_tag_create(sc_if->sk_cdata.sk_parent_tag,/* parent */ in sk_dma_alloc()
1918 &sc_if->sk_cdata.sk_tx_tag); in sk_dma_alloc()
1920 device_printf(sc_if->sk_if_dev, in sk_dma_alloc()
1926 error = bus_dma_tag_create(sc_if->sk_cdata.sk_parent_tag,/* parent */ in sk_dma_alloc()
1936 &sc_if->sk_cdata.sk_rx_tag); in sk_dma_alloc()
1938 device_printf(sc_if->sk_if_dev, in sk_dma_alloc()
1944 error = bus_dmamem_alloc(sc_if->sk_cdata.sk_tx_ring_tag, in sk_dma_alloc()
1945 (void **)&sc_if->sk_rdata.sk_tx_ring, BUS_DMA_NOWAIT | in sk_dma_alloc()
1946 BUS_DMA_COHERENT | BUS_DMA_ZERO, &sc_if->sk_cdata.sk_tx_ring_map); in sk_dma_alloc()
1948 device_printf(sc_if->sk_if_dev, in sk_dma_alloc()
1954 error = bus_dmamap_load(sc_if->sk_cdata.sk_tx_ring_tag, in sk_dma_alloc()
1955 sc_if->sk_cdata.sk_tx_ring_map, sc_if->sk_rdata.sk_tx_ring, in sk_dma_alloc()
1958 device_printf(sc_if->sk_if_dev, in sk_dma_alloc()
1962 sc_if->sk_rdata.sk_tx_ring_paddr = ctx.sk_busaddr; in sk_dma_alloc()
1965 error = bus_dmamem_alloc(sc_if->sk_cdata.sk_rx_ring_tag, in sk_dma_alloc()
1966 (void **)&sc_if->sk_rdata.sk_rx_ring, BUS_DMA_NOWAIT | in sk_dma_alloc()
1967 BUS_DMA_COHERENT | BUS_DMA_ZERO, &sc_if->sk_cdata.sk_rx_ring_map); in sk_dma_alloc()
1969 device_printf(sc_if->sk_if_dev, in sk_dma_alloc()
1975 error = bus_dmamap_load(sc_if->sk_cdata.sk_rx_ring_tag, in sk_dma_alloc()
1976 sc_if->sk_cdata.sk_rx_ring_map, sc_if->sk_rdata.sk_rx_ring, in sk_dma_alloc()
1979 device_printf(sc_if->sk_if_dev, in sk_dma_alloc()
1983 sc_if->sk_rdata.sk_rx_ring_paddr = ctx.sk_busaddr; in sk_dma_alloc()
1987 txd = &sc_if->sk_cdata.sk_txdesc[i]; in sk_dma_alloc()
1990 error = bus_dmamap_create(sc_if->sk_cdata.sk_tx_tag, 0, in sk_dma_alloc()
1993 device_printf(sc_if->sk_if_dev, in sk_dma_alloc()
2000 if ((error = bus_dmamap_create(sc_if->sk_cdata.sk_rx_tag, 0, in sk_dma_alloc()
2001 &sc_if->sk_cdata.sk_rx_sparemap)) != 0) { in sk_dma_alloc()
2002 device_printf(sc_if->sk_if_dev, in sk_dma_alloc()
2007 rxd = &sc_if->sk_cdata.sk_rxdesc[i]; in sk_dma_alloc()
2010 error = bus_dmamap_create(sc_if->sk_cdata.sk_rx_tag, 0, in sk_dma_alloc()
2013 device_printf(sc_if->sk_if_dev, in sk_dma_alloc()
2024 sk_dma_jumbo_alloc(struct sk_if_softc *sc_if) in sk_dma_jumbo_alloc() argument
2031 device_printf(sc_if->sk_if_dev, "disabling jumbo frame support\n"); in sk_dma_jumbo_alloc()
2032 sc_if->sk_jumbo_disable = 1; in sk_dma_jumbo_alloc()
2036 error = bus_dma_tag_create(sc_if->sk_cdata.sk_parent_tag,/* parent */ in sk_dma_jumbo_alloc()
2046 &sc_if->sk_cdata.sk_jumbo_rx_ring_tag); in sk_dma_jumbo_alloc()
2048 device_printf(sc_if->sk_if_dev, in sk_dma_jumbo_alloc()
2054 error = bus_dma_tag_create(sc_if->sk_cdata.sk_parent_tag,/* parent */ in sk_dma_jumbo_alloc()
2064 &sc_if->sk_cdata.sk_jumbo_rx_tag); in sk_dma_jumbo_alloc()
2066 device_printf(sc_if->sk_if_dev, in sk_dma_jumbo_alloc()
2072 error = bus_dmamem_alloc(sc_if->sk_cdata.sk_jumbo_rx_ring_tag, in sk_dma_jumbo_alloc()
2073 (void **)&sc_if->sk_rdata.sk_jumbo_rx_ring, BUS_DMA_NOWAIT | in sk_dma_jumbo_alloc()
2075 &sc_if->sk_cdata.sk_jumbo_rx_ring_map); in sk_dma_jumbo_alloc()
2077 device_printf(sc_if->sk_if_dev, in sk_dma_jumbo_alloc()
2083 error = bus_dmamap_load(sc_if->sk_cdata.sk_jumbo_rx_ring_tag, in sk_dma_jumbo_alloc()
2084 sc_if->sk_cdata.sk_jumbo_rx_ring_map, in sk_dma_jumbo_alloc()
2085 sc_if->sk_rdata.sk_jumbo_rx_ring, SK_JUMBO_RX_RING_SZ, sk_dmamap_cb, in sk_dma_jumbo_alloc()
2088 device_printf(sc_if->sk_if_dev, in sk_dma_jumbo_alloc()
2092 sc_if->sk_rdata.sk_jumbo_rx_ring_paddr = ctx.sk_busaddr; in sk_dma_jumbo_alloc()
2095 if ((error = bus_dmamap_create(sc_if->sk_cdata.sk_jumbo_rx_tag, 0, in sk_dma_jumbo_alloc()
2096 &sc_if->sk_cdata.sk_jumbo_rx_sparemap)) != 0) { in sk_dma_jumbo_alloc()
2097 device_printf(sc_if->sk_if_dev, in sk_dma_jumbo_alloc()
2102 jrxd = &sc_if->sk_cdata.sk_jumbo_rxdesc[i]; in sk_dma_jumbo_alloc()
2105 error = bus_dmamap_create(sc_if->sk_cdata.sk_jumbo_rx_tag, 0, in sk_dma_jumbo_alloc()
2108 device_printf(sc_if->sk_if_dev, in sk_dma_jumbo_alloc()
2117 sk_dma_jumbo_free(sc_if); in sk_dma_jumbo_alloc()
2118 device_printf(sc_if->sk_if_dev, "disabling jumbo frame support due to " in sk_dma_jumbo_alloc()
2120 sc_if->sk_jumbo_disable = 1; in sk_dma_jumbo_alloc()
2125 sk_dma_free(struct sk_if_softc *sc_if) in sk_dma_free() argument
2132 if (sc_if->sk_cdata.sk_tx_ring_tag) { in sk_dma_free()
2133 if (sc_if->sk_rdata.sk_tx_ring_paddr) in sk_dma_free()
2134 bus_dmamap_unload(sc_if->sk_cdata.sk_tx_ring_tag, in sk_dma_free()
2135 sc_if->sk_cdata.sk_tx_ring_map); in sk_dma_free()
2136 if (sc_if->sk_rdata.sk_tx_ring) in sk_dma_free()
2137 bus_dmamem_free(sc_if->sk_cdata.sk_tx_ring_tag, in sk_dma_free()
2138 sc_if->sk_rdata.sk_tx_ring, in sk_dma_free()
2139 sc_if->sk_cdata.sk_tx_ring_map); in sk_dma_free()
2140 sc_if->sk_rdata.sk_tx_ring = NULL; in sk_dma_free()
2141 sc_if->sk_rdata.sk_tx_ring_paddr = 0; in sk_dma_free()
2142 bus_dma_tag_destroy(sc_if->sk_cdata.sk_tx_ring_tag); in sk_dma_free()
2143 sc_if->sk_cdata.sk_tx_ring_tag = NULL; in sk_dma_free()
2146 if (sc_if->sk_cdata.sk_rx_ring_tag) { in sk_dma_free()
2147 if (sc_if->sk_rdata.sk_rx_ring_paddr) in sk_dma_free()
2148 bus_dmamap_unload(sc_if->sk_cdata.sk_rx_ring_tag, in sk_dma_free()
2149 sc_if->sk_cdata.sk_rx_ring_map); in sk_dma_free()
2150 if (sc_if->sk_rdata.sk_rx_ring) in sk_dma_free()
2151 bus_dmamem_free(sc_if->sk_cdata.sk_rx_ring_tag, in sk_dma_free()
2152 sc_if->sk_rdata.sk_rx_ring, in sk_dma_free()
2153 sc_if->sk_cdata.sk_rx_ring_map); in sk_dma_free()
2154 sc_if->sk_rdata.sk_rx_ring = NULL; in sk_dma_free()
2155 sc_if->sk_rdata.sk_rx_ring_paddr = 0; in sk_dma_free()
2156 bus_dma_tag_destroy(sc_if->sk_cdata.sk_rx_ring_tag); in sk_dma_free()
2157 sc_if->sk_cdata.sk_rx_ring_tag = NULL; in sk_dma_free()
2160 if (sc_if->sk_cdata.sk_tx_tag) { in sk_dma_free()
2162 txd = &sc_if->sk_cdata.sk_txdesc[i]; in sk_dma_free()
2164 bus_dmamap_destroy(sc_if->sk_cdata.sk_tx_tag, in sk_dma_free()
2169 bus_dma_tag_destroy(sc_if->sk_cdata.sk_tx_tag); in sk_dma_free()
2170 sc_if->sk_cdata.sk_tx_tag = NULL; in sk_dma_free()
2173 if (sc_if->sk_cdata.sk_rx_tag) { in sk_dma_free()
2175 rxd = &sc_if->sk_cdata.sk_rxdesc[i]; in sk_dma_free()
2177 bus_dmamap_destroy(sc_if->sk_cdata.sk_rx_tag, in sk_dma_free()
2182 if (sc_if->sk_cdata.sk_rx_sparemap) { in sk_dma_free()
2183 bus_dmamap_destroy(sc_if->sk_cdata.sk_rx_tag, in sk_dma_free()
2184 sc_if->sk_cdata.sk_rx_sparemap); in sk_dma_free()
2185 sc_if->sk_cdata.sk_rx_sparemap = NULL; in sk_dma_free()
2187 bus_dma_tag_destroy(sc_if->sk_cdata.sk_rx_tag); in sk_dma_free()
2188 sc_if->sk_cdata.sk_rx_tag = NULL; in sk_dma_free()
2191 if (sc_if->sk_cdata.sk_parent_tag) { in sk_dma_free()
2192 bus_dma_tag_destroy(sc_if->sk_cdata.sk_parent_tag); in sk_dma_free()
2193 sc_if->sk_cdata.sk_parent_tag = NULL; in sk_dma_free()
2198 sk_dma_jumbo_free(struct sk_if_softc *sc_if) in sk_dma_jumbo_free() argument
2204 if (sc_if->sk_cdata.sk_jumbo_rx_ring_tag) { in sk_dma_jumbo_free()
2205 if (sc_if->sk_rdata.sk_jumbo_rx_ring_paddr) in sk_dma_jumbo_free()
2206 bus_dmamap_unload(sc_if->sk_cdata.sk_jumbo_rx_ring_tag, in sk_dma_jumbo_free()
2207 sc_if->sk_cdata.sk_jumbo_rx_ring_map); in sk_dma_jumbo_free()
2208 if (sc_if->sk_rdata.sk_jumbo_rx_ring) in sk_dma_jumbo_free()
2209 bus_dmamem_free(sc_if->sk_cdata.sk_jumbo_rx_ring_tag, in sk_dma_jumbo_free()
2210 sc_if->sk_rdata.sk_jumbo_rx_ring, in sk_dma_jumbo_free()
2211 sc_if->sk_cdata.sk_jumbo_rx_ring_map); in sk_dma_jumbo_free()
2212 sc_if->sk_rdata.sk_jumbo_rx_ring = NULL; in sk_dma_jumbo_free()
2213 sc_if->sk_rdata.sk_jumbo_rx_ring_paddr = 0; in sk_dma_jumbo_free()
2214 bus_dma_tag_destroy(sc_if->sk_cdata.sk_jumbo_rx_ring_tag); in sk_dma_jumbo_free()
2215 sc_if->sk_cdata.sk_jumbo_rx_ring_tag = NULL; in sk_dma_jumbo_free()
2219 if (sc_if->sk_cdata.sk_jumbo_rx_tag) { in sk_dma_jumbo_free()
2221 jrxd = &sc_if->sk_cdata.sk_jumbo_rxdesc[i]; in sk_dma_jumbo_free()
2224 sc_if->sk_cdata.sk_jumbo_rx_tag, in sk_dma_jumbo_free()
2229 if (sc_if->sk_cdata.sk_jumbo_rx_sparemap) { in sk_dma_jumbo_free()
2230 bus_dmamap_destroy(sc_if->sk_cdata.sk_jumbo_rx_tag, in sk_dma_jumbo_free()
2231 sc_if->sk_cdata.sk_jumbo_rx_sparemap); in sk_dma_jumbo_free()
2232 sc_if->sk_cdata.sk_jumbo_rx_sparemap = NULL; in sk_dma_jumbo_free()
2234 bus_dma_tag_destroy(sc_if->sk_cdata.sk_jumbo_rx_tag); in sk_dma_jumbo_free()
2235 sc_if->sk_cdata.sk_jumbo_rx_tag = NULL; in sk_dma_jumbo_free()
2283 sk_encap(struct sk_if_softc *sc_if, struct mbuf **m_head) in sk_encap() argument
2292 SK_IF_LOCK_ASSERT(sc_if); in sk_encap()
2294 if ((txd = STAILQ_FIRST(&sc_if->sk_cdata.sk_txfreeq)) == NULL) in sk_encap()
2297 error = bus_dmamap_load_mbuf_sg(sc_if->sk_cdata.sk_tx_tag, in sk_encap()
2307 error = bus_dmamap_load_mbuf_sg(sc_if->sk_cdata.sk_tx_tag, in sk_encap()
2321 if (sc_if->sk_cdata.sk_tx_cnt + nseg >= SK_TX_RING_CNT) { in sk_encap()
2322 bus_dmamap_unload(sc_if->sk_cdata.sk_tx_tag, txd->tx_dmamap); in sk_encap()
2327 if ((m->m_pkthdr.csum_flags & if_gethwassist(sc_if->sk_ifp)) != 0) in sk_encap()
2331 si = frag = sc_if->sk_cdata.sk_tx_prod; in sk_encap()
2333 f = &sc_if->sk_rdata.sk_tx_ring[frag]; in sk_encap()
2339 sk_txcksum(sc_if->sk_ifp, m, f); in sk_encap()
2344 sc_if->sk_cdata.sk_tx_cnt++; in sk_encap()
2347 sc_if->sk_cdata.sk_tx_prod = frag; in sk_encap()
2351 f = &sc_if->sk_rdata.sk_tx_ring[frag]; in sk_encap()
2355 f = &sc_if->sk_rdata.sk_tx_ring[si]; in sk_encap()
2358 STAILQ_REMOVE_HEAD(&sc_if->sk_cdata.sk_txfreeq, tx_q); in sk_encap()
2359 STAILQ_INSERT_TAIL(&sc_if->sk_cdata.sk_txbusyq, txd, tx_q); in sk_encap()
2363 bus_dmamap_sync(sc_if->sk_cdata.sk_tx_tag, txd->tx_dmamap, in sk_encap()
2365 bus_dmamap_sync(sc_if->sk_cdata.sk_tx_ring_tag, in sk_encap()
2366 sc_if->sk_cdata.sk_tx_ring_map, in sk_encap()
2375 struct sk_if_softc *sc_if; in sk_start() local
2377 sc_if = if_getsoftc(ifp); in sk_start()
2379 SK_IF_LOCK(sc_if); in sk_start()
2381 SK_IF_UNLOCK(sc_if); in sk_start()
2390 struct sk_if_softc *sc_if; in sk_start_locked() local
2394 sc_if = if_getsoftc(ifp); in sk_start_locked()
2395 sc = sc_if->sk_softc; in sk_start_locked()
2397 SK_IF_LOCK_ASSERT(sc_if); in sk_start_locked()
2400 sc_if->sk_cdata.sk_tx_cnt < SK_TX_RING_CNT - 1; ) { in sk_start_locked()
2410 if (sk_encap(sc_if, &m_head)) { in sk_start_locked()
2428 CSR_WRITE_4(sc, sc_if->sk_tx_bmu, SK_TXBMU_TX_START); in sk_start_locked()
2431 sc_if->sk_watchdog_timer = 5; in sk_start_locked()
2438 struct sk_if_softc *sc_if; in sk_watchdog() local
2442 sc_if = if_getsoftc(ifp); in sk_watchdog()
2444 SK_IF_LOCK_ASSERT(sc_if); in sk_watchdog()
2446 if (sc_if->sk_watchdog_timer == 0 || --sc_if->sk_watchdog_timer) in sk_watchdog()
2453 sk_txeof(sc_if); in sk_watchdog()
2454 if (sc_if->sk_cdata.sk_tx_cnt != 0) { in sk_watchdog()
2455 if_printf(sc_if->sk_ifp, "watchdog timeout\n"); in sk_watchdog()
2458 sk_init_locked(sc_if); in sk_watchdog()
2462 callout_reset(&sc_if->sk_watchdog_ch, hz, sk_watchdog, ifp); in sk_watchdog()
2628 sk_rxeof(struct sk_if_softc *sc_if) in sk_rxeof() argument
2638 sc = sc_if->sk_softc; in sk_rxeof()
2639 ifp = sc_if->sk_ifp; in sk_rxeof()
2641 SK_IF_LOCK_ASSERT(sc_if); in sk_rxeof()
2643 bus_dmamap_sync(sc_if->sk_cdata.sk_rx_ring_tag, in sk_rxeof()
2644 sc_if->sk_cdata.sk_rx_ring_map, BUS_DMASYNC_POSTREAD); in sk_rxeof()
2647 for (cons = sc_if->sk_cdata.sk_rx_cons; prog < SK_RX_RING_CNT; in sk_rxeof()
2649 cur_rx = &sc_if->sk_rdata.sk_rx_ring[cons]; in sk_rxeof()
2653 rxd = &sc_if->sk_cdata.sk_rxdesc[cons]; in sk_rxeof()
2663 sk_discard_rxbuf(sc_if, cons); in sk_rxeof()
2669 if (sk_newbuf(sc_if, cons) != 0) { in sk_rxeof()
2672 sk_discard_rxbuf(sc_if, cons); in sk_rxeof()
2680 SK_IF_UNLOCK(sc_if); in sk_rxeof()
2682 SK_IF_LOCK(sc_if); in sk_rxeof()
2686 sc_if->sk_cdata.sk_rx_cons = cons; in sk_rxeof()
2687 bus_dmamap_sync(sc_if->sk_cdata.sk_rx_ring_tag, in sk_rxeof()
2688 sc_if->sk_cdata.sk_rx_ring_map, in sk_rxeof()
2694 sk_jumbo_rxeof(struct sk_if_softc *sc_if) in sk_jumbo_rxeof() argument
2704 sc = sc_if->sk_softc; in sk_jumbo_rxeof()
2705 ifp = sc_if->sk_ifp; in sk_jumbo_rxeof()
2707 SK_IF_LOCK_ASSERT(sc_if); in sk_jumbo_rxeof()
2709 bus_dmamap_sync(sc_if->sk_cdata.sk_jumbo_rx_ring_tag, in sk_jumbo_rxeof()
2710 sc_if->sk_cdata.sk_jumbo_rx_ring_map, BUS_DMASYNC_POSTREAD); in sk_jumbo_rxeof()
2713 for (cons = sc_if->sk_cdata.sk_jumbo_rx_cons; in sk_jumbo_rxeof()
2716 cur_rx = &sc_if->sk_rdata.sk_jumbo_rx_ring[cons]; in sk_jumbo_rxeof()
2720 jrxd = &sc_if->sk_cdata.sk_jumbo_rxdesc[cons]; in sk_jumbo_rxeof()
2730 sk_discard_jumbo_rxbuf(sc_if, cons); in sk_jumbo_rxeof()
2736 if (sk_jumbo_newbuf(sc_if, cons) != 0) { in sk_jumbo_rxeof()
2739 sk_discard_jumbo_rxbuf(sc_if, cons); in sk_jumbo_rxeof()
2747 SK_IF_UNLOCK(sc_if); in sk_jumbo_rxeof()
2749 SK_IF_LOCK(sc_if); in sk_jumbo_rxeof()
2753 sc_if->sk_cdata.sk_jumbo_rx_cons = cons; in sk_jumbo_rxeof()
2754 bus_dmamap_sync(sc_if->sk_cdata.sk_jumbo_rx_ring_tag, in sk_jumbo_rxeof()
2755 sc_if->sk_cdata.sk_jumbo_rx_ring_map, in sk_jumbo_rxeof()
2761 sk_txeof(struct sk_if_softc *sc_if) in sk_txeof() argument
2768 ifp = sc_if->sk_ifp; in sk_txeof()
2770 txd = STAILQ_FIRST(&sc_if->sk_cdata.sk_txbusyq); in sk_txeof()
2773 bus_dmamap_sync(sc_if->sk_cdata.sk_tx_ring_tag, in sk_txeof()
2774 sc_if->sk_cdata.sk_tx_ring_map, BUS_DMASYNC_POSTREAD); in sk_txeof()
2779 for (idx = sc_if->sk_cdata.sk_tx_cons;; SK_INC(idx, SK_TX_RING_CNT)) { in sk_txeof()
2780 if (sc_if->sk_cdata.sk_tx_cnt <= 0) in sk_txeof()
2782 cur_tx = &sc_if->sk_rdata.sk_tx_ring[idx]; in sk_txeof()
2786 sc_if->sk_cdata.sk_tx_cnt--; in sk_txeof()
2790 bus_dmamap_sync(sc_if->sk_cdata.sk_tx_tag, txd->tx_dmamap, in sk_txeof()
2792 bus_dmamap_unload(sc_if->sk_cdata.sk_tx_tag, txd->tx_dmamap); in sk_txeof()
2797 STAILQ_REMOVE_HEAD(&sc_if->sk_cdata.sk_txbusyq, tx_q); in sk_txeof()
2798 STAILQ_INSERT_TAIL(&sc_if->sk_cdata.sk_txfreeq, txd, tx_q); in sk_txeof()
2799 txd = STAILQ_FIRST(&sc_if->sk_cdata.sk_txbusyq); in sk_txeof()
2801 sc_if->sk_cdata.sk_tx_cons = idx; in sk_txeof()
2802 sc_if->sk_watchdog_timer = sc_if->sk_cdata.sk_tx_cnt > 0 ? 5 : 0; in sk_txeof()
2804 bus_dmamap_sync(sc_if->sk_cdata.sk_tx_ring_tag, in sk_txeof()
2805 sc_if->sk_cdata.sk_tx_ring_map, in sk_txeof()
2812 struct sk_if_softc *sc_if; in sk_tick() local
2817 sc_if = xsc_if; in sk_tick()
2818 ifp = sc_if->sk_ifp; in sk_tick()
2819 mii = device_get_softc(sc_if->sk_miibus); in sk_tick()
2824 if (sc_if->sk_phytype == SK_PHYTYPE_BCOM) { in sk_tick()
2825 sk_intr_bcom(sc_if); in sk_tick()
2837 if (SK_XM_READ_2(sc_if, XM_GPIO) & XM_GPIO_GP0_SET) in sk_tick()
2842 callout_reset(&sc_if->sk_tick_ch, hz, sk_tick, sc_if); in sk_tick()
2847 SK_XM_CLRBIT_2(sc_if, XM_IMR, XM_IMR_GP0_SET); in sk_tick()
2848 SK_XM_READ_2(sc_if, XM_ISR); in sk_tick()
2850 callout_stop(&sc_if->sk_tick_ch); in sk_tick()
2856 struct sk_if_softc *sc_if; in sk_yukon_tick() local
2859 sc_if = xsc_if; in sk_yukon_tick()
2860 mii = device_get_softc(sc_if->sk_miibus); in sk_yukon_tick()
2863 callout_reset(&sc_if->sk_tick_ch, hz, sk_yukon_tick, sc_if); in sk_yukon_tick()
2867 sk_intr_bcom(struct sk_if_softc *sc_if) in sk_intr_bcom() argument
2872 mii = device_get_softc(sc_if->sk_miibus); in sk_intr_bcom()
2873 ifp = sc_if->sk_ifp; in sk_intr_bcom()
2875 SK_XM_CLRBIT_2(sc_if, XM_MMUCMD, XM_MMUCMD_TX_ENB|XM_MMUCMD_RX_ENB); in sk_intr_bcom()
2881 status = sk_xmac_miibus_readreg(sc_if, SK_PHYADDR_BCOM, BRGPHY_MII_ISR); in sk_intr_bcom()
2884 sk_init_xmac(sc_if); in sk_intr_bcom()
2890 lstat = sk_xmac_miibus_readreg(sc_if, SK_PHYADDR_BCOM, in sk_intr_bcom()
2893 if (!(lstat & BRGPHY_AUXSTS_LINK) && sc_if->sk_link) { in sk_intr_bcom()
2896 SK_IF_WRITE_1(sc_if, 0, in sk_intr_bcom()
2898 sc_if->sk_link = 0; in sk_intr_bcom()
2900 sk_xmac_miibus_writereg(sc_if, SK_PHYADDR_BCOM, in sk_intr_bcom()
2903 sc_if->sk_link = 1; in sk_intr_bcom()
2905 SK_IF_WRITE_1(sc_if, 0, SK_LINKLED1_CTL, in sk_intr_bcom()
2910 callout_reset(&sc_if->sk_tick_ch, hz, sk_tick, sc_if); in sk_intr_bcom()
2914 SK_XM_SETBIT_2(sc_if, XM_MMUCMD, XM_MMUCMD_TX_ENB|XM_MMUCMD_RX_ENB); in sk_intr_bcom()
2920 sk_intr_xmac(struct sk_if_softc *sc_if) in sk_intr_xmac() argument
2924 status = SK_XM_READ_2(sc_if, XM_ISR); in sk_intr_xmac()
2930 if (sc_if->sk_phytype == SK_PHYTYPE_XMAC) { in sk_intr_xmac()
2932 SK_XM_SETBIT_2(sc_if, XM_IMR, XM_IMR_GP0_SET); in sk_intr_xmac()
2933 callout_reset(&sc_if->sk_tick_ch, hz, sk_tick, sc_if); in sk_intr_xmac()
2937 callout_reset(&sc_if->sk_tick_ch, hz, sk_tick, sc_if); in sk_intr_xmac()
2942 SK_XM_SETBIT_4(sc_if, XM_MODE, XM_MODE_FLUSH_TXFIFO); in sk_intr_xmac()
2945 SK_XM_SETBIT_4(sc_if, XM_MODE, XM_MODE_FLUSH_RXFIFO); in sk_intr_xmac()
2947 status = SK_XM_READ_2(sc_if, XM_ISR); in sk_intr_xmac()
2953 sk_intr_yukon(struct sk_if_softc *sc_if) in sk_intr_yukon() argument
2957 status = SK_IF_READ_1(sc_if, 0, SK_GMAC_ISR); in sk_intr_yukon()
2960 SK_IF_WRITE_1(sc_if, 0, SK_RXMF1_CTRL_TEST, in sk_intr_yukon()
2965 SK_IF_WRITE_1(sc_if, 0, SK_RXMF1_CTRL_TEST, in sk_intr_yukon()
3061 sk_init_xmac(struct sk_if_softc *sc_if) in sk_init_xmac() argument
3072 SK_IF_LOCK_ASSERT(sc_if); in sk_init_xmac()
3074 sc = sc_if->sk_softc; in sk_init_xmac()
3075 ifp = sc_if->sk_ifp; in sk_init_xmac()
3078 SK_IF_WRITE_2(sc_if, 0, SK_TXF1_MACCTL, SK_TXMACCTL_XMAC_UNRESET); in sk_init_xmac()
3082 SK_XM_SETBIT_2(sc_if, XM_GPIO, XM_GPIO_RESETMAC); in sk_init_xmac()
3085 sc_if->sk_xmac_rev = XM_XMAC_REV(SK_XM_READ_4(sc_if, XM_DEVID)); in sk_init_xmac()
3092 if (sc_if->sk_phytype == SK_PHYTYPE_BCOM) { in sk_init_xmac()
3098 if (sc_if->sk_port == SK_PORT_A) in sk_init_xmac()
3105 SK_XM_SETBIT_2(sc_if, XM_HWCFG, XM_HWCFG_GMIIMODE); in sk_init_xmac()
3107 sk_xmac_miibus_writereg(sc_if, SK_PHYADDR_BCOM, in sk_init_xmac()
3110 sk_xmac_miibus_writereg(sc_if, SK_PHYADDR_BCOM, in sk_init_xmac()
3119 if (sk_xmac_miibus_readreg(sc_if, SK_PHYADDR_BCOM, 0x03) in sk_init_xmac()
3122 sk_xmac_miibus_writereg(sc_if, SK_PHYADDR_BCOM, in sk_init_xmac()
3130 bcopy(if_getlladdr(sc_if->sk_ifp), eaddr, ETHER_ADDR_LEN); in sk_init_xmac()
3131 SK_XM_WRITE_2(sc_if, XM_PAR0, eaddr[0]); in sk_init_xmac()
3132 SK_XM_WRITE_2(sc_if, XM_PAR1, eaddr[1]); in sk_init_xmac()
3133 SK_XM_WRITE_2(sc_if, XM_PAR2, eaddr[2]); in sk_init_xmac()
3134 SK_XM_SETBIT_4(sc_if, XM_MODE, XM_MODE_RX_USE_STATION); in sk_init_xmac()
3137 SK_XM_CLRBIT_4(sc_if, XM_MODE, XM_MODE_RX_NOBROAD); in sk_init_xmac()
3139 SK_XM_SETBIT_4(sc_if, XM_MODE, XM_MODE_RX_NOBROAD); in sk_init_xmac()
3143 SK_XM_SETBIT_2(sc_if, XM_RXCMD, XM_RXCMD_STRIPFCS); in sk_init_xmac()
3146 SK_XM_SETBIT_2(sc_if, XM_TXCMD, XM_TXCMD_AUTOPAD); in sk_init_xmac()
3163 SK_XM_SETBIT_4(sc_if, XM_MODE, XM_MODE_RX_BADFRAMES| in sk_init_xmac()
3166 SK_XM_SETBIT_2(sc_if, XM_RXCMD, XM_RXCMD_BIGPKTOK); in sk_init_xmac()
3168 SK_XM_CLRBIT_2(sc_if, XM_RXCMD, XM_RXCMD_BIGPKTOK); in sk_init_xmac()
3174 SK_XM_WRITE_2(sc_if, XM_TX_REQTHRESH, SK_XM_TX_FIFOTHRESH); in sk_init_xmac()
3177 sk_rxfilter_genesis(sc_if); in sk_init_xmac()
3180 SK_XM_READ_2(sc_if, XM_ISR); in sk_init_xmac()
3181 if (sc_if->sk_phytype == SK_PHYTYPE_XMAC) in sk_init_xmac()
3182 SK_XM_WRITE_2(sc_if, XM_IMR, XM_INTRS); in sk_init_xmac()
3184 SK_XM_WRITE_2(sc_if, XM_IMR, 0xFFFF); in sk_init_xmac()
3187 switch(sc_if->sk_xmac_rev) { in sk_init_xmac()
3216 sc_if->sk_link = 1; in sk_init_xmac()
3222 sk_init_yukon(struct sk_if_softc *sc_if) in sk_init_yukon() argument
3231 SK_IF_LOCK_ASSERT(sc_if); in sk_init_yukon()
3233 sc = sc_if->sk_softc; in sk_init_yukon()
3234 ifp = sc_if->sk_ifp; in sk_init_yukon()
3249 SK_IF_WRITE_4(sc_if, 0, SK_GPHY_CTRL, SK_GPHY_RESET_SET); in sk_init_yukon()
3250 SK_IF_WRITE_4(sc_if, 0, SK_GMAC_CTRL, SK_GMAC_RESET_SET); in sk_init_yukon()
3272 SK_IF_WRITE_4(sc_if, 0, SK_GPHY_CTRL, phy | SK_GPHY_RESET_SET); in sk_init_yukon()
3274 SK_IF_WRITE_4(sc_if, 0, SK_GPHY_CTRL, phy | SK_GPHY_RESET_CLEAR); in sk_init_yukon()
3275 SK_IF_WRITE_4(sc_if, 0, SK_GMAC_CTRL, SK_GMAC_LOOP_OFF | in sk_init_yukon()
3279 SK_IF_READ_2(sc_if, 0, SK_GMAC_ISR); in sk_init_yukon()
3281 reg = SK_YU_READ_2(sc_if, YUKON_PAR); in sk_init_yukon()
3285 SK_YU_WRITE_2(sc_if, YUKON_PAR, reg); in sk_init_yukon()
3289 SK_YU_WRITE_2(sc_if, YUKON_PAR, reg); in sk_init_yukon()
3292 SK_YU_WRITE_2(sc_if, YUKON_RCR, YU_RCR_CRCR); in sk_init_yukon()
3295 SK_YU_WRITE_2(sc_if, YUKON_TPR, YU_TPR_JAM_LEN(0x3) | in sk_init_yukon()
3302 SK_YU_WRITE_2(sc_if, YUKON_SMR, reg); in sk_init_yukon()
3305 eaddr = if_getlladdr(sc_if->sk_ifp); in sk_init_yukon()
3307 SK_YU_WRITE_2(sc_if, SK_MAC0_0 + i * 4, in sk_init_yukon()
3311 SK_YU_WRITE_2(sc_if, YUKON_SAL1 + i * 4, in sk_init_yukon()
3315 SK_YU_WRITE_2(sc_if, YUKON_SAL2 + i * 4, in sk_init_yukon()
3319 sk_rxfilter_yukon(sc_if); in sk_init_yukon()
3322 SK_YU_WRITE_2(sc_if, YUKON_TIMR, 0); in sk_init_yukon()
3323 SK_YU_WRITE_2(sc_if, YUKON_RIMR, 0); in sk_init_yukon()
3324 SK_YU_WRITE_2(sc_if, YUKON_TRIMR, 0); in sk_init_yukon()
3330 SK_IF_WRITE_2(sc_if, 0, SK_RXMF1_FLUSH_MASK, v); in sk_init_yukon()
3338 SK_IF_WRITE_1(sc_if, 0, SK_RXMF1_CTRL_TEST, SK_RFCTL_RESET_CLEAR); in sk_init_yukon()
3339 SK_IF_WRITE_2(sc_if, 0, SK_RXMF1_CTRL_TEST, v); in sk_init_yukon()
3342 SK_IF_WRITE_2(sc_if, 0, SK_RXMF1_FLUSH_THRESHOLD, in sk_init_yukon()
3346 SK_IF_WRITE_1(sc_if, 0, SK_TXMF1_CTRL_TEST, SK_TFCTL_RESET_CLEAR); in sk_init_yukon()
3347 SK_IF_WRITE_2(sc_if, 0, SK_TXMF1_CTRL_TEST, SK_TFCTL_OPERATION_ON); in sk_init_yukon()
3357 struct sk_if_softc *sc_if = xsc; in sk_init() local
3359 SK_IF_LOCK(sc_if); in sk_init()
3360 sk_init_locked(sc_if); in sk_init()
3361 SK_IF_UNLOCK(sc_if); in sk_init()
3367 sk_init_locked(struct sk_if_softc *sc_if) in sk_init_locked() argument
3376 SK_IF_LOCK_ASSERT(sc_if); in sk_init_locked()
3378 ifp = sc_if->sk_ifp; in sk_init_locked()
3379 sc = sc_if->sk_softc; in sk_init_locked()
3380 mii = device_get_softc(sc_if->sk_miibus); in sk_init_locked()
3386 sk_stop(sc_if); in sk_init_locked()
3390 SK_IF_WRITE_1(sc_if, 0, SK_LINKLED1_CTL, SK_LINKLED_ON); in sk_init_locked()
3391 SK_IF_WRITE_1(sc_if, 0, SK_LINKLED1_CTL, in sk_init_locked()
3395 SK_IF_WRITE_1(sc_if, 0, SK_RXLED1_CTL, in sk_init_locked()
3399 SK_IF_WRITE_1(sc_if, 0, SK_TXLED1_CTL, in sk_init_locked()
3420 SK_IF_WRITE_4(sc_if, 0, SK_DPT_INIT, SK_DPT_TIMER_MAX); in sk_init_locked()
3427 sk_init_xmac(sc_if); in sk_init_locked()
3432 sk_init_yukon(sc_if); in sk_init_locked()
3439 SK_IF_WRITE_4(sc_if, 0, SK_RXF1_CTL, SK_FIFO_UNRESET); in sk_init_locked()
3440 SK_IF_WRITE_4(sc_if, 0, SK_RXF1_END, SK_FIFO_END); in sk_init_locked()
3441 SK_IF_WRITE_4(sc_if, 0, SK_RXF1_CTL, SK_FIFO_ON); in sk_init_locked()
3443 SK_IF_WRITE_4(sc_if, 0, SK_TXF1_CTL, SK_FIFO_UNRESET); in sk_init_locked()
3444 SK_IF_WRITE_4(sc_if, 0, SK_TXF1_END, SK_FIFO_END); in sk_init_locked()
3445 SK_IF_WRITE_4(sc_if, 0, SK_TXF1_CTL, SK_FIFO_ON); in sk_init_locked()
3449 SK_IF_WRITE_1(sc_if, 0, SK_TXAR1_COUNTERCTL, in sk_init_locked()
3453 SK_IF_WRITE_4(sc_if, 0, SK_RXRB1_CTLTST, SK_RBCTL_UNRESET); in sk_init_locked()
3454 SK_IF_WRITE_4(sc_if, 0, SK_RXRB1_START, sc_if->sk_rx_ramstart); in sk_init_locked()
3455 SK_IF_WRITE_4(sc_if, 0, SK_RXRB1_WR_PTR, sc_if->sk_rx_ramstart); in sk_init_locked()
3456 SK_IF_WRITE_4(sc_if, 0, SK_RXRB1_RD_PTR, sc_if->sk_rx_ramstart); in sk_init_locked()
3457 SK_IF_WRITE_4(sc_if, 0, SK_RXRB1_END, sc_if->sk_rx_ramend); in sk_init_locked()
3458 SK_IF_WRITE_4(sc_if, 0, SK_RXRB1_CTLTST, SK_RBCTL_ON); in sk_init_locked()
3460 SK_IF_WRITE_4(sc_if, 1, SK_TXRBS1_CTLTST, SK_RBCTL_UNRESET); in sk_init_locked()
3461 SK_IF_WRITE_4(sc_if, 1, SK_TXRBS1_CTLTST, SK_RBCTL_STORENFWD_ON); in sk_init_locked()
3462 SK_IF_WRITE_4(sc_if, 1, SK_TXRBS1_START, sc_if->sk_tx_ramstart); in sk_init_locked()
3463 SK_IF_WRITE_4(sc_if, 1, SK_TXRBS1_WR_PTR, sc_if->sk_tx_ramstart); in sk_init_locked()
3464 SK_IF_WRITE_4(sc_if, 1, SK_TXRBS1_RD_PTR, sc_if->sk_tx_ramstart); in sk_init_locked()
3465 SK_IF_WRITE_4(sc_if, 1, SK_TXRBS1_END, sc_if->sk_tx_ramend); in sk_init_locked()
3466 SK_IF_WRITE_4(sc_if, 1, SK_TXRBS1_CTLTST, SK_RBCTL_ON); in sk_init_locked()
3469 SK_IF_WRITE_4(sc_if, 0, SK_RXQ1_BMU_CSR, SK_RXBMU_ONLINE); in sk_init_locked()
3471 SK_IF_WRITE_4(sc_if, 0, SK_RXQ1_CURADDR_LO, in sk_init_locked()
3472 SK_ADDR_LO(SK_JUMBO_RX_RING_ADDR(sc_if, 0))); in sk_init_locked()
3473 SK_IF_WRITE_4(sc_if, 0, SK_RXQ1_CURADDR_HI, in sk_init_locked()
3474 SK_ADDR_HI(SK_JUMBO_RX_RING_ADDR(sc_if, 0))); in sk_init_locked()
3476 SK_IF_WRITE_4(sc_if, 0, SK_RXQ1_CURADDR_LO, in sk_init_locked()
3477 SK_ADDR_LO(SK_RX_RING_ADDR(sc_if, 0))); in sk_init_locked()
3478 SK_IF_WRITE_4(sc_if, 0, SK_RXQ1_CURADDR_HI, in sk_init_locked()
3479 SK_ADDR_HI(SK_RX_RING_ADDR(sc_if, 0))); in sk_init_locked()
3482 SK_IF_WRITE_4(sc_if, 1, SK_TXQS1_BMU_CSR, SK_TXBMU_ONLINE); in sk_init_locked()
3483 SK_IF_WRITE_4(sc_if, 1, SK_TXQS1_CURADDR_LO, in sk_init_locked()
3484 SK_ADDR_LO(SK_TX_RING_ADDR(sc_if, 0))); in sk_init_locked()
3485 SK_IF_WRITE_4(sc_if, 1, SK_TXQS1_CURADDR_HI, in sk_init_locked()
3486 SK_ADDR_HI(SK_TX_RING_ADDR(sc_if, 0))); in sk_init_locked()
3490 error = sk_init_jumbo_rx_ring(sc_if); in sk_init_locked()
3492 error = sk_init_rx_ring(sc_if); in sk_init_locked()
3494 device_printf(sc_if->sk_if_dev, in sk_init_locked()
3496 sk_stop(sc_if); in sk_init_locked()
3499 sk_init_tx_ring(sc_if); in sk_init_locked()
3507 device_printf(sc_if->sk_if_dev, in sk_init_locked()
3514 if (sc_if->sk_port == SK_PORT_A) in sk_init_locked()
3524 SK_IF_WRITE_4(sc_if, 0, SK_RXQ1_BMU_CSR, SK_RXBMU_RX_START); in sk_init_locked()
3529 SK_XM_CLRBIT_2(sc_if, XM_MMUCMD, XM_MMUCMD_IGNPAUSE); in sk_init_locked()
3530 SK_XM_SETBIT_2(sc_if, XM_MMUCMD, XM_MMUCMD_TX_ENB|XM_MMUCMD_RX_ENB); in sk_init_locked()
3535 reg = SK_YU_READ_2(sc_if, YUKON_GPCR); in sk_init_locked()
3541 SK_YU_WRITE_2(sc_if, YUKON_GPCR, reg); in sk_init_locked()
3545 SK_IF_WRITE_4(sc_if, 0, SK_DPT_TIMER_CTRL, SK_DPT_TCTL_START); in sk_init_locked()
3547 CSR_WRITE_4(sc, sc_if->sk_tx_bmu, SK_TXBMU_TX_START); in sk_init_locked()
3556 callout_reset(&sc_if->sk_tick_ch, hz, sk_yukon_tick, sc_if); in sk_init_locked()
3560 callout_reset(&sc_if->sk_watchdog_ch, hz, sk_watchdog, ifp); in sk_init_locked()
3566 sk_stop(struct sk_if_softc *sc_if) in sk_stop() argument
3576 SK_IF_LOCK_ASSERT(sc_if); in sk_stop()
3577 sc = sc_if->sk_softc; in sk_stop()
3578 ifp = sc_if->sk_ifp; in sk_stop()
3580 callout_stop(&sc_if->sk_tick_ch); in sk_stop()
3581 callout_stop(&sc_if->sk_watchdog_ch); in sk_stop()
3584 SK_IF_WRITE_4(sc_if, 0, SK_DPT_TIMER_CTRL, SK_DPT_TCTL_STOP); in sk_stop()
3586 CSR_WRITE_4(sc, sc_if->sk_tx_bmu, SK_TXBMU_TX_STOP); in sk_stop()
3588 val = CSR_READ_4(sc, sc_if->sk_tx_bmu); in sk_stop()
3594 device_printf(sc_if->sk_if_dev, in sk_stop()
3597 SK_IF_WRITE_4(sc_if, 0, SK_RXQ1_BMU_CSR, SK_RXBMU_RX_STOP); in sk_stop()
3599 val = SK_IF_READ_4(sc_if, 0, SK_RXQ1_BMU_CSR); in sk_stop()
3605 device_printf(sc_if->sk_if_dev, in sk_stop()
3608 if (sc_if->sk_phytype == SK_PHYTYPE_BCOM) { in sk_stop()
3611 if (sc_if->sk_port == SK_PORT_A) { in sk_stop()
3622 SK_XM_SETBIT_2(sc_if, XM_GPIO, XM_GPIO_RESETMAC); in sk_stop()
3625 SK_IF_WRITE_2(sc_if, 0, SK_TXF1_MACCTL, SK_TXMACCTL_XMAC_RESET); in sk_stop()
3626 SK_IF_WRITE_4(sc_if, 0, SK_RXF1_CTL, SK_FIFO_RESET); in sk_stop()
3631 SK_IF_WRITE_1(sc_if,0, SK_RXMF1_CTRL_TEST, SK_RFCTL_RESET_SET); in sk_stop()
3632 SK_IF_WRITE_1(sc_if,0, SK_TXMF1_CTRL_TEST, SK_TFCTL_RESET_SET); in sk_stop()
3635 SK_IF_WRITE_4(sc_if, 0, SK_RXQ1_BMU_CSR, SK_RXBMU_OFFLINE); in sk_stop()
3636 SK_IF_WRITE_4(sc_if, 0, SK_RXRB1_CTLTST, SK_RBCTL_RESET|SK_RBCTL_OFF); in sk_stop()
3637 SK_IF_WRITE_4(sc_if, 1, SK_TXQS1_BMU_CSR, SK_TXBMU_OFFLINE); in sk_stop()
3638 SK_IF_WRITE_4(sc_if, 1, SK_TXRBS1_CTLTST, SK_RBCTL_RESET|SK_RBCTL_OFF); in sk_stop()
3639 SK_IF_WRITE_1(sc_if, 0, SK_TXAR1_COUNTERCTL, SK_TXARCTL_OFF); in sk_stop()
3640 SK_IF_WRITE_1(sc_if, 0, SK_RXLED1_CTL, SK_RXLEDCTL_COUNTER_STOP); in sk_stop()
3641 SK_IF_WRITE_1(sc_if, 0, SK_TXLED1_CTL, SK_RXLEDCTL_COUNTER_STOP); in sk_stop()
3642 SK_IF_WRITE_1(sc_if, 0, SK_LINKLED1_CTL, SK_LINKLED_OFF); in sk_stop()
3643 SK_IF_WRITE_1(sc_if, 0, SK_LINKLED1_CTL, SK_LINKLED_LINKSYNC_OFF); in sk_stop()
3646 if (sc_if->sk_port == SK_PORT_A) in sk_stop()
3652 SK_XM_READ_2(sc_if, XM_ISR); in sk_stop()
3653 SK_XM_WRITE_2(sc_if, XM_IMR, 0xFFFF); in sk_stop()
3657 rxd = &sc_if->sk_cdata.sk_rxdesc[i]; in sk_stop()
3659 bus_dmamap_sync(sc_if->sk_cdata.sk_rx_tag, in sk_stop()
3661 bus_dmamap_unload(sc_if->sk_cdata.sk_rx_tag, in sk_stop()
3668 jrxd = &sc_if->sk_cdata.sk_jumbo_rxdesc[i]; in sk_stop()
3670 bus_dmamap_sync(sc_if->sk_cdata.sk_jumbo_rx_tag, in sk_stop()
3672 bus_dmamap_unload(sc_if->sk_cdata.sk_jumbo_rx_tag, in sk_stop()
3679 txd = &sc_if->sk_cdata.sk_txdesc[i]; in sk_stop()
3681 bus_dmamap_sync(sc_if->sk_cdata.sk_tx_tag, in sk_stop()
3683 bus_dmamap_unload(sc_if->sk_cdata.sk_tx_tag, in sk_stop()