Lines Matching +full:0 +full:xfc800000
162 static int intr_filter = 0;
164 static int msi_disable = 0;
166 static int msix_disable = 0;
168 static int prefer_iomap = 0;
177 { DLINK_VENDORID, DLINK_DEVICEID_528T, 0,
179 { DLINK_VENDORID, DLINK_DEVICEID_530T_REVC, 0,
181 { RT_VENDORID, RT_DEVICEID_2600, 0,
183 { RT_VENDORID, RT_DEVICEID_8139, 0,
185 { RT_VENDORID, RT_DEVICEID_8101E, 0,
187 { RT_VENDORID, RT_DEVICEID_8168, 0,
189 { RT_VENDORID, RT_DEVICEID_8161, 0,
191 { NCUBE_VENDORID, RT_DEVICEID_8168, 0,
193 { RT_VENDORID, RT_DEVICEID_8169, 0,
195 { RT_VENDORID, RT_DEVICEID_8169SC, 0,
197 { COREGA_VENDORID, COREGA_DEVICEID_CGLAPCIGT, 0,
199 { LINKSYS_VENDORID, LINKSYS_DEVICEID_EG1032, 0,
201 { USR_VENDORID, USR_DEVICEID_997902, 0,
252 { 0, 0, NULL, 0 }
354 DRIVER_MODULE(re, pci, re_driver, 0, 0);
355 DRIVER_MODULE(miibus, re, miibus_driver, 0, 0);
400 u_int16_t word = 0; in re_eeprom_getword()
410 for (i = 0x8000; i; i >>= 1) { in re_eeprom_getword()
429 u_int16_t word = 0, *ptr; in re_read_eeprom()
435 for (i = 0; i < cnt; i++) { in re_read_eeprom()
464 for (i = 0; i < RL_PHY_TIMEOUT; i++) { in re_gmii_readreg()
473 return (0); in re_gmii_readreg()
496 for (i = 0; i < RL_PHY_TIMEOUT; i++) { in re_gmii_writereg()
505 return (0); in re_gmii_writereg()
513 return (0); in re_gmii_writereg()
520 u_int16_t rval = 0; in re_miibus_readreg()
521 u_int16_t re8139_reg = 0; in re_miibus_readreg()
548 return (0); in re_miibus_readreg()
560 return (0); in re_miibus_readreg()
574 u_int16_t re8139_reg = 0; in re_miibus_writereg()
575 int rval = 0; in re_miibus_writereg()
606 return (0); in re_miibus_writereg()
610 return (0); in re_miibus_writereg()
613 return (0); in re_miibus_writereg()
627 (if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) in re_miibus_statchg()
639 if ((sc->rl_flags & RL_FLAG_FASTETHER) != 0) in re_miibus_statchg()
660 hashes[0] |= (1 << h); in re_hash_maddr()
674 uint32_t h, hashes[2] = { 0, 0 }; in re_set_rxmode()
682 if ((sc->rl_flags & RL_FLAG_EARLYOFF) != 0) in re_set_rxmode()
684 else if ((sc->rl_flags & RL_FLAG_8168G_PLUS) != 0) in re_set_rxmode()
696 hashes[0] = hashes[1] = 0xffffffff; in re_set_rxmode()
702 if (hashes[0] != 0 || hashes[1] != 0) { in re_set_rxmode()
710 if ((sc->rl_flags & RL_FLAG_PCIE) != 0) { in re_set_rxmode()
711 h = bswap32(hashes[0]); in re_set_rxmode()
712 hashes[0] = bswap32(hashes[1]); in re_set_rxmode()
720 hashes[0] = 0xffffffff; in re_set_rxmode()
721 hashes[1] = 0xffffffff; in re_set_rxmode()
725 CSR_WRITE_4(sc, RL_MAR0, hashes[0]); in re_set_rxmode()
739 for (i = 0; i < RL_TIMEOUT; i++) { in re_reset()
747 if ((sc->rl_flags & RL_FLAG_MACRESET) != 0) in re_reset()
748 CSR_WRITE_1(sc, 0x82, 1); in re_reset()
750 re_gmii_writereg(sc->rl_dev, 1, 0x0b, 0); in re_reset()
784 int total_len, i, error = 0, phyaddr; in re_diag()
785 u_int8_t dst[] = { 0x00, 'h', 'e', 'l', 'l', 'o' }; in re_diag()
786 u_int8_t src[] = { 0x00, 'w', 'o', 'r', 'l', 'd' }; in re_diag()
804 if_setflagbit(ifp, IFF_PROMISC, 0); in re_diag()
806 if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); in re_diag()
812 phyaddr = 0; in re_diag()
815 for (i = 0; i < RL_TIMEOUT; i++) { in re_diag()
839 CSR_WRITE_2(sc, RL_ISR, 0xFFFF); in re_diag()
849 for (i = 0; i < RL_TIMEOUT; i++) { in re_diag()
875 sc->rl_ldata.rl_rx_desc[0].rx_dmamap, in re_diag()
878 sc->rl_ldata.rl_rx_desc[0].rx_dmamap); in re_diag()
880 m0 = sc->rl_ldata.rl_rx_desc[0].rx_m; in re_diag()
881 sc->rl_ldata.rl_rx_desc[0].rx_m = NULL; in re_diag()
884 cur_rx = &sc->rl_ldata.rl_rx_list[0]; in re_diag()
901 device_printf(sc->rl_dev, "expected TX data: %6D/%6D/0x%x\n", in re_diag()
903 device_printf(sc->rl_dev, "received RX data: %6D/%6D/0x%x\n", in re_diag()
918 sc->rl_testmode = 0; in re_diag()
920 if_setflagbit(ifp, 0, IFF_PROMISC); in re_diag()
960 if (revid != 0x20) { in re_probe()
967 for (i = 0; i < nitems(re_devs); i++, t++) { in re_probe()
1014 if ((sc->rl_flags & RL_FLAG_PCIE) == 0) in re_allocmem()
1016 error = bus_dma_tag_create(bus_get_dma_tag(dev), 1, 0, in re_allocmem()
1018 BUS_SPACE_MAXSIZE_32BIT, 0, BUS_SPACE_MAXSIZE_32BIT, 0, in re_allocmem()
1028 error = bus_dma_tag_create(sc->rl_parent_tag, 1, 0, in re_allocmem()
1030 NULL, MCLBYTES * RL_NTXSEGS, RL_NTXSEGS, 4096, 0, in re_allocmem()
1041 if ((sc->rl_flags & RL_FLAG_JUMBOV2) != 0) { in re_allocmem()
1043 0, BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, NULL, NULL, in re_allocmem()
1044 MJUM9BYTES, 1, MJUM9BYTES, 0, NULL, NULL, in re_allocmem()
1052 error = bus_dma_tag_create(sc->rl_parent_tag, sizeof(uint64_t), 0, in re_allocmem()
1054 MCLBYTES, 1, MCLBYTES, 0, NULL, NULL, &sc->rl_ldata.rl_rx_mtag); in re_allocmem()
1064 0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, in re_allocmem()
1065 NULL, tx_list_size, 1, tx_list_size, 0, in re_allocmem()
1085 sc->rl_ldata.rl_tx_list_addr = 0; in re_allocmem()
1090 if (error != 0 || sc->rl_ldata.rl_tx_list_addr == 0) { in re_allocmem()
1097 for (i = 0; i < sc->rl_ldata.rl_tx_desc_cnt; i++) { in re_allocmem()
1098 error = bus_dmamap_create(sc->rl_ldata.rl_tx_mtag, 0, in re_allocmem()
1110 0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, in re_allocmem()
1111 NULL, rx_list_size, 1, rx_list_size, 0, in re_allocmem()
1131 sc->rl_ldata.rl_rx_list_addr = 0; in re_allocmem()
1136 if (error != 0 || sc->rl_ldata.rl_rx_list_addr == 0) { in re_allocmem()
1143 if ((sc->rl_flags & RL_FLAG_JUMBOV2) != 0) { in re_allocmem()
1144 error = bus_dmamap_create(sc->rl_ldata.rl_jrx_mtag, 0, in re_allocmem()
1151 for (i = 0; i < sc->rl_ldata.rl_rx_desc_cnt; i++) { in re_allocmem()
1152 error = bus_dmamap_create(sc->rl_ldata.rl_jrx_mtag, 0, in re_allocmem()
1161 error = bus_dmamap_create(sc->rl_ldata.rl_rx_mtag, 0, in re_allocmem()
1167 for (i = 0; i < sc->rl_ldata.rl_rx_desc_cnt; i++) { in re_allocmem()
1168 error = bus_dmamap_create(sc->rl_ldata.rl_rx_mtag, 0, in re_allocmem()
1177 error = bus_dma_tag_create(sc->rl_parent_tag, RL_DUMP_ALIGN, 0, in re_allocmem()
1179 sizeof(struct rl_stats), 1, sizeof(struct rl_stats), 0, NULL, NULL, in re_allocmem()
1196 sc->rl_ldata.rl_stats_addr = 0; in re_allocmem()
1200 if (error != 0 || sc->rl_ldata.rl_stats_addr == 0) { in re_allocmem()
1205 return (0); in re_allocmem()
1220 int capmask, error = 0, hwrev, i, msic, msixc, in re_attach()
1223 u_int16_t devid, re_did = 0; in re_attach()
1231 callout_init_mtx(&sc->rl_stat_callout, &sc->rl_mtx, 0); in re_attach()
1246 if (prefer_iomap == 0) { in re_attach()
1253 sc->rl_res_id = PCIR_BAR(0); in re_attach()
1258 if (sc->rl_res == NULL && prefer_iomap == 0) { in re_attach()
1259 sc->rl_res_id = PCIR_BAR(0); in re_attach()
1275 if (pci_find_cap(dev, PCIY_EXPRESS, ®) == 0) { in re_attach()
1283 if (msix_disable > 0) in re_attach()
1284 msixc = 0; in re_attach()
1285 if (msi_disable > 0) in re_attach()
1286 msic = 0; in re_attach()
1288 if (msixc > 0) { in re_attach()
1298 pci_alloc_msix(dev, &msixc) == 0) { in re_attach()
1306 if ((sc->rl_flags & RL_FLAG_MSIX) == 0) { in re_attach()
1311 msixc = 0; in re_attach()
1315 if (msixc == 0 && msic > 0) { in re_attach()
1317 if (pci_alloc_msi(dev, &msic) == 0) { in re_attach()
1331 if ((sc->rl_flags & RL_FLAG_MSI) == 0) in re_attach()
1332 msic = 0; in re_attach()
1336 if ((sc->rl_flags & (RL_FLAG_MSI | RL_FLAG_MSIX)) == 0) { in re_attach()
1337 rid = 0; in re_attach()
1338 sc->rl_irq[0] = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, in re_attach()
1340 if (sc->rl_irq[0] == NULL) { in re_attach()
1346 for (i = 0, rid = 1; i < RL_MSI_MESSAGES; i++, rid++) { in re_attach()
1359 if ((sc->rl_flags & RL_FLAG_MSI) == 0) { in re_attach()
1362 if ((cfg & RL_CFG2_MSI) != 0) { in re_attach()
1371 if (sc->rl_expcap != 0) { in re_attach()
1374 if ((cap & PCIEM_LINK_CAP_ASPM) != 0) { in re_attach()
1378 PCIEM_LINK_CTL_ASPMC))!= 0) { in re_attach()
1391 switch (hwrev & 0x70000000) { in re_attach()
1392 case 0x00000000: in re_attach()
1393 case 0x10000000: in re_attach()
1394 device_printf(dev, "Chip rev. 0x%08x\n", hwrev & 0xfc800000); in re_attach()
1395 hwrev &= (RL_TXCFG_HWREV | 0x80000000); in re_attach()
1398 device_printf(dev, "Chip rev. 0x%08x\n", hwrev & 0x7c800000); in re_attach()
1399 sc->rl_macrev = hwrev & 0x00700000; in re_attach()
1403 device_printf(dev, "MAC rev. 0x%08x\n", sc->rl_macrev); in re_attach()
1413 device_printf(dev, "Unknown H/W revision: 0x%08x\n", hwrev); in re_attach()
1463 if (sc->rl_macrev == 0x00200000) in re_attach()
1539 sc->rl_cfg2 = 0; in re_attach()
1567 if ((sc->rl_flags & RL_FLAG_PAR) != 0) { in re_attach()
1572 for (i = 0; i < ETHER_ADDR_LEN; i++) in re_attach()
1576 re_read_eeprom(sc, (caddr_t)&re_did, 0, 1); in re_attach()
1577 if (re_did != 0x8129) in re_attach()
1584 for (i = 0; i < ETHER_ADDR_LEN / 2; i++) in re_attach()
1611 if ((sc->rl_flags & RL_FLAG_MACSLEEP) != 0) { in re_attach()
1612 if ((CSR_READ_1(sc, RL_MACDBG) & 0x80) == 0x80) in re_attach()
1614 CSR_READ_1(sc, RL_GPIO) | 0x01); in re_attach()
1617 CSR_READ_1(sc, RL_GPIO) & ~0x01); in re_attach()
1621 if ((sc->rl_flags & RL_FLAG_PHYWAKE_PM) != 0) { in re_attach()
1622 CSR_WRITE_1(sc, RL_PMCH, CSR_READ_1(sc, RL_PMCH) | 0x80); in re_attach()
1624 CSR_WRITE_1(sc, 0xD1, CSR_READ_1(sc, 0xD1) & ~0x08); in re_attach()
1626 if ((sc->rl_flags & RL_FLAG_PHYWAKE) != 0) { in re_attach()
1627 re_gmii_writereg(dev, 1, 0x1f, 0); in re_attach()
1628 re_gmii_writereg(dev, 1, 0x0e, 0); in re_attach()
1643 if_sethwassist(ifp, 0); in re_attach()
1649 if_sethwassistbits(ifp, CSUM_TSO, 0); in re_attach()
1655 NET_TASK_INIT(&sc->rl_inttask, 0, re_int_task, sc); in re_attach()
1657 #define RE_PHYAD_INTERNAL 0 in re_attach()
1664 if ((sc->rl_flags & RL_FLAG_FASTETHER) != 0) in re_attach()
1668 if (error != 0) { in re_attach()
1684 if_setcapabilitiesbit(ifp, IFCAP_VLAN_MTU | IFCAP_VLAN_HWTAGGING, 0); in re_attach()
1686 if_setcapabilitiesbit(ifp, IFCAP_VLAN_HWCSUM, 0); in re_attach()
1689 if_setcapabilitiesbit(ifp, IFCAP_WOL, 0); in re_attach()
1691 if_setcapenablebit(ifp, 0, (IFCAP_WOL_UCAST | IFCAP_WOL_MCAST)); in re_attach()
1697 if_sethwassistbits(ifp, 0, CSUM_TSO); in re_attach()
1698 if_setcapenablebit(ifp, 0, (IFCAP_TSO4 | IFCAP_VLAN_HWTSO)); in re_attach()
1700 if_setcapabilitiesbit(ifp, IFCAP_POLLING, 0); in re_attach()
1734 if ((sc->rl_flags & (RL_FLAG_MSI | RL_FLAG_MSIX)) != 0 && in re_attach()
1735 intr_filter == 0) { in re_attach()
1736 error = bus_setup_intr(dev, sc->rl_irq[0], in re_attach()
1738 &sc->rl_intrhand[0]); in re_attach()
1740 error = bus_setup_intr(dev, sc->rl_irq[0], in re_attach()
1742 &sc->rl_intrhand[0]); in re_attach()
1784 #if 0 in re_detach()
1803 if_setflagbits(ifp, 0, IFF_UP); in re_detach()
1813 if (sc->rl_intrhand[0] != NULL) { in re_detach()
1814 bus_teardown_intr(dev, sc->rl_irq[0], sc->rl_intrhand[0]); in re_detach()
1815 sc->rl_intrhand[0] = NULL; in re_detach()
1823 if ((sc->rl_flags & (RL_FLAG_MSI | RL_FLAG_MSIX)) == 0) in re_detach()
1824 rid = 0; in re_detach()
1827 if (sc->rl_irq[0] != NULL) { in re_detach()
1828 bus_release_resource(dev, SYS_RES_IRQ, rid, sc->rl_irq[0]); in re_detach()
1829 sc->rl_irq[0] = NULL; in re_detach()
1831 if ((sc->rl_flags & (RL_FLAG_MSI | RL_FLAG_MSIX)) != 0) in re_detach()
1870 for (i = 0; i < sc->rl_ldata.rl_tx_desc_cnt; i++) { in re_detach()
1878 for (i = 0; i < sc->rl_ldata.rl_rx_desc_cnt; i++) { in re_detach()
1889 for (i = 0; i < sc->rl_ldata.rl_rx_desc_cnt; i++) { in re_detach()
1916 return (0); in re_detach()
1927 (sc->rl_flags & RL_FLAG_JUMBOV2) != 0) in re_discard_rxbuf()
1932 desc->rl_vlanctl = 0; in re_discard_rxbuf()
1970 if (error != 0) { in re_newbuf()
1986 rxd->rx_size = segs[0].ds_len; in re_newbuf()
1992 desc->rl_vlanctl = 0; in re_newbuf()
1993 desc->rl_bufaddr_lo = htole32(RL_ADDR_LO(segs[0].ds_addr)); in re_newbuf()
1994 desc->rl_bufaddr_hi = htole32(RL_ADDR_HI(segs[0].ds_addr)); in re_newbuf()
1995 cmdstat = segs[0].ds_len; in re_newbuf()
2000 return (0); in re_newbuf()
2023 if (error != 0) { in re_jumbo_newbuf()
2039 rxd->rx_size = segs[0].ds_len; in re_jumbo_newbuf()
2045 desc->rl_vlanctl = 0; in re_jumbo_newbuf()
2046 desc->rl_bufaddr_lo = htole32(RL_ADDR_LO(segs[0].ds_addr)); in re_jumbo_newbuf()
2047 desc->rl_bufaddr_hi = htole32(RL_ADDR_HI(segs[0].ds_addr)); in re_jumbo_newbuf()
2048 cmdstat = segs[0].ds_len; in re_jumbo_newbuf()
2053 return (0); in re_jumbo_newbuf()
2066 for (i = 0; i < (m->m_len / sizeof(uint16_t) + 1); i++) in re_fixup_rx()
2083 for (i = 0; i < sc->rl_ldata.rl_tx_desc_cnt; i++) in re_tx_list_init()
2096 sc->rl_ldata.rl_tx_prodidx = 0; in re_tx_list_init()
2097 sc->rl_ldata.rl_tx_considx = 0; in re_tx_list_init()
2100 return (0); in re_tx_list_init()
2110 for (i = 0; i < sc->rl_ldata.rl_rx_desc_cnt; i++) { in re_rx_list_init()
2112 if ((error = re_newbuf(sc, i)) != 0) in re_rx_list_init()
2125 sc->rl_ldata.rl_rx_prodidx = 0; in re_rx_list_init()
2127 sc->rl_int_rx_act = 0; in re_rx_list_init()
2129 return (0); in re_rx_list_init()
2139 for (i = 0; i < sc->rl_ldata.rl_rx_desc_cnt; i++) { in re_jrx_list_init()
2141 if ((error = re_jumbo_newbuf(sc, i)) != 0) in re_jrx_list_init()
2149 sc->rl_ldata.rl_rx_prodidx = 0; in re_jrx_list_init()
2151 sc->rl_int_rx_act = 0; in re_jrx_list_init()
2153 return (0); in re_jrx_list_init()
2169 int jumbo, maxpkt = 16, rx_npkts = 0; in re_rxeof()
2175 if (netmap_rx_irq(ifp, 0, &rx_npkts)) in re_rxeof()
2176 return 0; in re_rxeof()
2178 if (if_getmtu(ifp) > RL_MTU && (sc->rl_flags & RL_FLAG_JUMBOV2) != 0) in re_rxeof()
2181 jumbo = 0; in re_rxeof()
2189 for (i = sc->rl_ldata.rl_rx_prodidx; maxpkt > 0; in re_rxeof()
2191 if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) in re_rxeof()
2195 if ((rxstat & RL_RDESC_STAT_OWN) != 0) in re_rxeof()
2199 if (jumbo != 0) in re_rxeof()
2204 if ((sc->rl_flags & RL_FLAG_JUMBOV2) != 0 && in re_rxeof()
2213 } else if ((rxstat & RL_RDESC_STAT_EOF) == 0) { in re_rxeof()
2214 if (re_newbuf(sc, i) != 0) { in re_rxeof()
2260 if ((rxstat & RL_RDESC_STAT_RXERRSUM) != 0) { in re_rxeof()
2262 if ((sc->rl_flags & RL_FLAG_JUMBOV2) == 0 && in re_rxeof()
2265 rxerr = 0; in re_rxeof()
2266 if (rxerr != 0) { in re_rxeof()
2285 if (jumbo != 0) in re_rxeof()
2289 if (rxerr != 0) { in re_rxeof()
2300 if (jumbo != 0) in re_rxeof()
2304 if (m->m_len == 0) in re_rxeof()
2338 if ((sc->rl_flags & RL_FLAG_DESCV2) == 0) { in re_rxeof()
2354 m->m_pkthdr.csum_data = 0xffff; in re_rxeof()
2374 m->m_pkthdr.csum_data = 0xffff; in re_rxeof()
2403 return (0); in re_rxeof()
2420 if (netmap_tx_irq(ifp, 0)) in re_txeof()
2458 if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE); in re_txeof()
2475 sc->rl_watchdog_timer = 0; in re_txeof()
2490 if ((sc->rl_flags & RL_FLAG_LINK) == 0) in re_tick()
2508 int rx_npkts = 0; in re_poll()
2536 if (status == 0xffff) in re_poll_locked()
2549 if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); in re_poll_locked()
2566 if (status == 0xFFFF || (status & RL_INTRS_CPLUS) == 0) in re_intr()
2568 CSR_WRITE_2(sc, RL_IMR, 0); in re_intr()
2581 int rval = 0; in re_int_task()
2592 (if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) { in re_int_task()
2628 if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); in re_int_task()
2663 CSR_WRITE_2(sc, RL_IMR, 0); in re_intr_msi()
2664 if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) { in re_intr_msi()
2672 if (sc->rl_int_rx_act > 0) { in re_intr_msi()
2682 if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) { in re_intr_msi()
2683 if (sc->rl_int_rx_mod != 0 && in re_intr_msi()
2685 RL_ISR_FIFO_OFLOW | RL_ISR_RX_OVERRUN)) != 0) { in re_intr_msi()
2694 sc->rl_int_rx_act = 0; in re_intr_msi()
2714 if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); in re_intr_msi()
2718 if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) { in re_intr_msi()
2753 if ((sc->rl_flags & RL_FLAG_AUTOPAD) == 0 && in re_encap()
2755 ((*m_head)->m_pkthdr.csum_flags & CSUM_IP) != 0) { in re_encap()
2757 if (M_WRITABLE(*m_head) == 0) { in re_encap()
2802 if (error != 0) { in re_encap()
2807 } else if (error != 0) in re_encap()
2809 if (nsegs == 0) { in re_encap()
2830 vlanctl = 0; in re_encap()
2831 csum_flags = 0; in re_encap()
2832 if (((*m_head)->m_pkthdr.csum_flags & CSUM_TSO) != 0) { in re_encap()
2833 if ((sc->rl_flags & RL_FLAG_DESCV2) != 0) { in re_encap()
2848 if (((*m_head)->m_pkthdr.csum_flags & RE_CSUM_FEATURES) != 0) { in re_encap()
2849 if ((sc->rl_flags & RL_FLAG_DESCV2) == 0) { in re_encap()
2852 CSUM_TCP) != 0) in re_encap()
2855 CSUM_UDP) != 0) in re_encap()
2860 CSUM_TCP) != 0) in re_encap()
2863 CSUM_UDP) != 0) in re_encap()
2879 for (i = 0; i < nsegs; i++, prod = RL_TX_DESC_NXT(sc, prod)) { in re_encap()
2885 if (i != 0) in re_encap()
2915 return (0); in re_encap()
2944 struct netmap_kring *kring = NA(ifp)->tx_rings[0]; in re_start_locked()
2958 IFF_DRV_RUNNING || (sc->rl_flags & RL_FLAG_LINK) == 0) in re_start_locked()
2961 for (queued = 0; !if_sendq_empty(ifp) && in re_start_locked()
2967 if (re_encap(sc, &m_head) != 0) { in re_start_locked()
2971 if_setdrvflagbits(ifp, IFF_DRV_OACTIVE, 0); in re_start_locked()
2984 if (queued == 0) { in re_start_locked()
3013 * the timer count is reset to 0. in re_start_tx()
3034 if (jumbo != 0) { in re_set_jumbo()
3042 CSR_READ_1(sc, sc->rl_cfg4) | 0x01); in re_set_jumbo()
3056 CSR_READ_1(sc, sc->rl_cfg4) & ~0x01); in re_set_jumbo()
3070 if (jumbo != 0) in re_set_jumbo()
3100 if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) in re_init_locked()
3114 if ((sc->rl_flags & RL_FLAG_JUMBOV2) != 0) { in re_init_locked()
3116 if (re_jrx_list_init(sc) != 0) { in re_init_locked()
3123 if_setcapenablebit(ifp, 0, (IFCAP_HWCSUM | IFCAP_TSO4)); in re_init_locked()
3124 if_sethwassistbits(ifp, 0, (RE_CSUM_FEATURES | CSUM_TSO)); in re_init_locked()
3126 if (re_rx_list_init(sc) != 0) { in re_init_locked()
3135 if (re_rx_list_init(sc) != 0) { in re_init_locked()
3140 if ((sc->rl_flags & RL_FLAG_PCIE) != 0 && in re_init_locked()
3156 if ((if_getcapenable(ifp) & IFCAP_RXCSUM) != 0) in re_init_locked()
3158 if ((if_getcapenable(ifp) & IFCAP_VLAN_HWTAGGING) != 0) in re_init_locked()
3160 if ((sc->rl_flags & RL_FLAG_MACSTAT) != 0) { in re_init_locked()
3163 cfg |= 0x0001; in re_init_locked()
3169 reg = 0x000fff00; in re_init_locked()
3170 if ((CSR_READ_1(sc, sc->rl_cfg2) & RL_CFG2_PCI66MHZ) != 0) in re_init_locked()
3171 reg |= 0x000000ff; in re_init_locked()
3173 reg |= 0x00f00000; in re_init_locked()
3174 CSR_WRITE_4(sc, 0x7c, reg); in re_init_locked()
3176 CSR_WRITE_2(sc, 0xe2, 0); in re_init_locked()
3182 if (if_getmtu(ifp) > RL_TSO_MTU && (if_getcapenable(ifp) & IFCAP_TSO4) != 0) { in re_init_locked()
3183 if_setcapenablebit(ifp, 0, IFCAP_TSO4); in re_init_locked()
3184 if_sethwassistbits(ifp, 0, CSUM_TSO); in re_init_locked()
3196 CSR_WRITE_4(sc, RL_IDR0, htole32(idr[0])); in re_init_locked()
3214 if ((sc->rl_flags & RL_FLAG_8168G_PLUS) != 0) { in re_init_locked()
3217 ~0x00080000); in re_init_locked()
3224 if ((sc->rl_flags & RL_FLAG_8168G_PLUS) == 0) in re_init_locked()
3250 CSR_WRITE_2(sc, RL_INTRMOD, 0x5100); in re_init_locked()
3257 if ((sc->rl_flags & RL_FLAG_8168G_PLUS) != 0) in re_init_locked()
3265 CSR_WRITE_2(sc, RL_IMR, 0); in re_init_locked()
3273 CSR_WRITE_2(sc, RL_IMR, 0); in re_init_locked()
3282 CSR_WRITE_4(sc, RL_MISSEDPKT, 0); in re_init_locked()
3296 CSR_WRITE_4(sc, RL_TIMERINT_8169, 0x800); in re_init_locked()
3298 CSR_WRITE_4(sc, RL_TIMERINT, 0x400); in re_init_locked()
3304 if ((sc->rl_flags & (RL_FLAG_MSI | RL_FLAG_MSIX)) != 0 && in re_init_locked()
3305 intr_filter == 0) { in re_init_locked()
3311 CSR_WRITE_4(sc, RL_TIMERINT_8169, RL_USECS(0)); in re_init_locked()
3320 if ((sc->rl_flags & RL_FLAG_JUMBOV2) != 0) { in re_init_locked()
3334 } else if ((sc->rl_flags & RL_FLAG_PCIE) != 0 && in re_init_locked()
3348 if_setdrvflagbits(ifp, IFF_DRV_RUNNING, 0); in re_init_locked()
3349 if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE); in re_init_locked()
3354 sc->rl_watchdog_timer = 0; in re_init_locked()
3406 int error = 0; in re_ioctl()
3412 ((sc->rl_flags & RL_FLAG_FASTETHER) != 0 && in re_ioctl()
3420 if ((sc->rl_flags & RL_FLAG_JUMBOV2) != 0 && in re_ioctl()
3421 (if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) { in re_ioctl()
3422 if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); in re_ioctl()
3426 (if_getcapenable(ifp) & IFCAP_TSO4) != 0) { in re_ioctl()
3427 if_setcapenablebit(ifp, 0, in re_ioctl()
3429 if_sethwassistbits(ifp, 0, CSUM_TSO); in re_ioctl()
3437 if ((if_getflags(ifp) & IFF_UP) != 0) { in re_ioctl()
3438 if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) { in re_ioctl()
3440 & (IFF_PROMISC | IFF_ALLMULTI)) != 0) in re_ioctl()
3445 if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) in re_ioctl()
3454 if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) in re_ioctl()
3468 reinit = 0; in re_ioctl()
3477 CSR_WRITE_2(sc, RL_IMR, 0x0000); in re_ioctl()
3478 if_setcapenablebit(ifp, IFCAP_POLLING, 0); in re_ioctl()
3485 if_setcapenablebit(ifp, 0, IFCAP_POLLING); in re_ioctl()
3491 if ((mask & IFCAP_TXCSUM) != 0 && in re_ioctl()
3492 (if_getcapabilities(ifp) & IFCAP_TXCSUM) != 0) { in re_ioctl()
3494 if ((if_getcapenable(ifp) & IFCAP_TXCSUM) != 0) in re_ioctl()
3495 if_sethwassistbits(ifp, RE_CSUM_FEATURES, 0); in re_ioctl()
3497 if_sethwassistbits(ifp, 0, RE_CSUM_FEATURES); in re_ioctl()
3500 if ((mask & IFCAP_RXCSUM) != 0 && in re_ioctl()
3501 (if_getcapabilities(ifp) & IFCAP_RXCSUM) != 0) { in re_ioctl()
3505 if ((mask & IFCAP_TSO4) != 0 && in re_ioctl()
3506 (if_getcapabilities(ifp) & IFCAP_TSO4) != 0) { in re_ioctl()
3508 if ((IFCAP_TSO4 & if_getcapenable(ifp)) != 0) in re_ioctl()
3509 if_sethwassistbits(ifp, CSUM_TSO, 0); in re_ioctl()
3511 if_sethwassistbits(ifp, 0, CSUM_TSO); in re_ioctl()
3513 (if_getcapenable(ifp) & IFCAP_TSO4) != 0) { in re_ioctl()
3514 if_setcapenablebit(ifp, 0, IFCAP_TSO4); in re_ioctl()
3515 if_sethwassistbits(ifp, 0, CSUM_TSO); in re_ioctl()
3518 if ((mask & IFCAP_VLAN_HWTSO) != 0 && in re_ioctl()
3519 (if_getcapabilities(ifp) & IFCAP_VLAN_HWTSO) != 0) in re_ioctl()
3521 if ((mask & IFCAP_VLAN_HWTAGGING) != 0 && in re_ioctl()
3522 (if_getcapabilities(ifp) & IFCAP_VLAN_HWTAGGING) != 0) { in re_ioctl()
3525 if ((if_getcapenable(ifp) & IFCAP_VLAN_HWTAGGING) == 0) in re_ioctl()
3526 if_setcapenablebit(ifp, 0, IFCAP_VLAN_HWTSO); in re_ioctl()
3529 if ((sc->rl_flags & RL_FLAG_JUMBOV2) != 0 && in re_ioctl()
3531 IFCAP_VLAN_HWTSO)) != 0) in re_ioctl()
3533 if ((mask & IFCAP_WOL) != 0 && in re_ioctl()
3534 (if_getcapabilities(ifp) & IFCAP_WOL) != 0) { in re_ioctl()
3535 if ((mask & IFCAP_WOL_UCAST) != 0) in re_ioctl()
3537 if ((mask & IFCAP_WOL_MCAST) != 0) in re_ioctl()
3539 if ((mask & IFCAP_WOL_MAGIC) != 0) in re_ioctl()
3543 if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); in re_ioctl()
3565 if (sc->rl_watchdog_timer == 0 || --sc->rl_watchdog_timer != 0) in re_watchdog()
3582 if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING); in re_watchdog()
3604 sc->rl_watchdog_timer = 0; in re_stop()
3606 if_setdrvflagbits(ifp, 0, (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)); in re_stop()
3622 if ((sc->rl_flags & RL_FLAG_8168G_PLUS) != 0) { in re_stop()
3625 0x00080000); in re_stop()
3628 if ((sc->rl_flags & RL_FLAG_WAIT_TXPOLL) != 0) { in re_stop()
3629 for (i = RL_TIMEOUT; i > 0; i--) { in re_stop()
3631 RL_TXSTART_START) == 0) in re_stop()
3635 if (i == 0) in re_stop()
3638 CSR_WRITE_1(sc, RL_COMMAND, 0x00); in re_stop()
3639 } else if ((sc->rl_flags & RL_FLAG_CMDSTOP) != 0) { in re_stop()
3642 if ((sc->rl_flags & RL_FLAG_CMDSTOP_WAIT_TXQ) != 0) { in re_stop()
3643 for (i = RL_TIMEOUT; i > 0; i--) { in re_stop()
3645 RL_TXCFG_QUEUE_EMPTY) != 0) in re_stop()
3649 if (i == 0) in re_stop()
3654 CSR_WRITE_1(sc, RL_COMMAND, 0x00); in re_stop()
3656 CSR_WRITE_2(sc, RL_IMR, 0x0000); in re_stop()
3657 CSR_WRITE_2(sc, RL_ISR, 0xFFFF); in re_stop()
3665 for (i = 0; i < sc->rl_ldata.rl_tx_desc_cnt; i++) { in re_stop()
3678 for (i = 0; i < sc->rl_ldata.rl_rx_desc_cnt; i++) { in re_stop()
3690 if ((sc->rl_flags & RL_FLAG_JUMBOV2) != 0) { in re_stop()
3691 for (i = 0; i < sc->rl_ldata.rl_rx_desc_cnt; i++) { in re_stop()
3723 return (0); in re_suspend()
3743 if ((sc->rl_flags & RL_FLAG_MACSLEEP) != 0) { in re_resume()
3744 if ((CSR_READ_1(sc, RL_MACDBG) & 0x80) == 0x80) in re_resume()
3746 CSR_READ_1(sc, RL_GPIO) | 0x01); in re_resume()
3759 sc->suspended = 0; in re_resume()
3762 return (0); in re_resume()
3783 if_setflagbits(sc->rl_ifp, 0, IFF_UP); in re_shutdown()
3787 return (0); in re_shutdown()
3801 aneg = 0; in re_set_linkspeed()
3819 re_miibus_writereg(sc->rl_dev, phyno, MII_100T2CR, 0); in re_set_linkspeed()
3825 if (aneg != 0) { in re_set_linkspeed()
3829 for (i = 0; i < MII_ANEGTICKS_GIGE; i++) { in re_set_linkspeed()
3871 if ((sc->rl_flags & RL_FLAG_MACSLEEP) != 0) { in re_setwol()
3872 if ((CSR_READ_1(sc, RL_MACDBG) & 0x80) == 0x80) in re_setwol()
3874 CSR_READ_1(sc, RL_GPIO) & ~0x01); in re_setwol()
3876 if ((if_getcapenable(ifp) & IFCAP_WOL) != 0) { in re_setwol()
3877 if ((sc->rl_flags & RL_FLAG_8168G_PLUS) != 0) { in re_setwol()
3880 ~0x00080000); in re_setwol()
3883 if ((sc->rl_flags & RL_FLAG_WOL_MANLINK) != 0) in re_setwol()
3885 if ((sc->rl_flags & RL_FLAG_WOLRXENB) != 0) in re_setwol()
3894 if ((if_getcapenable(ifp) & IFCAP_WOL) != 0) in re_setwol()
3900 if ((if_getcapenable(ifp) & IFCAP_WOL_MAGIC) != 0) in re_setwol()
3907 if ((if_getcapenable(ifp) & IFCAP_WOL_UCAST) != 0) in re_setwol()
3909 if ((if_getcapenable(ifp) & IFCAP_WOL_MCAST) != 0) in re_setwol()
3911 if ((if_getcapenable(ifp) & IFCAP_WOL) != 0) in re_setwol()
3918 if ((if_getcapenable(ifp) & IFCAP_WOL) == 0 && in re_setwol()
3919 (sc->rl_flags & RL_FLAG_PHYWAKE_PM) != 0) in re_setwol()
3920 CSR_WRITE_1(sc, RL_PMCH, CSR_READ_1(sc, RL_PMCH) & ~0x80); in re_setwol()
3928 if ((if_getcapenable(ifp) & IFCAP_WOL) != 0) in re_setwol()
3969 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, sc, 0, in re_add_sysctls()
3971 if ((sc->rl_flags & (RL_FLAG_MSI | RL_FLAG_MSIX)) == 0) in re_add_sysctls()
3976 &sc->rl_int_rx_mod, 0, sysctl_hw_re_int_mod, "I", in re_add_sysctls()
3982 if (error == 0) { in re_add_sysctls()
4001 error = sysctl_handle_int(oidp, &result, 0, req); in re_sysctl_stats()
4008 if ((if_getdrvflags(sc->rl_ifp) & IFF_DRV_RUNNING) == 0) { in re_sysctl_stats()
4021 for (i = RL_TIMEOUT; i > 0; i--) { in re_sysctl_stats()
4023 RL_DUMPSTATS_START) == 0) in re_sysctl_stats()
4030 if (i == 0) { in re_sysctl_stats()
4077 error = sysctl_handle_int(oidp, &value, 0, req); in sysctl_int_range()
4084 return (0); in sysctl_int_range()
4106 (sc->rl_flags & RL_FLAG_JUMBOV2) != 0) ? MJUM9BYTES : MCLBYTES; in re_debugnet_init()
4123 IFF_DRV_RUNNING || (sc->rl_flags & RL_FLAG_LINK) == 0) in re_debugnet_transmit()
4127 if (error == 0) in re_debugnet_transmit()
4139 if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0 || in re_debugnet_poll()
4140 (sc->rl_flags & RL_FLAG_LINK) == 0) in re_debugnet_poll()
4145 if (error != 0 && error != EAGAIN) in re_debugnet_poll()
4147 return (0); in re_debugnet_poll()