Lines Matching refs:wx

521 	unsigned int budget = q_vector->wx->tx_work_limit;  in wx_clean_tx_irq()
646 struct wx *wx = q_vector->wx; in wx_poll() local
681 if (netif_running(wx->netdev)) in wx_poll()
682 wx_intr_enable(wx, WX_INTR_Q(q_vector->v_idx)); in wx_poll()
876 struct wx *wx = netdev_priv(netdev); in wx_xmit_frame() local
890 if (r_idx >= wx->num_tx_queues) in wx_xmit_frame()
891 r_idx = r_idx % wx->num_tx_queues; in wx_xmit_frame()
892 tx_ring = wx->tx_ring[r_idx]; in wx_xmit_frame()
898 void wx_napi_enable_all(struct wx *wx) in wx_napi_enable_all() argument
903 for (q_idx = 0; q_idx < wx->num_q_vectors; q_idx++) { in wx_napi_enable_all()
904 q_vector = wx->q_vector[q_idx]; in wx_napi_enable_all()
910 void wx_napi_disable_all(struct wx *wx) in wx_napi_disable_all() argument
915 for (q_idx = 0; q_idx < wx->num_q_vectors; q_idx++) { in wx_napi_disable_all()
916 q_vector = wx->q_vector[q_idx]; in wx_napi_disable_all()
930 static void wx_set_rss_queues(struct wx *wx) in wx_set_rss_queues() argument
932 wx->num_rx_queues = wx->mac.max_rx_queues; in wx_set_rss_queues()
933 wx->num_tx_queues = wx->mac.max_tx_queues; in wx_set_rss_queues()
936 static void wx_set_num_queues(struct wx *wx) in wx_set_num_queues() argument
939 wx->num_rx_queues = 1; in wx_set_num_queues()
940 wx->num_tx_queues = 1; in wx_set_num_queues()
941 wx->queues_per_pool = 1; in wx_set_num_queues()
943 wx_set_rss_queues(wx); in wx_set_num_queues()
954 static int wx_acquire_msix_vectors(struct wx *wx) in wx_acquire_msix_vectors() argument
959 nvecs = min_t(int, num_online_cpus(), wx->mac.max_msix_vectors); in wx_acquire_msix_vectors()
961 wx->msix_entries = kcalloc(nvecs, in wx_acquire_msix_vectors()
964 if (!wx->msix_entries) in wx_acquire_msix_vectors()
967 nvecs = pci_alloc_irq_vectors_affinity(wx->pdev, nvecs, in wx_acquire_msix_vectors()
972 wx_err(wx, "Failed to allocate MSI-X interrupts. Err: %d\n", nvecs); in wx_acquire_msix_vectors()
973 kfree(wx->msix_entries); in wx_acquire_msix_vectors()
974 wx->msix_entries = NULL; in wx_acquire_msix_vectors()
979 wx->msix_entries[i].entry = i; in wx_acquire_msix_vectors()
980 wx->msix_entries[i].vector = pci_irq_vector(wx->pdev, i); in wx_acquire_msix_vectors()
985 wx->num_q_vectors = nvecs; in wx_acquire_msix_vectors()
986 wx->num_rx_queues = nvecs; in wx_acquire_msix_vectors()
987 wx->num_tx_queues = nvecs; in wx_acquire_msix_vectors()
999 static int wx_set_interrupt_capability(struct wx *wx) in wx_set_interrupt_capability() argument
1001 struct pci_dev *pdev = wx->pdev; in wx_set_interrupt_capability()
1005 ret = wx_acquire_msix_vectors(wx); in wx_set_interrupt_capability()
1009 wx->num_rx_queues = 1; in wx_set_interrupt_capability()
1010 wx->num_tx_queues = 1; in wx_set_interrupt_capability()
1011 wx->num_q_vectors = 1; in wx_set_interrupt_capability()
1019 wx_err(wx, "Fallback to MSI.\n"); in wx_set_interrupt_capability()
1021 wx_err(wx, "Fallback to LEGACY.\n"); in wx_set_interrupt_capability()
1023 wx_err(wx, "Failed to allocate MSI/LEGACY interrupts. Error: %d\n", nvecs); in wx_set_interrupt_capability()
1039 static void wx_cache_ring_rss(struct wx *wx) in wx_cache_ring_rss() argument
1043 for (i = 0; i < wx->num_rx_queues; i++) in wx_cache_ring_rss()
1044 wx->rx_ring[i]->reg_idx = i; in wx_cache_ring_rss()
1046 for (i = 0; i < wx->num_tx_queues; i++) in wx_cache_ring_rss()
1047 wx->tx_ring[i]->reg_idx = i; in wx_cache_ring_rss()
1069 static int wx_alloc_q_vector(struct wx *wx, in wx_alloc_q_vector() argument
1087 netif_napi_add(wx->netdev, &q_vector->napi, in wx_alloc_q_vector()
1091 wx->q_vector[v_idx] = q_vector; in wx_alloc_q_vector()
1092 q_vector->wx = wx; in wx_alloc_q_vector()
1100 if (wx->mac.type == wx_mac_sp) in wx_alloc_q_vector()
1107 q_vector->itr = wx->tx_itr_setting ? in wx_alloc_q_vector()
1108 default_itr : wx->tx_itr_setting; in wx_alloc_q_vector()
1111 q_vector->itr = wx->rx_itr_setting ? in wx_alloc_q_vector()
1112 default_itr : wx->rx_itr_setting; in wx_alloc_q_vector()
1116 ring->dev = &wx->pdev->dev; in wx_alloc_q_vector()
1117 ring->netdev = wx->netdev; in wx_alloc_q_vector()
1126 ring->count = wx->tx_ring_count; in wx_alloc_q_vector()
1131 wx->tx_ring[txr_idx] = ring; in wx_alloc_q_vector()
1143 ring->dev = &wx->pdev->dev; in wx_alloc_q_vector()
1144 ring->netdev = wx->netdev; in wx_alloc_q_vector()
1153 ring->count = wx->rx_ring_count; in wx_alloc_q_vector()
1157 wx->rx_ring[rxr_idx] = ring; in wx_alloc_q_vector()
1179 static void wx_free_q_vector(struct wx *wx, int v_idx) in wx_free_q_vector() argument
1181 struct wx_q_vector *q_vector = wx->q_vector[v_idx]; in wx_free_q_vector()
1185 wx->tx_ring[ring->queue_index] = NULL; in wx_free_q_vector()
1188 wx->rx_ring[ring->queue_index] = NULL; in wx_free_q_vector()
1190 wx->q_vector[v_idx] = NULL; in wx_free_q_vector()
1202 static int wx_alloc_q_vectors(struct wx *wx) in wx_alloc_q_vectors() argument
1205 unsigned int rxr_remaining = wx->num_rx_queues; in wx_alloc_q_vectors()
1206 unsigned int txr_remaining = wx->num_tx_queues; in wx_alloc_q_vectors()
1207 unsigned int q_vectors = wx->num_q_vectors; in wx_alloc_q_vectors()
1214 err = wx_alloc_q_vector(wx, q_vectors, v_idx, in wx_alloc_q_vectors()
1231 wx->num_tx_queues = 0; in wx_alloc_q_vectors()
1232 wx->num_rx_queues = 0; in wx_alloc_q_vectors()
1233 wx->num_q_vectors = 0; in wx_alloc_q_vectors()
1236 wx_free_q_vector(wx, v_idx); in wx_alloc_q_vectors()
1249 static void wx_free_q_vectors(struct wx *wx) in wx_free_q_vectors() argument
1251 int v_idx = wx->num_q_vectors; in wx_free_q_vectors()
1253 wx->num_tx_queues = 0; in wx_free_q_vectors()
1254 wx->num_rx_queues = 0; in wx_free_q_vectors()
1255 wx->num_q_vectors = 0; in wx_free_q_vectors()
1258 wx_free_q_vector(wx, v_idx); in wx_free_q_vectors()
1261 void wx_reset_interrupt_capability(struct wx *wx) in wx_reset_interrupt_capability() argument
1263 struct pci_dev *pdev = wx->pdev; in wx_reset_interrupt_capability()
1268 pci_free_irq_vectors(wx->pdev); in wx_reset_interrupt_capability()
1270 kfree(wx->msix_entries); in wx_reset_interrupt_capability()
1271 wx->msix_entries = NULL; in wx_reset_interrupt_capability()
1283 void wx_clear_interrupt_scheme(struct wx *wx) in wx_clear_interrupt_scheme() argument
1285 wx_free_q_vectors(wx); in wx_clear_interrupt_scheme()
1286 wx_reset_interrupt_capability(wx); in wx_clear_interrupt_scheme()
1290 int wx_init_interrupt_scheme(struct wx *wx) in wx_init_interrupt_scheme() argument
1295 wx_set_num_queues(wx); in wx_init_interrupt_scheme()
1298 ret = wx_set_interrupt_capability(wx); in wx_init_interrupt_scheme()
1300 wx_err(wx, "Allocate irq vectors for failed.\n"); in wx_init_interrupt_scheme()
1305 ret = wx_alloc_q_vectors(wx); in wx_init_interrupt_scheme()
1307 wx_err(wx, "Unable to allocate memory for queue vectors.\n"); in wx_init_interrupt_scheme()
1308 wx_reset_interrupt_capability(wx); in wx_init_interrupt_scheme()
1312 wx_cache_ring_rss(wx); in wx_init_interrupt_scheme()
1330 void wx_free_irq(struct wx *wx) in wx_free_irq() argument
1332 struct pci_dev *pdev = wx->pdev; in wx_free_irq()
1336 free_irq(pdev->irq, wx); in wx_free_irq()
1340 for (vector = 0; vector < wx->num_q_vectors; vector++) { in wx_free_irq()
1341 struct wx_q_vector *q_vector = wx->q_vector[vector]; in wx_free_irq()
1342 struct msix_entry *entry = &wx->msix_entries[vector]; in wx_free_irq()
1351 free_irq(wx->msix_entries[vector].vector, wx); in wx_free_irq()
1361 int wx_setup_isb_resources(struct wx *wx) in wx_setup_isb_resources() argument
1363 struct pci_dev *pdev = wx->pdev; in wx_setup_isb_resources()
1365 wx->isb_mem = dma_alloc_coherent(&pdev->dev, in wx_setup_isb_resources()
1367 &wx->isb_dma, in wx_setup_isb_resources()
1369 if (!wx->isb_mem) { in wx_setup_isb_resources()
1370 wx_err(wx, "Alloc isb_mem failed\n"); in wx_setup_isb_resources()
1384 void wx_free_isb_resources(struct wx *wx) in wx_free_isb_resources() argument
1386 struct pci_dev *pdev = wx->pdev; in wx_free_isb_resources()
1389 wx->isb_mem, wx->isb_dma); in wx_free_isb_resources()
1390 wx->isb_mem = NULL; in wx_free_isb_resources()
1394 u32 wx_misc_isb(struct wx *wx, enum wx_isb_idx idx) in wx_misc_isb() argument
1398 cur_tag = wx->isb_mem[WX_ISB_HEADER]; in wx_misc_isb()
1399 wx->isb_tag[idx] = cur_tag; in wx_misc_isb()
1401 return (__force u32)cpu_to_le32(wx->isb_mem[idx]); in wx_misc_isb()
1413 static void wx_set_ivar(struct wx *wx, s8 direction, in wx_set_ivar() argument
1422 ivar = rd32(wx, WX_PX_MISC_IVAR); in wx_set_ivar()
1425 wr32(wx, WX_PX_MISC_IVAR, ivar); in wx_set_ivar()
1430 ivar = rd32(wx, WX_PX_IVAR(queue >> 1)); in wx_set_ivar()
1433 wr32(wx, WX_PX_IVAR(queue >> 1), ivar); in wx_set_ivar()
1447 struct wx *wx = q_vector->wx; in wx_write_eitr() local
1451 if (wx->mac.type == wx_mac_sp) in wx_write_eitr()
1458 wr32(wx, WX_PX_ITR(v_idx), itr_reg); in wx_write_eitr()
1468 void wx_configure_vectors(struct wx *wx) in wx_configure_vectors() argument
1470 struct pci_dev *pdev = wx->pdev; in wx_configure_vectors()
1476 wr32(wx, WX_PX_ITRSEL, eitrsel); in wx_configure_vectors()
1480 wr32(wx, WX_PX_GPIE, WX_PX_GPIE_MODEL); in wx_configure_vectors()
1485 wr32(wx, WX_PX_GPIE, 0); in wx_configure_vectors()
1491 for (v_idx = 0; v_idx < wx->num_q_vectors; v_idx++) { in wx_configure_vectors()
1492 struct wx_q_vector *q_vector = wx->q_vector[v_idx]; in wx_configure_vectors()
1496 wx_set_ivar(wx, 0, ring->reg_idx, v_idx); in wx_configure_vectors()
1499 wx_set_ivar(wx, 1, ring->reg_idx, v_idx); in wx_configure_vectors()
1504 wx_set_ivar(wx, -1, 0, v_idx); in wx_configure_vectors()
1506 wr32(wx, WX_PX_ITR(v_idx), 1950); in wx_configure_vectors()
1563 void wx_clean_all_rx_rings(struct wx *wx) in wx_clean_all_rx_rings() argument
1567 for (i = 0; i < wx->num_rx_queues; i++) in wx_clean_all_rx_rings()
1568 wx_clean_rx_ring(wx->rx_ring[i]); in wx_clean_all_rx_rings()
1605 static void wx_free_all_rx_resources(struct wx *wx) in wx_free_all_rx_resources() argument
1609 for (i = 0; i < wx->num_rx_queues; i++) in wx_free_all_rx_resources()
1610 wx_free_rx_resources(wx->rx_ring[i]); in wx_free_all_rx_resources()
1679 void wx_clean_all_tx_rings(struct wx *wx) in wx_clean_all_tx_rings() argument
1683 for (i = 0; i < wx->num_tx_queues; i++) in wx_clean_all_tx_rings()
1684 wx_clean_tx_ring(wx->tx_ring[i]); in wx_clean_all_tx_rings()
1715 static void wx_free_all_tx_resources(struct wx *wx) in wx_free_all_tx_resources() argument
1719 for (i = 0; i < wx->num_tx_queues; i++) in wx_free_all_tx_resources()
1720 wx_free_tx_resources(wx->tx_ring[i]); in wx_free_all_tx_resources()
1723 void wx_free_resources(struct wx *wx) in wx_free_resources() argument
1725 wx_free_isb_resources(wx); in wx_free_resources()
1726 wx_free_all_rx_resources(wx); in wx_free_resources()
1727 wx_free_all_tx_resources(wx); in wx_free_resources()
1822 static int wx_setup_all_rx_resources(struct wx *wx) in wx_setup_all_rx_resources() argument
1826 for (i = 0; i < wx->num_rx_queues; i++) { in wx_setup_all_rx_resources()
1827 err = wx_setup_rx_resources(wx->rx_ring[i]); in wx_setup_all_rx_resources()
1831 wx_err(wx, "Allocation for Rx Queue %u failed\n", i); in wx_setup_all_rx_resources()
1839 wx_free_rx_resources(wx->rx_ring[i]); in wx_setup_all_rx_resources()
1905 static int wx_setup_all_tx_resources(struct wx *wx) in wx_setup_all_tx_resources() argument
1909 for (i = 0; i < wx->num_tx_queues; i++) { in wx_setup_all_tx_resources()
1910 err = wx_setup_tx_resources(wx->tx_ring[i]); in wx_setup_all_tx_resources()
1914 wx_err(wx, "Allocation for Tx Queue %u failed\n", i); in wx_setup_all_tx_resources()
1922 wx_free_tx_resources(wx->tx_ring[i]); in wx_setup_all_tx_resources()
1926 int wx_setup_resources(struct wx *wx) in wx_setup_resources() argument
1931 err = wx_setup_all_tx_resources(wx); in wx_setup_resources()
1936 err = wx_setup_all_rx_resources(wx); in wx_setup_resources()
1940 err = wx_setup_isb_resources(wx); in wx_setup_resources()
1947 wx_free_all_rx_resources(wx); in wx_setup_resources()
1949 wx_free_all_tx_resources(wx); in wx_setup_resources()
1963 struct wx *wx = netdev_priv(netdev); in wx_get_stats64() local
1967 for (i = 0; i < wx->num_rx_queues; i++) { in wx_get_stats64()
1968 struct wx_ring *ring = READ_ONCE(wx->rx_ring[i]); in wx_get_stats64()
1983 for (i = 0; i < wx->num_tx_queues; i++) { in wx_get_stats64()
1984 struct wx_ring *ring = READ_ONCE(wx->tx_ring[i]); in wx_get_stats64()