Lines Matching +full:ftm +full:- +full:src
1 // SPDX-License-Identifier: ISC
3 * Copyright (c) 2005-2011 Atheros Communications Inc.
4 * Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
5 * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
6 * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
16 #include "wmi-tlv.h"
19 #include "wmi-ops.h"
1707 if (arg->passive) in ath10k_wmi_put_wmi_channel()
1709 if (arg->allow_ibss) in ath10k_wmi_put_wmi_channel()
1711 if (arg->allow_ht) in ath10k_wmi_put_wmi_channel()
1713 if (arg->allow_vht) in ath10k_wmi_put_wmi_channel()
1715 if (arg->ht40plus) in ath10k_wmi_put_wmi_channel()
1717 if (arg->chan_radar) in ath10k_wmi_put_wmi_channel()
1720 ch->band_center_freq2 = 0; in ath10k_wmi_put_wmi_channel()
1721 ch->mhz = __cpu_to_le32(arg->freq); in ath10k_wmi_put_wmi_channel()
1722 ch->band_center_freq1 = __cpu_to_le32(arg->band_center_freq1); in ath10k_wmi_put_wmi_channel()
1723 if (arg->mode == MODE_11AC_VHT80_80) { in ath10k_wmi_put_wmi_channel()
1724 ch->band_center_freq2 = __cpu_to_le32(arg->band_center_freq2); in ath10k_wmi_put_wmi_channel()
1725 chan = ieee80211_get_channel(ar->hw->wiphy, in ath10k_wmi_put_wmi_channel()
1726 arg->band_center_freq2 - 10); in ath10k_wmi_put_wmi_channel()
1729 if (arg->mode == MODE_11AC_VHT160) { in ath10k_wmi_put_wmi_channel()
1733 if (arg->freq > arg->band_center_freq1) { in ath10k_wmi_put_wmi_channel()
1734 band_center_freq1 = arg->band_center_freq1 + 40; in ath10k_wmi_put_wmi_channel()
1735 band_center_freq2 = arg->band_center_freq1 - 40; in ath10k_wmi_put_wmi_channel()
1737 band_center_freq1 = arg->band_center_freq1 - 40; in ath10k_wmi_put_wmi_channel()
1738 band_center_freq2 = arg->band_center_freq1 + 40; in ath10k_wmi_put_wmi_channel()
1741 ch->band_center_freq1 = in ath10k_wmi_put_wmi_channel()
1744 chan = ieee80211_get_channel(ar->hw->wiphy, in ath10k_wmi_put_wmi_channel()
1745 band_center_freq2 - 10); in ath10k_wmi_put_wmi_channel()
1747 ch->band_center_freq2 = __cpu_to_le32(arg->band_center_freq1); in ath10k_wmi_put_wmi_channel()
1750 if (chan && chan->flags & IEEE80211_CHAN_RADAR) in ath10k_wmi_put_wmi_channel()
1753 ch->min_power = arg->min_power; in ath10k_wmi_put_wmi_channel()
1754 ch->max_power = arg->max_power; in ath10k_wmi_put_wmi_channel()
1755 ch->reg_power = arg->max_reg_power; in ath10k_wmi_put_wmi_channel()
1756 ch->antenna_max = arg->max_antenna_gain; in ath10k_wmi_put_wmi_channel()
1757 ch->max_tx_power = arg->max_power; in ath10k_wmi_put_wmi_channel()
1760 ch->mode = arg->mode; in ath10k_wmi_put_wmi_channel()
1761 ch->flags |= __cpu_to_le32(flags); in ath10k_wmi_put_wmi_channel()
1768 time_left = wait_for_completion_timeout(&ar->wmi.service_ready, in ath10k_wmi_wait_for_service_ready()
1782 time_left = wait_for_completion_timeout(&ar->wmi.service_ready, in ath10k_wmi_wait_for_service_ready()
1786 return -ETIMEDOUT; in ath10k_wmi_wait_for_service_ready()
1799 time_left = wait_for_completion_timeout(&ar->wmi.unified_ready, in ath10k_wmi_wait_for_unified_ready()
1802 return -ETIMEDOUT; in ath10k_wmi_wait_for_unified_ready()
1816 if (!IS_ALIGNED((unsigned long)skb->data, 4)) in ath10k_wmi_alloc_skb()
1820 memset(skb->data, 0, round_len); in ath10k_wmi_alloc_skb()
1839 return -ENOMEM; in ath10k_wmi_cmd_send_nowait()
1843 cmd_hdr = (struct wmi_cmd_hdr *)skb->data; in ath10k_wmi_cmd_send_nowait()
1844 cmd_hdr->cmd_id = __cpu_to_le32(cmd); in ath10k_wmi_cmd_send_nowait()
1847 trace_ath10k_wmi_cmd(ar, cmd_id, skb->data, skb->len); in ath10k_wmi_cmd_send_nowait()
1848 ret = ath10k_htc_send(&ar->htc, ar->wmi.eid, skb); in ath10k_wmi_cmd_send_nowait()
1862 struct ath10k *ar = arvif->ar; in ath10k_wmi_tx_beacon_nowait()
1869 spin_lock_bh(&ar->data_lock); in ath10k_wmi_tx_beacon_nowait()
1871 bcn = arvif->beacon; in ath10k_wmi_tx_beacon_nowait()
1878 switch (arvif->beacon_state) { in ath10k_wmi_tx_beacon_nowait()
1883 arvif->beacon_state = ATH10K_BEACON_SENDING; in ath10k_wmi_tx_beacon_nowait()
1884 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_tx_beacon_nowait()
1886 dtim_zero = !!(cb->flags & ATH10K_SKB_F_DTIM_ZERO); in ath10k_wmi_tx_beacon_nowait()
1887 deliver_cab = !!(cb->flags & ATH10K_SKB_F_DELIVER_CAB); in ath10k_wmi_tx_beacon_nowait()
1888 ret = ath10k_wmi_beacon_send_ref_nowait(arvif->ar, in ath10k_wmi_tx_beacon_nowait()
1889 arvif->vdev_id, in ath10k_wmi_tx_beacon_nowait()
1890 bcn->data, bcn->len, in ath10k_wmi_tx_beacon_nowait()
1891 cb->paddr, in ath10k_wmi_tx_beacon_nowait()
1895 spin_lock_bh(&ar->data_lock); in ath10k_wmi_tx_beacon_nowait()
1898 arvif->beacon_state = ATH10K_BEACON_SENT; in ath10k_wmi_tx_beacon_nowait()
1900 arvif->beacon_state = ATH10K_BEACON_SCHEDULED; in ath10k_wmi_tx_beacon_nowait()
1904 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_tx_beacon_nowait()
1910 struct ath10k_vif *arvif = (void *)vif->drv_priv; in ath10k_wmi_tx_beacons_iter()
1917 ieee80211_iterate_active_interfaces_atomic(ar->hw, in ath10k_wmi_tx_beacons_nowait()
1928 wake_up(&ar->wmi.tx_credits_wq); in ath10k_wmi_op_ep_tx_credits()
1933 int ret = -EOPNOTSUPP; in ath10k_wmi_cmd_send()
1943 wait_event_timeout(ar->wmi.tx_credits_wq, ({ in ath10k_wmi_cmd_send()
1949 if (ret && test_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags)) in ath10k_wmi_cmd_send()
1950 ret = -ESHUTDOWN; in ath10k_wmi_cmd_send()
1952 (ret != -EAGAIN); in ath10k_wmi_cmd_send()
1958 if (ret == -EAGAIN) { in ath10k_wmi_cmd_send()
1977 u32 buf_len = msdu->len; in ath10k_wmi_op_gen_mgmt_tx()
1981 hdr = (struct ieee80211_hdr *)msdu->data; in ath10k_wmi_op_gen_mgmt_tx()
1982 fc = le16_to_cpu(hdr->frame_control); in ath10k_wmi_op_gen_mgmt_tx()
1984 if (cb->vif) { in ath10k_wmi_op_gen_mgmt_tx()
1985 arvif = (void *)cb->vif->drv_priv; in ath10k_wmi_op_gen_mgmt_tx()
1986 vdev_id = arvif->vdev_id; in ath10k_wmi_op_gen_mgmt_tx()
1991 if (WARN_ON_ONCE(!ieee80211_is_mgmt(hdr->frame_control))) in ath10k_wmi_op_gen_mgmt_tx()
1992 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_mgmt_tx()
1994 len = sizeof(cmd->hdr) + msdu->len; in ath10k_wmi_op_gen_mgmt_tx()
1996 if ((ieee80211_is_action(hdr->frame_control) || in ath10k_wmi_op_gen_mgmt_tx()
1997 ieee80211_is_deauth(hdr->frame_control) || in ath10k_wmi_op_gen_mgmt_tx()
1998 ieee80211_is_disassoc(hdr->frame_control)) && in ath10k_wmi_op_gen_mgmt_tx()
1999 ieee80211_has_protected(hdr->frame_control)) { in ath10k_wmi_op_gen_mgmt_tx()
2000 peer_addr = hdr->addr1; in ath10k_wmi_op_gen_mgmt_tx()
2005 if (cb->ucast_cipher == WLAN_CIPHER_SUITE_GCMP || in ath10k_wmi_op_gen_mgmt_tx()
2006 cb->ucast_cipher == WLAN_CIPHER_SUITE_GCMP_256) { in ath10k_wmi_op_gen_mgmt_tx()
2020 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_mgmt_tx()
2022 cmd = (struct wmi_mgmt_tx_cmd *)skb->data; in ath10k_wmi_op_gen_mgmt_tx()
2024 cmd->hdr.vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_mgmt_tx()
2025 cmd->hdr.tx_rate = 0; in ath10k_wmi_op_gen_mgmt_tx()
2026 cmd->hdr.tx_power = 0; in ath10k_wmi_op_gen_mgmt_tx()
2027 cmd->hdr.buf_len = __cpu_to_le32(buf_len); in ath10k_wmi_op_gen_mgmt_tx()
2029 ether_addr_copy(cmd->hdr.peer_macaddr.addr, ieee80211_get_DA(hdr)); in ath10k_wmi_op_gen_mgmt_tx()
2030 memcpy(cmd->buf, msdu->data, msdu->len); in ath10k_wmi_op_gen_mgmt_tx()
2033 msdu, skb->len, fc & IEEE80211_FCTL_FTYPE, in ath10k_wmi_op_gen_mgmt_tx()
2035 trace_ath10k_tx_hdr(ar, skb->data, skb->len); in ath10k_wmi_op_gen_mgmt_tx()
2036 trace_ath10k_tx_payload(ar, skb->data, skb->len); in ath10k_wmi_op_gen_mgmt_tx()
2043 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_scan_started()
2045 switch (ar->scan.state) { in ath10k_wmi_event_scan_started()
2050 ath10k_scan_state_str(ar->scan.state), in ath10k_wmi_event_scan_started()
2051 ar->scan.state); in ath10k_wmi_event_scan_started()
2054 ar->scan.state = ATH10K_SCAN_RUNNING; in ath10k_wmi_event_scan_started()
2056 if (ar->scan.is_roc) in ath10k_wmi_event_scan_started()
2057 ieee80211_ready_on_channel(ar->hw); in ath10k_wmi_event_scan_started()
2059 complete(&ar->scan.started); in ath10k_wmi_event_scan_started()
2066 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_scan_start_failed()
2068 switch (ar->scan.state) { in ath10k_wmi_event_scan_start_failed()
2073 ath10k_scan_state_str(ar->scan.state), in ath10k_wmi_event_scan_start_failed()
2074 ar->scan.state); in ath10k_wmi_event_scan_start_failed()
2077 complete(&ar->scan.started); in ath10k_wmi_event_scan_start_failed()
2085 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_scan_completed()
2087 switch (ar->scan.state) { in ath10k_wmi_event_scan_completed()
2099 ath10k_scan_state_str(ar->scan.state), in ath10k_wmi_event_scan_completed()
2100 ar->scan.state); in ath10k_wmi_event_scan_completed()
2111 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_scan_bss_chan()
2113 switch (ar->scan.state) { in ath10k_wmi_event_scan_bss_chan()
2117 ath10k_scan_state_str(ar->scan.state), in ath10k_wmi_event_scan_bss_chan()
2118 ar->scan.state); in ath10k_wmi_event_scan_bss_chan()
2122 ar->scan_channel = NULL; in ath10k_wmi_event_scan_bss_chan()
2129 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_scan_foreign_chan()
2131 switch (ar->scan.state) { in ath10k_wmi_event_scan_foreign_chan()
2135 ath10k_scan_state_str(ar->scan.state), in ath10k_wmi_event_scan_foreign_chan()
2136 ar->scan.state); in ath10k_wmi_event_scan_foreign_chan()
2140 ar->scan_channel = ieee80211_get_channel(ar->hw->wiphy, freq); in ath10k_wmi_event_scan_foreign_chan()
2142 if (ar->scan.is_roc && ar->scan.roc_freq == freq) in ath10k_wmi_event_scan_foreign_chan()
2143 complete(&ar->scan.on_channel); in ath10k_wmi_event_scan_foreign_chan()
2193 struct wmi_scan_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_scan_ev()
2195 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_scan_ev()
2196 return -EPROTO; in ath10k_wmi_op_pull_scan_ev()
2199 arg->event_type = ev->event_type; in ath10k_wmi_op_pull_scan_ev()
2200 arg->reason = ev->reason; in ath10k_wmi_op_pull_scan_ev()
2201 arg->channel_freq = ev->channel_freq; in ath10k_wmi_op_pull_scan_ev()
2202 arg->scan_req_id = ev->scan_req_id; in ath10k_wmi_op_pull_scan_ev()
2203 arg->scan_id = ev->scan_id; in ath10k_wmi_op_pull_scan_ev()
2204 arg->vdev_id = ev->vdev_id; in ath10k_wmi_op_pull_scan_ev()
2233 spin_lock_bh(&ar->data_lock); in ath10k_wmi_event_scan()
2239 ath10k_scan_state_str(ar->scan.state), ar->scan.state); in ath10k_wmi_event_scan()
2266 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_event_scan()
2277 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; in ath10k_wmi_handle_wep_reauth()
2282 if (!ieee80211_is_auth(hdr->frame_control) || in ath10k_wmi_handle_wep_reauth()
2283 !ieee80211_has_protected(hdr->frame_control)) in ath10k_wmi_handle_wep_reauth()
2286 hdrlen = ieee80211_hdrlen(hdr->frame_control); in ath10k_wmi_handle_wep_reauth()
2287 if (skb->len < (hdrlen + IEEE80211_WEP_IV_LEN)) in ath10k_wmi_handle_wep_reauth()
2290 keyidx = skb->data[hdrlen + (IEEE80211_WEP_IV_LEN - 1)] >> WEP_KEYID_SHIFT; in ath10k_wmi_handle_wep_reauth()
2293 spin_lock_bh(&ar->data_lock); in ath10k_wmi_handle_wep_reauth()
2295 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_handle_wep_reauth()
2300 status->flag |= RX_FLAG_DECRYPTED; in ath10k_wmi_handle_wep_reauth()
2316 ar->running_fw->fw_file.fw_features)) { in ath10k_wmi_op_pull_mgmt_rx_ev()
2317 ev_v2 = (struct wmi_mgmt_rx_event_v2 *)skb->data; in ath10k_wmi_op_pull_mgmt_rx_ev()
2318 ev_hdr = &ev_v2->hdr.v1; in ath10k_wmi_op_pull_mgmt_rx_ev()
2321 ev_v1 = (struct wmi_mgmt_rx_event_v1 *)skb->data; in ath10k_wmi_op_pull_mgmt_rx_ev()
2322 ev_hdr = &ev_v1->hdr; in ath10k_wmi_op_pull_mgmt_rx_ev()
2326 if (skb->len < pull_len) in ath10k_wmi_op_pull_mgmt_rx_ev()
2327 return -EPROTO; in ath10k_wmi_op_pull_mgmt_rx_ev()
2330 arg->channel = ev_hdr->channel; in ath10k_wmi_op_pull_mgmt_rx_ev()
2331 arg->buf_len = ev_hdr->buf_len; in ath10k_wmi_op_pull_mgmt_rx_ev()
2332 arg->status = ev_hdr->status; in ath10k_wmi_op_pull_mgmt_rx_ev()
2333 arg->snr = ev_hdr->snr; in ath10k_wmi_op_pull_mgmt_rx_ev()
2334 arg->phy_mode = ev_hdr->phy_mode; in ath10k_wmi_op_pull_mgmt_rx_ev()
2335 arg->rate = ev_hdr->rate; in ath10k_wmi_op_pull_mgmt_rx_ev()
2337 msdu_len = __le32_to_cpu(arg->buf_len); in ath10k_wmi_op_pull_mgmt_rx_ev()
2338 if (skb->len < msdu_len) in ath10k_wmi_op_pull_mgmt_rx_ev()
2339 return -EPROTO; in ath10k_wmi_op_pull_mgmt_rx_ev()
2341 if (le32_to_cpu(arg->status) & WMI_RX_STATUS_EXT_INFO) { in ath10k_wmi_op_pull_mgmt_rx_ev()
2342 len = ALIGN(le32_to_cpu(arg->buf_len), 4); in ath10k_wmi_op_pull_mgmt_rx_ev()
2343 ext_info = (struct wmi_mgmt_rx_ext_info *)(skb->data + len); in ath10k_wmi_op_pull_mgmt_rx_ev()
2344 memcpy(&arg->ext_info, ext_info, in ath10k_wmi_op_pull_mgmt_rx_ev()
2366 ev = (struct wmi_10_4_mgmt_rx_event *)skb->data; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2367 ev_hdr = &ev->hdr; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2370 if (skb->len < pull_len) in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2371 return -EPROTO; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2374 arg->channel = ev_hdr->channel; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2375 arg->buf_len = ev_hdr->buf_len; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2376 arg->status = ev_hdr->status; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2377 arg->snr = ev_hdr->snr; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2378 arg->phy_mode = ev_hdr->phy_mode; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2379 arg->rate = ev_hdr->rate; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2381 msdu_len = __le32_to_cpu(arg->buf_len); in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2382 if (skb->len < msdu_len) in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2383 return -EPROTO; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2385 if (le32_to_cpu(arg->status) & WMI_RX_STATUS_EXT_INFO) { in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2386 len = ALIGN(le32_to_cpu(arg->buf_len), 4); in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2387 ext_info = (struct wmi_mgmt_rx_ext_info *)(skb->data + len); in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2388 memcpy(&arg->ext_info, ext_info, in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2401 if (!ieee80211_has_protected(hdr->frame_control)) in ath10k_wmi_rx_is_decrypted()
2408 if (ieee80211_is_auth(hdr->frame_control)) in ath10k_wmi_rx_is_decrypted()
2415 ar->hw_params.sw_decrypt_mcast_mgmt) in ath10k_wmi_rx_is_decrypted()
2425 struct ath10k_wmi *wmi = &ar->wmi; in wmi_process_mgmt_tx_comp()
2430 spin_lock_bh(&ar->data_lock); in wmi_process_mgmt_tx_comp()
2432 pkt_addr = idr_find(&wmi->mgmt_pending_tx, param->desc_id); in wmi_process_mgmt_tx_comp()
2435 param->desc_id); in wmi_process_mgmt_tx_comp()
2436 ret = -ENOENT; in wmi_process_mgmt_tx_comp()
2440 msdu = pkt_addr->vaddr; in wmi_process_mgmt_tx_comp()
2441 dma_unmap_single(ar->dev, pkt_addr->paddr, in wmi_process_mgmt_tx_comp()
2442 msdu->len, DMA_TO_DEVICE); in wmi_process_mgmt_tx_comp()
2446 if (param->status) { in wmi_process_mgmt_tx_comp()
2447 info->flags &= ~IEEE80211_TX_STAT_ACK; in wmi_process_mgmt_tx_comp()
2449 info->flags |= IEEE80211_TX_STAT_ACK; in wmi_process_mgmt_tx_comp()
2450 info->status.ack_signal = ATH10K_DEFAULT_NOISE_FLOOR + in wmi_process_mgmt_tx_comp()
2451 param->ack_rssi; in wmi_process_mgmt_tx_comp()
2452 info->status.flags |= IEEE80211_TX_STATUS_ACK_SIGNAL_VALID; in wmi_process_mgmt_tx_comp()
2455 ieee80211_tx_status_irqsafe(ar->hw, msdu); in wmi_process_mgmt_tx_comp()
2460 idr_remove(&wmi->mgmt_pending_tx, param->desc_id); in wmi_process_mgmt_tx_comp()
2461 spin_unlock_bh(&ar->data_lock); in wmi_process_mgmt_tx_comp()
2481 if (test_bit(WMI_SERVICE_TX_DATA_ACK_RSSI, ar->wmi.svc_map)) in ath10k_wmi_event_mgmt_tx_compl()
2511 if (test_bit(WMI_SERVICE_TX_DATA_ACK_RSSI, ar->wmi.svc_map)) in ath10k_wmi_event_mgmt_tx_bundle_compl()
2553 if ((test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags)) || in ath10k_wmi_event_mgmt_rx()
2561 status->flag |= RX_FLAG_MMIC_ERROR; in ath10k_wmi_event_mgmt_rx()
2564 status->mactime = in ath10k_wmi_event_mgmt_rx()
2566 status->flag |= RX_FLAG_MACTIME_END; in ath10k_wmi_event_mgmt_rx()
2573 status->band = NL80211_BAND_2GHZ; in ath10k_wmi_event_mgmt_rx()
2575 status->band = NL80211_BAND_5GHZ; in ath10k_wmi_event_mgmt_rx()
2585 if (phy_mode == MODE_11B && status->band == NL80211_BAND_5GHZ) in ath10k_wmi_event_mgmt_rx()
2588 sband = &ar->mac.sbands[status->band]; in ath10k_wmi_event_mgmt_rx()
2590 status->freq = ieee80211_channel_to_frequency(channel, status->band); in ath10k_wmi_event_mgmt_rx()
2591 status->signal = snr + ATH10K_DEFAULT_NOISE_FLOOR; in ath10k_wmi_event_mgmt_rx()
2593 BUILD_BUG_ON(ARRAY_SIZE(status->chain_signal) != ARRAY_SIZE(arg.rssi)); in ath10k_wmi_event_mgmt_rx()
2595 for (i = 0; i < ARRAY_SIZE(status->chain_signal); i++) { in ath10k_wmi_event_mgmt_rx()
2596 status->chains &= ~BIT(i); in ath10k_wmi_event_mgmt_rx()
2601 status->chain_signal[i] = ATH10K_DEFAULT_NOISE_FLOOR + rssi; in ath10k_wmi_event_mgmt_rx()
2602 status->chains |= BIT(i); in ath10k_wmi_event_mgmt_rx()
2606 status->rate_idx = ath10k_mac_bitrate_to_idx(sband, rate / 100); in ath10k_wmi_event_mgmt_rx()
2608 hdr = (struct ieee80211_hdr *)skb->data; in ath10k_wmi_event_mgmt_rx()
2609 fc = le16_to_cpu(hdr->frame_control); in ath10k_wmi_event_mgmt_rx()
2615 status->flag |= RX_FLAG_SKIP_MONITOR; in ath10k_wmi_event_mgmt_rx()
2620 status->flag |= RX_FLAG_DECRYPTED; in ath10k_wmi_event_mgmt_rx()
2622 if (!ieee80211_is_action(hdr->frame_control) && in ath10k_wmi_event_mgmt_rx()
2623 !ieee80211_is_deauth(hdr->frame_control) && in ath10k_wmi_event_mgmt_rx()
2624 !ieee80211_is_disassoc(hdr->frame_control)) { in ath10k_wmi_event_mgmt_rx()
2625 status->flag |= RX_FLAG_IV_STRIPPED | in ath10k_wmi_event_mgmt_rx()
2627 hdr->frame_control = __cpu_to_le16(fc & in ath10k_wmi_event_mgmt_rx()
2632 if (ieee80211_is_beacon(hdr->frame_control)) in ath10k_wmi_event_mgmt_rx()
2635 if (ieee80211_is_beacon(hdr->frame_control) || in ath10k_wmi_event_mgmt_rx()
2636 ieee80211_is_probe_resp(hdr->frame_control)) in ath10k_wmi_event_mgmt_rx()
2637 status->boottime_ns = ktime_get_boottime_ns(); in ath10k_wmi_event_mgmt_rx()
2641 skb, skb->len, in ath10k_wmi_event_mgmt_rx()
2646 status->freq, status->band, status->signal, in ath10k_wmi_event_mgmt_rx()
2647 status->rate_idx); in ath10k_wmi_event_mgmt_rx()
2649 ieee80211_rx_ni(ar->hw, skb); in ath10k_wmi_event_mgmt_rx()
2660 sband = ar->hw->wiphy->bands[band]; in freq_to_idx()
2664 for (ch = 0; ch < sband->n_channels; ch++, idx++) in freq_to_idx()
2665 if (sband->channels[ch].center_freq == freq) in freq_to_idx()
2676 struct wmi_chan_info_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_ch_info_ev()
2678 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_ch_info_ev()
2679 return -EPROTO; in ath10k_wmi_op_pull_ch_info_ev()
2682 arg->err_code = ev->err_code; in ath10k_wmi_op_pull_ch_info_ev()
2683 arg->freq = ev->freq; in ath10k_wmi_op_pull_ch_info_ev()
2684 arg->cmd_flags = ev->cmd_flags; in ath10k_wmi_op_pull_ch_info_ev()
2685 arg->noise_floor = ev->noise_floor; in ath10k_wmi_op_pull_ch_info_ev()
2686 arg->rx_clear_count = ev->rx_clear_count; in ath10k_wmi_op_pull_ch_info_ev()
2687 arg->cycle_count = ev->cycle_count; in ath10k_wmi_op_pull_ch_info_ev()
2696 struct wmi_10_4_chan_info_event *ev = (void *)skb->data; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2698 if (skb->len < sizeof(*ev)) in ath10k_wmi_10_4_op_pull_ch_info_ev()
2699 return -EPROTO; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2702 arg->err_code = ev->err_code; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2703 arg->freq = ev->freq; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2704 arg->cmd_flags = ev->cmd_flags; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2705 arg->noise_floor = ev->noise_floor; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2706 arg->rx_clear_count = ev->rx_clear_count; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2707 arg->cycle_count = ev->cycle_count; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2708 arg->chan_tx_pwr_range = ev->chan_tx_pwr_range; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2709 arg->chan_tx_pwr_tp = ev->chan_tx_pwr_tp; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2710 arg->rx_frame_count = ev->rx_frame_count; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2725 if (params->cmd_flags & WMI_CHAN_INFO_FLAG_COMPLETE) { in ath10k_wmi_event_chan_info_unpaired()
2730 idx = freq_to_idx(ar, params->freq); in ath10k_wmi_event_chan_info_unpaired()
2731 if (idx >= ARRAY_SIZE(ar->survey)) { in ath10k_wmi_event_chan_info_unpaired()
2733 params->freq, idx); in ath10k_wmi_event_chan_info_unpaired()
2737 survey = &ar->survey[idx]; in ath10k_wmi_event_chan_info_unpaired()
2739 if (!params->mac_clk_mhz) in ath10k_wmi_event_chan_info_unpaired()
2744 survey->noise = params->noise_floor; in ath10k_wmi_event_chan_info_unpaired()
2745 survey->time = (params->cycle_count / params->mac_clk_mhz) / 1000; in ath10k_wmi_event_chan_info_unpaired()
2746 survey->time_busy = (params->rx_clear_count / params->mac_clk_mhz) / 1000; in ath10k_wmi_event_chan_info_unpaired()
2747 survey->filled |= SURVEY_INFO_NOISE_DBM | SURVEY_INFO_TIME | in ath10k_wmi_event_chan_info_unpaired()
2761 idx = freq_to_idx(ar, params->freq); in ath10k_wmi_event_chan_info_paired()
2762 if (idx >= ARRAY_SIZE(ar->survey)) { in ath10k_wmi_event_chan_info_paired()
2764 params->freq, idx); in ath10k_wmi_event_chan_info_paired()
2768 if (params->cmd_flags & WMI_CHAN_INFO_FLAG_COMPLETE) { in ath10k_wmi_event_chan_info_paired()
2769 if (ar->ch_info_can_report_survey) { in ath10k_wmi_event_chan_info_paired()
2770 survey = &ar->survey[idx]; in ath10k_wmi_event_chan_info_paired()
2771 survey->noise = params->noise_floor; in ath10k_wmi_event_chan_info_paired()
2772 survey->filled = SURVEY_INFO_NOISE_DBM; in ath10k_wmi_event_chan_info_paired()
2776 params->cycle_count, in ath10k_wmi_event_chan_info_paired()
2777 params->rx_clear_count, in ath10k_wmi_event_chan_info_paired()
2778 ar->survey_last_cycle_count, in ath10k_wmi_event_chan_info_paired()
2779 ar->survey_last_rx_clear_count); in ath10k_wmi_event_chan_info_paired()
2782 ar->ch_info_can_report_survey = false; in ath10k_wmi_event_chan_info_paired()
2784 ar->ch_info_can_report_survey = true; in ath10k_wmi_event_chan_info_paired()
2787 if (!(params->cmd_flags & WMI_CHAN_INFO_FLAG_PRE_COMPLETE)) { in ath10k_wmi_event_chan_info_paired()
2788 ar->survey_last_rx_clear_count = params->rx_clear_count; in ath10k_wmi_event_chan_info_paired()
2789 ar->survey_last_cycle_count = params->cycle_count; in ath10k_wmi_event_chan_info_paired()
2819 spin_lock_bh(&ar->data_lock); in ath10k_wmi_event_chan_info()
2821 switch (ar->scan.state) { in ath10k_wmi_event_chan_info()
2832 ar->running_fw->fw_file.fw_features)) in ath10k_wmi_event_chan_info()
2838 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_event_chan_info()
2857 complete(&ar->wmi.barrier); in ath10k_wmi_event_echo()
2863 skb->len); in ath10k_wmi_event_debug_mesg()
2865 trace_ath10k_wmi_dbglog(ar, skb->data, skb->len); in ath10k_wmi_event_debug_mesg()
2870 void ath10k_wmi_pull_pdev_stats_base(const struct wmi_pdev_stats_base *src, in ath10k_wmi_pull_pdev_stats_base() argument
2873 dst->ch_noise_floor = __le32_to_cpu(src->chan_nf); in ath10k_wmi_pull_pdev_stats_base()
2874 dst->tx_frame_count = __le32_to_cpu(src->tx_frame_count); in ath10k_wmi_pull_pdev_stats_base()
2875 dst->rx_frame_count = __le32_to_cpu(src->rx_frame_count); in ath10k_wmi_pull_pdev_stats_base()
2876 dst->rx_clear_count = __le32_to_cpu(src->rx_clear_count); in ath10k_wmi_pull_pdev_stats_base()
2877 dst->cycle_count = __le32_to_cpu(src->cycle_count); in ath10k_wmi_pull_pdev_stats_base()
2878 dst->phy_err_count = __le32_to_cpu(src->phy_err_count); in ath10k_wmi_pull_pdev_stats_base()
2879 dst->chan_tx_power = __le32_to_cpu(src->chan_tx_pwr); in ath10k_wmi_pull_pdev_stats_base()
2882 void ath10k_wmi_pull_pdev_stats_tx(const struct wmi_pdev_stats_tx *src, in ath10k_wmi_pull_pdev_stats_tx() argument
2885 dst->comp_queued = __le32_to_cpu(src->comp_queued); in ath10k_wmi_pull_pdev_stats_tx()
2886 dst->comp_delivered = __le32_to_cpu(src->comp_delivered); in ath10k_wmi_pull_pdev_stats_tx()
2887 dst->msdu_enqued = __le32_to_cpu(src->msdu_enqued); in ath10k_wmi_pull_pdev_stats_tx()
2888 dst->mpdu_enqued = __le32_to_cpu(src->mpdu_enqued); in ath10k_wmi_pull_pdev_stats_tx()
2889 dst->wmm_drop = __le32_to_cpu(src->wmm_drop); in ath10k_wmi_pull_pdev_stats_tx()
2890 dst->local_enqued = __le32_to_cpu(src->local_enqued); in ath10k_wmi_pull_pdev_stats_tx()
2891 dst->local_freed = __le32_to_cpu(src->local_freed); in ath10k_wmi_pull_pdev_stats_tx()
2892 dst->hw_queued = __le32_to_cpu(src->hw_queued); in ath10k_wmi_pull_pdev_stats_tx()
2893 dst->hw_reaped = __le32_to_cpu(src->hw_reaped); in ath10k_wmi_pull_pdev_stats_tx()
2894 dst->underrun = __le32_to_cpu(src->underrun); in ath10k_wmi_pull_pdev_stats_tx()
2895 dst->tx_abort = __le32_to_cpu(src->tx_abort); in ath10k_wmi_pull_pdev_stats_tx()
2896 dst->mpdus_requeued = __le32_to_cpu(src->mpdus_requeued); in ath10k_wmi_pull_pdev_stats_tx()
2897 dst->tx_ko = __le32_to_cpu(src->tx_ko); in ath10k_wmi_pull_pdev_stats_tx()
2898 dst->data_rc = __le32_to_cpu(src->data_rc); in ath10k_wmi_pull_pdev_stats_tx()
2899 dst->self_triggers = __le32_to_cpu(src->self_triggers); in ath10k_wmi_pull_pdev_stats_tx()
2900 dst->sw_retry_failure = __le32_to_cpu(src->sw_retry_failure); in ath10k_wmi_pull_pdev_stats_tx()
2901 dst->illgl_rate_phy_err = __le32_to_cpu(src->illgl_rate_phy_err); in ath10k_wmi_pull_pdev_stats_tx()
2902 dst->pdev_cont_xretry = __le32_to_cpu(src->pdev_cont_xretry); in ath10k_wmi_pull_pdev_stats_tx()
2903 dst->pdev_tx_timeout = __le32_to_cpu(src->pdev_tx_timeout); in ath10k_wmi_pull_pdev_stats_tx()
2904 dst->pdev_resets = __le32_to_cpu(src->pdev_resets); in ath10k_wmi_pull_pdev_stats_tx()
2905 dst->phy_underrun = __le32_to_cpu(src->phy_underrun); in ath10k_wmi_pull_pdev_stats_tx()
2906 dst->txop_ovf = __le32_to_cpu(src->txop_ovf); in ath10k_wmi_pull_pdev_stats_tx()
2910 ath10k_wmi_10_4_pull_pdev_stats_tx(const struct wmi_10_4_pdev_stats_tx *src, in ath10k_wmi_10_4_pull_pdev_stats_tx() argument
2913 dst->comp_queued = __le32_to_cpu(src->comp_queued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2914 dst->comp_delivered = __le32_to_cpu(src->comp_delivered); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2915 dst->msdu_enqued = __le32_to_cpu(src->msdu_enqued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2916 dst->mpdu_enqued = __le32_to_cpu(src->mpdu_enqued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2917 dst->wmm_drop = __le32_to_cpu(src->wmm_drop); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2918 dst->local_enqued = __le32_to_cpu(src->local_enqued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2919 dst->local_freed = __le32_to_cpu(src->local_freed); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2920 dst->hw_queued = __le32_to_cpu(src->hw_queued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2921 dst->hw_reaped = __le32_to_cpu(src->hw_reaped); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2922 dst->underrun = __le32_to_cpu(src->underrun); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2923 dst->tx_abort = __le32_to_cpu(src->tx_abort); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2924 dst->mpdus_requeued = __le32_to_cpu(src->mpdus_requeued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2925 dst->tx_ko = __le32_to_cpu(src->tx_ko); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2926 dst->data_rc = __le32_to_cpu(src->data_rc); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2927 dst->self_triggers = __le32_to_cpu(src->self_triggers); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2928 dst->sw_retry_failure = __le32_to_cpu(src->sw_retry_failure); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2929 dst->illgl_rate_phy_err = __le32_to_cpu(src->illgl_rate_phy_err); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2930 dst->pdev_cont_xretry = __le32_to_cpu(src->pdev_cont_xretry); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2931 dst->pdev_tx_timeout = __le32_to_cpu(src->pdev_tx_timeout); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2932 dst->pdev_resets = __le32_to_cpu(src->pdev_resets); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2933 dst->phy_underrun = __le32_to_cpu(src->phy_underrun); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2934 dst->txop_ovf = __le32_to_cpu(src->txop_ovf); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2935 dst->hw_paused = __le32_to_cpu(src->hw_paused); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2936 dst->seq_posted = __le32_to_cpu(src->seq_posted); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2937 dst->seq_failed_queueing = in ath10k_wmi_10_4_pull_pdev_stats_tx()
2938 __le32_to_cpu(src->seq_failed_queueing); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2939 dst->seq_completed = __le32_to_cpu(src->seq_completed); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2940 dst->seq_restarted = __le32_to_cpu(src->seq_restarted); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2941 dst->mu_seq_posted = __le32_to_cpu(src->mu_seq_posted); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2942 dst->mpdus_sw_flush = __le32_to_cpu(src->mpdus_sw_flush); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2943 dst->mpdus_hw_filter = __le32_to_cpu(src->mpdus_hw_filter); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2944 dst->mpdus_truncated = __le32_to_cpu(src->mpdus_truncated); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2945 dst->mpdus_ack_failed = __le32_to_cpu(src->mpdus_ack_failed); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2946 dst->mpdus_hw_filter = __le32_to_cpu(src->mpdus_hw_filter); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2947 dst->mpdus_expired = __le32_to_cpu(src->mpdus_expired); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2950 void ath10k_wmi_pull_pdev_stats_rx(const struct wmi_pdev_stats_rx *src, in ath10k_wmi_pull_pdev_stats_rx() argument
2953 dst->mid_ppdu_route_change = __le32_to_cpu(src->mid_ppdu_route_change); in ath10k_wmi_pull_pdev_stats_rx()
2954 dst->status_rcvd = __le32_to_cpu(src->status_rcvd); in ath10k_wmi_pull_pdev_stats_rx()
2955 dst->r0_frags = __le32_to_cpu(src->r0_frags); in ath10k_wmi_pull_pdev_stats_rx()
2956 dst->r1_frags = __le32_to_cpu(src->r1_frags); in ath10k_wmi_pull_pdev_stats_rx()
2957 dst->r2_frags = __le32_to_cpu(src->r2_frags); in ath10k_wmi_pull_pdev_stats_rx()
2958 dst->r3_frags = __le32_to_cpu(src->r3_frags); in ath10k_wmi_pull_pdev_stats_rx()
2959 dst->htt_msdus = __le32_to_cpu(src->htt_msdus); in ath10k_wmi_pull_pdev_stats_rx()
2960 dst->htt_mpdus = __le32_to_cpu(src->htt_mpdus); in ath10k_wmi_pull_pdev_stats_rx()
2961 dst->loc_msdus = __le32_to_cpu(src->loc_msdus); in ath10k_wmi_pull_pdev_stats_rx()
2962 dst->loc_mpdus = __le32_to_cpu(src->loc_mpdus); in ath10k_wmi_pull_pdev_stats_rx()
2963 dst->oversize_amsdu = __le32_to_cpu(src->oversize_amsdu); in ath10k_wmi_pull_pdev_stats_rx()
2964 dst->phy_errs = __le32_to_cpu(src->phy_errs); in ath10k_wmi_pull_pdev_stats_rx()
2965 dst->phy_err_drop = __le32_to_cpu(src->phy_err_drop); in ath10k_wmi_pull_pdev_stats_rx()
2966 dst->mpdu_errs = __le32_to_cpu(src->mpdu_errs); in ath10k_wmi_pull_pdev_stats_rx()
2969 void ath10k_wmi_pull_pdev_stats_extra(const struct wmi_pdev_stats_extra *src, in ath10k_wmi_pull_pdev_stats_extra() argument
2972 dst->ack_rx_bad = __le32_to_cpu(src->ack_rx_bad); in ath10k_wmi_pull_pdev_stats_extra()
2973 dst->rts_bad = __le32_to_cpu(src->rts_bad); in ath10k_wmi_pull_pdev_stats_extra()
2974 dst->rts_good = __le32_to_cpu(src->rts_good); in ath10k_wmi_pull_pdev_stats_extra()
2975 dst->fcs_bad = __le32_to_cpu(src->fcs_bad); in ath10k_wmi_pull_pdev_stats_extra()
2976 dst->no_beacons = __le32_to_cpu(src->no_beacons); in ath10k_wmi_pull_pdev_stats_extra()
2977 dst->mib_int_count = __le32_to_cpu(src->mib_int_count); in ath10k_wmi_pull_pdev_stats_extra()
2980 void ath10k_wmi_pull_peer_stats(const struct wmi_peer_stats *src, in ath10k_wmi_pull_peer_stats() argument
2983 ether_addr_copy(dst->peer_macaddr, src->peer_macaddr.addr); in ath10k_wmi_pull_peer_stats()
2984 dst->peer_rssi = __le32_to_cpu(src->peer_rssi); in ath10k_wmi_pull_peer_stats()
2985 dst->peer_tx_rate = __le32_to_cpu(src->peer_tx_rate); in ath10k_wmi_pull_peer_stats()
2989 ath10k_wmi_10_4_pull_peer_stats(const struct wmi_10_4_peer_stats *src, in ath10k_wmi_10_4_pull_peer_stats() argument
2992 ether_addr_copy(dst->peer_macaddr, src->peer_macaddr.addr); in ath10k_wmi_10_4_pull_peer_stats()
2993 dst->peer_rssi = __le32_to_cpu(src->peer_rssi); in ath10k_wmi_10_4_pull_peer_stats()
2994 dst->peer_tx_rate = __le32_to_cpu(src->peer_tx_rate); in ath10k_wmi_10_4_pull_peer_stats()
2995 dst->peer_rx_rate = __le32_to_cpu(src->peer_rx_rate); in ath10k_wmi_10_4_pull_peer_stats()
2999 ath10k_wmi_10_4_pull_vdev_stats(const struct wmi_vdev_stats_extd *src, in ath10k_wmi_10_4_pull_vdev_stats() argument
3002 dst->vdev_id = __le32_to_cpu(src->vdev_id); in ath10k_wmi_10_4_pull_vdev_stats()
3003 dst->ppdu_aggr_cnt = __le32_to_cpu(src->ppdu_aggr_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
3004 dst->ppdu_noack = __le32_to_cpu(src->ppdu_noack); in ath10k_wmi_10_4_pull_vdev_stats()
3005 dst->mpdu_queued = __le32_to_cpu(src->mpdu_queued); in ath10k_wmi_10_4_pull_vdev_stats()
3006 dst->ppdu_nonaggr_cnt = __le32_to_cpu(src->ppdu_nonaggr_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
3007 dst->mpdu_sw_requeued = __le32_to_cpu(src->mpdu_sw_requeued); in ath10k_wmi_10_4_pull_vdev_stats()
3008 dst->mpdu_suc_retry = __le32_to_cpu(src->mpdu_suc_retry); in ath10k_wmi_10_4_pull_vdev_stats()
3009 dst->mpdu_suc_multitry = __le32_to_cpu(src->mpdu_suc_multitry); in ath10k_wmi_10_4_pull_vdev_stats()
3010 dst->mpdu_fail_retry = __le32_to_cpu(src->mpdu_fail_retry); in ath10k_wmi_10_4_pull_vdev_stats()
3011 dst->tx_ftm_suc = __le32_to_cpu(src->tx_ftm_suc); in ath10k_wmi_10_4_pull_vdev_stats()
3012 dst->tx_ftm_suc_retry = __le32_to_cpu(src->tx_ftm_suc_retry); in ath10k_wmi_10_4_pull_vdev_stats()
3013 dst->tx_ftm_fail = __le32_to_cpu(src->tx_ftm_fail); in ath10k_wmi_10_4_pull_vdev_stats()
3014 dst->rx_ftmr_cnt = __le32_to_cpu(src->rx_ftmr_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
3015 dst->rx_ftmr_dup_cnt = __le32_to_cpu(src->rx_ftmr_dup_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
3016 dst->rx_iftmr_cnt = __le32_to_cpu(src->rx_iftmr_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
3017 dst->rx_iftmr_dup_cnt = __le32_to_cpu(src->rx_iftmr_dup_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
3024 const struct wmi_stats_event *ev = (void *)skb->data; in ath10k_wmi_main_op_pull_fw_stats()
3029 return -EPROTO; in ath10k_wmi_main_op_pull_fw_stats()
3031 num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats); in ath10k_wmi_main_op_pull_fw_stats()
3032 num_peer_stats = __le32_to_cpu(ev->num_peer_stats); in ath10k_wmi_main_op_pull_fw_stats()
3035 const struct wmi_pdev_stats *src; in ath10k_wmi_main_op_pull_fw_stats() local
3038 src = (void *)skb->data; in ath10k_wmi_main_op_pull_fw_stats()
3039 if (!skb_pull(skb, sizeof(*src))) in ath10k_wmi_main_op_pull_fw_stats()
3040 return -EPROTO; in ath10k_wmi_main_op_pull_fw_stats()
3046 ath10k_wmi_pull_pdev_stats_base(&src->base, dst); in ath10k_wmi_main_op_pull_fw_stats()
3047 ath10k_wmi_pull_pdev_stats_tx(&src->tx, dst); in ath10k_wmi_main_op_pull_fw_stats()
3048 ath10k_wmi_pull_pdev_stats_rx(&src->rx, dst); in ath10k_wmi_main_op_pull_fw_stats()
3050 list_add_tail(&dst->list, &stats->pdevs); in ath10k_wmi_main_op_pull_fw_stats()
3056 const struct wmi_peer_stats *src; in ath10k_wmi_main_op_pull_fw_stats() local
3059 src = (void *)skb->data; in ath10k_wmi_main_op_pull_fw_stats()
3060 if (!skb_pull(skb, sizeof(*src))) in ath10k_wmi_main_op_pull_fw_stats()
3061 return -EPROTO; in ath10k_wmi_main_op_pull_fw_stats()
3067 ath10k_wmi_pull_peer_stats(src, dst); in ath10k_wmi_main_op_pull_fw_stats()
3068 list_add_tail(&dst->list, &stats->peers); in ath10k_wmi_main_op_pull_fw_stats()
3078 const struct wmi_stats_event *ev = (void *)skb->data; in ath10k_wmi_10x_op_pull_fw_stats()
3083 return -EPROTO; in ath10k_wmi_10x_op_pull_fw_stats()
3085 num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats); in ath10k_wmi_10x_op_pull_fw_stats()
3086 num_peer_stats = __le32_to_cpu(ev->num_peer_stats); in ath10k_wmi_10x_op_pull_fw_stats()
3089 const struct wmi_10x_pdev_stats *src; in ath10k_wmi_10x_op_pull_fw_stats() local
3092 src = (void *)skb->data; in ath10k_wmi_10x_op_pull_fw_stats()
3093 if (!skb_pull(skb, sizeof(*src))) in ath10k_wmi_10x_op_pull_fw_stats()
3094 return -EPROTO; in ath10k_wmi_10x_op_pull_fw_stats()
3100 ath10k_wmi_pull_pdev_stats_base(&src->base, dst); in ath10k_wmi_10x_op_pull_fw_stats()
3101 ath10k_wmi_pull_pdev_stats_tx(&src->tx, dst); in ath10k_wmi_10x_op_pull_fw_stats()
3102 ath10k_wmi_pull_pdev_stats_rx(&src->rx, dst); in ath10k_wmi_10x_op_pull_fw_stats()
3103 ath10k_wmi_pull_pdev_stats_extra(&src->extra, dst); in ath10k_wmi_10x_op_pull_fw_stats()
3105 list_add_tail(&dst->list, &stats->pdevs); in ath10k_wmi_10x_op_pull_fw_stats()
3111 const struct wmi_10x_peer_stats *src; in ath10k_wmi_10x_op_pull_fw_stats() local
3114 src = (void *)skb->data; in ath10k_wmi_10x_op_pull_fw_stats()
3115 if (!skb_pull(skb, sizeof(*src))) in ath10k_wmi_10x_op_pull_fw_stats()
3116 return -EPROTO; in ath10k_wmi_10x_op_pull_fw_stats()
3122 ath10k_wmi_pull_peer_stats(&src->old, dst); in ath10k_wmi_10x_op_pull_fw_stats()
3124 dst->peer_rx_rate = __le32_to_cpu(src->peer_rx_rate); in ath10k_wmi_10x_op_pull_fw_stats()
3126 list_add_tail(&dst->list, &stats->peers); in ath10k_wmi_10x_op_pull_fw_stats()
3136 const struct wmi_10_2_stats_event *ev = (void *)skb->data; in ath10k_wmi_10_2_op_pull_fw_stats()
3143 return -EPROTO; in ath10k_wmi_10_2_op_pull_fw_stats()
3145 num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats); in ath10k_wmi_10_2_op_pull_fw_stats()
3146 num_pdev_ext_stats = __le32_to_cpu(ev->num_pdev_ext_stats); in ath10k_wmi_10_2_op_pull_fw_stats()
3147 num_peer_stats = __le32_to_cpu(ev->num_peer_stats); in ath10k_wmi_10_2_op_pull_fw_stats()
3150 const struct wmi_10_2_pdev_stats *src; in ath10k_wmi_10_2_op_pull_fw_stats() local
3153 src = (void *)skb->data; in ath10k_wmi_10_2_op_pull_fw_stats()
3154 if (!skb_pull(skb, sizeof(*src))) in ath10k_wmi_10_2_op_pull_fw_stats()
3155 return -EPROTO; in ath10k_wmi_10_2_op_pull_fw_stats()
3161 ath10k_wmi_pull_pdev_stats_base(&src->base, dst); in ath10k_wmi_10_2_op_pull_fw_stats()
3162 ath10k_wmi_pull_pdev_stats_tx(&src->tx, dst); in ath10k_wmi_10_2_op_pull_fw_stats()
3163 ath10k_wmi_pull_pdev_stats_rx(&src->rx, dst); in ath10k_wmi_10_2_op_pull_fw_stats()
3164 ath10k_wmi_pull_pdev_stats_extra(&src->extra, dst); in ath10k_wmi_10_2_op_pull_fw_stats()
3167 list_add_tail(&dst->list, &stats->pdevs); in ath10k_wmi_10_2_op_pull_fw_stats()
3171 const struct wmi_10_2_pdev_ext_stats *src; in ath10k_wmi_10_2_op_pull_fw_stats() local
3173 src = (void *)skb->data; in ath10k_wmi_10_2_op_pull_fw_stats()
3174 if (!skb_pull(skb, sizeof(*src))) in ath10k_wmi_10_2_op_pull_fw_stats()
3175 return -EPROTO; in ath10k_wmi_10_2_op_pull_fw_stats()
3180 * required to parse following sub-structures properly. in ath10k_wmi_10_2_op_pull_fw_stats()
3187 const struct wmi_10_2_peer_stats *src; in ath10k_wmi_10_2_op_pull_fw_stats() local
3190 src = (void *)skb->data; in ath10k_wmi_10_2_op_pull_fw_stats()
3191 if (!skb_pull(skb, sizeof(*src))) in ath10k_wmi_10_2_op_pull_fw_stats()
3192 return -EPROTO; in ath10k_wmi_10_2_op_pull_fw_stats()
3198 ath10k_wmi_pull_peer_stats(&src->old, dst); in ath10k_wmi_10_2_op_pull_fw_stats()
3200 dst->peer_rx_rate = __le32_to_cpu(src->peer_rx_rate); in ath10k_wmi_10_2_op_pull_fw_stats()
3203 list_add_tail(&dst->list, &stats->peers); in ath10k_wmi_10_2_op_pull_fw_stats()
3213 const struct wmi_10_2_stats_event *ev = (void *)skb->data; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3220 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3222 num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3223 num_pdev_ext_stats = __le32_to_cpu(ev->num_pdev_ext_stats); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3224 num_peer_stats = __le32_to_cpu(ev->num_peer_stats); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3227 const struct wmi_10_2_pdev_stats *src; in ath10k_wmi_10_2_4_op_pull_fw_stats() local
3230 src = (void *)skb->data; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3231 if (!skb_pull(skb, sizeof(*src))) in ath10k_wmi_10_2_4_op_pull_fw_stats()
3232 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3238 ath10k_wmi_pull_pdev_stats_base(&src->base, dst); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3239 ath10k_wmi_pull_pdev_stats_tx(&src->tx, dst); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3240 ath10k_wmi_pull_pdev_stats_rx(&src->rx, dst); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3241 ath10k_wmi_pull_pdev_stats_extra(&src->extra, dst); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3244 list_add_tail(&dst->list, &stats->pdevs); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3248 const struct wmi_10_2_pdev_ext_stats *src; in ath10k_wmi_10_2_4_op_pull_fw_stats() local
3250 src = (void *)skb->data; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3251 if (!skb_pull(skb, sizeof(*src))) in ath10k_wmi_10_2_4_op_pull_fw_stats()
3252 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3257 * required to parse following sub-structures properly. in ath10k_wmi_10_2_4_op_pull_fw_stats()
3264 const struct wmi_10_2_4_ext_peer_stats *src; in ath10k_wmi_10_2_4_op_pull_fw_stats() local
3268 if (test_bit(WMI_SERVICE_PEER_STATS, ar->wmi.svc_map)) in ath10k_wmi_10_2_4_op_pull_fw_stats()
3273 src = (void *)skb->data; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3275 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3281 ath10k_wmi_pull_peer_stats(&src->common.old, dst); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3283 dst->peer_rx_rate = __le32_to_cpu(src->common.peer_rx_rate); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3286 dst->rx_duration = __le32_to_cpu(src->rx_duration); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3289 list_add_tail(&dst->list, &stats->peers); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3299 const struct wmi_10_2_stats_event *ev = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3309 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3311 num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats); in ath10k_wmi_10_4_op_pull_fw_stats()
3312 num_pdev_ext_stats = __le32_to_cpu(ev->num_pdev_ext_stats); in ath10k_wmi_10_4_op_pull_fw_stats()
3313 num_vdev_stats = __le32_to_cpu(ev->num_vdev_stats); in ath10k_wmi_10_4_op_pull_fw_stats()
3314 num_peer_stats = __le32_to_cpu(ev->num_peer_stats); in ath10k_wmi_10_4_op_pull_fw_stats()
3315 num_bcnflt_stats = __le32_to_cpu(ev->num_bcnflt_stats); in ath10k_wmi_10_4_op_pull_fw_stats()
3316 stats_id = __le32_to_cpu(ev->stats_id); in ath10k_wmi_10_4_op_pull_fw_stats()
3319 const struct wmi_10_4_pdev_stats *src; in ath10k_wmi_10_4_op_pull_fw_stats() local
3322 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3323 if (!skb_pull(skb, sizeof(*src))) in ath10k_wmi_10_4_op_pull_fw_stats()
3324 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3330 ath10k_wmi_pull_pdev_stats_base(&src->base, dst); in ath10k_wmi_10_4_op_pull_fw_stats()
3331 ath10k_wmi_10_4_pull_pdev_stats_tx(&src->tx, dst); in ath10k_wmi_10_4_op_pull_fw_stats()
3332 ath10k_wmi_pull_pdev_stats_rx(&src->rx, dst); in ath10k_wmi_10_4_op_pull_fw_stats()
3333 dst->rx_ovfl_errs = __le32_to_cpu(src->rx_ovfl_errs); in ath10k_wmi_10_4_op_pull_fw_stats()
3334 ath10k_wmi_pull_pdev_stats_extra(&src->extra, dst); in ath10k_wmi_10_4_op_pull_fw_stats()
3336 list_add_tail(&dst->list, &stats->pdevs); in ath10k_wmi_10_4_op_pull_fw_stats()
3340 const struct wmi_10_2_pdev_ext_stats *src; in ath10k_wmi_10_4_op_pull_fw_stats() local
3342 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3343 if (!skb_pull(skb, sizeof(*src))) in ath10k_wmi_10_4_op_pull_fw_stats()
3344 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3349 * required to parse following sub-structures properly. in ath10k_wmi_10_4_op_pull_fw_stats()
3354 const struct wmi_vdev_stats *src; in ath10k_wmi_10_4_op_pull_fw_stats() local
3359 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3360 if (!skb_pull(skb, sizeof(*src))) in ath10k_wmi_10_4_op_pull_fw_stats()
3361 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3365 const struct wmi_10_4_peer_stats *src; in ath10k_wmi_10_4_op_pull_fw_stats() local
3368 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3369 if (!skb_pull(skb, sizeof(*src))) in ath10k_wmi_10_4_op_pull_fw_stats()
3370 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3376 ath10k_wmi_10_4_pull_peer_stats(src, dst); in ath10k_wmi_10_4_op_pull_fw_stats()
3377 list_add_tail(&dst->list, &stats->peers); in ath10k_wmi_10_4_op_pull_fw_stats()
3381 const struct wmi_10_4_bss_bcn_filter_stats *src; in ath10k_wmi_10_4_op_pull_fw_stats() local
3383 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3384 if (!skb_pull(skb, sizeof(*src))) in ath10k_wmi_10_4_op_pull_fw_stats()
3385 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3390 * required to parse following sub-structures properly. in ath10k_wmi_10_4_op_pull_fw_stats()
3395 stats->extended = true; in ath10k_wmi_10_4_op_pull_fw_stats()
3398 const struct wmi_10_4_peer_extd_stats *src; in ath10k_wmi_10_4_op_pull_fw_stats() local
3401 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3402 if (!skb_pull(skb, sizeof(*src))) in ath10k_wmi_10_4_op_pull_fw_stats()
3403 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3409 ether_addr_copy(dst->peer_macaddr, in ath10k_wmi_10_4_op_pull_fw_stats()
3410 src->peer_macaddr.addr); in ath10k_wmi_10_4_op_pull_fw_stats()
3411 dst->rx_duration = __le32_to_cpu(src->rx_duration); in ath10k_wmi_10_4_op_pull_fw_stats()
3412 list_add_tail(&dst->list, &stats->peers_extd); in ath10k_wmi_10_4_op_pull_fw_stats()
3418 const struct wmi_vdev_stats_extd *src; in ath10k_wmi_10_4_op_pull_fw_stats() local
3421 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3422 if (!skb_pull(skb, sizeof(*src))) in ath10k_wmi_10_4_op_pull_fw_stats()
3423 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3428 ath10k_wmi_10_4_pull_vdev_stats(src, dst); in ath10k_wmi_10_4_op_pull_fw_stats()
3429 list_add_tail(&dst->list, &stats->vdevs); in ath10k_wmi_10_4_op_pull_fw_stats()
3446 struct wmi_vdev_start_response_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_vdev_start_ev()
3448 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_vdev_start_ev()
3449 return -EPROTO; in ath10k_wmi_op_pull_vdev_start_ev()
3452 arg->vdev_id = ev->vdev_id; in ath10k_wmi_op_pull_vdev_start_ev()
3453 arg->req_id = ev->req_id; in ath10k_wmi_op_pull_vdev_start_ev()
3454 arg->resp_type = ev->resp_type; in ath10k_wmi_op_pull_vdev_start_ev()
3455 arg->status = ev->status; in ath10k_wmi_op_pull_vdev_start_ev()
3468 ar->last_wmi_vdev_start_status = 0; in ath10k_wmi_event_vdev_start_resp()
3473 ar->last_wmi_vdev_start_status = ret; in ath10k_wmi_event_vdev_start_resp()
3479 ath10k_warn(ar, "vdev-start-response reports status error: %d (%s)\n", in ath10k_wmi_event_vdev_start_resp()
3481 "chan-invalid" : "unknown"); in ath10k_wmi_event_vdev_start_resp()
3485 ar->last_wmi_vdev_start_status = -EINVAL; in ath10k_wmi_event_vdev_start_resp()
3489 complete(&ar->vdev_setup_done); in ath10k_wmi_event_vdev_start_resp()
3495 complete(&ar->vdev_setup_done); in ath10k_wmi_event_vdev_stopped()
3502 struct wmi_peer_sta_kickout_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_peer_kick_ev()
3504 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_peer_kick_ev()
3505 return -EPROTO; in ath10k_wmi_op_pull_peer_kick_ev()
3508 arg->mac_addr = ev->peer_macaddr.addr; in ath10k_wmi_op_pull_peer_kick_ev()
3531 sta = ieee80211_find_sta_by_ifaddr(ar->hw, arg.mac_addr, NULL); in ath10k_wmi_event_peer_sta_kickout()
3552 * sleep transition from connected stations - these do not
3573 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)bcn->data; in ath10k_wmi_update_tim()
3583 tim_len = tim_info->tim_len ? __le32_to_cpu(tim_info->tim_len) : 1; in ath10k_wmi_update_tim()
3588 if (__le32_to_cpu(tim_info->tim_changed)) { in ath10k_wmi_update_tim()
3591 if (sizeof(arvif->u.ap.tim_bitmap) < tim_len) { in ath10k_wmi_update_tim()
3593 tim_len, sizeof(arvif->u.ap.tim_bitmap)); in ath10k_wmi_update_tim()
3594 tim_len = sizeof(arvif->u.ap.tim_bitmap); in ath10k_wmi_update_tim()
3598 t = tim_info->tim_bitmap[i / 4]; in ath10k_wmi_update_tim()
3600 arvif->u.ap.tim_bitmap[i] = (v >> ((i % 4) * 8)) & 0xFF; in ath10k_wmi_update_tim()
3606 arvif->u.ap.tim_len = 0; in ath10k_wmi_update_tim()
3608 if (arvif->u.ap.tim_bitmap[i]) in ath10k_wmi_update_tim()
3609 arvif->u.ap.tim_len = i; in ath10k_wmi_update_tim()
3611 arvif->u.ap.tim_len++; in ath10k_wmi_update_tim()
3614 ies = bcn->data; in ath10k_wmi_update_tim()
3615 ies += ieee80211_hdrlen(hdr->frame_control); in ath10k_wmi_update_tim()
3619 (u8 *)skb_tail_pointer(bcn) - ies); in ath10k_wmi_update_tim()
3621 if (arvif->vdev_type != WMI_VDEV_TYPE_IBSS) in ath10k_wmi_update_tim()
3628 pvm_len = ie_len - 3; /* exclude dtim count, dtim period, bmap ctl */ in ath10k_wmi_update_tim()
3630 if (pvm_len < arvif->u.ap.tim_len) { in ath10k_wmi_update_tim()
3631 int expand_size = tim_len - pvm_len; in ath10k_wmi_update_tim()
3632 int move_size = skb_tail_pointer(bcn) - (ie + 2 + ie_len); in ath10k_wmi_update_tim()
3651 tim->bitmap_ctrl = !!__le32_to_cpu(tim_info->tim_mcast); in ath10k_wmi_update_tim()
3652 memcpy(tim->virtual_map, arvif->u.ap.tim_bitmap, pvm_len); in ath10k_wmi_update_tim()
3654 if (tim->dtim_count == 0) { in ath10k_wmi_update_tim()
3655 ATH10K_SKB_CB(bcn)->flags |= ATH10K_SKB_F_DTIM_ZERO; in ath10k_wmi_update_tim()
3657 if (__le32_to_cpu(tim_info->tim_mcast) == 1) in ath10k_wmi_update_tim()
3658 ATH10K_SKB_CB(bcn)->flags |= ATH10K_SKB_F_DELIVER_CAB; in ath10k_wmi_update_tim()
3662 tim->dtim_count, tim->dtim_period, in ath10k_wmi_update_tim()
3663 tim->bitmap_ctrl, pvm_len); in ath10k_wmi_update_tim()
3670 if (!arvif->vif->p2p) in ath10k_wmi_update_noa()
3673 ath10k_dbg(ar, ATH10K_DBG_MGMT, "noa changed: %d\n", noa->changed); in ath10k_wmi_update_noa()
3675 if (noa->changed & WMI_P2P_NOA_CHANGED_BIT) in ath10k_wmi_update_noa()
3678 if (arvif->u.ap.noa_data) in ath10k_wmi_update_noa()
3679 if (!pskb_expand_head(bcn, 0, arvif->u.ap.noa_len, GFP_ATOMIC)) in ath10k_wmi_update_noa()
3680 skb_put_data(bcn, arvif->u.ap.noa_data, in ath10k_wmi_update_noa()
3681 arvif->u.ap.noa_len); in ath10k_wmi_update_noa()
3687 struct wmi_host_swba_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_swba_ev()
3691 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_swba_ev()
3692 return -EPROTO; in ath10k_wmi_op_pull_swba_ev()
3695 arg->vdev_map = ev->vdev_map; in ath10k_wmi_op_pull_swba_ev()
3697 for (i = 0, map = __le32_to_cpu(ev->vdev_map); map; map >>= 1) { in ath10k_wmi_op_pull_swba_ev()
3704 if (WARN_ON_ONCE(i == ARRAY_SIZE(arg->tim_info))) in ath10k_wmi_op_pull_swba_ev()
3707 if (__le32_to_cpu(ev->bcn_info[i].tim_info.tim_len) > in ath10k_wmi_op_pull_swba_ev()
3708 sizeof(ev->bcn_info[i].tim_info.tim_bitmap)) { in ath10k_wmi_op_pull_swba_ev()
3710 return -EPROTO; in ath10k_wmi_op_pull_swba_ev()
3713 arg->tim_info[i].tim_len = ev->bcn_info[i].tim_info.tim_len; in ath10k_wmi_op_pull_swba_ev()
3714 arg->tim_info[i].tim_mcast = ev->bcn_info[i].tim_info.tim_mcast; in ath10k_wmi_op_pull_swba_ev()
3715 arg->tim_info[i].tim_bitmap = in ath10k_wmi_op_pull_swba_ev()
3716 ev->bcn_info[i].tim_info.tim_bitmap; in ath10k_wmi_op_pull_swba_ev()
3717 arg->tim_info[i].tim_changed = in ath10k_wmi_op_pull_swba_ev()
3718 ev->bcn_info[i].tim_info.tim_changed; in ath10k_wmi_op_pull_swba_ev()
3719 arg->tim_info[i].tim_num_ps_pending = in ath10k_wmi_op_pull_swba_ev()
3720 ev->bcn_info[i].tim_info.tim_num_ps_pending; in ath10k_wmi_op_pull_swba_ev()
3722 arg->noa_info[i] = &ev->bcn_info[i].p2p_noa_info; in ath10k_wmi_op_pull_swba_ev()
3733 struct wmi_10_2_4_host_swba_event *ev = (void *)skb->data; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3737 if (skb->len < sizeof(*ev)) in ath10k_wmi_10_2_4_op_pull_swba_ev()
3738 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3741 arg->vdev_map = ev->vdev_map; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3743 for (i = 0, map = __le32_to_cpu(ev->vdev_map); map; map >>= 1) { in ath10k_wmi_10_2_4_op_pull_swba_ev()
3750 if (WARN_ON_ONCE(i == ARRAY_SIZE(arg->tim_info))) in ath10k_wmi_10_2_4_op_pull_swba_ev()
3753 if (__le32_to_cpu(ev->bcn_info[i].tim_info.tim_len) > in ath10k_wmi_10_2_4_op_pull_swba_ev()
3754 sizeof(ev->bcn_info[i].tim_info.tim_bitmap)) { in ath10k_wmi_10_2_4_op_pull_swba_ev()
3756 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3759 arg->tim_info[i].tim_len = ev->bcn_info[i].tim_info.tim_len; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3760 arg->tim_info[i].tim_mcast = ev->bcn_info[i].tim_info.tim_mcast; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3761 arg->tim_info[i].tim_bitmap = in ath10k_wmi_10_2_4_op_pull_swba_ev()
3762 ev->bcn_info[i].tim_info.tim_bitmap; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3763 arg->tim_info[i].tim_changed = in ath10k_wmi_10_2_4_op_pull_swba_ev()
3764 ev->bcn_info[i].tim_info.tim_changed; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3765 arg->tim_info[i].tim_num_ps_pending = in ath10k_wmi_10_2_4_op_pull_swba_ev()
3766 ev->bcn_info[i].tim_info.tim_num_ps_pending; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3777 struct wmi_10_4_host_swba_event *ev = (void *)skb->data; in ath10k_wmi_10_4_op_pull_swba_ev()
3781 if (skb->len < sizeof(*ev)) in ath10k_wmi_10_4_op_pull_swba_ev()
3782 return -EPROTO; in ath10k_wmi_10_4_op_pull_swba_ev()
3785 arg->vdev_map = ev->vdev_map; in ath10k_wmi_10_4_op_pull_swba_ev()
3787 for (i = 0, map = __le32_to_cpu(ev->vdev_map); map; map >>= 1) { in ath10k_wmi_10_4_op_pull_swba_ev()
3794 if (WARN_ON_ONCE(i == ARRAY_SIZE(arg->tim_info))) in ath10k_wmi_10_4_op_pull_swba_ev()
3797 if (__le32_to_cpu(ev->bcn_info[i].tim_info.tim_len) > in ath10k_wmi_10_4_op_pull_swba_ev()
3798 sizeof(ev->bcn_info[i].tim_info.tim_bitmap)) { in ath10k_wmi_10_4_op_pull_swba_ev()
3800 return -EPROTO; in ath10k_wmi_10_4_op_pull_swba_ev()
3803 tim_len = __le32_to_cpu(ev->bcn_info[i].tim_info.tim_len); in ath10k_wmi_10_4_op_pull_swba_ev()
3806 tim_len -= 4; in ath10k_wmi_10_4_op_pull_swba_ev()
3807 arg->tim_info[i].tim_len = __cpu_to_le32(tim_len); in ath10k_wmi_10_4_op_pull_swba_ev()
3809 arg->tim_info[i].tim_len = 0; in ath10k_wmi_10_4_op_pull_swba_ev()
3812 arg->tim_info[i].tim_mcast = ev->bcn_info[i].tim_info.tim_mcast; in ath10k_wmi_10_4_op_pull_swba_ev()
3813 arg->tim_info[i].tim_bitmap = in ath10k_wmi_10_4_op_pull_swba_ev()
3814 ev->bcn_info[i].tim_info.tim_bitmap; in ath10k_wmi_10_4_op_pull_swba_ev()
3815 arg->tim_info[i].tim_changed = in ath10k_wmi_10_4_op_pull_swba_ev()
3816 ev->bcn_info[i].tim_info.tim_changed; in ath10k_wmi_10_4_op_pull_swba_ev()
3817 arg->tim_info[i].tim_num_ps_pending = in ath10k_wmi_10_4_op_pull_swba_ev()
3818 ev->bcn_info[i].tim_info.tim_num_ps_pending; in ath10k_wmi_10_4_op_pull_swba_ev()
3839 int i = -1; in ath10k_wmi_event_host_swba()
3875 __le32_to_cpu(tim_info->tim_len), in ath10k_wmi_event_host_swba()
3876 __le32_to_cpu(tim_info->tim_mcast), in ath10k_wmi_event_host_swba()
3877 __le32_to_cpu(tim_info->tim_changed), in ath10k_wmi_event_host_swba()
3878 __le32_to_cpu(tim_info->tim_num_ps_pending), in ath10k_wmi_event_host_swba()
3879 __le32_to_cpu(tim_info->tim_bitmap[3]), in ath10k_wmi_event_host_swba()
3880 __le32_to_cpu(tim_info->tim_bitmap[2]), in ath10k_wmi_event_host_swba()
3881 __le32_to_cpu(tim_info->tim_bitmap[1]), in ath10k_wmi_event_host_swba()
3882 __le32_to_cpu(tim_info->tim_bitmap[0])); in ath10k_wmi_event_host_swba()
3898 if (!arvif->is_up) in ath10k_wmi_event_host_swba()
3907 if (arvif->vif->bss_conf.csa_active && in ath10k_wmi_event_host_swba()
3908 ieee80211_beacon_cntdwn_is_complete(arvif->vif, 0)) { in ath10k_wmi_event_host_swba()
3909 ieee80211_csa_finish(arvif->vif, 0); in ath10k_wmi_event_host_swba()
3913 bcn = ieee80211_beacon_get(ar->hw, arvif->vif, 0); in ath10k_wmi_event_host_swba()
3919 ath10k_tx_h_seq_no(arvif->vif, bcn); in ath10k_wmi_event_host_swba()
3923 spin_lock_bh(&ar->data_lock); in ath10k_wmi_event_host_swba()
3925 if (arvif->beacon) { in ath10k_wmi_event_host_swba()
3926 switch (arvif->beacon_state) { in ath10k_wmi_event_host_swba()
3931 arvif->vdev_id); in ath10k_wmi_event_host_swba()
3935 arvif->vdev_id); in ath10k_wmi_event_host_swba()
3943 if (!arvif->beacon_buf) { in ath10k_wmi_event_host_swba()
3944 paddr = dma_map_single(arvif->ar->dev, bcn->data, in ath10k_wmi_event_host_swba()
3945 bcn->len, DMA_TO_DEVICE); in ath10k_wmi_event_host_swba()
3946 ret = dma_mapping_error(arvif->ar->dev, paddr); in ath10k_wmi_event_host_swba()
3954 ATH10K_SKB_CB(bcn)->paddr = paddr; in ath10k_wmi_event_host_swba()
3956 if (bcn->len > IEEE80211_MAX_FRAME_LEN) { in ath10k_wmi_event_host_swba()
3957 ath10k_warn(ar, "trimming beacon %d -> %d bytes!\n", in ath10k_wmi_event_host_swba()
3958 bcn->len, IEEE80211_MAX_FRAME_LEN); in ath10k_wmi_event_host_swba()
3961 memcpy(arvif->beacon_buf, bcn->data, bcn->len); in ath10k_wmi_event_host_swba()
3962 ATH10K_SKB_CB(bcn)->paddr = arvif->beacon_paddr; in ath10k_wmi_event_host_swba()
3965 arvif->beacon = bcn; in ath10k_wmi_event_host_swba()
3966 arvif->beacon_state = ATH10K_BEACON_SCHEDULED; in ath10k_wmi_event_host_swba()
3968 trace_ath10k_tx_hdr(ar, bcn->data, bcn->len); in ath10k_wmi_event_host_swba()
3969 trace_ath10k_tx_payload(ar, bcn->data, bcn->len); in ath10k_wmi_event_host_swba()
3972 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_event_host_swba()
3991 if (ar->dfs_block_radar_events) in ath10k_radar_detected()
3994 ieee80211_radar_detected(ar->hw, NULL); in ath10k_radar_detected()
4004 reinit_completion(&ar->wmi.radar_confirm); in ath10k_radar_confirmation_work()
4006 spin_lock_bh(&ar->data_lock); in ath10k_radar_confirmation_work()
4007 memcpy(&radar_info, &ar->last_radar_info, sizeof(radar_info)); in ath10k_radar_confirmation_work()
4008 spin_unlock_bh(&ar->data_lock); in ath10k_radar_confirmation_work()
4016 time_left = wait_for_completion_timeout(&ar->wmi.radar_confirm, in ath10k_radar_confirmation_work()
4039 spin_lock_bh(&ar->data_lock); in ath10k_radar_confirmation_work()
4040 if (ar->radar_conf_state != ATH10K_RADAR_CONFIRMATION_STOPPED) in ath10k_radar_confirmation_work()
4041 ar->radar_conf_state = ATH10K_RADAR_CONFIRMATION_IDLE; in ath10k_radar_confirmation_work()
4042 spin_unlock_bh(&ar->data_lock); in ath10k_radar_confirmation_work()
4058 reg0 = __le32_to_cpu(rr->reg0); in ath10k_dfs_radar_report()
4059 reg1 = __le32_to_cpu(rr->reg1); in ath10k_dfs_radar_report()
4079 if (!ar->dfs_detector) in ath10k_dfs_radar_report()
4082 spin_lock_bh(&ar->data_lock); in ath10k_dfs_radar_report()
4083 ch = ar->rx_channel; in ath10k_dfs_radar_report()
4087 ch = ar->tgt_oper_chan; in ath10k_dfs_radar_report()
4089 spin_unlock_bh(&ar->data_lock); in ath10k_dfs_radar_report()
4097 tsf32l = phyerr->tsf_timestamp; in ath10k_dfs_radar_report()
4102 rssi = phyerr->rssi_combined; in ath10k_dfs_radar_report()
4111 pe.freq = ch->center_freq; in ath10k_dfs_radar_report()
4121 if (!ar->dfs_detector->add_pulse(ar->dfs_detector, &pe, &rs)) { in ath10k_dfs_radar_report()
4127 if ((test_bit(WMI_SERVICE_HOST_DFS_CHECK_SUPPORT, ar->wmi.svc_map)) && in ath10k_dfs_radar_report()
4128 ar->dfs_detector->region == NL80211_DFS_FCC) { in ath10k_dfs_radar_report()
4133 spin_lock_bh(&ar->data_lock); in ath10k_dfs_radar_report()
4134 if (ar->radar_conf_state != ATH10K_RADAR_CONFIRMATION_IDLE) { in ath10k_dfs_radar_report()
4135 spin_unlock_bh(&ar->data_lock); in ath10k_dfs_radar_report()
4138 ar->radar_conf_state = ATH10K_RADAR_CONFIRMATION_INPROGRESS; in ath10k_dfs_radar_report()
4139 radar_info = &ar->last_radar_info; in ath10k_dfs_radar_report()
4141 radar_info->pri_min = rs.pri_min; in ath10k_dfs_radar_report()
4142 radar_info->pri_max = rs.pri_max; in ath10k_dfs_radar_report()
4143 radar_info->width_min = rs.width_min; in ath10k_dfs_radar_report()
4144 radar_info->width_max = rs.width_max; in ath10k_dfs_radar_report()
4146 radar_info->sidx_min = MS(reg0, RADAR_REPORT_REG0_PULSE_SIDX); in ath10k_dfs_radar_report()
4147 radar_info->sidx_max = MS(reg0, RADAR_REPORT_REG0_PULSE_SIDX); in ath10k_dfs_radar_report()
4151 radar_info->pri_min, radar_info->pri_max, in ath10k_dfs_radar_report()
4152 radar_info->width_min, radar_info->width_max, in ath10k_dfs_radar_report()
4153 radar_info->sidx_min, radar_info->sidx_max); in ath10k_dfs_radar_report()
4154 ieee80211_queue_work(ar->hw, &ar->radar_confirmation_work); in ath10k_dfs_radar_report()
4155 spin_unlock_bh(&ar->data_lock); in ath10k_dfs_radar_report()
4171 reg0 = __le32_to_cpu(fftr->reg0); in ath10k_dfs_fft_report()
4172 reg1 = __le32_to_cpu(fftr->reg1); in ath10k_dfs_fft_report()
4173 rssi = phyerr->rssi_combined; in ath10k_dfs_fft_report()
4195 return -EINVAL; in ath10k_dfs_fft_report()
4211 buf_len = phyerr->buf_len; in ath10k_wmi_event_dfs()
4214 phyerr->phy_err_code, phyerr->rssi_combined, in ath10k_wmi_event_dfs()
4215 phyerr->tsf_timestamp, tsf, buf_len); in ath10k_wmi_event_dfs()
4230 tlv = (struct phyerr_tlv *)&phyerr->buf[i]; in ath10k_wmi_event_dfs()
4231 tlv_len = __le16_to_cpu(tlv->len); in ath10k_wmi_event_dfs()
4232 tlv_buf = &phyerr->buf[i + sizeof(*tlv)]; in ath10k_wmi_event_dfs()
4235 tlv_len, tlv->tag, tlv->sig); in ath10k_wmi_event_dfs()
4237 switch (tlv->tag) { in ath10k_wmi_event_dfs()
4276 buf_len = phyerr->buf_len; in ath10k_wmi_event_spectral_scan()
4285 tlv = (struct phyerr_tlv *)&phyerr->buf[i]; in ath10k_wmi_event_spectral_scan()
4286 tlv_len = __le16_to_cpu(tlv->len); in ath10k_wmi_event_spectral_scan()
4287 tlv_buf = &phyerr->buf[i + sizeof(*tlv)]; in ath10k_wmi_event_spectral_scan()
4295 switch (tlv->tag) { in ath10k_wmi_event_spectral_scan()
4303 fftr_len = tlv_len - sizeof(*fftr); in ath10k_wmi_event_spectral_scan()
4324 struct wmi_phyerr_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_phyerr_ev_hdr()
4326 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_phyerr_ev_hdr()
4327 return -EPROTO; in ath10k_wmi_op_pull_phyerr_ev_hdr()
4329 arg->num_phyerrs = __le32_to_cpu(ev->num_phyerrs); in ath10k_wmi_op_pull_phyerr_ev_hdr()
4330 arg->tsf_l32 = __le32_to_cpu(ev->tsf_l32); in ath10k_wmi_op_pull_phyerr_ev_hdr()
4331 arg->tsf_u32 = __le32_to_cpu(ev->tsf_u32); in ath10k_wmi_op_pull_phyerr_ev_hdr()
4332 arg->buf_len = skb->len - sizeof(*ev); in ath10k_wmi_op_pull_phyerr_ev_hdr()
4333 arg->phyerrs = ev->phyerrs; in ath10k_wmi_op_pull_phyerr_ev_hdr()
4342 struct wmi_10_4_phyerr_event *ev = (void *)skb->data; in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4344 if (skb->len < sizeof(*ev)) in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4345 return -EPROTO; in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4348 arg->num_phyerrs = 1; in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4350 arg->tsf_l32 = __le32_to_cpu(ev->tsf_l32); in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4351 arg->tsf_u32 = __le32_to_cpu(ev->tsf_u32); in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4352 arg->buf_len = skb->len; in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4353 arg->phyerrs = skb->data; in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4369 return -EINVAL; in ath10k_wmi_op_pull_phyerr_ev()
4372 arg->tsf_timestamp = __le32_to_cpu(phyerr->tsf_timestamp); in ath10k_wmi_op_pull_phyerr_ev()
4373 arg->freq1 = __le16_to_cpu(phyerr->freq1); in ath10k_wmi_op_pull_phyerr_ev()
4374 arg->freq2 = __le16_to_cpu(phyerr->freq2); in ath10k_wmi_op_pull_phyerr_ev()
4375 arg->rssi_combined = phyerr->rssi_combined; in ath10k_wmi_op_pull_phyerr_ev()
4376 arg->chan_width_mhz = phyerr->chan_width_mhz; in ath10k_wmi_op_pull_phyerr_ev()
4377 arg->buf_len = __le32_to_cpu(phyerr->buf_len); in ath10k_wmi_op_pull_phyerr_ev()
4378 arg->buf = phyerr->buf; in ath10k_wmi_op_pull_phyerr_ev()
4379 arg->hdr_len = sizeof(*phyerr); in ath10k_wmi_op_pull_phyerr_ev()
4382 arg->nf_chains[i] = __le16_to_cpu(phyerr->nf_chains[i]); in ath10k_wmi_op_pull_phyerr_ev()
4384 switch (phyerr->phy_err_code) { in ath10k_wmi_op_pull_phyerr_ev()
4386 arg->phy_err_code = PHY_ERROR_SPECTRAL_SCAN; in ath10k_wmi_op_pull_phyerr_ev()
4389 arg->phy_err_code = PHY_ERROR_FALSE_RADAR_EXT; in ath10k_wmi_op_pull_phyerr_ev()
4392 arg->phy_err_code = PHY_ERROR_RADAR; in ath10k_wmi_op_pull_phyerr_ev()
4395 arg->phy_err_code = PHY_ERROR_UNKNOWN; in ath10k_wmi_op_pull_phyerr_ev()
4414 return -EINVAL; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4417 arg->tsf_timestamp = __le32_to_cpu(phyerr->tsf_timestamp); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4418 arg->freq1 = __le16_to_cpu(phyerr->freq1); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4419 arg->freq2 = __le16_to_cpu(phyerr->freq2); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4420 arg->rssi_combined = phyerr->rssi_combined; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4421 arg->chan_width_mhz = phyerr->chan_width_mhz; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4422 arg->buf_len = __le32_to_cpu(phyerr->buf_len); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4423 arg->buf = phyerr->buf; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4424 arg->hdr_len = sizeof(*phyerr); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4427 arg->nf_chains[i] = __le16_to_cpu(phyerr->nf_chains[i]); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4429 phy_err_mask = __le32_to_cpu(phyerr->phy_err_mask[0]); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4432 arg->phy_err_code = PHY_ERROR_SPECTRAL_SCAN; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4434 arg->phy_err_code = PHY_ERROR_RADAR; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4436 arg->phy_err_code = PHY_ERROR_UNKNOWN; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4480 left_len -= phyerr_arg.hdr_len; in ath10k_wmi_event_phyerr()
4489 left_len -= buf_len; in ath10k_wmi_event_phyerr()
4514 struct wmi_dfs_status_ev_arg *ev = (void *)skb->data; in ath10k_wmi_10_4_op_pull_dfs_status_ev()
4516 if (skb->len < sizeof(*ev)) in ath10k_wmi_10_4_op_pull_dfs_status_ev()
4517 return -EPROTO; in ath10k_wmi_10_4_op_pull_dfs_status_ev()
4519 arg->status = ev->status; in ath10k_wmi_10_4_op_pull_dfs_status_ev()
4548 complete(&ar->wmi.radar_confirm); in ath10k_wmi_event_dfs_status_check()
4602 for (i = 0; i < sizeof(buf) - 1; i++) { in ath10k_wmi_event_debug_print()
4603 if (i >= skb->len) in ath10k_wmi_event_debug_print()
4606 c = skb->data[i]; in ath10k_wmi_event_debug_print()
4617 if (i == sizeof(buf) - 1) in ath10k_wmi_event_debug_print()
4618 ath10k_warn(ar, "wmi debug print truncated: %d\n", skb->len); in ath10k_wmi_event_debug_print()
4621 if (skb->data[i - 1] == '\n') in ath10k_wmi_event_debug_print()
4622 i--; in ath10k_wmi_event_debug_print()
4662 complete(&ar->wow.wakeup_completed); in ath10k_wmi_event_wow_wakeup_host()
4688 ch = num_chains - 1; in ath10k_tpc_config_get_rate()
4690 tpc = min_t(u8, ev->rates_array[rate_idx], ev->max_reg_allow_pow[ch]); in ath10k_tpc_config_get_rate()
4692 if (__le32_to_cpu(ev->num_tx_chain) <= 1) in ath10k_tpc_config_get_rate()
4698 stm_idx = num_streams - 1; in ath10k_tpc_config_get_rate()
4705 ev->max_reg_allow_pow_agstbc[ch - 1][stm_idx]); in ath10k_tpc_config_get_rate()
4709 ev->max_reg_allow_pow_agtxbf[ch - 1][stm_idx]); in ath10k_tpc_config_get_rate()
4713 ev->max_reg_allow_pow_agcdd[ch - 1][stm_idx]); in ath10k_tpc_config_get_rate()
4735 flags = __le32_to_cpu(ev->flags); in ath10k_tpc_config_disp_tables()
4741 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_tpc_config_disp_tables()
4748 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_tpc_config_disp_tables()
4755 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_tpc_config_disp_tables()
4766 for (i = 0; i < tpc_stats->rate_max; i++) { in ath10k_tpc_config_disp_tables()
4772 for (j = 0; j < tpc_stats->num_tx_chain; j++) { in ath10k_tpc_config_disp_tables()
4779 tpc_stats->tpc_table[type].pream_idx[i] = pream_idx; in ath10k_tpc_config_disp_tables()
4780 tpc_stats->tpc_table[type].rate_code[i] = rate_code[i]; in ath10k_tpc_config_disp_tables()
4781 memcpy(tpc_stats->tpc_table[type].tpc_value[i], in ath10k_tpc_config_disp_tables()
4891 ev = (struct wmi_pdev_tpc_config_event *)skb->data; in ath10k_wmi_event_pdev_tpc_config()
4893 num_tx_chain = __le32_to_cpu(ev->num_tx_chain); in ath10k_wmi_event_pdev_tpc_config()
4901 rate_max = __le32_to_cpu(ev->rate_max); in ath10k_wmi_event_pdev_tpc_config()
4915 tpc_stats->chan_freq = __le32_to_cpu(ev->chan_freq); in ath10k_wmi_event_pdev_tpc_config()
4916 tpc_stats->phy_mode = __le32_to_cpu(ev->phy_mode); in ath10k_wmi_event_pdev_tpc_config()
4917 tpc_stats->ctl = __le32_to_cpu(ev->ctl); in ath10k_wmi_event_pdev_tpc_config()
4918 tpc_stats->reg_domain = __le32_to_cpu(ev->reg_domain); in ath10k_wmi_event_pdev_tpc_config()
4919 tpc_stats->twice_antenna_gain = a_sle32_to_cpu(ev->twice_antenna_gain); in ath10k_wmi_event_pdev_tpc_config()
4920 tpc_stats->twice_antenna_reduction = in ath10k_wmi_event_pdev_tpc_config()
4921 __le32_to_cpu(ev->twice_antenna_reduction); in ath10k_wmi_event_pdev_tpc_config()
4922 tpc_stats->power_limit = __le32_to_cpu(ev->power_limit); in ath10k_wmi_event_pdev_tpc_config()
4923 tpc_stats->twice_max_rd_power = __le32_to_cpu(ev->twice_max_rd_power); in ath10k_wmi_event_pdev_tpc_config()
4924 tpc_stats->num_tx_chain = num_tx_chain; in ath10k_wmi_event_pdev_tpc_config()
4925 tpc_stats->rate_max = rate_max; in ath10k_wmi_event_pdev_tpc_config()
4941 __le32_to_cpu(ev->chan_freq), in ath10k_wmi_event_pdev_tpc_config()
4942 __le32_to_cpu(ev->phy_mode), in ath10k_wmi_event_pdev_tpc_config()
4943 __le32_to_cpu(ev->ctl), in ath10k_wmi_event_pdev_tpc_config()
4944 __le32_to_cpu(ev->reg_domain), in ath10k_wmi_event_pdev_tpc_config()
4945 a_sle32_to_cpu(ev->twice_antenna_gain), in ath10k_wmi_event_pdev_tpc_config()
4946 __le32_to_cpu(ev->twice_antenna_reduction), in ath10k_wmi_event_pdev_tpc_config()
4947 __le32_to_cpu(ev->power_limit), in ath10k_wmi_event_pdev_tpc_config()
4948 __le32_to_cpu(ev->twice_max_rd_power) / 2, in ath10k_wmi_event_pdev_tpc_config()
4949 __le32_to_cpu(ev->num_tx_chain), in ath10k_wmi_event_pdev_tpc_config()
4950 __le32_to_cpu(ev->rate_max)); in ath10k_wmi_event_pdev_tpc_config()
4965 ch = num_chains - 1; in ath10k_wmi_tpc_final_get_rate()
4966 stm_idx = num_streams - 1; in ath10k_wmi_tpc_final_get_rate()
4967 pream = -1; in ath10k_wmi_tpc_final_get_rate()
4969 if (__le32_to_cpu(ev->chan_freq) <= 2483) { in ath10k_wmi_tpc_final_get_rate()
4989 pream = -1; in ath10k_wmi_tpc_final_get_rate()
4994 if (__le32_to_cpu(ev->chan_freq) >= 5180) { in ath10k_wmi_tpc_final_get_rate()
5014 pream = -1; in ath10k_wmi_tpc_final_get_rate()
5019 if (pream == -1) { in ath10k_wmi_tpc_final_get_rate()
5021 pream_idx, __le32_to_cpu(ev->chan_freq)); in ath10k_wmi_tpc_final_get_rate()
5027 tpc = min_t(u8, ev->rates_array[rate_idx], in ath10k_wmi_tpc_final_get_rate()
5028 ev->max_reg_allow_pow[ch]); in ath10k_wmi_tpc_final_get_rate()
5030 tpc = min_t(u8, min_t(u8, ev->rates_array[rate_idx], in ath10k_wmi_tpc_final_get_rate()
5031 ev->max_reg_allow_pow[ch]), in ath10k_wmi_tpc_final_get_rate()
5032 ev->ctl_power_table[0][pream][stm_idx]); in ath10k_wmi_tpc_final_get_rate()
5034 if (__le32_to_cpu(ev->num_tx_chain) <= 1) in ath10k_wmi_tpc_final_get_rate()
5045 pow_agstbc = ev->max_reg_allow_pow_agstbc[ch - 1][stm_idx]; in ath10k_wmi_tpc_final_get_rate()
5050 ev->ctl_power_table[0][pream][stm_idx]); in ath10k_wmi_tpc_final_get_rate()
5053 pow_agtxbf = ev->max_reg_allow_pow_agtxbf[ch - 1][stm_idx]; in ath10k_wmi_tpc_final_get_rate()
5058 ev->ctl_power_table[1][pream][stm_idx]); in ath10k_wmi_tpc_final_get_rate()
5061 pow_agcdd = ev->max_reg_allow_pow_agcdd[ch - 1][stm_idx]; in ath10k_wmi_tpc_final_get_rate()
5066 ev->ctl_power_table[0][pream][stm_idx]); in ath10k_wmi_tpc_final_get_rate()
5089 flags = __le32_to_cpu(ev->flags); in ath10k_wmi_tpc_stats_final_disp_tables()
5095 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_wmi_tpc_stats_final_disp_tables()
5102 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_wmi_tpc_stats_final_disp_tables()
5109 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_wmi_tpc_stats_final_disp_tables()
5120 for (i = 0; i < tpc_stats->rate_max; i++) { in ath10k_wmi_tpc_stats_final_disp_tables()
5126 for (j = 0; j < tpc_stats->num_tx_chain; j++) { in ath10k_wmi_tpc_stats_final_disp_tables()
5133 tpc_stats->tpc_table_final[type].pream_idx[i] = pream_idx; in ath10k_wmi_tpc_stats_final_disp_tables()
5134 tpc_stats->tpc_table_final[type].rate_code[i] = rate_code[i]; in ath10k_wmi_tpc_stats_final_disp_tables()
5135 memcpy(tpc_stats->tpc_table_final[type].tpc_value[i], in ath10k_wmi_tpc_stats_final_disp_tables()
5148 ev = (struct wmi_pdev_tpc_final_table_event *)skb->data; in ath10k_wmi_event_tpc_final_table()
5150 num_tx_chain = __le32_to_cpu(ev->num_tx_chain); in ath10k_wmi_event_tpc_final_table()
5157 rate_max = __le32_to_cpu(ev->rate_max); in ath10k_wmi_event_tpc_final_table()
5171 tpc_stats->chan_freq = __le32_to_cpu(ev->chan_freq); in ath10k_wmi_event_tpc_final_table()
5172 tpc_stats->phy_mode = __le32_to_cpu(ev->phy_mode); in ath10k_wmi_event_tpc_final_table()
5173 tpc_stats->ctl = __le32_to_cpu(ev->ctl); in ath10k_wmi_event_tpc_final_table()
5174 tpc_stats->reg_domain = __le32_to_cpu(ev->reg_domain); in ath10k_wmi_event_tpc_final_table()
5175 tpc_stats->twice_antenna_gain = a_sle32_to_cpu(ev->twice_antenna_gain); in ath10k_wmi_event_tpc_final_table()
5176 tpc_stats->twice_antenna_reduction = in ath10k_wmi_event_tpc_final_table()
5177 __le32_to_cpu(ev->twice_antenna_reduction); in ath10k_wmi_event_tpc_final_table()
5178 tpc_stats->power_limit = __le32_to_cpu(ev->power_limit); in ath10k_wmi_event_tpc_final_table()
5179 tpc_stats->twice_max_rd_power = __le32_to_cpu(ev->twice_max_rd_power); in ath10k_wmi_event_tpc_final_table()
5180 tpc_stats->num_tx_chain = num_tx_chain; in ath10k_wmi_event_tpc_final_table()
5181 tpc_stats->rate_max = rate_max; in ath10k_wmi_event_tpc_final_table()
5197 __le32_to_cpu(ev->chan_freq), in ath10k_wmi_event_tpc_final_table()
5198 __le32_to_cpu(ev->phy_mode), in ath10k_wmi_event_tpc_final_table()
5199 __le32_to_cpu(ev->ctl), in ath10k_wmi_event_tpc_final_table()
5200 __le32_to_cpu(ev->reg_domain), in ath10k_wmi_event_tpc_final_table()
5201 a_sle32_to_cpu(ev->twice_antenna_gain), in ath10k_wmi_event_tpc_final_table()
5202 __le32_to_cpu(ev->twice_antenna_reduction), in ath10k_wmi_event_tpc_final_table()
5203 __le32_to_cpu(ev->power_limit), in ath10k_wmi_event_tpc_final_table()
5204 __le32_to_cpu(ev->twice_max_rd_power) / 2, in ath10k_wmi_event_tpc_final_table()
5205 __le32_to_cpu(ev->num_tx_chain), in ath10k_wmi_event_tpc_final_table()
5206 __le32_to_cpu(ev->rate_max)); in ath10k_wmi_event_tpc_final_table()
5220 if (skb->len < sizeof(*ev)) { in ath10k_wmi_handle_tdls_peer_event()
5222 skb->len); in ath10k_wmi_handle_tdls_peer_event()
5226 ev = (struct wmi_tdls_peer_event *)skb->data; in ath10k_wmi_handle_tdls_peer_event()
5227 vdev_id = __le32_to_cpu(ev->vdev_id); in ath10k_wmi_handle_tdls_peer_event()
5228 peer_status = __le32_to_cpu(ev->peer_status); in ath10k_wmi_handle_tdls_peer_event()
5229 peer_reason = __le32_to_cpu(ev->peer_reason); in ath10k_wmi_handle_tdls_peer_event()
5231 spin_lock_bh(&ar->data_lock); in ath10k_wmi_handle_tdls_peer_event()
5232 peer = ath10k_peer_find(ar, vdev_id, ev->peer_macaddr.addr); in ath10k_wmi_handle_tdls_peer_event()
5233 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_handle_tdls_peer_event()
5237 ev->peer_macaddr.addr); in ath10k_wmi_handle_tdls_peer_event()
5261 ieee80211_tdls_oper_request(arvif->vif, ev->peer_macaddr.addr, in ath10k_wmi_handle_tdls_peer_event()
5267 ev->peer_macaddr.addr, peer_reason); in ath10k_wmi_handle_tdls_peer_event()
5285 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_peer_sta_ps_state_chg()
5287 ev = (struct wmi_peer_sta_ps_state_chg_event *)skb->data; in ath10k_wmi_event_peer_sta_ps_state_chg()
5288 ether_addr_copy(peer_addr, ev->peer_macaddr.addr); in ath10k_wmi_event_peer_sta_ps_state_chg()
5292 sta = ieee80211_find_sta_by_ifaddr(ar->hw, peer_addr, NULL); in ath10k_wmi_event_peer_sta_ps_state_chg()
5300 arsta = (struct ath10k_sta *)sta->drv_priv; in ath10k_wmi_event_peer_sta_ps_state_chg()
5301 arsta->peer_ps_state = __le32_to_cpu(ev->peer_ps_state); in ath10k_wmi_event_peer_sta_ps_state_chg()
5358 int idx = ar->wmi.num_mem_chunks; in ath10k_wmi_alloc_chunk()
5362 vaddr = dma_alloc_coherent(ar->dev, pool_size, &paddr, GFP_KERNEL); in ath10k_wmi_alloc_chunk()
5365 return -ENOMEM; in ath10k_wmi_alloc_chunk()
5367 ar->wmi.mem_chunks[idx].vaddr = vaddr; in ath10k_wmi_alloc_chunk()
5368 ar->wmi.mem_chunks[idx].paddr = paddr; in ath10k_wmi_alloc_chunk()
5369 ar->wmi.mem_chunks[idx].len = pool_size; in ath10k_wmi_alloc_chunk()
5370 ar->wmi.mem_chunks[idx].req_id = req_id; in ath10k_wmi_alloc_chunk()
5371 ar->wmi.num_mem_chunks++; in ath10k_wmi_alloc_chunk()
5386 num_units -= ret; in ath10k_wmi_alloc_host_mem()
5402 if (ar->wmi.num_mem_chunks != num_mem_reqs) in ath10k_wmi_is_host_mem_allocated()
5406 req_id = __le32_to_cpu(mem_reqs[i]->req_id); in ath10k_wmi_is_host_mem_allocated()
5407 num_units = __le32_to_cpu(mem_reqs[i]->num_units); in ath10k_wmi_is_host_mem_allocated()
5408 unit_size = __le32_to_cpu(mem_reqs[i]->unit_size); in ath10k_wmi_is_host_mem_allocated()
5409 num_unit_info = __le32_to_cpu(mem_reqs[i]->num_unit_info); in ath10k_wmi_is_host_mem_allocated()
5412 if (ar->num_active_peers) in ath10k_wmi_is_host_mem_allocated()
5413 num_units = ar->num_active_peers + 1; in ath10k_wmi_is_host_mem_allocated()
5415 num_units = ar->max_num_peers + 1; in ath10k_wmi_is_host_mem_allocated()
5417 num_units = ar->max_num_peers + 1; in ath10k_wmi_is_host_mem_allocated()
5419 num_units = ar->max_num_vdevs + 1; in ath10k_wmi_is_host_mem_allocated()
5423 for (j = 0; j < ar->wmi.num_mem_chunks; j++) { in ath10k_wmi_is_host_mem_allocated()
5424 if (ar->wmi.mem_chunks[j].req_id == req_id) { in ath10k_wmi_is_host_mem_allocated()
5426 if (ar->wmi.mem_chunks[j].len == pool_size) { in ath10k_wmi_is_host_mem_allocated()
5446 if (skb->len < sizeof(*ev)) in ath10k_wmi_main_op_pull_svc_rdy_ev()
5447 return -EPROTO; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5449 ev = (void *)skb->data; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5451 arg->min_tx_power = ev->hw_min_tx_power; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5452 arg->max_tx_power = ev->hw_max_tx_power; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5453 arg->ht_cap = ev->ht_cap_info; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5454 arg->vht_cap = ev->vht_cap_info; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5455 arg->vht_supp_mcs = ev->vht_supp_mcs; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5456 arg->sw_ver0 = ev->sw_version; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5457 arg->sw_ver1 = ev->sw_version_1; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5458 arg->phy_capab = ev->phy_capability; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5459 arg->num_rf_chains = ev->num_rf_chains; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5460 arg->eeprom_rd = ev->hal_reg_capabilities.eeprom_rd; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5461 arg->low_2ghz_chan = ev->hal_reg_capabilities.low_2ghz_chan; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5462 arg->high_2ghz_chan = ev->hal_reg_capabilities.high_2ghz_chan; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5463 arg->low_5ghz_chan = ev->hal_reg_capabilities.low_5ghz_chan; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5464 arg->high_5ghz_chan = ev->hal_reg_capabilities.high_5ghz_chan; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5465 arg->num_mem_reqs = ev->num_mem_reqs; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5466 arg->service_map = ev->wmi_service_bitmap; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5467 arg->service_map_len = sizeof(ev->wmi_service_bitmap); in ath10k_wmi_main_op_pull_svc_rdy_ev()
5469 n = min_t(size_t, __le32_to_cpu(arg->num_mem_reqs), in ath10k_wmi_main_op_pull_svc_rdy_ev()
5470 ARRAY_SIZE(arg->mem_reqs)); in ath10k_wmi_main_op_pull_svc_rdy_ev()
5472 arg->mem_reqs[i] = &ev->mem_reqs[i]; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5474 if (skb->len < in ath10k_wmi_main_op_pull_svc_rdy_ev()
5475 __le32_to_cpu(arg->num_mem_reqs) * sizeof(arg->mem_reqs[0])) in ath10k_wmi_main_op_pull_svc_rdy_ev()
5476 return -EPROTO; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5488 if (skb->len < sizeof(*ev)) in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5489 return -EPROTO; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5491 ev = (void *)skb->data; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5493 arg->min_tx_power = ev->hw_min_tx_power; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5494 arg->max_tx_power = ev->hw_max_tx_power; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5495 arg->ht_cap = ev->ht_cap_info; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5496 arg->vht_cap = ev->vht_cap_info; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5497 arg->vht_supp_mcs = ev->vht_supp_mcs; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5498 arg->sw_ver0 = ev->sw_version; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5499 arg->phy_capab = ev->phy_capability; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5500 arg->num_rf_chains = ev->num_rf_chains; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5501 arg->eeprom_rd = ev->hal_reg_capabilities.eeprom_rd; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5502 arg->low_2ghz_chan = ev->hal_reg_capabilities.low_2ghz_chan; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5503 arg->high_2ghz_chan = ev->hal_reg_capabilities.high_2ghz_chan; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5504 arg->low_5ghz_chan = ev->hal_reg_capabilities.low_5ghz_chan; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5505 arg->high_5ghz_chan = ev->hal_reg_capabilities.high_5ghz_chan; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5506 arg->num_mem_reqs = ev->num_mem_reqs; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5507 arg->service_map = ev->wmi_service_bitmap; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5508 arg->service_map_len = sizeof(ev->wmi_service_bitmap); in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5510 /* Deliberately skipping ev->sys_cap_info as WMI and WMI-TLV have in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5513 * WMI interface (only from WMI-TLV) safest it to skip it. in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5516 n = min_t(size_t, __le32_to_cpu(arg->num_mem_reqs), in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5517 ARRAY_SIZE(arg->mem_reqs)); in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5519 arg->mem_reqs[i] = &ev->mem_reqs[i]; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5521 if (skb->len < in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5522 __le32_to_cpu(arg->num_mem_reqs) * sizeof(arg->mem_reqs[0])) in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5523 return -EPROTO; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5531 struct sk_buff *skb = ar->svc_rdy_skb; in ath10k_wmi_event_service_ready_work()
5548 ath10k_wmi_map_svc(ar, arg.service_map, ar->wmi.svc_map, in ath10k_wmi_event_service_ready_work()
5551 ar->hw_min_tx_power = __le32_to_cpu(arg.min_tx_power); in ath10k_wmi_event_service_ready_work()
5552 ar->hw_max_tx_power = __le32_to_cpu(arg.max_tx_power); in ath10k_wmi_event_service_ready_work()
5553 ar->ht_cap_info = __le32_to_cpu(arg.ht_cap); in ath10k_wmi_event_service_ready_work()
5554 ar->vht_cap_info = __le32_to_cpu(arg.vht_cap); in ath10k_wmi_event_service_ready_work()
5555 ar->vht_supp_mcs = __le32_to_cpu(arg.vht_supp_mcs); in ath10k_wmi_event_service_ready_work()
5556 ar->fw_version_major = in ath10k_wmi_event_service_ready_work()
5558 ar->fw_version_minor = (__le32_to_cpu(arg.sw_ver0) & 0x00ffffff); in ath10k_wmi_event_service_ready_work()
5559 ar->fw_version_release = in ath10k_wmi_event_service_ready_work()
5561 ar->fw_version_build = (__le32_to_cpu(arg.sw_ver1) & 0x0000ffff); in ath10k_wmi_event_service_ready_work()
5562 ar->phy_capability = __le32_to_cpu(arg.phy_capab); in ath10k_wmi_event_service_ready_work()
5563 ar->num_rf_chains = __le32_to_cpu(arg.num_rf_chains); in ath10k_wmi_event_service_ready_work()
5564 ar->hw_eeprom_rd = __le32_to_cpu(arg.eeprom_rd); in ath10k_wmi_event_service_ready_work()
5565 ar->low_2ghz_chan = __le32_to_cpu(arg.low_2ghz_chan); in ath10k_wmi_event_service_ready_work()
5566 ar->high_2ghz_chan = __le32_to_cpu(arg.high_2ghz_chan); in ath10k_wmi_event_service_ready_work()
5567 ar->low_5ghz_chan = __le32_to_cpu(arg.low_5ghz_chan); in ath10k_wmi_event_service_ready_work()
5568 ar->high_5ghz_chan = __le32_to_cpu(arg.high_5ghz_chan); in ath10k_wmi_event_service_ready_work()
5569 ar->sys_cap_info = __le32_to_cpu(arg.sys_cap_info); in ath10k_wmi_event_service_ready_work()
5574 ar->sys_cap_info); in ath10k_wmi_event_service_ready_work()
5576 if (ar->num_rf_chains > ar->max_spatial_stream) { in ath10k_wmi_event_service_ready_work()
5578 ar->num_rf_chains, ar->max_spatial_stream); in ath10k_wmi_event_service_ready_work()
5579 ar->num_rf_chains = ar->max_spatial_stream; in ath10k_wmi_event_service_ready_work()
5582 if (!ar->cfg_tx_chainmask) { in ath10k_wmi_event_service_ready_work()
5583 ar->cfg_tx_chainmask = (1 << ar->num_rf_chains) - 1; in ath10k_wmi_event_service_ready_work()
5584 ar->cfg_rx_chainmask = (1 << ar->num_rf_chains) - 1; in ath10k_wmi_event_service_ready_work()
5587 if (strlen(ar->hw->wiphy->fw_version) == 0) { in ath10k_wmi_event_service_ready_work()
5588 snprintf(ar->hw->wiphy->fw_version, in ath10k_wmi_event_service_ready_work()
5589 sizeof(ar->hw->wiphy->fw_version), in ath10k_wmi_event_service_ready_work()
5591 ar->fw_version_major, in ath10k_wmi_event_service_ready_work()
5592 ar->fw_version_minor, in ath10k_wmi_event_service_ready_work()
5593 ar->fw_version_release, in ath10k_wmi_event_service_ready_work()
5594 ar->fw_version_build); in ath10k_wmi_event_service_ready_work()
5604 if (test_bit(WMI_SERVICE_PEER_CACHING, ar->wmi.svc_map)) { in ath10k_wmi_event_service_ready_work()
5606 ar->running_fw->fw_file.fw_features)) in ath10k_wmi_event_service_ready_work()
5607 ar->num_active_peers = TARGET_10_4_QCACHE_ACTIVE_PEERS_PFC + in ath10k_wmi_event_service_ready_work()
5608 ar->max_num_vdevs; in ath10k_wmi_event_service_ready_work()
5610 ar->num_active_peers = TARGET_10_4_QCACHE_ACTIVE_PEERS + in ath10k_wmi_event_service_ready_work()
5611 ar->max_num_vdevs; in ath10k_wmi_event_service_ready_work()
5613 ar->max_num_peers = TARGET_10_4_NUM_QCACHE_PEERS_MAX + in ath10k_wmi_event_service_ready_work()
5614 ar->max_num_vdevs; in ath10k_wmi_event_service_ready_work()
5615 ar->num_tids = ar->num_active_peers * 2; in ath10k_wmi_event_service_ready_work()
5616 ar->max_num_stations = TARGET_10_4_NUM_QCACHE_PEERS_MAX; in ath10k_wmi_event_service_ready_work()
5636 req_id = __le32_to_cpu(arg.mem_reqs[i]->req_id); in ath10k_wmi_event_service_ready_work()
5637 num_units = __le32_to_cpu(arg.mem_reqs[i]->num_units); in ath10k_wmi_event_service_ready_work()
5638 unit_size = __le32_to_cpu(arg.mem_reqs[i]->unit_size); in ath10k_wmi_event_service_ready_work()
5639 num_unit_info = __le32_to_cpu(arg.mem_reqs[i]->num_unit_info); in ath10k_wmi_event_service_ready_work()
5642 if (ar->num_active_peers) in ath10k_wmi_event_service_ready_work()
5643 num_units = ar->num_active_peers + 1; in ath10k_wmi_event_service_ready_work()
5645 num_units = ar->max_num_peers + 1; in ath10k_wmi_event_service_ready_work()
5652 num_units = ar->max_num_peers + 1; in ath10k_wmi_event_service_ready_work()
5654 num_units = ar->max_num_vdevs + 1; in ath10k_wmi_event_service_ready_work()
5660 __le32_to_cpu(arg.mem_reqs[i]->num_units), in ath10k_wmi_event_service_ready_work()
5692 ar->svc_rdy_skb = NULL; in ath10k_wmi_event_service_ready_work()
5693 complete(&ar->wmi.service_ready); in ath10k_wmi_event_service_ready_work()
5698 ar->svc_rdy_skb = skb; in ath10k_wmi_event_service_ready()
5699 queue_work(ar->workqueue_aux, &ar->svc_rdy_work); in ath10k_wmi_event_service_ready()
5705 struct wmi_ready_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_rdy_ev()
5707 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_rdy_ev()
5708 return -EPROTO; in ath10k_wmi_op_pull_rdy_ev()
5711 arg->sw_version = ev->sw_version; in ath10k_wmi_op_pull_rdy_ev()
5712 arg->abi_version = ev->abi_version; in ath10k_wmi_op_pull_rdy_ev()
5713 arg->status = ev->status; in ath10k_wmi_op_pull_rdy_ev()
5714 arg->mac_addr = ev->mac_addr.addr; in ath10k_wmi_op_pull_rdy_ev()
5722 struct wmi_roam_ev *ev = (void *)skb->data; in ath10k_wmi_op_pull_roam_ev()
5724 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_roam_ev()
5725 return -EPROTO; in ath10k_wmi_op_pull_roam_ev()
5728 arg->vdev_id = ev->vdev_id; in ath10k_wmi_op_pull_roam_ev()
5729 arg->reason = ev->reason; in ath10k_wmi_op_pull_roam_ev()
5738 struct wmi_echo_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_echo_ev()
5740 arg->value = ev->value; in ath10k_wmi_op_pull_echo_ev()
5763 if (is_zero_ether_addr(ar->mac_addr)) in ath10k_wmi_event_ready()
5764 ether_addr_copy(ar->mac_addr, arg.mac_addr); in ath10k_wmi_event_ready()
5765 complete(&ar->wmi.unified_ready); in ath10k_wmi_event_ready()
5785 ath10k_wmi_map_svc_ext(ar, arg.service_map_ext, ar->wmi.svc_map, in ath10k_wmi_event_service_available()
5793 ev = (struct wmi_pdev_temperature_event *)skb->data; in ath10k_wmi_event_temperature()
5794 if (WARN_ON(skb->len < sizeof(*ev))) in ath10k_wmi_event_temperature()
5795 return -EPROTO; in ath10k_wmi_event_temperature()
5797 ath10k_thermal_event_temperature(ar, __le32_to_cpu(ev->temperature)); in ath10k_wmi_event_temperature()
5808 u32 cc_freq_hz = ar->hw_params.channel_counters_freq_hz; in ath10k_wmi_event_pdev_bss_chan_info()
5811 ev = (struct wmi_pdev_bss_chan_info_event *)skb->data; in ath10k_wmi_event_pdev_bss_chan_info()
5812 if (WARN_ON(skb->len < sizeof(*ev))) in ath10k_wmi_event_pdev_bss_chan_info()
5813 return -EPROTO; in ath10k_wmi_event_pdev_bss_chan_info()
5815 freq = __le32_to_cpu(ev->freq); in ath10k_wmi_event_pdev_bss_chan_info()
5816 noise_floor = __le32_to_cpu(ev->noise_floor); in ath10k_wmi_event_pdev_bss_chan_info()
5817 busy = __le64_to_cpu(ev->cycle_busy); in ath10k_wmi_event_pdev_bss_chan_info()
5818 total = __le64_to_cpu(ev->cycle_total); in ath10k_wmi_event_pdev_bss_chan_info()
5819 tx = __le64_to_cpu(ev->cycle_tx); in ath10k_wmi_event_pdev_bss_chan_info()
5820 rx = __le64_to_cpu(ev->cycle_rx); in ath10k_wmi_event_pdev_bss_chan_info()
5821 rx_bss = __le64_to_cpu(ev->cycle_rx_bss); in ath10k_wmi_event_pdev_bss_chan_info()
5827 spin_lock_bh(&ar->data_lock); in ath10k_wmi_event_pdev_bss_chan_info()
5829 if (idx >= ARRAY_SIZE(ar->survey)) { in ath10k_wmi_event_pdev_bss_chan_info()
5835 survey = &ar->survey[idx]; in ath10k_wmi_event_pdev_bss_chan_info()
5837 survey->noise = noise_floor; in ath10k_wmi_event_pdev_bss_chan_info()
5838 survey->time = div_u64(total, cc_freq_hz); in ath10k_wmi_event_pdev_bss_chan_info()
5839 survey->time_busy = div_u64(busy, cc_freq_hz); in ath10k_wmi_event_pdev_bss_chan_info()
5840 survey->time_rx = div_u64(rx_bss, cc_freq_hz); in ath10k_wmi_event_pdev_bss_chan_info()
5841 survey->time_tx = div_u64(tx, cc_freq_hz); in ath10k_wmi_event_pdev_bss_chan_info()
5842 survey->filled |= (SURVEY_INFO_NOISE_DBM | in ath10k_wmi_event_pdev_bss_chan_info()
5848 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_event_pdev_bss_chan_info()
5849 complete(&ar->bss_survey_done); in ath10k_wmi_event_pdev_bss_chan_info()
5855 if (ar->hw_params.hw_ops->set_coverage_class) { in ath10k_wmi_queue_set_coverage_class_work()
5856 spin_lock_bh(&ar->data_lock); in ath10k_wmi_queue_set_coverage_class_work()
5861 * coverage class has a non-zero value. in ath10k_wmi_queue_set_coverage_class_work()
5863 if (ar->fw_coverage.coverage_class) in ath10k_wmi_queue_set_coverage_class_work()
5864 queue_work(ar->workqueue, &ar->set_coverage_class_work); in ath10k_wmi_queue_set_coverage_class_work()
5866 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_queue_set_coverage_class_work()
5875 cmd_hdr = (struct wmi_cmd_hdr *)skb->data; in ath10k_wmi_op_rx()
5876 id = MS(__le32_to_cpu(cmd_hdr->cmd_id), WMI_CMD_HDR_CMD_ID); in ath10k_wmi_op_rx()
5881 trace_ath10k_wmi_event(ar, id, skb->data, skb->len); in ath10k_wmi_op_rx()
6003 cmd_hdr = (struct wmi_cmd_hdr *)skb->data; in ath10k_wmi_10_1_op_rx()
6004 id = MS(__le32_to_cpu(cmd_hdr->cmd_id), WMI_CMD_HDR_CMD_ID); in ath10k_wmi_10_1_op_rx()
6009 trace_ath10k_wmi_event(ar, id, skb->data, skb->len); in ath10k_wmi_10_1_op_rx()
6134 cmd_hdr = (struct wmi_cmd_hdr *)skb->data; in ath10k_wmi_10_2_op_rx()
6135 id = MS(__le32_to_cpu(cmd_hdr->cmd_id), WMI_CMD_HDR_CMD_ID); in ath10k_wmi_10_2_op_rx()
6140 trace_ath10k_wmi_event(ar, id, skb->data, skb->len); in ath10k_wmi_10_2_op_rx()
6283 cmd_hdr = (struct wmi_cmd_hdr *)skb->data; in ath10k_wmi_10_4_op_rx()
6284 id = MS(__le32_to_cpu(cmd_hdr->cmd_id), WMI_CMD_HDR_CMD_ID); in ath10k_wmi_10_4_op_rx()
6289 trace_ath10k_wmi_event(ar, id, skb->data, skb->len); in ath10k_wmi_10_4_op_rx()
6412 memset(&ar->wmi.svc_map, 0, sizeof(ar->wmi.svc_map)); in ath10k_wmi_connect()
6425 status = ath10k_htc_connect_service(&ar->htc, &conn_req, &conn_resp); in ath10k_wmi_connect()
6432 ar->wmi.eid = conn_resp.eid; in ath10k_wmi_connect()
6445 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_set_base_macaddr()
6447 cmd = (struct wmi_pdev_set_base_macaddr_cmd *)skb->data; in ath10k_wmi_op_gen_pdev_set_base_macaddr()
6448 ether_addr_copy(cmd->mac_addr.addr, macaddr); in ath10k_wmi_op_gen_pdev_set_base_macaddr()
6465 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_set_rd()
6467 cmd = (struct wmi_pdev_set_regdomain_cmd *)skb->data; in ath10k_wmi_op_gen_pdev_set_rd()
6468 cmd->reg_domain = __cpu_to_le32(rd); in ath10k_wmi_op_gen_pdev_set_rd()
6469 cmd->reg_domain_2G = __cpu_to_le32(rd2g); in ath10k_wmi_op_gen_pdev_set_rd()
6470 cmd->reg_domain_5G = __cpu_to_le32(rd5g); in ath10k_wmi_op_gen_pdev_set_rd()
6471 cmd->conformance_test_limit_2G = __cpu_to_le32(ctl2g); in ath10k_wmi_op_gen_pdev_set_rd()
6472 cmd->conformance_test_limit_5G = __cpu_to_le32(ctl5g); in ath10k_wmi_op_gen_pdev_set_rd()
6490 return ERR_PTR(-ENOMEM); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6492 cmd = (struct wmi_pdev_set_regdomain_cmd_10x *)skb->data; in ath10k_wmi_10x_op_gen_pdev_set_rd()
6493 cmd->reg_domain = __cpu_to_le32(rd); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6494 cmd->reg_domain_2G = __cpu_to_le32(rd2g); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6495 cmd->reg_domain_5G = __cpu_to_le32(rd5g); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6496 cmd->conformance_test_limit_2G = __cpu_to_le32(ctl2g); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6497 cmd->conformance_test_limit_5G = __cpu_to_le32(ctl5g); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6498 cmd->dfs_domain = __cpu_to_le32(dfs_reg); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6514 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_suspend()
6516 cmd = (struct wmi_pdev_suspend_cmd *)skb->data; in ath10k_wmi_op_gen_pdev_suspend()
6517 cmd->suspend_opt = __cpu_to_le32(suspend_opt); in ath10k_wmi_op_gen_pdev_suspend()
6529 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_resume()
6543 return ERR_PTR(-EOPNOTSUPP); in ath10k_wmi_op_gen_pdev_set_param()
6548 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_set_param()
6550 cmd = (struct wmi_pdev_set_param_cmd *)skb->data; in ath10k_wmi_op_gen_pdev_set_param()
6551 cmd->param_id = __cpu_to_le32(id); in ath10k_wmi_op_gen_pdev_set_param()
6552 cmd->param_value = __cpu_to_le32(value); in ath10k_wmi_op_gen_pdev_set_param()
6565 chunks->count = __cpu_to_le32(ar->wmi.num_mem_chunks); in ath10k_wmi_put_host_mem_chunks()
6567 for (i = 0; i < ar->wmi.num_mem_chunks; i++) { in ath10k_wmi_put_host_mem_chunks()
6568 chunk = &chunks->items[i]; in ath10k_wmi_put_host_mem_chunks()
6569 chunk->ptr = __cpu_to_le32(ar->wmi.mem_chunks[i].paddr); in ath10k_wmi_put_host_mem_chunks()
6570 chunk->size = __cpu_to_le32(ar->wmi.mem_chunks[i].len); in ath10k_wmi_put_host_mem_chunks()
6571 chunk->req_id = __cpu_to_le32(ar->wmi.mem_chunks[i].req_id); in ath10k_wmi_put_host_mem_chunks()
6576 ar->wmi.mem_chunks[i].len, in ath10k_wmi_put_host_mem_chunks()
6577 (unsigned long long)ar->wmi.mem_chunks[i].paddr); in ath10k_wmi_put_host_mem_chunks()
6604 config.rx_decap_mode = __cpu_to_le32(ar->wmi.rx_decap_mode); in ath10k_wmi_op_gen_init()
6639 ar->wmi.num_mem_chunks)); in ath10k_wmi_op_gen_init()
6641 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_init()
6643 cmd = (struct wmi_init_cmd *)buf->data; in ath10k_wmi_op_gen_init()
6645 memcpy(&cmd->resource_config, &config, sizeof(config)); in ath10k_wmi_op_gen_init()
6646 ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks); in ath10k_wmi_op_gen_init()
6670 config.rx_decap_mode = __cpu_to_le32(ar->wmi.rx_decap_mode); in ath10k_wmi_10_1_op_gen_init()
6702 ar->wmi.num_mem_chunks)); in ath10k_wmi_10_1_op_gen_init()
6704 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_1_op_gen_init()
6706 cmd = (struct wmi_init_cmd_10x *)buf->data; in ath10k_wmi_10_1_op_gen_init()
6708 memcpy(&cmd->resource_config, &config, sizeof(config)); in ath10k_wmi_10_1_op_gen_init()
6709 ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks); in ath10k_wmi_10_1_op_gen_init()
6740 config.rx_decap_mode = __cpu_to_le32(ar->wmi.rx_decap_mode); in ath10k_wmi_10_2_op_gen_init()
6773 ar->wmi.num_mem_chunks)); in ath10k_wmi_10_2_op_gen_init()
6775 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_op_gen_init()
6777 cmd = (struct wmi_init_cmd_10_2 *)buf->data; in ath10k_wmi_10_2_op_gen_init()
6781 if (test_bit(ATH10K_FLAG_BTCOEX, &ar->dev_flags) && in ath10k_wmi_10_2_op_gen_init()
6782 test_bit(WMI_SERVICE_COEX_GPIO, ar->wmi.svc_map)) in ath10k_wmi_10_2_op_gen_init()
6788 if (test_bit(WMI_SERVICE_BSS_CHANNEL_INFO_64, ar->wmi.svc_map)) in ath10k_wmi_10_2_op_gen_init()
6791 cmd->resource_config.feature_mask = __cpu_to_le32(features); in ath10k_wmi_10_2_op_gen_init()
6793 memcpy(&cmd->resource_config.common, &config, sizeof(config)); in ath10k_wmi_10_2_op_gen_init()
6794 ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks); in ath10k_wmi_10_2_op_gen_init()
6806 config.num_vdevs = __cpu_to_le32(ar->max_num_vdevs); in ath10k_wmi_10_4_op_gen_init()
6807 config.num_peers = __cpu_to_le32(ar->max_num_peers); in ath10k_wmi_10_4_op_gen_init()
6808 config.num_active_peers = __cpu_to_le32(ar->num_active_peers); in ath10k_wmi_10_4_op_gen_init()
6809 config.num_tids = __cpu_to_le32(ar->num_tids); in ath10k_wmi_10_4_op_gen_init()
6816 config.tx_chain_mask = __cpu_to_le32(ar->hw_params.tx_chain_mask); in ath10k_wmi_10_4_op_gen_init()
6817 config.rx_chain_mask = __cpu_to_le32(ar->hw_params.rx_chain_mask); in ath10k_wmi_10_4_op_gen_init()
6824 config.rx_decap_mode = __cpu_to_le32(ar->wmi.rx_decap_mode); in ath10k_wmi_10_4_op_gen_init()
6848 config.num_msdu_desc = __cpu_to_le32(ar->htt.max_num_pending_tx); in ath10k_wmi_10_4_op_gen_init()
6867 ar->wmi.num_mem_chunks)); in ath10k_wmi_10_4_op_gen_init()
6869 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_op_gen_init()
6871 cmd = (struct wmi_init_cmd_10_4 *)buf->data; in ath10k_wmi_10_4_op_gen_init()
6872 memcpy(&cmd->resource_config, &config, sizeof(config)); in ath10k_wmi_10_4_op_gen_init()
6873 ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks); in ath10k_wmi_10_4_op_gen_init()
6881 if (arg->ie_len > WLAN_SCAN_PARAMS_MAX_IE_LEN) in ath10k_wmi_start_scan_verify()
6882 return -EINVAL; in ath10k_wmi_start_scan_verify()
6883 if (arg->n_channels > ARRAY_SIZE(arg->channels)) in ath10k_wmi_start_scan_verify()
6884 return -EINVAL; in ath10k_wmi_start_scan_verify()
6885 if (arg->n_ssids > WLAN_SCAN_PARAMS_MAX_SSID) in ath10k_wmi_start_scan_verify()
6886 return -EINVAL; in ath10k_wmi_start_scan_verify()
6887 if (arg->n_bssids > WLAN_SCAN_PARAMS_MAX_BSSID) in ath10k_wmi_start_scan_verify()
6888 return -EINVAL; in ath10k_wmi_start_scan_verify()
6898 if (arg->ie_len) { in ath10k_wmi_start_scan_tlvs_len()
6900 len += roundup(arg->ie_len, 4); in ath10k_wmi_start_scan_tlvs_len()
6903 if (arg->n_channels) { in ath10k_wmi_start_scan_tlvs_len()
6905 len += sizeof(__le32) * arg->n_channels; in ath10k_wmi_start_scan_tlvs_len()
6908 if (arg->n_ssids) { in ath10k_wmi_start_scan_tlvs_len()
6910 len += sizeof(struct wmi_ssid) * arg->n_ssids; in ath10k_wmi_start_scan_tlvs_len()
6913 if (arg->n_bssids) { in ath10k_wmi_start_scan_tlvs_len()
6915 len += sizeof(struct wmi_mac_addr) * arg->n_bssids; in ath10k_wmi_start_scan_tlvs_len()
6928 scan_id |= arg->scan_id; in ath10k_wmi_put_start_scan_common()
6931 scan_req_id |= arg->scan_req_id; in ath10k_wmi_put_start_scan_common()
6933 cmn->scan_id = __cpu_to_le32(scan_id); in ath10k_wmi_put_start_scan_common()
6934 cmn->scan_req_id = __cpu_to_le32(scan_req_id); in ath10k_wmi_put_start_scan_common()
6935 cmn->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_put_start_scan_common()
6936 cmn->scan_priority = __cpu_to_le32(arg->scan_priority); in ath10k_wmi_put_start_scan_common()
6937 cmn->notify_scan_events = __cpu_to_le32(arg->notify_scan_events); in ath10k_wmi_put_start_scan_common()
6938 cmn->dwell_time_active = __cpu_to_le32(arg->dwell_time_active); in ath10k_wmi_put_start_scan_common()
6939 cmn->dwell_time_passive = __cpu_to_le32(arg->dwell_time_passive); in ath10k_wmi_put_start_scan_common()
6940 cmn->min_rest_time = __cpu_to_le32(arg->min_rest_time); in ath10k_wmi_put_start_scan_common()
6941 cmn->max_rest_time = __cpu_to_le32(arg->max_rest_time); in ath10k_wmi_put_start_scan_common()
6942 cmn->repeat_probe_time = __cpu_to_le32(arg->repeat_probe_time); in ath10k_wmi_put_start_scan_common()
6943 cmn->probe_spacing_time = __cpu_to_le32(arg->probe_spacing_time); in ath10k_wmi_put_start_scan_common()
6944 cmn->idle_time = __cpu_to_le32(arg->idle_time); in ath10k_wmi_put_start_scan_common()
6945 cmn->max_scan_time = __cpu_to_le32(arg->max_scan_time); in ath10k_wmi_put_start_scan_common()
6946 cmn->probe_delay = __cpu_to_le32(arg->probe_delay); in ath10k_wmi_put_start_scan_common()
6947 cmn->scan_ctrl_flags = __cpu_to_le32(arg->scan_ctrl_flags); in ath10k_wmi_put_start_scan_common()
6961 if (arg->n_channels) { in ath10k_wmi_put_start_scan_tlvs()
6963 channels->tag = __cpu_to_le32(WMI_CHAN_LIST_TAG); in ath10k_wmi_put_start_scan_tlvs()
6964 channels->num_chan = __cpu_to_le32(arg->n_channels); in ath10k_wmi_put_start_scan_tlvs()
6966 for (i = 0; i < arg->n_channels; i++) in ath10k_wmi_put_start_scan_tlvs()
6967 channels->channel_list[i].freq = in ath10k_wmi_put_start_scan_tlvs()
6968 __cpu_to_le16(arg->channels[i]); in ath10k_wmi_put_start_scan_tlvs()
6971 ptr += sizeof(__le32) * arg->n_channels; in ath10k_wmi_put_start_scan_tlvs()
6974 if (arg->n_ssids) { in ath10k_wmi_put_start_scan_tlvs()
6976 ssids->tag = __cpu_to_le32(WMI_SSID_LIST_TAG); in ath10k_wmi_put_start_scan_tlvs()
6977 ssids->num_ssids = __cpu_to_le32(arg->n_ssids); in ath10k_wmi_put_start_scan_tlvs()
6979 for (i = 0; i < arg->n_ssids; i++) { in ath10k_wmi_put_start_scan_tlvs()
6980 ssids->ssids[i].ssid_len = in ath10k_wmi_put_start_scan_tlvs()
6981 __cpu_to_le32(arg->ssids[i].len); in ath10k_wmi_put_start_scan_tlvs()
6982 memcpy(&ssids->ssids[i].ssid, in ath10k_wmi_put_start_scan_tlvs()
6983 arg->ssids[i].ssid, in ath10k_wmi_put_start_scan_tlvs()
6984 arg->ssids[i].len); in ath10k_wmi_put_start_scan_tlvs()
6988 ptr += sizeof(struct wmi_ssid) * arg->n_ssids; in ath10k_wmi_put_start_scan_tlvs()
6991 if (arg->n_bssids) { in ath10k_wmi_put_start_scan_tlvs()
6993 bssids->tag = __cpu_to_le32(WMI_BSSID_LIST_TAG); in ath10k_wmi_put_start_scan_tlvs()
6994 bssids->num_bssid = __cpu_to_le32(arg->n_bssids); in ath10k_wmi_put_start_scan_tlvs()
6996 for (i = 0; i < arg->n_bssids; i++) in ath10k_wmi_put_start_scan_tlvs()
6997 ether_addr_copy(bssids->bssid_list[i].addr, in ath10k_wmi_put_start_scan_tlvs()
6998 arg->bssids[i].bssid); in ath10k_wmi_put_start_scan_tlvs()
7001 ptr += sizeof(struct wmi_mac_addr) * arg->n_bssids; in ath10k_wmi_put_start_scan_tlvs()
7004 if (arg->ie_len) { in ath10k_wmi_put_start_scan_tlvs()
7006 ie->tag = __cpu_to_le32(WMI_IE_TAG); in ath10k_wmi_put_start_scan_tlvs()
7007 ie->ie_len = __cpu_to_le32(arg->ie_len); in ath10k_wmi_put_start_scan_tlvs()
7008 memcpy(ie->ie_data, arg->ie, arg->ie_len); in ath10k_wmi_put_start_scan_tlvs()
7011 ptr += roundup(arg->ie_len, 4); in ath10k_wmi_put_start_scan_tlvs()
7031 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_start_scan()
7033 cmd = (struct wmi_start_scan_cmd *)skb->data; in ath10k_wmi_op_gen_start_scan()
7035 ath10k_wmi_put_start_scan_common(&cmd->common, arg); in ath10k_wmi_op_gen_start_scan()
7036 ath10k_wmi_put_start_scan_tlvs(cmd->tlvs, arg); in ath10k_wmi_op_gen_start_scan()
7038 cmd->burst_duration_ms = __cpu_to_le32(0); in ath10k_wmi_op_gen_start_scan()
7060 return ERR_PTR(-ENOMEM); in ath10k_wmi_10x_op_gen_start_scan()
7062 cmd = (struct wmi_10x_start_scan_cmd *)skb->data; in ath10k_wmi_10x_op_gen_start_scan()
7064 ath10k_wmi_put_start_scan_common(&cmd->common, arg); in ath10k_wmi_10x_op_gen_start_scan()
7065 ath10k_wmi_put_start_scan_tlvs(cmd->tlvs, arg); in ath10k_wmi_10x_op_gen_start_scan()
7075 arg->scan_req_id = 1; in ath10k_wmi_start_scan_init()
7076 arg->scan_priority = WMI_SCAN_PRIORITY_LOW; in ath10k_wmi_start_scan_init()
7077 arg->dwell_time_active = 50; in ath10k_wmi_start_scan_init()
7078 arg->dwell_time_passive = 150; in ath10k_wmi_start_scan_init()
7079 arg->min_rest_time = 50; in ath10k_wmi_start_scan_init()
7080 arg->max_rest_time = 500; in ath10k_wmi_start_scan_init()
7081 arg->repeat_probe_time = 0; in ath10k_wmi_start_scan_init()
7082 arg->probe_spacing_time = 0; in ath10k_wmi_start_scan_init()
7083 arg->idle_time = 0; in ath10k_wmi_start_scan_init()
7084 arg->max_scan_time = 20000; in ath10k_wmi_start_scan_init()
7085 arg->probe_delay = 5; in ath10k_wmi_start_scan_init()
7086 arg->notify_scan_events = WMI_SCAN_EVENT_STARTED in ath10k_wmi_start_scan_init()
7092 arg->scan_ctrl_flags |= WMI_SCAN_CHAN_STAT_EVENT; in ath10k_wmi_start_scan_init()
7093 arg->n_bssids = 1; in ath10k_wmi_start_scan_init()
7094 arg->bssids[0].bssid = "\xFF\xFF\xFF\xFF\xFF\xFF"; in ath10k_wmi_start_scan_init()
7106 if (arg->req_id > 0xFFF) in ath10k_wmi_op_gen_stop_scan()
7107 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_stop_scan()
7108 if (arg->req_type == WMI_SCAN_STOP_ONE && arg->u.scan_id > 0xFFF) in ath10k_wmi_op_gen_stop_scan()
7109 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_stop_scan()
7113 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_stop_scan()
7115 scan_id = arg->u.scan_id; in ath10k_wmi_op_gen_stop_scan()
7118 req_id = arg->req_id; in ath10k_wmi_op_gen_stop_scan()
7121 cmd = (struct wmi_stop_scan_cmd *)skb->data; in ath10k_wmi_op_gen_stop_scan()
7122 cmd->req_type = __cpu_to_le32(arg->req_type); in ath10k_wmi_op_gen_stop_scan()
7123 cmd->vdev_id = __cpu_to_le32(arg->u.vdev_id); in ath10k_wmi_op_gen_stop_scan()
7124 cmd->scan_id = __cpu_to_le32(scan_id); in ath10k_wmi_op_gen_stop_scan()
7125 cmd->scan_req_id = __cpu_to_le32(req_id); in ath10k_wmi_op_gen_stop_scan()
7129 arg->req_id, arg->req_type, arg->u.scan_id); in ath10k_wmi_op_gen_stop_scan()
7144 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_create()
7146 cmd = (struct wmi_vdev_create_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_create()
7147 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_create()
7148 cmd->vdev_type = __cpu_to_le32(type); in ath10k_wmi_op_gen_vdev_create()
7149 cmd->vdev_subtype = __cpu_to_le32(subtype); in ath10k_wmi_op_gen_vdev_create()
7150 ether_addr_copy(cmd->vdev_macaddr.addr, macaddr); in ath10k_wmi_op_gen_vdev_create()
7166 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_delete()
7168 cmd = (struct wmi_vdev_delete_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_delete()
7169 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_delete()
7186 if (WARN_ON(arg->hidden_ssid && !arg->ssid)) in ath10k_wmi_op_gen_vdev_start()
7187 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_vdev_start()
7188 if (WARN_ON(arg->ssid_len > sizeof(cmd->ssid.ssid))) in ath10k_wmi_op_gen_vdev_start()
7189 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_vdev_start()
7198 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_start()
7200 if (arg->hidden_ssid) in ath10k_wmi_op_gen_vdev_start()
7202 if (arg->pmf_enabled) in ath10k_wmi_op_gen_vdev_start()
7205 cmd = (struct wmi_vdev_start_request_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_start()
7206 cmd->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_op_gen_vdev_start()
7207 cmd->disable_hw_ack = __cpu_to_le32(arg->disable_hw_ack); in ath10k_wmi_op_gen_vdev_start()
7208 cmd->beacon_interval = __cpu_to_le32(arg->bcn_intval); in ath10k_wmi_op_gen_vdev_start()
7209 cmd->dtim_period = __cpu_to_le32(arg->dtim_period); in ath10k_wmi_op_gen_vdev_start()
7210 cmd->flags = __cpu_to_le32(flags); in ath10k_wmi_op_gen_vdev_start()
7211 cmd->bcn_tx_rate = __cpu_to_le32(arg->bcn_tx_rate); in ath10k_wmi_op_gen_vdev_start()
7212 cmd->bcn_tx_power = __cpu_to_le32(arg->bcn_tx_power); in ath10k_wmi_op_gen_vdev_start()
7214 if (arg->ssid) { in ath10k_wmi_op_gen_vdev_start()
7215 cmd->ssid.ssid_len = __cpu_to_le32(arg->ssid_len); in ath10k_wmi_op_gen_vdev_start()
7216 memcpy(cmd->ssid.ssid, arg->ssid, arg->ssid_len); in ath10k_wmi_op_gen_vdev_start()
7219 ath10k_wmi_put_wmi_channel(ar, &cmd->chan, &arg->channel); in ath10k_wmi_op_gen_vdev_start()
7223 cmdname, arg->vdev_id, in ath10k_wmi_op_gen_vdev_start()
7224 flags, arg->channel.freq, arg->channel.mode, in ath10k_wmi_op_gen_vdev_start()
7225 cmd->chan.flags, arg->channel.max_power); in ath10k_wmi_op_gen_vdev_start()
7238 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_stop()
7240 cmd = (struct wmi_vdev_stop_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_stop()
7241 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_stop()
7256 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_up()
7258 cmd = (struct wmi_vdev_up_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_up()
7259 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_up()
7260 cmd->vdev_assoc_id = __cpu_to_le32(aid); in ath10k_wmi_op_gen_vdev_up()
7261 ether_addr_copy(cmd->vdev_bssid.addr, bssid); in ath10k_wmi_op_gen_vdev_up()
7277 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_down()
7279 cmd = (struct wmi_vdev_down_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_down()
7280 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_down()
7298 return ERR_PTR(-EOPNOTSUPP); in ath10k_wmi_op_gen_vdev_set_param()
7303 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_set_param()
7305 cmd = (struct wmi_vdev_set_param_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_set_param()
7306 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_set_param()
7307 cmd->param_id = __cpu_to_le32(param_id); in ath10k_wmi_op_gen_vdev_set_param()
7308 cmd->param_value = __cpu_to_le32(param_value); in ath10k_wmi_op_gen_vdev_set_param()
7323 if (arg->key_cipher == WMI_CIPHER_NONE && arg->key_data != NULL) in ath10k_wmi_op_gen_vdev_install_key()
7324 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_vdev_install_key()
7325 if (arg->key_cipher != WMI_CIPHER_NONE && arg->key_data == NULL) in ath10k_wmi_op_gen_vdev_install_key()
7326 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_vdev_install_key()
7328 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd) + arg->key_len); in ath10k_wmi_op_gen_vdev_install_key()
7330 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_install_key()
7332 cmd = (struct wmi_vdev_install_key_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_install_key()
7333 cmd->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_op_gen_vdev_install_key()
7334 cmd->key_idx = __cpu_to_le32(arg->key_idx); in ath10k_wmi_op_gen_vdev_install_key()
7335 cmd->key_flags = __cpu_to_le32(arg->key_flags); in ath10k_wmi_op_gen_vdev_install_key()
7336 cmd->key_cipher = __cpu_to_le32(arg->key_cipher); in ath10k_wmi_op_gen_vdev_install_key()
7337 cmd->key_len = __cpu_to_le32(arg->key_len); in ath10k_wmi_op_gen_vdev_install_key()
7338 cmd->key_txmic_len = __cpu_to_le32(arg->key_txmic_len); in ath10k_wmi_op_gen_vdev_install_key()
7339 cmd->key_rxmic_len = __cpu_to_le32(arg->key_rxmic_len); in ath10k_wmi_op_gen_vdev_install_key()
7341 if (arg->macaddr) in ath10k_wmi_op_gen_vdev_install_key()
7342 ether_addr_copy(cmd->peer_macaddr.addr, arg->macaddr); in ath10k_wmi_op_gen_vdev_install_key()
7343 if (arg->key_data) in ath10k_wmi_op_gen_vdev_install_key()
7344 memcpy(cmd->key_data, arg->key_data, arg->key_len); in ath10k_wmi_op_gen_vdev_install_key()
7348 arg->key_idx, arg->key_cipher, arg->key_len); in ath10k_wmi_op_gen_vdev_install_key()
7361 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_spectral_conf()
7363 cmd = (struct wmi_vdev_spectral_conf_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_spectral_conf()
7364 cmd->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_op_gen_vdev_spectral_conf()
7365 cmd->scan_count = __cpu_to_le32(arg->scan_count); in ath10k_wmi_op_gen_vdev_spectral_conf()
7366 cmd->scan_period = __cpu_to_le32(arg->scan_period); in ath10k_wmi_op_gen_vdev_spectral_conf()
7367 cmd->scan_priority = __cpu_to_le32(arg->scan_priority); in ath10k_wmi_op_gen_vdev_spectral_conf()
7368 cmd->scan_fft_size = __cpu_to_le32(arg->scan_fft_size); in ath10k_wmi_op_gen_vdev_spectral_conf()
7369 cmd->scan_gc_ena = __cpu_to_le32(arg->scan_gc_ena); in ath10k_wmi_op_gen_vdev_spectral_conf()
7370 cmd->scan_restart_ena = __cpu_to_le32(arg->scan_restart_ena); in ath10k_wmi_op_gen_vdev_spectral_conf()
7371 cmd->scan_noise_floor_ref = __cpu_to_le32(arg->scan_noise_floor_ref); in ath10k_wmi_op_gen_vdev_spectral_conf()
7372 cmd->scan_init_delay = __cpu_to_le32(arg->scan_init_delay); in ath10k_wmi_op_gen_vdev_spectral_conf()
7373 cmd->scan_nb_tone_thr = __cpu_to_le32(arg->scan_nb_tone_thr); in ath10k_wmi_op_gen_vdev_spectral_conf()
7374 cmd->scan_str_bin_thr = __cpu_to_le32(arg->scan_str_bin_thr); in ath10k_wmi_op_gen_vdev_spectral_conf()
7375 cmd->scan_wb_rpt_mode = __cpu_to_le32(arg->scan_wb_rpt_mode); in ath10k_wmi_op_gen_vdev_spectral_conf()
7376 cmd->scan_rssi_rpt_mode = __cpu_to_le32(arg->scan_rssi_rpt_mode); in ath10k_wmi_op_gen_vdev_spectral_conf()
7377 cmd->scan_rssi_thr = __cpu_to_le32(arg->scan_rssi_thr); in ath10k_wmi_op_gen_vdev_spectral_conf()
7378 cmd->scan_pwr_format = __cpu_to_le32(arg->scan_pwr_format); in ath10k_wmi_op_gen_vdev_spectral_conf()
7379 cmd->scan_rpt_mode = __cpu_to_le32(arg->scan_rpt_mode); in ath10k_wmi_op_gen_vdev_spectral_conf()
7380 cmd->scan_bin_scale = __cpu_to_le32(arg->scan_bin_scale); in ath10k_wmi_op_gen_vdev_spectral_conf()
7381 cmd->scan_dbm_adj = __cpu_to_le32(arg->scan_dbm_adj); in ath10k_wmi_op_gen_vdev_spectral_conf()
7382 cmd->scan_chn_mask = __cpu_to_le32(arg->scan_chn_mask); in ath10k_wmi_op_gen_vdev_spectral_conf()
7396 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_spectral_enable()
7398 cmd = (struct wmi_vdev_spectral_enable_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_spectral_enable()
7399 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_spectral_enable()
7400 cmd->trigger_cmd = __cpu_to_le32(trigger); in ath10k_wmi_op_gen_vdev_spectral_enable()
7401 cmd->enable_cmd = __cpu_to_le32(enable); in ath10k_wmi_op_gen_vdev_spectral_enable()
7416 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_peer_create()
7418 cmd = (struct wmi_peer_create_cmd *)skb->data; in ath10k_wmi_op_gen_peer_create()
7419 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_peer_create()
7420 ether_addr_copy(cmd->peer_macaddr.addr, peer_addr); in ath10k_wmi_op_gen_peer_create()
7421 cmd->peer_type = __cpu_to_le32(peer_type); in ath10k_wmi_op_gen_peer_create()
7438 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_peer_delete()
7440 cmd = (struct wmi_peer_delete_cmd *)skb->data; in ath10k_wmi_op_gen_peer_delete()
7441 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_peer_delete()
7442 ether_addr_copy(cmd->peer_macaddr.addr, peer_addr); in ath10k_wmi_op_gen_peer_delete()
7459 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_peer_flush()
7461 cmd = (struct wmi_peer_flush_tids_cmd *)skb->data; in ath10k_wmi_op_gen_peer_flush()
7462 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_peer_flush()
7463 cmd->peer_tid_bitmap = __cpu_to_le32(tid_bitmap); in ath10k_wmi_op_gen_peer_flush()
7464 ether_addr_copy(cmd->peer_macaddr.addr, peer_addr); in ath10k_wmi_op_gen_peer_flush()
7483 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_peer_set_param()
7485 cmd = (struct wmi_peer_set_param_cmd *)skb->data; in ath10k_wmi_op_gen_peer_set_param()
7486 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_peer_set_param()
7487 cmd->param_id = __cpu_to_le32(param_id); in ath10k_wmi_op_gen_peer_set_param()
7488 cmd->param_value = __cpu_to_le32(param_value); in ath10k_wmi_op_gen_peer_set_param()
7489 ether_addr_copy(cmd->peer_macaddr.addr, peer_addr); in ath10k_wmi_op_gen_peer_set_param()
7506 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_gpio_config()
7508 cmd = (struct wmi_gpio_config_cmd *)skb->data; in ath10k_wmi_op_gen_gpio_config()
7509 cmd->pull_type = __cpu_to_le32(pull_type); in ath10k_wmi_op_gen_gpio_config()
7510 cmd->gpio_num = __cpu_to_le32(gpio_num); in ath10k_wmi_op_gen_gpio_config()
7511 cmd->input = __cpu_to_le32(input); in ath10k_wmi_op_gen_gpio_config()
7512 cmd->intr_mode = __cpu_to_le32(intr_mode); in ath10k_wmi_op_gen_gpio_config()
7528 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_gpio_output()
7530 cmd = (struct wmi_gpio_output_cmd *)skb->data; in ath10k_wmi_op_gen_gpio_output()
7531 cmd->gpio_num = __cpu_to_le32(gpio_num); in ath10k_wmi_op_gen_gpio_output()
7532 cmd->set = __cpu_to_le32(set); in ath10k_wmi_op_gen_gpio_output()
7549 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_set_psmode()
7551 cmd = (struct wmi_sta_powersave_mode_cmd *)skb->data; in ath10k_wmi_op_gen_set_psmode()
7552 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_set_psmode()
7553 cmd->sta_ps_mode = __cpu_to_le32(psmode); in ath10k_wmi_op_gen_set_psmode()
7571 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_set_sta_ps()
7573 cmd = (struct wmi_sta_powersave_param_cmd *)skb->data; in ath10k_wmi_op_gen_set_sta_ps()
7574 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_set_sta_ps()
7575 cmd->param_id = __cpu_to_le32(param_id); in ath10k_wmi_op_gen_set_sta_ps()
7576 cmd->param_value = __cpu_to_le32(value); in ath10k_wmi_op_gen_set_sta_ps()
7592 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_set_ap_ps()
7596 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_set_ap_ps()
7598 cmd = (struct wmi_ap_ps_peer_cmd *)skb->data; in ath10k_wmi_op_gen_set_ap_ps()
7599 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_set_ap_ps()
7600 cmd->param_id = __cpu_to_le32(param_id); in ath10k_wmi_op_gen_set_ap_ps()
7601 cmd->param_value = __cpu_to_le32(value); in ath10k_wmi_op_gen_set_ap_ps()
7602 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath10k_wmi_op_gen_set_ap_ps()
7620 skb = ath10k_wmi_alloc_skb(ar, struct_size(cmd, chan_info, arg->n_channels)); in ath10k_wmi_op_gen_scan_chan_list()
7622 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_scan_chan_list()
7624 cmd = (struct wmi_scan_chan_list_cmd *)skb->data; in ath10k_wmi_op_gen_scan_chan_list()
7625 cmd->num_scan_chans = __cpu_to_le32(arg->n_channels); in ath10k_wmi_op_gen_scan_chan_list()
7627 for (i = 0; i < arg->n_channels; i++) { in ath10k_wmi_op_gen_scan_chan_list()
7628 ch = &arg->channels[i]; in ath10k_wmi_op_gen_scan_chan_list()
7629 ci = &cmd->chan_info[i]; in ath10k_wmi_op_gen_scan_chan_list()
7643 cmd->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_peer_assoc_fill()
7644 cmd->peer_new_assoc = __cpu_to_le32(arg->peer_reassoc ? 0 : 1); in ath10k_wmi_peer_assoc_fill()
7645 cmd->peer_associd = __cpu_to_le32(arg->peer_aid); in ath10k_wmi_peer_assoc_fill()
7646 cmd->peer_flags = __cpu_to_le32(arg->peer_flags); in ath10k_wmi_peer_assoc_fill()
7647 cmd->peer_caps = __cpu_to_le32(arg->peer_caps); in ath10k_wmi_peer_assoc_fill()
7648 cmd->peer_listen_intval = __cpu_to_le32(arg->peer_listen_intval); in ath10k_wmi_peer_assoc_fill()
7649 cmd->peer_ht_caps = __cpu_to_le32(arg->peer_ht_caps); in ath10k_wmi_peer_assoc_fill()
7650 cmd->peer_max_mpdu = __cpu_to_le32(arg->peer_max_mpdu); in ath10k_wmi_peer_assoc_fill()
7651 cmd->peer_mpdu_density = __cpu_to_le32(arg->peer_mpdu_density); in ath10k_wmi_peer_assoc_fill()
7652 cmd->peer_rate_caps = __cpu_to_le32(arg->peer_rate_caps); in ath10k_wmi_peer_assoc_fill()
7653 cmd->peer_nss = __cpu_to_le32(arg->peer_num_spatial_streams); in ath10k_wmi_peer_assoc_fill()
7654 cmd->peer_vht_caps = __cpu_to_le32(arg->peer_vht_caps); in ath10k_wmi_peer_assoc_fill()
7655 cmd->peer_phymode = __cpu_to_le32(arg->peer_phymode); in ath10k_wmi_peer_assoc_fill()
7657 ether_addr_copy(cmd->peer_macaddr.addr, arg->addr); in ath10k_wmi_peer_assoc_fill()
7659 cmd->peer_legacy_rates.num_rates = in ath10k_wmi_peer_assoc_fill()
7660 __cpu_to_le32(arg->peer_legacy_rates.num_rates); in ath10k_wmi_peer_assoc_fill()
7661 memcpy(cmd->peer_legacy_rates.rates, arg->peer_legacy_rates.rates, in ath10k_wmi_peer_assoc_fill()
7662 arg->peer_legacy_rates.num_rates); in ath10k_wmi_peer_assoc_fill()
7664 cmd->peer_ht_rates.num_rates = in ath10k_wmi_peer_assoc_fill()
7665 __cpu_to_le32(arg->peer_ht_rates.num_rates); in ath10k_wmi_peer_assoc_fill()
7666 memcpy(cmd->peer_ht_rates.rates, arg->peer_ht_rates.rates, in ath10k_wmi_peer_assoc_fill()
7667 arg->peer_ht_rates.num_rates); in ath10k_wmi_peer_assoc_fill()
7669 cmd->peer_vht_rates.rx_max_rate = in ath10k_wmi_peer_assoc_fill()
7670 __cpu_to_le32(arg->peer_vht_rates.rx_max_rate); in ath10k_wmi_peer_assoc_fill()
7671 cmd->peer_vht_rates.rx_mcs_set = in ath10k_wmi_peer_assoc_fill()
7672 __cpu_to_le32(arg->peer_vht_rates.rx_mcs_set); in ath10k_wmi_peer_assoc_fill()
7673 cmd->peer_vht_rates.tx_max_rate = in ath10k_wmi_peer_assoc_fill()
7674 __cpu_to_le32(arg->peer_vht_rates.tx_max_rate); in ath10k_wmi_peer_assoc_fill()
7675 cmd->peer_vht_rates.tx_mcs_set = in ath10k_wmi_peer_assoc_fill()
7676 __cpu_to_le32(arg->peer_vht_rates.tx_mcs_set); in ath10k_wmi_peer_assoc_fill()
7686 memset(cmd->peer_ht_info, 0, sizeof(cmd->peer_ht_info)); in ath10k_wmi_peer_assoc_fill_main()
7712 cmd->info0 = __cpu_to_le32(info0); in ath10k_wmi_peer_assoc_fill_10_2()
7722 cmd->peer_bw_rxnss_override = in ath10k_wmi_peer_assoc_fill_10_4()
7723 __cpu_to_le32(arg->peer_bw_rxnss_override); in ath10k_wmi_peer_assoc_fill_10_4()
7729 if (arg->peer_mpdu_density > 16) in ath10k_wmi_peer_assoc_check_arg()
7730 return -EINVAL; in ath10k_wmi_peer_assoc_check_arg()
7731 if (arg->peer_legacy_rates.num_rates > MAX_SUPPORTED_RATES) in ath10k_wmi_peer_assoc_check_arg()
7732 return -EINVAL; in ath10k_wmi_peer_assoc_check_arg()
7733 if (arg->peer_ht_rates.num_rates > MAX_SUPPORTED_RATES) in ath10k_wmi_peer_assoc_check_arg()
7734 return -EINVAL; in ath10k_wmi_peer_assoc_check_arg()
7753 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_peer_assoc()
7755 ath10k_wmi_peer_assoc_fill_main(ar, skb->data, arg); in ath10k_wmi_op_gen_peer_assoc()
7759 arg->vdev_id, arg->addr, in ath10k_wmi_op_gen_peer_assoc()
7760 arg->peer_reassoc ? "reassociate" : "new"); in ath10k_wmi_op_gen_peer_assoc()
7778 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_1_op_gen_peer_assoc()
7780 ath10k_wmi_peer_assoc_fill_10_1(ar, skb->data, arg); in ath10k_wmi_10_1_op_gen_peer_assoc()
7784 arg->vdev_id, arg->addr, in ath10k_wmi_10_1_op_gen_peer_assoc()
7785 arg->peer_reassoc ? "reassociate" : "new"); in ath10k_wmi_10_1_op_gen_peer_assoc()
7803 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_op_gen_peer_assoc()
7805 ath10k_wmi_peer_assoc_fill_10_2(ar, skb->data, arg); in ath10k_wmi_10_2_op_gen_peer_assoc()
7809 arg->vdev_id, arg->addr, in ath10k_wmi_10_2_op_gen_peer_assoc()
7810 arg->peer_reassoc ? "reassociate" : "new"); in ath10k_wmi_10_2_op_gen_peer_assoc()
7828 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_op_gen_peer_assoc()
7830 ath10k_wmi_peer_assoc_fill_10_4(ar, skb->data, arg); in ath10k_wmi_10_4_op_gen_peer_assoc()
7834 arg->vdev_id, arg->addr, in ath10k_wmi_10_4_op_gen_peer_assoc()
7835 arg->peer_reassoc ? "reassociate" : "new"); in ath10k_wmi_10_4_op_gen_peer_assoc()
7846 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_op_gen_pdev_get_temperature()
7861 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_op_gen_pdev_bss_chan_info()
7863 cmd = (struct wmi_pdev_chan_info_req_cmd *)skb->data; in ath10k_wmi_10_2_op_gen_pdev_bss_chan_info()
7864 cmd->type = __cpu_to_le32(type); in ath10k_wmi_10_2_op_gen_pdev_bss_chan_info()
7885 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_beacon_dma()
7888 fc = le16_to_cpu(hdr->frame_control); in ath10k_wmi_op_gen_beacon_dma()
7890 cmd = (struct wmi_bcn_tx_ref_cmd *)skb->data; in ath10k_wmi_op_gen_beacon_dma()
7891 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_beacon_dma()
7892 cmd->data_len = __cpu_to_le32(bcn_len); in ath10k_wmi_op_gen_beacon_dma()
7893 cmd->data_ptr = __cpu_to_le32(bcn_paddr); in ath10k_wmi_op_gen_beacon_dma()
7894 cmd->msdu_id = 0; in ath10k_wmi_op_gen_beacon_dma()
7895 cmd->frame_control = __cpu_to_le32(fc); in ath10k_wmi_op_gen_beacon_dma()
7896 cmd->flags = 0; in ath10k_wmi_op_gen_beacon_dma()
7897 cmd->antenna_mask = __cpu_to_le32(WMI_BCN_TX_REF_DEF_ANTENNA); in ath10k_wmi_op_gen_beacon_dma()
7900 cmd->flags |= __cpu_to_le32(WMI_BCN_TX_REF_FLAG_DTIM_ZERO); in ath10k_wmi_op_gen_beacon_dma()
7903 cmd->flags |= __cpu_to_le32(WMI_BCN_TX_REF_FLAG_DELIVER_CAB); in ath10k_wmi_op_gen_beacon_dma()
7911 params->cwmin = __cpu_to_le32(arg->cwmin); in ath10k_wmi_set_wmm_param()
7912 params->cwmax = __cpu_to_le32(arg->cwmax); in ath10k_wmi_set_wmm_param()
7913 params->aifs = __cpu_to_le32(arg->aifs); in ath10k_wmi_set_wmm_param()
7914 params->txop = __cpu_to_le32(arg->txop); in ath10k_wmi_set_wmm_param()
7915 params->acm = __cpu_to_le32(arg->acm); in ath10k_wmi_set_wmm_param()
7916 params->no_ack = __cpu_to_le32(arg->no_ack); in ath10k_wmi_set_wmm_param()
7928 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_set_wmm()
7930 cmd = (struct wmi_pdev_set_wmm_params *)skb->data; in ath10k_wmi_op_gen_pdev_set_wmm()
7931 ath10k_wmi_set_wmm_param(&cmd->ac_be, &arg->ac_be); in ath10k_wmi_op_gen_pdev_set_wmm()
7932 ath10k_wmi_set_wmm_param(&cmd->ac_bk, &arg->ac_bk); in ath10k_wmi_op_gen_pdev_set_wmm()
7933 ath10k_wmi_set_wmm_param(&cmd->ac_vi, &arg->ac_vi); in ath10k_wmi_op_gen_pdev_set_wmm()
7934 ath10k_wmi_set_wmm_param(&cmd->ac_vo, &arg->ac_vo); in ath10k_wmi_op_gen_pdev_set_wmm()
7948 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_request_stats()
7950 cmd = (struct wmi_request_stats_cmd *)skb->data; in ath10k_wmi_op_gen_request_stats()
7951 cmd->stats_id = __cpu_to_le32(stats_mask); in ath10k_wmi_op_gen_request_stats()
7967 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_force_fw_hang()
7969 cmd = (struct wmi_force_fw_hang_cmd *)skb->data; in ath10k_wmi_op_gen_force_fw_hang()
7970 cmd->type = __cpu_to_le32(type); in ath10k_wmi_op_gen_force_fw_hang()
7971 cmd->delay_ms = __cpu_to_le32(delay_ms); in ath10k_wmi_op_gen_force_fw_hang()
7988 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_dbglog_cfg()
7990 cmd = (struct wmi_dbglog_cfg_cmd *)skb->data; in ath10k_wmi_op_gen_dbglog_cfg()
8002 cmd->module_enable = __cpu_to_le32(module_enable); in ath10k_wmi_op_gen_dbglog_cfg()
8003 cmd->module_valid = __cpu_to_le32(~0); in ath10k_wmi_op_gen_dbglog_cfg()
8004 cmd->config_enable = __cpu_to_le32(cfg); in ath10k_wmi_op_gen_dbglog_cfg()
8005 cmd->config_valid = __cpu_to_le32(ATH10K_DBGLOG_CFG_LOG_LVL_MASK); in ath10k_wmi_op_gen_dbglog_cfg()
8009 __le32_to_cpu(cmd->module_enable), in ath10k_wmi_op_gen_dbglog_cfg()
8010 __le32_to_cpu(cmd->module_valid), in ath10k_wmi_op_gen_dbglog_cfg()
8011 __le32_to_cpu(cmd->config_enable), in ath10k_wmi_op_gen_dbglog_cfg()
8012 __le32_to_cpu(cmd->config_valid)); in ath10k_wmi_op_gen_dbglog_cfg()
8026 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
8028 cmd = (struct wmi_10_4_dbglog_cfg_cmd *)skb->data; in ath10k_wmi_10_4_op_gen_dbglog_cfg()
8040 cmd->module_enable = __cpu_to_le64(module_enable); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
8041 cmd->module_valid = __cpu_to_le64(~0); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
8042 cmd->config_enable = __cpu_to_le32(cfg); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
8043 cmd->config_valid = __cpu_to_le32(ATH10K_DBGLOG_CFG_LOG_LVL_MASK); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
8047 __le64_to_cpu(cmd->module_enable), in ath10k_wmi_10_4_op_gen_dbglog_cfg()
8048 __le64_to_cpu(cmd->module_valid), in ath10k_wmi_10_4_op_gen_dbglog_cfg()
8049 __le32_to_cpu(cmd->config_enable), in ath10k_wmi_10_4_op_gen_dbglog_cfg()
8050 __le32_to_cpu(cmd->config_valid)); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
8062 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pktlog_enable()
8066 cmd = (struct wmi_pdev_pktlog_enable_cmd *)skb->data; in ath10k_wmi_op_gen_pktlog_enable()
8067 cmd->ev_bitmap = __cpu_to_le32(ev_bitmap); in ath10k_wmi_op_gen_pktlog_enable()
8081 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pktlog_disable()
8097 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8099 cmd = (struct wmi_pdev_set_quiet_cmd *)skb->data; in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8100 cmd->period = __cpu_to_le32(period); in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8101 cmd->duration = __cpu_to_le32(duration); in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8102 cmd->next_start = __cpu_to_le32(next_offset); in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8103 cmd->enabled = __cpu_to_le32(enabled); in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8119 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_addba_clear_resp()
8123 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_addba_clear_resp()
8125 cmd = (struct wmi_addba_clear_resp_cmd *)skb->data; in ath10k_wmi_op_gen_addba_clear_resp()
8126 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_addba_clear_resp()
8127 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath10k_wmi_op_gen_addba_clear_resp()
8143 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_addba_send()
8147 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_addba_send()
8149 cmd = (struct wmi_addba_send_cmd *)skb->data; in ath10k_wmi_op_gen_addba_send()
8150 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_addba_send()
8151 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath10k_wmi_op_gen_addba_send()
8152 cmd->tid = __cpu_to_le32(tid); in ath10k_wmi_op_gen_addba_send()
8153 cmd->buffersize = __cpu_to_le32(buf_size); in ath10k_wmi_op_gen_addba_send()
8169 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_addba_set_resp()
8173 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_addba_set_resp()
8175 cmd = (struct wmi_addba_setresponse_cmd *)skb->data; in ath10k_wmi_op_gen_addba_set_resp()
8176 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_addba_set_resp()
8177 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath10k_wmi_op_gen_addba_set_resp()
8178 cmd->tid = __cpu_to_le32(tid); in ath10k_wmi_op_gen_addba_set_resp()
8179 cmd->statuscode = __cpu_to_le32(status); in ath10k_wmi_op_gen_addba_set_resp()
8195 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_delba_send()
8199 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_delba_send()
8201 cmd = (struct wmi_delba_send_cmd *)skb->data; in ath10k_wmi_op_gen_delba_send()
8202 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_delba_send()
8203 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath10k_wmi_op_gen_delba_send()
8204 cmd->tid = __cpu_to_le32(tid); in ath10k_wmi_op_gen_delba_send()
8205 cmd->initiator = __cpu_to_le32(initiator); in ath10k_wmi_op_gen_delba_send()
8206 cmd->reasoncode = __cpu_to_le32(reason); in ath10k_wmi_op_gen_delba_send()
8222 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config()
8224 cmd = (struct wmi_pdev_get_tpc_config_cmd *)skb->data; in ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config()
8225 cmd->param = __cpu_to_le32(param); in ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config()
8239 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_fw_pdev_base_stats_fill()
8240 len += scnprintf(buf + len, buf_len - len, "%30s\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8242 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8245 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8246 "Channel noise floor", pdev->ch_noise_floor); in ath10k_wmi_fw_pdev_base_stats_fill()
8247 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8248 "Channel TX power", pdev->chan_tx_power); in ath10k_wmi_fw_pdev_base_stats_fill()
8249 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8250 "TX frame count", pdev->tx_frame_count); in ath10k_wmi_fw_pdev_base_stats_fill()
8251 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8252 "RX frame count", pdev->rx_frame_count); in ath10k_wmi_fw_pdev_base_stats_fill()
8253 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8254 "RX clear count", pdev->rx_clear_count); in ath10k_wmi_fw_pdev_base_stats_fill()
8255 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8256 "Cycle count", pdev->cycle_count); in ath10k_wmi_fw_pdev_base_stats_fill()
8257 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8258 "PHY error count", pdev->phy_err_count); in ath10k_wmi_fw_pdev_base_stats_fill()
8270 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_extra_stats_fill()
8271 "RTS bad count", pdev->rts_bad); in ath10k_wmi_fw_pdev_extra_stats_fill()
8272 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_extra_stats_fill()
8273 "RTS good count", pdev->rts_good); in ath10k_wmi_fw_pdev_extra_stats_fill()
8274 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_extra_stats_fill()
8275 "FCS bad count", pdev->fcs_bad); in ath10k_wmi_fw_pdev_extra_stats_fill()
8276 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_extra_stats_fill()
8277 "No beacon count", pdev->no_beacons); in ath10k_wmi_fw_pdev_extra_stats_fill()
8278 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_extra_stats_fill()
8279 "MIB int count", pdev->mib_int_count); in ath10k_wmi_fw_pdev_extra_stats_fill()
8281 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_fw_pdev_extra_stats_fill()
8292 len += scnprintf(buf + len, buf_len - len, "\n%30s\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8294 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8297 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8298 "HTT cookies queued", pdev->comp_queued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8299 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8300 "HTT cookies disp.", pdev->comp_delivered); in ath10k_wmi_fw_pdev_tx_stats_fill()
8301 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8302 "MSDU queued", pdev->msdu_enqued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8303 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8304 "MPDU queued", pdev->mpdu_enqued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8305 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8306 "MSDUs dropped", pdev->wmm_drop); in ath10k_wmi_fw_pdev_tx_stats_fill()
8307 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8308 "Local enqued", pdev->local_enqued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8309 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8310 "Local freed", pdev->local_freed); in ath10k_wmi_fw_pdev_tx_stats_fill()
8311 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8312 "HW queued", pdev->hw_queued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8313 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8314 "PPDUs reaped", pdev->hw_reaped); in ath10k_wmi_fw_pdev_tx_stats_fill()
8315 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8316 "Num underruns", pdev->underrun); in ath10k_wmi_fw_pdev_tx_stats_fill()
8317 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8318 "PPDUs cleaned", pdev->tx_abort); in ath10k_wmi_fw_pdev_tx_stats_fill()
8319 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8320 "MPDUs requeued", pdev->mpdus_requeued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8321 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8322 "Excessive retries", pdev->tx_ko); in ath10k_wmi_fw_pdev_tx_stats_fill()
8323 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8324 "HW rate", pdev->data_rc); in ath10k_wmi_fw_pdev_tx_stats_fill()
8325 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8326 "Sched self triggers", pdev->self_triggers); in ath10k_wmi_fw_pdev_tx_stats_fill()
8327 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8329 pdev->sw_retry_failure); in ath10k_wmi_fw_pdev_tx_stats_fill()
8330 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8332 pdev->illgl_rate_phy_err); in ath10k_wmi_fw_pdev_tx_stats_fill()
8333 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8334 "Pdev continuous xretry", pdev->pdev_cont_xretry); in ath10k_wmi_fw_pdev_tx_stats_fill()
8335 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8336 "TX timeout", pdev->pdev_tx_timeout); in ath10k_wmi_fw_pdev_tx_stats_fill()
8337 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8338 "PDEV resets", pdev->pdev_resets); in ath10k_wmi_fw_pdev_tx_stats_fill()
8339 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8340 "PHY underrun", pdev->phy_underrun); in ath10k_wmi_fw_pdev_tx_stats_fill()
8341 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8342 "MPDU is more than txop limit", pdev->txop_ovf); in ath10k_wmi_fw_pdev_tx_stats_fill()
8353 len += scnprintf(buf + len, buf_len - len, "\n%30s\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8355 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8358 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8360 pdev->mid_ppdu_route_change); in ath10k_wmi_fw_pdev_rx_stats_fill()
8361 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8362 "Tot. number of statuses", pdev->status_rcvd); in ath10k_wmi_fw_pdev_rx_stats_fill()
8363 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8364 "Extra frags on rings 0", pdev->r0_frags); in ath10k_wmi_fw_pdev_rx_stats_fill()
8365 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8366 "Extra frags on rings 1", pdev->r1_frags); in ath10k_wmi_fw_pdev_rx_stats_fill()
8367 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8368 "Extra frags on rings 2", pdev->r2_frags); in ath10k_wmi_fw_pdev_rx_stats_fill()
8369 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8370 "Extra frags on rings 3", pdev->r3_frags); in ath10k_wmi_fw_pdev_rx_stats_fill()
8371 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8372 "MSDUs delivered to HTT", pdev->htt_msdus); in ath10k_wmi_fw_pdev_rx_stats_fill()
8373 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8374 "MPDUs delivered to HTT", pdev->htt_mpdus); in ath10k_wmi_fw_pdev_rx_stats_fill()
8375 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8376 "MSDUs delivered to stack", pdev->loc_msdus); in ath10k_wmi_fw_pdev_rx_stats_fill()
8377 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8378 "MPDUs delivered to stack", pdev->loc_mpdus); in ath10k_wmi_fw_pdev_rx_stats_fill()
8379 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8380 "Oversized AMSDUs", pdev->oversize_amsdu); in ath10k_wmi_fw_pdev_rx_stats_fill()
8381 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8382 "PHY errors", pdev->phy_errs); in ath10k_wmi_fw_pdev_rx_stats_fill()
8383 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8384 "PHY errors drops", pdev->phy_err_drop); in ath10k_wmi_fw_pdev_rx_stats_fill()
8385 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8386 "MPDU errors (FCS, MIC, ENC)", pdev->mpdu_errs); in ath10k_wmi_fw_pdev_rx_stats_fill()
8398 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8399 "vdev id", vdev->vdev_id); in ath10k_wmi_fw_vdev_stats_fill()
8400 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8401 "beacon snr", vdev->beacon_snr); in ath10k_wmi_fw_vdev_stats_fill()
8402 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8403 "data snr", vdev->data_snr); in ath10k_wmi_fw_vdev_stats_fill()
8404 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8405 "num rx frames", vdev->num_rx_frames); in ath10k_wmi_fw_vdev_stats_fill()
8406 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8407 "num rts fail", vdev->num_rts_fail); in ath10k_wmi_fw_vdev_stats_fill()
8408 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8409 "num rts success", vdev->num_rts_success); in ath10k_wmi_fw_vdev_stats_fill()
8410 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8411 "num rx err", vdev->num_rx_err); in ath10k_wmi_fw_vdev_stats_fill()
8412 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8413 "num rx discard", vdev->num_rx_discard); in ath10k_wmi_fw_vdev_stats_fill()
8414 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8415 "num tx not acked", vdev->num_tx_not_acked); in ath10k_wmi_fw_vdev_stats_fill()
8417 for (i = 0 ; i < ARRAY_SIZE(vdev->num_tx_frames); i++) in ath10k_wmi_fw_vdev_stats_fill()
8418 len += scnprintf(buf + len, buf_len - len, in ath10k_wmi_fw_vdev_stats_fill()
8421 vdev->num_tx_frames[i]); in ath10k_wmi_fw_vdev_stats_fill()
8423 for (i = 0 ; i < ARRAY_SIZE(vdev->num_tx_frames_retries); i++) in ath10k_wmi_fw_vdev_stats_fill()
8424 len += scnprintf(buf + len, buf_len - len, in ath10k_wmi_fw_vdev_stats_fill()
8427 vdev->num_tx_frames_retries[i]); in ath10k_wmi_fw_vdev_stats_fill()
8429 for (i = 0 ; i < ARRAY_SIZE(vdev->num_tx_frames_failures); i++) in ath10k_wmi_fw_vdev_stats_fill()
8430 len += scnprintf(buf + len, buf_len - len, in ath10k_wmi_fw_vdev_stats_fill()
8433 vdev->num_tx_frames_failures[i]); in ath10k_wmi_fw_vdev_stats_fill()
8435 for (i = 0 ; i < ARRAY_SIZE(vdev->tx_rate_history); i++) in ath10k_wmi_fw_vdev_stats_fill()
8436 len += scnprintf(buf + len, buf_len - len, in ath10k_wmi_fw_vdev_stats_fill()
8439 vdev->tx_rate_history[i]); in ath10k_wmi_fw_vdev_stats_fill()
8441 for (i = 0 ; i < ARRAY_SIZE(vdev->beacon_rssi_history); i++) in ath10k_wmi_fw_vdev_stats_fill()
8442 len += scnprintf(buf + len, buf_len - len, in ath10k_wmi_fw_vdev_stats_fill()
8445 vdev->beacon_rssi_history[i]); in ath10k_wmi_fw_vdev_stats_fill()
8447 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_fw_vdev_stats_fill()
8458 len += scnprintf(buf + len, buf_len - len, "%30s %pM\n", in ath10k_wmi_fw_peer_stats_fill()
8459 "Peer MAC address", peer->peer_macaddr); in ath10k_wmi_fw_peer_stats_fill()
8460 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_peer_stats_fill()
8461 "Peer RSSI", peer->peer_rssi); in ath10k_wmi_fw_peer_stats_fill()
8462 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_peer_stats_fill()
8463 "Peer TX rate", peer->peer_tx_rate); in ath10k_wmi_fw_peer_stats_fill()
8464 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_peer_stats_fill()
8465 "Peer RX rate", peer->peer_rx_rate); in ath10k_wmi_fw_peer_stats_fill()
8467 len += scnprintf(buf + len, buf_len - len, "%30s %llu\n", in ath10k_wmi_fw_peer_stats_fill()
8468 "Peer RX duration", peer->rx_duration); in ath10k_wmi_fw_peer_stats_fill()
8470 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_fw_peer_stats_fill()
8481 len += scnprintf(buf + len, buf_len - len, "%30s %pM\n", in ath10k_wmi_fw_extd_peer_stats_fill()
8482 "Peer MAC address", peer->peer_macaddr); in ath10k_wmi_fw_extd_peer_stats_fill()
8483 len += scnprintf(buf + len, buf_len - len, "%30s %llu\n", in ath10k_wmi_fw_extd_peer_stats_fill()
8484 "Peer RX duration", peer->rx_duration); in ath10k_wmi_fw_extd_peer_stats_fill()
8499 spin_lock_bh(&ar->data_lock); in ath10k_wmi_main_op_fw_stats_fill()
8501 pdev = list_first_entry_or_null(&fw_stats->pdevs, in ath10k_wmi_main_op_fw_stats_fill()
8508 num_peers = list_count_nodes(&fw_stats->peers); in ath10k_wmi_main_op_fw_stats_fill()
8509 num_vdevs = list_count_nodes(&fw_stats->vdevs); in ath10k_wmi_main_op_fw_stats_fill()
8515 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_main_op_fw_stats_fill()
8516 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_main_op_fw_stats_fill()
8518 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_main_op_fw_stats_fill()
8521 list_for_each_entry(vdev, &fw_stats->vdevs, list) { in ath10k_wmi_main_op_fw_stats_fill()
8525 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_main_op_fw_stats_fill()
8526 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_main_op_fw_stats_fill()
8528 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_main_op_fw_stats_fill()
8531 list_for_each_entry(peer, &fw_stats->peers, list) { in ath10k_wmi_main_op_fw_stats_fill()
8533 fw_stats->extended); in ath10k_wmi_main_op_fw_stats_fill()
8537 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_main_op_fw_stats_fill()
8540 buf[len - 1] = 0; in ath10k_wmi_main_op_fw_stats_fill()
8557 spin_lock_bh(&ar->data_lock); in ath10k_wmi_10x_op_fw_stats_fill()
8559 pdev = list_first_entry_or_null(&fw_stats->pdevs, in ath10k_wmi_10x_op_fw_stats_fill()
8566 num_peers = list_count_nodes(&fw_stats->peers); in ath10k_wmi_10x_op_fw_stats_fill()
8567 num_vdevs = list_count_nodes(&fw_stats->vdevs); in ath10k_wmi_10x_op_fw_stats_fill()
8574 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_10x_op_fw_stats_fill()
8575 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_10x_op_fw_stats_fill()
8577 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_10x_op_fw_stats_fill()
8580 list_for_each_entry(vdev, &fw_stats->vdevs, list) { in ath10k_wmi_10x_op_fw_stats_fill()
8584 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_10x_op_fw_stats_fill()
8585 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_10x_op_fw_stats_fill()
8587 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_10x_op_fw_stats_fill()
8590 list_for_each_entry(peer, &fw_stats->peers, list) { in ath10k_wmi_10x_op_fw_stats_fill()
8592 fw_stats->extended); in ath10k_wmi_10x_op_fw_stats_fill()
8596 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_10x_op_fw_stats_fill()
8599 buf[len - 1] = 0; in ath10k_wmi_10x_op_fw_stats_fill()
8613 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_enable_adaptive_cca()
8615 cmd = (struct wmi_pdev_set_adaptive_cca_params *)skb->data; in ath10k_wmi_op_gen_pdev_enable_adaptive_cca()
8616 cmd->enable = __cpu_to_le32(enable); in ath10k_wmi_op_gen_pdev_enable_adaptive_cca()
8617 cmd->cca_detect_level = __cpu_to_le32(detect_level); in ath10k_wmi_op_gen_pdev_enable_adaptive_cca()
8618 cmd->cca_detect_margin = __cpu_to_le32(detect_margin); in ath10k_wmi_op_gen_pdev_enable_adaptive_cca()
8634 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8635 "vdev id", vdev->vdev_id); in ath10k_wmi_fw_vdev_stats_extd_fill()
8636 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8637 "ppdu aggr count", vdev->ppdu_aggr_cnt); in ath10k_wmi_fw_vdev_stats_extd_fill()
8638 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8639 "ppdu noack", vdev->ppdu_noack); in ath10k_wmi_fw_vdev_stats_extd_fill()
8640 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8641 "mpdu queued", vdev->mpdu_queued); in ath10k_wmi_fw_vdev_stats_extd_fill()
8642 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8643 "ppdu nonaggr count", vdev->ppdu_nonaggr_cnt); in ath10k_wmi_fw_vdev_stats_extd_fill()
8644 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8645 "mpdu sw requeued", vdev->mpdu_sw_requeued); in ath10k_wmi_fw_vdev_stats_extd_fill()
8646 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8647 "mpdu success retry", vdev->mpdu_suc_retry); in ath10k_wmi_fw_vdev_stats_extd_fill()
8648 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8649 "mpdu success multitry", vdev->mpdu_suc_multitry); in ath10k_wmi_fw_vdev_stats_extd_fill()
8650 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8651 "mpdu fail retry", vdev->mpdu_fail_retry); in ath10k_wmi_fw_vdev_stats_extd_fill()
8652 val = vdev->tx_ftm_suc; in ath10k_wmi_fw_vdev_stats_extd_fill()
8654 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8655 "tx ftm success", in ath10k_wmi_fw_vdev_stats_extd_fill()
8657 val = vdev->tx_ftm_suc_retry; in ath10k_wmi_fw_vdev_stats_extd_fill()
8659 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8660 "tx ftm success retry", in ath10k_wmi_fw_vdev_stats_extd_fill()
8662 val = vdev->tx_ftm_fail; in ath10k_wmi_fw_vdev_stats_extd_fill()
8664 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8665 "tx ftm fail", in ath10k_wmi_fw_vdev_stats_extd_fill()
8667 val = vdev->rx_ftmr_cnt; in ath10k_wmi_fw_vdev_stats_extd_fill()
8669 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8670 "rx ftm request count", in ath10k_wmi_fw_vdev_stats_extd_fill()
8672 val = vdev->rx_ftmr_dup_cnt; in ath10k_wmi_fw_vdev_stats_extd_fill()
8674 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8675 "rx ftm request dup count", in ath10k_wmi_fw_vdev_stats_extd_fill()
8677 val = vdev->rx_iftmr_cnt; in ath10k_wmi_fw_vdev_stats_extd_fill()
8679 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8680 "rx initial ftm req count", in ath10k_wmi_fw_vdev_stats_extd_fill()
8682 val = vdev->rx_iftmr_dup_cnt; in ath10k_wmi_fw_vdev_stats_extd_fill()
8684 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8685 "rx initial ftm req dup cnt", in ath10k_wmi_fw_vdev_stats_extd_fill()
8687 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_fw_vdev_stats_extd_fill()
8705 spin_lock_bh(&ar->data_lock); in ath10k_wmi_10_4_op_fw_stats_fill()
8707 pdev = list_first_entry_or_null(&fw_stats->pdevs, in ath10k_wmi_10_4_op_fw_stats_fill()
8714 num_peers = list_count_nodes(&fw_stats->peers); in ath10k_wmi_10_4_op_fw_stats_fill()
8715 num_vdevs = list_count_nodes(&fw_stats->vdevs); in ath10k_wmi_10_4_op_fw_stats_fill()
8721 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8722 "HW paused", pdev->hw_paused); in ath10k_wmi_10_4_op_fw_stats_fill()
8723 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8724 "Seqs posted", pdev->seq_posted); in ath10k_wmi_10_4_op_fw_stats_fill()
8725 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8726 "Seqs failed queueing", pdev->seq_failed_queueing); in ath10k_wmi_10_4_op_fw_stats_fill()
8727 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8728 "Seqs completed", pdev->seq_completed); in ath10k_wmi_10_4_op_fw_stats_fill()
8729 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8730 "Seqs restarted", pdev->seq_restarted); in ath10k_wmi_10_4_op_fw_stats_fill()
8731 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8732 "MU Seqs posted", pdev->mu_seq_posted); in ath10k_wmi_10_4_op_fw_stats_fill()
8733 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8734 "MPDUs SW flushed", pdev->mpdus_sw_flush); in ath10k_wmi_10_4_op_fw_stats_fill()
8735 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8736 "MPDUs HW filtered", pdev->mpdus_hw_filter); in ath10k_wmi_10_4_op_fw_stats_fill()
8737 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8738 "MPDUs truncated", pdev->mpdus_truncated); in ath10k_wmi_10_4_op_fw_stats_fill()
8739 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8740 "MPDUs receive no ACK", pdev->mpdus_ack_failed); in ath10k_wmi_10_4_op_fw_stats_fill()
8741 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8742 "MPDUs expired", pdev->mpdus_expired); in ath10k_wmi_10_4_op_fw_stats_fill()
8745 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8746 "Num Rx Overflow errors", pdev->rx_ovfl_errs); in ath10k_wmi_10_4_op_fw_stats_fill()
8748 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_10_4_op_fw_stats_fill()
8749 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8751 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8753 list_for_each_entry(vdev, &fw_stats->vdevs, list) { in ath10k_wmi_10_4_op_fw_stats_fill()
8757 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_10_4_op_fw_stats_fill()
8758 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8760 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8763 list_for_each_entry(peer, &fw_stats->peers, list) { in ath10k_wmi_10_4_op_fw_stats_fill()
8765 fw_stats->extended); in ath10k_wmi_10_4_op_fw_stats_fill()
8768 if (fw_stats->extended) { in ath10k_wmi_10_4_op_fw_stats_fill()
8769 list_for_each_entry(extd_peer, &fw_stats->peers_extd, list) { in ath10k_wmi_10_4_op_fw_stats_fill()
8776 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_10_4_op_fw_stats_fill()
8779 buf[len - 1] = 0; in ath10k_wmi_10_4_op_fw_stats_fill()
8800 return -EOPNOTSUPP; in ath10k_wmi_op_get_vdev_subtype()
8802 return -EOPNOTSUPP; in ath10k_wmi_op_get_vdev_subtype()
8822 return -EOPNOTSUPP; in ath10k_wmi_10_2_4_op_get_vdev_subtype()
8824 return -EOPNOTSUPP; in ath10k_wmi_10_2_4_op_get_vdev_subtype()
8846 return -EOPNOTSUPP; in ath10k_wmi_10_4_op_get_vdev_subtype()
8860 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_ext_resource_config()
8862 if (test_bit(WMI_SERVICE_TDLS_UAPSD_SLEEP_STA, ar->wmi.svc_map)) in ath10k_wmi_10_4_ext_resource_config()
8865 cmd = (struct wmi_ext_resource_config_10_4_cmd *)skb->data; in ath10k_wmi_10_4_ext_resource_config()
8866 cmd->host_platform_config = __cpu_to_le32(type); in ath10k_wmi_10_4_ext_resource_config()
8867 cmd->fw_feature_bitmap = __cpu_to_le32(fw_feature_bitmap); in ath10k_wmi_10_4_ext_resource_config()
8868 cmd->wlan_gpio_priority = __cpu_to_le32(ar->coex_gpio_pin); in ath10k_wmi_10_4_ext_resource_config()
8869 cmd->coex_version = __cpu_to_le32(WMI_NO_COEX_VERSION_SUPPORT); in ath10k_wmi_10_4_ext_resource_config()
8870 cmd->coex_gpio_pin1 = __cpu_to_le32(-1); in ath10k_wmi_10_4_ext_resource_config()
8871 cmd->coex_gpio_pin2 = __cpu_to_le32(-1); in ath10k_wmi_10_4_ext_resource_config()
8872 cmd->coex_gpio_pin3 = __cpu_to_le32(-1); in ath10k_wmi_10_4_ext_resource_config()
8873 cmd->num_tdls_vdevs = __cpu_to_le32(TARGET_10_4_NUM_TDLS_VDEVS); in ath10k_wmi_10_4_ext_resource_config()
8874 cmd->num_tdls_conn_table_entries = __cpu_to_le32(20); in ath10k_wmi_10_4_ext_resource_config()
8875 cmd->max_tdls_concurrent_sleep_sta = __cpu_to_le32(num_tdls_sleep_sta); in ath10k_wmi_10_4_ext_resource_config()
8876 cmd->max_tdls_concurrent_buffer_sta = in ath10k_wmi_10_4_ext_resource_config()
8895 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8897 if (test_bit(WMI_SERVICE_TDLS_EXPLICIT_MODE_ONLY, ar->wmi.svc_map) && in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8901 if (test_bit(WMI_SERVICE_TDLS_UAPSD_BUFFER_STA, ar->wmi.svc_map)) in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8904 cmd = (struct wmi_10_4_tdls_set_state_cmd *)skb->data; in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8905 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8906 cmd->state = __cpu_to_le32(state); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8907 cmd->notification_interval_ms = __cpu_to_le32(5000); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8908 cmd->tx_discovery_threshold = __cpu_to_le32(100); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8909 cmd->tx_teardown_threshold = __cpu_to_le32(5); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8910 cmd->rssi_teardown_threshold = __cpu_to_le32(-75); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8911 cmd->rssi_delta = __cpu_to_le32(-20); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8912 cmd->tdls_options = __cpu_to_le32(options); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8913 cmd->tdls_peer_traffic_ind_window = __cpu_to_le32(2); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8914 cmd->tdls_peer_traffic_response_timeout_ms = __cpu_to_le32(5000); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8915 cmd->tdls_puapsd_mask = __cpu_to_le32(0xf); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8916 cmd->tdls_puapsd_inactivity_time_ms = __cpu_to_le32(0); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8917 cmd->tdls_puapsd_rx_frame_threshold = __cpu_to_le32(10); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8918 cmd->teardown_notification_ms = __cpu_to_le32(10); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8919 cmd->tdls_peer_kickout_threshold = __cpu_to_le32(96); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8952 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_op_gen_pdev_get_tpc_table_cmdid()
8954 cmd = (struct wmi_pdev_get_tpc_table_cmd *)skb->data; in ath10k_wmi_10_4_op_gen_pdev_get_tpc_table_cmdid()
8955 cmd->param = __cpu_to_le32(param); in ath10k_wmi_10_4_op_gen_pdev_get_tpc_table_cmdid()
8977 chan_len = cap->peer_chan_len ? (cap->peer_chan_len - 1) : 0; in ath10k_wmi_10_4_gen_tdls_peer_update()
8983 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_gen_tdls_peer_update()
8985 cmd = (struct wmi_10_4_tdls_peer_update_cmd *)skb->data; in ath10k_wmi_10_4_gen_tdls_peer_update()
8986 cmd->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_10_4_gen_tdls_peer_update()
8987 ether_addr_copy(cmd->peer_macaddr.addr, arg->addr); in ath10k_wmi_10_4_gen_tdls_peer_update()
8988 cmd->peer_state = __cpu_to_le32(arg->peer_state); in ath10k_wmi_10_4_gen_tdls_peer_update()
8990 peer_qos = ath10k_wmi_prepare_peer_qos(cap->peer_uapsd_queues, in ath10k_wmi_10_4_gen_tdls_peer_update()
8991 cap->peer_max_sp); in ath10k_wmi_10_4_gen_tdls_peer_update()
8993 peer_cap = &cmd->peer_capab; in ath10k_wmi_10_4_gen_tdls_peer_update()
8994 peer_cap->peer_qos = __cpu_to_le32(peer_qos); in ath10k_wmi_10_4_gen_tdls_peer_update()
8995 peer_cap->buff_sta_support = __cpu_to_le32(cap->buff_sta_support); in ath10k_wmi_10_4_gen_tdls_peer_update()
8996 peer_cap->off_chan_support = __cpu_to_le32(cap->off_chan_support); in ath10k_wmi_10_4_gen_tdls_peer_update()
8997 peer_cap->peer_curr_operclass = __cpu_to_le32(cap->peer_curr_operclass); in ath10k_wmi_10_4_gen_tdls_peer_update()
8998 peer_cap->self_curr_operclass = __cpu_to_le32(cap->self_curr_operclass); in ath10k_wmi_10_4_gen_tdls_peer_update()
8999 peer_cap->peer_chan_len = __cpu_to_le32(cap->peer_chan_len); in ath10k_wmi_10_4_gen_tdls_peer_update()
9000 peer_cap->peer_operclass_len = __cpu_to_le32(cap->peer_operclass_len); in ath10k_wmi_10_4_gen_tdls_peer_update()
9003 peer_cap->peer_operclass[i] = cap->peer_operclass[i]; in ath10k_wmi_10_4_gen_tdls_peer_update()
9005 peer_cap->is_peer_responder = __cpu_to_le32(cap->is_peer_responder); in ath10k_wmi_10_4_gen_tdls_peer_update()
9006 peer_cap->pref_offchan_num = __cpu_to_le32(cap->pref_offchan_num); in ath10k_wmi_10_4_gen_tdls_peer_update()
9007 peer_cap->pref_offchan_bw = __cpu_to_le32(cap->pref_offchan_bw); in ath10k_wmi_10_4_gen_tdls_peer_update()
9009 for (i = 0; i < cap->peer_chan_len; i++) { in ath10k_wmi_10_4_gen_tdls_peer_update()
9010 chan = (struct wmi_channel *)&peer_cap->peer_chan_list[i]; in ath10k_wmi_10_4_gen_tdls_peer_update()
9016 arg->vdev_id, arg->peer_state, cap->peer_chan_len); in ath10k_wmi_10_4_gen_tdls_peer_update()
9029 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_gen_radar_found()
9031 cmd = (struct wmi_radar_found_info *)skb->data; in ath10k_wmi_10_4_gen_radar_found()
9032 cmd->pri_min = __cpu_to_le32(arg->pri_min); in ath10k_wmi_10_4_gen_radar_found()
9033 cmd->pri_max = __cpu_to_le32(arg->pri_max); in ath10k_wmi_10_4_gen_radar_found()
9034 cmd->width_min = __cpu_to_le32(arg->width_min); in ath10k_wmi_10_4_gen_radar_found()
9035 cmd->width_max = __cpu_to_le32(arg->width_max); in ath10k_wmi_10_4_gen_radar_found()
9036 cmd->sidx_min = __cpu_to_le32(arg->sidx_min); in ath10k_wmi_10_4_gen_radar_found()
9037 cmd->sidx_max = __cpu_to_le32(arg->sidx_max); in ath10k_wmi_10_4_gen_radar_found()
9041 arg->pri_min, arg->pri_max, arg->width_min, in ath10k_wmi_10_4_gen_radar_found()
9042 arg->width_max, arg->sidx_min, arg->sidx_max); in ath10k_wmi_10_4_gen_radar_found()
9055 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9057 memset(skb->data, 0, sizeof(*cmd)); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9059 cmd = (struct wmi_peer_per_tid_cfg_cmd *)skb->data; in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9060 cmd->vdev_id = cpu_to_le32(arg->vdev_id); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9061 ether_addr_copy(cmd->peer_macaddr.addr, arg->peer_macaddr.addr); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9062 cmd->tid = cpu_to_le32(arg->tid); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9063 cmd->ack_policy = cpu_to_le32(arg->ack_policy); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9064 cmd->aggr_control = cpu_to_le32(arg->aggr_control); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9065 cmd->rate_control = cpu_to_le32(arg->rate_ctrl); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9066 cmd->retry_count = cpu_to_le32(arg->retry_count); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9067 cmd->rcode_flags = cpu_to_le32(arg->rcode_flags); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9068 cmd->ext_tid_cfg_bitmap = cpu_to_le32(arg->ext_tid_cfg_bitmap); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9069 cmd->rtscts_ctrl = cpu_to_le32(arg->rtscts_ctrl); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9073 arg->tid, arg->vdev_id, arg->ack_policy, arg->aggr_control, in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9074 arg->rate_ctrl, arg->rcode_flags, arg->retry_count, in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9075 arg->rtscts_ctrl, arg->ext_tid_cfg_bitmap, arg->peer_macaddr.addr); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9087 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_echo()
9089 cmd = (struct wmi_echo_cmd *)skb->data; in ath10k_wmi_op_gen_echo()
9090 cmd->value = cpu_to_le32(value); in ath10k_wmi_op_gen_echo()
9103 spin_lock_bh(&ar->data_lock); in ath10k_wmi_barrier()
9104 reinit_completion(&ar->wmi.barrier); in ath10k_wmi_barrier()
9105 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_barrier()
9113 time_left = wait_for_completion_timeout(&ar->wmi.barrier, in ath10k_wmi_barrier()
9116 return -ETIMEDOUT; in ath10k_wmi_barrier()
9130 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_4_op_gen_bb_timing()
9132 cmd = (struct wmi_pdev_bb_timing_cfg_cmd *)skb->data; in ath10k_wmi_10_2_4_op_gen_bb_timing()
9133 cmd->bb_tx_timing = __cpu_to_le32(arg->bb_tx_timing); in ath10k_wmi_10_2_4_op_gen_bb_timing()
9134 cmd->bb_xpa_timing = __cpu_to_le32(arg->bb_xpa_timing); in ath10k_wmi_10_2_4_op_gen_bb_timing()
9138 arg->bb_tx_timing, arg->bb_xpa_timing); in ath10k_wmi_10_2_4_op_gen_bb_timing()
9513 switch (ar->running_fw->fw_file.wmi_op_version) { in ath10k_wmi_attach()
9515 ar->wmi.ops = &wmi_10_4_ops; in ath10k_wmi_attach()
9516 ar->wmi.cmd = &wmi_10_4_cmd_map; in ath10k_wmi_attach()
9517 ar->wmi.vdev_param = &wmi_10_4_vdev_param_map; in ath10k_wmi_attach()
9518 ar->wmi.pdev_param = &wmi_10_4_pdev_param_map; in ath10k_wmi_attach()
9519 ar->wmi.peer_param = &wmi_peer_param_map; in ath10k_wmi_attach()
9520 ar->wmi.peer_flags = &wmi_10_2_peer_flags_map; in ath10k_wmi_attach()
9521 ar->wmi_key_cipher = wmi_key_cipher_suites; in ath10k_wmi_attach()
9524 ar->wmi.cmd = &wmi_10_2_4_cmd_map; in ath10k_wmi_attach()
9525 ar->wmi.ops = &wmi_10_2_4_ops; in ath10k_wmi_attach()
9526 ar->wmi.vdev_param = &wmi_10_2_4_vdev_param_map; in ath10k_wmi_attach()
9527 ar->wmi.pdev_param = &wmi_10_2_4_pdev_param_map; in ath10k_wmi_attach()
9528 ar->wmi.peer_param = &wmi_peer_param_map; in ath10k_wmi_attach()
9529 ar->wmi.peer_flags = &wmi_10_2_peer_flags_map; in ath10k_wmi_attach()
9530 ar->wmi_key_cipher = wmi_key_cipher_suites; in ath10k_wmi_attach()
9533 ar->wmi.cmd = &wmi_10_2_cmd_map; in ath10k_wmi_attach()
9534 ar->wmi.ops = &wmi_10_2_ops; in ath10k_wmi_attach()
9535 ar->wmi.vdev_param = &wmi_10x_vdev_param_map; in ath10k_wmi_attach()
9536 ar->wmi.pdev_param = &wmi_10x_pdev_param_map; in ath10k_wmi_attach()
9537 ar->wmi.peer_param = &wmi_peer_param_map; in ath10k_wmi_attach()
9538 ar->wmi.peer_flags = &wmi_10_2_peer_flags_map; in ath10k_wmi_attach()
9539 ar->wmi_key_cipher = wmi_key_cipher_suites; in ath10k_wmi_attach()
9542 ar->wmi.cmd = &wmi_10x_cmd_map; in ath10k_wmi_attach()
9543 ar->wmi.ops = &wmi_10_1_ops; in ath10k_wmi_attach()
9544 ar->wmi.vdev_param = &wmi_10x_vdev_param_map; in ath10k_wmi_attach()
9545 ar->wmi.pdev_param = &wmi_10x_pdev_param_map; in ath10k_wmi_attach()
9546 ar->wmi.peer_param = &wmi_peer_param_map; in ath10k_wmi_attach()
9547 ar->wmi.peer_flags = &wmi_10x_peer_flags_map; in ath10k_wmi_attach()
9548 ar->wmi_key_cipher = wmi_key_cipher_suites; in ath10k_wmi_attach()
9551 ar->wmi.cmd = &wmi_cmd_map; in ath10k_wmi_attach()
9552 ar->wmi.ops = &wmi_ops; in ath10k_wmi_attach()
9553 ar->wmi.vdev_param = &wmi_vdev_param_map; in ath10k_wmi_attach()
9554 ar->wmi.pdev_param = &wmi_pdev_param_map; in ath10k_wmi_attach()
9555 ar->wmi.peer_param = &wmi_peer_param_map; in ath10k_wmi_attach()
9556 ar->wmi.peer_flags = &wmi_peer_flags_map; in ath10k_wmi_attach()
9557 ar->wmi_key_cipher = wmi_key_cipher_suites; in ath10k_wmi_attach()
9561 ar->wmi_key_cipher = wmi_tlv_key_cipher_suites; in ath10k_wmi_attach()
9566 ar->running_fw->fw_file.wmi_op_version); in ath10k_wmi_attach()
9567 return -EINVAL; in ath10k_wmi_attach()
9570 init_completion(&ar->wmi.service_ready); in ath10k_wmi_attach()
9571 init_completion(&ar->wmi.unified_ready); in ath10k_wmi_attach()
9572 init_completion(&ar->wmi.barrier); in ath10k_wmi_attach()
9573 init_completion(&ar->wmi.radar_confirm); in ath10k_wmi_attach()
9575 INIT_WORK(&ar->svc_rdy_work, ath10k_wmi_event_service_ready_work); in ath10k_wmi_attach()
9576 INIT_WORK(&ar->radar_confirmation_work, in ath10k_wmi_attach()
9580 ar->running_fw->fw_file.fw_features)) { in ath10k_wmi_attach()
9581 idr_init(&ar->wmi.mgmt_pending_tx); in ath10k_wmi_attach()
9592 for (i = 0; i < ar->wmi.num_mem_chunks; i++) { in ath10k_wmi_free_host_mem()
9593 dma_free_coherent(ar->dev, in ath10k_wmi_free_host_mem()
9594 ar->wmi.mem_chunks[i].len, in ath10k_wmi_free_host_mem()
9595 ar->wmi.mem_chunks[i].vaddr, in ath10k_wmi_free_host_mem()
9596 ar->wmi.mem_chunks[i].paddr); in ath10k_wmi_free_host_mem()
9599 ar->wmi.num_mem_chunks = 0; in ath10k_wmi_free_host_mem()
9612 msdu = pkt_addr->vaddr; in ath10k_wmi_mgmt_tx_clean_up_pending()
9613 dma_unmap_single(ar->dev, pkt_addr->paddr, in ath10k_wmi_mgmt_tx_clean_up_pending()
9614 msdu->len, DMA_TO_DEVICE); in ath10k_wmi_mgmt_tx_clean_up_pending()
9615 ieee80211_free_txskb(ar->hw, msdu); in ath10k_wmi_mgmt_tx_clean_up_pending()
9624 ar->running_fw->fw_file.fw_features)) { in ath10k_wmi_detach()
9625 spin_lock_bh(&ar->data_lock); in ath10k_wmi_detach()
9626 idr_for_each(&ar->wmi.mgmt_pending_tx, in ath10k_wmi_detach()
9628 idr_destroy(&ar->wmi.mgmt_pending_tx); in ath10k_wmi_detach()
9629 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_detach()
9632 cancel_work_sync(&ar->svc_rdy_work); in ath10k_wmi_detach()
9633 dev_kfree_skb(ar->svc_rdy_skb); in ath10k_wmi_detach()