Lines Matching refs:wil

76 bool wil_is_tx_idle(struct wil6210_priv *wil)  in wil_is_tx_idle()  argument
82 struct wil_ring *vring = &wil->ring_tx[i]; in wil_is_tx_idle()
83 int vring_index = vring - wil->ring_tx; in wil_is_tx_idle()
85 &wil->ring_tx_data[vring_index]; in wil_is_tx_idle()
96 if (test_bit(wil_status_napi_en, wil->status)) { in wil_is_tx_idle()
99 wil_dbg_pm(wil, in wil_is_tx_idle()
104 wil_dbg_ratelimited(wil, in wil_is_tx_idle()
107 napi_synchronize(&wil->napi_tx); in wil_is_tx_idle()
121 static int wil_vring_alloc(struct wil6210_priv *wil, struct wil_ring *vring) in wil_vring_alloc() argument
123 struct device *dev = wil_to_dev(wil); in wil_vring_alloc()
127 wil_dbg_misc(wil, "vring_alloc:\n"); in wil_vring_alloc()
151 if (wil->dma_addr_size > 32) in wil_vring_alloc()
161 if (wil->dma_addr_size > 32) in wil_vring_alloc()
163 DMA_BIT_MASK(wil->dma_addr_size)); in wil_vring_alloc()
176 wil_dbg_misc(wil, "vring[%d] 0x%p:%pad 0x%p\n", vring->size, in wil_vring_alloc()
201 static void wil_vring_free(struct wil6210_priv *wil, struct wil_ring *vring) in wil_vring_free() argument
203 struct device *dev = wil_to_dev(wil); in wil_vring_free()
206 lockdep_assert_held(&wil->mutex); in wil_vring_free()
208 int vring_index = vring - wil->ring_tx; in wil_vring_free()
210 wil_dbg_misc(wil, "free Tx vring %d [%d] 0x%p:%pad 0x%p\n", in wil_vring_free()
214 wil_dbg_misc(wil, "free Rx vring [%d] 0x%p:%pad 0x%p\n", in wil_vring_free()
231 wil_dbg_txrx(wil, in wil_vring_free()
268 static int wil_vring_alloc_skb(struct wil6210_priv *wil, struct wil_ring *vring, in wil_vring_alloc_skb() argument
271 struct device *dev = wil_to_dev(wil); in wil_vring_alloc_skb()
272 unsigned int sz = wil->rx_buf_len + ETH_HLEN + wil_rx_snaplen(); in wil_vring_alloc_skb()
318 static void wil_rx_add_radiotap_header(struct wil6210_priv *wil, in wil_rx_add_radiotap_header() argument
347 struct ieee80211_channel *ch = wil->monitor_chandef.chan; in wil_rx_add_radiotap_header()
377 wil_err(wil, "Unable to expand headroom to %d\n", rtap_len); in wil_rx_add_radiotap_header()
417 static bool wil_is_rx_idle(struct wil6210_priv *wil) in wil_is_rx_idle() argument
420 struct wil_ring *ring = &wil->ring_rx; in wil_is_rx_idle()
436 static struct sk_buff *wil_vring_reap_rx(struct wil6210_priv *wil, in wil_vring_reap_rx() argument
439 struct device *dev = wil_to_dev(wil); in wil_vring_reap_rx()
447 unsigned int sz = wil->rx_buf_len + ETH_HLEN + snaplen; in wil_vring_reap_rx()
471 wil_err(wil, "No Rx skb at [%d]\n", i); in wil_vring_reap_rx()
482 wil_dbg_txrx(wil, "Rx[%3d] : %d bytes\n", i, dmalen); in wil_vring_reap_rx()
488 vif = wil->vifs[mid]; in wil_vring_reap_rx()
491 wil_dbg_txrx(wil, "skipped RX descriptor with invalid mid %d", in wil_vring_reap_rx()
497 stats = &wil->sta[cid].stats; in wil_vring_reap_rx()
500 wil_err(wil, "Rx size too large: %d bytes!\n", dmalen); in wil_vring_reap_rx()
518 wil_rx_add_radiotap_header(wil, skb); in wil_vring_reap_rx()
533 wil_dbg_txrx(wil, in wil_vring_reap_rx()
538 wil_dbg_txrx(wil, in wil_vring_reap_rx()
541 wil_rx_bar(wil, vif, cid, tid, seq); in wil_vring_reap_rx()
546 wil_dbg_txrx(wil, in wil_vring_reap_rx()
559 wil_err(wil, "Short frame, len = %d\n", skb->len); in wil_vring_reap_rx()
605 static int wil_rx_refill(struct wil6210_priv *wil, int count) in wil_rx_refill() argument
607 struct net_device *ndev = wil->main_ndev; in wil_rx_refill()
608 struct wil_ring *v = &wil->ring_rx; in wil_rx_refill()
617 rc = wil_vring_alloc_skb(wil, v, v->swtail, headroom); in wil_rx_refill()
619 wil_err_ratelimited(wil, "Error %d in rx refill[%d]\n", in wil_rx_refill()
630 wil_w(wil, v->hwtail, v->swtail); in wil_rx_refill()
658 static int wil_rx_crypto_check(struct wil6210_priv *wil, struct sk_buff *skb) in wil_rx_crypto_check() argument
665 struct wil_sta_info *s = &wil->sta[cid]; in wil_rx_crypto_check()
672 wil_err_ratelimited(wil, in wil_rx_crypto_check()
679 wil_err_ratelimited(wil, in wil_rx_crypto_check()
689 static int wil_rx_error_check(struct wil6210_priv *wil, struct sk_buff *skb, in wil_rx_error_check() argument
697 wil_dbg_txrx(wil, "MIC error, dropping packet\n"); in wil_rx_error_check()
721 struct wil6210_priv *wil = ndev_to_wil(ndev); in wil_netif_rx_any() local
741 wil->txrx_ops.get_netif_rx_params(skb, &cid, &security); in wil_netif_rx_any()
743 stats = &wil->sta[cid].stats; in wil_netif_rx_any()
755 if (security && (wil->txrx_ops.rx_crypto_check(wil, skb) != 0)) { in wil_netif_rx_any()
763 if (unlikely(wil->txrx_ops.rx_error_check(wil, skb, stats))) { in wil_netif_rx_any()
775 int xmit_cid = wil_find_cid(wil, vif->mid, in wil_netif_rx_any()
799 wil_dbg_txrx(wil, "Rx -> Tx %d bytes\n", len); in wil_netif_rx_any()
806 rc = napi_gro_receive(&wil->napi_rx, skb); in wil_netif_rx_any()
807 wil_dbg_txrx(wil, "Rx complete %d bytes => %s\n", in wil_netif_rx_any()
815 wil_dbg_txrx(wil, "Rx drop %d bytes\n", len); in wil_netif_rx_any()
831 void wil_rx_handle(struct wil6210_priv *wil, int *quota) in wil_rx_handle() argument
833 struct net_device *ndev = wil->main_ndev; in wil_rx_handle()
835 struct wil_ring *v = &wil->ring_rx; in wil_rx_handle()
839 wil_err(wil, "Rx IRQ while Rx not yet initialized\n"); in wil_rx_handle()
842 wil_dbg_txrx(wil, "rx_handle\n"); in wil_rx_handle()
843 while ((*quota > 0) && (NULL != (skb = wil_vring_reap_rx(wil, v)))) { in wil_rx_handle()
855 wil_rx_reorder(wil, skb); in wil_rx_handle()
858 wil_rx_refill(wil, v->size); in wil_rx_handle()
861 static void wil_rx_buf_len_init(struct wil6210_priv *wil) in wil_rx_buf_len_init() argument
863 wil->rx_buf_len = rx_large_buf ? in wil_rx_buf_len_init()
865 if (mtu_max > wil->rx_buf_len) { in wil_rx_buf_len_init()
870 wil_info(wil, "Override RX buffer to mtu_max(%d)\n", mtu_max); in wil_rx_buf_len_init()
871 wil->rx_buf_len = mtu_max; in wil_rx_buf_len_init()
875 static int wil_rx_init(struct wil6210_priv *wil, u16 size) in wil_rx_init() argument
877 struct wil_ring *vring = &wil->ring_rx; in wil_rx_init()
880 wil_dbg_misc(wil, "rx_init\n"); in wil_rx_init()
883 wil_err(wil, "Rx ring already allocated\n"); in wil_rx_init()
887 wil_rx_buf_len_init(wil); in wil_rx_init()
891 rc = wil_vring_alloc(wil, vring); in wil_rx_init()
895 rc = wmi_rx_chain_add(wil, vring); in wil_rx_init()
899 rc = wil_rx_refill(wil, vring->size); in wil_rx_init()
905 wil_vring_free(wil, vring); in wil_rx_init()
910 static void wil_rx_fini(struct wil6210_priv *wil) in wil_rx_fini() argument
912 struct wil_ring *vring = &wil->ring_rx; in wil_rx_fini()
914 wil_dbg_misc(wil, "rx_fini\n"); in wil_rx_fini()
917 wil_vring_free(wil, vring); in wil_rx_fini()
963 struct wil6210_priv *wil = vif_to_wil(vif); in wil_vring_init_tx() local
991 struct wil_ring *vring = &wil->ring_tx[id]; in wil_vring_init_tx()
992 struct wil_ring_tx_data *txdata = &wil->ring_tx_data[id]; in wil_vring_init_tx()
994 wil_dbg_misc(wil, "vring_init_tx: max_mpdu_size %d\n", in wil_vring_init_tx()
996 lockdep_assert_held(&wil->mutex); in wil_vring_init_tx()
999 wil_err(wil, "Tx ring [%d] already allocated\n", id); in wil_vring_init_tx()
1007 rc = wil_vring_alloc(wil, vring); in wil_vring_init_tx()
1011 wil->ring2cid_tid[id][0] = cid; in wil_vring_init_tx()
1012 wil->ring2cid_tid[id][1] = tid; in wil_vring_init_tx()
1018 rc = wmi_call(wil, WMI_VRING_CFG_CMDID, vif->mid, &cmd, sizeof(cmd), in wil_vring_init_tx()
1024 wil_err(wil, "Tx config failed, status 0x%02x\n", in wil_vring_init_tx()
1037 wil_addba_tx_request(wil, id, agg_wsize); in wil_vring_init_tx()
1045 wil_vring_free(wil, vring); in wil_vring_init_tx()
1046 wil->ring2cid_tid[id][0] = WIL6210_MAX_CID; in wil_vring_init_tx()
1047 wil->ring2cid_tid[id][1] = 0; in wil_vring_init_tx()
1056 struct wil6210_priv *wil = vif_to_wil(vif); in wil_vring_init_bcast() local
1076 struct wil_ring *vring = &wil->ring_tx[id]; in wil_vring_init_bcast()
1077 struct wil_ring_tx_data *txdata = &wil->ring_tx_data[id]; in wil_vring_init_bcast()
1079 wil_dbg_misc(wil, "vring_init_bcast: max_mpdu_size %d\n", in wil_vring_init_bcast()
1081 lockdep_assert_held(&wil->mutex); in wil_vring_init_bcast()
1084 wil_err(wil, "Tx ring [%d] already allocated\n", id); in wil_vring_init_bcast()
1092 rc = wil_vring_alloc(wil, vring); in wil_vring_init_bcast()
1096 wil->ring2cid_tid[id][0] = WIL6210_MAX_CID; /* CID */ in wil_vring_init_bcast()
1097 wil->ring2cid_tid[id][1] = 0; /* TID */ in wil_vring_init_bcast()
1103 rc = wmi_call(wil, WMI_BCAST_VRING_CFG_CMDID, vif->mid, in wil_vring_init_bcast()
1110 wil_err(wil, "Tx config failed, status 0x%02x\n", in wil_vring_init_bcast()
1128 wil_vring_free(wil, vring); in wil_vring_init_bcast()
1134 static struct wil_ring *wil_find_tx_ucast(struct wil6210_priv *wil, in wil_find_tx_ucast() argument
1140 int cid = wil_find_cid(wil, vif->mid, eth->h_dest); in wil_find_tx_ucast()
1141 int min_ring_id = wil_get_min_tx_ring_id(wil); in wil_find_tx_ucast()
1147 for (i = min_ring_id; i < ARRAY_SIZE(wil->ring2cid_tid); i++) { in wil_find_tx_ucast()
1148 if (!wil->ring_tx_data[i].dot1x_open && in wil_find_tx_ucast()
1151 if (wil->ring2cid_tid[i][0] == cid) { in wil_find_tx_ucast()
1152 struct wil_ring *v = &wil->ring_tx[i]; in wil_find_tx_ucast()
1153 struct wil_ring_tx_data *txdata = &wil->ring_tx_data[i]; in wil_find_tx_ucast()
1155 wil_dbg_txrx(wil, "find_tx_ucast: (%pM) -> [%d]\n", in wil_find_tx_ucast()
1160 wil_dbg_txrx(wil, in wil_find_tx_ucast()
1171 static int wil_tx_ring(struct wil6210_priv *wil, struct wil6210_vif *vif,
1174 static struct wil_ring *wil_find_tx_ring_sta(struct wil6210_priv *wil, in wil_find_tx_ring_sta() argument
1182 int min_ring_id = wil_get_min_tx_ring_id(wil); in wil_find_tx_ring_sta()
1189 ring = &wil->ring_tx[i]; in wil_find_tx_ring_sta()
1190 txdata = &wil->ring_tx_data[i]; in wil_find_tx_ring_sta()
1194 cid = wil->ring2cid_tid[i][0]; in wil_find_tx_ring_sta()
1198 if (!wil->ring_tx_data[i].dot1x_open && in wil_find_tx_ring_sta()
1202 wil_dbg_txrx(wil, "Tx -> ring %d\n", i); in wil_find_tx_ring_sta()
1207 wil_dbg_txrx(wil, "Tx while no rings active?\n"); in wil_find_tx_ring_sta()
1223 static struct wil_ring *wil_find_tx_bcast_1(struct wil6210_priv *wil, in wil_find_tx_bcast_1() argument
1233 v = &wil->ring_tx[i]; in wil_find_tx_bcast_1()
1234 txdata = &wil->ring_tx_data[i]; in wil_find_tx_bcast_1()
1237 if (!wil->ring_tx_data[i].dot1x_open && in wil_find_tx_bcast_1()
1244 static void wil_set_da_for_vring(struct wil6210_priv *wil, in wil_set_da_for_vring() argument
1248 int cid = wil->ring2cid_tid[vring_index][0]; in wil_set_da_for_vring()
1250 ether_addr_copy(eth->h_dest, wil->sta[cid].addr); in wil_set_da_for_vring()
1253 static struct wil_ring *wil_find_tx_bcast_2(struct wil6210_priv *wil, in wil_find_tx_bcast_2() argument
1264 int min_ring_id = wil_get_min_tx_ring_id(wil); in wil_find_tx_bcast_2()
1268 v = &wil->ring_tx[i]; in wil_find_tx_bcast_2()
1269 txdata = &wil->ring_tx_data[i]; in wil_find_tx_bcast_2()
1273 cid = wil->ring2cid_tid[i][0]; in wil_find_tx_bcast_2()
1276 if (!wil->ring_tx_data[i].dot1x_open && in wil_find_tx_bcast_2()
1281 if (0 == memcmp(wil->sta[cid].addr, src, ETH_ALEN)) in wil_find_tx_bcast_2()
1287 wil_dbg_txrx(wil, "Tx while no vrings active?\n"); in wil_find_tx_bcast_2()
1292 wil_dbg_txrx(wil, "BCAST -> ring %d\n", i); in wil_find_tx_bcast_2()
1293 wil_set_da_for_vring(wil, skb, i); in wil_find_tx_bcast_2()
1297 v2 = &wil->ring_tx[i]; in wil_find_tx_bcast_2()
1298 txdata2 = &wil->ring_tx_data[i]; in wil_find_tx_bcast_2()
1301 cid = wil->ring2cid_tid[i][0]; in wil_find_tx_bcast_2()
1304 if (!wil->ring_tx_data[i].dot1x_open && in wil_find_tx_bcast_2()
1308 if (0 == memcmp(wil->sta[cid].addr, src, ETH_ALEN)) in wil_find_tx_bcast_2()
1313 wil_dbg_txrx(wil, "BCAST DUP -> ring %d\n", i); in wil_find_tx_bcast_2()
1314 wil_set_da_for_vring(wil, skb2, i); in wil_find_tx_bcast_2()
1315 wil_tx_ring(wil, vif, v2, skb2); in wil_find_tx_bcast_2()
1317 wil_err(wil, "skb_copy failed\n"); in wil_find_tx_bcast_2()
1430 static int __wil_tx_vring_tso(struct wil6210_priv *wil, struct wil6210_vif *vif, in __wil_tx_vring_tso() argument
1433 struct device *dev = wil_to_dev(wil); in __wil_tx_vring_tso()
1456 int vring_index = vring - wil->ring_tx; in __wil_tx_vring_tso()
1457 struct wil_ring_tx_data *txdata = &wil->ring_tx_data[vring_index]; in __wil_tx_vring_tso()
1471 wil_dbg_txrx(wil, "tx_vring_tso: %d bytes to vring %d\n", skb->len, in __wil_tx_vring_tso()
1483 wil_err_ratelimited(wil, in __wil_tx_vring_tso()
1529 wil_err(wil, "TSO: Skb head DMA map error\n"); in __wil_tx_vring_tso()
1533 wil->txrx_ops.tx_desc_map((union wil_tx_desc *)hdr_desc, pa, in __wil_tx_vring_tso()
1548 wil_dbg_txrx(wil, "TSO: process skb head, len %u\n", in __wil_tx_vring_tso()
1553 wil_dbg_txrx(wil, "TSO: frag[%d]: len %u\n", f, len); in __wil_tx_vring_tso()
1557 wil_dbg_txrx(wil, in __wil_tx_vring_tso()
1562 wil_err_ratelimited(wil, "TSO: ring overflow\n"); in __wil_tx_vring_tso()
1569 wil_dbg_txrx(wil, "TSO: lenmss %d, i %d\n", lenmss, i); in __wil_tx_vring_tso()
1587 wil_err(wil, "TSO: DMA map page error\n"); in __wil_tx_vring_tso()
1601 wil->txrx_ops.tx_desc_map((union wil_tx_desc *)d, in __wil_tx_vring_tso()
1615 wil_dbg_txrx(wil, in __wil_tx_vring_tso()
1681 if (wil_val_in_range(wil->ring_idle_trsh, in __wil_tx_vring_tso()
1684 wil_dbg_txrx(wil, "Ring[%2d] not idle %d -> %d\n", in __wil_tx_vring_tso()
1697 wil_dbg_txrx(wil, "TSO: Tx swhead %d -> %d\n", swhead, vring->swhead); in __wil_tx_vring_tso()
1704 if (wil->tx_latency) in __wil_tx_vring_tso()
1709 wil_w(wil, vring->hwtail, vring->swhead); in __wil_tx_vring_tso()
1730 static int __wil_tx_ring(struct wil6210_priv *wil, struct wil6210_vif *vif, in __wil_tx_ring() argument
1733 struct device *dev = wil_to_dev(wil); in __wil_tx_ring()
1740 int ring_index = ring - wil->ring_tx; in __wil_tx_ring()
1741 struct wil_ring_tx_data *txdata = &wil->ring_tx_data[ring_index]; in __wil_tx_ring()
1748 wil_dbg_txrx(wil, "tx_ring: %d bytes to ring %d, nr_frags %d\n", in __wil_tx_ring()
1755 wil_err_ratelimited(wil, in __wil_tx_ring()
1764 wil_dbg_txrx(wil, "Tx[%2d] skb %d bytes 0x%p -> %pad\n", ring_index, in __wil_tx_ring()
1773 wil->txrx_ops.tx_desc_map((union wil_tx_desc *)d, pa, len, in __wil_tx_ring()
1782 wil_err(wil, "Tx[%2d] Failed to set cksum, drop packet\n", in __wil_tx_ring()
1797 wil_dbg_txrx(wil, "Tx[%2d] desc[%4d]\n", ring_index, i); in __wil_tx_ring()
1805 wil_err(wil, "Tx[%2d] failed to map fragment\n", in __wil_tx_ring()
1810 wil->txrx_ops.tx_desc_map((union wil_tx_desc *)d, in __wil_tx_ring()
1823 wil_dbg_txrx(wil, "Tx[%2d] desc[%4d]\n", ring_index, i); in __wil_tx_ring()
1835 if (wil_val_in_range(wil->ring_idle_trsh, in __wil_tx_ring()
1838 wil_dbg_txrx(wil, "Ring[%2d] not idle %d -> %d\n", in __wil_tx_ring()
1851 wil_dbg_txrx(wil, "Tx[%2d] swhead %d -> %d\n", ring_index, swhead, in __wil_tx_ring()
1860 if (wil->tx_latency) in __wil_tx_ring()
1865 wil_w(wil, ring->hwtail, ring->swhead); in __wil_tx_ring()
1879 wil->txrx_ops.tx_desc_unmap(dev, in __wil_tx_ring()
1889 static int wil_tx_ring(struct wil6210_priv *wil, struct wil6210_vif *vif, in wil_tx_ring() argument
1892 int ring_index = ring - wil->ring_tx; in wil_tx_ring()
1893 struct wil_ring_tx_data *txdata = &wil->ring_tx_data[ring_index]; in wil_tx_ring()
1898 if (test_bit(wil_status_suspending, wil->status) || in wil_tx_ring()
1899 test_bit(wil_status_suspended, wil->status) || in wil_tx_ring()
1900 test_bit(wil_status_resuming, wil->status)) { in wil_tx_ring()
1901 wil_dbg_txrx(wil, in wil_tx_ring()
1907 rc = (skb_is_gso(skb) ? wil->txrx_ops.tx_ring_tso : __wil_tx_ring) in wil_tx_ring()
1908 (wil, vif, ring, skb); in wil_tx_ring()
1932 static inline void __wil_update_net_queues(struct wil6210_priv *wil, in __wil_update_net_queues() argument
1943 wil_dbg_txrx(wil, "vring %d, mid %d, check_stop=%d, stopped=%d", in __wil_update_net_queues()
1944 (int)(ring - wil->ring_tx), vif->mid, check_stop, in __wil_update_net_queues()
1947 wil_dbg_txrx(wil, "check_stop=%d, mid=%d, stopped=%d", in __wil_update_net_queues()
1959 wil_dbg_txrx(wil, "netif_tx_stop called\n"); in __wil_update_net_queues()
1965 if (test_bit(wil_status_suspending, wil->status) || in __wil_update_net_queues()
1966 test_bit(wil_status_suspended, wil->status)) in __wil_update_net_queues()
1971 struct wil_ring *cur_ring = &wil->ring_tx[i]; in __wil_update_net_queues()
1972 struct wil_ring_tx_data *txdata = &wil->ring_tx_data[i]; in __wil_update_net_queues()
1979 wil_dbg_txrx(wil, "ring %d full, can't wake\n", in __wil_update_net_queues()
1980 (int)(cur_ring - wil->ring_tx)); in __wil_update_net_queues()
1987 wil_dbg_txrx(wil, "calling netif_tx_wake\n"); in __wil_update_net_queues()
1993 void wil_update_net_queues(struct wil6210_priv *wil, struct wil6210_vif *vif, in wil_update_net_queues() argument
1996 spin_lock(&wil->net_queue_lock); in wil_update_net_queues()
1997 __wil_update_net_queues(wil, vif, ring, check_stop); in wil_update_net_queues()
1998 spin_unlock(&wil->net_queue_lock); in wil_update_net_queues()
2001 void wil_update_net_queues_bh(struct wil6210_priv *wil, struct wil6210_vif *vif, in wil_update_net_queues_bh() argument
2004 spin_lock_bh(&wil->net_queue_lock); in wil_update_net_queues_bh()
2005 __wil_update_net_queues(wil, vif, ring, check_stop); in wil_update_net_queues_bh()
2006 spin_unlock_bh(&wil->net_queue_lock); in wil_update_net_queues_bh()
2012 struct wil6210_priv *wil = vif_to_wil(vif); in wil_start_xmit() local
2019 wil_dbg_txrx(wil, "start_xmit\n"); in wil_start_xmit()
2020 if (unlikely(!test_bit(wil_status_fwready, wil->status))) { in wil_start_xmit()
2022 wil_err(wil, "FW not ready\n"); in wil_start_xmit()
2028 wil_dbg_ratelimited(wil, in wil_start_xmit()
2033 wil_err(wil, "Xmit in monitor mode not supported\n"); in wil_start_xmit()
2041 ring = wil_find_tx_ring_sta(wil, vif, skb); in wil_start_xmit()
2047 ring = wil_find_tx_bcast_2(wil, vif, skb); in wil_start_xmit()
2050 ring = wil_find_tx_bcast_1(wil, vif, skb); in wil_start_xmit()
2055 ring = wil_find_tx_bcast_2(wil, vif, skb); in wil_start_xmit()
2058 ring = wil_find_tx_ucast(wil, vif, skb); in wil_start_xmit()
2061 wil_dbg_txrx(wil, "No Tx RING found for %pM\n", eth->h_dest); in wil_start_xmit()
2065 rc = wil_tx_ring(wil, vif, ring, skb); in wil_start_xmit()
2070 wil_update_net_queues_bh(wil, vif, ring, true); in wil_start_xmit()
2086 void wil_tx_latency_calc(struct wil6210_priv *wil, struct sk_buff *skb, in wil_tx_latency_calc() argument
2092 if (!wil->tx_latency) in wil_tx_latency_calc()
2099 bin = skb_time_us / wil->tx_latency_res; in wil_tx_latency_calc()
2102 wil_dbg_txrx(wil, "skb time %dus => bin %d\n", skb_time_us, bin); in wil_tx_latency_calc()
2120 struct wil6210_priv *wil = vif_to_wil(vif); in wil_tx_complete() local
2122 struct device *dev = wil_to_dev(wil); in wil_tx_complete()
2123 struct wil_ring *vring = &wil->ring_tx[ringid]; in wil_tx_complete()
2124 struct wil_ring_tx_data *txdata = &wil->ring_tx_data[ringid]; in wil_tx_complete()
2126 int cid = wil->ring2cid_tid[ringid][0]; in wil_tx_complete()
2133 wil_err(wil, "Tx irq[%d]: vring not initialized\n", ringid); in wil_tx_complete()
2138 wil_info(wil, "Tx irq[%d]: vring disabled\n", ringid); in wil_tx_complete()
2142 wil_dbg_txrx(wil, "tx_complete: (%d)\n", ringid); in wil_tx_complete()
2147 stats = &wil->sta[cid].stats; in wil_tx_complete()
2179 wil_dbg_txrx(wil, in wil_tx_complete()
2186 wil->txrx_ops.tx_desc_unmap(dev, in wil_tx_complete()
2198 wil_tx_latency_calc(wil, skb, in wil_tx_complete()
2199 &wil->sta[cid]); in wil_tx_complete()
2227 if (wil_val_in_range(wil->ring_idle_trsh, in wil_tx_complete()
2229 wil_dbg_txrx(wil, "Ring[%2d] idle %d -> %d\n", in wil_tx_complete()
2236 wil_update_net_queues(wil, vif, vring, false); in wil_tx_complete()
2241 static inline int wil_tx_init(struct wil6210_priv *wil) in wil_tx_init() argument
2246 static inline void wil_tx_fini(struct wil6210_priv *wil) {} in wil_tx_fini() argument
2248 static void wil_get_reorder_params(struct wil6210_priv *wil, in wil_get_reorder_params() argument
2262 void wil_init_txrx_ops_legacy_dma(struct wil6210_priv *wil) in wil_init_txrx_ops_legacy_dma() argument
2264 wil->txrx_ops.configure_interrupt_moderation = in wil_init_txrx_ops_legacy_dma()
2267 wil->txrx_ops.tx_desc_map = wil_tx_desc_map; in wil_init_txrx_ops_legacy_dma()
2268 wil->txrx_ops.tx_desc_unmap = wil_txdesc_unmap; in wil_init_txrx_ops_legacy_dma()
2269 wil->txrx_ops.tx_ring_tso = __wil_tx_vring_tso; in wil_init_txrx_ops_legacy_dma()
2270 wil->txrx_ops.ring_init_tx = wil_vring_init_tx; in wil_init_txrx_ops_legacy_dma()
2271 wil->txrx_ops.ring_fini_tx = wil_vring_free; in wil_init_txrx_ops_legacy_dma()
2272 wil->txrx_ops.ring_init_bcast = wil_vring_init_bcast; in wil_init_txrx_ops_legacy_dma()
2273 wil->txrx_ops.tx_init = wil_tx_init; in wil_init_txrx_ops_legacy_dma()
2274 wil->txrx_ops.tx_fini = wil_tx_fini; in wil_init_txrx_ops_legacy_dma()
2276 wil->txrx_ops.rx_init = wil_rx_init; in wil_init_txrx_ops_legacy_dma()
2277 wil->txrx_ops.wmi_addba_rx_resp = wmi_addba_rx_resp; in wil_init_txrx_ops_legacy_dma()
2278 wil->txrx_ops.get_reorder_params = wil_get_reorder_params; in wil_init_txrx_ops_legacy_dma()
2279 wil->txrx_ops.get_netif_rx_params = in wil_init_txrx_ops_legacy_dma()
2281 wil->txrx_ops.rx_crypto_check = wil_rx_crypto_check; in wil_init_txrx_ops_legacy_dma()
2282 wil->txrx_ops.rx_error_check = wil_rx_error_check; in wil_init_txrx_ops_legacy_dma()
2283 wil->txrx_ops.is_rx_idle = wil_is_rx_idle; in wil_init_txrx_ops_legacy_dma()
2284 wil->txrx_ops.rx_fini = wil_rx_fini; in wil_init_txrx_ops_legacy_dma()