Lines Matching full:ab

18 static void ath11k_dp_htt_htc_tx_complete(struct ath11k_base *ab,  in ath11k_dp_htt_htc_tx_complete()  argument
26 struct ath11k_base *ab = ar->ab; in ath11k_dp_peer_cleanup() local
31 spin_lock_bh(&ab->base_lock); in ath11k_dp_peer_cleanup()
32 peer = ath11k_peer_find(ab, vdev_id, addr); in ath11k_dp_peer_cleanup()
34 ath11k_warn(ab, "failed to lookup peer %pM on vdev %d\n", in ath11k_dp_peer_cleanup()
36 spin_unlock_bh(&ab->base_lock); in ath11k_dp_peer_cleanup()
43 spin_unlock_bh(&ab->base_lock); in ath11k_dp_peer_cleanup()
48 struct ath11k_base *ab = ar->ab; in ath11k_dp_peer_setup() local
60 ath11k_warn(ab, "failed to set default routing %d peer :%pM vdev_id :%d\n", in ath11k_dp_peer_setup()
69 ath11k_warn(ab, "failed to setup rxd tid queue for tid %d: %d\n", in ath11k_dp_peer_setup()
77 ath11k_warn(ab, "failed to setup rx defrag context\n"); in ath11k_dp_peer_setup()
87 spin_lock_bh(&ab->base_lock); in ath11k_dp_peer_setup()
89 peer = ath11k_peer_find(ab, vdev_id, addr); in ath11k_dp_peer_setup()
91 ath11k_warn(ab, "failed to find the peer to del rx tid\n"); in ath11k_dp_peer_setup()
92 spin_unlock_bh(&ab->base_lock); in ath11k_dp_peer_setup()
99 spin_unlock_bh(&ab->base_lock); in ath11k_dp_peer_setup()
104 void ath11k_dp_srng_cleanup(struct ath11k_base *ab, struct dp_srng *ring) in ath11k_dp_srng_cleanup() argument
110 dma_free_noncoherent(ab->dev, ring->size, ring->vaddr_unaligned, in ath11k_dp_srng_cleanup()
113 dma_free_coherent(ab->dev, ring->size, ring->vaddr_unaligned, in ath11k_dp_srng_cleanup()
133 static int ath11k_dp_srng_calculate_msi_group(struct ath11k_base *ab, in ath11k_dp_srng_calculate_msi_group() argument
141 grp_mask = &ab->hw_params.ring_mask->rx_wbm_rel[0]; in ath11k_dp_srng_calculate_msi_group()
144 grp_mask = &ab->hw_params.ring_mask->tx[0]; in ath11k_dp_srng_calculate_msi_group()
148 grp_mask = &ab->hw_params.ring_mask->rx_err[0]; in ath11k_dp_srng_calculate_msi_group()
151 grp_mask = &ab->hw_params.ring_mask->rx[0]; in ath11k_dp_srng_calculate_msi_group()
154 grp_mask = &ab->hw_params.ring_mask->reo_status[0]; in ath11k_dp_srng_calculate_msi_group()
158 grp_mask = &ab->hw_params.ring_mask->rx_mon_status[0]; in ath11k_dp_srng_calculate_msi_group()
161 grp_mask = &ab->hw_params.ring_mask->rxdma2host[0]; in ath11k_dp_srng_calculate_msi_group()
164 grp_mask = &ab->hw_params.ring_mask->host2rxdma[0]; in ath11k_dp_srng_calculate_msi_group()
184 static void ath11k_dp_srng_msi_setup(struct ath11k_base *ab, in ath11k_dp_srng_msi_setup() argument
192 ret = ath11k_get_user_msi_vector(ab, "DP", in ath11k_dp_srng_msi_setup()
198 msi_group_number = ath11k_dp_srng_calculate_msi_group(ab, type, in ath11k_dp_srng_msi_setup()
201 ath11k_dbg(ab, ATH11K_DBG_PCI, in ath11k_dp_srng_msi_setup()
210 ath11k_dbg(ab, ATH11K_DBG_PCI, in ath11k_dp_srng_msi_setup()
215 ath11k_get_msi_address(ab, &addr_lo, &addr_hi); in ath11k_dp_srng_msi_setup()
224 int ath11k_dp_srng_setup(struct ath11k_base *ab, struct dp_srng *ring, in ath11k_dp_srng_setup() argument
229 int entry_sz = ath11k_hal_srng_get_entrysize(ab, type); in ath11k_dp_srng_setup()
230 int max_entries = ath11k_hal_srng_get_max_entries(ab, type); in ath11k_dp_srng_setup()
242 if (ab->hw_params.alloc_cacheable_memory) { in ath11k_dp_srng_setup()
255 ring->vaddr_unaligned = dma_alloc_noncoherent(ab->dev, ring->size, in ath11k_dp_srng_setup()
260 ring->vaddr_unaligned = dma_alloc_coherent(ab->dev, ring->size, in ath11k_dp_srng_setup()
274 ath11k_dp_srng_msi_setup(ab, &params, type, ring_num + mac_id); in ath11k_dp_srng_setup()
319 ath11k_warn(ab, "Not a valid ring type in dp :%d\n", type); in ath11k_dp_srng_setup()
328 ret = ath11k_hal_srng_setup(ab, type, ring_num, mac_id, &params); in ath11k_dp_srng_setup()
330 ath11k_warn(ab, "failed to setup srng: %d ring_id %d\n", in ath11k_dp_srng_setup()
340 void ath11k_dp_stop_shadow_timers(struct ath11k_base *ab) in ath11k_dp_stop_shadow_timers() argument
344 if (!ab->hw_params.supports_shadow_regs) in ath11k_dp_stop_shadow_timers()
347 for (i = 0; i < ab->hw_params.max_tx_ring; i++) in ath11k_dp_stop_shadow_timers()
348 ath11k_dp_shadow_stop_timer(ab, &ab->dp.tx_ring_timer[i]); in ath11k_dp_stop_shadow_timers()
350 ath11k_dp_shadow_stop_timer(ab, &ab->dp.reo_cmd_timer); in ath11k_dp_stop_shadow_timers()
353 static void ath11k_dp_srng_common_cleanup(struct ath11k_base *ab) in ath11k_dp_srng_common_cleanup() argument
355 struct ath11k_dp *dp = &ab->dp; in ath11k_dp_srng_common_cleanup()
358 ath11k_dp_stop_shadow_timers(ab); in ath11k_dp_srng_common_cleanup()
359 ath11k_dp_srng_cleanup(ab, &dp->wbm_desc_rel_ring); in ath11k_dp_srng_common_cleanup()
360 ath11k_dp_srng_cleanup(ab, &dp->tcl_cmd_ring); in ath11k_dp_srng_common_cleanup()
361 ath11k_dp_srng_cleanup(ab, &dp->tcl_status_ring); in ath11k_dp_srng_common_cleanup()
362 for (i = 0; i < ab->hw_params.max_tx_ring; i++) { in ath11k_dp_srng_common_cleanup()
363 ath11k_dp_srng_cleanup(ab, &dp->tx_ring[i].tcl_data_ring); in ath11k_dp_srng_common_cleanup()
364 ath11k_dp_srng_cleanup(ab, &dp->tx_ring[i].tcl_comp_ring); in ath11k_dp_srng_common_cleanup()
366 ath11k_dp_srng_cleanup(ab, &dp->reo_reinject_ring); in ath11k_dp_srng_common_cleanup()
367 ath11k_dp_srng_cleanup(ab, &dp->rx_rel_ring); in ath11k_dp_srng_common_cleanup()
368 ath11k_dp_srng_cleanup(ab, &dp->reo_except_ring); in ath11k_dp_srng_common_cleanup()
369 ath11k_dp_srng_cleanup(ab, &dp->reo_cmd_ring); in ath11k_dp_srng_common_cleanup()
370 ath11k_dp_srng_cleanup(ab, &dp->reo_status_ring); in ath11k_dp_srng_common_cleanup()
373 static int ath11k_dp_srng_common_setup(struct ath11k_base *ab) in ath11k_dp_srng_common_setup() argument
375 struct ath11k_dp *dp = &ab->dp; in ath11k_dp_srng_common_setup()
380 ret = ath11k_dp_srng_setup(ab, &dp->wbm_desc_rel_ring, in ath11k_dp_srng_common_setup()
384 ath11k_warn(ab, "failed to set up wbm2sw_release ring :%d\n", in ath11k_dp_srng_common_setup()
389 ret = ath11k_dp_srng_setup(ab, &dp->tcl_cmd_ring, HAL_TCL_CMD, 0, 0, in ath11k_dp_srng_common_setup()
392 ath11k_warn(ab, "failed to set up tcl_cmd ring :%d\n", ret); in ath11k_dp_srng_common_setup()
396 ret = ath11k_dp_srng_setup(ab, &dp->tcl_status_ring, HAL_TCL_STATUS, in ath11k_dp_srng_common_setup()
399 ath11k_warn(ab, "failed to set up tcl_status ring :%d\n", ret); in ath11k_dp_srng_common_setup()
403 for (i = 0; i < ab->hw_params.max_tx_ring; i++) { in ath11k_dp_srng_common_setup()
404 tcl_num = ab->hw_params.hal_params->tcl2wbm_rbm_map[i].tcl_ring_num; in ath11k_dp_srng_common_setup()
405 wbm_num = ab->hw_params.hal_params->tcl2wbm_rbm_map[i].wbm_ring_num; in ath11k_dp_srng_common_setup()
407 ret = ath11k_dp_srng_setup(ab, &dp->tx_ring[i].tcl_data_ring, in ath11k_dp_srng_common_setup()
409 ab->hw_params.tx_ring_size); in ath11k_dp_srng_common_setup()
411 ath11k_warn(ab, "failed to set up tcl_data ring (%d) :%d\n", in ath11k_dp_srng_common_setup()
416 ret = ath11k_dp_srng_setup(ab, &dp->tx_ring[i].tcl_comp_ring, in ath11k_dp_srng_common_setup()
420 ath11k_warn(ab, "failed to set up tcl_comp ring (%d) :%d\n", in ath11k_dp_srng_common_setup()
425 srng = &ab->hal.srng_list[dp->tx_ring[i].tcl_data_ring.ring_id]; in ath11k_dp_srng_common_setup()
426 ath11k_hal_tx_init_data_ring(ab, srng); in ath11k_dp_srng_common_setup()
428 ath11k_dp_shadow_init_timer(ab, &dp->tx_ring_timer[i], in ath11k_dp_srng_common_setup()
433 ret = ath11k_dp_srng_setup(ab, &dp->reo_reinject_ring, HAL_REO_REINJECT, in ath11k_dp_srng_common_setup()
436 ath11k_warn(ab, "failed to set up reo_reinject ring :%d\n", in ath11k_dp_srng_common_setup()
441 ret = ath11k_dp_srng_setup(ab, &dp->rx_rel_ring, HAL_WBM2SW_RELEASE, in ath11k_dp_srng_common_setup()
444 ath11k_warn(ab, "failed to set up rx_rel ring :%d\n", ret); in ath11k_dp_srng_common_setup()
448 ret = ath11k_dp_srng_setup(ab, &dp->reo_except_ring, HAL_REO_EXCEPTION, in ath11k_dp_srng_common_setup()
451 ath11k_warn(ab, "failed to set up reo_exception ring :%d\n", in ath11k_dp_srng_common_setup()
456 ret = ath11k_dp_srng_setup(ab, &dp->reo_cmd_ring, HAL_REO_CMD, in ath11k_dp_srng_common_setup()
459 ath11k_warn(ab, "failed to set up reo_cmd ring :%d\n", ret); in ath11k_dp_srng_common_setup()
463 srng = &ab->hal.srng_list[dp->reo_cmd_ring.ring_id]; in ath11k_dp_srng_common_setup()
464 ath11k_hal_reo_init_cmd_ring(ab, srng); in ath11k_dp_srng_common_setup()
466 ath11k_dp_shadow_init_timer(ab, &dp->reo_cmd_timer, in ath11k_dp_srng_common_setup()
470 ret = ath11k_dp_srng_setup(ab, &dp->reo_status_ring, HAL_REO_STATUS, in ath11k_dp_srng_common_setup()
473 ath11k_warn(ab, "failed to set up reo_status ring :%d\n", ret); in ath11k_dp_srng_common_setup()
480 ab->hw_params.hw_ops->reo_setup(ab); in ath11k_dp_srng_common_setup()
485 ath11k_dp_srng_common_cleanup(ab); in ath11k_dp_srng_common_setup()
490 static void ath11k_dp_scatter_idle_link_desc_cleanup(struct ath11k_base *ab) in ath11k_dp_scatter_idle_link_desc_cleanup() argument
492 struct ath11k_dp *dp = &ab->dp; in ath11k_dp_scatter_idle_link_desc_cleanup()
500 dma_free_coherent(ab->dev, HAL_WBM_IDLE_SCATTER_BUF_SIZE_MAX, in ath11k_dp_scatter_idle_link_desc_cleanup()
506 static int ath11k_dp_scatter_idle_link_desc_setup(struct ath11k_base *ab, in ath11k_dp_scatter_idle_link_desc_setup() argument
512 struct ath11k_dp *dp = &ab->dp; in ath11k_dp_scatter_idle_link_desc_setup()
526 ath11k_hal_srng_get_entrysize(ab, HAL_WBM_IDLE_LINK); in ath11k_dp_scatter_idle_link_desc_setup()
533 slist[i].vaddr = dma_alloc_coherent(ab->dev, in ath11k_dp_scatter_idle_link_desc_setup()
570 ath11k_hal_setup_link_idle_list(ab, slist, num_scatter_buf, in ath11k_dp_scatter_idle_link_desc_setup()
576 ath11k_dp_scatter_idle_link_desc_cleanup(ab); in ath11k_dp_scatter_idle_link_desc_setup()
582 ath11k_dp_link_desc_bank_free(struct ath11k_base *ab, in ath11k_dp_link_desc_bank_free() argument
589 dma_free_coherent(ab->dev, in ath11k_dp_link_desc_bank_free()
598 static int ath11k_dp_link_desc_bank_alloc(struct ath11k_base *ab, in ath11k_dp_link_desc_bank_alloc() argument
603 struct ath11k_dp *dp = &ab->dp; in ath11k_dp_link_desc_bank_alloc()
613 dma_alloc_coherent(ab->dev, desc_sz, in ath11k_dp_link_desc_bank_alloc()
632 ath11k_dp_link_desc_bank_free(ab, dp->link_desc_banks); in ath11k_dp_link_desc_bank_alloc()
637 void ath11k_dp_link_desc_cleanup(struct ath11k_base *ab, in ath11k_dp_link_desc_cleanup() argument
641 ath11k_dp_link_desc_bank_free(ab, desc_bank); in ath11k_dp_link_desc_cleanup()
644 ath11k_dp_srng_cleanup(ab, ring); in ath11k_dp_link_desc_cleanup()
645 ath11k_dp_scatter_idle_link_desc_cleanup(ab); in ath11k_dp_link_desc_cleanup()
649 static int ath11k_wbm_idle_ring_setup(struct ath11k_base *ab, u32 *n_link_desc) in ath11k_wbm_idle_ring_setup() argument
651 struct ath11k_dp *dp = &ab->dp; in ath11k_wbm_idle_ring_setup()
676 ret = ath11k_dp_srng_setup(ab, &dp->wbm_idle_ring, in ath11k_wbm_idle_ring_setup()
679 ath11k_warn(ab, "failed to setup wbm_idle_ring: %d\n", ret); in ath11k_wbm_idle_ring_setup()
685 int ath11k_dp_link_desc_setup(struct ath11k_base *ab, in ath11k_dp_link_desc_setup() argument
718 ret = ath11k_dp_link_desc_bank_alloc(ab, link_desc_banks, in ath11k_dp_link_desc_setup()
724 entry_sz = ath11k_hal_srng_get_entrysize(ab, ring_type); in ath11k_dp_link_desc_setup()
730 ret = ath11k_dp_scatter_idle_link_desc_setup(ab, tot_mem_sz, in ath11k_dp_link_desc_setup()
735 ath11k_warn(ab, "failed to setup scatting idle list descriptor :%d\n", in ath11k_dp_link_desc_setup()
745 ath11k_hal_srng_access_begin(ab, srng); in ath11k_dp_link_desc_setup()
754 (desc = ath11k_hal_srng_src_get_next_entry(ab, srng))) { in ath11k_dp_link_desc_setup()
762 ath11k_hal_srng_access_end(ab, srng); in ath11k_dp_link_desc_setup()
769 ath11k_dp_link_desc_bank_free(ab, link_desc_banks); in ath11k_dp_link_desc_setup()
774 int ath11k_dp_service_srng(struct ath11k_base *ab, in ath11k_dp_service_srng() argument
785 for (i = 0; i < ab->hw_params.max_tx_ring; i++) { in ath11k_dp_service_srng()
786 if (BIT(ab->hw_params.hal_params->tcl2wbm_rbm_map[i].wbm_ring_num) & in ath11k_dp_service_srng()
787 ab->hw_params.ring_mask->tx[grp_id]) in ath11k_dp_service_srng()
788 ath11k_dp_tx_completion_handler(ab, i); in ath11k_dp_service_srng()
791 if (ab->hw_params.ring_mask->rx_err[grp_id]) { in ath11k_dp_service_srng()
792 work_done = ath11k_dp_process_rx_err(ab, napi, budget); in ath11k_dp_service_srng()
799 if (ab->hw_params.ring_mask->rx_wbm_rel[grp_id]) { in ath11k_dp_service_srng()
800 work_done = ath11k_dp_rx_process_wbm_err(ab, in ath11k_dp_service_srng()
810 if (ab->hw_params.ring_mask->rx[grp_id]) { in ath11k_dp_service_srng()
811 i = fls(ab->hw_params.ring_mask->rx[grp_id]) - 1; in ath11k_dp_service_srng()
812 work_done = ath11k_dp_process_rx(ab, i, napi, in ath11k_dp_service_srng()
820 if (ab->hw_params.ring_mask->rx_mon_status[grp_id]) { in ath11k_dp_service_srng()
821 for (i = 0; i < ab->num_radios; i++) { in ath11k_dp_service_srng()
822 for (j = 0; j < ab->hw_params.num_rxdma_per_pdev; j++) { in ath11k_dp_service_srng()
823 int id = i * ab->hw_params.num_rxdma_per_pdev + j; in ath11k_dp_service_srng()
825 if (ab->hw_params.ring_mask->rx_mon_status[grp_id] & in ath11k_dp_service_srng()
828 ath11k_dp_rx_process_mon_rings(ab, in ath11k_dp_service_srng()
841 if (ab->hw_params.ring_mask->reo_status[grp_id]) in ath11k_dp_service_srng()
842 ath11k_dp_process_reo_status(ab); in ath11k_dp_service_srng()
844 for (i = 0; i < ab->num_radios; i++) { in ath11k_dp_service_srng()
845 for (j = 0; j < ab->hw_params.num_rxdma_per_pdev; j++) { in ath11k_dp_service_srng()
846 int id = i * ab->hw_params.num_rxdma_per_pdev + j; in ath11k_dp_service_srng()
848 if (ab->hw_params.ring_mask->rxdma2host[grp_id] & BIT(id)) { in ath11k_dp_service_srng()
849 work_done = ath11k_dp_process_rxdma_err(ab, id, budget); in ath11k_dp_service_srng()
857 if (ab->hw_params.ring_mask->host2rxdma[grp_id] & BIT(id)) { in ath11k_dp_service_srng()
858 struct ath11k *ar = ath11k_ab_to_ar(ab, id); in ath11k_dp_service_srng()
862 hal_params = ab->hw_params.hal_params; in ath11k_dp_service_srng()
863 ath11k_dp_rxbufs_replenish(ab, id, rx_ring, 0, in ath11k_dp_service_srng()
875 void ath11k_dp_pdev_free(struct ath11k_base *ab) in ath11k_dp_pdev_free() argument
880 timer_delete_sync(&ab->mon_reap_timer); in ath11k_dp_pdev_free()
882 for (i = 0; i < ab->num_radios; i++) { in ath11k_dp_pdev_free()
883 ar = ab->pdevs[i].ar; in ath11k_dp_pdev_free()
884 ath11k_dp_rx_pdev_free(ab, i); in ath11k_dp_pdev_free()
890 void ath11k_dp_pdev_pre_alloc(struct ath11k_base *ab) in ath11k_dp_pdev_pre_alloc() argument
897 for (i = 0; i < ab->num_radios; i++) { in ath11k_dp_pdev_pre_alloc()
898 ar = ab->pdevs[i].ar; in ath11k_dp_pdev_pre_alloc()
905 for (j = 0; j < ab->hw_params.num_rxdma_per_pdev; j++) { in ath11k_dp_pdev_pre_alloc()
914 int ath11k_dp_pdev_alloc(struct ath11k_base *ab) in ath11k_dp_pdev_alloc() argument
921 for (i = 0; i < ab->num_radios; i++) { in ath11k_dp_pdev_alloc()
922 ar = ab->pdevs[i].ar; in ath11k_dp_pdev_alloc()
923 ret = ath11k_dp_rx_pdev_alloc(ab, i); in ath11k_dp_pdev_alloc()
925 ath11k_warn(ab, "failed to allocate pdev rx for pdev_id :%d\n", in ath11k_dp_pdev_alloc()
931 ath11k_warn(ab, "failed to initialize mon pdev %d\n", in ath11k_dp_pdev_alloc()
940 ath11k_dp_pdev_free(ab); in ath11k_dp_pdev_alloc()
960 status = ath11k_htc_connect_service(&dp->ab->htc, &conn_req, in ath11k_dp_htt_connect()
980 if (arvif->ar->ab->hw_params.htt_peer_map_v2) { in ath11k_dp_update_vdev_search()
1015 struct ath11k_base *ab = ctx; in ath11k_dp_tx_pending_cleanup() local
1018 dma_unmap_single(ab->dev, ATH11K_SKB_CB(msdu)->paddr, msdu->len, in ath11k_dp_tx_pending_cleanup()
1026 void ath11k_dp_free(struct ath11k_base *ab) in ath11k_dp_free() argument
1028 struct ath11k_dp *dp = &ab->dp; in ath11k_dp_free()
1031 ath11k_dp_link_desc_cleanup(ab, dp->link_desc_banks, in ath11k_dp_free()
1034 ath11k_dp_srng_common_cleanup(ab); in ath11k_dp_free()
1036 ath11k_dp_reo_cmd_list_cleanup(ab); in ath11k_dp_free()
1038 for (i = 0; i < ab->hw_params.max_tx_ring; i++) { in ath11k_dp_free()
1041 ath11k_dp_tx_pending_cleanup, ab); in ath11k_dp_free()
1050 int ath11k_dp_alloc(struct ath11k_base *ab) in ath11k_dp_alloc() argument
1052 struct ath11k_dp *dp = &ab->dp; in ath11k_dp_alloc()
1059 dp->ab = ab; in ath11k_dp_alloc()
1068 ret = ath11k_wbm_idle_ring_setup(ab, &n_link_desc); in ath11k_dp_alloc()
1070 ath11k_warn(ab, "failed to setup wbm_idle_ring: %d\n", ret); in ath11k_dp_alloc()
1074 srng = &ab->hal.srng_list[dp->wbm_idle_ring.ring_id]; in ath11k_dp_alloc()
1076 ret = ath11k_dp_link_desc_setup(ab, dp->link_desc_banks, in ath11k_dp_alloc()
1079 ath11k_warn(ab, "failed to setup link desc: %d\n", ret); in ath11k_dp_alloc()
1083 ret = ath11k_dp_srng_common_setup(ab); in ath11k_dp_alloc()
1089 for (i = 0; i < ab->hw_params.max_tx_ring; i++) { in ath11k_dp_alloc()
1104 ath11k_hal_tx_set_dscp_tid_map(ab, i); in ath11k_dp_alloc()
1111 ath11k_dp_srng_common_cleanup(ab); in ath11k_dp_alloc()
1114 ath11k_dp_link_desc_cleanup(ab, dp->link_desc_banks, in ath11k_dp_alloc()
1125 struct ath11k_base *ab = update_timer->ab; in ath11k_dp_shadow_timer_handler() local
1126 struct hal_srng *srng = &ab->hal.srng_list[update_timer->ring_id]; in ath11k_dp_shadow_timer_handler()
1141 ath11k_hal_srng_shadow_update_hp_tp(ab, srng); in ath11k_dp_shadow_timer_handler()
1147 void ath11k_dp_shadow_start_timer(struct ath11k_base *ab, in ath11k_dp_shadow_start_timer() argument
1153 if (!ab->hw_params.supports_shadow_regs) in ath11k_dp_shadow_start_timer()
1167 void ath11k_dp_shadow_stop_timer(struct ath11k_base *ab, in ath11k_dp_shadow_stop_timer() argument
1170 if (!ab->hw_params.supports_shadow_regs) in ath11k_dp_shadow_stop_timer()
1179 void ath11k_dp_shadow_init_timer(struct ath11k_base *ab, in ath11k_dp_shadow_init_timer() argument
1183 if (!ab->hw_params.supports_shadow_regs) in ath11k_dp_shadow_init_timer()
1188 update_timer->ab = ab; in ath11k_dp_shadow_init_timer()