Lines Matching +full:ether +full:- +full:link +full:- +full:active +full:- +full:low

3   Copyright (c) 2013-2018, Intel Corporation
56 __XSTRING(IXL_DRIVER_VERSION_BUILD) "-k"
74 …V(I40E_INTEL_VENDOR_ID, I40E_DEV_ID_10G_BASE_T, "Intel(R) Ethernet Controller X710 for 10GBASE-T"),
75 …E_INTEL_VENDOR_ID, I40E_DEV_ID_10G_BASE_T4, "Intel(R) Ethernet Controller X710/X557-AT 10GBASE-T"),
80 …E_INTEL_VENDOR_ID, I40E_DEV_ID_10G_BASE_T_X722, "Intel(R) Ethernet Connection X722 for 10GBASE-T"),
84 …40E_INTEL_VENDOR_ID, I40E_DEV_ID_10G_BASE_T_BC, "Intel(R) Ethernet Controller X710 for 10GBASE-T"),
87 …(I40E_INTEL_VENDOR_ID, I40E_DEV_ID_5G_BASE_T_BC, "Intel(R) Ethernet Controller V710 for 5GBASE-T"),
88 …(I40E_INTEL_VENDOR_ID, I40E_DEV_ID_1G_BASE_T_BC, "Intel(R) Ethernet Controller I710 for 1GBASE-T"),
163 MODULE_DEPEND(ixl, ether, 1, 1, 1);
228 "Filter out packets with Ethertype 0x8808 from being sent out by non-HW sources");
270 "Display debug statements that are printed in non-shared code");
282 ** - true/false for dynamic adjustment
283 ** - default values for static ITR
306 static int ixl_flow_control = -1;
319 &ixl_limit_iwarp_msix, 0, "Limit MSI-X vectors assigned to iWARP");
363 device_t dev = iflib_get_dev(pf->vsi.ctx); in ixl_allocate_pci_resources()
364 struct i40e_hw *hw = &pf->hw; in ixl_allocate_pci_resources()
369 pf->pci_mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY, in ixl_allocate_pci_resources()
372 if (!(pf->pci_mem)) { in ixl_allocate_pci_resources()
378 hw->vendor_id = pci_get_vendor(dev); in ixl_allocate_pci_resources()
379 hw->device_id = pci_get_device(dev); in ixl_allocate_pci_resources()
380 hw->revision_id = pci_read_config(dev, PCIR_REVID, 1); in ixl_allocate_pci_resources()
381 hw->subsystem_vendor_id = in ixl_allocate_pci_resources()
383 hw->subsystem_device_id = in ixl_allocate_pci_resources()
386 hw->bus.device = pci_get_slot(dev); in ixl_allocate_pci_resources()
387 hw->bus.func = pci_get_function(dev); in ixl_allocate_pci_resources()
390 pf->osdep.mem_bus_space_tag = in ixl_allocate_pci_resources()
391 rman_get_bustag(pf->pci_mem); in ixl_allocate_pci_resources()
392 pf->osdep.mem_bus_space_handle = in ixl_allocate_pci_resources()
393 rman_get_bushandle(pf->pci_mem); in ixl_allocate_pci_resources()
394 pf->osdep.mem_bus_space_size = rman_get_size(pf->pci_mem); in ixl_allocate_pci_resources()
395 pf->osdep.flush_reg = I40E_GLGEN_STAT; in ixl_allocate_pci_resources()
396 pf->osdep.dev = dev; in ixl_allocate_pci_resources()
398 pf->hw.hw_addr = (u8 *) &pf->osdep.mem_bus_space_handle; in ixl_allocate_pci_resources()
399 pf->hw.back = &pf->osdep; in ixl_allocate_pci_resources()
407 if_softc_ctx_t scctx = pf->vsi.shared; in ixl_setup_ssctx()
408 struct i40e_hw *hw = &pf->hw; in ixl_setup_ssctx()
411 scctx->isc_ntxqsets_max = scctx->isc_nrxqsets_max = 1; in ixl_setup_ssctx()
412 scctx->isc_ntxqsets = scctx->isc_nrxqsets = 1; in ixl_setup_ssctx()
413 } else if (hw->mac.type == I40E_MAC_X722) in ixl_setup_ssctx()
414 scctx->isc_ntxqsets_max = scctx->isc_nrxqsets_max = 128; in ixl_setup_ssctx()
416 scctx->isc_ntxqsets_max = scctx->isc_nrxqsets_max = 64; in ixl_setup_ssctx()
418 if (pf->vsi.enable_head_writeback) { in ixl_setup_ssctx()
419 scctx->isc_txqsizes[0] = roundup2(scctx->isc_ntxd[0] in ixl_setup_ssctx()
421 scctx->isc_txrx = &ixl_txrx_hwb; in ixl_setup_ssctx()
423 scctx->isc_txqsizes[0] = roundup2(scctx->isc_ntxd[0] in ixl_setup_ssctx()
425 scctx->isc_txrx = &ixl_txrx_dwb; in ixl_setup_ssctx()
428 scctx->isc_txrx->ift_legacy_intr = ixl_intr; in ixl_setup_ssctx()
429 scctx->isc_rxqsizes[0] = roundup2(scctx->isc_nrxd[0] in ixl_setup_ssctx()
431 scctx->isc_msix_bar = PCIR_BAR(IXL_MSIX_BAR); in ixl_setup_ssctx()
432 scctx->isc_tx_nsegments = IXL_MAX_TX_SEGS; in ixl_setup_ssctx()
433 scctx->isc_tx_tso_segments_max = IXL_MAX_TSO_SEGS; in ixl_setup_ssctx()
434 scctx->isc_tx_tso_size_max = IXL_TSO_SIZE; in ixl_setup_ssctx()
435 scctx->isc_tx_tso_segsize_max = IXL_MAX_DMA_SEG_SIZE; in ixl_setup_ssctx()
436 scctx->isc_rss_table_size = pf->hw.func_caps.rss_table_size; in ixl_setup_ssctx()
437 scctx->isc_tx_csum_flags = CSUM_OFFLOAD; in ixl_setup_ssctx()
438 scctx->isc_capabilities = scctx->isc_capenable = IXL_CAPS; in ixl_setup_ssctx()
446 if (ixl_test_state(&pf->state, IXL_STATE_LINK_POLLING)) { in ixl_admin_timer()
447 struct i40e_hw *hw = &pf->hw; in ixl_admin_timer()
451 hw->phy.get_link_info = TRUE; in ixl_admin_timer()
452 status = i40e_get_link_status(hw, &pf->link_up); in ixl_admin_timer()
454 ixl_clear_state(&pf->state, IXL_STATE_LINK_POLLING); in ixl_admin_timer()
455 /* OS link info is updated in the admin task */ in ixl_admin_timer()
457 device_printf(pf->dev, in ixl_admin_timer()
460 i40e_aq_str(hw, hw->aq.asq_last_status)); in ixl_admin_timer()
462 if (stime - pf->link_poll_start > IXL_PF_MAX_LINK_POLL) { in ixl_admin_timer()
463 device_printf(pf->dev, "Polling link status failed\n"); in ixl_admin_timer()
464 ixl_clear_state(&pf->state, IXL_STATE_LINK_POLLING); in ixl_admin_timer()
470 iflib_admin_intr_deferred(pf->vsi.ctx); in ixl_admin_timer()
473 callout_schedule(&pf->admin_timer, hz/2); in ixl_admin_timer()
479 struct ixl_vsi *vsi = &pf->vsi; in ixl_attach_pre_recovery_mode()
480 struct i40e_hw *hw = &pf->hw; in ixl_attach_pre_recovery_mode()
481 device_t dev = pf->dev; in ixl_attach_pre_recovery_mode()
485 i40e_get_mac_addr(hw, hw->mac.addr); in ixl_attach_pre_recovery_mode()
487 if (vsi->shared->isc_intr == IFLIB_INTR_MSIX) { in ixl_attach_pre_recovery_mode()
514 vsi = &pf->vsi; in ixl_if_attach_pre()
515 vsi->back = pf; in ixl_if_attach_pre()
516 pf->dev = dev; in ixl_if_attach_pre()
517 hw = &pf->hw; in ixl_if_attach_pre()
519 vsi->dev = dev; in ixl_if_attach_pre()
520 vsi->hw = &pf->hw; in ixl_if_attach_pre()
521 vsi->id = 0; in ixl_if_attach_pre()
522 vsi->num_vlans = 0; in ixl_if_attach_pre()
523 vsi->ctx = ctx; in ixl_if_attach_pre()
524 vsi->media = iflib_get_media(ctx); in ixl_if_attach_pre()
525 vsi->shared = iflib_get_softc_ctx(ctx); in ixl_if_attach_pre()
527 snprintf(pf->admin_mtx_name, sizeof(pf->admin_mtx_name), in ixl_if_attach_pre()
529 mtx_init(&pf->admin_mtx, pf->admin_mtx_name, NULL, MTX_DEF); in ixl_if_attach_pre()
530 callout_init_mtx(&pf->admin_timer, &pf->admin_mtx, 0); in ixl_if_attach_pre()
535 /* Do PCI setup - map BAR0, etc */ in ixl_if_attach_pre()
560 hw->aq.num_arq_entries = IXL_AQ_LEN; in ixl_if_attach_pre()
561 hw->aq.num_asq_entries = IXL_AQ_LEN; in ixl_if_attach_pre()
562 hw->aq.arq_buf_size = IXL_AQ_BUF_SZ; in ixl_if_attach_pre()
563 hw->aq.asq_buf_size = IXL_AQ_BUF_SZ; in ixl_if_attach_pre()
583 if (hw->aq.api_maj_ver == I40E_FW_API_VERSION_MAJOR && in ixl_if_attach_pre()
584 hw->aq.api_min_ver > I40E_FW_MINOR_VERSION(hw)) { in ixl_if_attach_pre()
589 } else if (hw->aq.api_maj_ver == 1 && hw->aq.api_min_ver < 4) { in ixl_if_attach_pre()
619 if (((pf->hw.aq.fw_maj_ver == 4) && (pf->hw.aq.fw_min_ver < 3)) || in ixl_if_attach_pre()
620 (pf->hw.aq.fw_maj_ver < 4)) { in ixl_if_attach_pre()
622 ixl_set_state(&pf->state, IXL_STATE_FW_LLDP_DISABLED); in ixl_if_attach_pre()
627 ixl_set_state(&pf->state, IXL_STATE_EEE_ENABLED); in ixl_if_attach_pre()
629 ixl_clear_state(&pf->state, IXL_STATE_EEE_ENABLED); in ixl_if_attach_pre()
632 i40e_get_mac_addr(hw, hw->mac.addr); in ixl_if_attach_pre()
633 error = i40e_validate_mac_addr(hw->mac.addr); in ixl_if_attach_pre()
638 bcopy(hw->mac.addr, hw->mac.perm_addr, ETHER_ADDR_LEN); in ixl_if_attach_pre()
639 iflib_set_mac(ctx, hw->mac.addr); in ixl_if_attach_pre()
640 i40e_get_port_mac_addr(hw, hw->mac.port_addr); in ixl_if_attach_pre()
654 ixl_set_state(&pf->state, in ixl_if_attach_pre()
657 ixl_clear_state(&pf->state, in ixl_if_attach_pre()
662 /* Tell FW to apply DCB config on link up */ in ixl_if_attach_pre()
678 mtx_lock(&pf->admin_mtx); in ixl_if_attach_pre()
679 callout_stop(&pf->admin_timer); in ixl_if_attach_pre()
680 mtx_unlock(&pf->admin_mtx); in ixl_if_attach_pre()
681 mtx_destroy(&pf->admin_mtx); in ixl_if_attach_pre()
700 vsi = &pf->vsi; in ixl_if_attach_post()
701 vsi->ifp = iflib_get_ifp(ctx); in ixl_if_attach_post()
702 hw = &pf->hw; in ixl_if_attach_post()
705 vsi->num_rx_queues = vsi->shared->isc_nrxqsets; in ixl_if_attach_post()
706 vsi->num_tx_queues = vsi->shared->isc_ntxqsets; in ixl_if_attach_post()
716 /* Keep admin queue interrupts active while driver is loaded */ in ixl_if_attach_post()
717 if (vsi->shared->isc_intr == IFLIB_INTR_MSIX) { in ixl_if_attach_post()
725 mtx_lock(&pf->admin_mtx); in ixl_if_attach_post()
726 callout_reset(&pf->admin_timer, hz/2, ixl_admin_timer, pf); in ixl_if_attach_post()
727 mtx_unlock(&pf->admin_mtx); in ixl_if_attach_post()
742 error = ixl_pf_qmgr_init(&pf->qmgr, hw->func_caps.num_tx_qp); in ixl_if_attach_post()
749 error = ixl_pf_qmgr_alloc_contiguous(&pf->qmgr, in ixl_if_attach_post()
750 max(vsi->num_rx_queues, vsi->num_tx_queues), &pf->qtag); in ixl_if_attach_post()
756 device_printf(dev, "Allocating %d queues for PF LAN VSI; %d queues active\n", in ixl_if_attach_post()
757 pf->qtag.num_allocated, pf->qtag.num_active); in ixl_if_attach_post()
759 /* Determine link state */ in ixl_if_attach_post()
764 /* Limit PHY interrupts to link, autoneg, and modules failure */ in ixl_if_attach_post()
770 i40e_aq_str(hw, hw->aq.asq_last_status)); in ixl_if_attach_post()
777 /* Keep admin queue interrupts active while driver is loaded */ in ixl_if_attach_post()
778 if (vsi->shared->isc_intr == IFLIB_INTR_MSIX) { in ixl_if_attach_post()
793 * Driver may have been reloaded. Ensure that the link state in ixl_if_attach_post()
796 ixl_set_link(pf, ixl_test_state(&pf->state, IXL_STATE_LINK_ACTIVE_ON_DOWN)); in ixl_if_attach_post()
798 hw->phy.get_link_info = true; in ixl_if_attach_post()
799 status = i40e_get_link_status(hw, &pf->link_up); in ixl_if_attach_post()
802 "%s get link status, status: %s aq_err=%s\n", in ixl_if_attach_post()
804 i40e_aq_str(hw, hw->aq.asq_last_status)); in ixl_if_attach_post()
809 ixl_set_state(&pf->state, IXL_STATE_LINK_POLLING); in ixl_if_attach_post()
810 pf->link_poll_start = getsbinuptime(); in ixl_if_attach_post()
819 if (hw->func_caps.iwarp && ixl_enable_iwarp) { in ixl_if_attach_post()
820 pf->iw_enabled = (pf->iw_msix > 0) ? true : false; in ixl_if_attach_post()
821 if (pf->iw_enabled) { in ixl_if_attach_post()
832 "(no MSI-X vectors)\n"); in ixl_if_attach_post()
834 pf->iw_enabled = false; in ixl_if_attach_post()
839 mtx_lock(&pf->admin_mtx); in ixl_if_attach_post()
840 callout_reset(&pf->admin_timer, hz/2, ixl_admin_timer, pf); in ixl_if_attach_post()
841 mtx_unlock(&pf->admin_mtx); in ixl_if_attach_post()
854 * -> This means that this isn't allowed to fail
860 struct ixl_vsi *vsi = &pf->vsi; in ixl_if_detach()
861 struct i40e_hw *hw = &pf->hw; in ixl_if_detach()
862 device_t dev = pf->dev; in ixl_if_detach()
871 mtx_lock(&pf->admin_mtx); in ixl_if_detach()
872 callout_stop(&pf->admin_timer); in ixl_if_detach()
873 mtx_unlock(&pf->admin_mtx); in ixl_if_detach()
874 mtx_destroy(&pf->admin_mtx); in ixl_if_detach()
877 if (ixl_enable_iwarp && pf->iw_enabled) { in ixl_if_detach()
886 ifmedia_removeall(vsi->media); in ixl_if_detach()
899 ixl_pf_qmgr_destroy(&pf->qmgr); in ixl_if_detach()
901 ixl_free_filters(&vsi->ftl); in ixl_if_detach()
915 /* TODO: Then setup low power mode */ in ixl_if_shutdown()
929 /* TODO: Then setup low power mode */ in ixl_if_suspend()
941 /* Read & clear wake-up registers */ in ixl_if_resume()
943 /* Required after D3->D0 transition */ in ixl_if_resume()
954 struct ixl_vsi *vsi = &pf->vsi; in ixl_if_init()
955 struct i40e_hw *hw = &pf->hw; in ixl_if_init()
968 if (!i40e_check_asq_alive(&pf->hw)) { in ixl_if_init()
975 bcopy(if_getlladdr(vsi->ifp), tmpaddr, ETH_ALEN); in ixl_if_init()
976 if (!ixl_ether_is_equal(hw->mac.addr, tmpaddr) && in ixl_if_init()
978 ixl_del_all_vlan_filters(vsi, hw->mac.addr); in ixl_if_init()
979 bcopy(tmpaddr, hw->mac.addr, ETH_ALEN); in ixl_if_init()
982 hw->mac.addr, NULL); in ixl_if_init()
993 iflib_set_mac(ctx, hw->mac.addr); in ixl_if_init()
1009 /* Set up MSI-X routing and the ITR settings */ in ixl_if_init()
1010 if (vsi->shared->isc_intr == IFLIB_INTR_MSIX) { in ixl_if_init()
1016 if (vsi->enable_head_writeback) in ixl_if_init()
1023 i40e_aq_set_default_vsi(hw, vsi->seid, NULL); in ixl_if_init()
1025 /* Re-add configure filters to HW */ in ixl_if_init()
1032 if (ixl_enable_iwarp && pf->iw_enabled) { in ixl_if_init()
1046 struct ixl_vsi *vsi = &pf->vsi; in ixl_if_stop()
1056 if (ixl_enable_iwarp && pf->iw_enabled) in ixl_if_stop()
1061 ixl_disable_rings(pf, vsi, &pf->qtag); in ixl_if_stop()
1064 * Don't set link state if only reconfiguring in ixl_if_stop()
1068 !ixl_test_state(&pf->state, IXL_STATE_LINK_ACTIVE_ON_DOWN)) in ixl_if_stop()
1076 struct ixl_vsi *vsi = &pf->vsi; in ixl_if_msix_intr_assign()
1077 struct ixl_rx_queue *rx_que = vsi->rx_queues; in ixl_if_msix_intr_assign()
1078 struct ixl_tx_queue *tx_que = vsi->tx_queues; in ixl_if_msix_intr_assign()
1082 MPASS(vsi->shared->isc_nrxqsets > 0); in ixl_if_msix_intr_assign()
1083 MPASS(vsi->shared->isc_ntxqsets > 0); in ixl_if_msix_intr_assign()
1087 err = iflib_irq_alloc_generic(ctx, &vsi->irq, rid, IFLIB_INTR_ADMIN, in ixl_if_msix_intr_assign()
1090 iflib_irq_free(ctx, &vsi->irq); in ixl_if_msix_intr_assign()
1102 for (i = 0, vector = 1; i < vsi->shared->isc_nrxqsets; i++, vector++, rx_que++) { in ixl_if_msix_intr_assign()
1106 err = iflib_irq_alloc_generic(ctx, &rx_que->que_irq, rid, in ixl_if_msix_intr_assign()
1107 IFLIB_INTR_RXTX, ixl_msix_que, rx_que, rx_que->rxr.me, buf); in ixl_if_msix_intr_assign()
1113 vsi->num_rx_queues = i + 1; in ixl_if_msix_intr_assign()
1116 rx_que->msix = vector; in ixl_if_msix_intr_assign()
1121 for (i = 0; i < vsi->shared->isc_ntxqsets; i++, tx_que++) { in ixl_if_msix_intr_assign()
1124 &vsi->rx_queues[i % vsi->shared->isc_nrxqsets].que_irq, in ixl_if_msix_intr_assign()
1125 IFLIB_INTR_TX, tx_que, tx_que->txr.me, buf); in ixl_if_msix_intr_assign()
1129 * better way than this other than a user-supplied map, though. */ in ixl_if_msix_intr_assign()
1130 tx_que->msix = (i % vsi->shared->isc_nrxqsets) + 1; in ixl_if_msix_intr_assign()
1135 iflib_irq_free(ctx, &vsi->irq); in ixl_if_msix_intr_assign()
1136 rx_que = vsi->rx_queues; in ixl_if_msix_intr_assign()
1137 for (int i = 0; i < vsi->num_rx_queues; i++, rx_que++) in ixl_if_msix_intr_assign()
1138 iflib_irq_free(ctx, &rx_que->que_irq); in ixl_if_msix_intr_assign()
1152 struct ixl_vsi *vsi = &pf->vsi; in ixl_if_enable_intr()
1153 struct i40e_hw *hw = vsi->hw; in ixl_if_enable_intr()
1154 struct ixl_rx_queue *que = vsi->rx_queues; in ixl_if_enable_intr()
1158 for (int i = 0; i < vsi->num_rx_queues; i++, que++) in ixl_if_enable_intr()
1160 ixl_enable_queue(hw, que->rxr.me); in ixl_if_enable_intr()
1166 * Other interrupt causes need to remain active.
1172 struct ixl_vsi *vsi = &pf->vsi; in ixl_if_disable_intr()
1173 struct i40e_hw *hw = vsi->hw; in ixl_if_disable_intr()
1174 struct ixl_rx_queue *rx_que = vsi->rx_queues; in ixl_if_disable_intr()
1176 if (vsi->shared->isc_intr == IFLIB_INTR_MSIX) { in ixl_if_disable_intr()
1177 for (int i = 0; i < vsi->num_rx_queues; i++, rx_que++) in ixl_if_disable_intr()
1178 ixl_disable_queue(hw, rx_que->msix - 1); in ixl_if_disable_intr()
1190 struct ixl_vsi *vsi = &pf->vsi; in ixl_if_rx_queue_intr_enable()
1191 struct i40e_hw *hw = vsi->hw; in ixl_if_rx_queue_intr_enable()
1192 struct ixl_rx_queue *rx_que = &vsi->rx_queues[rxqid]; in ixl_if_rx_queue_intr_enable()
1194 ixl_enable_queue(hw, rx_que->msix - 1); in ixl_if_rx_queue_intr_enable()
1202 struct ixl_vsi *vsi = &pf->vsi; in ixl_if_tx_queue_intr_enable()
1203 struct i40e_hw *hw = vsi->hw; in ixl_if_tx_queue_intr_enable()
1204 struct ixl_tx_queue *tx_que = &vsi->tx_queues[txqid]; in ixl_if_tx_queue_intr_enable()
1206 ixl_enable_queue(hw, tx_que->msix - 1); in ixl_if_tx_queue_intr_enable()
1214 struct ixl_vsi *vsi = &pf->vsi; in ixl_if_tx_queues_alloc()
1215 if_softc_ctx_t scctx = vsi->shared; in ixl_if_tx_queues_alloc()
1219 MPASS(scctx->isc_ntxqsets > 0); in ixl_if_tx_queues_alloc()
1221 MPASS(scctx->isc_ntxqsets == ntxqsets); in ixl_if_tx_queues_alloc()
1224 if (!(vsi->tx_queues = in ixl_if_tx_queues_alloc()
1230 for (i = 0, que = vsi->tx_queues; i < ntxqsets; i++, que++) { in ixl_if_tx_queues_alloc()
1231 struct tx_ring *txr = &que->txr; in ixl_if_tx_queues_alloc()
1233 txr->me = i; in ixl_if_tx_queues_alloc()
1234 que->vsi = vsi; in ixl_if_tx_queues_alloc()
1236 if (!vsi->enable_head_writeback) { in ixl_if_tx_queues_alloc()
1238 if (!(txr->tx_rsq = malloc(sizeof(qidx_t) * scctx->isc_ntxd[0], M_IXL, M_NOWAIT))) { in ixl_if_tx_queues_alloc()
1244 for (j = 0; j < scctx->isc_ntxd[0]; j++) in ixl_if_tx_queues_alloc()
1245 txr->tx_rsq[j] = QIDX_INVALID; in ixl_if_tx_queues_alloc()
1248 txr->tail = I40E_QTX_TAIL(txr->me); in ixl_if_tx_queues_alloc()
1249 txr->tx_base = (struct i40e_tx_desc *)vaddrs[i * ntxqs]; in ixl_if_tx_queues_alloc()
1250 txr->tx_paddr = paddrs[i * ntxqs]; in ixl_if_tx_queues_alloc()
1251 txr->que = que; in ixl_if_tx_queues_alloc()
1264 struct ixl_vsi *vsi = &pf->vsi; in ixl_if_rx_queues_alloc()
1269 if_softc_ctx_t scctx = vsi->shared; in ixl_if_rx_queues_alloc()
1270 MPASS(scctx->isc_nrxqsets > 0); in ixl_if_rx_queues_alloc()
1272 MPASS(scctx->isc_nrxqsets == nrxqsets); in ixl_if_rx_queues_alloc()
1276 if (!(vsi->rx_queues = in ixl_if_rx_queues_alloc()
1284 for (i = 0, que = vsi->rx_queues; i < nrxqsets; i++, que++) { in ixl_if_rx_queues_alloc()
1285 struct rx_ring *rxr = &que->rxr; in ixl_if_rx_queues_alloc()
1287 rxr->me = i; in ixl_if_rx_queues_alloc()
1288 que->vsi = vsi; in ixl_if_rx_queues_alloc()
1291 rxr->tail = I40E_QRX_TAIL(rxr->me); in ixl_if_rx_queues_alloc()
1292 rxr->rx_base = (union i40e_rx_desc *)vaddrs[i * nrxqs]; in ixl_if_rx_queues_alloc()
1293 rxr->rx_paddr = paddrs[i * nrxqs]; in ixl_if_rx_queues_alloc()
1294 rxr->que = que; in ixl_if_rx_queues_alloc()
1307 struct ixl_vsi *vsi = &pf->vsi; in ixl_if_queues_free()
1309 if (vsi->tx_queues != NULL && !vsi->enable_head_writeback) { in ixl_if_queues_free()
1313 for (i = 0, que = vsi->tx_queues; i < vsi->num_tx_queues; i++, que++) { in ixl_if_queues_free()
1314 struct tx_ring *txr = &que->txr; in ixl_if_queues_free()
1315 if (txr->tx_rsq != NULL) { in ixl_if_queues_free()
1316 free(txr->tx_rsq, M_IXL); in ixl_if_queues_free()
1317 txr->tx_rsq = NULL; in ixl_if_queues_free()
1322 if (vsi->tx_queues != NULL) { in ixl_if_queues_free()
1323 free(vsi->tx_queues, M_IXL); in ixl_if_queues_free()
1324 vsi->tx_queues = NULL; in ixl_if_queues_free()
1326 if (vsi->rx_queues != NULL) { in ixl_if_queues_free()
1327 free(vsi->rx_queues, M_IXL); in ixl_if_queues_free()
1328 vsi->rx_queues = NULL; in ixl_if_queues_free()
1332 sysctl_ctx_free(&vsi->sysctl_ctx); in ixl_if_queues_free()
1338 struct ixl_vsi *vsi = &pf->vsi; in ixl_update_link_status()
1339 struct i40e_hw *hw = &pf->hw; in ixl_update_link_status()
1342 if (pf->link_up) { in ixl_update_link_status()
1343 if (vsi->link_active == FALSE) { in ixl_update_link_status()
1344 vsi->link_active = TRUE; in ixl_update_link_status()
1345 baudrate = ixl_max_aq_speed_to_value(hw->phy.link_info.link_speed); in ixl_update_link_status()
1346 iflib_link_state_change(vsi->ctx, LINK_STATE_UP, baudrate); in ixl_update_link_status()
1352 } else { /* Link down */ in ixl_update_link_status()
1353 if (vsi->link_active == TRUE) { in ixl_update_link_status()
1354 vsi->link_active = FALSE; in ixl_update_link_status()
1355 iflib_link_state_change(vsi->ctx, LINK_STATE_DOWN, 0); in ixl_update_link_status()
1366 device_t dev = pf->dev; in ixl_handle_lan_overflow_event()
1369 rxq_idx = (e->desc.params.external.param0 & I40E_PRTDCB_RUPTQ_RXQNUM_MASK) >> in ixl_handle_lan_overflow_event()
1371 qtx_ctl = e->desc.params.external.param1; in ixl_handle_lan_overflow_event()
1382 struct i40e_hw *hw = &pf->hw; in ixl_process_adminq()
1383 device_t dev = pf->dev; in ixl_process_adminq()
1413 * This should only occur on no-drop queues, which in ixl_process_adminq()
1426 /* Re-enable admin queue interrupt cause */ in ixl_process_adminq()
1438 struct i40e_hw *hw = &pf->hw; in ixl_if_update_admin_status()
1446 * Don't proceed if it hasn't been re-initialized in ixl_if_update_admin_status()
1449 if (!i40e_check_asq_alive(&pf->hw)) in ixl_if_update_admin_status()
1452 if (ixl_test_state(&pf->state, IXL_STATE_MDD_PENDING)) in ixl_if_update_admin_status()
1460 * Otherwise, re-enable our interrupt and go to sleep. in ixl_if_update_admin_status()
1472 struct ixl_vsi *vsi = &pf->vsi; in ixl_if_multi_set()
1473 struct i40e_hw *hw = vsi->hw; in ixl_if_multi_set()
1484 vsi->seid, TRUE, NULL); in ixl_if_multi_set()
1497 struct ixl_vsi *vsi = &pf->vsi; in ixl_if_mtu_set()
1500 if (mtu > IXL_MAX_FRAME - ETHER_HDR_LEN - ETHER_CRC_LEN - in ixl_if_mtu_set()
1504 vsi->shared->isc_max_frame_size = mtu + ETHER_HDR_LEN + ETHER_CRC_LEN + in ixl_if_mtu_set()
1514 struct i40e_hw *hw = &pf->hw; in ixl_if_media_status()
1518 ifmr->ifm_status = IFM_AVALID; in ixl_if_media_status()
1519 ifmr->ifm_active = IFM_ETHER; in ixl_if_media_status()
1521 if (!pf->link_up) { in ixl_if_media_status()
1525 ifmr->ifm_status |= IFM_ACTIVE; in ixl_if_media_status()
1526 /* Hardware is always full-duplex */ in ixl_if_media_status()
1527 ifmr->ifm_active |= IFM_FDX; in ixl_if_media_status()
1529 switch (hw->phy.link_info.phy_type) { in ixl_if_media_status()
1532 ifmr->ifm_active |= IFM_100_TX; in ixl_if_media_status()
1536 ifmr->ifm_active |= IFM_1000_T; in ixl_if_media_status()
1539 ifmr->ifm_active |= IFM_1000_SX; in ixl_if_media_status()
1542 ifmr->ifm_active |= IFM_1000_LX; in ixl_if_media_status()
1545 ifmr->ifm_active |= IFM_1000_T; in ixl_if_media_status()
1549 ifmr->ifm_active |= IFM_2500_T; in ixl_if_media_status()
1553 ifmr->ifm_active |= IFM_5000_T; in ixl_if_media_status()
1557 ifmr->ifm_active |= IFM_10G_TWINAX; in ixl_if_media_status()
1560 ifmr->ifm_active |= IFM_10G_SR; in ixl_if_media_status()
1563 ifmr->ifm_active |= IFM_10G_LR; in ixl_if_media_status()
1566 ifmr->ifm_active |= IFM_10G_T; in ixl_if_media_status()
1570 ifmr->ifm_active |= IFM_10G_TWINAX; in ixl_if_media_status()
1573 ifmr->ifm_active |= IFM_10G_AOC; in ixl_if_media_status()
1577 ifmr->ifm_active |= IFM_25G_KR; in ixl_if_media_status()
1580 ifmr->ifm_active |= IFM_25G_CR; in ixl_if_media_status()
1583 ifmr->ifm_active |= IFM_25G_SR; in ixl_if_media_status()
1586 ifmr->ifm_active |= IFM_25G_LR; in ixl_if_media_status()
1589 ifmr->ifm_active |= IFM_25G_AOC; in ixl_if_media_status()
1592 ifmr->ifm_active |= IFM_25G_ACC; in ixl_if_media_status()
1597 ifmr->ifm_active |= IFM_40G_CR4; in ixl_if_media_status()
1600 ifmr->ifm_active |= IFM_40G_SR4; in ixl_if_media_status()
1603 ifmr->ifm_active |= IFM_40G_LR4; in ixl_if_media_status()
1606 ifmr->ifm_active |= IFM_OTHER; in ixl_if_media_status()
1609 ifmr->ifm_active |= IFM_1000_KX; in ixl_if_media_status()
1612 ifmr->ifm_active |= IFM_1000_SGMII; in ixl_if_media_status()
1617 ifmr->ifm_active |= IFM_10G_CR1; in ixl_if_media_status()
1620 ifmr->ifm_active |= IFM_10G_KX4; in ixl_if_media_status()
1623 ifmr->ifm_active |= IFM_10G_KR; in ixl_if_media_status()
1626 ifmr->ifm_active |= IFM_10G_SFI; in ixl_if_media_status()
1630 ifmr->ifm_active |= IFM_20G_KR2; in ixl_if_media_status()
1633 ifmr->ifm_active |= IFM_40G_KR4; in ixl_if_media_status()
1637 ifmr->ifm_active |= IFM_40G_XLPPI; in ixl_if_media_status()
1641 ifmr->ifm_active |= IFM_UNKNOWN; in ixl_if_media_status()
1645 if (hw->phy.link_info.an_info & I40E_AQ_LINK_PAUSE_TX) in ixl_if_media_status()
1646 ifmr->ifm_active |= IFM_ETH_TXPAUSE; in ixl_if_media_status()
1647 if (hw->phy.link_info.an_info & I40E_AQ_LINK_PAUSE_RX) in ixl_if_media_status()
1648 ifmr->ifm_active |= IFM_ETH_RXPAUSE; in ixl_if_media_status()
1658 if (IFM_TYPE(ifm->ifm_media) != IFM_ETHER) in ixl_if_media_change()
1669 struct ixl_vsi *vsi = &pf->vsi; in ixl_if_promisc_set()
1671 struct i40e_hw *hw = vsi->hw; in ixl_if_promisc_set()
1682 vsi->seid, uni, NULL, true); in ixl_if_promisc_set()
1686 vsi->seid, multi, NULL); in ixl_if_promisc_set()
1705 struct ixl_vsi *vsi = &pf->vsi; in ixl_if_vlan_register()
1706 struct i40e_hw *hw = vsi->hw; in ixl_if_vlan_register()
1717 ++vsi->num_vlans; in ixl_if_vlan_register()
1718 bit_set(vsi->vlans_map, vtag); in ixl_if_vlan_register()
1723 if (vsi->num_vlans < IXL_MAX_VLAN_FILTERS) in ixl_if_vlan_register()
1724 ixl_add_filter(vsi, hw->mac.addr, vtag); in ixl_if_vlan_register()
1725 else if (vsi->num_vlans == IXL_MAX_VLAN_FILTERS) { in ixl_if_vlan_register()
1728 * for all registered VLANs. Re-configure filtering in ixl_if_vlan_register()
1731 device_printf(vsi->dev, in ixl_if_vlan_register()
1733 ixl_del_all_vlan_filters(vsi, hw->mac.addr); in ixl_if_vlan_register()
1734 ixl_add_filter(vsi, hw->mac.addr, IXL_VLAN_ANY); in ixl_if_vlan_register()
1742 struct ixl_vsi *vsi = &pf->vsi; in ixl_if_vlan_unregister()
1743 struct i40e_hw *hw = vsi->hw; in ixl_if_vlan_unregister()
1749 --vsi->num_vlans; in ixl_if_vlan_unregister()
1750 bit_clear(vsi->vlans_map, vtag); in ixl_if_vlan_unregister()
1756 if (vsi->num_vlans < IXL_MAX_VLAN_FILTERS - 1) in ixl_if_vlan_unregister()
1757 ixl_del_filter(vsi, hw->mac.addr, vtag); in ixl_if_vlan_unregister()
1758 else if (vsi->num_vlans == IXL_MAX_VLAN_FILTERS - 1) { in ixl_if_vlan_unregister()
1759 ixl_del_filter(vsi, hw->mac.addr, IXL_VLAN_ANY); in ixl_if_vlan_unregister()
1760 ixl_add_vlan_filters(vsi, hw->mac.addr); in ixl_if_vlan_unregister()
1768 struct ixl_vsi *vsi = &pf->vsi; in ixl_if_get_counter()
1773 return (vsi->ipackets); in ixl_if_get_counter()
1775 return (vsi->ierrors); in ixl_if_get_counter()
1777 return (vsi->opackets); in ixl_if_get_counter()
1779 return (vsi->oerrors); in ixl_if_get_counter()
1784 return (vsi->ibytes); in ixl_if_get_counter()
1786 return (vsi->obytes); in ixl_if_get_counter()
1788 return (vsi->imcasts); in ixl_if_get_counter()
1790 return (vsi->omcasts); in ixl_if_get_counter()
1792 return (vsi->iqdrops); in ixl_if_get_counter()
1794 return (vsi->oqdrops); in ixl_if_get_counter()
1796 return (vsi->noproto); in ixl_if_get_counter()
1817 if (pf->read_i2c_byte == NULL) in ixl_if_i2c_req()
1820 for (int i = 0; i < req->len; i++) in ixl_if_i2c_req()
1821 if (pf->read_i2c_byte(pf, req->offset + i, in ixl_if_i2c_req()
1822 req->dev_addr, &req->data[i])) in ixl_if_i2c_req()
1845 if (ifd->ifd_cmd == I40E_NVM_ACCESS) { in ixl_if_priv_ioctl()
1861 /* ixl_if_needs_restart - Tell iflib when the driver needs to be reinitialized
1885 device_t dev = pf->dev; in ixl_save_pf_tunables()
1889 pf->enable_tx_fc_filter = ixl_enable_tx_fc_filter; in ixl_save_pf_tunables()
1892 pf->recovery_mode = ixl_debug_recovery_mode; in ixl_save_pf_tunables()
1894 pf->dbg_mask = ixl_core_debug_mask; in ixl_save_pf_tunables()
1895 pf->hw.debug_mask = ixl_shared_debug_mask; in ixl_save_pf_tunables()
1896 pf->vsi.enable_head_writeback = !!(ixl_enable_head_writeback); in ixl_save_pf_tunables()
1897 pf->enable_vf_loopback = !!(ixl_enable_vf_loopback); in ixl_save_pf_tunables()
1899 pf->dynamic_rx_itr = ixl_dynamic_rx_itr; in ixl_save_pf_tunables()
1900 pf->dynamic_tx_itr = ixl_dynamic_tx_itr; in ixl_save_pf_tunables()
1904 pf->i2c_access_method = 0; in ixl_save_pf_tunables()
1906 pf->i2c_access_method = ixl_i2c_access_method; in ixl_save_pf_tunables()
1916 pf->tx_itr = IXL_ITR_4K; in ixl_save_pf_tunables()
1918 pf->tx_itr = ixl_tx_itr; in ixl_save_pf_tunables()
1928 pf->rx_itr = IXL_ITR_8K; in ixl_save_pf_tunables()
1930 pf->rx_itr = ixl_rx_itr; in ixl_save_pf_tunables()
1932 pf->fc = -1; in ixl_save_pf_tunables()
1933 if (ixl_flow_control != -1) { in ixl_save_pf_tunables()
1944 pf->fc = ixl_flow_control; in ixl_save_pf_tunables()