Lines Matching refs:ab
142 ath11k_wmi_tlv_iter(struct ath11k_base *ab, const void *ptr, size_t len, in ath11k_wmi_tlv_iter() argument
143 int (*iter)(struct ath11k_base *ab, u16 tag, u16 len, in ath11k_wmi_tlv_iter() argument
154 ath11k_err(ab, "wmi tlv parse failure at byte %zd (%zu bytes left, %zu expected)\n", in ath11k_wmi_tlv_iter()
166 ath11k_err(ab, "wmi tlv parse failure of tag %hhu at byte %zd (%zu bytes left, %hhu expected)\n", in ath11k_wmi_tlv_iter()
174 …ath11k_err(ab, "wmi tlv parse failure of tag %hhu at byte %zd (%hhu bytes is less than min length … in ath11k_wmi_tlv_iter()
180 ret = iter(ab, tlv_tag, tlv_len, ptr, data); in ath11k_wmi_tlv_iter()
191 static int ath11k_wmi_tlv_iter_parse(struct ath11k_base *ab, u16 tag, u16 len, in ath11k_wmi_tlv_iter_parse() argument
210 ath11k_wmi_tlv_parse_alloc(struct ath11k_base *ab, const void *ptr, in ath11k_wmi_tlv_parse_alloc() argument
220 ret = ath11k_wmi_tlv_parse(ab, tb, ptr, len); in ath11k_wmi_tlv_parse_alloc()
233 struct ath11k_base *ab = wmi->wmi_ab->ab; in ath11k_wmi_cmd_send_nowait() local
247 ret = ath11k_htc_send(&ab->htc, wmi->eid, skb); in ath11k_wmi_cmd_send_nowait()
270 if (ret && test_bit(ATH11K_FLAG_CRASH_FLUSH, &wmi_sc->ab->dev_flags)) in ath11k_wmi_cmd_send()
277 ath11k_warn(wmi_sc->ab, "wmi command %d timeout\n", cmd_id); in ath11k_wmi_cmd_send()
448 static int ath11k_pull_service_ready_tlv(struct ath11k_base *ab, in ath11k_pull_service_ready_tlv() argument
455 ath11k_err(ab, "%s: failed by NULL param\n", in ath11k_pull_service_ready_tlv()
498 static int ath11k_wmi_tlv_svc_rdy_parse(struct ath11k_base *ab, u16 tag, u16 len, in ath11k_wmi_tlv_svc_rdy_parse() argument
502 struct ath11k_pdev_wmi *wmi_handle = &ab->wmi_ab.wmi[0]; in ath11k_wmi_tlv_svc_rdy_parse()
507 if (ath11k_pull_service_ready_tlv(ab, ptr, &ab->target_caps)) in ath11k_wmi_tlv_svc_rdy_parse()
515 ath11k_warn(ab, "invalid len %d for the tag 0x%x\n", in ath11k_wmi_tlv_svc_rdy_parse()
532 static int ath11k_service_ready_event(struct ath11k_base *ab, struct sk_buff *skb) in ath11k_service_ready_event() argument
537 ret = ath11k_wmi_tlv_iter(ab, skb->data, skb->len, in ath11k_service_ready_event()
541 ath11k_warn(ab, "failed to parse tlv %d\n", ret); in ath11k_service_ready_event()
551 struct ath11k_base *ab = wmi_sc->ab; in ath11k_wmi_alloc_skb() local
554 skb = ath11k_htc_alloc_skb(ab, WMI_SKB_HEADROOM + round_len); in ath11k_wmi_alloc_skb()
560 ath11k_warn(ab, "unaligned WMI skb data\n"); in ath11k_wmi_alloc_skb()
609 ath11k_warn(ar->ab, in ath11k_wmi_mgmt_send()
681 ath11k_warn(ar->ab, in ath11k_wmi_vdev_create()
686 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_vdev_create()
712 ath11k_warn(ar->ab, "failed to submit WMI_VDEV_DELETE_CMDID\n"); in ath11k_wmi_vdev_delete()
716 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, "WMI vdev delete id %d\n", vdev_id); in ath11k_wmi_vdev_delete()
740 ath11k_warn(ar->ab, "failed to submit WMI_VDEV_STOP cmd\n"); in ath11k_wmi_vdev_stop()
744 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, "WMI vdev stop id 0x%x\n", vdev_id); in ath11k_wmi_vdev_stop()
768 ath11k_warn(ar->ab, "failed to submit WMI_VDEV_DOWN cmd\n"); in ath11k_wmi_vdev_down()
772 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, "WMI vdev down id 0x%x\n", vdev_id); in ath11k_wmi_vdev_down()
893 ath11k_warn(ar->ab, "failed to submit vdev_%s cmd\n", in ath11k_wmi_vdev_start()
898 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, "vdev %s id 0x%x freq 0x%x mode 0x%x\n", in ath11k_wmi_vdev_start()
927 ath11k_warn(ar->ab, "failed to submit WMI_VDEV_UP cmd\n"); in ath11k_wmi_vdev_up()
931 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_vdev_up()
960 ath11k_warn(ar->ab, "failed to submit WMI_PEER_CREATE cmd\n"); in ath11k_wmi_send_peer_create_cmd()
964 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_send_peer_create_cmd()
990 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_send_peer_delete_cmd()
996 ath11k_warn(ar->ab, "failed to send WMI_PEER_DELETE cmd\n"); in ath11k_wmi_send_peer_delete_cmd()
1028 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_send_pdev_set_regdomain()
1035 ath11k_warn(ar->ab, in ath11k_wmi_send_pdev_set_regdomain()
1065 ath11k_warn(ar->ab, "failed to send WMI_PEER_SET_PARAM cmd\n"); in ath11k_wmi_set_peer_param()
1069 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_set_peer_param()
1099 ath11k_warn(ar->ab, in ath11k_wmi_send_peer_flush_tids_cmd()
1104 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_send_peer_flush_tids_cmd()
1142 ath11k_warn(ar->ab, in ath11k_wmi_peer_rx_reorder_queue_setup()
1147 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_peer_rx_reorder_queue_setup()
1176 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_rx_reord_queue_remove()
1183 ath11k_warn(ar->ab, in ath11k_wmi_rx_reord_queue_remove()
1212 ath11k_warn(ar->ab, "failed to send WMI_PDEV_SET_PARAM cmd\n"); in ath11k_wmi_pdev_set_param()
1216 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_pdev_set_param()
1242 ath11k_warn(ar->ab, "failed to send WMI_PDEV_SET_PARAM cmd\n"); in ath11k_wmi_pdev_set_ps_mode()
1246 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_pdev_set_ps_mode()
1275 ath11k_warn(ar->ab, "failed to send WMI_PDEV_SUSPEND cmd\n"); in ath11k_wmi_pdev_suspend()
1279 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_pdev_suspend()
1302 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_pdev_resume()
1307 ath11k_warn(ar->ab, "failed to send WMI_PDEV_RESUME cmd\n"); in ath11k_wmi_pdev_resume()
1338 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_pdev_bss_chan_info_request()
1344 ath11k_warn(ar->ab, in ath11k_wmi_pdev_bss_chan_info_request()
1375 ath11k_warn(ar->ab, in ath11k_wmi_send_set_ap_ps_param_cmd()
1380 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_send_set_ap_ps_param_cmd()
1408 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_set_sta_ps_param()
1414 ath11k_warn(ar->ab, "failed to send WMI_STA_POWERSAVE_PARAM_CMDID"); in ath11k_wmi_set_sta_ps_param()
1444 ath11k_warn(ar->ab, "Failed to send WMI_FORCE_FW_HANG_CMDID"); in ath11k_wmi_force_fw_hang_cmd()
1472 ath11k_warn(ar->ab, in ath11k_wmi_vdev_set_param_cmd()
1477 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_vdev_set_param_cmd()
1506 ath11k_warn(ar->ab, "failed to send WMI_REQUEST_STATS cmd\n"); in ath11k_wmi_send_stats_request_cmd()
1510 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_send_stats_request_cmd()
1535 ath11k_warn(ar->ab, "failed to send WMI_PDEV_GET_TEMPERATURE cmd\n"); in ath11k_wmi_send_pdev_temperature_cmd()
1539 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_send_pdev_temperature_cmd()
1565 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_send_bcn_offload_control_cmd()
1571 ath11k_warn(ar->ab, in ath11k_wmi_send_bcn_offload_control_cmd()
1626 ath11k_warn(ar->ab, "failed to send WMI_BCN_TMPL_CMDID\n"); in ath11k_wmi_bcn_tmpl()
1673 ath11k_warn(ar->ab, in ath11k_wmi_vdev_install_key()
1678 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_vdev_install_key()
1905 ath11k_warn(ar->ab, in ath11k_wmi_send_peer_assoc_cmd()
1910 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_send_peer_assoc_cmd()
2206 ath11k_warn(ar->ab, "failed to send WMI_START_SCAN_CMDID\n"); in ath11k_wmi_send_scan_start_cmd()
2245 ath11k_warn(ar->ab, "invalid scan cancel param %d", in ath11k_wmi_send_scan_stop_cmd()
2254 ath11k_warn(ar->ab, "failed to send WMI_STOP_SCAN_CMDID\n"); in ath11k_wmi_send_scan_stop_cmd()
2301 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_send_scan_chan_list_cmd()
2356 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_send_scan_chan_list_cmd()
2367 ath11k_warn(ar->ab, "failed to send WMI_SCAN_CHAN_LIST cmd\n"); in ath11k_wmi_send_scan_chan_list_cmd()
2430 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_send_wmm_update_cmd_tlv()
2439 ath11k_warn(ar->ab, in ath11k_wmi_send_wmm_update_cmd_tlv()
2467 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_send_dfs_phyerr_offload_enable_cmd()
2473 ath11k_warn(ar->ab, in ath11k_wmi_send_dfs_phyerr_offload_enable_cmd()
2502 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_delba_send()
2509 ath11k_warn(ar->ab, in ath11k_wmi_delba_send()
2538 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_addba_set_resp()
2545 ath11k_warn(ar->ab, in ath11k_wmi_addba_set_resp()
2573 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_addba_send()
2580 ath11k_warn(ar->ab, in ath11k_wmi_addba_send()
2606 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_addba_clear_resp()
2613 ath11k_warn(ar->ab, in ath11k_wmi_addba_clear_resp()
2662 ath11k_warn(ar->ab, "failed to send WMI_PDEV_PKTLOG_ENABLE_CMDID\n"); in ath11k_wmi_pdev_peer_pktlog_filter()
2714 ath11k_warn(ar->ab, in ath11k_wmi_send_init_country_cmd()
2775 ath11k_warn(ar->ab, "failed to send THERM_THROT_SET_CONF cmd\n"); in ath11k_wmi_send_thermal_mitigation_param_cmd()
2779 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_send_thermal_mitigation_param_cmd()
2810 ath11k_warn(ar->ab, "failed to send WMI_PDEV_PKTLOG_ENABLE_CMDID\n"); in ath11k_wmi_pdev_pktlog_enable()
2838 ath11k_warn(ar->ab, "failed to send WMI_PDEV_PKTLOG_ENABLE_CMDID\n"); in ath11k_wmi_pdev_pktlog_disable()
2849 struct ath11k_base *ab = wmi->wmi_ab->ab; in ath11k_wmi_send_twt_enable_cmd() local
2890 ath11k_warn(ab, "Failed to send WMI_TWT_ENABLE_CMDID"); in ath11k_wmi_send_twt_enable_cmd()
2900 struct ath11k_base *ab = wmi->wmi_ab->ab; in ath11k_wmi_send_twt_disable_cmd() local
2919 ath11k_warn(ab, "Failed to send WMI_TWT_DISABLE_CMDID"); in ath11k_wmi_send_twt_disable_cmd()
2930 struct ath11k_base *ab = wmi->wmi_ab->ab; in ath11k_wmi_send_obss_spr_cmd() local
2953 ath11k_warn(ab, in ath11k_wmi_send_obss_spr_cmd()
2966 struct ath11k_base *ab = wmi->wmi_ab->ab; in ath11k_wmi_send_obss_color_collision_cfg_cmd() local
2990 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_send_obss_color_collision_cfg_cmd()
2998 ath11k_warn(ab, "Failed to send WMI_OBSS_COLOR_COLLISION_DET_CONFIG_CMDID"); in ath11k_wmi_send_obss_color_collision_cfg_cmd()
3008 struct ath11k_base *ab = wmi->wmi_ab->ab; in ath11k_wmi_send_bss_color_change_enable_cmd() local
3025 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_send_bss_color_change_enable_cmd()
3032 ath11k_warn(ab, "Failed to send WMI_BSS_COLOR_CHANGE_ENABLE_CMDID"); in ath11k_wmi_send_bss_color_change_enable_cmd()
3137 struct ath11k_base *ab = wmi->wmi_ab->ab; in ath11k_init_cmd_send() local
3188 ath11k_dbg(ab, ATH11K_DBG_WMI, in ath11k_init_cmd_send()
3241 ath11k_warn(ab, "failed to send WMI_INIT_CMDID\n"); in ath11k_init_cmd_send()
3270 ath11k_warn(ar->ab, in ath11k_wmi_pdev_lro_cfg()
3275 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_pdev_lro_cfg()
3283 int ath11k_wmi_wait_for_service_ready(struct ath11k_base *ab) in ath11k_wmi_wait_for_service_ready() argument
3287 time_left = wait_for_completion_timeout(&ab->wmi_ab.service_ready, in ath11k_wmi_wait_for_service_ready()
3295 int ath11k_wmi_wait_for_unified_ready(struct ath11k_base *ab) in ath11k_wmi_wait_for_unified_ready() argument
3299 time_left = wait_for_completion_timeout(&ab->wmi_ab.unified_ready, in ath11k_wmi_wait_for_unified_ready()
3307 int ath11k_wmi_cmd_init(struct ath11k_base *ab) in ath11k_wmi_cmd_init() argument
3309 struct ath11k_wmi_base *wmi_sc = &ab->wmi_ab; in ath11k_wmi_cmd_init()
3316 ab->hw_params.hw_ops->wmi_init_config(ab, &config); in ath11k_wmi_cmd_init()
3328 if (ab->hw_params.needs_band_to_mac) { in ath11k_wmi_cmd_init()
3329 init_param.num_band_to_mac = ab->num_radios; in ath11k_wmi_cmd_init()
3330 ath11k_fill_band_to_mac_param(ab, init_param.band_to_mac); in ath11k_wmi_cmd_init()
3357 ath11k_warn(ar->ab, in ath11k_wmi_vdev_spectral_conf()
3362 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_vdev_spectral_conf()
3395 ath11k_warn(ar->ab, in ath11k_wmi_vdev_spectral_enable()
3400 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_vdev_spectral_enable()
3441 ath11k_warn(ar->ab, in ath11k_wmi_pdev_dma_ring_cfg()
3446 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_pdev_dma_ring_cfg()
3488 static int ath11k_wmi_tlv_dma_buf_parse(struct ath11k_base *ab, in ath11k_wmi_tlv_dma_buf_parse() argument
3506 ret = ath11k_wmi_tlv_iter(ab, ptr, len, in ath11k_wmi_tlv_dma_buf_parse()
3510 ath11k_warn(ab, "failed to parse dma buf entry tlv %d\n", in ath11k_wmi_tlv_dma_buf_parse()
3520 ret = ath11k_wmi_tlv_iter(ab, ptr, len, in ath11k_wmi_tlv_dma_buf_parse()
3524 ath11k_warn(ab, "failed to parse dma buf meta tlv %d\n", in ath11k_wmi_tlv_dma_buf_parse()
3538 static void ath11k_wmi_pdev_dma_ring_buf_release_event(struct ath11k_base *ab, in ath11k_wmi_pdev_dma_ring_buf_release_event() argument
3545 ret = ath11k_wmi_tlv_iter(ab, skb->data, skb->len, in ath11k_wmi_pdev_dma_ring_buf_release_event()
3549 ath11k_warn(ab, "failed to parse dma buf release tlv %d\n", ret); in ath11k_wmi_pdev_dma_ring_buf_release_event()
3559 ret = ath11k_dbring_buffer_release_event(ab, ¶m); in ath11k_wmi_pdev_dma_ring_buf_release_event()
3561 ath11k_warn(ab, "failed to handle dma buf release event %d\n", ret); in ath11k_wmi_pdev_dma_ring_buf_release_event()
3778 static int ath11k_wmi_alloc_dbring_caps(struct ath11k_base *ab, in ath11k_wmi_alloc_dbring_caps() argument
3789 ab->db_caps = ptr; in ath11k_wmi_alloc_dbring_caps()
3790 ab->num_db_cap = num_cap; in ath11k_wmi_alloc_dbring_caps()
3795 static void ath11k_wmi_free_dbring_caps(struct ath11k_base *ab) in ath11k_wmi_free_dbring_caps() argument
3797 kfree(ab->db_caps); in ath11k_wmi_free_dbring_caps()
3798 ab->db_caps = NULL; in ath11k_wmi_free_dbring_caps()
3801 static int ath11k_wmi_tlv_dma_ring_caps(struct ath11k_base *ab, in ath11k_wmi_tlv_dma_ring_caps() argument
3812 ret = ath11k_wmi_tlv_iter(ab, ptr, len, in ath11k_wmi_tlv_dma_ring_caps()
3816 ath11k_warn(ab, "failed to parse dma ring caps tlv %d\n", ret); in ath11k_wmi_tlv_dma_ring_caps()
3823 if (ab->num_db_cap) { in ath11k_wmi_tlv_dma_ring_caps()
3824 ath11k_warn(ab, "Already processed, so ignoring dma ring caps\n"); in ath11k_wmi_tlv_dma_ring_caps()
3828 ret = ath11k_wmi_alloc_dbring_caps(ab, dma_caps_parse->n_dma_ring_caps); in ath11k_wmi_tlv_dma_ring_caps()
3832 dir_buff_caps = ab->db_caps; in ath11k_wmi_tlv_dma_ring_caps()
3835 ath11k_warn(ab, "Invalid module id %d\n", dma_caps[i].module_id); in ath11k_wmi_tlv_dma_ring_caps()
3850 ath11k_wmi_free_dbring_caps(ab); in ath11k_wmi_tlv_dma_ring_caps()
3854 static int ath11k_wmi_tlv_svc_rdy_ext_parse(struct ath11k_base *ab, in ath11k_wmi_tlv_svc_rdy_ext_parse() argument
3858 struct ath11k_pdev_wmi *wmi_handle = &ab->wmi_ab.wmi[0]; in ath11k_wmi_tlv_svc_rdy_ext_parse()
3867 ath11k_warn(ab, "unable to extract ext params\n"); in ath11k_wmi_tlv_svc_rdy_ext_parse()
3878 ret = ath11k_wmi_tlv_ext_soc_hal_reg_caps_parse(ab, len, ptr, in ath11k_wmi_tlv_svc_rdy_ext_parse()
3886 ret = ath11k_wmi_tlv_hw_mode_caps(ab, len, ptr, in ath11k_wmi_tlv_svc_rdy_ext_parse()
3894 ret = ath11k_wmi_tlv_iter(ab, ptr, len, in ath11k_wmi_tlv_svc_rdy_ext_parse()
3898 ath11k_warn(ab, "failed to parse tlv %d\n", ret); in ath11k_wmi_tlv_svc_rdy_ext_parse()
3904 ret = ath11k_wmi_tlv_ext_hal_reg_caps(ab, len, ptr, in ath11k_wmi_tlv_svc_rdy_ext_parse()
3917 ret = ath11k_wmi_tlv_dma_ring_caps(ab, len, ptr, in ath11k_wmi_tlv_svc_rdy_ext_parse()
3932 static int ath11k_service_ready_ext_event(struct ath11k_base *ab, in ath11k_service_ready_ext_event() argument
3938 ret = ath11k_wmi_tlv_iter(ab, skb->data, skb->len, in ath11k_service_ready_ext_event()
3942 ath11k_warn(ab, "failed to parse tlv %d\n", ret); in ath11k_service_ready_ext_event()
3946 if (!test_bit(WMI_TLV_SERVICE_EXT2_MSG, ab->wmi_ab.svc_map)) in ath11k_service_ready_ext_event()
3947 complete(&ab->wmi_ab.service_ready); in ath11k_service_ready_ext_event()
3953 ath11k_wmi_free_dbring_caps(ab); in ath11k_service_ready_ext_event()
3957 static int ath11k_wmi_tlv_svc_rdy_ext2_parse(struct ath11k_base *ab, in ath11k_wmi_tlv_svc_rdy_ext2_parse() argument
3967 ret = ath11k_wmi_tlv_dma_ring_caps(ab, len, ptr, in ath11k_wmi_tlv_svc_rdy_ext2_parse()
3982 static int ath11k_service_ready_ext2_event(struct ath11k_base *ab, in ath11k_service_ready_ext2_event() argument
3988 ret = ath11k_wmi_tlv_iter(ab, skb->data, skb->len, in ath11k_service_ready_ext2_event()
3992 ath11k_warn(ab, "failed to parse ext2 event tlv %d\n", ret); in ath11k_service_ready_ext2_event()
3996 complete(&ab->wmi_ab.service_ready); in ath11k_service_ready_ext2_event()
4001 ath11k_wmi_free_dbring_caps(ab); in ath11k_service_ready_ext2_event()
4005 static int ath11k_pull_vdev_start_resp_tlv(struct ath11k_base *ab, struct sk_buff *skb, in ath11k_pull_vdev_start_resp_tlv() argument
4012 tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC); in ath11k_pull_vdev_start_resp_tlv()
4015 ath11k_warn(ab, "failed to parse tlv: %d\n", ret); in ath11k_pull_vdev_start_resp_tlv()
4021 ath11k_warn(ab, "failed to fetch vdev start resp ev"); in ath11k_pull_vdev_start_resp_tlv()
4079 static int ath11k_pull_reg_chan_list_update_ev(struct ath11k_base *ab, in ath11k_pull_reg_chan_list_update_ev() argument
4089 ath11k_dbg(ab, ATH11K_DBG_WMI, "processing regulatory channel list\n"); in ath11k_pull_reg_chan_list_update_ev()
4091 tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC); in ath11k_pull_reg_chan_list_update_ev()
4094 ath11k_warn(ab, "failed to parse tlv: %d\n", ret); in ath11k_pull_reg_chan_list_update_ev()
4100 ath11k_warn(ab, "failed to fetch reg chan list update ev\n"); in ath11k_pull_reg_chan_list_update_ev()
4109 ath11k_warn(ab, "No regulatory rules available in the event info\n"); in ath11k_pull_reg_chan_list_update_ev()
4143 ath11k_dbg(ab, ATH11K_DBG_WMI, in ath11k_pull_reg_chan_list_update_ev()
4149 ath11k_dbg(ab, ATH11K_DBG_WMI, in ath11k_pull_reg_chan_list_update_ev()
4163 ath11k_warn(ab, "Unable to Allocate memory for 2g rules\n"); in ath11k_pull_reg_chan_list_update_ev()
4174 ath11k_warn(ab, "Unable to Allocate memory for 5g rules\n"); in ath11k_pull_reg_chan_list_update_ev()
4179 ath11k_dbg(ab, ATH11K_DBG_WMI, "processed regulatory channel list\n"); in ath11k_pull_reg_chan_list_update_ev()
4185 static int ath11k_pull_peer_del_resp_ev(struct ath11k_base *ab, struct sk_buff *skb, in ath11k_pull_peer_del_resp_ev() argument
4192 tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC); in ath11k_pull_peer_del_resp_ev()
4195 ath11k_warn(ab, "failed to parse tlv: %d\n", ret); in ath11k_pull_peer_del_resp_ev()
4201 ath11k_warn(ab, "failed to fetch peer delete resp ev"); in ath11k_pull_peer_del_resp_ev()
4216 static int ath11k_pull_bcn_tx_status_ev(struct ath11k_base *ab, void *evt_buf, in ath11k_pull_bcn_tx_status_ev() argument
4224 tb = ath11k_wmi_tlv_parse_alloc(ab, evt_buf, len, GFP_ATOMIC); in ath11k_pull_bcn_tx_status_ev()
4227 ath11k_warn(ab, "failed to parse tlv: %d\n", ret); in ath11k_pull_bcn_tx_status_ev()
4233 ath11k_warn(ab, "failed to fetch bcn tx status ev"); in ath11k_pull_bcn_tx_status_ev()
4245 static int ath11k_pull_vdev_stopped_param_tlv(struct ath11k_base *ab, struct sk_buff *skb, in ath11k_pull_vdev_stopped_param_tlv() argument
4252 tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC); in ath11k_pull_vdev_stopped_param_tlv()
4255 ath11k_warn(ab, "failed to parse tlv: %d\n", ret); in ath11k_pull_vdev_stopped_param_tlv()
4261 ath11k_warn(ab, "failed to fetch vdev stop ev"); in ath11k_pull_vdev_stopped_param_tlv()
4272 static int ath11k_pull_mgmt_rx_params_tlv(struct ath11k_base *ab, in ath11k_pull_mgmt_rx_params_tlv() argument
4281 tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC); in ath11k_pull_mgmt_rx_params_tlv()
4284 ath11k_warn(ab, "failed to parse tlv: %d\n", ret); in ath11k_pull_mgmt_rx_params_tlv()
4292 ath11k_warn(ab, "failed to fetch mgmt rx hdr"); in ath11k_pull_mgmt_rx_params_tlv()
4311 ath11k_warn(ab, "invalid length in mgmt rx hdr ev"); in ath11k_pull_mgmt_rx_params_tlv()
4339 ath11k_warn(ar->ab, "received mgmt tx compl for invalid msdu_id: %d\n", in wmi_process_mgmt_tx_comp()
4349 dma_unmap_single(ar->ab->dev, skb_cb->paddr, msdu->len, DMA_TO_DEVICE); in wmi_process_mgmt_tx_comp()
4364 static int ath11k_pull_mgmt_tx_compl_param_tlv(struct ath11k_base *ab, in ath11k_pull_mgmt_tx_compl_param_tlv() argument
4372 tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC); in ath11k_pull_mgmt_tx_compl_param_tlv()
4375 ath11k_warn(ab, "failed to parse tlv: %d\n", ret); in ath11k_pull_mgmt_tx_compl_param_tlv()
4381 ath11k_warn(ab, "failed to fetch mgmt tx compl ev"); in ath11k_pull_mgmt_tx_compl_param_tlv()
4402 ath11k_warn(ar->ab, "received scan started event in an invalid scan state: %s (%d)\n", in ath11k_wmi_event_scan_started()
4421 ath11k_warn(ar->ab, "received scan start failed event in an invalid scan state: %s (%d)\n", in ath11k_wmi_event_scan_start_failed()
4447 ath11k_warn(ar->ab, "received scan completed event in an invalid scan state: %s (%d)\n", in ath11k_wmi_event_scan_completed()
4465 ath11k_warn(ar->ab, "received scan bss chan event in an invalid scan state: %s (%d)\n", in ath11k_wmi_event_scan_bss_chan()
4483 ath11k_warn(ar->ab, "received scan foreign chan event in an invalid scan state: %s (%d)\n", in ath11k_wmi_event_scan_foreign_chan()
4536 static int ath11k_pull_scan_ev(struct ath11k_base *ab, struct sk_buff *skb, in ath11k_pull_scan_ev() argument
4543 tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC); in ath11k_pull_scan_ev()
4546 ath11k_warn(ab, "failed to parse tlv: %d\n", ret); in ath11k_pull_scan_ev()
4552 ath11k_warn(ab, "failed to fetch scan ev"); in ath11k_pull_scan_ev()
4569 static int ath11k_pull_peer_sta_kickout_ev(struct ath11k_base *ab, struct sk_buff *skb, in ath11k_pull_peer_sta_kickout_ev() argument
4576 tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC); in ath11k_pull_peer_sta_kickout_ev()
4579 ath11k_warn(ab, "failed to parse tlv: %d\n", ret); in ath11k_pull_peer_sta_kickout_ev()
4585 ath11k_warn(ab, "failed to fetch peer sta kickout ev"); in ath11k_pull_peer_sta_kickout_ev()
4596 static int ath11k_pull_roam_ev(struct ath11k_base *ab, struct sk_buff *skb, in ath11k_pull_roam_ev() argument
4603 tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC); in ath11k_pull_roam_ev()
4606 ath11k_warn(ab, "failed to parse tlv: %d\n", ret); in ath11k_pull_roam_ev()
4612 ath11k_warn(ab, "failed to fetch roam ev"); in ath11k_pull_roam_ev()
4644 static int ath11k_pull_chan_info_ev(struct ath11k_base *ab, u8 *evt_buf, in ath11k_pull_chan_info_ev() argument
4651 tb = ath11k_wmi_tlv_parse_alloc(ab, evt_buf, len, GFP_ATOMIC); in ath11k_pull_chan_info_ev()
4654 ath11k_warn(ab, "failed to parse tlv: %d\n", ret); in ath11k_pull_chan_info_ev()
4660 ath11k_warn(ab, "failed to fetch chan info ev"); in ath11k_pull_chan_info_ev()
4683 ath11k_pull_pdev_bss_chan_info_ev(struct ath11k_base *ab, struct sk_buff *skb, in ath11k_pull_pdev_bss_chan_info_ev() argument
4690 tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC); in ath11k_pull_pdev_bss_chan_info_ev()
4693 ath11k_warn(ab, "failed to parse tlv: %d\n", ret); in ath11k_pull_pdev_bss_chan_info_ev()
4699 ath11k_warn(ab, "failed to fetch pdev bss chan info ev"); in ath11k_pull_pdev_bss_chan_info_ev()
4723 ath11k_pull_vdev_install_key_compl_ev(struct ath11k_base *ab, struct sk_buff *skb, in ath11k_pull_vdev_install_key_compl_ev() argument
4730 tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC); in ath11k_pull_vdev_install_key_compl_ev()
4733 ath11k_warn(ab, "failed to parse tlv: %d\n", ret); in ath11k_pull_vdev_install_key_compl_ev()
4739 ath11k_warn(ab, "failed to fetch vdev install key compl ev"); in ath11k_pull_vdev_install_key_compl_ev()
4754 static int ath11k_pull_peer_assoc_conf_ev(struct ath11k_base *ab, struct sk_buff *skb, in ath11k_pull_peer_assoc_conf_ev() argument
4761 tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC); in ath11k_pull_peer_assoc_conf_ev()
4764 ath11k_warn(ab, "failed to parse tlv: %d\n", ret); in ath11k_pull_peer_assoc_conf_ev()
4770 ath11k_warn(ab, "failed to fetch peer assoc conf ev"); in ath11k_pull_peer_assoc_conf_ev()
4883 int ath11k_wmi_pull_fw_stats(struct ath11k_base *ab, struct sk_buff *skb, in ath11k_wmi_pull_fw_stats() argument
4892 tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, len, GFP_ATOMIC); in ath11k_wmi_pull_fw_stats()
4895 ath11k_warn(ab, "failed to parse tlv: %d\n", ret); in ath11k_wmi_pull_fw_stats()
4902 ath11k_warn(ab, "failed to fetch update stats ev"); in ath11k_wmi_pull_fw_stats()
4907 ath11k_dbg(ab, ATH11K_DBG_WMI, in ath11k_wmi_pull_fw_stats()
5237 ath11k_warn(ar->ab, "invalid vdev id %d in bcn stats", in ath11k_wmi_fw_bcn_stats_fill()
5276 ath11k_warn(ar->ab, "failed to get pdev stats\n"); in ath11k_wmi_fw_stats_fill()
5318 static void ath11k_wmi_op_ep_tx_credits(struct ath11k_base *ab) in ath11k_wmi_op_ep_tx_credits() argument
5321 wake_up(&ab->wmi_ab.tx_credits_wq); in ath11k_wmi_op_ep_tx_credits()
5324 static void ath11k_wmi_htc_tx_complete(struct ath11k_base *ab, in ath11k_wmi_htc_tx_complete() argument
5335 static int ath11k_reg_chan_list_event(struct ath11k_base *ab, struct sk_buff *skb) in ath11k_reg_chan_list_event() argument
5349 ret = ath11k_pull_reg_chan_list_update_ev(ab, skb, reg_info); in ath11k_reg_chan_list_event()
5351 ath11k_warn(ab, "failed to extract regulatory info from received event\n"); in ath11k_reg_chan_list_event()
5360 ath11k_warn(ab, "Failed to set the requested Country regulatory setting\n"); in ath11k_reg_chan_list_event()
5369 spin_lock(&ab->base_lock); in ath11k_reg_chan_list_event()
5370 if (test_bit(ATH11K_FLAG_RECOVERY, &ab->dev_flags) && in ath11k_reg_chan_list_event()
5371 ab->default_regd[pdev_idx]) { in ath11k_reg_chan_list_event()
5372 spin_unlock(&ab->base_lock); in ath11k_reg_chan_list_event()
5375 spin_unlock(&ab->base_lock); in ath11k_reg_chan_list_event()
5377 if (pdev_idx >= ab->num_radios) { in ath11k_reg_chan_list_event()
5382 if (ab->hw_params.single_pdev_only && in ath11k_reg_chan_list_event()
5383 pdev_idx < ab->hw_params.num_rxmda_per_pdev) in ath11k_reg_chan_list_event()
5392 if (ab->default_regd[pdev_idx] && !ab->new_regd[pdev_idx] && in ath11k_reg_chan_list_event()
5393 !memcmp((char *)ab->default_regd[pdev_idx]->alpha2, in ath11k_reg_chan_list_event()
5401 if (ab->default_regd[pdev_idx] && in ath11k_reg_chan_list_event()
5403 ab->default_regd[pdev_idx]->alpha2) && in ath11k_reg_chan_list_event()
5407 regd = ath11k_reg_build_regd(ab, reg_info, intersect); in ath11k_reg_chan_list_event()
5409 ath11k_warn(ab, "failed to build regd from reg_info\n"); in ath11k_reg_chan_list_event()
5413 spin_lock(&ab->base_lock); in ath11k_reg_chan_list_event()
5414 if (ab->default_regd[pdev_idx]) { in ath11k_reg_chan_list_event()
5422 ar = ab->pdevs[pdev_idx].ar; in ath11k_reg_chan_list_event()
5423 kfree(ab->new_regd[pdev_idx]); in ath11k_reg_chan_list_event()
5424 ab->new_regd[pdev_idx] = regd; in ath11k_reg_chan_list_event()
5425 queue_work(ab->workqueue, &ar->regd_update_work); in ath11k_reg_chan_list_event()
5430 ab->default_regd[pdev_idx] = regd; in ath11k_reg_chan_list_event()
5432 ab->dfs_region = reg_info->dfs_region; in ath11k_reg_chan_list_event()
5433 spin_unlock(&ab->base_lock); in ath11k_reg_chan_list_event()
5456 static int ath11k_wmi_tlv_rdy_parse(struct ath11k_base *ab, u16 tag, u16 len, in ath11k_wmi_tlv_rdy_parse() argument
5471 ab->wlan_init_status = fixed_param.ready_event_min.status; in ath11k_wmi_tlv_rdy_parse()
5475 ether_addr_copy(ab->mac_addr, in ath11k_wmi_tlv_rdy_parse()
5477 ab->pktlog_defs_checksum = fixed_param.pktlog_defs_checksum; in ath11k_wmi_tlv_rdy_parse()
5478 ab->wmi_ready = true; in ath11k_wmi_tlv_rdy_parse()
5484 if (!(ab->num_radios > 1 && num_mac_addr >= ab->num_radios)) in ath11k_wmi_tlv_rdy_parse()
5487 for (i = 0; i < ab->num_radios; i++) { in ath11k_wmi_tlv_rdy_parse()
5488 pdev = &ab->pdevs[i]; in ath11k_wmi_tlv_rdy_parse()
5491 ab->pdevs_macaddr_valid = true; in ath11k_wmi_tlv_rdy_parse()
5500 static int ath11k_ready_event(struct ath11k_base *ab, struct sk_buff *skb) in ath11k_ready_event() argument
5505 ret = ath11k_wmi_tlv_iter(ab, skb->data, skb->len, in ath11k_ready_event()
5508 ath11k_warn(ab, "failed to parse tlv %d\n", ret); in ath11k_ready_event()
5512 complete(&ab->wmi_ab.unified_ready); in ath11k_ready_event()
5516 static void ath11k_peer_delete_resp_event(struct ath11k_base *ab, struct sk_buff *skb) in ath11k_peer_delete_resp_event() argument
5521 if (ath11k_pull_peer_del_resp_ev(ab, skb, &peer_del_resp) != 0) { in ath11k_peer_delete_resp_event()
5522 ath11k_warn(ab, "failed to extract peer delete resp"); in ath11k_peer_delete_resp_event()
5527 ar = ath11k_mac_get_ar_by_vdev_id(ab, peer_del_resp.vdev_id); in ath11k_peer_delete_resp_event()
5529 ath11k_warn(ab, "invalid vdev id in peer delete resp ev %d", in ath11k_peer_delete_resp_event()
5537 ath11k_dbg(ab, ATH11K_DBG_WMI, "peer delete resp for vdev id %d addr %pM\n", in ath11k_peer_delete_resp_event()
5557 static void ath11k_vdev_start_resp_event(struct ath11k_base *ab, struct sk_buff *skb) in ath11k_vdev_start_resp_event() argument
5563 if (ath11k_pull_vdev_start_resp_tlv(ab, skb, &vdev_start_resp) != 0) { in ath11k_vdev_start_resp_event()
5564 ath11k_warn(ab, "failed to extract vdev start resp"); in ath11k_vdev_start_resp_event()
5569 ar = ath11k_mac_get_ar_by_vdev_id(ab, vdev_start_resp.vdev_id); in ath11k_vdev_start_resp_event()
5571 ath11k_warn(ab, "invalid vdev id in vdev start resp ev %d", in ath11k_vdev_start_resp_event()
5582 ath11k_warn(ab, "vdev start resp error status %d (%s)\n", in ath11k_vdev_start_resp_event()
5591 ath11k_dbg(ab, ATH11K_DBG_WMI, "vdev start resp for vdev id %d", in ath11k_vdev_start_resp_event()
5595 static void ath11k_bcn_tx_status_event(struct ath11k_base *ab, struct sk_buff *skb) in ath11k_bcn_tx_status_event() argument
5599 if (ath11k_pull_bcn_tx_status_ev(ab, skb->data, skb->len, in ath11k_bcn_tx_status_event()
5601 ath11k_warn(ab, "failed to extract bcn tx status"); in ath11k_bcn_tx_status_event()
5606 static void ath11k_vdev_stopped_event(struct ath11k_base *ab, struct sk_buff *skb) in ath11k_vdev_stopped_event() argument
5611 if (ath11k_pull_vdev_stopped_param_tlv(ab, skb, &vdev_id) != 0) { in ath11k_vdev_stopped_event()
5612 ath11k_warn(ab, "failed to extract vdev stopped event"); in ath11k_vdev_stopped_event()
5617 ar = ath11k_mac_get_ar_vdev_stop_status(ab, vdev_id); in ath11k_vdev_stopped_event()
5619 ath11k_warn(ab, "invalid vdev id in vdev stopped ev %d", in ath11k_vdev_stopped_event()
5629 ath11k_dbg(ab, ATH11K_DBG_WMI, "vdev stopped for vdev id %d", vdev_id); in ath11k_vdev_stopped_event()
5632 static void ath11k_mgmt_rx_event(struct ath11k_base *ab, struct sk_buff *skb) in ath11k_mgmt_rx_event() argument
5641 if (ath11k_pull_mgmt_rx_params_tlv(ab, skb, &rx_ev) != 0) { in ath11k_mgmt_rx_event()
5642 ath11k_warn(ab, "failed to extract mgmt rx event"); in ath11k_mgmt_rx_event()
5649 ath11k_dbg(ab, ATH11K_DBG_MGMT, "mgmt rx event status %08x\n", in ath11k_mgmt_rx_event()
5653 ar = ath11k_mac_get_ar_by_pdev_id(ab, rx_ev.pdev_id); in ath11k_mgmt_rx_event()
5656 ath11k_warn(ab, "invalid pdev_id %d in mgmt_rx_event\n", in ath11k_mgmt_rx_event()
5691 ath11k_dbg(ab, ATH11K_DBG_WMI, in ath11k_mgmt_rx_event()
5733 ath11k_dbg(ab, ATH11K_DBG_MGMT, in ath11k_mgmt_rx_event()
5738 ath11k_dbg(ab, ATH11K_DBG_MGMT, in ath11k_mgmt_rx_event()
5749 static void ath11k_mgmt_tx_compl_event(struct ath11k_base *ab, struct sk_buff *skb) in ath11k_mgmt_tx_compl_event() argument
5754 if (ath11k_pull_mgmt_tx_compl_param_tlv(ab, skb, &tx_compl_param) != 0) { in ath11k_mgmt_tx_compl_event()
5755 ath11k_warn(ab, "failed to extract mgmt tx compl event"); in ath11k_mgmt_tx_compl_event()
5760 ar = ath11k_mac_get_ar_by_pdev_id(ab, tx_compl_param.pdev_id); in ath11k_mgmt_tx_compl_event()
5762 ath11k_warn(ab, "invalid pdev id %d in mgmt_tx_compl_event\n", in ath11k_mgmt_tx_compl_event()
5770 ath11k_dbg(ab, ATH11K_DBG_MGMT, in ath11k_mgmt_tx_compl_event()
5779 static struct ath11k *ath11k_get_ar_on_scan_abort(struct ath11k_base *ab, in ath11k_get_ar_on_scan_abort() argument
5786 for (i = 0; i < ab->num_radios; i++) { in ath11k_get_ar_on_scan_abort()
5787 pdev = rcu_dereference(ab->pdevs_active[i]); in ath11k_get_ar_on_scan_abort()
5803 static void ath11k_scan_event(struct ath11k_base *ab, struct sk_buff *skb) in ath11k_scan_event() argument
5808 if (ath11k_pull_scan_ev(ab, skb, &scan_ev) != 0) { in ath11k_scan_event()
5809 ath11k_warn(ab, "failed to extract scan event"); in ath11k_scan_event()
5823 ar = ath11k_get_ar_on_scan_abort(ab, scan_ev.vdev_id); in ath11k_scan_event()
5825 ar = ath11k_mac_get_ar_by_vdev_id(ab, scan_ev.vdev_id); in ath11k_scan_event()
5828 ath11k_warn(ab, "Received scan event for unknown vdev"); in ath11k_scan_event()
5835 ath11k_dbg(ab, ATH11K_DBG_WMI, in ath11k_scan_event()
5856 ath11k_warn(ab, "received scan start failure event\n"); in ath11k_scan_event()
5874 static void ath11k_peer_sta_kickout_event(struct ath11k_base *ab, struct sk_buff *skb) in ath11k_peer_sta_kickout_event() argument
5881 if (ath11k_pull_peer_sta_kickout_ev(ab, skb, &arg) != 0) { in ath11k_peer_sta_kickout_event()
5882 ath11k_warn(ab, "failed to extract peer sta kickout event"); in ath11k_peer_sta_kickout_event()
5888 spin_lock_bh(&ab->base_lock); in ath11k_peer_sta_kickout_event()
5890 peer = ath11k_peer_find_by_addr(ab, arg.mac_addr); in ath11k_peer_sta_kickout_event()
5893 ath11k_warn(ab, "peer not found %pM\n", in ath11k_peer_sta_kickout_event()
5898 ar = ath11k_mac_get_ar_by_vdev_id(ab, peer->vdev_id); in ath11k_peer_sta_kickout_event()
5900 ath11k_warn(ab, "invalid vdev id in peer sta kickout ev %d", in ath11k_peer_sta_kickout_event()
5908 ath11k_warn(ab, "Spurious quick kickout for STA %pM\n", in ath11k_peer_sta_kickout_event()
5913 ath11k_dbg(ab, ATH11K_DBG_WMI, "peer sta kickout event %pM", in ath11k_peer_sta_kickout_event()
5919 spin_unlock_bh(&ab->base_lock); in ath11k_peer_sta_kickout_event()
5923 static void ath11k_roam_event(struct ath11k_base *ab, struct sk_buff *skb) in ath11k_roam_event() argument
5928 if (ath11k_pull_roam_ev(ab, skb, &roam_ev) != 0) { in ath11k_roam_event()
5929 ath11k_warn(ab, "failed to extract roam event"); in ath11k_roam_event()
5933 ath11k_dbg(ab, ATH11K_DBG_WMI, in ath11k_roam_event()
5938 ar = ath11k_mac_get_ar_by_vdev_id(ab, roam_ev.vdev_id); in ath11k_roam_event()
5940 ath11k_warn(ab, "invalid vdev id in roam ev %d", in ath11k_roam_event()
5947 ath11k_warn(ab, "ignoring unknown roam event reason %d on vdev %i\n", in ath11k_roam_event()
5961 ath11k_warn(ab, "ignoring not implemented roam event reason %d on vdev %i\n", in ath11k_roam_event()
5969 static void ath11k_chan_info_event(struct ath11k_base *ab, struct sk_buff *skb) in ath11k_chan_info_event() argument
5976 u32 cc_freq_hz = ab->cc_freq_hz; in ath11k_chan_info_event()
5978 if (ath11k_pull_chan_info_ev(ab, skb->data, skb->len, &ch_info_ev) != 0) { in ath11k_chan_info_event()
5979 ath11k_warn(ab, "failed to extract chan info event"); in ath11k_chan_info_event()
5983 ath11k_dbg(ab, ATH11K_DBG_WMI, in ath11k_chan_info_event()
5991 ath11k_dbg(ab, ATH11K_DBG_WMI, "chan info report completed\n"); in ath11k_chan_info_event()
5996 ar = ath11k_mac_get_ar_by_vdev_id(ab, ch_info_ev.vdev_id); in ath11k_chan_info_event()
5998 ath11k_warn(ab, "invalid vdev id in chan info ev %d", in ath11k_chan_info_event()
6008 ath11k_warn(ab, "received chan info event without a scan request, ignoring\n"); in ath11k_chan_info_event()
6017 ath11k_warn(ab, "chan info: invalid frequency %d (idx %d out of bounds)\n", in ath11k_chan_info_event()
6043 ath11k_pdev_bss_chan_info_event(struct ath11k_base *ab, struct sk_buff *skb) in ath11k_pdev_bss_chan_info_event() argument
6048 u32 cc_freq_hz = ab->cc_freq_hz; in ath11k_pdev_bss_chan_info_event()
6052 if (ath11k_pull_pdev_bss_chan_info_ev(ab, skb, &bss_ch_info_ev) != 0) { in ath11k_pdev_bss_chan_info_event()
6053 ath11k_warn(ab, "failed to extract pdev bss chan info event"); in ath11k_pdev_bss_chan_info_event()
6072 ath11k_dbg(ab, ATH11K_DBG_WMI, in ath11k_pdev_bss_chan_info_event()
6079 ar = ath11k_mac_get_ar_by_pdev_id(ab, bss_ch_info_ev.pdev_id); in ath11k_pdev_bss_chan_info_event()
6082 ath11k_warn(ab, "invalid pdev id %d in bss_chan_info event\n", in ath11k_pdev_bss_chan_info_event()
6091 ath11k_warn(ab, "bss chan info: invalid frequency %d (idx %d out of bounds)\n", in ath11k_pdev_bss_chan_info_event()
6115 static void ath11k_vdev_install_key_compl_event(struct ath11k_base *ab, in ath11k_vdev_install_key_compl_event() argument
6121 if (ath11k_pull_vdev_install_key_compl_ev(ab, skb, &install_key_compl) != 0) { in ath11k_vdev_install_key_compl_event()
6122 ath11k_warn(ab, "failed to extract install key compl event"); in ath11k_vdev_install_key_compl_event()
6126 ath11k_dbg(ab, ATH11K_DBG_WMI, in ath11k_vdev_install_key_compl_event()
6132 ar = ath11k_mac_get_ar_by_vdev_id(ab, install_key_compl.vdev_id); in ath11k_vdev_install_key_compl_event()
6134 ath11k_warn(ab, "invalid vdev id in install key compl ev %d", in ath11k_vdev_install_key_compl_event()
6143 ath11k_warn(ab, "install key failed for %pM status %d\n", in ath11k_vdev_install_key_compl_event()
6152 static void ath11k_service_available_event(struct ath11k_base *ab, struct sk_buff *skb) in ath11k_service_available_event() argument
6159 tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC); in ath11k_service_available_event()
6162 ath11k_warn(ab, "failed to parse tlv: %d\n", ret); in ath11k_service_available_event()
6168 ath11k_warn(ab, "failed to fetch svc available ev"); in ath11k_service_available_event()
6183 set_bit(j, ab->wmi_ab.svc_map); in ath11k_service_available_event()
6187 ath11k_dbg(ab, ATH11K_DBG_WMI, in ath11k_service_available_event()
6195 static void ath11k_peer_assoc_conf_event(struct ath11k_base *ab, struct sk_buff *skb) in ath11k_peer_assoc_conf_event() argument
6200 if (ath11k_pull_peer_assoc_conf_ev(ab, skb, &peer_assoc_conf) != 0) { in ath11k_peer_assoc_conf_event()
6201 ath11k_warn(ab, "failed to extract peer assoc conf event"); in ath11k_peer_assoc_conf_event()
6205 ath11k_dbg(ab, ATH11K_DBG_WMI, in ath11k_peer_assoc_conf_event()
6210 ar = ath11k_mac_get_ar_by_vdev_id(ab, peer_assoc_conf.vdev_id); in ath11k_peer_assoc_conf_event()
6213 ath11k_warn(ab, "invalid vdev id in peer assoc conf ev %d", in ath11k_peer_assoc_conf_event()
6223 static void ath11k_update_stats_event(struct ath11k_base *ab, struct sk_buff *skb) in ath11k_update_stats_event() argument
6225 ath11k_debugfs_fw_stats_process(ab, skb); in ath11k_update_stats_event()
6231 static void ath11k_pdev_ctl_failsafe_check_event(struct ath11k_base *ab, in ath11k_pdev_ctl_failsafe_check_event() argument
6238 tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC); in ath11k_pdev_ctl_failsafe_check_event()
6241 ath11k_warn(ab, "failed to parse tlv: %d\n", ret); in ath11k_pdev_ctl_failsafe_check_event()
6247 ath11k_warn(ab, "failed to fetch pdev ctl failsafe check ev"); in ath11k_pdev_ctl_failsafe_check_event()
6252 ath11k_dbg(ab, ATH11K_DBG_WMI, in ath11k_pdev_ctl_failsafe_check_event()
6260 ath11k_warn(ab, "pdev ctl failsafe failure status %d", in ath11k_pdev_ctl_failsafe_check_event()
6267 ath11k_wmi_process_csa_switch_count_event(struct ath11k_base *ab, in ath11k_wmi_process_csa_switch_count_event() argument
6280 arvif = ath11k_mac_get_arvif_by_vdev_id(ab, vdev_ids[i]); in ath11k_wmi_process_csa_switch_count_event()
6283 ath11k_warn(ab, "Recvd csa status for unknown vdev %d", in ath11k_wmi_process_csa_switch_count_event()
6295 ath11k_wmi_pdev_csa_switch_count_status_event(struct ath11k_base *ab, in ath11k_wmi_pdev_csa_switch_count_status_event() argument
6303 tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC); in ath11k_wmi_pdev_csa_switch_count_status_event()
6306 ath11k_warn(ab, "failed to parse tlv: %d\n", ret); in ath11k_wmi_pdev_csa_switch_count_status_event()
6314 ath11k_warn(ab, "failed to fetch pdev csa switch count ev"); in ath11k_wmi_pdev_csa_switch_count_status_event()
6319 ath11k_dbg(ab, ATH11K_DBG_WMI, in ath11k_wmi_pdev_csa_switch_count_status_event()
6324 ath11k_wmi_process_csa_switch_count_event(ab, ev, vdev_ids); in ath11k_wmi_pdev_csa_switch_count_status_event()
6330 ath11k_wmi_pdev_dfs_radar_detected_event(struct ath11k_base *ab, struct sk_buff *skb) in ath11k_wmi_pdev_dfs_radar_detected_event() argument
6337 tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC); in ath11k_wmi_pdev_dfs_radar_detected_event()
6340 ath11k_warn(ab, "failed to parse tlv: %d\n", ret); in ath11k_wmi_pdev_dfs_radar_detected_event()
6347 ath11k_warn(ab, "failed to fetch pdev dfs radar detected ev"); in ath11k_wmi_pdev_dfs_radar_detected_event()
6352 ath11k_dbg(ab, ATH11K_DBG_WMI, in ath11k_wmi_pdev_dfs_radar_detected_event()
6360 ar = ath11k_mac_get_ar_by_pdev_id(ab, ev->pdev_id); in ath11k_wmi_pdev_dfs_radar_detected_event()
6363 ath11k_warn(ab, "radar detected in invalid pdev %d\n", in ath11k_wmi_pdev_dfs_radar_detected_event()
6368 ath11k_dbg(ar->ab, ATH11K_DBG_REG, "DFS Radar Detected in pdev %d\n", in ath11k_wmi_pdev_dfs_radar_detected_event()
6372 ath11k_info(ab, "DFS Radar detected, but ignored as requested\n"); in ath11k_wmi_pdev_dfs_radar_detected_event()
6383 ath11k_wmi_pdev_temperature_event(struct ath11k_base *ab, in ath11k_wmi_pdev_temperature_event() argument
6391 tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC); in ath11k_wmi_pdev_temperature_event()
6394 ath11k_warn(ab, "failed to parse tlv: %d\n", ret); in ath11k_wmi_pdev_temperature_event()
6400 ath11k_warn(ab, "failed to fetch pdev temp ev"); in ath11k_wmi_pdev_temperature_event()
6405 ath11k_dbg(ab, ATH11K_DBG_WMI, in ath11k_wmi_pdev_temperature_event()
6410 ar = ath11k_mac_get_ar_by_pdev_id(ab, ev->pdev_id); in ath11k_wmi_pdev_temperature_event()
6412 ath11k_warn(ab, "invalid pdev id in pdev temperature ev %d", ev->pdev_id); in ath11k_wmi_pdev_temperature_event()
6424 static void ath11k_wmi_tlv_op_rx(struct ath11k_base *ab, struct sk_buff *skb) in ath11k_wmi_tlv_op_rx() argument
6438 ath11k_service_ready_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6441 ath11k_service_ready_ext_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6444 ath11k_service_ready_ext2_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6447 ath11k_reg_chan_list_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6450 ath11k_ready_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6453 ath11k_peer_delete_resp_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6456 ath11k_vdev_start_resp_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6459 ath11k_bcn_tx_status_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6462 ath11k_vdev_stopped_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6465 ath11k_mgmt_rx_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6469 ath11k_mgmt_tx_compl_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6472 ath11k_scan_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6475 ath11k_peer_sta_kickout_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6478 ath11k_roam_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6481 ath11k_chan_info_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6484 ath11k_pdev_bss_chan_info_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6487 ath11k_vdev_install_key_compl_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6490 ath11k_service_available_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6493 ath11k_peer_assoc_conf_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6496 ath11k_update_stats_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6499 ath11k_pdev_ctl_failsafe_check_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6502 ath11k_wmi_pdev_csa_switch_count_status_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6505 ath11k_wmi_pdev_temperature_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6508 ath11k_wmi_pdev_dma_ring_buf_release_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6517 ath11k_dbg(ab, ATH11K_DBG_WMI, in ath11k_wmi_tlv_op_rx()
6521 ath11k_wmi_pdev_dfs_radar_detected_event(ab, skb); in ath11k_wmi_tlv_op_rx()
6525 ath11k_dbg(ab, ATH11K_DBG_WMI, "Unknown eventid: 0x%x\n", id); in ath11k_wmi_tlv_op_rx()
6533 static int ath11k_connect_pdev_htc_service(struct ath11k_base *ab, in ath11k_connect_pdev_htc_service() argument
6555 status = ath11k_htc_connect_service(&ab->htc, &conn_req, &conn_resp); in ath11k_connect_pdev_htc_service()
6557 ath11k_warn(ab, "failed to connect to WMI CONTROL service status: %d\n", in ath11k_connect_pdev_htc_service()
6562 ab->wmi_ab.wmi_endpoint_id[pdev_idx] = conn_resp.eid; in ath11k_connect_pdev_htc_service()
6563 ab->wmi_ab.wmi[pdev_idx].eid = conn_resp.eid; in ath11k_connect_pdev_htc_service()
6564 ab->wmi_ab.max_msg_len[pdev_idx] = conn_resp.max_msg_len; in ath11k_connect_pdev_htc_service()
6615 ath11k_warn(ar->ab, "failed to send WMI_UNIT_TEST CMD :%d\n", in ath11k_wmi_send_unit_test_cmd()
6620 ath11k_dbg(ar->ab, ATH11K_DBG_WMI, in ath11k_wmi_send_unit_test_cmd()
6658 ath11k_dbg(ar->ab, ATH11K_DBG_REG, "Triggering Radar Simulation\n"); in ath11k_wmi_simulate_radar()
6663 int ath11k_wmi_connect(struct ath11k_base *ab) in ath11k_wmi_connect() argument
6668 wmi_ep_count = ab->htc.wmi_ep_count; in ath11k_wmi_connect()
6669 if (wmi_ep_count > ab->hw_params.max_radios) in ath11k_wmi_connect()
6673 ath11k_connect_pdev_htc_service(ab, i); in ath11k_wmi_connect()
6678 static void ath11k_wmi_pdev_detach(struct ath11k_base *ab, u8 pdev_id) in ath11k_wmi_pdev_detach() argument
6686 int ath11k_wmi_pdev_attach(struct ath11k_base *ab, in ath11k_wmi_pdev_attach() argument
6691 if (pdev_id >= ab->hw_params.max_radios) in ath11k_wmi_pdev_attach()
6694 wmi_handle = &ab->wmi_ab.wmi[pdev_id]; in ath11k_wmi_pdev_attach()
6696 wmi_handle->wmi_ab = &ab->wmi_ab; in ath11k_wmi_pdev_attach()
6698 ab->wmi_ab.ab = ab; in ath11k_wmi_pdev_attach()
6704 int ath11k_wmi_attach(struct ath11k_base *ab) in ath11k_wmi_attach() argument
6708 ret = ath11k_wmi_pdev_attach(ab, 0); in ath11k_wmi_attach()
6712 ab->wmi_ab.ab = ab; in ath11k_wmi_attach()
6713 ab->wmi_ab.preferred_hw_mode = WMI_HOST_HW_MODE_MAX; in ath11k_wmi_attach()
6716 if (ab->hw_params.single_pdev_only) in ath11k_wmi_attach()
6717 ab->wmi_ab.preferred_hw_mode = WMI_HOST_HW_MODE_SINGLE; in ath11k_wmi_attach()
6720 init_completion(&ab->wmi_ab.service_ready); in ath11k_wmi_attach()
6721 init_completion(&ab->wmi_ab.unified_ready); in ath11k_wmi_attach()
6726 void ath11k_wmi_detach(struct ath11k_base *ab) in ath11k_wmi_detach() argument
6732 for (i = 0; i < ab->htc.wmi_ep_count; i++) in ath11k_wmi_detach()
6733 ath11k_wmi_pdev_detach(ab, i); in ath11k_wmi_detach()
6735 ath11k_wmi_free_dbring_caps(ab); in ath11k_wmi_detach()