Lines Matching +full:pme +full:- +full:active +full:- +full:high
1 /*-
2 * SPDX-License-Identifier: BSD-4-Clause
4 * Copyright (c) 2005 Poul-Henning Kamp <phk@FreeBSD.org>
19 * 4. Neither the name of the author nor the names of any co-contributors
52 * 128-bit multicast hash table. The SiS 900 has a built-in MII-based
54 * Both chips offer the standard bit-bang MII interface as well as
111 #define SIS_LOCK(_sc) mtx_lock(&(_sc)->sis_mtx)
112 #define SIS_UNLOCK(_sc) mtx_unlock(&(_sc)->sis_mtx)
113 #define SIS_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->sis_mtx, MA_OWNED)
118 #define CSR_WRITE_4(sc, reg, val) bus_write_4(sc->sis_res[0], reg, val)
120 #define CSR_READ_4(sc, reg) bus_read_4(sc->sis_res[0], reg)
122 #define CSR_READ_2(sc, reg) bus_read_2(sc->sis_res[0], reg)
125 bus_barrier(sc->sis_res[0], reg, length, flags)
170 * MII bit-bang glue
191 { -1, 0 }
228 for (idx = (300 / 33) + 1; idx > 0; idx--) in sis_delay()
436 * Read the MII serial port for the MII bit-bang module.
453 * Write the MII serial port for the MII bit-bang module.
474 if (sc->sis_type == SIS_TYPE_83815) { in sis_miibus_readreg()
497 if (sc->sis_type == SIS_TYPE_900 && in sis_miibus_readreg()
498 sc->sis_rev < SIS_REV_635) { in sis_miibus_readreg()
514 device_printf(sc->sis_dev, in sis_miibus_readreg()
537 if (sc->sis_type == SIS_TYPE_83815) { in sis_miibus_writereg()
549 if (sc->sis_type == SIS_TYPE_900 && in sis_miibus_writereg()
550 sc->sis_rev < SIS_REV_635) { in sis_miibus_writereg()
566 device_printf(sc->sis_dev, in sis_miibus_writereg()
585 mii = device_get_softc(sc->sis_miibus); in sis_miibus_statchg()
586 ifp = sc->sis_ifp; in sis_miibus_statchg()
591 sc->sis_flags &= ~SIS_FLAG_LINK; in sis_miibus_statchg()
592 if ((mii->mii_media_status & (IFM_ACTIVE | IFM_AVALID)) == in sis_miibus_statchg()
594 switch (IFM_SUBTYPE(mii->mii_media_active)) { in sis_miibus_statchg()
597 sc->sis_flags |= SIS_FLAG_LINK; in sis_miibus_statchg()
601 sc->sis_flags |= SIS_FLAG_LINK; in sis_miibus_statchg()
608 if ((sc->sis_flags & SIS_FLAG_LINK) == 0) { in sis_miibus_statchg()
619 if ((IFM_OPTIONS(mii->mii_media_active) & IFM_FDX) != 0) { in sis_miibus_statchg()
629 if (sc->sis_type == SIS_TYPE_83815 && sc->sis_srr >= NS_SRR_16A) { in sis_miibus_statchg()
637 if (sc->sis_type == SIS_TYPE_83815 && sc->sis_srr < NS_SRR_16A && in sis_miibus_statchg()
638 IFM_SUBTYPE(mii->mii_media_active) == IFM_100_TX) { in sis_miibus_statchg()
648 device_printf(sc->sis_dev, in sis_miibus_statchg()
671 * The NatSemi chip has a 512-bit filter, which is in sis_mchash()
672 * different than the SiS, so we special-case it. in sis_mchash()
674 if (sc->sis_type == SIS_TYPE_83815) in sis_mchash()
676 else if (sc->sis_rev >= SIS_REV_635 || in sis_mchash()
677 sc->sis_rev == SIS_REV_900B) in sis_mchash()
689 if (sc->sis_type == SIS_TYPE_83815) in sis_rxfilter()
707 bit -= 0x10; in sis_write_maddr()
719 ifp = sc->sis_ifp; in sis_rxfilter_ns()
779 h = sis_mchash(ctx->sc, LLADDR(sdl)); in sis_hash_maddr()
780 ctx->hashes[h >> 4] |= 1 << (h & 0xf); in sis_hash_maddr()
792 ifp = sc->sis_ifp; in sis_rxfilter_sis()
795 if (sc->sis_rev >= SIS_REV_635 || sc->sis_rev == SIS_REV_900B) in sis_rxfilter_sis()
850 device_printf(sc->sis_dev, "reset never completed\n"); in sis_reset()
857 * PME mode. in sis_reset()
859 if (sc->sis_type == SIS_TYPE_83815) { in sis_reset()
879 while (t->sis_name != NULL) { in sis_probe()
880 if ((pci_get_vendor(dev) == t->sis_vid) && in sis_probe()
881 (pci_get_device(dev) == t->sis_did)) { in sis_probe()
882 device_set_desc(dev, t->sis_name); in sis_probe()
905 sc->sis_dev = dev; in sis_attach()
907 mtx_init(&sc->sis_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK, in sis_attach()
909 callout_init_mtx(&sc->sis_stat_ch, &sc->sis_mtx, 0); in sis_attach()
912 sc->sis_type = SIS_TYPE_900; in sis_attach()
914 sc->sis_type = SIS_TYPE_7016; in sis_attach()
916 sc->sis_type = SIS_TYPE_83815; in sis_attach()
918 sc->sis_rev = pci_read_config(dev, PCIR_REVID, 1); in sis_attach()
924 error = bus_alloc_resources(dev, sis_res_spec, sc->sis_res); in sis_attach()
933 if (sc->sis_type == SIS_TYPE_900 && in sis_attach()
934 (sc->sis_rev == SIS_REV_635 || in sis_attach()
935 sc->sis_rev == SIS_REV_900B)) { in sis_attach()
945 sc->sis_srr = CSR_READ_4(sc, NS_SRR); in sis_attach()
948 if (sc->sis_srr == NS_SRR_15C) in sis_attach()
950 else if (sc->sis_srr == NS_SRR_15D) in sis_attach()
952 else if (sc->sis_srr == NS_SRR_16A) in sis_attach()
955 device_printf(dev, "Silicon Revision %x\n", sc->sis_srr); in sis_attach()
960 * you'd expect. The address spans 4 16-bit words, in sis_attach()
1014 if (sc->sis_rev == SIS_REV_630S || in sis_attach()
1015 sc->sis_rev == SIS_REV_630E || in sis_attach()
1016 sc->sis_rev == SIS_REV_630EA1) in sis_attach()
1019 else if (sc->sis_rev == SIS_REV_635 || in sis_attach()
1020 sc->sis_rev == SIS_REV_630ET) in sis_attach()
1022 else if (sc->sis_rev == SIS_REV_96x) { in sis_attach()
1040 * Set SIS_EECTL_CLK to high, so a other master in sis_attach()
1059 ifp = sc->sis_ifp = if_alloc(IFT_ETHER); in sis_attach()
1066 if_setsendqlen(ifp, SIS_TX_LIST_CNT - 1); in sis_attach()
1069 if (pci_find_cap(sc->sis_dev, PCIY_PMG, &pmc) == 0) { in sis_attach()
1070 if (sc->sis_type == SIS_TYPE_83815) in sis_attach()
1080 error = mii_attach(dev, &sc->sis_miibus, ifp, sis_ifmedia_upd, in sis_attach()
1103 error = bus_setup_intr(dev, sc->sis_res[1], INTR_TYPE_NET | INTR_MPSAFE, in sis_attach()
1104 NULL, sis_intr, sc, &sc->sis_intrhand); in sis_attach()
1133 KASSERT(mtx_initialized(&sc->sis_mtx), ("sis mutex not initialized")); in sis_detach()
1134 ifp = sc->sis_ifp; in sis_detach()
1141 /* These should only be active if attach succeeded. */ in sis_detach()
1146 callout_drain(&sc->sis_stat_ch); in sis_detach()
1151 if (sc->sis_intrhand) in sis_detach()
1152 bus_teardown_intr(dev, sc->sis_res[1], sc->sis_intrhand); in sis_detach()
1153 bus_release_resources(dev, sis_res_spec, sc->sis_res); in sis_detach()
1160 mtx_destroy(&sc->sis_mtx); in sis_detach()
1180 ctx->sis_busaddr = segs[0].ds_addr; in sis_dmamap_cb()
1191 error = bus_dma_tag_create(sc->sis_parent_tag, alignment, 0, in sis_dma_ring_alloc()
1195 device_printf(sc->sis_dev, in sis_dma_ring_alloc()
1203 device_printf(sc->sis_dev, in sis_dma_ring_alloc()
1212 device_printf(sc->sis_dev, in sis_dma_ring_alloc()
1228 error = bus_dma_tag_create(bus_get_dma_tag(sc->sis_dev), in sis_dma_alloc()
1231 0, NULL, NULL, &sc->sis_parent_tag); in sis_dma_alloc()
1233 device_printf(sc->sis_dev, in sis_dma_alloc()
1240 &sc->sis_rx_list_tag, (uint8_t **)&sc->sis_rx_list, in sis_dma_alloc()
1241 &sc->sis_rx_list_map, &sc->sis_rx_paddr, "RX ring"); in sis_dma_alloc()
1247 &sc->sis_tx_list_tag, (uint8_t **)&sc->sis_tx_list, in sis_dma_alloc()
1248 &sc->sis_tx_list_map, &sc->sis_tx_paddr, "TX ring"); in sis_dma_alloc()
1253 error = bus_dma_tag_create(sc->sis_parent_tag, SIS_RX_BUF_ALIGN, 0, in sis_dma_alloc()
1255 MCLBYTES, 0, NULL, NULL, &sc->sis_rx_tag); in sis_dma_alloc()
1257 device_printf(sc->sis_dev, "could not allocate RX dma tag\n"); in sis_dma_alloc()
1262 error = bus_dma_tag_create(sc->sis_parent_tag, 1, 0, in sis_dma_alloc()
1265 &sc->sis_tx_tag); in sis_dma_alloc()
1267 device_printf(sc->sis_dev, "could not allocate TX dma tag\n"); in sis_dma_alloc()
1272 error = bus_dmamap_create(sc->sis_rx_tag, 0, &sc->sis_rx_sparemap); in sis_dma_alloc()
1274 device_printf(sc->sis_dev, in sis_dma_alloc()
1279 rxd = &sc->sis_rxdesc[i]; in sis_dma_alloc()
1280 rxd->rx_m = NULL; in sis_dma_alloc()
1281 error = bus_dmamap_create(sc->sis_rx_tag, 0, &rxd->rx_dmamap); in sis_dma_alloc()
1283 device_printf(sc->sis_dev, in sis_dma_alloc()
1291 txd = &sc->sis_txdesc[i]; in sis_dma_alloc()
1292 txd->tx_m = NULL; in sis_dma_alloc()
1293 error = bus_dmamap_create(sc->sis_tx_tag, 0, &txd->tx_dmamap); in sis_dma_alloc()
1295 device_printf(sc->sis_dev, in sis_dma_alloc()
1313 rxd = &sc->sis_rxdesc[i]; in sis_dma_free()
1314 if (rxd->rx_dmamap) in sis_dma_free()
1315 bus_dmamap_destroy(sc->sis_rx_tag, rxd->rx_dmamap); in sis_dma_free()
1317 if (sc->sis_rx_sparemap) in sis_dma_free()
1318 bus_dmamap_destroy(sc->sis_rx_tag, sc->sis_rx_sparemap); in sis_dma_free()
1322 txd = &sc->sis_txdesc[i]; in sis_dma_free()
1323 if (txd->tx_dmamap) in sis_dma_free()
1324 bus_dmamap_destroy(sc->sis_tx_tag, txd->tx_dmamap); in sis_dma_free()
1327 if (sc->sis_rx_tag) in sis_dma_free()
1328 bus_dma_tag_destroy(sc->sis_rx_tag); in sis_dma_free()
1329 if (sc->sis_tx_tag) in sis_dma_free()
1330 bus_dma_tag_destroy(sc->sis_tx_tag); in sis_dma_free()
1333 if (sc->sis_rx_paddr) in sis_dma_free()
1334 bus_dmamap_unload(sc->sis_rx_list_tag, sc->sis_rx_list_map); in sis_dma_free()
1335 if (sc->sis_rx_list) in sis_dma_free()
1336 bus_dmamem_free(sc->sis_rx_list_tag, sc->sis_rx_list, in sis_dma_free()
1337 sc->sis_rx_list_map); in sis_dma_free()
1339 if (sc->sis_rx_list_tag) in sis_dma_free()
1340 bus_dma_tag_destroy(sc->sis_rx_list_tag); in sis_dma_free()
1343 if (sc->sis_tx_paddr) in sis_dma_free()
1344 bus_dmamap_unload(sc->sis_tx_list_tag, sc->sis_tx_list_map); in sis_dma_free()
1346 if (sc->sis_tx_list) in sis_dma_free()
1347 bus_dmamem_free(sc->sis_tx_list_tag, sc->sis_tx_list, in sis_dma_free()
1348 sc->sis_tx_list_map); in sis_dma_free()
1350 if (sc->sis_tx_list_tag) in sis_dma_free()
1351 bus_dma_tag_destroy(sc->sis_tx_list_tag); in sis_dma_free()
1354 if (sc->sis_parent_tag) in sis_dma_free()
1355 bus_dma_tag_destroy(sc->sis_parent_tag); in sis_dma_free()
1371 bzero(&sc->sis_tx_list[0], SIS_TX_LIST_SZ); in sis_ring_init()
1373 txd = &sc->sis_txdesc[i]; in sis_ring_init()
1374 txd->tx_m = NULL; in sis_ring_init()
1375 if (i == SIS_TX_LIST_CNT - 1) in sis_ring_init()
1379 sc->sis_tx_list[i].sis_next = htole32(SIS_ADDR_LO(next)); in sis_ring_init()
1381 sc->sis_tx_prod = sc->sis_tx_cons = sc->sis_tx_cnt = 0; in sis_ring_init()
1382 bus_dmamap_sync(sc->sis_tx_list_tag, sc->sis_tx_list_map, in sis_ring_init()
1385 sc->sis_rx_cons = 0; in sis_ring_init()
1386 bzero(&sc->sis_rx_list[0], SIS_RX_LIST_SZ); in sis_ring_init()
1388 rxd = &sc->sis_rxdesc[i]; in sis_ring_init()
1389 rxd->rx_desc = &sc->sis_rx_list[i]; in sis_ring_init()
1390 if (i == SIS_RX_LIST_CNT - 1) in sis_ring_init()
1394 rxd->rx_desc->sis_next = htole32(SIS_ADDR_LO(next)); in sis_ring_init()
1399 bus_dmamap_sync(sc->sis_rx_list_tag, sc->sis_rx_list_map, in sis_ring_init()
1419 m->m_len = m->m_pkthdr.len = SIS_RXLEN; in sis_newbuf()
1424 if (bus_dmamap_load_mbuf_sg(sc->sis_rx_tag, sc->sis_rx_sparemap, m, in sis_newbuf()
1431 if (rxd->rx_m != NULL) { in sis_newbuf()
1432 bus_dmamap_sync(sc->sis_rx_tag, rxd->rx_dmamap, in sis_newbuf()
1434 bus_dmamap_unload(sc->sis_rx_tag, rxd->rx_dmamap); in sis_newbuf()
1436 map = rxd->rx_dmamap; in sis_newbuf()
1437 rxd->rx_dmamap = sc->sis_rx_sparemap; in sis_newbuf()
1438 sc->sis_rx_sparemap = map; in sis_newbuf()
1439 bus_dmamap_sync(sc->sis_rx_tag, rxd->rx_dmamap, BUS_DMASYNC_PREREAD); in sis_newbuf()
1440 rxd->rx_m = m; in sis_newbuf()
1441 rxd->rx_desc->sis_ptr = htole32(SIS_ADDR_LO(segs[0].ds_addr)); in sis_newbuf()
1442 rxd->rx_desc->sis_cmdsts = htole32(SIS_RXLEN); in sis_newbuf()
1450 rxd->rx_desc->sis_cmdsts = htole32(SIS_RXLEN); in sis_discard_rxbuf()
1461 dst = src - (SIS_RX_BUF_ALIGN - ETHER_ALIGN) / sizeof(*src); in sis_fixup_rx()
1463 for (i = 0; i < (m->m_len / sizeof(uint16_t) + 1); i++) in sis_fixup_rx()
1466 m->m_data -= SIS_RX_BUF_ALIGN - ETHER_ALIGN; in sis_fixup_rx()
1486 bus_dmamap_sync(sc->sis_rx_list_tag, sc->sis_rx_list_map, in sis_rxeof()
1489 rx_cons = sc->sis_rx_cons; in sis_rxeof()
1490 ifp = sc->sis_ifp; in sis_rxeof()
1496 if (sc->rxcycles <= 0) in sis_rxeof()
1498 sc->rxcycles--; in sis_rxeof()
1501 cur_rx = &sc->sis_rx_list[rx_cons]; in sis_rxeof()
1502 rxstat = le32toh(cur_rx->sis_cmdsts); in sis_rxeof()
1505 rxd = &sc->sis_rxdesc[rx_cons]; in sis_rxeof()
1507 total_len = (rxstat & SIS_CMDSTS_BUFLEN) - ETHER_CRC_LEN; in sis_rxeof()
1509 total_len <= (ETHER_MAX_LEN + ETHER_VLAN_ENCAP_LEN - in sis_rxeof()
1521 m = rxd->rx_m; in sis_rxeof()
1529 m->m_pkthdr.len = m->m_len = total_len; in sis_rxeof()
1540 m->m_pkthdr.rcvif = ifp; in sis_rxeof()
1549 sc->sis_rx_cons = rx_cons; in sis_rxeof()
1550 bus_dmamap_sync(sc->sis_rx_list_tag, sc->sis_rx_list_map, in sis_rxeof()
1572 cons = sc->sis_tx_cons; in sis_txeof()
1573 if (cons == sc->sis_tx_prod) in sis_txeof()
1576 ifp = sc->sis_ifp; in sis_txeof()
1577 bus_dmamap_sync(sc->sis_tx_list_tag, sc->sis_tx_list_map, in sis_txeof()
1584 for (; cons != sc->sis_tx_prod; SIS_INC(cons, SIS_TX_LIST_CNT)) { in sis_txeof()
1585 cur_tx = &sc->sis_tx_list[cons]; in sis_txeof()
1586 txstat = le32toh(cur_tx->sis_cmdsts); in sis_txeof()
1589 txd = &sc->sis_txdesc[cons]; in sis_txeof()
1590 if (txd->tx_m != NULL) { in sis_txeof()
1591 bus_dmamap_sync(sc->sis_tx_tag, txd->tx_dmamap, in sis_txeof()
1593 bus_dmamap_unload(sc->sis_tx_tag, txd->tx_dmamap); in sis_txeof()
1594 m_freem(txd->tx_m); in sis_txeof()
1595 txd->tx_m = NULL; in sis_txeof()
1608 sc->sis_tx_cnt--; in sis_txeof()
1611 sc->sis_tx_cons = cons; in sis_txeof()
1612 if (sc->sis_tx_cnt == 0) in sis_txeof()
1613 sc->sis_watchdog_timer = 0; in sis_txeof()
1625 mii = device_get_softc(sc->sis_miibus); in sis_tick()
1628 if ((sc->sis_flags & SIS_FLAG_LINK) == 0) in sis_tick()
1629 sis_miibus_statchg(sc->sis_dev); in sis_tick()
1630 callout_reset(&sc->sis_stat_ch, hz, sis_tick, sc); in sis_tick()
1655 sc->rxcycles = count; in sis_poll()
1661 if (sc->rxcycles > 0 || cmd == POLL_AND_CHECK_STATUS) { in sis_poll()
1692 ifp = sc->sis_ifp; in sis_intr()
1741 /* Re-enable interrupts. */ in sis_intr()
1766 prod = sc->sis_tx_prod; in sis_encap()
1767 txd = &sc->sis_txdesc[prod]; in sis_encap()
1768 if ((sc->sis_flags & SIS_FLAG_MANUAL_PAD) != 0 && in sis_encap()
1769 (*m_head)->m_pkthdr.len < SIS_MIN_FRAMELEN) { in sis_encap()
1771 padlen = SIS_MIN_FRAMELEN - m->m_pkthdr.len; in sis_encap()
1782 if (m->m_next != NULL || M_TRAILINGSPACE(m) < padlen) { in sis_encap()
1794 bzero(mtod(m, char *) + m->m_pkthdr.len, padlen); in sis_encap()
1795 m->m_pkthdr.len += padlen; in sis_encap()
1796 m->m_len = m->m_pkthdr.len; in sis_encap()
1799 error = bus_dmamap_load_mbuf_sg(sc->sis_tx_tag, txd->tx_dmamap, in sis_encap()
1809 error = bus_dmamap_load_mbuf_sg(sc->sis_tx_tag, txd->tx_dmamap, in sis_encap()
1820 if (sc->sis_tx_cnt + nsegs > SIS_TX_LIST_CNT - 1) { in sis_encap()
1821 bus_dmamap_unload(sc->sis_tx_tag, txd->tx_dmamap); in sis_encap()
1825 bus_dmamap_sync(sc->sis_tx_tag, txd->tx_dmamap, BUS_DMASYNC_PREWRITE); in sis_encap()
1829 f = &sc->sis_tx_list[prod]; in sis_encap()
1831 f->sis_cmdsts = htole32(segs[i].ds_len | in sis_encap()
1834 f->sis_cmdsts = htole32(segs[i].ds_len | in sis_encap()
1836 f->sis_ptr = htole32(SIS_ADDR_LO(segs[i].ds_addr)); in sis_encap()
1838 sc->sis_tx_cnt++; in sis_encap()
1842 sc->sis_tx_prod = prod; in sis_encap()
1845 prod = (prod - 1) & (SIS_TX_LIST_CNT - 1); in sis_encap()
1846 f = &sc->sis_tx_list[prod]; in sis_encap()
1847 f->sis_cmdsts &= ~htole32(SIS_CMDSTS_MORE); in sis_encap()
1850 f = &sc->sis_tx_list[frag]; in sis_encap()
1851 f->sis_cmdsts |= htole32(SIS_CMDSTS_OWN); in sis_encap()
1854 map = txd->tx_dmamap; in sis_encap()
1855 txd->tx_dmamap = sc->sis_txdesc[prod].tx_dmamap; in sis_encap()
1856 sc->sis_txdesc[prod].tx_dmamap = map; in sis_encap()
1857 sc->sis_txdesc[prod].tx_m = *m_head; in sis_encap()
1885 IFF_DRV_RUNNING || (sc->sis_flags & SIS_FLAG_LINK) == 0) in sis_startl()
1889 sc->sis_tx_cnt < SIS_TX_LIST_CNT - 4;) { in sis_startl()
1913 bus_dmamap_sync(sc->sis_tx_list_tag, sc->sis_tx_list_map, in sis_startl()
1920 sc->sis_watchdog_timer = 5; in sis_startl()
1937 if_t ifp = sc->sis_ifp; in sis_initl()
1955 if (sc->sis_type == SIS_TYPE_83815 && sc->sis_srr >= NS_SRR_16A) { in sis_initl()
1964 mii = device_get_softc(sc->sis_miibus); in sis_initl()
1967 eaddr = if_getlladdr(sc->sis_ifp); in sis_initl()
1968 if (sc->sis_type == SIS_TYPE_83815) { in sis_initl()
1986 device_printf(sc->sis_dev, in sis_initl()
1992 if (sc->sis_type == SIS_TYPE_83815) { in sis_initl()
1993 if (sc->sis_manual_pad != 0) in sis_initl()
1994 sc->sis_flags |= SIS_FLAG_MANUAL_PAD; in sis_initl()
1996 sc->sis_flags &= ~SIS_FLAG_MANUAL_PAD; in sis_initl()
2006 if (sc->sis_type == SIS_TYPE_83815 && sc->sis_srr <= NS_SRR_15D) { in sis_initl()
2023 CSR_WRITE_4(sc, SIS_RX_LISTPTR, SIS_ADDR_LO(sc->sis_rx_paddr)); in sis_initl()
2024 CSR_WRITE_4(sc, SIS_TX_LISTPTR, SIS_ADDR_LO(sc->sis_tx_paddr)); in sis_initl()
2063 sc->sis_flags &= ~SIS_FLAG_LINK; in sis_initl()
2069 callout_reset(&sc->sis_stat_ch, hz, sis_tick, sc); in sis_initl()
2086 mii = device_get_softc(sc->sis_miibus); in sis_ifmedia_upd()
2087 LIST_FOREACH(miisc, &mii->mii_phys, mii_list) in sis_ifmedia_upd()
2107 mii = device_get_softc(sc->sis_miibus); in sis_ifmedia_sts()
2109 ifmr->ifm_active = mii->mii_media_active; in sis_ifmedia_sts()
2110 ifmr->ifm_status = mii->mii_media_status; in sis_ifmedia_sts()
2127 ((if_getflags(ifp) ^ sc->sis_if_flags) & in sis_ioctl()
2134 sc->sis_if_flags = if_getflags(ifp); in sis_ioctl()
2146 mii = device_get_softc(sc->sis_miibus); in sis_ioctl()
2147 error = ifmedia_ioctl(ifp, ifr, &mii->mii_media, command); in sis_ioctl()
2151 mask = ifr->ifr_reqcap ^ if_getcapenable(ifp); in sis_ioctl()
2196 if (sc->sis_watchdog_timer == 0 || --sc->sis_watchdog_timer >0) in sis_watchdog()
2199 device_printf(sc->sis_dev, "watchdog timeout\n"); in sis_watchdog()
2200 if_inc_counter(sc->sis_ifp, IFCOUNTER_OERRORS, 1); in sis_watchdog()
2202 if_setdrvflagbits(sc->sis_ifp, 0, IFF_DRV_RUNNING); in sis_watchdog()
2205 if (!if_sendq_empty(sc->sis_ifp)) in sis_watchdog()
2206 sis_startl(sc->sis_ifp); in sis_watchdog()
2223 ifp = sc->sis_ifp; in sis_stop()
2224 sc->sis_watchdog_timer = 0; in sis_stop()
2226 callout_stop(&sc->sis_stat_ch); in sis_stop()
2237 sc->sis_flags &= ~SIS_FLAG_LINK; in sis_stop()
2243 rxd = &sc->sis_rxdesc[i]; in sis_stop()
2244 if (rxd->rx_m != NULL) { in sis_stop()
2245 bus_dmamap_sync(sc->sis_rx_tag, rxd->rx_dmamap, in sis_stop()
2247 bus_dmamap_unload(sc->sis_rx_tag, rxd->rx_dmamap); in sis_stop()
2248 m_freem(rxd->rx_m); in sis_stop()
2249 rxd->rx_m = NULL; in sis_stop()
2257 txd = &sc->sis_txdesc[i]; in sis_stop()
2258 if (txd->tx_m != NULL) { in sis_stop()
2259 bus_dmamap_sync(sc->sis_tx_tag, txd->tx_dmamap, in sis_stop()
2261 bus_dmamap_unload(sc->sis_tx_tag, txd->tx_dmamap); in sis_stop()
2262 m_freem(txd->tx_m); in sis_stop()
2263 txd->tx_m = NULL; in sis_stop()
2300 ifp = sc->sis_ifp; in sis_resume()
2317 ifp = sc->sis_ifp; in sis_wol()
2321 if (sc->sis_type == SIS_TYPE_83815) { in sis_wol()
2335 /* Enable PME and clear PMESTS. */ in sis_wol()
2342 if (pci_find_cap(sc->sis_dev, PCIY_PMG, &pmc) != 0) in sis_wol()
2348 /* Request PME. */ in sis_wol()
2349 pmstat = pci_read_config(sc->sis_dev, in sis_wol()
2354 pci_write_config(sc->sis_dev, in sis_wol()
2365 ctx = device_get_sysctl_ctx(sc->sis_dev); in sis_add_sysctls()
2366 children = SYSCTL_CHILDREN(device_get_sysctl_tree(sc->sis_dev)); in sis_add_sysctls()
2375 sc->sis_manual_pad = 0; in sis_add_sysctls()
2377 CTLFLAG_RWTUN, &sc->sis_manual_pad, 0, "Manually pad short frames"); in sis_add_sysctls()