Lines Matching refs:adapter
118 static void igc_add_hw_stats(struct igc_adapter *adapter);
148 static void igc_configure_queues(struct igc_adapter *adapter);
320 struct igc_adapter *adapter = (struct igc_adapter *)arg1; in igc_get_regs() local
321 struct igc_hw *hw = &adapter->hw; in igc_get_regs()
397 if_softc_ctx_t scctx = adapter->shared; in igc_get_regs()
460 struct igc_adapter *adapter; in igc_if_attach_pre() local
468 adapter = iflib_get_softc(ctx); in igc_if_attach_pre()
470 adapter->ctx = adapter->osdep.ctx = ctx; in igc_if_attach_pre()
471 adapter->dev = adapter->osdep.dev = dev; in igc_if_attach_pre()
472 scctx = adapter->shared = iflib_get_softc_ctx(ctx); in igc_if_attach_pre()
473 adapter->media = iflib_get_media(ctx); in igc_if_attach_pre()
474 hw = &adapter->hw; in igc_if_attach_pre()
476 adapter->tx_process_limit = scctx->isc_ntxd[0]; in igc_if_attach_pre()
482 adapter, 0, igc_sysctl_nvm_info, "I", "NVM Information"); in igc_if_attach_pre()
487 adapter, 0, igc_sysctl_debug_info, "I", "Debug Information"); in igc_if_attach_pre()
492 adapter, 0, igc_set_flowcntl, "I", "Flow Control"); in igc_if_attach_pre()
497 CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT, adapter, 0, in igc_if_attach_pre()
503 CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, adapter, 0, in igc_if_attach_pre()
556 igc_add_int_delay_sysctl(adapter, "rx_int_delay", in igc_if_attach_pre()
557 "receive interrupt delay in usecs", &adapter->rx_int_delay, in igc_if_attach_pre()
559 igc_add_int_delay_sysctl(adapter, "tx_int_delay", in igc_if_attach_pre()
560 "transmit interrupt delay in usecs", &adapter->tx_int_delay, in igc_if_attach_pre()
562 igc_add_int_delay_sysctl(adapter, "rx_abs_int_delay", in igc_if_attach_pre()
564 &adapter->rx_abs_int_delay, in igc_if_attach_pre()
567 igc_add_int_delay_sysctl(adapter, "tx_abs_int_delay", in igc_if_attach_pre()
569 &adapter->tx_abs_int_delay, in igc_if_attach_pre()
572 igc_add_int_delay_sysctl(adapter, "itr", in igc_if_attach_pre()
574 &adapter->tx_itr, in igc_if_attach_pre()
591 scctx->isc_max_frame_size = adapter->hw.mac.max_frame_size = in igc_if_attach_pre()
595 adapter->mta = malloc(sizeof(u8) * ETHER_ADDR_LEN * in igc_if_attach_pre()
597 if (adapter->mta == NULL) { in igc_if_attach_pre()
609 adapter->hw.dev_spec._i225.eee_disable = igc_eee_setting; in igc_if_attach_pre()
614 adapter, 0, igc_sysctl_eee, "I", in igc_if_attach_pre()
660 if (adapter->wol != 0) in igc_if_attach_pre()
668 igc_release_hw_control(adapter); in igc_if_attach_pre()
671 free(adapter->mta, M_DEVBUF); in igc_if_attach_pre()
679 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_attach_post() local
680 struct igc_hw *hw = &adapter->hw; in igc_if_attach_post()
692 igc_update_stats_counters(adapter); in igc_if_attach_post()
695 igc_add_hw_stats(adapter); in igc_if_attach_post()
698 igc_get_hw_control(adapter); in igc_if_attach_post()
705 igc_release_hw_control(adapter); in igc_if_attach_post()
708 free(adapter->mta, M_DEVBUF); in igc_if_attach_post()
725 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_detach() local
729 igc_phy_hw_reset(&adapter->hw); in igc_if_detach()
731 igc_release_hw_control(adapter); in igc_if_detach()
755 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_suspend() local
757 igc_release_hw_control(adapter); in igc_if_suspend()
774 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_mtu_set() local
786 scctx->isc_max_frame_size = adapter->hw.mac.max_frame_size = in igc_if_mtu_set()
803 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_init() local
804 if_softc_ctx_t scctx = adapter->shared; in igc_if_init()
812 bcopy(if_getlladdr(ifp), adapter->hw.mac.addr, in igc_if_init()
816 igc_rar_set(&adapter->hw, adapter->hw.mac.addr, 0); in igc_if_init()
822 for (i = 0, tx_que = adapter->tx_queues; i < adapter->tx_num_queues; i++, tx_que++) { in igc_if_init()
836 IGC_WRITE_REG(&adapter->hw, IGC_VET, ETHERTYPE_VLAN); in igc_if_init()
844 adapter->rx_mbuf_sz = iflib_get_rx_mbuf_sz(ctx); in igc_if_init()
851 igc_setup_vlan_hw_support(adapter); in igc_if_init()
854 ctrl = IGC_READ_REG(&adapter->hw, IGC_CTRL); in igc_if_init()
856 IGC_WRITE_REG(&adapter->hw, IGC_CTRL, ctrl); in igc_if_init()
862 igc_clear_hw_cntrs_base_generic(&adapter->hw); in igc_if_init()
864 if (adapter->intr_type == IFLIB_INTR_MSIX) /* Set up queue routing */ in igc_if_init()
865 igc_configure_queues(adapter); in igc_if_init()
868 IGC_READ_REG(&adapter->hw, IGC_ICR); in igc_if_init()
869 IGC_WRITE_REG(&adapter->hw, IGC_ICS, IGC_ICS_LSC); in igc_if_init()
872 igc_get_hw_control(adapter); in igc_if_init()
875 igc_set_eee_i225(&adapter->hw, true, true, true); in igc_if_init()
886 struct igc_adapter *adapter = arg; in igc_intr() local
887 if_ctx_t ctx = adapter->ctx; in igc_intr()
890 reg_icr = IGC_READ_REG(&adapter->hw, IGC_ICR); in igc_intr()
916 adapter->rx_overruns++; in igc_intr()
924 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_rx_queue_intr_enable() local
925 struct igc_rx_queue *rxq = &adapter->rx_queues[rxqid]; in igc_if_rx_queue_intr_enable()
927 IGC_WRITE_REG(&adapter->hw, IGC_EIMS, rxq->eims); in igc_if_rx_queue_intr_enable()
934 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_tx_queue_intr_enable() local
935 struct igc_tx_queue *txq = &adapter->tx_queues[txqid]; in igc_if_tx_queue_intr_enable()
937 IGC_WRITE_REG(&adapter->hw, IGC_EIMS, txq->eims); in igc_if_tx_queue_intr_enable()
964 struct igc_adapter *adapter = arg; in igc_msix_link() local
967 ++adapter->link_irq; in igc_msix_link()
968 MPASS(adapter->hw.back != NULL); in igc_msix_link()
969 reg_icr = IGC_READ_REG(&adapter->hw, IGC_ICR); in igc_msix_link()
972 adapter->rx_overruns++; in igc_msix_link()
975 igc_handle_link(adapter->ctx); in igc_msix_link()
978 IGC_WRITE_REG(&adapter->hw, IGC_IMS, IGC_IMS_LSC); in igc_msix_link()
979 IGC_WRITE_REG(&adapter->hw, IGC_EIMS, adapter->link_mask); in igc_msix_link()
988 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_handle_link() local
990 adapter->hw.mac.get_link_status = true; in igc_handle_link()
1005 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_media_status() local
1014 if (!adapter->link_active) { in igc_if_media_status()
1020 switch (adapter->link_speed) { in igc_if_media_status()
1035 if (adapter->link_duplex == FULL_DUPLEX) in igc_if_media_status()
1052 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_media_change() local
1060 adapter->hw.mac.autoneg = DO_AUTO_NEG; in igc_if_media_change()
1064 adapter->hw.phy.autoneg_advertised = AUTONEG_ADV_DEFAULT; in igc_if_media_change()
1067 adapter->hw.phy.autoneg_advertised = ADVERTISE_2500_FULL; in igc_if_media_change()
1070 adapter->hw.phy.autoneg_advertised = ADVERTISE_1000_FULL; in igc_if_media_change()
1074 adapter->hw.phy.autoneg_advertised = ADVERTISE_100_HALF; in igc_if_media_change()
1076 adapter->hw.phy.autoneg_advertised = ADVERTISE_100_FULL; in igc_if_media_change()
1080 adapter->hw.phy.autoneg_advertised = ADVERTISE_10_HALF; in igc_if_media_change()
1082 adapter->hw.phy.autoneg_advertised = ADVERTISE_10_FULL; in igc_if_media_change()
1085 device_printf(adapter->dev, "Unsupported media type\n"); in igc_if_media_change()
1096 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_set_promisc() local
1101 reg_rctl = IGC_READ_REG(&adapter->hw, IGC_RCTL); in igc_if_set_promisc()
1111 IGC_WRITE_REG(&adapter->hw, IGC_RCTL, reg_rctl); in igc_if_set_promisc()
1118 IGC_WRITE_REG(&adapter->hw, IGC_RCTL, reg_rctl); in igc_if_set_promisc()
1122 IGC_WRITE_REG(&adapter->hw, IGC_RCTL, reg_rctl); in igc_if_set_promisc()
1150 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_multi_set() local
1158 mta = adapter->mta; in igc_if_multi_set()
1163 reg_rctl = IGC_READ_REG(&adapter->hw, IGC_RCTL); in igc_if_multi_set()
1178 igc_update_mc_addr_list(&adapter->hw, mta, mcnt); in igc_if_multi_set()
1180 IGC_WRITE_REG(&adapter->hw, IGC_RCTL, reg_rctl); in igc_if_multi_set()
1204 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_update_admin_status() local
1205 struct igc_hw *hw = &adapter->hw; in igc_if_update_admin_status()
1229 if (link_check && (adapter->link_active == 0)) { in igc_if_update_admin_status()
1230 igc_get_speed_and_duplex(hw, &adapter->link_speed, in igc_if_update_admin_status()
1231 &adapter->link_duplex); in igc_if_update_admin_status()
1234 adapter->link_speed, in igc_if_update_admin_status()
1235 ((adapter->link_duplex == FULL_DUPLEX) ? in igc_if_update_admin_status()
1237 adapter->link_active = 1; in igc_if_update_admin_status()
1239 IF_Mbps(adapter->link_speed)); in igc_if_update_admin_status()
1240 } else if (!link_check && (adapter->link_active == 1)) { in igc_if_update_admin_status()
1241 adapter->link_speed = 0; in igc_if_update_admin_status()
1242 adapter->link_duplex = 0; in igc_if_update_admin_status()
1243 adapter->link_active = 0; in igc_if_update_admin_status()
1246 igc_update_stats_counters(adapter); in igc_if_update_admin_status()
1252 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_watchdog_reset() local
1258 adapter->watchdog_events++; in igc_if_watchdog_reset()
1270 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_stop() local
1274 igc_reset_hw(&adapter->hw); in igc_if_stop()
1275 IGC_WRITE_REG(&adapter->hw, IGC_WUC, 0); in igc_if_stop()
1287 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_identify_hardware() local
1290 adapter->hw.bus.pci_cmd_word = pci_read_config(dev, PCIR_COMMAND, 2); in igc_identify_hardware()
1293 adapter->hw.vendor_id = pci_get_vendor(dev); in igc_identify_hardware()
1294 adapter->hw.device_id = pci_get_device(dev); in igc_identify_hardware()
1295 adapter->hw.revision_id = pci_read_config(dev, PCIR_REVID, 1); in igc_identify_hardware()
1296 adapter->hw.subsystem_vendor_id = in igc_identify_hardware()
1298 adapter->hw.subsystem_device_id = in igc_identify_hardware()
1302 if (igc_set_mac_type(&adapter->hw)) { in igc_identify_hardware()
1311 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_allocate_pci_resources() local
1316 adapter->memory = bus_alloc_resource_any(dev, SYS_RES_MEMORY, in igc_allocate_pci_resources()
1318 if (adapter->memory == NULL) { in igc_allocate_pci_resources()
1322 adapter->osdep.mem_bus_space_tag = rman_get_bustag(adapter->memory); in igc_allocate_pci_resources()
1323 adapter->osdep.mem_bus_space_handle = in igc_allocate_pci_resources()
1324 rman_get_bushandle(adapter->memory); in igc_allocate_pci_resources()
1325 adapter->hw.hw_addr = (u8 *)&adapter->osdep.mem_bus_space_handle; in igc_allocate_pci_resources()
1327 adapter->hw.back = &adapter->osdep; in igc_allocate_pci_resources()
1340 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_msix_intr_assign() local
1341 struct igc_rx_queue *rx_que = adapter->rx_queues; in igc_if_msix_intr_assign()
1342 struct igc_tx_queue *tx_que = adapter->tx_queues; in igc_if_msix_intr_assign()
1347 for (i = 0; i < adapter->rx_num_queues; i++, rx_que++, vector++) { in igc_if_msix_intr_assign()
1353 adapter->rx_num_queues = i + 1; in igc_if_msix_intr_assign()
1370 for (i = 0; i < adapter->tx_num_queues; i++, tx_que++, vector++) { in igc_if_msix_intr_assign()
1372 tx_que = &adapter->tx_queues[i]; in igc_if_msix_intr_assign()
1374 &adapter->rx_queues[i % adapter->rx_num_queues].que_irq, in igc_if_msix_intr_assign()
1377 tx_que->msix = (vector % adapter->rx_num_queues); in igc_if_msix_intr_assign()
1390 …error = iflib_irq_alloc_generic(ctx, &adapter->irq, rid, IFLIB_INTR_ADMIN, igc_msix_link, adapter,… in igc_if_msix_intr_assign()
1396 adapter->linkvec = rx_vectors; in igc_if_msix_intr_assign()
1399 iflib_irq_free(ctx, &adapter->irq); in igc_if_msix_intr_assign()
1400 rx_que = adapter->rx_queues; in igc_if_msix_intr_assign()
1401 for (int i = 0; i < adapter->rx_num_queues; i++, rx_que++) in igc_if_msix_intr_assign()
1407 igc_configure_queues(struct igc_adapter *adapter) in igc_configure_queues() argument
1409 struct igc_hw *hw = &adapter->hw; in igc_configure_queues()
1421 for (int i = 0; i < adapter->rx_num_queues; i++) { in igc_configure_queues()
1424 rx_que = &adapter->rx_queues[i]; in igc_configure_queues()
1435 for (int i = 0; i < adapter->tx_num_queues; i++) { in igc_configure_queues()
1438 tx_que = &adapter->tx_queues[i]; in igc_configure_queues()
1447 adapter->que_mask |= tx_que->eims; in igc_configure_queues()
1451 ivar = (adapter->linkvec | IGC_IVAR_VALID) << 8; in igc_configure_queues()
1452 adapter->link_mask = 1 << adapter->linkvec; in igc_configure_queues()
1461 for (int i = 0; i < adapter->rx_num_queues; i++) { in igc_configure_queues()
1462 rx_que = &adapter->rx_queues[i]; in igc_configure_queues()
1472 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_free_pci_resources() local
1473 struct igc_rx_queue *que = adapter->rx_queues; in igc_free_pci_resources()
1477 if (adapter->intr_type == IFLIB_INTR_MSIX) in igc_free_pci_resources()
1478 iflib_irq_free(ctx, &adapter->irq); in igc_free_pci_resources()
1480 for (int i = 0; i < adapter->rx_num_queues; i++, que++) { in igc_free_pci_resources()
1484 if (adapter->memory != NULL) { in igc_free_pci_resources()
1486 rman_get_rid(adapter->memory), adapter->memory); in igc_free_pci_resources()
1487 adapter->memory = NULL; in igc_free_pci_resources()
1490 if (adapter->flash != NULL) { in igc_free_pci_resources()
1492 rman_get_rid(adapter->flash), adapter->flash); in igc_free_pci_resources()
1493 adapter->flash = NULL; in igc_free_pci_resources()
1496 if (adapter->ioport != NULL) { in igc_free_pci_resources()
1498 rman_get_rid(adapter->ioport), adapter->ioport); in igc_free_pci_resources()
1499 adapter->ioport = NULL; in igc_free_pci_resources()
1516 igc_init_dmac(struct igc_adapter *adapter, u32 pba) in igc_init_dmac() argument
1518 device_t dev = adapter->dev; in igc_init_dmac()
1519 struct igc_hw *hw = &adapter->hw; in igc_init_dmac()
1525 max_frame_size = adapter->shared->isc_max_frame_size; in igc_init_dmac()
1527 if (adapter->dmac == 0) { /* Disabling it */ in igc_init_dmac()
1565 reg |= ((adapter->dmac * 5) >> 6); in igc_init_dmac()
1567 reg |= (adapter->dmac >> 5); in igc_init_dmac()
1610 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_reset() local
1611 struct igc_hw *hw = &adapter->hw; in igc_reset()
1617 igc_get_hw_control(adapter); in igc_reset()
1644 roundup2(adapter->hw.mac.max_frame_size, 1024); in igc_reset()
1648 if (adapter->fc) /* locally set flow control value? */ in igc_reset()
1649 hw->fc.requested_mode = adapter->fc; in igc_reset()
1668 igc_init_dmac(adapter, pba); in igc_reset()
1682 igc_initialize_rss_mapping(struct igc_adapter *adapter) in igc_initialize_rss_mapping() argument
1684 struct igc_hw *hw = &adapter->hw; in igc_initialize_rss_mapping()
1721 queue_id = queue_id % adapter->rx_num_queues; in igc_initialize_rss_mapping()
1723 queue_id = (i % adapter->rx_num_queues); in igc_initialize_rss_mapping()
1781 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_setup_interface() local
1782 if_softc_ctx_t scctx = adapter->shared; in igc_setup_interface()
1787 if (adapter->tx_num_queues == 1) { in igc_setup_interface()
1796 ifmedia_add(adapter->media, IFM_ETHER | IFM_10_T, 0, NULL); in igc_setup_interface()
1797 ifmedia_add(adapter->media, IFM_ETHER | IFM_10_T | IFM_FDX, 0, NULL); in igc_setup_interface()
1798 ifmedia_add(adapter->media, IFM_ETHER | IFM_100_TX, 0, NULL); in igc_setup_interface()
1799 ifmedia_add(adapter->media, IFM_ETHER | IFM_100_TX | IFM_FDX, 0, NULL); in igc_setup_interface()
1800 ifmedia_add(adapter->media, IFM_ETHER | IFM_1000_T | IFM_FDX, 0, NULL); in igc_setup_interface()
1801 ifmedia_add(adapter->media, IFM_ETHER | IFM_1000_T, 0, NULL); in igc_setup_interface()
1802 ifmedia_add(adapter->media, IFM_ETHER | IFM_2500_T, 0, NULL); in igc_setup_interface()
1804 ifmedia_add(adapter->media, IFM_ETHER | IFM_AUTO, 0, NULL); in igc_setup_interface()
1805 ifmedia_set(adapter->media, IFM_ETHER | IFM_AUTO); in igc_setup_interface()
1812 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_tx_queues_alloc() local
1813 if_softc_ctx_t scctx = adapter->shared; in igc_if_tx_queues_alloc()
1818 MPASS(adapter->tx_num_queues > 0); in igc_if_tx_queues_alloc()
1819 MPASS(adapter->tx_num_queues == ntxqsets); in igc_if_tx_queues_alloc()
1822 if (!(adapter->tx_queues = in igc_if_tx_queues_alloc()
1824 adapter->tx_num_queues, M_DEVBUF, M_NOWAIT | M_ZERO))) { in igc_if_tx_queues_alloc()
1829 for (i = 0, que = adapter->tx_queues; i < adapter->tx_num_queues; i++, que++) { in igc_if_tx_queues_alloc()
1833 txr->adapter = que->adapter = adapter; in igc_if_tx_queues_alloc()
1851 "allocated for %d tx_queues\n", adapter->tx_num_queues); in igc_if_tx_queues_alloc()
1861 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_rx_queues_alloc() local
1866 MPASS(adapter->rx_num_queues > 0); in igc_if_rx_queues_alloc()
1867 MPASS(adapter->rx_num_queues == nrxqsets); in igc_if_rx_queues_alloc()
1870 if (!(adapter->rx_queues = in igc_if_rx_queues_alloc()
1872 adapter->rx_num_queues, M_DEVBUF, M_NOWAIT | M_ZERO))) { in igc_if_rx_queues_alloc()
1878 for (i = 0, que = adapter->rx_queues; i < nrxqsets; i++, que++) { in igc_if_rx_queues_alloc()
1881 rxr->adapter = que->adapter = adapter; in igc_if_rx_queues_alloc()
1892 "allocated for %d rx_queues\n", adapter->rx_num_queues); in igc_if_rx_queues_alloc()
1903 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_queues_free() local
1904 struct igc_tx_queue *tx_que = adapter->tx_queues; in igc_if_queues_free()
1905 struct igc_rx_queue *rx_que = adapter->rx_queues; in igc_if_queues_free()
1908 for (int i = 0; i < adapter->tx_num_queues; i++, tx_que++) { in igc_if_queues_free()
1916 free(adapter->tx_queues, M_DEVBUF); in igc_if_queues_free()
1917 adapter->tx_queues = NULL; in igc_if_queues_free()
1921 free(adapter->rx_queues, M_DEVBUF); in igc_if_queues_free()
1922 adapter->rx_queues = NULL; in igc_if_queues_free()
1925 igc_release_hw_control(adapter); in igc_if_queues_free()
1927 if (adapter->mta != NULL) { in igc_if_queues_free()
1928 free(adapter->mta, M_DEVBUF); in igc_if_queues_free()
1940 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_initialize_transmit_unit() local
1941 if_softc_ctx_t scctx = adapter->shared; in igc_initialize_transmit_unit()
1944 struct igc_hw *hw = &adapter->hw; in igc_initialize_transmit_unit()
1949 for (int i = 0; i < adapter->tx_num_queues; i++, txr++) { in igc_initialize_transmit_unit()
1953 que = &adapter->tx_queues[i]; in igc_initialize_transmit_unit()
1974 IGC_READ_REG(&adapter->hw, IGC_TDBAL(i)), in igc_initialize_transmit_unit()
1975 IGC_READ_REG(&adapter->hw, IGC_TDLEN(i))); in igc_initialize_transmit_unit()
1989 tctl = IGC_READ_REG(&adapter->hw, IGC_TCTL); in igc_initialize_transmit_unit()
1995 IGC_WRITE_REG(&adapter->hw, IGC_TCTL, tctl); in igc_initialize_transmit_unit()
2007 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_initialize_receive_unit() local
2008 if_softc_ctx_t scctx = adapter->shared; in igc_initialize_receive_unit()
2010 struct igc_hw *hw = &adapter->hw; in igc_initialize_receive_unit()
2052 if (adapter->tx_num_queues > 1) in igc_initialize_receive_unit()
2057 if (adapter->tx_num_queues > 1) in igc_initialize_receive_unit()
2064 if (adapter->rx_num_queues > 1) in igc_initialize_receive_unit()
2065 igc_initialize_rss_mapping(adapter); in igc_initialize_receive_unit()
2069 if (adapter->rx_mbuf_sz <= 4096) { in igc_initialize_receive_unit()
2072 } else if (adapter->rx_mbuf_sz > 4096) { in igc_initialize_receive_unit()
2080 IGC_WRITE_REG(&adapter->hw, IGC_RLPML, psize); in igc_initialize_receive_unit()
2092 if ((adapter->rx_num_queues > 1) && in igc_initialize_receive_unit()
2093 (adapter->fc == igc_fc_none || in igc_initialize_receive_unit()
2094 adapter->fc == igc_fc_rx_pause)) { in igc_initialize_receive_unit()
2099 for (i = 0, que = adapter->rx_queues; i < adapter->rx_num_queues; i++, que++) { in igc_initialize_receive_unit()
2143 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_vlan_register() local
2148 adapter->shadow_vfta[index] |= (1 << bit); in igc_if_vlan_register()
2149 ++adapter->num_vlans; in igc_if_vlan_register()
2155 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_vlan_unregister() local
2160 adapter->shadow_vfta[index] &= ~(1 << bit); in igc_if_vlan_unregister()
2161 --adapter->num_vlans; in igc_if_vlan_unregister()
2165 igc_setup_vlan_hw_support(struct igc_adapter *adapter) in igc_setup_vlan_hw_support() argument
2167 struct igc_hw *hw = &adapter->hw; in igc_setup_vlan_hw_support()
2176 if (adapter->num_vlans == 0) in igc_setup_vlan_hw_support()
2184 if (adapter->shadow_vfta[i] != 0) in igc_setup_vlan_hw_support()
2186 i, adapter->shadow_vfta[i]); in igc_setup_vlan_hw_support()
2202 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_intr_enable() local
2203 struct igc_hw *hw = &adapter->hw; in igc_if_intr_enable()
2206 if (__predict_true(adapter->intr_type == IFLIB_INTR_MSIX)) { in igc_if_intr_enable()
2207 mask = (adapter->que_mask | adapter->link_mask); in igc_if_intr_enable()
2220 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_intr_disable() local
2221 struct igc_hw *hw = &adapter->hw; in igc_if_intr_disable()
2223 if (__predict_true(adapter->intr_type == IFLIB_INTR_MSIX)) { in igc_if_intr_disable()
2238 igc_get_hw_control(struct igc_adapter *adapter) in igc_get_hw_control() argument
2242 if (adapter->vf_ifp) in igc_get_hw_control()
2245 ctrl_ext = IGC_READ_REG(&adapter->hw, IGC_CTRL_EXT); in igc_get_hw_control()
2246 IGC_WRITE_REG(&adapter->hw, IGC_CTRL_EXT, in igc_get_hw_control()
2257 igc_release_hw_control(struct igc_adapter *adapter) in igc_release_hw_control() argument
2261 ctrl_ext = IGC_READ_REG(&adapter->hw, IGC_CTRL_EXT); in igc_release_hw_control()
2262 IGC_WRITE_REG(&adapter->hw, IGC_CTRL_EXT, in igc_release_hw_control()
2287 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_get_wakeup() local
2291 eeprom_data = IGC_READ_REG(&adapter->hw, IGC_WUC); in igc_get_wakeup()
2294 adapter->wol = IGC_WUFC_LNKC; in igc_get_wakeup()
2304 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_enable_wakeup() local
2319 adapter->wol &= ~IGC_WUFC_MAG; in igc_enable_wakeup()
2322 adapter->wol &= ~IGC_WUFC_EX; in igc_enable_wakeup()
2325 adapter->wol &= ~IGC_WUFC_MC; in igc_enable_wakeup()
2327 rctl = IGC_READ_REG(&adapter->hw, IGC_RCTL); in igc_enable_wakeup()
2329 IGC_WRITE_REG(&adapter->hw, IGC_RCTL, rctl); in igc_enable_wakeup()
2332 if (!(adapter->wol & (IGC_WUFC_EX | IGC_WUFC_MAG | IGC_WUFC_MC))) in igc_enable_wakeup()
2336 ctrl = IGC_READ_REG(&adapter->hw, IGC_CTRL); in igc_enable_wakeup()
2338 IGC_WRITE_REG(&adapter->hw, IGC_CTRL, ctrl); in igc_enable_wakeup()
2341 IGC_WRITE_REG(&adapter->hw, IGC_WUC, IGC_WUC_PME_EN); in igc_enable_wakeup()
2342 IGC_WRITE_REG(&adapter->hw, IGC_WUFC, adapter->wol); in igc_enable_wakeup()
2360 igc_update_stats_counters(struct igc_adapter *adapter) in igc_update_stats_counters() argument
2362 u64 prev_xoffrxc = adapter->stats.xoffrxc; in igc_update_stats_counters()
2364 adapter->stats.crcerrs += IGC_READ_REG(&adapter->hw, IGC_CRCERRS); in igc_update_stats_counters()
2365 adapter->stats.mpc += IGC_READ_REG(&adapter->hw, IGC_MPC); in igc_update_stats_counters()
2366 adapter->stats.scc += IGC_READ_REG(&adapter->hw, IGC_SCC); in igc_update_stats_counters()
2367 adapter->stats.ecol += IGC_READ_REG(&adapter->hw, IGC_ECOL); in igc_update_stats_counters()
2369 adapter->stats.mcc += IGC_READ_REG(&adapter->hw, IGC_MCC); in igc_update_stats_counters()
2370 adapter->stats.latecol += IGC_READ_REG(&adapter->hw, IGC_LATECOL); in igc_update_stats_counters()
2371 adapter->stats.colc += IGC_READ_REG(&adapter->hw, IGC_COLC); in igc_update_stats_counters()
2372 adapter->stats.colc += IGC_READ_REG(&adapter->hw, IGC_RERC); in igc_update_stats_counters()
2373 adapter->stats.dc += IGC_READ_REG(&adapter->hw, IGC_DC); in igc_update_stats_counters()
2374 adapter->stats.rlec += IGC_READ_REG(&adapter->hw, IGC_RLEC); in igc_update_stats_counters()
2375 adapter->stats.xonrxc += IGC_READ_REG(&adapter->hw, IGC_XONRXC); in igc_update_stats_counters()
2376 adapter->stats.xontxc += IGC_READ_REG(&adapter->hw, IGC_XONTXC); in igc_update_stats_counters()
2377 adapter->stats.xoffrxc += IGC_READ_REG(&adapter->hw, IGC_XOFFRXC); in igc_update_stats_counters()
2382 if (adapter->stats.xoffrxc != prev_xoffrxc) in igc_update_stats_counters()
2383 adapter->shared->isc_pause_frames = 1; in igc_update_stats_counters()
2384 adapter->stats.xofftxc += IGC_READ_REG(&adapter->hw, IGC_XOFFTXC); in igc_update_stats_counters()
2385 adapter->stats.fcruc += IGC_READ_REG(&adapter->hw, IGC_FCRUC); in igc_update_stats_counters()
2386 adapter->stats.prc64 += IGC_READ_REG(&adapter->hw, IGC_PRC64); in igc_update_stats_counters()
2387 adapter->stats.prc127 += IGC_READ_REG(&adapter->hw, IGC_PRC127); in igc_update_stats_counters()
2388 adapter->stats.prc255 += IGC_READ_REG(&adapter->hw, IGC_PRC255); in igc_update_stats_counters()
2389 adapter->stats.prc511 += IGC_READ_REG(&adapter->hw, IGC_PRC511); in igc_update_stats_counters()
2390 adapter->stats.prc1023 += IGC_READ_REG(&adapter->hw, IGC_PRC1023); in igc_update_stats_counters()
2391 adapter->stats.prc1522 += IGC_READ_REG(&adapter->hw, IGC_PRC1522); in igc_update_stats_counters()
2392 adapter->stats.tlpic += IGC_READ_REG(&adapter->hw, IGC_TLPIC); in igc_update_stats_counters()
2393 adapter->stats.rlpic += IGC_READ_REG(&adapter->hw, IGC_RLPIC); in igc_update_stats_counters()
2394 adapter->stats.gprc += IGC_READ_REG(&adapter->hw, IGC_GPRC); in igc_update_stats_counters()
2395 adapter->stats.bprc += IGC_READ_REG(&adapter->hw, IGC_BPRC); in igc_update_stats_counters()
2396 adapter->stats.mprc += IGC_READ_REG(&adapter->hw, IGC_MPRC); in igc_update_stats_counters()
2397 adapter->stats.gptc += IGC_READ_REG(&adapter->hw, IGC_GPTC); in igc_update_stats_counters()
2402 adapter->stats.gorc += IGC_READ_REG(&adapter->hw, IGC_GORCL) + in igc_update_stats_counters()
2403 ((u64)IGC_READ_REG(&adapter->hw, IGC_GORCH) << 32); in igc_update_stats_counters()
2404 adapter->stats.gotc += IGC_READ_REG(&adapter->hw, IGC_GOTCL) + in igc_update_stats_counters()
2405 ((u64)IGC_READ_REG(&adapter->hw, IGC_GOTCH) << 32); in igc_update_stats_counters()
2407 adapter->stats.rnbc += IGC_READ_REG(&adapter->hw, IGC_RNBC); in igc_update_stats_counters()
2408 adapter->stats.ruc += IGC_READ_REG(&adapter->hw, IGC_RUC); in igc_update_stats_counters()
2409 adapter->stats.rfc += IGC_READ_REG(&adapter->hw, IGC_RFC); in igc_update_stats_counters()
2410 adapter->stats.roc += IGC_READ_REG(&adapter->hw, IGC_ROC); in igc_update_stats_counters()
2411 adapter->stats.rjc += IGC_READ_REG(&adapter->hw, IGC_RJC); in igc_update_stats_counters()
2413 adapter->stats.tor += IGC_READ_REG(&adapter->hw, IGC_TORH); in igc_update_stats_counters()
2414 adapter->stats.tot += IGC_READ_REG(&adapter->hw, IGC_TOTH); in igc_update_stats_counters()
2416 adapter->stats.tpr += IGC_READ_REG(&adapter->hw, IGC_TPR); in igc_update_stats_counters()
2417 adapter->stats.tpt += IGC_READ_REG(&adapter->hw, IGC_TPT); in igc_update_stats_counters()
2418 adapter->stats.ptc64 += IGC_READ_REG(&adapter->hw, IGC_PTC64); in igc_update_stats_counters()
2419 adapter->stats.ptc127 += IGC_READ_REG(&adapter->hw, IGC_PTC127); in igc_update_stats_counters()
2420 adapter->stats.ptc255 += IGC_READ_REG(&adapter->hw, IGC_PTC255); in igc_update_stats_counters()
2421 adapter->stats.ptc511 += IGC_READ_REG(&adapter->hw, IGC_PTC511); in igc_update_stats_counters()
2422 adapter->stats.ptc1023 += IGC_READ_REG(&adapter->hw, IGC_PTC1023); in igc_update_stats_counters()
2423 adapter->stats.ptc1522 += IGC_READ_REG(&adapter->hw, IGC_PTC1522); in igc_update_stats_counters()
2424 adapter->stats.mptc += IGC_READ_REG(&adapter->hw, IGC_MPTC); in igc_update_stats_counters()
2425 adapter->stats.bptc += IGC_READ_REG(&adapter->hw, IGC_BPTC); in igc_update_stats_counters()
2428 adapter->stats.iac += IGC_READ_REG(&adapter->hw, IGC_IAC); in igc_update_stats_counters()
2429 adapter->stats.rxdmtc += IGC_READ_REG(&adapter->hw, IGC_RXDMTC); in igc_update_stats_counters()
2431 adapter->stats.algnerrc += IGC_READ_REG(&adapter->hw, IGC_ALGNERRC); in igc_update_stats_counters()
2432 adapter->stats.tncrs += IGC_READ_REG(&adapter->hw, IGC_TNCRS); in igc_update_stats_counters()
2433 adapter->stats.htdpmc += IGC_READ_REG(&adapter->hw, IGC_HTDPMC); in igc_update_stats_counters()
2434 adapter->stats.tsctc += IGC_READ_REG(&adapter->hw, IGC_TSCTC); in igc_update_stats_counters()
2440 struct igc_adapter *adapter = iflib_get_softc(ctx); in igc_if_get_counter() local
2445 return (adapter->stats.colc); in igc_if_get_counter()
2447 return (adapter->dropped_pkts + adapter->stats.rxerrc + in igc_if_get_counter()
2448 adapter->stats.crcerrs + adapter->stats.algnerrc + in igc_if_get_counter()
2449 adapter->stats.ruc + adapter->stats.roc + in igc_if_get_counter()
2450 adapter->stats.mpc + adapter->stats.htdpmc); in igc_if_get_counter()
2452 return (adapter->stats.ecol + adapter->stats.latecol + in igc_if_get_counter()
2453 adapter->watchdog_events); in igc_if_get_counter()
2481 struct igc_adapter *adapter; in igc_sysctl_reg_handler() local
2484 adapter = oidp->oid_arg1; in igc_sysctl_reg_handler()
2485 val = IGC_READ_REG(&adapter->hw, oidp->oid_arg2); in igc_sysctl_reg_handler()
2493 igc_add_hw_stats(struct igc_adapter *adapter) in igc_add_hw_stats() argument
2495 device_t dev = iflib_get_dev(adapter->ctx); in igc_add_hw_stats()
2496 struct igc_tx_queue *tx_que = adapter->tx_queues; in igc_add_hw_stats()
2497 struct igc_rx_queue *rx_que = adapter->rx_queues; in igc_add_hw_stats()
2502 struct igc_hw_stats *stats = &adapter->stats; in igc_add_hw_stats()
2512 CTLFLAG_RD, &adapter->dropped_pkts, in igc_add_hw_stats()
2515 CTLFLAG_RD, &adapter->link_irq, in igc_add_hw_stats()
2518 CTLFLAG_RD, &adapter->rx_overruns, in igc_add_hw_stats()
2521 CTLFLAG_RD, &adapter->watchdog_events, in igc_add_hw_stats()
2525 adapter, IGC_CTRL, igc_sysctl_reg_handler, "IU", in igc_add_hw_stats()
2529 adapter, IGC_RCTL, igc_sysctl_reg_handler, "IU", in igc_add_hw_stats()
2532 CTLFLAG_RD, &adapter->hw.fc.high_water, 0, in igc_add_hw_stats()
2535 CTLFLAG_RD, &adapter->hw.fc.low_water, 0, in igc_add_hw_stats()
2538 for (int i = 0; i < adapter->tx_num_queues; i++, tx_que++) { in igc_add_hw_stats()
2546 CTLTYPE_UINT | CTLFLAG_RD | CTLFLAG_NEEDGIANT, adapter, in igc_add_hw_stats()
2550 CTLTYPE_UINT | CTLFLAG_RD | CTLFLAG_NEEDGIANT, adapter, in igc_add_hw_stats()
2558 for (int j = 0; j < adapter->rx_num_queues; j++, rx_que++) { in igc_add_hw_stats()
2566 CTLTYPE_UINT | CTLFLAG_RD | CTLFLAG_NEEDGIANT, adapter, in igc_add_hw_stats()
2570 CTLTYPE_UINT | CTLFLAG_RD | CTLFLAG_NEEDGIANT, adapter, in igc_add_hw_stats()
2600 CTLFLAG_RD, &adapter->stats.symerrs, in igc_add_hw_stats()
2603 CTLFLAG_RD, &adapter->stats.sec, in igc_add_hw_stats()
2606 CTLFLAG_RD, &adapter->stats.dc, in igc_add_hw_stats()
2609 CTLFLAG_RD, &adapter->stats.mpc, in igc_add_hw_stats()
2612 CTLFLAG_RD, &adapter->stats.rnbc, in igc_add_hw_stats()
2615 CTLFLAG_RD, &adapter->stats.ruc, in igc_add_hw_stats()
2618 CTLFLAG_RD, &adapter->stats.rfc, in igc_add_hw_stats()
2621 CTLFLAG_RD, &adapter->stats.roc, in igc_add_hw_stats()
2624 CTLFLAG_RD, &adapter->stats.rjc, in igc_add_hw_stats()
2627 CTLFLAG_RD, &adapter->stats.rxerrc, in igc_add_hw_stats()
2630 CTLFLAG_RD, &adapter->stats.crcerrs, in igc_add_hw_stats()
2633 CTLFLAG_RD, &adapter->stats.algnerrc, in igc_add_hw_stats()
2636 CTLFLAG_RD, &adapter->stats.xonrxc, in igc_add_hw_stats()
2639 CTLFLAG_RD, &adapter->stats.xontxc, in igc_add_hw_stats()
2642 CTLFLAG_RD, &adapter->stats.xoffrxc, in igc_add_hw_stats()
2645 CTLFLAG_RD, &adapter->stats.xofftxc, in igc_add_hw_stats()
2650 CTLFLAG_RD, &adapter->stats.tpr, in igc_add_hw_stats()
2653 CTLFLAG_RD, &adapter->stats.gprc, in igc_add_hw_stats()
2656 CTLFLAG_RD, &adapter->stats.bprc, in igc_add_hw_stats()
2659 CTLFLAG_RD, &adapter->stats.mprc, in igc_add_hw_stats()
2662 CTLFLAG_RD, &adapter->stats.prc64, in igc_add_hw_stats()
2665 CTLFLAG_RD, &adapter->stats.prc127, in igc_add_hw_stats()
2668 CTLFLAG_RD, &adapter->stats.prc255, in igc_add_hw_stats()
2671 CTLFLAG_RD, &adapter->stats.prc511, in igc_add_hw_stats()
2674 CTLFLAG_RD, &adapter->stats.prc1023, in igc_add_hw_stats()
2677 CTLFLAG_RD, &adapter->stats.prc1522, in igc_add_hw_stats()
2680 CTLFLAG_RD, &adapter->stats.gorc, in igc_add_hw_stats()
2685 CTLFLAG_RD, &adapter->stats.gotc, in igc_add_hw_stats()
2688 CTLFLAG_RD, &adapter->stats.tpt, in igc_add_hw_stats()
2691 CTLFLAG_RD, &adapter->stats.gptc, in igc_add_hw_stats()
2694 CTLFLAG_RD, &adapter->stats.bptc, in igc_add_hw_stats()
2697 CTLFLAG_RD, &adapter->stats.mptc, in igc_add_hw_stats()
2700 CTLFLAG_RD, &adapter->stats.ptc64, in igc_add_hw_stats()
2703 CTLFLAG_RD, &adapter->stats.ptc127, in igc_add_hw_stats()
2706 CTLFLAG_RD, &adapter->stats.ptc255, in igc_add_hw_stats()
2709 CTLFLAG_RD, &adapter->stats.ptc511, in igc_add_hw_stats()
2712 CTLFLAG_RD, &adapter->stats.ptc1023, in igc_add_hw_stats()
2715 CTLFLAG_RD, &adapter->stats.ptc1522, in igc_add_hw_stats()
2718 CTLFLAG_RD, &adapter->stats.tsctc, in igc_add_hw_stats()
2728 CTLFLAG_RD, &adapter->stats.iac, in igc_add_hw_stats()
2732 CTLFLAG_RD, &adapter->stats.rxdmtc, in igc_add_hw_stats()
2746 struct igc_adapter *adapter = (struct igc_adapter *)arg1; in igc_sysctl_nvm_info() local
2762 igc_print_nvm_info(adapter); in igc_sysctl_nvm_info()
2768 igc_print_nvm_info(struct igc_adapter *adapter) in igc_print_nvm_info() argument
2781 igc_read_nvm(&adapter->hw, i, 1, &eeprom_data); in igc_print_nvm_info()
2791 struct igc_adapter *adapter; in igc_sysctl_int_delay() local
2807 adapter = info->adapter; in igc_sysctl_int_delay()
2809 regval = IGC_READ_OFFSET(&adapter->hw, info->offset); in igc_sysctl_int_delay()
2817 adapter->txd_cmd &= ~IGC_TXD_CMD_IDE; in igc_sysctl_int_delay()
2821 adapter->txd_cmd |= IGC_TXD_CMD_IDE; in igc_sysctl_int_delay()
2824 IGC_WRITE_OFFSET(&adapter->hw, info->offset, regval); in igc_sysctl_int_delay()
2829 igc_add_int_delay_sysctl(struct igc_adapter *adapter, const char *name, in igc_add_int_delay_sysctl() argument
2833 info->adapter = adapter; in igc_add_int_delay_sysctl()
2836 SYSCTL_ADD_PROC(device_get_sysctl_ctx(adapter->dev), in igc_add_int_delay_sysctl()
2837 SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)), in igc_add_int_delay_sysctl()
2855 struct igc_adapter *adapter = (struct igc_adapter *) arg1; in igc_set_flowcntl() local
2862 if (input == adapter->fc) /* no change? */ in igc_set_flowcntl()
2870 adapter->hw.fc.requested_mode = input; in igc_set_flowcntl()
2871 adapter->fc = input; in igc_set_flowcntl()
2878 adapter->hw.fc.current_mode = adapter->hw.fc.requested_mode; in igc_set_flowcntl()
2879 igc_force_mac_fc(&adapter->hw); in igc_set_flowcntl()
2891 struct igc_adapter *adapter = (struct igc_adapter *) arg1; in igc_sysctl_eee() local
2894 value = adapter->hw.dev_spec._i225.eee_disable; in igc_sysctl_eee()
2899 adapter->hw.dev_spec._i225.eee_disable = (value != 0); in igc_sysctl_eee()
2900 igc_if_init(adapter->ctx); in igc_sysctl_eee()
2908 struct igc_adapter *adapter; in igc_sysctl_debug_info() local
2919 adapter = (struct igc_adapter *) arg1; in igc_sysctl_debug_info()
2920 igc_print_debug_info(adapter); in igc_sysctl_debug_info()
2929 struct igc_adapter *adapter = (struct igc_adapter *) arg1; in igc_get_rs() local
2938 igc_dump_rs(adapter); in igc_get_rs()
2954 igc_print_debug_info(struct igc_adapter *adapter) in igc_print_debug_info() argument
2956 device_t dev = iflib_get_dev(adapter->ctx); in igc_print_debug_info()
2957 struct ifnet *ifp = iflib_get_ifp(adapter->ctx); in igc_print_debug_info()
2958 struct tx_ring *txr = &adapter->tx_queues->txr; in igc_print_debug_info()
2959 struct rx_ring *rxr = &adapter->rx_queues->rxr; in igc_print_debug_info()
2971 for (int i = 0; i < adapter->tx_num_queues; i++, txr++) { in igc_print_debug_info()
2974 IGC_READ_REG(&adapter->hw, IGC_TDH(i)), in igc_print_debug_info()
2975 IGC_READ_REG(&adapter->hw, IGC_TDT(i))); in igc_print_debug_info()
2978 for (int j=0; j < adapter->rx_num_queues; j++, rxr++) { in igc_print_debug_info()
2981 IGC_READ_REG(&adapter->hw, IGC_RDH(j)), in igc_print_debug_info()
2982 IGC_READ_REG(&adapter->hw, IGC_RDT(j))); in igc_print_debug_info()