Lines Matching refs:adapter
17 static bool ixgbe_cache_ring_dcb_sriov(struct ixgbe_adapter *adapter) in ixgbe_cache_ring_dcb_sriov() argument
20 struct ixgbe_ring_feature *fcoe = &adapter->ring_feature[RING_F_FCOE]; in ixgbe_cache_ring_dcb_sriov()
22 struct ixgbe_ring_feature *vmdq = &adapter->ring_feature[RING_F_VMDQ]; in ixgbe_cache_ring_dcb_sriov()
25 u8 tcs = adapter->hw_tcs; in ixgbe_cache_ring_dcb_sriov()
32 if (!(adapter->flags & IXGBE_FLAG_SRIOV_ENABLED)) in ixgbe_cache_ring_dcb_sriov()
37 for (i = 0, pool = 0; i < adapter->num_rx_queues; i++, reg_idx++) { in ixgbe_cache_ring_dcb_sriov()
43 adapter->rx_ring[i]->reg_idx = reg_idx; in ixgbe_cache_ring_dcb_sriov()
44 adapter->rx_ring[i]->netdev = pool ? NULL : adapter->netdev; in ixgbe_cache_ring_dcb_sriov()
48 for (i = 0; i < adapter->num_tx_queues; i++, reg_idx++) { in ixgbe_cache_ring_dcb_sriov()
52 adapter->tx_ring[i]->reg_idx = reg_idx; in ixgbe_cache_ring_dcb_sriov()
57 if (!(adapter->flags & IXGBE_FLAG_FCOE_ENABLED)) in ixgbe_cache_ring_dcb_sriov()
67 u8 fcoe_tc = ixgbe_fcoe_get_tc(adapter); in ixgbe_cache_ring_dcb_sriov()
70 for (i = fcoe->offset; i < adapter->num_rx_queues; i++) { in ixgbe_cache_ring_dcb_sriov()
72 adapter->rx_ring[i]->reg_idx = reg_idx; in ixgbe_cache_ring_dcb_sriov()
73 adapter->rx_ring[i]->netdev = adapter->netdev; in ixgbe_cache_ring_dcb_sriov()
78 for (i = fcoe->offset; i < adapter->num_tx_queues; i++) { in ixgbe_cache_ring_dcb_sriov()
80 adapter->tx_ring[i]->reg_idx = reg_idx; in ixgbe_cache_ring_dcb_sriov()
90 static void ixgbe_get_first_reg_idx(struct ixgbe_adapter *adapter, u8 tc, in ixgbe_get_first_reg_idx() argument
93 struct ixgbe_hw *hw = &adapter->hw; in ixgbe_get_first_reg_idx()
94 u8 num_tcs = adapter->hw_tcs; in ixgbe_get_first_reg_idx()
147 static bool ixgbe_cache_ring_dcb(struct ixgbe_adapter *adapter) in ixgbe_cache_ring_dcb() argument
149 u8 num_tcs = adapter->hw_tcs; in ixgbe_cache_ring_dcb()
157 rss_i = adapter->ring_feature[RING_F_RSS].indices; in ixgbe_cache_ring_dcb()
160 ixgbe_get_first_reg_idx(adapter, tc, &tx_idx, &rx_idx); in ixgbe_cache_ring_dcb()
162 adapter->tx_ring[offset + i]->reg_idx = tx_idx; in ixgbe_cache_ring_dcb()
163 adapter->rx_ring[offset + i]->reg_idx = rx_idx; in ixgbe_cache_ring_dcb()
164 adapter->rx_ring[offset + i]->netdev = adapter->netdev; in ixgbe_cache_ring_dcb()
165 adapter->tx_ring[offset + i]->dcb_tc = tc; in ixgbe_cache_ring_dcb()
166 adapter->rx_ring[offset + i]->dcb_tc = tc; in ixgbe_cache_ring_dcb()
182 static bool ixgbe_cache_ring_sriov(struct ixgbe_adapter *adapter) in ixgbe_cache_ring_sriov() argument
185 struct ixgbe_ring_feature *fcoe = &adapter->ring_feature[RING_F_FCOE]; in ixgbe_cache_ring_sriov()
187 struct ixgbe_ring_feature *vmdq = &adapter->ring_feature[RING_F_VMDQ]; in ixgbe_cache_ring_sriov()
188 struct ixgbe_ring_feature *rss = &adapter->ring_feature[RING_F_RSS]; in ixgbe_cache_ring_sriov()
193 if (!(adapter->flags & IXGBE_FLAG_VMDQ_ENABLED)) in ixgbe_cache_ring_sriov()
199 for (i = 0; i < adapter->num_rx_queues; i++, reg_idx++) { in ixgbe_cache_ring_sriov()
210 adapter->rx_ring[i]->reg_idx = reg_idx; in ixgbe_cache_ring_sriov()
211 adapter->rx_ring[i]->netdev = pool ? NULL : adapter->netdev; in ixgbe_cache_ring_sriov()
216 for (; i < adapter->num_rx_queues; i++, reg_idx++) { in ixgbe_cache_ring_sriov()
217 adapter->rx_ring[i]->reg_idx = reg_idx; in ixgbe_cache_ring_sriov()
218 adapter->rx_ring[i]->netdev = adapter->netdev; in ixgbe_cache_ring_sriov()
223 for (i = 0; i < adapter->num_tx_queues; i++, reg_idx++) { in ixgbe_cache_ring_sriov()
232 adapter->tx_ring[i]->reg_idx = reg_idx; in ixgbe_cache_ring_sriov()
237 for (; i < adapter->num_tx_queues; i++, reg_idx++) in ixgbe_cache_ring_sriov()
238 adapter->tx_ring[i]->reg_idx = reg_idx; in ixgbe_cache_ring_sriov()
252 static bool ixgbe_cache_ring_rss(struct ixgbe_adapter *adapter) in ixgbe_cache_ring_rss() argument
256 for (i = 0; i < adapter->num_rx_queues; i++) { in ixgbe_cache_ring_rss()
257 adapter->rx_ring[i]->reg_idx = i; in ixgbe_cache_ring_rss()
258 adapter->rx_ring[i]->netdev = adapter->netdev; in ixgbe_cache_ring_rss()
260 for (i = 0, reg_idx = 0; i < adapter->num_tx_queues; i++, reg_idx++) in ixgbe_cache_ring_rss()
261 adapter->tx_ring[i]->reg_idx = reg_idx; in ixgbe_cache_ring_rss()
262 for (i = 0; i < adapter->num_xdp_queues; i++, reg_idx++) in ixgbe_cache_ring_rss()
263 adapter->xdp_ring[i]->reg_idx = reg_idx; in ixgbe_cache_ring_rss()
279 static void ixgbe_cache_ring_register(struct ixgbe_adapter *adapter) in ixgbe_cache_ring_register() argument
282 adapter->rx_ring[0]->reg_idx = 0; in ixgbe_cache_ring_register()
283 adapter->tx_ring[0]->reg_idx = 0; in ixgbe_cache_ring_register()
286 if (ixgbe_cache_ring_dcb_sriov(adapter)) in ixgbe_cache_ring_register()
289 if (ixgbe_cache_ring_dcb(adapter)) in ixgbe_cache_ring_register()
293 if (ixgbe_cache_ring_sriov(adapter)) in ixgbe_cache_ring_register()
296 ixgbe_cache_ring_rss(adapter); in ixgbe_cache_ring_register()
299 static int ixgbe_xdp_queues(struct ixgbe_adapter *adapter) in ixgbe_xdp_queues() argument
301 return adapter->xdp_prog ? nr_cpu_ids : 0; in ixgbe_xdp_queues()
321 static bool ixgbe_set_dcb_sriov_queues(struct ixgbe_adapter *adapter) in ixgbe_set_dcb_sriov_queues() argument
324 u16 vmdq_i = adapter->ring_feature[RING_F_VMDQ].limit; in ixgbe_set_dcb_sriov_queues()
329 u8 tcs = adapter->hw_tcs; in ixgbe_set_dcb_sriov_queues()
336 if (!(adapter->flags & IXGBE_FLAG_SRIOV_ENABLED)) in ixgbe_set_dcb_sriov_queues()
343 vmdq_i += adapter->ring_feature[RING_F_VMDQ].offset; in ixgbe_set_dcb_sriov_queues()
361 vmdq_i -= adapter->ring_feature[RING_F_VMDQ].offset; in ixgbe_set_dcb_sriov_queues()
364 adapter->ring_feature[RING_F_VMDQ].indices = vmdq_i; in ixgbe_set_dcb_sriov_queues()
365 adapter->ring_feature[RING_F_VMDQ].mask = vmdq_m; in ixgbe_set_dcb_sriov_queues()
371 adapter->ring_feature[RING_F_RSS].indices = 1; in ixgbe_set_dcb_sriov_queues()
372 adapter->ring_feature[RING_F_RSS].mask = IXGBE_RSS_DISABLED_MASK; in ixgbe_set_dcb_sriov_queues()
375 adapter->flags &= ~IXGBE_FLAG_FDIR_HASH_CAPABLE; in ixgbe_set_dcb_sriov_queues()
377 adapter->num_rx_pools = vmdq_i; in ixgbe_set_dcb_sriov_queues()
378 adapter->num_rx_queues_per_pool = tcs; in ixgbe_set_dcb_sriov_queues()
380 adapter->num_tx_queues = vmdq_i * tcs; in ixgbe_set_dcb_sriov_queues()
381 adapter->num_xdp_queues = 0; in ixgbe_set_dcb_sriov_queues()
382 adapter->num_rx_queues = vmdq_i * tcs; in ixgbe_set_dcb_sriov_queues()
385 if (adapter->flags & IXGBE_FLAG_FCOE_ENABLED) { in ixgbe_set_dcb_sriov_queues()
388 fcoe = &adapter->ring_feature[RING_F_FCOE]; in ixgbe_set_dcb_sriov_queues()
399 adapter->num_tx_queues += fcoe_i; in ixgbe_set_dcb_sriov_queues()
400 adapter->num_rx_queues += fcoe_i; in ixgbe_set_dcb_sriov_queues()
404 fcoe->offset = ixgbe_fcoe_get_tc(adapter); in ixgbe_set_dcb_sriov_queues()
406 adapter->flags &= ~IXGBE_FLAG_FCOE_ENABLED; in ixgbe_set_dcb_sriov_queues()
416 netdev_set_tc_queue(adapter->netdev, i, 1, i); in ixgbe_set_dcb_sriov_queues()
421 static bool ixgbe_set_dcb_queues(struct ixgbe_adapter *adapter) in ixgbe_set_dcb_queues() argument
423 struct net_device *dev = adapter->netdev; in ixgbe_set_dcb_queues()
429 tcs = adapter->hw_tcs; in ixgbe_set_dcb_queues()
437 if (adapter->hw.mac.type == ixgbe_mac_82598EB) { in ixgbe_set_dcb_queues()
452 f = &adapter->ring_feature[RING_F_RSS]; in ixgbe_set_dcb_queues()
458 adapter->flags &= ~IXGBE_FLAG_FDIR_HASH_CAPABLE; in ixgbe_set_dcb_queues()
466 if (adapter->flags & IXGBE_FLAG_FCOE_ENABLED) { in ixgbe_set_dcb_queues()
467 u8 tc = ixgbe_fcoe_get_tc(adapter); in ixgbe_set_dcb_queues()
469 f = &adapter->ring_feature[RING_F_FCOE]; in ixgbe_set_dcb_queues()
478 adapter->num_tx_queues = rss_i * tcs; in ixgbe_set_dcb_queues()
479 adapter->num_xdp_queues = 0; in ixgbe_set_dcb_queues()
480 adapter->num_rx_queues = rss_i * tcs; in ixgbe_set_dcb_queues()
495 static bool ixgbe_set_sriov_queues(struct ixgbe_adapter *adapter) in ixgbe_set_sriov_queues() argument
497 u16 vmdq_i = adapter->ring_feature[RING_F_VMDQ].limit; in ixgbe_set_sriov_queues()
499 u16 rss_i = adapter->ring_feature[RING_F_RSS].limit; in ixgbe_set_sriov_queues()
506 if (!(adapter->flags & IXGBE_FLAG_SRIOV_ENABLED)) in ixgbe_set_sriov_queues()
513 vmdq_i += adapter->ring_feature[RING_F_VMDQ].offset; in ixgbe_set_sriov_queues()
537 vmdq_i -= adapter->ring_feature[RING_F_VMDQ].offset; in ixgbe_set_sriov_queues()
540 adapter->ring_feature[RING_F_VMDQ].indices = vmdq_i; in ixgbe_set_sriov_queues()
541 adapter->ring_feature[RING_F_VMDQ].mask = vmdq_m; in ixgbe_set_sriov_queues()
544 adapter->ring_feature[RING_F_RSS].indices = rss_i; in ixgbe_set_sriov_queues()
545 adapter->ring_feature[RING_F_RSS].mask = rss_m; in ixgbe_set_sriov_queues()
547 adapter->num_rx_pools = vmdq_i; in ixgbe_set_sriov_queues()
548 adapter->num_rx_queues_per_pool = rss_i; in ixgbe_set_sriov_queues()
550 adapter->num_rx_queues = vmdq_i * rss_i; in ixgbe_set_sriov_queues()
551 adapter->num_tx_queues = vmdq_i * rss_i; in ixgbe_set_sriov_queues()
552 adapter->num_xdp_queues = 0; in ixgbe_set_sriov_queues()
555 adapter->flags &= ~IXGBE_FLAG_FDIR_HASH_CAPABLE; in ixgbe_set_sriov_queues()
563 if (adapter->flags & IXGBE_FLAG_FCOE_ENABLED) { in ixgbe_set_sriov_queues()
566 fcoe = &adapter->ring_feature[RING_F_FCOE]; in ixgbe_set_sriov_queues()
580 if (!(adapter->flags & IXGBE_FLAG_MSIX_ENABLED)) in ixgbe_set_sriov_queues()
591 adapter->num_tx_queues += fcoe_i; in ixgbe_set_sriov_queues()
592 adapter->num_rx_queues += fcoe_i; in ixgbe_set_sriov_queues()
602 netdev_set_num_tc(adapter->netdev, 1); in ixgbe_set_sriov_queues()
605 netdev_set_tc_queue(adapter->netdev, 0, in ixgbe_set_sriov_queues()
606 adapter->num_rx_queues_per_pool, 0); in ixgbe_set_sriov_queues()
619 static bool ixgbe_set_rss_queues(struct ixgbe_adapter *adapter) in ixgbe_set_rss_queues() argument
621 struct ixgbe_hw *hw = &adapter->hw; in ixgbe_set_rss_queues()
626 f = &adapter->ring_feature[RING_F_RSS]; in ixgbe_set_rss_queues()
637 adapter->flags &= ~IXGBE_FLAG_FDIR_HASH_CAPABLE; in ixgbe_set_rss_queues()
644 if (rss_i > 1 && adapter->atr_sample_rate) { in ixgbe_set_rss_queues()
645 f = &adapter->ring_feature[RING_F_FDIR]; in ixgbe_set_rss_queues()
649 if (!(adapter->flags & IXGBE_FLAG_FDIR_PERFECT_CAPABLE)) in ixgbe_set_rss_queues()
650 adapter->flags |= IXGBE_FLAG_FDIR_HASH_CAPABLE; in ixgbe_set_rss_queues()
662 if (adapter->flags & IXGBE_FLAG_FCOE_ENABLED) { in ixgbe_set_rss_queues()
663 struct net_device *dev = adapter->netdev; in ixgbe_set_rss_queues()
666 f = &adapter->ring_feature[RING_F_FCOE]; in ixgbe_set_rss_queues()
673 if (!(adapter->flags & IXGBE_FLAG_MSIX_ENABLED)) in ixgbe_set_rss_queues()
683 adapter->num_rx_queues = rss_i; in ixgbe_set_rss_queues()
684 adapter->num_tx_queues = rss_i; in ixgbe_set_rss_queues()
685 adapter->num_xdp_queues = ixgbe_xdp_queues(adapter); in ixgbe_set_rss_queues()
701 static void ixgbe_set_num_queues(struct ixgbe_adapter *adapter) in ixgbe_set_num_queues() argument
704 adapter->num_rx_queues = 1; in ixgbe_set_num_queues()
705 adapter->num_tx_queues = 1; in ixgbe_set_num_queues()
706 adapter->num_xdp_queues = 0; in ixgbe_set_num_queues()
707 adapter->num_rx_pools = 1; in ixgbe_set_num_queues()
708 adapter->num_rx_queues_per_pool = 1; in ixgbe_set_num_queues()
711 if (ixgbe_set_dcb_sriov_queues(adapter)) in ixgbe_set_num_queues()
714 if (ixgbe_set_dcb_queues(adapter)) in ixgbe_set_num_queues()
718 if (ixgbe_set_sriov_queues(adapter)) in ixgbe_set_num_queues()
721 ixgbe_set_rss_queues(adapter); in ixgbe_set_num_queues()
732 static int ixgbe_acquire_msix_vectors(struct ixgbe_adapter *adapter) in ixgbe_acquire_msix_vectors() argument
734 struct ixgbe_hw *hw = &adapter->hw; in ixgbe_acquire_msix_vectors()
740 vectors = max(adapter->num_rx_queues, adapter->num_tx_queues); in ixgbe_acquire_msix_vectors()
741 vectors = max(vectors, adapter->num_xdp_queues); in ixgbe_acquire_msix_vectors()
766 adapter->msix_entries = kcalloc(vectors, in ixgbe_acquire_msix_vectors()
769 if (!adapter->msix_entries) in ixgbe_acquire_msix_vectors()
773 adapter->msix_entries[i].entry = i; in ixgbe_acquire_msix_vectors()
775 vectors = pci_enable_msix_range(adapter->pdev, adapter->msix_entries, in ixgbe_acquire_msix_vectors()
785 adapter->flags &= ~IXGBE_FLAG_MSIX_ENABLED; in ixgbe_acquire_msix_vectors()
786 kfree(adapter->msix_entries); in ixgbe_acquire_msix_vectors()
787 adapter->msix_entries = NULL; in ixgbe_acquire_msix_vectors()
795 adapter->flags |= IXGBE_FLAG_MSIX_ENABLED; in ixgbe_acquire_msix_vectors()
801 adapter->num_q_vectors = min_t(int, vectors, adapter->max_q_vectors); in ixgbe_acquire_msix_vectors()
829 static int ixgbe_alloc_q_vector(struct ixgbe_adapter *adapter, in ixgbe_alloc_q_vector() argument
840 u8 tcs = adapter->hw_tcs; in ixgbe_alloc_q_vector()
845 if ((tcs <= 1) && !(adapter->flags & IXGBE_FLAG_SRIOV_ENABLED)) { in ixgbe_alloc_q_vector()
846 u16 rss_i = adapter->ring_feature[RING_F_RSS].indices; in ixgbe_alloc_q_vector()
847 if (rss_i > 1 && adapter->atr_sample_rate) { in ixgbe_alloc_q_vector()
875 netif_napi_add(adapter->netdev, &q_vector->napi, in ixgbe_alloc_q_vector()
879 adapter->q_vector[v_idx] = q_vector; in ixgbe_alloc_q_vector()
880 q_vector->adapter = adapter; in ixgbe_alloc_q_vector()
884 q_vector->tx.work_limit = adapter->tx_work_limit; in ixgbe_alloc_q_vector()
895 if (adapter->tx_itr_setting == 1) in ixgbe_alloc_q_vector()
898 q_vector->itr = adapter->tx_itr_setting; in ixgbe_alloc_q_vector()
901 if (adapter->rx_itr_setting == 1) in ixgbe_alloc_q_vector()
904 q_vector->itr = adapter->rx_itr_setting; in ixgbe_alloc_q_vector()
912 ring->dev = &adapter->pdev->dev; in ixgbe_alloc_q_vector()
913 ring->netdev = adapter->netdev; in ixgbe_alloc_q_vector()
922 ring->count = adapter->tx_ring_count; in ixgbe_alloc_q_vector()
926 adapter->tx_ring[txr_idx] = ring; in ixgbe_alloc_q_vector()
938 ring->dev = &adapter->pdev->dev; in ixgbe_alloc_q_vector()
939 ring->netdev = adapter->netdev; in ixgbe_alloc_q_vector()
948 ring->count = adapter->tx_ring_count; in ixgbe_alloc_q_vector()
953 adapter->xdp_ring[xdp_idx] = ring; in ixgbe_alloc_q_vector()
965 ring->dev = &adapter->pdev->dev; in ixgbe_alloc_q_vector()
966 ring->netdev = adapter->netdev; in ixgbe_alloc_q_vector()
978 if (adapter->hw.mac.type == ixgbe_mac_82599EB) in ixgbe_alloc_q_vector()
982 if (adapter->netdev->features & NETIF_F_FCOE_MTU) { in ixgbe_alloc_q_vector()
984 f = &adapter->ring_feature[RING_F_FCOE]; in ixgbe_alloc_q_vector()
992 ring->count = adapter->rx_ring_count; in ixgbe_alloc_q_vector()
996 adapter->rx_ring[rxr_idx] = ring; in ixgbe_alloc_q_vector()
1018 static void ixgbe_free_q_vector(struct ixgbe_adapter *adapter, int v_idx) in ixgbe_free_q_vector() argument
1020 struct ixgbe_q_vector *q_vector = adapter->q_vector[v_idx]; in ixgbe_free_q_vector()
1025 adapter->xdp_ring[ring->queue_index] = NULL; in ixgbe_free_q_vector()
1027 adapter->tx_ring[ring->queue_index] = NULL; in ixgbe_free_q_vector()
1031 adapter->rx_ring[ring->queue_index] = NULL; in ixgbe_free_q_vector()
1033 adapter->q_vector[v_idx] = NULL; in ixgbe_free_q_vector()
1051 static int ixgbe_alloc_q_vectors(struct ixgbe_adapter *adapter) in ixgbe_alloc_q_vectors() argument
1053 int q_vectors = adapter->num_q_vectors; in ixgbe_alloc_q_vectors()
1054 int rxr_remaining = adapter->num_rx_queues; in ixgbe_alloc_q_vectors()
1055 int txr_remaining = adapter->num_tx_queues; in ixgbe_alloc_q_vectors()
1056 int xdp_remaining = adapter->num_xdp_queues; in ixgbe_alloc_q_vectors()
1061 if (!(adapter->flags & IXGBE_FLAG_MSIX_ENABLED)) in ixgbe_alloc_q_vectors()
1066 err = ixgbe_alloc_q_vector(adapter, q_vectors, v_idx, in ixgbe_alloc_q_vectors()
1083 err = ixgbe_alloc_q_vector(adapter, q_vectors, v_idx, in ixgbe_alloc_q_vectors()
1100 for (i = 0; i < adapter->num_rx_queues; i++) { in ixgbe_alloc_q_vectors()
1101 if (adapter->rx_ring[i]) in ixgbe_alloc_q_vectors()
1102 adapter->rx_ring[i]->ring_idx = i; in ixgbe_alloc_q_vectors()
1105 for (i = 0; i < adapter->num_tx_queues; i++) { in ixgbe_alloc_q_vectors()
1106 if (adapter->tx_ring[i]) in ixgbe_alloc_q_vectors()
1107 adapter->tx_ring[i]->ring_idx = i; in ixgbe_alloc_q_vectors()
1110 for (i = 0; i < adapter->num_xdp_queues; i++) { in ixgbe_alloc_q_vectors()
1111 if (adapter->xdp_ring[i]) in ixgbe_alloc_q_vectors()
1112 adapter->xdp_ring[i]->ring_idx = i; in ixgbe_alloc_q_vectors()
1118 adapter->num_tx_queues = 0; in ixgbe_alloc_q_vectors()
1119 adapter->num_xdp_queues = 0; in ixgbe_alloc_q_vectors()
1120 adapter->num_rx_queues = 0; in ixgbe_alloc_q_vectors()
1121 adapter->num_q_vectors = 0; in ixgbe_alloc_q_vectors()
1124 ixgbe_free_q_vector(adapter, v_idx); in ixgbe_alloc_q_vectors()
1137 static void ixgbe_free_q_vectors(struct ixgbe_adapter *adapter) in ixgbe_free_q_vectors() argument
1139 int v_idx = adapter->num_q_vectors; in ixgbe_free_q_vectors()
1141 adapter->num_tx_queues = 0; in ixgbe_free_q_vectors()
1142 adapter->num_xdp_queues = 0; in ixgbe_free_q_vectors()
1143 adapter->num_rx_queues = 0; in ixgbe_free_q_vectors()
1144 adapter->num_q_vectors = 0; in ixgbe_free_q_vectors()
1147 ixgbe_free_q_vector(adapter, v_idx); in ixgbe_free_q_vectors()
1150 static void ixgbe_reset_interrupt_capability(struct ixgbe_adapter *adapter) in ixgbe_reset_interrupt_capability() argument
1152 if (adapter->flags & IXGBE_FLAG_MSIX_ENABLED) { in ixgbe_reset_interrupt_capability()
1153 adapter->flags &= ~IXGBE_FLAG_MSIX_ENABLED; in ixgbe_reset_interrupt_capability()
1154 pci_disable_msix(adapter->pdev); in ixgbe_reset_interrupt_capability()
1155 kfree(adapter->msix_entries); in ixgbe_reset_interrupt_capability()
1156 adapter->msix_entries = NULL; in ixgbe_reset_interrupt_capability()
1157 } else if (adapter->flags & IXGBE_FLAG_MSI_ENABLED) { in ixgbe_reset_interrupt_capability()
1158 adapter->flags &= ~IXGBE_FLAG_MSI_ENABLED; in ixgbe_reset_interrupt_capability()
1159 pci_disable_msi(adapter->pdev); in ixgbe_reset_interrupt_capability()
1170 static void ixgbe_set_interrupt_capability(struct ixgbe_adapter *adapter) in ixgbe_set_interrupt_capability() argument
1175 if (!ixgbe_acquire_msix_vectors(adapter)) in ixgbe_set_interrupt_capability()
1184 if (adapter->hw_tcs > 1) { in ixgbe_set_interrupt_capability()
1186 netdev_reset_tc(adapter->netdev); in ixgbe_set_interrupt_capability()
1188 if (adapter->hw.mac.type == ixgbe_mac_82598EB) in ixgbe_set_interrupt_capability()
1189 adapter->hw.fc.requested_mode = adapter->last_lfc_mode; in ixgbe_set_interrupt_capability()
1191 adapter->flags &= ~IXGBE_FLAG_DCB_ENABLED; in ixgbe_set_interrupt_capability()
1192 adapter->temp_dcb_cfg.pfc_mode_enable = false; in ixgbe_set_interrupt_capability()
1193 adapter->dcb_cfg.pfc_mode_enable = false; in ixgbe_set_interrupt_capability()
1196 adapter->hw_tcs = 0; in ixgbe_set_interrupt_capability()
1197 adapter->dcb_cfg.num_tcs.pg_tcs = 1; in ixgbe_set_interrupt_capability()
1198 adapter->dcb_cfg.num_tcs.pfc_tcs = 1; in ixgbe_set_interrupt_capability()
1202 ixgbe_disable_sriov(adapter); in ixgbe_set_interrupt_capability()
1206 adapter->ring_feature[RING_F_RSS].limit = 1; in ixgbe_set_interrupt_capability()
1211 ixgbe_set_num_queues(adapter); in ixgbe_set_interrupt_capability()
1212 adapter->num_q_vectors = 1; in ixgbe_set_interrupt_capability()
1214 err = pci_enable_msi(adapter->pdev); in ixgbe_set_interrupt_capability()
1219 adapter->flags |= IXGBE_FLAG_MSI_ENABLED; in ixgbe_set_interrupt_capability()
1232 int ixgbe_init_interrupt_scheme(struct ixgbe_adapter *adapter) in ixgbe_init_interrupt_scheme() argument
1237 ixgbe_set_num_queues(adapter); in ixgbe_init_interrupt_scheme()
1240 ixgbe_set_interrupt_capability(adapter); in ixgbe_init_interrupt_scheme()
1242 err = ixgbe_alloc_q_vectors(adapter); in ixgbe_init_interrupt_scheme()
1248 ixgbe_cache_ring_register(adapter); in ixgbe_init_interrupt_scheme()
1251 (adapter->num_rx_queues > 1) ? "Enabled" : "Disabled", in ixgbe_init_interrupt_scheme()
1252 adapter->num_rx_queues, adapter->num_tx_queues, in ixgbe_init_interrupt_scheme()
1253 adapter->num_xdp_queues); in ixgbe_init_interrupt_scheme()
1255 set_bit(__IXGBE_DOWN, &adapter->state); in ixgbe_init_interrupt_scheme()
1260 ixgbe_reset_interrupt_capability(adapter); in ixgbe_init_interrupt_scheme()
1271 void ixgbe_clear_interrupt_scheme(struct ixgbe_adapter *adapter) in ixgbe_clear_interrupt_scheme() argument
1273 adapter->num_tx_queues = 0; in ixgbe_clear_interrupt_scheme()
1274 adapter->num_xdp_queues = 0; in ixgbe_clear_interrupt_scheme()
1275 adapter->num_rx_queues = 0; in ixgbe_clear_interrupt_scheme()
1277 ixgbe_free_q_vectors(adapter); in ixgbe_clear_interrupt_scheme()
1278 ixgbe_reset_interrupt_capability(adapter); in ixgbe_clear_interrupt_scheme()