Lines Matching refs:ar

1582 int ath10k_wmi_wait_for_service_ready(struct ath10k *ar)  in ath10k_wmi_wait_for_service_ready()  argument
1586 time_left = wait_for_completion_timeout(&ar->wmi.service_ready, in ath10k_wmi_wait_for_service_ready()
1593 int ath10k_wmi_wait_for_unified_ready(struct ath10k *ar) in ath10k_wmi_wait_for_unified_ready() argument
1597 time_left = wait_for_completion_timeout(&ar->wmi.unified_ready, in ath10k_wmi_wait_for_unified_ready()
1604 struct sk_buff *ath10k_wmi_alloc_skb(struct ath10k *ar, u32 len) in ath10k_wmi_alloc_skb() argument
1609 skb = ath10k_htc_alloc_skb(ar, WMI_SKB_HEADROOM + round_len); in ath10k_wmi_alloc_skb()
1615 ath10k_warn(ar, "Unaligned WMI skb\n"); in ath10k_wmi_alloc_skb()
1623 static void ath10k_wmi_htc_tx_complete(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_htc_tx_complete() argument
1628 int ath10k_wmi_cmd_send_nowait(struct ath10k *ar, struct sk_buff *skb, in ath10k_wmi_cmd_send_nowait() argument
1645 ret = ath10k_htc_send(&ar->htc, ar->wmi.eid, skb); in ath10k_wmi_cmd_send_nowait()
1646 trace_ath10k_wmi_cmd(ar, cmd_id, skb->data, skb->len, ret); in ath10k_wmi_cmd_send_nowait()
1660 struct ath10k *ar = arvif->ar; in ath10k_wmi_tx_beacon_nowait() local
1665 spin_lock_bh(&ar->data_lock); in ath10k_wmi_tx_beacon_nowait()
1680 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_tx_beacon_nowait()
1682 ret = ath10k_wmi_beacon_send_ref_nowait(arvif->ar, in ath10k_wmi_tx_beacon_nowait()
1689 spin_lock_bh(&ar->data_lock); in ath10k_wmi_tx_beacon_nowait()
1698 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_tx_beacon_nowait()
1709 static void ath10k_wmi_tx_beacons_nowait(struct ath10k *ar) in ath10k_wmi_tx_beacons_nowait() argument
1711 ieee80211_iterate_active_interfaces_atomic(ar->hw, in ath10k_wmi_tx_beacons_nowait()
1717 static void ath10k_wmi_op_ep_tx_credits(struct ath10k *ar) in ath10k_wmi_op_ep_tx_credits() argument
1720 ath10k_wmi_tx_beacons_nowait(ar); in ath10k_wmi_op_ep_tx_credits()
1722 wake_up(&ar->wmi.tx_credits_wq); in ath10k_wmi_op_ep_tx_credits()
1725 int ath10k_wmi_cmd_send(struct ath10k *ar, struct sk_buff *skb, u32 cmd_id) in ath10k_wmi_cmd_send() argument
1732 ath10k_warn(ar, "wmi command %d is not supported by firmware\n", in ath10k_wmi_cmd_send()
1737 wait_event_timeout(ar->wmi.tx_credits_wq, ({ in ath10k_wmi_cmd_send()
1739 ath10k_wmi_tx_beacons_nowait(ar); in ath10k_wmi_cmd_send()
1741 ret = ath10k_wmi_cmd_send_nowait(ar, skb, cmd_id); in ath10k_wmi_cmd_send()
1743 if (ret && test_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags)) in ath10k_wmi_cmd_send()
1756 ath10k_wmi_op_gen_mgmt_tx(struct ath10k *ar, struct sk_buff *msdu) in ath10k_wmi_op_gen_mgmt_tx() argument
1783 skb = ath10k_wmi_alloc_skb(ar, len); in ath10k_wmi_op_gen_mgmt_tx()
1797 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi mgmt tx skb %p len %d ftype %02x stype %02x\n", in ath10k_wmi_op_gen_mgmt_tx()
1800 trace_ath10k_tx_hdr(ar, skb->data, skb->len); in ath10k_wmi_op_gen_mgmt_tx()
1801 trace_ath10k_tx_payload(ar, skb->data, skb->len); in ath10k_wmi_op_gen_mgmt_tx()
1806 static void ath10k_wmi_event_scan_started(struct ath10k *ar) in ath10k_wmi_event_scan_started() argument
1808 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_scan_started()
1810 switch (ar->scan.state) { in ath10k_wmi_event_scan_started()
1814 ath10k_warn(ar, "received scan started event in an invalid scan state: %s (%d)\n", in ath10k_wmi_event_scan_started()
1815 ath10k_scan_state_str(ar->scan.state), in ath10k_wmi_event_scan_started()
1816 ar->scan.state); in ath10k_wmi_event_scan_started()
1819 ar->scan.state = ATH10K_SCAN_RUNNING; in ath10k_wmi_event_scan_started()
1821 if (ar->scan.is_roc) in ath10k_wmi_event_scan_started()
1822 ieee80211_ready_on_channel(ar->hw); in ath10k_wmi_event_scan_started()
1824 complete(&ar->scan.started); in ath10k_wmi_event_scan_started()
1829 static void ath10k_wmi_event_scan_start_failed(struct ath10k *ar) in ath10k_wmi_event_scan_start_failed() argument
1831 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_scan_start_failed()
1833 switch (ar->scan.state) { in ath10k_wmi_event_scan_start_failed()
1837 ath10k_warn(ar, "received scan start failed event in an invalid scan state: %s (%d)\n", in ath10k_wmi_event_scan_start_failed()
1838 ath10k_scan_state_str(ar->scan.state), in ath10k_wmi_event_scan_start_failed()
1839 ar->scan.state); in ath10k_wmi_event_scan_start_failed()
1842 complete(&ar->scan.started); in ath10k_wmi_event_scan_start_failed()
1843 __ath10k_scan_finish(ar); in ath10k_wmi_event_scan_start_failed()
1848 static void ath10k_wmi_event_scan_completed(struct ath10k *ar) in ath10k_wmi_event_scan_completed() argument
1850 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_scan_completed()
1852 switch (ar->scan.state) { in ath10k_wmi_event_scan_completed()
1863 ath10k_warn(ar, "received scan completed event in an invalid scan state: %s (%d)\n", in ath10k_wmi_event_scan_completed()
1864 ath10k_scan_state_str(ar->scan.state), in ath10k_wmi_event_scan_completed()
1865 ar->scan.state); in ath10k_wmi_event_scan_completed()
1869 __ath10k_scan_finish(ar); in ath10k_wmi_event_scan_completed()
1874 static void ath10k_wmi_event_scan_bss_chan(struct ath10k *ar) in ath10k_wmi_event_scan_bss_chan() argument
1876 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_scan_bss_chan()
1878 switch (ar->scan.state) { in ath10k_wmi_event_scan_bss_chan()
1881 ath10k_warn(ar, "received scan bss chan event in an invalid scan state: %s (%d)\n", in ath10k_wmi_event_scan_bss_chan()
1882 ath10k_scan_state_str(ar->scan.state), in ath10k_wmi_event_scan_bss_chan()
1883 ar->scan.state); in ath10k_wmi_event_scan_bss_chan()
1887 ar->scan_channel = NULL; in ath10k_wmi_event_scan_bss_chan()
1892 static void ath10k_wmi_event_scan_foreign_chan(struct ath10k *ar, u32 freq) in ath10k_wmi_event_scan_foreign_chan() argument
1894 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_scan_foreign_chan()
1896 switch (ar->scan.state) { in ath10k_wmi_event_scan_foreign_chan()
1899 ath10k_warn(ar, "received scan foreign chan event in an invalid scan state: %s (%d)\n", in ath10k_wmi_event_scan_foreign_chan()
1900 ath10k_scan_state_str(ar->scan.state), in ath10k_wmi_event_scan_foreign_chan()
1901 ar->scan.state); in ath10k_wmi_event_scan_foreign_chan()
1905 ar->scan_channel = ieee80211_get_channel(ar->hw->wiphy, freq); in ath10k_wmi_event_scan_foreign_chan()
1907 if (ar->scan.is_roc && ar->scan.roc_freq == freq) in ath10k_wmi_event_scan_foreign_chan()
1908 complete(&ar->scan.on_channel); in ath10k_wmi_event_scan_foreign_chan()
1955 static int ath10k_wmi_op_pull_scan_ev(struct ath10k *ar, struct sk_buff *skb, in ath10k_wmi_op_pull_scan_ev() argument
1974 int ath10k_wmi_event_scan(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_scan() argument
1985 ret = ath10k_wmi_pull_scan(ar, skb, &arg); in ath10k_wmi_event_scan()
1987 ath10k_warn(ar, "failed to parse scan event: %d\n", ret); in ath10k_wmi_event_scan()
1998 spin_lock_bh(&ar->data_lock); in ath10k_wmi_event_scan()
2000 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_event_scan()
2004 ath10k_scan_state_str(ar->scan.state), ar->scan.state); in ath10k_wmi_event_scan()
2008 ath10k_wmi_event_scan_started(ar); in ath10k_wmi_event_scan()
2011 ath10k_wmi_event_scan_completed(ar); in ath10k_wmi_event_scan()
2014 ath10k_wmi_event_scan_bss_chan(ar); in ath10k_wmi_event_scan()
2017 ath10k_wmi_event_scan_foreign_chan(ar, freq); in ath10k_wmi_event_scan()
2020 ath10k_warn(ar, "received scan start failure event\n"); in ath10k_wmi_event_scan()
2021 ath10k_wmi_event_scan_start_failed(ar); in ath10k_wmi_event_scan()
2031 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_event_scan()
2066 static void ath10k_wmi_handle_wep_reauth(struct ath10k *ar, in ath10k_wmi_handle_wep_reauth() argument
2086 spin_lock_bh(&ar->data_lock); in ath10k_wmi_handle_wep_reauth()
2087 peer_key = ath10k_mac_is_peer_wep_key_set(ar, addr, keyidx); in ath10k_wmi_handle_wep_reauth()
2088 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_handle_wep_reauth()
2091 ath10k_dbg(ar, ATH10K_DBG_MAC, in ath10k_wmi_handle_wep_reauth()
2097 static int ath10k_wmi_op_pull_mgmt_rx_ev(struct ath10k *ar, struct sk_buff *skb, in ath10k_wmi_op_pull_mgmt_rx_ev() argument
2106 if (test_bit(ATH10K_FW_FEATURE_EXT_WMI_MGMT_RX, ar->fw_features)) { in ath10k_wmi_op_pull_mgmt_rx_ev()
2139 static int ath10k_wmi_10_4_op_pull_mgmt_rx_ev(struct ath10k *ar, in ath10k_wmi_10_4_op_pull_mgmt_rx_ev() argument
2173 int ath10k_wmi_event_mgmt_rx(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_mgmt_rx() argument
2188 ret = ath10k_wmi_pull_mgmt_rx(ar, skb, &arg); in ath10k_wmi_event_mgmt_rx()
2190 ath10k_warn(ar, "failed to parse mgmt rx event: %d\n", ret); in ath10k_wmi_event_mgmt_rx()
2204 ath10k_dbg(ar, ATH10K_DBG_MGMT, in ath10k_wmi_event_mgmt_rx()
2207 if (test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags)) { in ath10k_wmi_event_mgmt_rx()
2248 ath10k_dbg(ar, ATH10K_DBG_MGMT, "wmi mgmt rx 11b (CCK) on 5GHz\n"); in ath10k_wmi_event_mgmt_rx()
2250 sband = &ar->mac.sbands[status->band]; in ath10k_wmi_event_mgmt_rx()
2259 ath10k_wmi_handle_wep_reauth(ar, skb, status); in ath10k_wmi_event_mgmt_rx()
2279 ath10k_mac_handle_beacon(ar, skb); in ath10k_wmi_event_mgmt_rx()
2281 ath10k_dbg(ar, ATH10K_DBG_MGMT, in ath10k_wmi_event_mgmt_rx()
2286 ath10k_dbg(ar, ATH10K_DBG_MGMT, in ath10k_wmi_event_mgmt_rx()
2291 ieee80211_rx(ar->hw, skb); in ath10k_wmi_event_mgmt_rx()
2295 static int freq_to_idx(struct ath10k *ar, int freq) in freq_to_idx() argument
2301 sband = ar->hw->wiphy->bands[band]; in freq_to_idx()
2314 static int ath10k_wmi_op_pull_ch_info_ev(struct ath10k *ar, struct sk_buff *skb, in ath10k_wmi_op_pull_ch_info_ev() argument
2333 static int ath10k_wmi_10_4_op_pull_ch_info_ev(struct ath10k *ar, in ath10k_wmi_10_4_op_pull_ch_info_ev() argument
2356 void ath10k_wmi_event_chan_info(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_chan_info() argument
2363 ret = ath10k_wmi_pull_ch_info(ar, skb, &arg); in ath10k_wmi_event_chan_info()
2365 ath10k_warn(ar, "failed to parse chan info event: %d\n", ret); in ath10k_wmi_event_chan_info()
2376 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_event_chan_info()
2381 spin_lock_bh(&ar->data_lock); in ath10k_wmi_event_chan_info()
2383 switch (ar->scan.state) { in ath10k_wmi_event_chan_info()
2386 ath10k_warn(ar, "received chan info event without a scan request, ignoring\n"); in ath10k_wmi_event_chan_info()
2393 idx = freq_to_idx(ar, freq); in ath10k_wmi_event_chan_info()
2394 if (idx >= ARRAY_SIZE(ar->survey)) { in ath10k_wmi_event_chan_info()
2395 ath10k_warn(ar, "chan info: invalid frequency %d (idx %d out of bounds)\n", in ath10k_wmi_event_chan_info()
2401 if (ar->ch_info_can_report_survey) { in ath10k_wmi_event_chan_info()
2402 survey = &ar->survey[idx]; in ath10k_wmi_event_chan_info()
2406 ath10k_hw_fill_survey_time(ar, in ath10k_wmi_event_chan_info()
2410 ar->survey_last_cycle_count, in ath10k_wmi_event_chan_info()
2411 ar->survey_last_rx_clear_count); in ath10k_wmi_event_chan_info()
2414 ar->ch_info_can_report_survey = false; in ath10k_wmi_event_chan_info()
2416 ar->ch_info_can_report_survey = true; in ath10k_wmi_event_chan_info()
2420 ar->survey_last_rx_clear_count = rx_clear_count; in ath10k_wmi_event_chan_info()
2421 ar->survey_last_cycle_count = cycle_count; in ath10k_wmi_event_chan_info()
2425 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_event_chan_info()
2428 void ath10k_wmi_event_echo(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_echo() argument
2430 ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_ECHO_EVENTID\n"); in ath10k_wmi_event_echo()
2433 int ath10k_wmi_event_debug_mesg(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_debug_mesg() argument
2435 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi event debug mesg len %d\n", in ath10k_wmi_event_debug_mesg()
2438 trace_ath10k_wmi_dbglog(ar, skb->data, skb->len); in ath10k_wmi_event_debug_mesg()
2561 static int ath10k_wmi_main_op_pull_fw_stats(struct ath10k *ar, in ath10k_wmi_main_op_pull_fw_stats() argument
2616 static int ath10k_wmi_10x_op_pull_fw_stats(struct ath10k *ar, in ath10k_wmi_10x_op_pull_fw_stats() argument
2675 static int ath10k_wmi_10_2_op_pull_fw_stats(struct ath10k *ar, in ath10k_wmi_10_2_op_pull_fw_stats() argument
2754 static int ath10k_wmi_10_2_4_op_pull_fw_stats(struct ath10k *ar, in ath10k_wmi_10_2_4_op_pull_fw_stats() argument
2833 static int ath10k_wmi_10_4_op_pull_fw_stats(struct ath10k *ar, in ath10k_wmi_10_4_op_pull_fw_stats() argument
2913 void ath10k_wmi_event_update_stats(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_update_stats() argument
2915 ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_UPDATE_STATS_EVENTID\n"); in ath10k_wmi_event_update_stats()
2916 ath10k_debug_fw_stats_process(ar, skb); in ath10k_wmi_event_update_stats()
2920 ath10k_wmi_op_pull_vdev_start_ev(struct ath10k *ar, struct sk_buff *skb, in ath10k_wmi_op_pull_vdev_start_ev() argument
2937 void ath10k_wmi_event_vdev_start_resp(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_vdev_start_resp() argument
2942 ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_VDEV_START_RESP_EVENTID\n"); in ath10k_wmi_event_vdev_start_resp()
2944 ret = ath10k_wmi_pull_vdev_start(ar, skb, &arg); in ath10k_wmi_event_vdev_start_resp()
2946 ath10k_warn(ar, "failed to parse vdev start event: %d\n", ret); in ath10k_wmi_event_vdev_start_resp()
2953 complete(&ar->vdev_setup_done); in ath10k_wmi_event_vdev_start_resp()
2956 void ath10k_wmi_event_vdev_stopped(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_vdev_stopped() argument
2958 ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_VDEV_STOPPED_EVENTID\n"); in ath10k_wmi_event_vdev_stopped()
2959 complete(&ar->vdev_setup_done); in ath10k_wmi_event_vdev_stopped()
2963 ath10k_wmi_op_pull_peer_kick_ev(struct ath10k *ar, struct sk_buff *skb, in ath10k_wmi_op_pull_peer_kick_ev() argument
2977 void ath10k_wmi_event_peer_sta_kickout(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_peer_sta_kickout() argument
2983 ret = ath10k_wmi_pull_peer_kick(ar, skb, &arg); in ath10k_wmi_event_peer_sta_kickout()
2985 ath10k_warn(ar, "failed to parse peer kickout event: %d\n", in ath10k_wmi_event_peer_sta_kickout()
2990 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi event peer sta kickout %pM\n", in ath10k_wmi_event_peer_sta_kickout()
2995 sta = ieee80211_find_sta_by_ifaddr(ar->hw, arg.mac_addr, NULL); in ath10k_wmi_event_peer_sta_kickout()
2997 ath10k_warn(ar, "Spurious quick kickout for STA %pM\n", in ath10k_wmi_event_peer_sta_kickout()
3032 static void ath10k_wmi_update_tim(struct ath10k *ar, in ath10k_wmi_update_tim() argument
3055 ath10k_warn(ar, "SWBA TIM field is too big (%u), truncated it to %zu", in ath10k_wmi_update_tim()
3085 ath10k_warn(ar, "no tim ie found;\n"); in ath10k_wmi_update_tim()
3105 ath10k_warn(ar, "tim expansion failed\n"); in ath10k_wmi_update_tim()
3110 ath10k_warn(ar, "tim pvm length is too great (%d)\n", pvm_len); in ath10k_wmi_update_tim()
3124 ath10k_dbg(ar, ATH10K_DBG_MGMT, "dtim %d/%d mcast %d pvmlen %d\n", in ath10k_wmi_update_tim()
3129 static void ath10k_wmi_update_noa(struct ath10k *ar, struct ath10k_vif *arvif, in ath10k_wmi_update_noa() argument
3136 ath10k_dbg(ar, ATH10K_DBG_MGMT, "noa changed: %d\n", noa->changed); in ath10k_wmi_update_noa()
3148 static int ath10k_wmi_op_pull_swba_ev(struct ath10k *ar, struct sk_buff *skb, in ath10k_wmi_op_pull_swba_ev() argument
3173 ath10k_warn(ar, "refusing to parse invalid swba structure\n"); in ath10k_wmi_op_pull_swba_ev()
3193 static int ath10k_wmi_10_4_op_pull_swba_ev(struct ath10k *ar, in ath10k_wmi_10_4_op_pull_swba_ev() argument
3219 ath10k_warn(ar, "refusing to parse invalid swba structure\n"); in ath10k_wmi_10_4_op_pull_swba_ev()
3250 static enum wmi_txbf_conf ath10k_wmi_10_4_txbf_conf_scheme(struct ath10k *ar) in ath10k_wmi_10_4_txbf_conf_scheme() argument
3255 void ath10k_wmi_event_host_swba(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_host_swba() argument
3267 ret = ath10k_wmi_pull_swba(ar, skb, &arg); in ath10k_wmi_event_host_swba()
3269 ath10k_warn(ar, "failed to parse swba event: %d\n", ret); in ath10k_wmi_event_host_swba()
3275 ath10k_dbg(ar, ATH10K_DBG_MGMT, "mgmt swba vdev_map 0x%x\n", in ath10k_wmi_event_host_swba()
3285 ath10k_warn(ar, "swba has corrupted vdev map\n"); in ath10k_wmi_event_host_swba()
3292 ath10k_dbg(ar, ATH10K_DBG_MGMT, in ath10k_wmi_event_host_swba()
3308 arvif = ath10k_get_arvif(ar, vdev_id); in ath10k_wmi_event_host_swba()
3310 ath10k_warn(ar, "no vif for vdev_id %d found\n", in ath10k_wmi_event_host_swba()
3326 bcn = ieee80211_beacon_get(ar->hw, arvif->vif); in ath10k_wmi_event_host_swba()
3328 ath10k_warn(ar, "could not get mac80211 beacon\n"); in ath10k_wmi_event_host_swba()
3333 ath10k_wmi_update_tim(ar, arvif, bcn, tim_info); in ath10k_wmi_event_host_swba()
3334 ath10k_wmi_update_noa(ar, arvif, bcn, noa_info); in ath10k_wmi_event_host_swba()
3336 spin_lock_bh(&ar->data_lock); in ath10k_wmi_event_host_swba()
3343 ath10k_warn(ar, "SWBA overrun on vdev %d, skipped old beacon\n", in ath10k_wmi_event_host_swba()
3347 ath10k_warn(ar, "SWBA overrun on vdev %d, skipped new beacon\n", in ath10k_wmi_event_host_swba()
3357 paddr = dma_map_single(arvif->ar->dev, bcn->data, in ath10k_wmi_event_host_swba()
3359 ret = dma_mapping_error(arvif->ar->dev, paddr); in ath10k_wmi_event_host_swba()
3361 ath10k_warn(ar, "failed to map beacon: %d\n", in ath10k_wmi_event_host_swba()
3371 ath10k_warn(ar, "trimming beacon %d -> %d bytes!\n", in ath10k_wmi_event_host_swba()
3382 trace_ath10k_tx_hdr(ar, bcn->data, bcn->len); in ath10k_wmi_event_host_swba()
3383 trace_ath10k_tx_payload(ar, bcn->data, bcn->len); in ath10k_wmi_event_host_swba()
3386 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_event_host_swba()
3389 ath10k_wmi_tx_beacons_nowait(ar); in ath10k_wmi_event_host_swba()
3392 void ath10k_wmi_event_tbttoffset_update(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_tbttoffset_update() argument
3394 ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_TBTTOFFSET_UPDATE_EVENTID\n"); in ath10k_wmi_event_tbttoffset_update()
3397 static void ath10k_dfs_radar_report(struct ath10k *ar, in ath10k_dfs_radar_report() argument
3411 ath10k_dbg(ar, ATH10K_DBG_REGULATORY, in ath10k_dfs_radar_report()
3417 ath10k_dbg(ar, ATH10K_DBG_REGULATORY, in ath10k_dfs_radar_report()
3424 ath10k_dbg(ar, ATH10K_DBG_REGULATORY, in ath10k_dfs_radar_report()
3429 if (!ar->dfs_detector) in ath10k_dfs_radar_report()
3432 spin_lock_bh(&ar->data_lock); in ath10k_dfs_radar_report()
3433 ch = ar->rx_channel; in ath10k_dfs_radar_report()
3434 spin_unlock_bh(&ar->data_lock); in ath10k_dfs_radar_report()
3437 ath10k_warn(ar, "failed to derive channel for radar pulse, treating as radar\n"); in ath10k_dfs_radar_report()
3460 ath10k_dbg(ar, ATH10K_DBG_REGULATORY, in ath10k_dfs_radar_report()
3464 ATH10K_DFS_STAT_INC(ar, pulses_detected); in ath10k_dfs_radar_report()
3466 if (!ar->dfs_detector->add_pulse(ar->dfs_detector, &pe)) { in ath10k_dfs_radar_report()
3467 ath10k_dbg(ar, ATH10K_DBG_REGULATORY, in ath10k_dfs_radar_report()
3473 ath10k_dbg(ar, ATH10K_DBG_REGULATORY, "dfs radar detected\n"); in ath10k_dfs_radar_report()
3474 ATH10K_DFS_STAT_INC(ar, radar_detected); in ath10k_dfs_radar_report()
3478 if (ar->dfs_block_radar_events) { in ath10k_dfs_radar_report()
3479 ath10k_info(ar, "DFS Radar detected, but ignored as requested\n"); in ath10k_dfs_radar_report()
3483 ieee80211_radar_detected(ar->hw); in ath10k_dfs_radar_report()
3486 static int ath10k_dfs_fft_report(struct ath10k *ar, in ath10k_dfs_fft_report() argument
3498 ath10k_dbg(ar, ATH10K_DBG_REGULATORY, in ath10k_dfs_fft_report()
3504 ath10k_dbg(ar, ATH10K_DBG_REGULATORY, in ath10k_dfs_fft_report()
3516 ath10k_dbg(ar, ATH10K_DBG_REGULATORY, "dfs false pulse detected\n"); in ath10k_dfs_fft_report()
3517 ATH10K_DFS_STAT_INC(ar, pulses_discarded); in ath10k_dfs_fft_report()
3524 void ath10k_wmi_event_dfs(struct ath10k *ar, in ath10k_wmi_event_dfs() argument
3535 ath10k_dbg(ar, ATH10K_DBG_REGULATORY, in ath10k_wmi_event_dfs()
3544 ATH10K_DFS_STAT_INC(ar, pulses_total); in ath10k_wmi_event_dfs()
3548 ath10k_warn(ar, "too short buf for tlv header (%d)\n", in ath10k_wmi_event_dfs()
3556 ath10k_dbg(ar, ATH10K_DBG_REGULATORY, in ath10k_wmi_event_dfs()
3563 ath10k_warn(ar, "too short radar pulse summary (%d)\n", in ath10k_wmi_event_dfs()
3569 ath10k_dfs_radar_report(ar, phyerr, rr, tsf); in ath10k_wmi_event_dfs()
3573 ath10k_warn(ar, "too short fft report (%d)\n", in ath10k_wmi_event_dfs()
3579 res = ath10k_dfs_fft_report(ar, phyerr, fftr, tsf); in ath10k_wmi_event_dfs()
3589 void ath10k_wmi_event_spectral_scan(struct ath10k *ar, in ath10k_wmi_event_spectral_scan() argument
3603 ath10k_warn(ar, "failed to parse phyerr tlv header at byte %d\n", in ath10k_wmi_event_spectral_scan()
3613 ath10k_warn(ar, "failed to parse phyerr tlv payload at byte %d\n", in ath10k_wmi_event_spectral_scan()
3621 ath10k_warn(ar, "failed to parse fft report at byte %d\n", in ath10k_wmi_event_spectral_scan()
3628 res = ath10k_spectral_process_fft(ar, phyerr, in ath10k_wmi_event_spectral_scan()
3632 ath10k_dbg(ar, ATH10K_DBG_WMI, "failed to process fft report: %d\n", in ath10k_wmi_event_spectral_scan()
3643 static int ath10k_wmi_op_pull_phyerr_ev_hdr(struct ath10k *ar, in ath10k_wmi_op_pull_phyerr_ev_hdr() argument
3661 static int ath10k_wmi_10_4_op_pull_phyerr_ev_hdr(struct ath10k *ar, in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr() argument
3681 int ath10k_wmi_op_pull_phyerr_ev(struct ath10k *ar, in ath10k_wmi_op_pull_phyerr_ev() argument
3690 ath10k_warn(ar, "wrong phyerr event head len %d (need: >=%zd)\n", in ath10k_wmi_op_pull_phyerr_ev()
3725 static int ath10k_wmi_10_4_op_pull_phyerr_ev(struct ath10k *ar, in ath10k_wmi_10_4_op_pull_phyerr_ev() argument
3735 ath10k_warn(ar, "wrong phyerr event head len %d (need: >=%zd)\n", in ath10k_wmi_10_4_op_pull_phyerr_ev()
3764 void ath10k_wmi_event_phyerr(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_phyerr() argument
3773 ATH10K_DFS_STAT_INC(ar, phy_errors); in ath10k_wmi_event_phyerr()
3775 ret = ath10k_wmi_pull_phyerr_hdr(ar, skb, &hdr_arg); in ath10k_wmi_event_phyerr()
3777 ath10k_warn(ar, "failed to parse phyerr event hdr: %d\n", ret); in ath10k_wmi_event_phyerr()
3790 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_event_phyerr()
3796 ret = ath10k_wmi_pull_phyerr(ar, phyerr, left_len, &phyerr_arg); in ath10k_wmi_event_phyerr()
3798 ath10k_warn(ar, "failed to parse phyerr event (%d)\n", in ath10k_wmi_event_phyerr()
3808 ath10k_warn(ar, "single event (%d) wrong buf len\n", i); in ath10k_wmi_event_phyerr()
3816 ath10k_wmi_event_dfs(ar, &phyerr_arg, tsf); in ath10k_wmi_event_phyerr()
3819 ath10k_wmi_event_spectral_scan(ar, &phyerr_arg, tsf); in ath10k_wmi_event_phyerr()
3822 ath10k_wmi_event_dfs(ar, &phyerr_arg, tsf); in ath10k_wmi_event_phyerr()
3823 ath10k_wmi_event_spectral_scan(ar, &phyerr_arg, tsf); in ath10k_wmi_event_phyerr()
3833 void ath10k_wmi_event_roam(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_roam() argument
3841 ret = ath10k_wmi_pull_roam_ev(ar, skb, &arg); in ath10k_wmi_event_roam()
3843 ath10k_warn(ar, "failed to parse roam event: %d\n", ret); in ath10k_wmi_event_roam()
3852 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_event_roam()
3857 ath10k_warn(ar, "ignoring unknown roam event reason %d on vdev %i\n", in ath10k_wmi_event_roam()
3862 ath10k_mac_handle_beacon_miss(ar, vdev_id); in ath10k_wmi_event_roam()
3868 ath10k_warn(ar, "ignoring not implemented roam event reason %d on vdev %i\n", in ath10k_wmi_event_roam()
3874 void ath10k_wmi_event_profile_match(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_profile_match() argument
3876 ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_PROFILE_MATCH\n"); in ath10k_wmi_event_profile_match()
3879 void ath10k_wmi_event_debug_print(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_debug_print() argument
3900 ath10k_warn(ar, "wmi debug print truncated: %d\n", skb->len); in ath10k_wmi_event_debug_print()
3909 ath10k_dbg(ar, ATH10K_DBG_WMI_PRINT, "wmi print '%s'\n", buf); in ath10k_wmi_event_debug_print()
3912 void ath10k_wmi_event_pdev_qvit(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_pdev_qvit() argument
3914 ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_PDEV_QVIT_EVENTID\n"); in ath10k_wmi_event_pdev_qvit()
3917 void ath10k_wmi_event_wlan_profile_data(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_wlan_profile_data() argument
3919 ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_WLAN_PROFILE_DATA_EVENTID\n"); in ath10k_wmi_event_wlan_profile_data()
3922 void ath10k_wmi_event_rtt_measurement_report(struct ath10k *ar, in ath10k_wmi_event_rtt_measurement_report() argument
3925 ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_RTT_MEASUREMENT_REPORT_EVENTID\n"); in ath10k_wmi_event_rtt_measurement_report()
3928 void ath10k_wmi_event_tsf_measurement_report(struct ath10k *ar, in ath10k_wmi_event_tsf_measurement_report() argument
3931 ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_TSF_MEASUREMENT_REPORT_EVENTID\n"); in ath10k_wmi_event_tsf_measurement_report()
3934 void ath10k_wmi_event_rtt_error_report(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_rtt_error_report() argument
3936 ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_RTT_ERROR_REPORT_EVENTID\n"); in ath10k_wmi_event_rtt_error_report()
3939 void ath10k_wmi_event_wow_wakeup_host(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_wow_wakeup_host() argument
3944 complete(&ar->wow.wakeup_completed); in ath10k_wmi_event_wow_wakeup_host()
3946 ret = ath10k_wmi_pull_wow_event(ar, skb, &ev); in ath10k_wmi_event_wow_wakeup_host()
3948 ath10k_warn(ar, "failed to parse wow wakeup event: %d\n", ret); in ath10k_wmi_event_wow_wakeup_host()
3952 ath10k_dbg(ar, ATH10K_DBG_WMI, "wow wakeup host reason %s\n", in ath10k_wmi_event_wow_wakeup_host()
3956 void ath10k_wmi_event_dcs_interference(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_dcs_interference() argument
3958 ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_DCS_INTERFERENCE_EVENTID\n"); in ath10k_wmi_event_dcs_interference()
3961 static u8 ath10k_tpc_config_get_rate(struct ath10k *ar, in ath10k_tpc_config_get_rate() argument
3998 ath10k_warn(ar, "unknown wmi tpc table type: %d\n", type); in ath10k_tpc_config_get_rate()
4007 static void ath10k_tpc_config_disp_tables(struct ath10k *ar, in ath10k_tpc_config_disp_tables() argument
4022 ath10k_dbg(ar, ATH10K_DBG_WMI, "CDD not supported\n"); in ath10k_tpc_config_disp_tables()
4029 ath10k_dbg(ar, ATH10K_DBG_WMI, "STBC not supported\n"); in ath10k_tpc_config_disp_tables()
4036 ath10k_dbg(ar, ATH10K_DBG_WMI, "TXBF not supported\n"); in ath10k_tpc_config_disp_tables()
4042 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_tpc_config_disp_tables()
4058 tpc[j] = ath10k_tpc_config_get_rate(ar, ev, i, j + 1, in ath10k_tpc_config_disp_tables()
4071 void ath10k_wmi_event_pdev_tpc_config(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_pdev_tpc_config() argument
4189 ath10k_tpc_config_disp_tables(ar, ev, tpc_stats, in ath10k_wmi_event_pdev_tpc_config()
4192 ath10k_tpc_config_disp_tables(ar, ev, tpc_stats, in ath10k_wmi_event_pdev_tpc_config()
4195 ath10k_tpc_config_disp_tables(ar, ev, tpc_stats, in ath10k_wmi_event_pdev_tpc_config()
4199 ath10k_debug_tpc_stats_process(ar, tpc_stats); in ath10k_wmi_event_pdev_tpc_config()
4201 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_event_pdev_tpc_config()
4215 void ath10k_wmi_event_pdev_ftm_intg(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_pdev_ftm_intg() argument
4217 ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_PDEV_FTM_INTG_EVENTID\n"); in ath10k_wmi_event_pdev_ftm_intg()
4220 void ath10k_wmi_event_gtk_offload_status(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_gtk_offload_status() argument
4222 ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_GTK_OFFLOAD_STATUS_EVENTID\n"); in ath10k_wmi_event_gtk_offload_status()
4225 void ath10k_wmi_event_gtk_rekey_fail(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_gtk_rekey_fail() argument
4227 ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_GTK_REKEY_FAIL_EVENTID\n"); in ath10k_wmi_event_gtk_rekey_fail()
4230 void ath10k_wmi_event_delba_complete(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_delba_complete() argument
4232 ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_TX_DELBA_COMPLETE_EVENTID\n"); in ath10k_wmi_event_delba_complete()
4235 void ath10k_wmi_event_addba_complete(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_addba_complete() argument
4237 ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_TX_ADDBA_COMPLETE_EVENTID\n"); in ath10k_wmi_event_addba_complete()
4240 void ath10k_wmi_event_vdev_install_key_complete(struct ath10k *ar, in ath10k_wmi_event_vdev_install_key_complete() argument
4243 ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_VDEV_INSTALL_KEY_COMPLETE_EVENTID\n"); in ath10k_wmi_event_vdev_install_key_complete()
4246 void ath10k_wmi_event_inst_rssi_stats(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_inst_rssi_stats() argument
4248 ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_INST_RSSI_STATS_EVENTID\n"); in ath10k_wmi_event_inst_rssi_stats()
4251 void ath10k_wmi_event_vdev_standby_req(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_vdev_standby_req() argument
4253 ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_VDEV_STANDBY_REQ_EVENTID\n"); in ath10k_wmi_event_vdev_standby_req()
4256 void ath10k_wmi_event_vdev_resume_req(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_vdev_resume_req() argument
4258 ath10k_dbg(ar, ATH10K_DBG_WMI, "WMI_VDEV_RESUME_REQ_EVENTID\n"); in ath10k_wmi_event_vdev_resume_req()
4261 static int ath10k_wmi_alloc_host_mem(struct ath10k *ar, u32 req_id, in ath10k_wmi_alloc_host_mem() argument
4266 int idx = ar->wmi.num_mem_chunks; in ath10k_wmi_alloc_host_mem()
4273 ar->wmi.mem_chunks[idx].vaddr = dma_alloc_coherent(ar->dev, in ath10k_wmi_alloc_host_mem()
4277 if (!ar->wmi.mem_chunks[idx].vaddr) { in ath10k_wmi_alloc_host_mem()
4278 ath10k_warn(ar, "failed to allocate memory chunk\n"); in ath10k_wmi_alloc_host_mem()
4282 memset(ar->wmi.mem_chunks[idx].vaddr, 0, pool_size); in ath10k_wmi_alloc_host_mem()
4284 ar->wmi.mem_chunks[idx].paddr = paddr; in ath10k_wmi_alloc_host_mem()
4285 ar->wmi.mem_chunks[idx].len = pool_size; in ath10k_wmi_alloc_host_mem()
4286 ar->wmi.mem_chunks[idx].req_id = req_id; in ath10k_wmi_alloc_host_mem()
4287 ar->wmi.num_mem_chunks++; in ath10k_wmi_alloc_host_mem()
4293 ath10k_wmi_is_host_mem_allocated(struct ath10k *ar, in ath10k_wmi_is_host_mem_allocated() argument
4302 if (ar->wmi.num_mem_chunks != num_mem_reqs) in ath10k_wmi_is_host_mem_allocated()
4312 if (ar->num_active_peers) in ath10k_wmi_is_host_mem_allocated()
4313 num_units = ar->num_active_peers + 1; in ath10k_wmi_is_host_mem_allocated()
4315 num_units = ar->max_num_peers + 1; in ath10k_wmi_is_host_mem_allocated()
4317 num_units = ar->max_num_peers + 1; in ath10k_wmi_is_host_mem_allocated()
4319 num_units = ar->max_num_vdevs + 1; in ath10k_wmi_is_host_mem_allocated()
4323 for (j = 0; j < ar->wmi.num_mem_chunks; j++) { in ath10k_wmi_is_host_mem_allocated()
4324 if (ar->wmi.mem_chunks[j].req_id == req_id) { in ath10k_wmi_is_host_mem_allocated()
4326 if (ar->wmi.mem_chunks[j].len == pool_size) { in ath10k_wmi_is_host_mem_allocated()
4340 ath10k_wmi_main_op_pull_svc_rdy_ev(struct ath10k *ar, struct sk_buff *skb, in ath10k_wmi_main_op_pull_svc_rdy_ev() argument
4377 ath10k_wmi_10x_op_pull_svc_rdy_ev(struct ath10k *ar, struct sk_buff *skb, in ath10k_wmi_10x_op_pull_svc_rdy_ev() argument
4414 struct ath10k *ar = container_of(work, struct ath10k, svc_rdy_work); in ath10k_wmi_event_service_ready_work() local
4415 struct sk_buff *skb = ar->svc_rdy_skb; in ath10k_wmi_event_service_ready_work()
4422 ath10k_warn(ar, "invalid service ready event skb\n"); in ath10k_wmi_event_service_ready_work()
4426 ret = ath10k_wmi_pull_svc_rdy(ar, skb, &arg); in ath10k_wmi_event_service_ready_work()
4428 ath10k_warn(ar, "failed to parse service ready: %d\n", ret); in ath10k_wmi_event_service_ready_work()
4432 memset(&ar->wmi.svc_map, 0, sizeof(ar->wmi.svc_map)); in ath10k_wmi_event_service_ready_work()
4433 ath10k_wmi_map_svc(ar, arg.service_map, ar->wmi.svc_map, in ath10k_wmi_event_service_ready_work()
4436 ar->hw_min_tx_power = __le32_to_cpu(arg.min_tx_power); in ath10k_wmi_event_service_ready_work()
4437 ar->hw_max_tx_power = __le32_to_cpu(arg.max_tx_power); in ath10k_wmi_event_service_ready_work()
4438 ar->ht_cap_info = __le32_to_cpu(arg.ht_cap); in ath10k_wmi_event_service_ready_work()
4439 ar->vht_cap_info = __le32_to_cpu(arg.vht_cap); in ath10k_wmi_event_service_ready_work()
4440 ar->fw_version_major = in ath10k_wmi_event_service_ready_work()
4442 ar->fw_version_minor = (__le32_to_cpu(arg.sw_ver0) & 0x00ffffff); in ath10k_wmi_event_service_ready_work()
4443 ar->fw_version_release = in ath10k_wmi_event_service_ready_work()
4445 ar->fw_version_build = (__le32_to_cpu(arg.sw_ver1) & 0x0000ffff); in ath10k_wmi_event_service_ready_work()
4446 ar->phy_capability = __le32_to_cpu(arg.phy_capab); in ath10k_wmi_event_service_ready_work()
4447 ar->num_rf_chains = __le32_to_cpu(arg.num_rf_chains); in ath10k_wmi_event_service_ready_work()
4448 ar->ath_common.regulatory.current_rd = __le32_to_cpu(arg.eeprom_rd); in ath10k_wmi_event_service_ready_work()
4450 ath10k_dbg_dump(ar, ATH10K_DBG_WMI, NULL, "wmi svc: ", in ath10k_wmi_event_service_ready_work()
4454 if (ar->fw_api == 1 && ar->fw_version_build > 636) in ath10k_wmi_event_service_ready_work()
4455 set_bit(ATH10K_FW_FEATURE_EXT_WMI_MGMT_RX, ar->fw_features); in ath10k_wmi_event_service_ready_work()
4457 if (ar->num_rf_chains > ar->max_spatial_stream) { in ath10k_wmi_event_service_ready_work()
4458 ath10k_warn(ar, "hardware advertises support for more spatial streams than it should (%d > %d)\n", in ath10k_wmi_event_service_ready_work()
4459 ar->num_rf_chains, ar->max_spatial_stream); in ath10k_wmi_event_service_ready_work()
4460 ar->num_rf_chains = ar->max_spatial_stream; in ath10k_wmi_event_service_ready_work()
4463 if (!ar->cfg_tx_chainmask) { in ath10k_wmi_event_service_ready_work()
4464 ar->cfg_tx_chainmask = (1 << ar->num_rf_chains) - 1; in ath10k_wmi_event_service_ready_work()
4465 ar->cfg_rx_chainmask = (1 << ar->num_rf_chains) - 1; in ath10k_wmi_event_service_ready_work()
4468 if (strlen(ar->hw->wiphy->fw_version) == 0) { in ath10k_wmi_event_service_ready_work()
4469 snprintf(ar->hw->wiphy->fw_version, in ath10k_wmi_event_service_ready_work()
4470 sizeof(ar->hw->wiphy->fw_version), in ath10k_wmi_event_service_ready_work()
4472 ar->fw_version_major, in ath10k_wmi_event_service_ready_work()
4473 ar->fw_version_minor, in ath10k_wmi_event_service_ready_work()
4474 ar->fw_version_release, in ath10k_wmi_event_service_ready_work()
4475 ar->fw_version_build); in ath10k_wmi_event_service_ready_work()
4480 ath10k_warn(ar, "requested memory chunks number (%d) exceeds the limit\n", in ath10k_wmi_event_service_ready_work()
4485 if (test_bit(WMI_SERVICE_PEER_CACHING, ar->wmi.svc_map)) { in ath10k_wmi_event_service_ready_work()
4486 ar->max_num_peers = TARGET_10_4_NUM_QCACHE_PEERS_MAX + in ath10k_wmi_event_service_ready_work()
4488 ar->num_active_peers = TARGET_10_4_QCACHE_ACTIVE_PEERS + in ath10k_wmi_event_service_ready_work()
4490 ar->num_tids = ar->num_active_peers * 2; in ath10k_wmi_event_service_ready_work()
4491 ar->max_num_stations = TARGET_10_4_NUM_QCACHE_PEERS_MAX; in ath10k_wmi_event_service_ready_work()
4498 allocated = ath10k_wmi_is_host_mem_allocated(ar, arg.mem_reqs, in ath10k_wmi_event_service_ready_work()
4508 ath10k_wmi_free_host_mem(ar); in ath10k_wmi_event_service_ready_work()
4517 if (ar->num_active_peers) in ath10k_wmi_event_service_ready_work()
4518 num_units = ar->num_active_peers + 1; in ath10k_wmi_event_service_ready_work()
4520 num_units = ar->max_num_peers + 1; in ath10k_wmi_event_service_ready_work()
4526 num_units = ar->max_num_peers + 1; in ath10k_wmi_event_service_ready_work()
4528 num_units = ar->max_num_vdevs + 1; in ath10k_wmi_event_service_ready_work()
4531 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_event_service_ready_work()
4539 ret = ath10k_wmi_alloc_host_mem(ar, req_id, num_units, in ath10k_wmi_event_service_ready_work()
4546 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_event_service_ready_work()
4561 ar->svc_rdy_skb = NULL; in ath10k_wmi_event_service_ready_work()
4562 complete(&ar->wmi.service_ready); in ath10k_wmi_event_service_ready_work()
4565 void ath10k_wmi_event_service_ready(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_service_ready() argument
4567 ar->svc_rdy_skb = skb; in ath10k_wmi_event_service_ready()
4568 queue_work(ar->workqueue_aux, &ar->svc_rdy_work); in ath10k_wmi_event_service_ready()
4571 static int ath10k_wmi_op_pull_rdy_ev(struct ath10k *ar, struct sk_buff *skb, in ath10k_wmi_op_pull_rdy_ev() argument
4588 static int ath10k_wmi_op_pull_roam_ev(struct ath10k *ar, struct sk_buff *skb, in ath10k_wmi_op_pull_roam_ev() argument
4603 int ath10k_wmi_event_ready(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_ready() argument
4608 ret = ath10k_wmi_pull_rdy(ar, skb, &arg); in ath10k_wmi_event_ready()
4610 ath10k_warn(ar, "failed to parse ready event: %d\n", ret); in ath10k_wmi_event_ready()
4614 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_event_ready()
4621 ether_addr_copy(ar->mac_addr, arg.mac_addr); in ath10k_wmi_event_ready()
4622 complete(&ar->wmi.unified_ready); in ath10k_wmi_event_ready()
4626 static int ath10k_wmi_event_temperature(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_event_temperature() argument
4634 ath10k_thermal_event_temperature(ar, __le32_to_cpu(ev->temperature)); in ath10k_wmi_event_temperature()
4638 static void ath10k_wmi_op_rx(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_op_rx() argument
4649 trace_ath10k_wmi_event(ar, id, skb->data, skb->len); in ath10k_wmi_op_rx()
4653 ath10k_wmi_event_mgmt_rx(ar, skb); in ath10k_wmi_op_rx()
4657 ath10k_wmi_event_scan(ar, skb); in ath10k_wmi_op_rx()
4660 ath10k_wmi_event_chan_info(ar, skb); in ath10k_wmi_op_rx()
4663 ath10k_wmi_event_echo(ar, skb); in ath10k_wmi_op_rx()
4666 ath10k_wmi_event_debug_mesg(ar, skb); in ath10k_wmi_op_rx()
4669 ath10k_wmi_event_update_stats(ar, skb); in ath10k_wmi_op_rx()
4672 ath10k_wmi_event_vdev_start_resp(ar, skb); in ath10k_wmi_op_rx()
4675 ath10k_wmi_event_vdev_stopped(ar, skb); in ath10k_wmi_op_rx()
4678 ath10k_wmi_event_peer_sta_kickout(ar, skb); in ath10k_wmi_op_rx()
4681 ath10k_wmi_event_host_swba(ar, skb); in ath10k_wmi_op_rx()
4684 ath10k_wmi_event_tbttoffset_update(ar, skb); in ath10k_wmi_op_rx()
4687 ath10k_wmi_event_phyerr(ar, skb); in ath10k_wmi_op_rx()
4690 ath10k_wmi_event_roam(ar, skb); in ath10k_wmi_op_rx()
4693 ath10k_wmi_event_profile_match(ar, skb); in ath10k_wmi_op_rx()
4696 ath10k_wmi_event_debug_print(ar, skb); in ath10k_wmi_op_rx()
4699 ath10k_wmi_event_pdev_qvit(ar, skb); in ath10k_wmi_op_rx()
4702 ath10k_wmi_event_wlan_profile_data(ar, skb); in ath10k_wmi_op_rx()
4705 ath10k_wmi_event_rtt_measurement_report(ar, skb); in ath10k_wmi_op_rx()
4708 ath10k_wmi_event_tsf_measurement_report(ar, skb); in ath10k_wmi_op_rx()
4711 ath10k_wmi_event_rtt_error_report(ar, skb); in ath10k_wmi_op_rx()
4714 ath10k_wmi_event_wow_wakeup_host(ar, skb); in ath10k_wmi_op_rx()
4717 ath10k_wmi_event_dcs_interference(ar, skb); in ath10k_wmi_op_rx()
4720 ath10k_wmi_event_pdev_tpc_config(ar, skb); in ath10k_wmi_op_rx()
4723 ath10k_wmi_event_pdev_ftm_intg(ar, skb); in ath10k_wmi_op_rx()
4726 ath10k_wmi_event_gtk_offload_status(ar, skb); in ath10k_wmi_op_rx()
4729 ath10k_wmi_event_gtk_rekey_fail(ar, skb); in ath10k_wmi_op_rx()
4732 ath10k_wmi_event_delba_complete(ar, skb); in ath10k_wmi_op_rx()
4735 ath10k_wmi_event_addba_complete(ar, skb); in ath10k_wmi_op_rx()
4738 ath10k_wmi_event_vdev_install_key_complete(ar, skb); in ath10k_wmi_op_rx()
4741 ath10k_wmi_event_service_ready(ar, skb); in ath10k_wmi_op_rx()
4744 ath10k_wmi_event_ready(ar, skb); in ath10k_wmi_op_rx()
4747 ath10k_warn(ar, "Unknown eventid: %d\n", id); in ath10k_wmi_op_rx()
4755 static void ath10k_wmi_10_1_op_rx(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_10_1_op_rx() argument
4767 trace_ath10k_wmi_event(ar, id, skb->data, skb->len); in ath10k_wmi_10_1_op_rx()
4769 consumed = ath10k_tm_event_wmi(ar, id, skb); in ath10k_wmi_10_1_op_rx()
4776 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_10_1_op_rx()
4783 ath10k_wmi_event_mgmt_rx(ar, skb); in ath10k_wmi_10_1_op_rx()
4787 ath10k_wmi_event_scan(ar, skb); in ath10k_wmi_10_1_op_rx()
4790 ath10k_wmi_event_chan_info(ar, skb); in ath10k_wmi_10_1_op_rx()
4793 ath10k_wmi_event_echo(ar, skb); in ath10k_wmi_10_1_op_rx()
4796 ath10k_wmi_event_debug_mesg(ar, skb); in ath10k_wmi_10_1_op_rx()
4799 ath10k_wmi_event_update_stats(ar, skb); in ath10k_wmi_10_1_op_rx()
4802 ath10k_wmi_event_vdev_start_resp(ar, skb); in ath10k_wmi_10_1_op_rx()
4805 ath10k_wmi_event_vdev_stopped(ar, skb); in ath10k_wmi_10_1_op_rx()
4808 ath10k_wmi_event_peer_sta_kickout(ar, skb); in ath10k_wmi_10_1_op_rx()
4811 ath10k_wmi_event_host_swba(ar, skb); in ath10k_wmi_10_1_op_rx()
4814 ath10k_wmi_event_tbttoffset_update(ar, skb); in ath10k_wmi_10_1_op_rx()
4817 ath10k_wmi_event_phyerr(ar, skb); in ath10k_wmi_10_1_op_rx()
4820 ath10k_wmi_event_roam(ar, skb); in ath10k_wmi_10_1_op_rx()
4823 ath10k_wmi_event_profile_match(ar, skb); in ath10k_wmi_10_1_op_rx()
4826 ath10k_wmi_event_debug_print(ar, skb); in ath10k_wmi_10_1_op_rx()
4829 ath10k_wmi_event_pdev_qvit(ar, skb); in ath10k_wmi_10_1_op_rx()
4832 ath10k_wmi_event_wlan_profile_data(ar, skb); in ath10k_wmi_10_1_op_rx()
4835 ath10k_wmi_event_rtt_measurement_report(ar, skb); in ath10k_wmi_10_1_op_rx()
4838 ath10k_wmi_event_tsf_measurement_report(ar, skb); in ath10k_wmi_10_1_op_rx()
4841 ath10k_wmi_event_rtt_error_report(ar, skb); in ath10k_wmi_10_1_op_rx()
4844 ath10k_wmi_event_wow_wakeup_host(ar, skb); in ath10k_wmi_10_1_op_rx()
4847 ath10k_wmi_event_dcs_interference(ar, skb); in ath10k_wmi_10_1_op_rx()
4850 ath10k_wmi_event_pdev_tpc_config(ar, skb); in ath10k_wmi_10_1_op_rx()
4853 ath10k_wmi_event_inst_rssi_stats(ar, skb); in ath10k_wmi_10_1_op_rx()
4856 ath10k_wmi_event_vdev_standby_req(ar, skb); in ath10k_wmi_10_1_op_rx()
4859 ath10k_wmi_event_vdev_resume_req(ar, skb); in ath10k_wmi_10_1_op_rx()
4862 ath10k_wmi_event_service_ready(ar, skb); in ath10k_wmi_10_1_op_rx()
4865 ath10k_wmi_event_ready(ar, skb); in ath10k_wmi_10_1_op_rx()
4871 ath10k_warn(ar, "Unknown eventid: %d\n", id); in ath10k_wmi_10_1_op_rx()
4879 static void ath10k_wmi_10_2_op_rx(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_10_2_op_rx() argument
4890 trace_ath10k_wmi_event(ar, id, skb->data, skb->len); in ath10k_wmi_10_2_op_rx()
4894 ath10k_wmi_event_mgmt_rx(ar, skb); in ath10k_wmi_10_2_op_rx()
4898 ath10k_wmi_event_scan(ar, skb); in ath10k_wmi_10_2_op_rx()
4901 ath10k_wmi_event_chan_info(ar, skb); in ath10k_wmi_10_2_op_rx()
4904 ath10k_wmi_event_echo(ar, skb); in ath10k_wmi_10_2_op_rx()
4907 ath10k_wmi_event_debug_mesg(ar, skb); in ath10k_wmi_10_2_op_rx()
4910 ath10k_wmi_event_update_stats(ar, skb); in ath10k_wmi_10_2_op_rx()
4913 ath10k_wmi_event_vdev_start_resp(ar, skb); in ath10k_wmi_10_2_op_rx()
4916 ath10k_wmi_event_vdev_stopped(ar, skb); in ath10k_wmi_10_2_op_rx()
4919 ath10k_wmi_event_peer_sta_kickout(ar, skb); in ath10k_wmi_10_2_op_rx()
4922 ath10k_wmi_event_host_swba(ar, skb); in ath10k_wmi_10_2_op_rx()
4925 ath10k_wmi_event_tbttoffset_update(ar, skb); in ath10k_wmi_10_2_op_rx()
4928 ath10k_wmi_event_phyerr(ar, skb); in ath10k_wmi_10_2_op_rx()
4931 ath10k_wmi_event_roam(ar, skb); in ath10k_wmi_10_2_op_rx()
4934 ath10k_wmi_event_profile_match(ar, skb); in ath10k_wmi_10_2_op_rx()
4937 ath10k_wmi_event_debug_print(ar, skb); in ath10k_wmi_10_2_op_rx()
4940 ath10k_wmi_event_pdev_qvit(ar, skb); in ath10k_wmi_10_2_op_rx()
4943 ath10k_wmi_event_wlan_profile_data(ar, skb); in ath10k_wmi_10_2_op_rx()
4946 ath10k_wmi_event_rtt_measurement_report(ar, skb); in ath10k_wmi_10_2_op_rx()
4949 ath10k_wmi_event_tsf_measurement_report(ar, skb); in ath10k_wmi_10_2_op_rx()
4952 ath10k_wmi_event_rtt_error_report(ar, skb); in ath10k_wmi_10_2_op_rx()
4955 ath10k_wmi_event_wow_wakeup_host(ar, skb); in ath10k_wmi_10_2_op_rx()
4958 ath10k_wmi_event_dcs_interference(ar, skb); in ath10k_wmi_10_2_op_rx()
4961 ath10k_wmi_event_pdev_tpc_config(ar, skb); in ath10k_wmi_10_2_op_rx()
4964 ath10k_wmi_event_inst_rssi_stats(ar, skb); in ath10k_wmi_10_2_op_rx()
4967 ath10k_wmi_event_vdev_standby_req(ar, skb); in ath10k_wmi_10_2_op_rx()
4970 ath10k_wmi_event_vdev_resume_req(ar, skb); in ath10k_wmi_10_2_op_rx()
4973 ath10k_wmi_event_service_ready(ar, skb); in ath10k_wmi_10_2_op_rx()
4976 ath10k_wmi_event_ready(ar, skb); in ath10k_wmi_10_2_op_rx()
4979 ath10k_wmi_event_temperature(ar, skb); in ath10k_wmi_10_2_op_rx()
4988 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_10_2_op_rx()
4992 ath10k_warn(ar, "Unknown eventid: %d\n", id); in ath10k_wmi_10_2_op_rx()
5000 static void ath10k_wmi_10_4_op_rx(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_10_4_op_rx() argument
5011 trace_ath10k_wmi_event(ar, id, skb->data, skb->len); in ath10k_wmi_10_4_op_rx()
5015 ath10k_wmi_event_mgmt_rx(ar, skb); in ath10k_wmi_10_4_op_rx()
5019 ath10k_wmi_event_echo(ar, skb); in ath10k_wmi_10_4_op_rx()
5022 ath10k_wmi_event_debug_mesg(ar, skb); in ath10k_wmi_10_4_op_rx()
5025 ath10k_wmi_event_service_ready(ar, skb); in ath10k_wmi_10_4_op_rx()
5028 ath10k_wmi_event_scan(ar, skb); in ath10k_wmi_10_4_op_rx()
5031 ath10k_wmi_event_chan_info(ar, skb); in ath10k_wmi_10_4_op_rx()
5034 ath10k_wmi_event_phyerr(ar, skb); in ath10k_wmi_10_4_op_rx()
5037 ath10k_wmi_event_ready(ar, skb); in ath10k_wmi_10_4_op_rx()
5040 ath10k_wmi_event_peer_sta_kickout(ar, skb); in ath10k_wmi_10_4_op_rx()
5043 ath10k_wmi_event_host_swba(ar, skb); in ath10k_wmi_10_4_op_rx()
5046 ath10k_wmi_event_tbttoffset_update(ar, skb); in ath10k_wmi_10_4_op_rx()
5049 ath10k_wmi_event_debug_print(ar, skb); in ath10k_wmi_10_4_op_rx()
5052 ath10k_wmi_event_vdev_start_resp(ar, skb); in ath10k_wmi_10_4_op_rx()
5055 ath10k_wmi_event_vdev_stopped(ar, skb); in ath10k_wmi_10_4_op_rx()
5058 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_10_4_op_rx()
5062 ath10k_wmi_event_update_stats(ar, skb); in ath10k_wmi_10_4_op_rx()
5065 ath10k_warn(ar, "Unknown eventid: %d\n", id); in ath10k_wmi_10_4_op_rx()
5073 static void ath10k_wmi_process_rx(struct ath10k *ar, struct sk_buff *skb) in ath10k_wmi_process_rx() argument
5077 ret = ath10k_wmi_rx(ar, skb); in ath10k_wmi_process_rx()
5079 ath10k_warn(ar, "failed to process wmi rx: %d\n", ret); in ath10k_wmi_process_rx()
5082 int ath10k_wmi_connect(struct ath10k *ar) in ath10k_wmi_connect() argument
5099 status = ath10k_htc_connect_service(&ar->htc, &conn_req, &conn_resp); in ath10k_wmi_connect()
5101 ath10k_warn(ar, "failed to connect to WMI CONTROL service status: %d\n", in ath10k_wmi_connect()
5106 ar->wmi.eid = conn_resp.eid; in ath10k_wmi_connect()
5111 ath10k_wmi_op_gen_pdev_set_rd(struct ath10k *ar, u16 rd, u16 rd2g, u16 rd5g, in ath10k_wmi_op_gen_pdev_set_rd() argument
5118 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_pdev_set_rd()
5129 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_pdev_set_rd()
5136 ath10k_wmi_10x_op_gen_pdev_set_rd(struct ath10k *ar, u16 rd, u16 rd2g, u16 in ath10k_wmi_10x_op_gen_pdev_set_rd() argument
5143 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_10x_op_gen_pdev_set_rd()
5155 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_10x_op_gen_pdev_set_rd()
5162 ath10k_wmi_op_gen_pdev_suspend(struct ath10k *ar, u32 suspend_opt) in ath10k_wmi_op_gen_pdev_suspend() argument
5167 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_pdev_suspend()
5178 ath10k_wmi_op_gen_pdev_resume(struct ath10k *ar) in ath10k_wmi_op_gen_pdev_resume() argument
5182 skb = ath10k_wmi_alloc_skb(ar, 0); in ath10k_wmi_op_gen_pdev_resume()
5190 ath10k_wmi_op_gen_pdev_set_param(struct ath10k *ar, u32 id, u32 value) in ath10k_wmi_op_gen_pdev_set_param() argument
5196 ath10k_warn(ar, "pdev param %d not supported by firmware\n", in ath10k_wmi_op_gen_pdev_set_param()
5201 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_pdev_set_param()
5209 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi pdev set param %d value %d\n", in ath10k_wmi_op_gen_pdev_set_param()
5214 void ath10k_wmi_put_host_mem_chunks(struct ath10k *ar, in ath10k_wmi_put_host_mem_chunks() argument
5220 chunks->count = __cpu_to_le32(ar->wmi.num_mem_chunks); in ath10k_wmi_put_host_mem_chunks()
5222 for (i = 0; i < ar->wmi.num_mem_chunks; i++) { in ath10k_wmi_put_host_mem_chunks()
5224 chunk->ptr = __cpu_to_le32(ar->wmi.mem_chunks[i].paddr); in ath10k_wmi_put_host_mem_chunks()
5225 chunk->size = __cpu_to_le32(ar->wmi.mem_chunks[i].len); in ath10k_wmi_put_host_mem_chunks()
5226 chunk->req_id = __cpu_to_le32(ar->wmi.mem_chunks[i].req_id); in ath10k_wmi_put_host_mem_chunks()
5228 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_put_host_mem_chunks()
5231 ar->wmi.mem_chunks[i].len, in ath10k_wmi_put_host_mem_chunks()
5232 (unsigned long long)ar->wmi.mem_chunks[i].paddr); in ath10k_wmi_put_host_mem_chunks()
5236 static struct sk_buff *ath10k_wmi_op_gen_init(struct ath10k *ar) in ath10k_wmi_op_gen_init() argument
5259 config.rx_decap_mode = __cpu_to_le32(ar->wmi.rx_decap_mode); in ath10k_wmi_op_gen_init()
5294 (sizeof(struct host_memory_chunk) * ar->wmi.num_mem_chunks); in ath10k_wmi_op_gen_init()
5296 buf = ath10k_wmi_alloc_skb(ar, len); in ath10k_wmi_op_gen_init()
5303 ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks); in ath10k_wmi_op_gen_init()
5305 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi init\n"); in ath10k_wmi_op_gen_init()
5309 static struct sk_buff *ath10k_wmi_10_1_op_gen_init(struct ath10k *ar) in ath10k_wmi_10_1_op_gen_init() argument
5327 config.rx_decap_mode = __cpu_to_le32(ar->wmi.rx_decap_mode); in ath10k_wmi_10_1_op_gen_init()
5359 (sizeof(struct host_memory_chunk) * ar->wmi.num_mem_chunks); in ath10k_wmi_10_1_op_gen_init()
5361 buf = ath10k_wmi_alloc_skb(ar, len); in ath10k_wmi_10_1_op_gen_init()
5368 ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks); in ath10k_wmi_10_1_op_gen_init()
5370 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi init 10x\n"); in ath10k_wmi_10_1_op_gen_init()
5374 static struct sk_buff *ath10k_wmi_10_2_op_gen_init(struct ath10k *ar) in ath10k_wmi_10_2_op_gen_init() argument
5392 config.rx_decap_mode = __cpu_to_le32(ar->wmi.rx_decap_mode); in ath10k_wmi_10_2_op_gen_init()
5425 (sizeof(struct host_memory_chunk) * ar->wmi.num_mem_chunks); in ath10k_wmi_10_2_op_gen_init()
5427 buf = ath10k_wmi_alloc_skb(ar, len); in ath10k_wmi_10_2_op_gen_init()
5434 if (test_bit(WMI_SERVICE_COEX_GPIO, ar->wmi.svc_map)) in ath10k_wmi_10_2_op_gen_init()
5439 ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks); in ath10k_wmi_10_2_op_gen_init()
5441 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi init 10.2\n"); in ath10k_wmi_10_2_op_gen_init()
5445 static struct sk_buff *ath10k_wmi_10_4_op_gen_init(struct ath10k *ar) in ath10k_wmi_10_4_op_gen_init() argument
5452 config.num_vdevs = __cpu_to_le32(ar->max_num_vdevs); in ath10k_wmi_10_4_op_gen_init()
5453 config.num_peers = __cpu_to_le32(ar->max_num_peers); in ath10k_wmi_10_4_op_gen_init()
5454 config.num_active_peers = __cpu_to_le32(ar->num_active_peers); in ath10k_wmi_10_4_op_gen_init()
5455 config.num_tids = __cpu_to_le32(ar->num_tids); in ath10k_wmi_10_4_op_gen_init()
5470 config.rx_decap_mode = __cpu_to_le32(ar->wmi.rx_decap_mode); in ath10k_wmi_10_4_op_gen_init()
5513 (sizeof(struct host_memory_chunk) * ar->wmi.num_mem_chunks); in ath10k_wmi_10_4_op_gen_init()
5515 buf = ath10k_wmi_alloc_skb(ar, len); in ath10k_wmi_10_4_op_gen_init()
5521 ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks); in ath10k_wmi_10_4_op_gen_init()
5523 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi init 10.4\n"); in ath10k_wmi_10_4_op_gen_init()
5674 ath10k_wmi_op_gen_start_scan(struct ath10k *ar, in ath10k_wmi_op_gen_start_scan() argument
5687 skb = ath10k_wmi_alloc_skb(ar, len); in ath10k_wmi_op_gen_start_scan()
5698 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi start scan\n"); in ath10k_wmi_op_gen_start_scan()
5703 ath10k_wmi_10x_op_gen_start_scan(struct ath10k *ar, in ath10k_wmi_10x_op_gen_start_scan() argument
5716 skb = ath10k_wmi_alloc_skb(ar, len); in ath10k_wmi_10x_op_gen_start_scan()
5725 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi 10x start scan\n"); in ath10k_wmi_10x_op_gen_start_scan()
5729 void ath10k_wmi_start_scan_init(struct ath10k *ar, in ath10k_wmi_start_scan_init() argument
5755 ath10k_wmi_op_gen_stop_scan(struct ath10k *ar, in ath10k_wmi_op_gen_stop_scan() argument
5768 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_stop_scan()
5784 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_stop_scan()
5791 ath10k_wmi_op_gen_vdev_create(struct ath10k *ar, u32 vdev_id, in ath10k_wmi_op_gen_vdev_create() argument
5799 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_vdev_create()
5809 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_vdev_create()
5816 ath10k_wmi_op_gen_vdev_delete(struct ath10k *ar, u32 vdev_id) in ath10k_wmi_op_gen_vdev_delete() argument
5821 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_vdev_delete()
5828 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_vdev_delete()
5834 ath10k_wmi_op_gen_vdev_start(struct ath10k *ar, in ath10k_wmi_op_gen_vdev_start() argument
5853 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_vdev_start()
5878 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_vdev_start()
5888 ath10k_wmi_op_gen_vdev_stop(struct ath10k *ar, u32 vdev_id) in ath10k_wmi_op_gen_vdev_stop() argument
5893 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_vdev_stop()
5900 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi vdev stop id 0x%x\n", vdev_id); in ath10k_wmi_op_gen_vdev_stop()
5905 ath10k_wmi_op_gen_vdev_up(struct ath10k *ar, u32 vdev_id, u32 aid, in ath10k_wmi_op_gen_vdev_up() argument
5911 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_vdev_up()
5920 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_vdev_up()
5927 ath10k_wmi_op_gen_vdev_down(struct ath10k *ar, u32 vdev_id) in ath10k_wmi_op_gen_vdev_down() argument
5932 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_vdev_down()
5939 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_vdev_down()
5945 ath10k_wmi_op_gen_vdev_set_param(struct ath10k *ar, u32 vdev_id, in ath10k_wmi_op_gen_vdev_set_param() argument
5952 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_vdev_set_param()
5958 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_vdev_set_param()
5967 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_vdev_set_param()
5974 ath10k_wmi_op_gen_vdev_install_key(struct ath10k *ar, in ath10k_wmi_op_gen_vdev_install_key() argument
5985 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd) + arg->key_len); in ath10k_wmi_op_gen_vdev_install_key()
6003 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_vdev_install_key()
6010 ath10k_wmi_op_gen_vdev_spectral_conf(struct ath10k *ar, in ath10k_wmi_op_gen_vdev_spectral_conf() argument
6016 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_vdev_spectral_conf()
6045 ath10k_wmi_op_gen_vdev_spectral_enable(struct ath10k *ar, u32 vdev_id, in ath10k_wmi_op_gen_vdev_spectral_enable() argument
6051 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_vdev_spectral_enable()
6064 ath10k_wmi_op_gen_peer_create(struct ath10k *ar, u32 vdev_id, in ath10k_wmi_op_gen_peer_create() argument
6071 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_peer_create()
6079 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_peer_create()
6086 ath10k_wmi_op_gen_peer_delete(struct ath10k *ar, u32 vdev_id, in ath10k_wmi_op_gen_peer_delete() argument
6092 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_peer_delete()
6100 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_peer_delete()
6107 ath10k_wmi_op_gen_peer_flush(struct ath10k *ar, u32 vdev_id, in ath10k_wmi_op_gen_peer_flush() argument
6113 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_peer_flush()
6122 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_peer_flush()
6129 ath10k_wmi_op_gen_peer_set_param(struct ath10k *ar, u32 vdev_id, in ath10k_wmi_op_gen_peer_set_param() argument
6137 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_peer_set_param()
6147 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_peer_set_param()
6154 ath10k_wmi_op_gen_set_psmode(struct ath10k *ar, u32 vdev_id, in ath10k_wmi_op_gen_set_psmode() argument
6160 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_set_psmode()
6168 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_set_psmode()
6175 ath10k_wmi_op_gen_set_sta_ps(struct ath10k *ar, u32 vdev_id, in ath10k_wmi_op_gen_set_sta_ps() argument
6182 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_set_sta_ps()
6191 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_set_sta_ps()
6198 ath10k_wmi_op_gen_set_ap_ps(struct ath10k *ar, u32 vdev_id, const u8 *mac, in ath10k_wmi_op_gen_set_ap_ps() argument
6207 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_set_ap_ps()
6217 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_set_ap_ps()
6224 ath10k_wmi_op_gen_scan_chan_list(struct ath10k *ar, in ath10k_wmi_op_gen_scan_chan_list() argument
6236 skb = ath10k_wmi_alloc_skb(ar, len); in ath10k_wmi_op_gen_scan_chan_list()
6254 ath10k_wmi_peer_assoc_fill(struct ath10k *ar, void *buf, in ath10k_wmi_peer_assoc_fill() argument
6296 ath10k_wmi_peer_assoc_fill_main(struct ath10k *ar, void *buf, in ath10k_wmi_peer_assoc_fill_main() argument
6301 ath10k_wmi_peer_assoc_fill(ar, buf, arg); in ath10k_wmi_peer_assoc_fill_main()
6306 ath10k_wmi_peer_assoc_fill_10_1(struct ath10k *ar, void *buf, in ath10k_wmi_peer_assoc_fill_10_1() argument
6309 ath10k_wmi_peer_assoc_fill(ar, buf, arg); in ath10k_wmi_peer_assoc_fill_10_1()
6313 ath10k_wmi_peer_assoc_fill_10_2(struct ath10k *ar, void *buf, in ath10k_wmi_peer_assoc_fill_10_2() argument
6327 ath10k_wmi_peer_assoc_fill(ar, buf, arg); in ath10k_wmi_peer_assoc_fill_10_2()
6345 ath10k_wmi_op_gen_peer_assoc(struct ath10k *ar, in ath10k_wmi_op_gen_peer_assoc() argument
6356 skb = ath10k_wmi_alloc_skb(ar, len); in ath10k_wmi_op_gen_peer_assoc()
6360 ath10k_wmi_peer_assoc_fill_main(ar, skb->data, arg); in ath10k_wmi_op_gen_peer_assoc()
6362 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_peer_assoc()
6370 ath10k_wmi_10_1_op_gen_peer_assoc(struct ath10k *ar, in ath10k_wmi_10_1_op_gen_peer_assoc() argument
6381 skb = ath10k_wmi_alloc_skb(ar, len); in ath10k_wmi_10_1_op_gen_peer_assoc()
6385 ath10k_wmi_peer_assoc_fill_10_1(ar, skb->data, arg); in ath10k_wmi_10_1_op_gen_peer_assoc()
6387 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_10_1_op_gen_peer_assoc()
6395 ath10k_wmi_10_2_op_gen_peer_assoc(struct ath10k *ar, in ath10k_wmi_10_2_op_gen_peer_assoc() argument
6406 skb = ath10k_wmi_alloc_skb(ar, len); in ath10k_wmi_10_2_op_gen_peer_assoc()
6410 ath10k_wmi_peer_assoc_fill_10_2(ar, skb->data, arg); in ath10k_wmi_10_2_op_gen_peer_assoc()
6412 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_10_2_op_gen_peer_assoc()
6420 ath10k_wmi_10_2_op_gen_pdev_get_temperature(struct ath10k *ar) in ath10k_wmi_10_2_op_gen_pdev_get_temperature() argument
6424 skb = ath10k_wmi_alloc_skb(ar, 0); in ath10k_wmi_10_2_op_gen_pdev_get_temperature()
6428 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi pdev get temperature\n"); in ath10k_wmi_10_2_op_gen_pdev_get_temperature()
6434 ath10k_wmi_op_gen_beacon_dma(struct ath10k *ar, u32 vdev_id, const void *bcn, in ath10k_wmi_op_gen_beacon_dma() argument
6443 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_beacon_dma()
6480 ath10k_wmi_op_gen_pdev_set_wmm(struct ath10k *ar, in ath10k_wmi_op_gen_pdev_set_wmm() argument
6486 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_pdev_set_wmm()
6496 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi pdev set wmm params\n"); in ath10k_wmi_op_gen_pdev_set_wmm()
6501 ath10k_wmi_op_gen_request_stats(struct ath10k *ar, u32 stats_mask) in ath10k_wmi_op_gen_request_stats() argument
6506 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_request_stats()
6513 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi request stats 0x%08x\n", in ath10k_wmi_op_gen_request_stats()
6519 ath10k_wmi_op_gen_force_fw_hang(struct ath10k *ar, in ath10k_wmi_op_gen_force_fw_hang() argument
6525 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_force_fw_hang()
6533 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi force fw hang %d delay %d\n", in ath10k_wmi_op_gen_force_fw_hang()
6539 ath10k_wmi_op_gen_dbglog_cfg(struct ath10k *ar, u32 module_enable, in ath10k_wmi_op_gen_dbglog_cfg() argument
6546 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_dbglog_cfg()
6567 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_dbglog_cfg()
6577 ath10k_wmi_op_gen_pktlog_enable(struct ath10k *ar, u32 ev_bitmap) in ath10k_wmi_op_gen_pktlog_enable() argument
6582 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_pktlog_enable()
6591 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi enable pktlog filter 0x%08x\n", in ath10k_wmi_op_gen_pktlog_enable()
6597 ath10k_wmi_op_gen_pktlog_disable(struct ath10k *ar) in ath10k_wmi_op_gen_pktlog_disable() argument
6601 skb = ath10k_wmi_alloc_skb(ar, 0); in ath10k_wmi_op_gen_pktlog_disable()
6605 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi disable pktlog\n"); in ath10k_wmi_op_gen_pktlog_disable()
6610 ath10k_wmi_op_gen_pdev_set_quiet_mode(struct ath10k *ar, u32 period, in ath10k_wmi_op_gen_pdev_set_quiet_mode() argument
6617 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_pdev_set_quiet_mode()
6627 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_pdev_set_quiet_mode()
6634 ath10k_wmi_op_gen_addba_clear_resp(struct ath10k *ar, u32 vdev_id, in ath10k_wmi_op_gen_addba_clear_resp() argument
6643 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_addba_clear_resp()
6651 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_addba_clear_resp()
6658 ath10k_wmi_op_gen_addba_send(struct ath10k *ar, u32 vdev_id, const u8 *mac, in ath10k_wmi_op_gen_addba_send() argument
6667 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_addba_send()
6677 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_addba_send()
6684 ath10k_wmi_op_gen_addba_set_resp(struct ath10k *ar, u32 vdev_id, const u8 *mac, in ath10k_wmi_op_gen_addba_set_resp() argument
6693 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_addba_set_resp()
6703 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_addba_set_resp()
6710 ath10k_wmi_op_gen_delba_send(struct ath10k *ar, u32 vdev_id, const u8 *mac, in ath10k_wmi_op_gen_delba_send() argument
6719 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_delba_send()
6730 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_delba_send()
6737 ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config(struct ath10k *ar, u32 param) in ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config() argument
6742 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config()
6749 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config()
7014 void ath10k_wmi_main_op_fw_stats_fill(struct ath10k *ar, in ath10k_wmi_main_op_fw_stats_fill() argument
7026 spin_lock_bh(&ar->data_lock); in ath10k_wmi_main_op_fw_stats_fill()
7031 ath10k_warn(ar, "failed to get pdev stats\n"); in ath10k_wmi_main_op_fw_stats_fill()
7063 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_main_op_fw_stats_fill()
7071 void ath10k_wmi_10x_op_fw_stats_fill(struct ath10k *ar, in ath10k_wmi_10x_op_fw_stats_fill() argument
7083 spin_lock_bh(&ar->data_lock); in ath10k_wmi_10x_op_fw_stats_fill()
7088 ath10k_warn(ar, "failed to get pdev stats\n"); in ath10k_wmi_10x_op_fw_stats_fill()
7121 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_10x_op_fw_stats_fill()
7130 ath10k_wmi_op_gen_pdev_enable_adaptive_cca(struct ath10k *ar, u8 enable, in ath10k_wmi_op_gen_pdev_enable_adaptive_cca() argument
7136 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd)); in ath10k_wmi_op_gen_pdev_enable_adaptive_cca()
7145 ath10k_dbg(ar, ATH10K_DBG_WMI, in ath10k_wmi_op_gen_pdev_enable_adaptive_cca()
7151 void ath10k_wmi_10_4_op_fw_stats_fill(struct ath10k *ar, in ath10k_wmi_10_4_op_fw_stats_fill() argument
7163 spin_lock_bh(&ar->data_lock); in ath10k_wmi_10_4_op_fw_stats_fill()
7168 ath10k_warn(ar, "failed to get pdev stats\n"); in ath10k_wmi_10_4_op_fw_stats_fill()
7227 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_10_4_op_fw_stats_fill()
7562 int ath10k_wmi_attach(struct ath10k *ar) in ath10k_wmi_attach() argument
7564 switch (ar->wmi.op_version) { in ath10k_wmi_attach()
7566 ar->wmi.ops = &wmi_10_4_ops; in ath10k_wmi_attach()
7567 ar->wmi.cmd = &wmi_10_4_cmd_map; in ath10k_wmi_attach()
7568 ar->wmi.vdev_param = &wmi_10_4_vdev_param_map; in ath10k_wmi_attach()
7569 ar->wmi.pdev_param = &wmi_10_4_pdev_param_map; in ath10k_wmi_attach()
7572 ar->wmi.cmd = &wmi_10_2_4_cmd_map; in ath10k_wmi_attach()
7573 ar->wmi.ops = &wmi_10_2_4_ops; in ath10k_wmi_attach()
7574 ar->wmi.vdev_param = &wmi_10_2_4_vdev_param_map; in ath10k_wmi_attach()
7575 ar->wmi.pdev_param = &wmi_10_2_4_pdev_param_map; in ath10k_wmi_attach()
7578 ar->wmi.cmd = &wmi_10_2_cmd_map; in ath10k_wmi_attach()
7579 ar->wmi.ops = &wmi_10_2_ops; in ath10k_wmi_attach()
7580 ar->wmi.vdev_param = &wmi_10x_vdev_param_map; in ath10k_wmi_attach()
7581 ar->wmi.pdev_param = &wmi_10x_pdev_param_map; in ath10k_wmi_attach()
7584 ar->wmi.cmd = &wmi_10x_cmd_map; in ath10k_wmi_attach()
7585 ar->wmi.ops = &wmi_10_1_ops; in ath10k_wmi_attach()
7586 ar->wmi.vdev_param = &wmi_10x_vdev_param_map; in ath10k_wmi_attach()
7587 ar->wmi.pdev_param = &wmi_10x_pdev_param_map; in ath10k_wmi_attach()
7590 ar->wmi.cmd = &wmi_cmd_map; in ath10k_wmi_attach()
7591 ar->wmi.ops = &wmi_ops; in ath10k_wmi_attach()
7592 ar->wmi.vdev_param = &wmi_vdev_param_map; in ath10k_wmi_attach()
7593 ar->wmi.pdev_param = &wmi_pdev_param_map; in ath10k_wmi_attach()
7596 ath10k_wmi_tlv_attach(ar); in ath10k_wmi_attach()
7600 ath10k_err(ar, "unsupported WMI op version: %d\n", in ath10k_wmi_attach()
7601 ar->wmi.op_version); in ath10k_wmi_attach()
7605 init_completion(&ar->wmi.service_ready); in ath10k_wmi_attach()
7606 init_completion(&ar->wmi.unified_ready); in ath10k_wmi_attach()
7608 INIT_WORK(&ar->svc_rdy_work, ath10k_wmi_event_service_ready_work); in ath10k_wmi_attach()
7613 void ath10k_wmi_free_host_mem(struct ath10k *ar) in ath10k_wmi_free_host_mem() argument
7618 for (i = 0; i < ar->wmi.num_mem_chunks; i++) { in ath10k_wmi_free_host_mem()
7619 dma_free_coherent(ar->dev, in ath10k_wmi_free_host_mem()
7620 ar->wmi.mem_chunks[i].len, in ath10k_wmi_free_host_mem()
7621 ar->wmi.mem_chunks[i].vaddr, in ath10k_wmi_free_host_mem()
7622 ar->wmi.mem_chunks[i].paddr); in ath10k_wmi_free_host_mem()
7625 ar->wmi.num_mem_chunks = 0; in ath10k_wmi_free_host_mem()
7628 void ath10k_wmi_detach(struct ath10k *ar) in ath10k_wmi_detach() argument
7630 cancel_work_sync(&ar->svc_rdy_work); in ath10k_wmi_detach()
7632 if (ar->svc_rdy_skb) in ath10k_wmi_detach()
7633 dev_kfree_skb(ar->svc_rdy_skb); in ath10k_wmi_detach()