Lines Matching +full:rx +full:- +full:sched +full:- +full:sp

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.
15 #include "wmi-tlv.h"
18 #include "wmi-ops.h"
1706 if (arg->passive) in ath10k_wmi_put_wmi_channel()
1708 if (arg->allow_ibss) in ath10k_wmi_put_wmi_channel()
1710 if (arg->allow_ht) in ath10k_wmi_put_wmi_channel()
1712 if (arg->allow_vht) in ath10k_wmi_put_wmi_channel()
1714 if (arg->ht40plus) in ath10k_wmi_put_wmi_channel()
1716 if (arg->chan_radar) in ath10k_wmi_put_wmi_channel()
1719 ch->band_center_freq2 = 0; in ath10k_wmi_put_wmi_channel()
1720 ch->mhz = __cpu_to_le32(arg->freq); in ath10k_wmi_put_wmi_channel()
1721 ch->band_center_freq1 = __cpu_to_le32(arg->band_center_freq1); in ath10k_wmi_put_wmi_channel()
1722 if (arg->mode == MODE_11AC_VHT80_80) { in ath10k_wmi_put_wmi_channel()
1723 ch->band_center_freq2 = __cpu_to_le32(arg->band_center_freq2); in ath10k_wmi_put_wmi_channel()
1724 chan = ieee80211_get_channel(ar->hw->wiphy, in ath10k_wmi_put_wmi_channel()
1725 arg->band_center_freq2 - 10); in ath10k_wmi_put_wmi_channel()
1728 if (arg->mode == MODE_11AC_VHT160) { in ath10k_wmi_put_wmi_channel()
1732 if (arg->freq > arg->band_center_freq1) { in ath10k_wmi_put_wmi_channel()
1733 band_center_freq1 = arg->band_center_freq1 + 40; in ath10k_wmi_put_wmi_channel()
1734 band_center_freq2 = arg->band_center_freq1 - 40; in ath10k_wmi_put_wmi_channel()
1736 band_center_freq1 = arg->band_center_freq1 - 40; in ath10k_wmi_put_wmi_channel()
1737 band_center_freq2 = arg->band_center_freq1 + 40; in ath10k_wmi_put_wmi_channel()
1740 ch->band_center_freq1 = in ath10k_wmi_put_wmi_channel()
1743 chan = ieee80211_get_channel(ar->hw->wiphy, in ath10k_wmi_put_wmi_channel()
1744 band_center_freq2 - 10); in ath10k_wmi_put_wmi_channel()
1746 ch->band_center_freq2 = __cpu_to_le32(arg->band_center_freq1); in ath10k_wmi_put_wmi_channel()
1749 if (chan && chan->flags & IEEE80211_CHAN_RADAR) in ath10k_wmi_put_wmi_channel()
1752 ch->min_power = arg->min_power; in ath10k_wmi_put_wmi_channel()
1753 ch->max_power = arg->max_power; in ath10k_wmi_put_wmi_channel()
1754 ch->reg_power = arg->max_reg_power; in ath10k_wmi_put_wmi_channel()
1755 ch->antenna_max = arg->max_antenna_gain; in ath10k_wmi_put_wmi_channel()
1756 ch->max_tx_power = arg->max_power; in ath10k_wmi_put_wmi_channel()
1759 ch->mode = arg->mode; in ath10k_wmi_put_wmi_channel()
1760 ch->flags |= __cpu_to_le32(flags); in ath10k_wmi_put_wmi_channel()
1767 time_left = wait_for_completion_timeout(&ar->wmi.service_ready, in ath10k_wmi_wait_for_service_ready()
1770 return -ETIMEDOUT; in ath10k_wmi_wait_for_service_ready()
1778 time_left = wait_for_completion_timeout(&ar->wmi.unified_ready, in ath10k_wmi_wait_for_unified_ready()
1781 return -ETIMEDOUT; in ath10k_wmi_wait_for_unified_ready()
1795 if (!IS_ALIGNED((unsigned long)skb->data, 4)) in ath10k_wmi_alloc_skb()
1799 memset(skb->data, 0, round_len); in ath10k_wmi_alloc_skb()
1818 return -ENOMEM; in ath10k_wmi_cmd_send_nowait()
1822 cmd_hdr = (struct wmi_cmd_hdr *)skb->data; in ath10k_wmi_cmd_send_nowait()
1823 cmd_hdr->cmd_id = __cpu_to_le32(cmd); in ath10k_wmi_cmd_send_nowait()
1826 trace_ath10k_wmi_cmd(ar, cmd_id, skb->data, skb->len); in ath10k_wmi_cmd_send_nowait()
1827 ret = ath10k_htc_send(&ar->htc, ar->wmi.eid, skb); in ath10k_wmi_cmd_send_nowait()
1841 struct ath10k *ar = arvif->ar; in ath10k_wmi_tx_beacon_nowait()
1848 spin_lock_bh(&ar->data_lock); in ath10k_wmi_tx_beacon_nowait()
1850 bcn = arvif->beacon; in ath10k_wmi_tx_beacon_nowait()
1857 switch (arvif->beacon_state) { in ath10k_wmi_tx_beacon_nowait()
1862 arvif->beacon_state = ATH10K_BEACON_SENDING; in ath10k_wmi_tx_beacon_nowait()
1863 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_tx_beacon_nowait()
1865 dtim_zero = !!(cb->flags & ATH10K_SKB_F_DTIM_ZERO); in ath10k_wmi_tx_beacon_nowait()
1866 deliver_cab = !!(cb->flags & ATH10K_SKB_F_DELIVER_CAB); in ath10k_wmi_tx_beacon_nowait()
1867 ret = ath10k_wmi_beacon_send_ref_nowait(arvif->ar, in ath10k_wmi_tx_beacon_nowait()
1868 arvif->vdev_id, in ath10k_wmi_tx_beacon_nowait()
1869 bcn->data, bcn->len, in ath10k_wmi_tx_beacon_nowait()
1870 cb->paddr, in ath10k_wmi_tx_beacon_nowait()
1874 spin_lock_bh(&ar->data_lock); in ath10k_wmi_tx_beacon_nowait()
1877 arvif->beacon_state = ATH10K_BEACON_SENT; in ath10k_wmi_tx_beacon_nowait()
1879 arvif->beacon_state = ATH10K_BEACON_SCHEDULED; in ath10k_wmi_tx_beacon_nowait()
1883 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_tx_beacon_nowait()
1889 struct ath10k_vif *arvif = (void *)vif->drv_priv; in ath10k_wmi_tx_beacons_iter()
1896 ieee80211_iterate_active_interfaces_atomic(ar->hw, in ath10k_wmi_tx_beacons_nowait()
1907 wake_up(&ar->wmi.tx_credits_wq); in ath10k_wmi_op_ep_tx_credits()
1912 int ret = -EOPNOTSUPP; in ath10k_wmi_cmd_send()
1922 wait_event_timeout(ar->wmi.tx_credits_wq, ({ in ath10k_wmi_cmd_send()
1928 if (ret && test_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags)) in ath10k_wmi_cmd_send()
1929 ret = -ESHUTDOWN; in ath10k_wmi_cmd_send()
1931 (ret != -EAGAIN); in ath10k_wmi_cmd_send()
1937 if (ret == -EAGAIN) { in ath10k_wmi_cmd_send()
1956 u32 buf_len = msdu->len; in ath10k_wmi_op_gen_mgmt_tx()
1960 hdr = (struct ieee80211_hdr *)msdu->data; in ath10k_wmi_op_gen_mgmt_tx()
1961 fc = le16_to_cpu(hdr->frame_control); in ath10k_wmi_op_gen_mgmt_tx()
1963 if (cb->vif) { in ath10k_wmi_op_gen_mgmt_tx()
1964 arvif = (void *)cb->vif->drv_priv; in ath10k_wmi_op_gen_mgmt_tx()
1965 vdev_id = arvif->vdev_id; in ath10k_wmi_op_gen_mgmt_tx()
1970 if (WARN_ON_ONCE(!ieee80211_is_mgmt(hdr->frame_control))) in ath10k_wmi_op_gen_mgmt_tx()
1971 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_mgmt_tx()
1973 len = sizeof(cmd->hdr) + msdu->len; in ath10k_wmi_op_gen_mgmt_tx()
1975 if ((ieee80211_is_action(hdr->frame_control) || in ath10k_wmi_op_gen_mgmt_tx()
1976 ieee80211_is_deauth(hdr->frame_control) || in ath10k_wmi_op_gen_mgmt_tx()
1977 ieee80211_is_disassoc(hdr->frame_control)) && in ath10k_wmi_op_gen_mgmt_tx()
1978 ieee80211_has_protected(hdr->frame_control)) { in ath10k_wmi_op_gen_mgmt_tx()
1979 peer_addr = hdr->addr1; in ath10k_wmi_op_gen_mgmt_tx()
1984 if (cb->ucast_cipher == WLAN_CIPHER_SUITE_GCMP || in ath10k_wmi_op_gen_mgmt_tx()
1985 cb->ucast_cipher == WLAN_CIPHER_SUITE_GCMP_256) { in ath10k_wmi_op_gen_mgmt_tx()
1999 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_mgmt_tx()
2001 cmd = (struct wmi_mgmt_tx_cmd *)skb->data; in ath10k_wmi_op_gen_mgmt_tx()
2003 cmd->hdr.vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_mgmt_tx()
2004 cmd->hdr.tx_rate = 0; in ath10k_wmi_op_gen_mgmt_tx()
2005 cmd->hdr.tx_power = 0; in ath10k_wmi_op_gen_mgmt_tx()
2006 cmd->hdr.buf_len = __cpu_to_le32(buf_len); in ath10k_wmi_op_gen_mgmt_tx()
2008 ether_addr_copy(cmd->hdr.peer_macaddr.addr, ieee80211_get_DA(hdr)); in ath10k_wmi_op_gen_mgmt_tx()
2009 memcpy(cmd->buf, msdu->data, msdu->len); in ath10k_wmi_op_gen_mgmt_tx()
2012 msdu, skb->len, fc & IEEE80211_FCTL_FTYPE, in ath10k_wmi_op_gen_mgmt_tx()
2014 trace_ath10k_tx_hdr(ar, skb->data, skb->len); in ath10k_wmi_op_gen_mgmt_tx()
2015 trace_ath10k_tx_payload(ar, skb->data, skb->len); in ath10k_wmi_op_gen_mgmt_tx()
2022 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_scan_started()
2024 switch (ar->scan.state) { in ath10k_wmi_event_scan_started()
2029 ath10k_scan_state_str(ar->scan.state), in ath10k_wmi_event_scan_started()
2030 ar->scan.state); in ath10k_wmi_event_scan_started()
2033 ar->scan.state = ATH10K_SCAN_RUNNING; in ath10k_wmi_event_scan_started()
2035 if (ar->scan.is_roc) in ath10k_wmi_event_scan_started()
2036 ieee80211_ready_on_channel(ar->hw); in ath10k_wmi_event_scan_started()
2038 complete(&ar->scan.started); in ath10k_wmi_event_scan_started()
2045 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_scan_start_failed()
2047 switch (ar->scan.state) { in ath10k_wmi_event_scan_start_failed()
2052 ath10k_scan_state_str(ar->scan.state), in ath10k_wmi_event_scan_start_failed()
2053 ar->scan.state); in ath10k_wmi_event_scan_start_failed()
2056 complete(&ar->scan.started); in ath10k_wmi_event_scan_start_failed()
2064 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_scan_completed()
2066 switch (ar->scan.state) { in ath10k_wmi_event_scan_completed()
2078 ath10k_scan_state_str(ar->scan.state), in ath10k_wmi_event_scan_completed()
2079 ar->scan.state); in ath10k_wmi_event_scan_completed()
2090 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_scan_bss_chan()
2092 switch (ar->scan.state) { in ath10k_wmi_event_scan_bss_chan()
2096 ath10k_scan_state_str(ar->scan.state), in ath10k_wmi_event_scan_bss_chan()
2097 ar->scan.state); in ath10k_wmi_event_scan_bss_chan()
2101 ar->scan_channel = NULL; in ath10k_wmi_event_scan_bss_chan()
2108 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_scan_foreign_chan()
2110 switch (ar->scan.state) { in ath10k_wmi_event_scan_foreign_chan()
2114 ath10k_scan_state_str(ar->scan.state), in ath10k_wmi_event_scan_foreign_chan()
2115 ar->scan.state); in ath10k_wmi_event_scan_foreign_chan()
2119 ar->scan_channel = ieee80211_get_channel(ar->hw->wiphy, freq); in ath10k_wmi_event_scan_foreign_chan()
2121 if (ar->scan.is_roc && ar->scan.roc_freq == freq) in ath10k_wmi_event_scan_foreign_chan()
2122 complete(&ar->scan.on_channel); in ath10k_wmi_event_scan_foreign_chan()
2172 struct wmi_scan_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_scan_ev()
2174 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_scan_ev()
2175 return -EPROTO; in ath10k_wmi_op_pull_scan_ev()
2178 arg->event_type = ev->event_type; in ath10k_wmi_op_pull_scan_ev()
2179 arg->reason = ev->reason; in ath10k_wmi_op_pull_scan_ev()
2180 arg->channel_freq = ev->channel_freq; in ath10k_wmi_op_pull_scan_ev()
2181 arg->scan_req_id = ev->scan_req_id; in ath10k_wmi_op_pull_scan_ev()
2182 arg->scan_id = ev->scan_id; in ath10k_wmi_op_pull_scan_ev()
2183 arg->vdev_id = ev->vdev_id; in ath10k_wmi_op_pull_scan_ev()
2212 spin_lock_bh(&ar->data_lock); in ath10k_wmi_event_scan()
2218 ath10k_scan_state_str(ar->scan.state), ar->scan.state); in ath10k_wmi_event_scan()
2245 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_event_scan()
2256 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; in ath10k_wmi_handle_wep_reauth()
2261 if (!ieee80211_is_auth(hdr->frame_control) || in ath10k_wmi_handle_wep_reauth()
2262 !ieee80211_has_protected(hdr->frame_control)) in ath10k_wmi_handle_wep_reauth()
2265 hdrlen = ieee80211_hdrlen(hdr->frame_control); in ath10k_wmi_handle_wep_reauth()
2266 if (skb->len < (hdrlen + IEEE80211_WEP_IV_LEN)) in ath10k_wmi_handle_wep_reauth()
2269 keyidx = skb->data[hdrlen + (IEEE80211_WEP_IV_LEN - 1)] >> WEP_KEYID_SHIFT; in ath10k_wmi_handle_wep_reauth()
2272 spin_lock_bh(&ar->data_lock); in ath10k_wmi_handle_wep_reauth()
2274 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_handle_wep_reauth()
2279 status->flag |= RX_FLAG_DECRYPTED; in ath10k_wmi_handle_wep_reauth()
2295 ar->running_fw->fw_file.fw_features)) { in ath10k_wmi_op_pull_mgmt_rx_ev()
2296 ev_v2 = (struct wmi_mgmt_rx_event_v2 *)skb->data; in ath10k_wmi_op_pull_mgmt_rx_ev()
2297 ev_hdr = &ev_v2->hdr.v1; in ath10k_wmi_op_pull_mgmt_rx_ev()
2300 ev_v1 = (struct wmi_mgmt_rx_event_v1 *)skb->data; in ath10k_wmi_op_pull_mgmt_rx_ev()
2301 ev_hdr = &ev_v1->hdr; in ath10k_wmi_op_pull_mgmt_rx_ev()
2305 if (skb->len < pull_len) in ath10k_wmi_op_pull_mgmt_rx_ev()
2306 return -EPROTO; in ath10k_wmi_op_pull_mgmt_rx_ev()
2309 arg->channel = ev_hdr->channel; in ath10k_wmi_op_pull_mgmt_rx_ev()
2310 arg->buf_len = ev_hdr->buf_len; in ath10k_wmi_op_pull_mgmt_rx_ev()
2311 arg->status = ev_hdr->status; in ath10k_wmi_op_pull_mgmt_rx_ev()
2312 arg->snr = ev_hdr->snr; in ath10k_wmi_op_pull_mgmt_rx_ev()
2313 arg->phy_mode = ev_hdr->phy_mode; in ath10k_wmi_op_pull_mgmt_rx_ev()
2314 arg->rate = ev_hdr->rate; in ath10k_wmi_op_pull_mgmt_rx_ev()
2316 msdu_len = __le32_to_cpu(arg->buf_len); in ath10k_wmi_op_pull_mgmt_rx_ev()
2317 if (skb->len < msdu_len) in ath10k_wmi_op_pull_mgmt_rx_ev()
2318 return -EPROTO; in ath10k_wmi_op_pull_mgmt_rx_ev()
2320 if (le32_to_cpu(arg->status) & WMI_RX_STATUS_EXT_INFO) { in ath10k_wmi_op_pull_mgmt_rx_ev()
2321 len = ALIGN(le32_to_cpu(arg->buf_len), 4); in ath10k_wmi_op_pull_mgmt_rx_ev()
2322 ext_info = (struct wmi_mgmt_rx_ext_info *)(skb->data + len); in ath10k_wmi_op_pull_mgmt_rx_ev()
2323 memcpy(&arg->ext_info, ext_info, in ath10k_wmi_op_pull_mgmt_rx_ev()
2345 ev = (struct wmi_10_4_mgmt_rx_event *)skb->data; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2346 ev_hdr = &ev->hdr; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2349 if (skb->len < pull_len) in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2350 return -EPROTO; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2353 arg->channel = ev_hdr->channel; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2354 arg->buf_len = ev_hdr->buf_len; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2355 arg->status = ev_hdr->status; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2356 arg->snr = ev_hdr->snr; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2357 arg->phy_mode = ev_hdr->phy_mode; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2358 arg->rate = ev_hdr->rate; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2360 msdu_len = __le32_to_cpu(arg->buf_len); in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2361 if (skb->len < msdu_len) in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2362 return -EPROTO; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2364 if (le32_to_cpu(arg->status) & WMI_RX_STATUS_EXT_INFO) { in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2365 len = ALIGN(le32_to_cpu(arg->buf_len), 4); in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2366 ext_info = (struct wmi_mgmt_rx_ext_info *)(skb->data + len); in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2367 memcpy(&arg->ext_info, ext_info, in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2380 if (!ieee80211_has_protected(hdr->frame_control)) in ath10k_wmi_rx_is_decrypted()
2387 if (ieee80211_is_auth(hdr->frame_control)) in ath10k_wmi_rx_is_decrypted()
2394 ar->hw_params.sw_decrypt_mcast_mgmt) in ath10k_wmi_rx_is_decrypted()
2404 struct ath10k_wmi *wmi = &ar->wmi; in wmi_process_mgmt_tx_comp()
2409 spin_lock_bh(&ar->data_lock); in wmi_process_mgmt_tx_comp()
2411 pkt_addr = idr_find(&wmi->mgmt_pending_tx, param->desc_id); in wmi_process_mgmt_tx_comp()
2414 param->desc_id); in wmi_process_mgmt_tx_comp()
2415 ret = -ENOENT; in wmi_process_mgmt_tx_comp()
2419 msdu = pkt_addr->vaddr; in wmi_process_mgmt_tx_comp()
2420 dma_unmap_single(ar->dev, pkt_addr->paddr, in wmi_process_mgmt_tx_comp()
2421 msdu->len, DMA_TO_DEVICE); in wmi_process_mgmt_tx_comp()
2424 if (param->status) { in wmi_process_mgmt_tx_comp()
2425 info->flags &= ~IEEE80211_TX_STAT_ACK; in wmi_process_mgmt_tx_comp()
2427 info->flags |= IEEE80211_TX_STAT_ACK; in wmi_process_mgmt_tx_comp()
2428 info->status.ack_signal = ATH10K_DEFAULT_NOISE_FLOOR + in wmi_process_mgmt_tx_comp()
2429 param->ack_rssi; in wmi_process_mgmt_tx_comp()
2430 info->status.flags |= IEEE80211_TX_STATUS_ACK_SIGNAL_VALID; in wmi_process_mgmt_tx_comp()
2433 ieee80211_tx_status_irqsafe(ar->hw, msdu); in wmi_process_mgmt_tx_comp()
2438 idr_remove(&wmi->mgmt_pending_tx, param->desc_id); in wmi_process_mgmt_tx_comp()
2439 spin_unlock_bh(&ar->data_lock); in wmi_process_mgmt_tx_comp()
2459 if (test_bit(WMI_SERVICE_TX_DATA_ACK_RSSI, ar->wmi.svc_map)) in ath10k_wmi_event_mgmt_tx_compl()
2489 if (test_bit(WMI_SERVICE_TX_DATA_ACK_RSSI, ar->wmi.svc_map)) in ath10k_wmi_event_mgmt_tx_bundle_compl()
2515 ath10k_warn(ar, "failed to parse mgmt rx event: %d\n", ret); in ath10k_wmi_event_mgmt_rx()
2529 "event mgmt rx status %08x\n", rx_status); in ath10k_wmi_event_mgmt_rx()
2531 if ((test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags)) || in ath10k_wmi_event_mgmt_rx()
2539 status->flag |= RX_FLAG_MMIC_ERROR; in ath10k_wmi_event_mgmt_rx()
2542 status->mactime = in ath10k_wmi_event_mgmt_rx()
2544 status->flag |= RX_FLAG_MACTIME_END; in ath10k_wmi_event_mgmt_rx()
2546 /* Hardware can Rx CCK rates on 5GHz. In that case phy_mode is set to in ath10k_wmi_event_mgmt_rx()
2548 * of mgmt rx. in ath10k_wmi_event_mgmt_rx()
2551 status->band = NL80211_BAND_2GHZ; in ath10k_wmi_event_mgmt_rx()
2553 status->band = NL80211_BAND_5GHZ; in ath10k_wmi_event_mgmt_rx()
2563 if (phy_mode == MODE_11B && status->band == NL80211_BAND_5GHZ) in ath10k_wmi_event_mgmt_rx()
2564 ath10k_dbg(ar, ATH10K_DBG_MGMT, "wmi mgmt rx 11b (CCK) on 5GHz\n"); in ath10k_wmi_event_mgmt_rx()
2566 sband = &ar->mac.sbands[status->band]; in ath10k_wmi_event_mgmt_rx()
2568 status->freq = ieee80211_channel_to_frequency(channel, status->band); in ath10k_wmi_event_mgmt_rx()
2569 status->signal = snr + ATH10K_DEFAULT_NOISE_FLOOR; in ath10k_wmi_event_mgmt_rx()
2571 BUILD_BUG_ON(ARRAY_SIZE(status->chain_signal) != ARRAY_SIZE(arg.rssi)); in ath10k_wmi_event_mgmt_rx()
2573 for (i = 0; i < ARRAY_SIZE(status->chain_signal); i++) { in ath10k_wmi_event_mgmt_rx()
2574 status->chains &= ~BIT(i); in ath10k_wmi_event_mgmt_rx()
2579 status->chain_signal[i] = ATH10K_DEFAULT_NOISE_FLOOR + rssi; in ath10k_wmi_event_mgmt_rx()
2580 status->chains |= BIT(i); in ath10k_wmi_event_mgmt_rx()
2584 status->rate_idx = ath10k_mac_bitrate_to_idx(sband, rate / 100); in ath10k_wmi_event_mgmt_rx()
2586 hdr = (struct ieee80211_hdr *)skb->data; in ath10k_wmi_event_mgmt_rx()
2587 fc = le16_to_cpu(hdr->frame_control); in ath10k_wmi_event_mgmt_rx()
2593 status->flag |= RX_FLAG_SKIP_MONITOR; in ath10k_wmi_event_mgmt_rx()
2598 status->flag |= RX_FLAG_DECRYPTED; in ath10k_wmi_event_mgmt_rx()
2600 if (!ieee80211_is_action(hdr->frame_control) && in ath10k_wmi_event_mgmt_rx()
2601 !ieee80211_is_deauth(hdr->frame_control) && in ath10k_wmi_event_mgmt_rx()
2602 !ieee80211_is_disassoc(hdr->frame_control)) { in ath10k_wmi_event_mgmt_rx()
2603 status->flag |= RX_FLAG_IV_STRIPPED | in ath10k_wmi_event_mgmt_rx()
2605 hdr->frame_control = __cpu_to_le16(fc & in ath10k_wmi_event_mgmt_rx()
2610 if (ieee80211_is_beacon(hdr->frame_control)) in ath10k_wmi_event_mgmt_rx()
2613 if (ieee80211_is_beacon(hdr->frame_control) || in ath10k_wmi_event_mgmt_rx()
2614 ieee80211_is_probe_resp(hdr->frame_control)) in ath10k_wmi_event_mgmt_rx()
2615 status->boottime_ns = ktime_get_boottime_ns(); in ath10k_wmi_event_mgmt_rx()
2618 "event mgmt rx skb %pK len %d ftype %02x stype %02x\n", in ath10k_wmi_event_mgmt_rx()
2619 skb, skb->len, in ath10k_wmi_event_mgmt_rx()
2623 "event mgmt rx freq %d band %d snr %d, rate_idx %d\n", in ath10k_wmi_event_mgmt_rx()
2624 status->freq, status->band, status->signal, in ath10k_wmi_event_mgmt_rx()
2625 status->rate_idx); in ath10k_wmi_event_mgmt_rx()
2627 ieee80211_rx_ni(ar->hw, skb); in ath10k_wmi_event_mgmt_rx()
2638 sband = ar->hw->wiphy->bands[band]; in freq_to_idx()
2642 for (ch = 0; ch < sband->n_channels; ch++, idx++) in freq_to_idx()
2643 if (sband->channels[ch].center_freq == freq) in freq_to_idx()
2654 struct wmi_chan_info_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_ch_info_ev()
2656 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_ch_info_ev()
2657 return -EPROTO; in ath10k_wmi_op_pull_ch_info_ev()
2660 arg->err_code = ev->err_code; in ath10k_wmi_op_pull_ch_info_ev()
2661 arg->freq = ev->freq; in ath10k_wmi_op_pull_ch_info_ev()
2662 arg->cmd_flags = ev->cmd_flags; in ath10k_wmi_op_pull_ch_info_ev()
2663 arg->noise_floor = ev->noise_floor; in ath10k_wmi_op_pull_ch_info_ev()
2664 arg->rx_clear_count = ev->rx_clear_count; in ath10k_wmi_op_pull_ch_info_ev()
2665 arg->cycle_count = ev->cycle_count; in ath10k_wmi_op_pull_ch_info_ev()
2674 struct wmi_10_4_chan_info_event *ev = (void *)skb->data; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2676 if (skb->len < sizeof(*ev)) in ath10k_wmi_10_4_op_pull_ch_info_ev()
2677 return -EPROTO; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2680 arg->err_code = ev->err_code; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2681 arg->freq = ev->freq; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2682 arg->cmd_flags = ev->cmd_flags; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2683 arg->noise_floor = ev->noise_floor; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2684 arg->rx_clear_count = ev->rx_clear_count; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2685 arg->cycle_count = ev->cycle_count; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2686 arg->chan_tx_pwr_range = ev->chan_tx_pwr_range; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2687 arg->chan_tx_pwr_tp = ev->chan_tx_pwr_tp; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2688 arg->rx_frame_count = ev->rx_frame_count; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2703 if (params->cmd_flags & WMI_CHAN_INFO_FLAG_COMPLETE) { in ath10k_wmi_event_chan_info_unpaired()
2708 idx = freq_to_idx(ar, params->freq); in ath10k_wmi_event_chan_info_unpaired()
2709 if (idx >= ARRAY_SIZE(ar->survey)) { in ath10k_wmi_event_chan_info_unpaired()
2711 params->freq, idx); in ath10k_wmi_event_chan_info_unpaired()
2715 survey = &ar->survey[idx]; in ath10k_wmi_event_chan_info_unpaired()
2717 if (!params->mac_clk_mhz) in ath10k_wmi_event_chan_info_unpaired()
2722 survey->noise = params->noise_floor; in ath10k_wmi_event_chan_info_unpaired()
2723 survey->time = (params->cycle_count / params->mac_clk_mhz) / 1000; in ath10k_wmi_event_chan_info_unpaired()
2724 survey->time_busy = (params->rx_clear_count / params->mac_clk_mhz) / 1000; in ath10k_wmi_event_chan_info_unpaired()
2725 survey->filled |= SURVEY_INFO_NOISE_DBM | SURVEY_INFO_TIME | in ath10k_wmi_event_chan_info_unpaired()
2739 idx = freq_to_idx(ar, params->freq); in ath10k_wmi_event_chan_info_paired()
2740 if (idx >= ARRAY_SIZE(ar->survey)) { in ath10k_wmi_event_chan_info_paired()
2742 params->freq, idx); in ath10k_wmi_event_chan_info_paired()
2746 if (params->cmd_flags & WMI_CHAN_INFO_FLAG_COMPLETE) { in ath10k_wmi_event_chan_info_paired()
2747 if (ar->ch_info_can_report_survey) { in ath10k_wmi_event_chan_info_paired()
2748 survey = &ar->survey[idx]; in ath10k_wmi_event_chan_info_paired()
2749 survey->noise = params->noise_floor; in ath10k_wmi_event_chan_info_paired()
2750 survey->filled = SURVEY_INFO_NOISE_DBM; in ath10k_wmi_event_chan_info_paired()
2754 params->cycle_count, in ath10k_wmi_event_chan_info_paired()
2755 params->rx_clear_count, in ath10k_wmi_event_chan_info_paired()
2756 ar->survey_last_cycle_count, in ath10k_wmi_event_chan_info_paired()
2757 ar->survey_last_rx_clear_count); in ath10k_wmi_event_chan_info_paired()
2760 ar->ch_info_can_report_survey = false; in ath10k_wmi_event_chan_info_paired()
2762 ar->ch_info_can_report_survey = true; in ath10k_wmi_event_chan_info_paired()
2765 if (!(params->cmd_flags & WMI_CHAN_INFO_FLAG_PRE_COMPLETE)) { in ath10k_wmi_event_chan_info_paired()
2766 ar->survey_last_rx_clear_count = params->rx_clear_count; in ath10k_wmi_event_chan_info_paired()
2767 ar->survey_last_cycle_count = params->cycle_count; in ath10k_wmi_event_chan_info_paired()
2797 spin_lock_bh(&ar->data_lock); in ath10k_wmi_event_chan_info()
2799 switch (ar->scan.state) { in ath10k_wmi_event_chan_info()
2810 ar->running_fw->fw_file.fw_features)) in ath10k_wmi_event_chan_info()
2816 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_event_chan_info()
2835 complete(&ar->wmi.barrier); in ath10k_wmi_event_echo()
2841 skb->len); in ath10k_wmi_event_debug_mesg()
2843 trace_ath10k_wmi_dbglog(ar, skb->data, skb->len); in ath10k_wmi_event_debug_mesg()
2851 dst->ch_noise_floor = __le32_to_cpu(src->chan_nf); in ath10k_wmi_pull_pdev_stats_base()
2852 dst->tx_frame_count = __le32_to_cpu(src->tx_frame_count); in ath10k_wmi_pull_pdev_stats_base()
2853 dst->rx_frame_count = __le32_to_cpu(src->rx_frame_count); in ath10k_wmi_pull_pdev_stats_base()
2854 dst->rx_clear_count = __le32_to_cpu(src->rx_clear_count); in ath10k_wmi_pull_pdev_stats_base()
2855 dst->cycle_count = __le32_to_cpu(src->cycle_count); in ath10k_wmi_pull_pdev_stats_base()
2856 dst->phy_err_count = __le32_to_cpu(src->phy_err_count); in ath10k_wmi_pull_pdev_stats_base()
2857 dst->chan_tx_power = __le32_to_cpu(src->chan_tx_pwr); in ath10k_wmi_pull_pdev_stats_base()
2863 dst->comp_queued = __le32_to_cpu(src->comp_queued); in ath10k_wmi_pull_pdev_stats_tx()
2864 dst->comp_delivered = __le32_to_cpu(src->comp_delivered); in ath10k_wmi_pull_pdev_stats_tx()
2865 dst->msdu_enqued = __le32_to_cpu(src->msdu_enqued); in ath10k_wmi_pull_pdev_stats_tx()
2866 dst->mpdu_enqued = __le32_to_cpu(src->mpdu_enqued); in ath10k_wmi_pull_pdev_stats_tx()
2867 dst->wmm_drop = __le32_to_cpu(src->wmm_drop); in ath10k_wmi_pull_pdev_stats_tx()
2868 dst->local_enqued = __le32_to_cpu(src->local_enqued); in ath10k_wmi_pull_pdev_stats_tx()
2869 dst->local_freed = __le32_to_cpu(src->local_freed); in ath10k_wmi_pull_pdev_stats_tx()
2870 dst->hw_queued = __le32_to_cpu(src->hw_queued); in ath10k_wmi_pull_pdev_stats_tx()
2871 dst->hw_reaped = __le32_to_cpu(src->hw_reaped); in ath10k_wmi_pull_pdev_stats_tx()
2872 dst->underrun = __le32_to_cpu(src->underrun); in ath10k_wmi_pull_pdev_stats_tx()
2873 dst->tx_abort = __le32_to_cpu(src->tx_abort); in ath10k_wmi_pull_pdev_stats_tx()
2874 dst->mpdus_requeued = __le32_to_cpu(src->mpdus_requeued); in ath10k_wmi_pull_pdev_stats_tx()
2875 dst->tx_ko = __le32_to_cpu(src->tx_ko); in ath10k_wmi_pull_pdev_stats_tx()
2876 dst->data_rc = __le32_to_cpu(src->data_rc); in ath10k_wmi_pull_pdev_stats_tx()
2877 dst->self_triggers = __le32_to_cpu(src->self_triggers); in ath10k_wmi_pull_pdev_stats_tx()
2878 dst->sw_retry_failure = __le32_to_cpu(src->sw_retry_failure); in ath10k_wmi_pull_pdev_stats_tx()
2879 dst->illgl_rate_phy_err = __le32_to_cpu(src->illgl_rate_phy_err); in ath10k_wmi_pull_pdev_stats_tx()
2880 dst->pdev_cont_xretry = __le32_to_cpu(src->pdev_cont_xretry); in ath10k_wmi_pull_pdev_stats_tx()
2881 dst->pdev_tx_timeout = __le32_to_cpu(src->pdev_tx_timeout); in ath10k_wmi_pull_pdev_stats_tx()
2882 dst->pdev_resets = __le32_to_cpu(src->pdev_resets); in ath10k_wmi_pull_pdev_stats_tx()
2883 dst->phy_underrun = __le32_to_cpu(src->phy_underrun); in ath10k_wmi_pull_pdev_stats_tx()
2884 dst->txop_ovf = __le32_to_cpu(src->txop_ovf); in ath10k_wmi_pull_pdev_stats_tx()
2891 dst->comp_queued = __le32_to_cpu(src->comp_queued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2892 dst->comp_delivered = __le32_to_cpu(src->comp_delivered); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2893 dst->msdu_enqued = __le32_to_cpu(src->msdu_enqued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2894 dst->mpdu_enqued = __le32_to_cpu(src->mpdu_enqued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2895 dst->wmm_drop = __le32_to_cpu(src->wmm_drop); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2896 dst->local_enqued = __le32_to_cpu(src->local_enqued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2897 dst->local_freed = __le32_to_cpu(src->local_freed); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2898 dst->hw_queued = __le32_to_cpu(src->hw_queued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2899 dst->hw_reaped = __le32_to_cpu(src->hw_reaped); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2900 dst->underrun = __le32_to_cpu(src->underrun); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2901 dst->tx_abort = __le32_to_cpu(src->tx_abort); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2902 dst->mpdus_requeued = __le32_to_cpu(src->mpdus_requeued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2903 dst->tx_ko = __le32_to_cpu(src->tx_ko); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2904 dst->data_rc = __le32_to_cpu(src->data_rc); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2905 dst->self_triggers = __le32_to_cpu(src->self_triggers); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2906 dst->sw_retry_failure = __le32_to_cpu(src->sw_retry_failure); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2907 dst->illgl_rate_phy_err = __le32_to_cpu(src->illgl_rate_phy_err); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2908 dst->pdev_cont_xretry = __le32_to_cpu(src->pdev_cont_xretry); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2909 dst->pdev_tx_timeout = __le32_to_cpu(src->pdev_tx_timeout); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2910 dst->pdev_resets = __le32_to_cpu(src->pdev_resets); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2911 dst->phy_underrun = __le32_to_cpu(src->phy_underrun); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2912 dst->txop_ovf = __le32_to_cpu(src->txop_ovf); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2913 dst->hw_paused = __le32_to_cpu(src->hw_paused); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2914 dst->seq_posted = __le32_to_cpu(src->seq_posted); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2915 dst->seq_failed_queueing = in ath10k_wmi_10_4_pull_pdev_stats_tx()
2916 __le32_to_cpu(src->seq_failed_queueing); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2917 dst->seq_completed = __le32_to_cpu(src->seq_completed); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2918 dst->seq_restarted = __le32_to_cpu(src->seq_restarted); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2919 dst->mu_seq_posted = __le32_to_cpu(src->mu_seq_posted); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2920 dst->mpdus_sw_flush = __le32_to_cpu(src->mpdus_sw_flush); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2921 dst->mpdus_hw_filter = __le32_to_cpu(src->mpdus_hw_filter); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2922 dst->mpdus_truncated = __le32_to_cpu(src->mpdus_truncated); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2923 dst->mpdus_ack_failed = __le32_to_cpu(src->mpdus_ack_failed); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2924 dst->mpdus_hw_filter = __le32_to_cpu(src->mpdus_hw_filter); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2925 dst->mpdus_expired = __le32_to_cpu(src->mpdus_expired); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2931 dst->mid_ppdu_route_change = __le32_to_cpu(src->mid_ppdu_route_change); in ath10k_wmi_pull_pdev_stats_rx()
2932 dst->status_rcvd = __le32_to_cpu(src->status_rcvd); in ath10k_wmi_pull_pdev_stats_rx()
2933 dst->r0_frags = __le32_to_cpu(src->r0_frags); in ath10k_wmi_pull_pdev_stats_rx()
2934 dst->r1_frags = __le32_to_cpu(src->r1_frags); in ath10k_wmi_pull_pdev_stats_rx()
2935 dst->r2_frags = __le32_to_cpu(src->r2_frags); in ath10k_wmi_pull_pdev_stats_rx()
2936 dst->r3_frags = __le32_to_cpu(src->r3_frags); in ath10k_wmi_pull_pdev_stats_rx()
2937 dst->htt_msdus = __le32_to_cpu(src->htt_msdus); in ath10k_wmi_pull_pdev_stats_rx()
2938 dst->htt_mpdus = __le32_to_cpu(src->htt_mpdus); in ath10k_wmi_pull_pdev_stats_rx()
2939 dst->loc_msdus = __le32_to_cpu(src->loc_msdus); in ath10k_wmi_pull_pdev_stats_rx()
2940 dst->loc_mpdus = __le32_to_cpu(src->loc_mpdus); in ath10k_wmi_pull_pdev_stats_rx()
2941 dst->oversize_amsdu = __le32_to_cpu(src->oversize_amsdu); in ath10k_wmi_pull_pdev_stats_rx()
2942 dst->phy_errs = __le32_to_cpu(src->phy_errs); in ath10k_wmi_pull_pdev_stats_rx()
2943 dst->phy_err_drop = __le32_to_cpu(src->phy_err_drop); in ath10k_wmi_pull_pdev_stats_rx()
2944 dst->mpdu_errs = __le32_to_cpu(src->mpdu_errs); in ath10k_wmi_pull_pdev_stats_rx()
2950 dst->ack_rx_bad = __le32_to_cpu(src->ack_rx_bad); in ath10k_wmi_pull_pdev_stats_extra()
2951 dst->rts_bad = __le32_to_cpu(src->rts_bad); in ath10k_wmi_pull_pdev_stats_extra()
2952 dst->rts_good = __le32_to_cpu(src->rts_good); in ath10k_wmi_pull_pdev_stats_extra()
2953 dst->fcs_bad = __le32_to_cpu(src->fcs_bad); in ath10k_wmi_pull_pdev_stats_extra()
2954 dst->no_beacons = __le32_to_cpu(src->no_beacons); in ath10k_wmi_pull_pdev_stats_extra()
2955 dst->mib_int_count = __le32_to_cpu(src->mib_int_count); in ath10k_wmi_pull_pdev_stats_extra()
2961 ether_addr_copy(dst->peer_macaddr, src->peer_macaddr.addr); in ath10k_wmi_pull_peer_stats()
2962 dst->peer_rssi = __le32_to_cpu(src->peer_rssi); in ath10k_wmi_pull_peer_stats()
2963 dst->peer_tx_rate = __le32_to_cpu(src->peer_tx_rate); in ath10k_wmi_pull_peer_stats()
2970 ether_addr_copy(dst->peer_macaddr, src->peer_macaddr.addr); in ath10k_wmi_10_4_pull_peer_stats()
2971 dst->peer_rssi = __le32_to_cpu(src->peer_rssi); in ath10k_wmi_10_4_pull_peer_stats()
2972 dst->peer_tx_rate = __le32_to_cpu(src->peer_tx_rate); in ath10k_wmi_10_4_pull_peer_stats()
2973 dst->peer_rx_rate = __le32_to_cpu(src->peer_rx_rate); in ath10k_wmi_10_4_pull_peer_stats()
2980 dst->vdev_id = __le32_to_cpu(src->vdev_id); in ath10k_wmi_10_4_pull_vdev_stats()
2981 dst->ppdu_aggr_cnt = __le32_to_cpu(src->ppdu_aggr_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
2982 dst->ppdu_noack = __le32_to_cpu(src->ppdu_noack); in ath10k_wmi_10_4_pull_vdev_stats()
2983 dst->mpdu_queued = __le32_to_cpu(src->mpdu_queued); in ath10k_wmi_10_4_pull_vdev_stats()
2984 dst->ppdu_nonaggr_cnt = __le32_to_cpu(src->ppdu_nonaggr_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
2985 dst->mpdu_sw_requeued = __le32_to_cpu(src->mpdu_sw_requeued); in ath10k_wmi_10_4_pull_vdev_stats()
2986 dst->mpdu_suc_retry = __le32_to_cpu(src->mpdu_suc_retry); in ath10k_wmi_10_4_pull_vdev_stats()
2987 dst->mpdu_suc_multitry = __le32_to_cpu(src->mpdu_suc_multitry); in ath10k_wmi_10_4_pull_vdev_stats()
2988 dst->mpdu_fail_retry = __le32_to_cpu(src->mpdu_fail_retry); in ath10k_wmi_10_4_pull_vdev_stats()
2989 dst->tx_ftm_suc = __le32_to_cpu(src->tx_ftm_suc); in ath10k_wmi_10_4_pull_vdev_stats()
2990 dst->tx_ftm_suc_retry = __le32_to_cpu(src->tx_ftm_suc_retry); in ath10k_wmi_10_4_pull_vdev_stats()
2991 dst->tx_ftm_fail = __le32_to_cpu(src->tx_ftm_fail); in ath10k_wmi_10_4_pull_vdev_stats()
2992 dst->rx_ftmr_cnt = __le32_to_cpu(src->rx_ftmr_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
2993 dst->rx_ftmr_dup_cnt = __le32_to_cpu(src->rx_ftmr_dup_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
2994 dst->rx_iftmr_cnt = __le32_to_cpu(src->rx_iftmr_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
2995 dst->rx_iftmr_dup_cnt = __le32_to_cpu(src->rx_iftmr_dup_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
3002 const struct wmi_stats_event *ev = (void *)skb->data; in ath10k_wmi_main_op_pull_fw_stats()
3007 return -EPROTO; in ath10k_wmi_main_op_pull_fw_stats()
3009 num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats); in ath10k_wmi_main_op_pull_fw_stats()
3010 num_peer_stats = __le32_to_cpu(ev->num_peer_stats); in ath10k_wmi_main_op_pull_fw_stats()
3016 src = (void *)skb->data; in ath10k_wmi_main_op_pull_fw_stats()
3018 return -EPROTO; in ath10k_wmi_main_op_pull_fw_stats()
3024 ath10k_wmi_pull_pdev_stats_base(&src->base, dst); in ath10k_wmi_main_op_pull_fw_stats()
3025 ath10k_wmi_pull_pdev_stats_tx(&src->tx, dst); in ath10k_wmi_main_op_pull_fw_stats()
3026 ath10k_wmi_pull_pdev_stats_rx(&src->rx, dst); in ath10k_wmi_main_op_pull_fw_stats()
3028 list_add_tail(&dst->list, &stats->pdevs); in ath10k_wmi_main_op_pull_fw_stats()
3037 src = (void *)skb->data; in ath10k_wmi_main_op_pull_fw_stats()
3039 return -EPROTO; in ath10k_wmi_main_op_pull_fw_stats()
3046 list_add_tail(&dst->list, &stats->peers); in ath10k_wmi_main_op_pull_fw_stats()
3056 const struct wmi_stats_event *ev = (void *)skb->data; in ath10k_wmi_10x_op_pull_fw_stats()
3061 return -EPROTO; in ath10k_wmi_10x_op_pull_fw_stats()
3063 num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats); in ath10k_wmi_10x_op_pull_fw_stats()
3064 num_peer_stats = __le32_to_cpu(ev->num_peer_stats); in ath10k_wmi_10x_op_pull_fw_stats()
3070 src = (void *)skb->data; in ath10k_wmi_10x_op_pull_fw_stats()
3072 return -EPROTO; in ath10k_wmi_10x_op_pull_fw_stats()
3078 ath10k_wmi_pull_pdev_stats_base(&src->base, dst); in ath10k_wmi_10x_op_pull_fw_stats()
3079 ath10k_wmi_pull_pdev_stats_tx(&src->tx, dst); in ath10k_wmi_10x_op_pull_fw_stats()
3080 ath10k_wmi_pull_pdev_stats_rx(&src->rx, dst); in ath10k_wmi_10x_op_pull_fw_stats()
3081 ath10k_wmi_pull_pdev_stats_extra(&src->extra, dst); in ath10k_wmi_10x_op_pull_fw_stats()
3083 list_add_tail(&dst->list, &stats->pdevs); in ath10k_wmi_10x_op_pull_fw_stats()
3092 src = (void *)skb->data; in ath10k_wmi_10x_op_pull_fw_stats()
3094 return -EPROTO; in ath10k_wmi_10x_op_pull_fw_stats()
3100 ath10k_wmi_pull_peer_stats(&src->old, dst); in ath10k_wmi_10x_op_pull_fw_stats()
3102 dst->peer_rx_rate = __le32_to_cpu(src->peer_rx_rate); in ath10k_wmi_10x_op_pull_fw_stats()
3104 list_add_tail(&dst->list, &stats->peers); in ath10k_wmi_10x_op_pull_fw_stats()
3114 const struct wmi_10_2_stats_event *ev = (void *)skb->data; in ath10k_wmi_10_2_op_pull_fw_stats()
3121 return -EPROTO; in ath10k_wmi_10_2_op_pull_fw_stats()
3123 num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats); in ath10k_wmi_10_2_op_pull_fw_stats()
3124 num_pdev_ext_stats = __le32_to_cpu(ev->num_pdev_ext_stats); in ath10k_wmi_10_2_op_pull_fw_stats()
3125 num_peer_stats = __le32_to_cpu(ev->num_peer_stats); in ath10k_wmi_10_2_op_pull_fw_stats()
3131 src = (void *)skb->data; in ath10k_wmi_10_2_op_pull_fw_stats()
3133 return -EPROTO; in ath10k_wmi_10_2_op_pull_fw_stats()
3139 ath10k_wmi_pull_pdev_stats_base(&src->base, dst); in ath10k_wmi_10_2_op_pull_fw_stats()
3140 ath10k_wmi_pull_pdev_stats_tx(&src->tx, dst); in ath10k_wmi_10_2_op_pull_fw_stats()
3141 ath10k_wmi_pull_pdev_stats_rx(&src->rx, dst); in ath10k_wmi_10_2_op_pull_fw_stats()
3142 ath10k_wmi_pull_pdev_stats_extra(&src->extra, dst); in ath10k_wmi_10_2_op_pull_fw_stats()
3145 list_add_tail(&dst->list, &stats->pdevs); in ath10k_wmi_10_2_op_pull_fw_stats()
3151 src = (void *)skb->data; in ath10k_wmi_10_2_op_pull_fw_stats()
3153 return -EPROTO; in ath10k_wmi_10_2_op_pull_fw_stats()
3158 * required to parse following sub-structures properly. in ath10k_wmi_10_2_op_pull_fw_stats()
3168 src = (void *)skb->data; in ath10k_wmi_10_2_op_pull_fw_stats()
3170 return -EPROTO; in ath10k_wmi_10_2_op_pull_fw_stats()
3176 ath10k_wmi_pull_peer_stats(&src->old, dst); in ath10k_wmi_10_2_op_pull_fw_stats()
3178 dst->peer_rx_rate = __le32_to_cpu(src->peer_rx_rate); in ath10k_wmi_10_2_op_pull_fw_stats()
3181 list_add_tail(&dst->list, &stats->peers); in ath10k_wmi_10_2_op_pull_fw_stats()
3191 const struct wmi_10_2_stats_event *ev = (void *)skb->data; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3198 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3200 num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3201 num_pdev_ext_stats = __le32_to_cpu(ev->num_pdev_ext_stats); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3202 num_peer_stats = __le32_to_cpu(ev->num_peer_stats); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3208 src = (void *)skb->data; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3210 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3216 ath10k_wmi_pull_pdev_stats_base(&src->base, dst); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3217 ath10k_wmi_pull_pdev_stats_tx(&src->tx, dst); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3218 ath10k_wmi_pull_pdev_stats_rx(&src->rx, dst); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3219 ath10k_wmi_pull_pdev_stats_extra(&src->extra, dst); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3222 list_add_tail(&dst->list, &stats->pdevs); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3228 src = (void *)skb->data; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3230 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3235 * required to parse following sub-structures properly. in ath10k_wmi_10_2_4_op_pull_fw_stats()
3246 if (test_bit(WMI_SERVICE_PEER_STATS, ar->wmi.svc_map)) in ath10k_wmi_10_2_4_op_pull_fw_stats()
3251 src = (void *)skb->data; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3253 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3259 ath10k_wmi_pull_peer_stats(&src->common.old, dst); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3261 dst->peer_rx_rate = __le32_to_cpu(src->common.peer_rx_rate); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3264 dst->rx_duration = __le32_to_cpu(src->rx_duration); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3267 list_add_tail(&dst->list, &stats->peers); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3277 const struct wmi_10_2_stats_event *ev = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3287 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3289 num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats); in ath10k_wmi_10_4_op_pull_fw_stats()
3290 num_pdev_ext_stats = __le32_to_cpu(ev->num_pdev_ext_stats); in ath10k_wmi_10_4_op_pull_fw_stats()
3291 num_vdev_stats = __le32_to_cpu(ev->num_vdev_stats); in ath10k_wmi_10_4_op_pull_fw_stats()
3292 num_peer_stats = __le32_to_cpu(ev->num_peer_stats); in ath10k_wmi_10_4_op_pull_fw_stats()
3293 num_bcnflt_stats = __le32_to_cpu(ev->num_bcnflt_stats); in ath10k_wmi_10_4_op_pull_fw_stats()
3294 stats_id = __le32_to_cpu(ev->stats_id); in ath10k_wmi_10_4_op_pull_fw_stats()
3300 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3302 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3308 ath10k_wmi_pull_pdev_stats_base(&src->base, dst); in ath10k_wmi_10_4_op_pull_fw_stats()
3309 ath10k_wmi_10_4_pull_pdev_stats_tx(&src->tx, dst); in ath10k_wmi_10_4_op_pull_fw_stats()
3310 ath10k_wmi_pull_pdev_stats_rx(&src->rx, dst); in ath10k_wmi_10_4_op_pull_fw_stats()
3311 dst->rx_ovfl_errs = __le32_to_cpu(src->rx_ovfl_errs); in ath10k_wmi_10_4_op_pull_fw_stats()
3312 ath10k_wmi_pull_pdev_stats_extra(&src->extra, dst); in ath10k_wmi_10_4_op_pull_fw_stats()
3314 list_add_tail(&dst->list, &stats->pdevs); in ath10k_wmi_10_4_op_pull_fw_stats()
3320 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3322 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3327 * required to parse following sub-structures properly. in ath10k_wmi_10_4_op_pull_fw_stats()
3337 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3339 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3346 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3348 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3355 list_add_tail(&dst->list, &stats->peers); in ath10k_wmi_10_4_op_pull_fw_stats()
3361 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3363 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3368 * required to parse following sub-structures properly. in ath10k_wmi_10_4_op_pull_fw_stats()
3373 stats->extended = true; in ath10k_wmi_10_4_op_pull_fw_stats()
3379 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3381 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3387 ether_addr_copy(dst->peer_macaddr, in ath10k_wmi_10_4_op_pull_fw_stats()
3388 src->peer_macaddr.addr); in ath10k_wmi_10_4_op_pull_fw_stats()
3389 dst->rx_duration = __le32_to_cpu(src->rx_duration); in ath10k_wmi_10_4_op_pull_fw_stats()
3390 list_add_tail(&dst->list, &stats->peers_extd); in ath10k_wmi_10_4_op_pull_fw_stats()
3399 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3401 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3407 list_add_tail(&dst->list, &stats->vdevs); in ath10k_wmi_10_4_op_pull_fw_stats()
3424 struct wmi_vdev_start_response_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_vdev_start_ev()
3426 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_vdev_start_ev()
3427 return -EPROTO; in ath10k_wmi_op_pull_vdev_start_ev()
3430 arg->vdev_id = ev->vdev_id; in ath10k_wmi_op_pull_vdev_start_ev()
3431 arg->req_id = ev->req_id; in ath10k_wmi_op_pull_vdev_start_ev()
3432 arg->resp_type = ev->resp_type; in ath10k_wmi_op_pull_vdev_start_ev()
3433 arg->status = ev->status; in ath10k_wmi_op_pull_vdev_start_ev()
3446 ar->last_wmi_vdev_start_status = 0; in ath10k_wmi_event_vdev_start_resp()
3451 ar->last_wmi_vdev_start_status = ret; in ath10k_wmi_event_vdev_start_resp()
3457 ath10k_warn(ar, "vdev-start-response reports status error: %d (%s)\n", in ath10k_wmi_event_vdev_start_resp()
3459 "chan-invalid" : "unknown"); in ath10k_wmi_event_vdev_start_resp()
3463 ar->last_wmi_vdev_start_status = -EINVAL; in ath10k_wmi_event_vdev_start_resp()
3467 complete(&ar->vdev_setup_done); in ath10k_wmi_event_vdev_start_resp()
3473 complete(&ar->vdev_setup_done); in ath10k_wmi_event_vdev_stopped()
3480 struct wmi_peer_sta_kickout_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_peer_kick_ev()
3482 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_peer_kick_ev()
3483 return -EPROTO; in ath10k_wmi_op_pull_peer_kick_ev()
3486 arg->mac_addr = ev->peer_macaddr.addr; in ath10k_wmi_op_pull_peer_kick_ev()
3509 sta = ieee80211_find_sta_by_ifaddr(ar->hw, arg.mac_addr, NULL); in ath10k_wmi_event_peer_sta_kickout()
3530 * sleep transition from connected stations - these do not
3551 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)bcn->data; in ath10k_wmi_update_tim()
3561 tim_len = tim_info->tim_len ? __le32_to_cpu(tim_info->tim_len) : 1; in ath10k_wmi_update_tim()
3566 if (__le32_to_cpu(tim_info->tim_changed)) { in ath10k_wmi_update_tim()
3569 if (sizeof(arvif->u.ap.tim_bitmap) < tim_len) { in ath10k_wmi_update_tim()
3571 tim_len, sizeof(arvif->u.ap.tim_bitmap)); in ath10k_wmi_update_tim()
3572 tim_len = sizeof(arvif->u.ap.tim_bitmap); in ath10k_wmi_update_tim()
3576 t = tim_info->tim_bitmap[i / 4]; in ath10k_wmi_update_tim()
3578 arvif->u.ap.tim_bitmap[i] = (v >> ((i % 4) * 8)) & 0xFF; in ath10k_wmi_update_tim()
3584 arvif->u.ap.tim_len = 0; in ath10k_wmi_update_tim()
3586 if (arvif->u.ap.tim_bitmap[i]) in ath10k_wmi_update_tim()
3587 arvif->u.ap.tim_len = i; in ath10k_wmi_update_tim()
3589 arvif->u.ap.tim_len++; in ath10k_wmi_update_tim()
3592 ies = bcn->data; in ath10k_wmi_update_tim()
3593 ies += ieee80211_hdrlen(hdr->frame_control); in ath10k_wmi_update_tim()
3597 (u8 *)skb_tail_pointer(bcn) - ies); in ath10k_wmi_update_tim()
3599 if (arvif->vdev_type != WMI_VDEV_TYPE_IBSS) in ath10k_wmi_update_tim()
3606 pvm_len = ie_len - 3; /* exclude dtim count, dtim period, bmap ctl */ in ath10k_wmi_update_tim()
3608 if (pvm_len < arvif->u.ap.tim_len) { in ath10k_wmi_update_tim()
3609 int expand_size = tim_len - pvm_len; in ath10k_wmi_update_tim()
3610 int move_size = skb_tail_pointer(bcn) - (ie + 2 + ie_len); in ath10k_wmi_update_tim()
3629 tim->bitmap_ctrl = !!__le32_to_cpu(tim_info->tim_mcast); in ath10k_wmi_update_tim()
3630 memcpy(tim->virtual_map, arvif->u.ap.tim_bitmap, pvm_len); in ath10k_wmi_update_tim()
3632 if (tim->dtim_count == 0) { in ath10k_wmi_update_tim()
3633 ATH10K_SKB_CB(bcn)->flags |= ATH10K_SKB_F_DTIM_ZERO; in ath10k_wmi_update_tim()
3635 if (__le32_to_cpu(tim_info->tim_mcast) == 1) in ath10k_wmi_update_tim()
3636 ATH10K_SKB_CB(bcn)->flags |= ATH10K_SKB_F_DELIVER_CAB; in ath10k_wmi_update_tim()
3640 tim->dtim_count, tim->dtim_period, in ath10k_wmi_update_tim()
3641 tim->bitmap_ctrl, pvm_len); in ath10k_wmi_update_tim()
3648 if (!arvif->vif->p2p) in ath10k_wmi_update_noa()
3651 ath10k_dbg(ar, ATH10K_DBG_MGMT, "noa changed: %d\n", noa->changed); in ath10k_wmi_update_noa()
3653 if (noa->changed & WMI_P2P_NOA_CHANGED_BIT) in ath10k_wmi_update_noa()
3656 if (arvif->u.ap.noa_data) in ath10k_wmi_update_noa()
3657 if (!pskb_expand_head(bcn, 0, arvif->u.ap.noa_len, GFP_ATOMIC)) in ath10k_wmi_update_noa()
3658 skb_put_data(bcn, arvif->u.ap.noa_data, in ath10k_wmi_update_noa()
3659 arvif->u.ap.noa_len); in ath10k_wmi_update_noa()
3665 struct wmi_host_swba_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_swba_ev()
3669 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_swba_ev()
3670 return -EPROTO; in ath10k_wmi_op_pull_swba_ev()
3673 arg->vdev_map = ev->vdev_map; in ath10k_wmi_op_pull_swba_ev()
3675 for (i = 0, map = __le32_to_cpu(ev->vdev_map); map; map >>= 1) { in ath10k_wmi_op_pull_swba_ev()
3682 if (WARN_ON_ONCE(i == ARRAY_SIZE(arg->tim_info))) in ath10k_wmi_op_pull_swba_ev()
3685 if (__le32_to_cpu(ev->bcn_info[i].tim_info.tim_len) > in ath10k_wmi_op_pull_swba_ev()
3686 sizeof(ev->bcn_info[i].tim_info.tim_bitmap)) { in ath10k_wmi_op_pull_swba_ev()
3688 return -EPROTO; in ath10k_wmi_op_pull_swba_ev()
3691 arg->tim_info[i].tim_len = ev->bcn_info[i].tim_info.tim_len; in ath10k_wmi_op_pull_swba_ev()
3692 arg->tim_info[i].tim_mcast = ev->bcn_info[i].tim_info.tim_mcast; in ath10k_wmi_op_pull_swba_ev()
3693 arg->tim_info[i].tim_bitmap = in ath10k_wmi_op_pull_swba_ev()
3694 ev->bcn_info[i].tim_info.tim_bitmap; in ath10k_wmi_op_pull_swba_ev()
3695 arg->tim_info[i].tim_changed = in ath10k_wmi_op_pull_swba_ev()
3696 ev->bcn_info[i].tim_info.tim_changed; in ath10k_wmi_op_pull_swba_ev()
3697 arg->tim_info[i].tim_num_ps_pending = in ath10k_wmi_op_pull_swba_ev()
3698 ev->bcn_info[i].tim_info.tim_num_ps_pending; in ath10k_wmi_op_pull_swba_ev()
3700 arg->noa_info[i] = &ev->bcn_info[i].p2p_noa_info; in ath10k_wmi_op_pull_swba_ev()
3711 struct wmi_10_2_4_host_swba_event *ev = (void *)skb->data; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3715 if (skb->len < sizeof(*ev)) in ath10k_wmi_10_2_4_op_pull_swba_ev()
3716 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3719 arg->vdev_map = ev->vdev_map; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3721 for (i = 0, map = __le32_to_cpu(ev->vdev_map); map; map >>= 1) { in ath10k_wmi_10_2_4_op_pull_swba_ev()
3728 if (WARN_ON_ONCE(i == ARRAY_SIZE(arg->tim_info))) in ath10k_wmi_10_2_4_op_pull_swba_ev()
3731 if (__le32_to_cpu(ev->bcn_info[i].tim_info.tim_len) > in ath10k_wmi_10_2_4_op_pull_swba_ev()
3732 sizeof(ev->bcn_info[i].tim_info.tim_bitmap)) { in ath10k_wmi_10_2_4_op_pull_swba_ev()
3734 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3737 arg->tim_info[i].tim_len = ev->bcn_info[i].tim_info.tim_len; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3738 arg->tim_info[i].tim_mcast = ev->bcn_info[i].tim_info.tim_mcast; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3739 arg->tim_info[i].tim_bitmap = in ath10k_wmi_10_2_4_op_pull_swba_ev()
3740 ev->bcn_info[i].tim_info.tim_bitmap; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3741 arg->tim_info[i].tim_changed = in ath10k_wmi_10_2_4_op_pull_swba_ev()
3742 ev->bcn_info[i].tim_info.tim_changed; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3743 arg->tim_info[i].tim_num_ps_pending = in ath10k_wmi_10_2_4_op_pull_swba_ev()
3744 ev->bcn_info[i].tim_info.tim_num_ps_pending; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3755 struct wmi_10_4_host_swba_event *ev = (void *)skb->data; in ath10k_wmi_10_4_op_pull_swba_ev()
3759 if (skb->len < sizeof(*ev)) in ath10k_wmi_10_4_op_pull_swba_ev()
3760 return -EPROTO; in ath10k_wmi_10_4_op_pull_swba_ev()
3763 arg->vdev_map = ev->vdev_map; in ath10k_wmi_10_4_op_pull_swba_ev()
3765 for (i = 0, map = __le32_to_cpu(ev->vdev_map); map; map >>= 1) { in ath10k_wmi_10_4_op_pull_swba_ev()
3772 if (WARN_ON_ONCE(i == ARRAY_SIZE(arg->tim_info))) in ath10k_wmi_10_4_op_pull_swba_ev()
3775 if (__le32_to_cpu(ev->bcn_info[i].tim_info.tim_len) > in ath10k_wmi_10_4_op_pull_swba_ev()
3776 sizeof(ev->bcn_info[i].tim_info.tim_bitmap)) { in ath10k_wmi_10_4_op_pull_swba_ev()
3778 return -EPROTO; in ath10k_wmi_10_4_op_pull_swba_ev()
3781 tim_len = __le32_to_cpu(ev->bcn_info[i].tim_info.tim_len); in ath10k_wmi_10_4_op_pull_swba_ev()
3784 tim_len -= 4; in ath10k_wmi_10_4_op_pull_swba_ev()
3785 arg->tim_info[i].tim_len = __cpu_to_le32(tim_len); in ath10k_wmi_10_4_op_pull_swba_ev()
3787 arg->tim_info[i].tim_len = 0; in ath10k_wmi_10_4_op_pull_swba_ev()
3790 arg->tim_info[i].tim_mcast = ev->bcn_info[i].tim_info.tim_mcast; in ath10k_wmi_10_4_op_pull_swba_ev()
3791 arg->tim_info[i].tim_bitmap = in ath10k_wmi_10_4_op_pull_swba_ev()
3792 ev->bcn_info[i].tim_info.tim_bitmap; in ath10k_wmi_10_4_op_pull_swba_ev()
3793 arg->tim_info[i].tim_changed = in ath10k_wmi_10_4_op_pull_swba_ev()
3794 ev->bcn_info[i].tim_info.tim_changed; in ath10k_wmi_10_4_op_pull_swba_ev()
3795 arg->tim_info[i].tim_num_ps_pending = in ath10k_wmi_10_4_op_pull_swba_ev()
3796 ev->bcn_info[i].tim_info.tim_num_ps_pending; in ath10k_wmi_10_4_op_pull_swba_ev()
3817 int i = -1; in ath10k_wmi_event_host_swba()
3853 __le32_to_cpu(tim_info->tim_len), in ath10k_wmi_event_host_swba()
3854 __le32_to_cpu(tim_info->tim_mcast), in ath10k_wmi_event_host_swba()
3855 __le32_to_cpu(tim_info->tim_changed), in ath10k_wmi_event_host_swba()
3856 __le32_to_cpu(tim_info->tim_num_ps_pending), in ath10k_wmi_event_host_swba()
3857 __le32_to_cpu(tim_info->tim_bitmap[3]), in ath10k_wmi_event_host_swba()
3858 __le32_to_cpu(tim_info->tim_bitmap[2]), in ath10k_wmi_event_host_swba()
3859 __le32_to_cpu(tim_info->tim_bitmap[1]), in ath10k_wmi_event_host_swba()
3860 __le32_to_cpu(tim_info->tim_bitmap[0])); in ath10k_wmi_event_host_swba()
3876 if (!arvif->is_up) in ath10k_wmi_event_host_swba()
3885 if (arvif->vif->bss_conf.csa_active && in ath10k_wmi_event_host_swba()
3886 ieee80211_beacon_cntdwn_is_complete(arvif->vif)) { in ath10k_wmi_event_host_swba()
3887 ieee80211_csa_finish(arvif->vif); in ath10k_wmi_event_host_swba()
3891 bcn = ieee80211_beacon_get(ar->hw, arvif->vif, 0); in ath10k_wmi_event_host_swba()
3897 ath10k_tx_h_seq_no(arvif->vif, bcn); in ath10k_wmi_event_host_swba()
3901 spin_lock_bh(&ar->data_lock); in ath10k_wmi_event_host_swba()
3903 if (arvif->beacon) { in ath10k_wmi_event_host_swba()
3904 switch (arvif->beacon_state) { in ath10k_wmi_event_host_swba()
3909 arvif->vdev_id); in ath10k_wmi_event_host_swba()
3913 arvif->vdev_id); in ath10k_wmi_event_host_swba()
3921 if (!arvif->beacon_buf) { in ath10k_wmi_event_host_swba()
3922 paddr = dma_map_single(arvif->ar->dev, bcn->data, in ath10k_wmi_event_host_swba()
3923 bcn->len, DMA_TO_DEVICE); in ath10k_wmi_event_host_swba()
3924 ret = dma_mapping_error(arvif->ar->dev, paddr); in ath10k_wmi_event_host_swba()
3932 ATH10K_SKB_CB(bcn)->paddr = paddr; in ath10k_wmi_event_host_swba()
3934 if (bcn->len > IEEE80211_MAX_FRAME_LEN) { in ath10k_wmi_event_host_swba()
3935 ath10k_warn(ar, "trimming beacon %d -> %d bytes!\n", in ath10k_wmi_event_host_swba()
3936 bcn->len, IEEE80211_MAX_FRAME_LEN); in ath10k_wmi_event_host_swba()
3939 memcpy(arvif->beacon_buf, bcn->data, bcn->len); in ath10k_wmi_event_host_swba()
3940 ATH10K_SKB_CB(bcn)->paddr = arvif->beacon_paddr; in ath10k_wmi_event_host_swba()
3943 arvif->beacon = bcn; in ath10k_wmi_event_host_swba()
3944 arvif->beacon_state = ATH10K_BEACON_SCHEDULED; in ath10k_wmi_event_host_swba()
3946 trace_ath10k_tx_hdr(ar, bcn->data, bcn->len); in ath10k_wmi_event_host_swba()
3947 trace_ath10k_tx_payload(ar, bcn->data, bcn->len); in ath10k_wmi_event_host_swba()
3950 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_event_host_swba()
3969 if (ar->dfs_block_radar_events) in ath10k_radar_detected()
3972 ieee80211_radar_detected(ar->hw); in ath10k_radar_detected()
3982 reinit_completion(&ar->wmi.radar_confirm); in ath10k_radar_confirmation_work()
3984 spin_lock_bh(&ar->data_lock); in ath10k_radar_confirmation_work()
3985 memcpy(&radar_info, &ar->last_radar_info, sizeof(radar_info)); in ath10k_radar_confirmation_work()
3986 spin_unlock_bh(&ar->data_lock); in ath10k_radar_confirmation_work()
3994 time_left = wait_for_completion_timeout(&ar->wmi.radar_confirm, in ath10k_radar_confirmation_work()
4017 spin_lock_bh(&ar->data_lock); in ath10k_radar_confirmation_work()
4018 if (ar->radar_conf_state != ATH10K_RADAR_CONFIRMATION_STOPPED) in ath10k_radar_confirmation_work()
4019 ar->radar_conf_state = ATH10K_RADAR_CONFIRMATION_IDLE; in ath10k_radar_confirmation_work()
4020 spin_unlock_bh(&ar->data_lock); in ath10k_radar_confirmation_work()
4036 reg0 = __le32_to_cpu(rr->reg0); in ath10k_dfs_radar_report()
4037 reg1 = __le32_to_cpu(rr->reg1); in ath10k_dfs_radar_report()
4057 if (!ar->dfs_detector) in ath10k_dfs_radar_report()
4060 spin_lock_bh(&ar->data_lock); in ath10k_dfs_radar_report()
4061 ch = ar->rx_channel; in ath10k_dfs_radar_report()
4065 ch = ar->tgt_oper_chan; in ath10k_dfs_radar_report()
4067 spin_unlock_bh(&ar->data_lock); in ath10k_dfs_radar_report()
4075 tsf32l = phyerr->tsf_timestamp; in ath10k_dfs_radar_report()
4080 rssi = phyerr->rssi_combined; in ath10k_dfs_radar_report()
4089 pe.freq = ch->center_freq; in ath10k_dfs_radar_report()
4099 if (!ar->dfs_detector->add_pulse(ar->dfs_detector, &pe, &rs)) { in ath10k_dfs_radar_report()
4105 if ((test_bit(WMI_SERVICE_HOST_DFS_CHECK_SUPPORT, ar->wmi.svc_map)) && in ath10k_dfs_radar_report()
4106 ar->dfs_detector->region == NL80211_DFS_FCC) { in ath10k_dfs_radar_report()
4111 spin_lock_bh(&ar->data_lock); in ath10k_dfs_radar_report()
4112 if (ar->radar_conf_state != ATH10K_RADAR_CONFIRMATION_IDLE) { in ath10k_dfs_radar_report()
4113 spin_unlock_bh(&ar->data_lock); in ath10k_dfs_radar_report()
4116 ar->radar_conf_state = ATH10K_RADAR_CONFIRMATION_INPROGRESS; in ath10k_dfs_radar_report()
4117 radar_info = &ar->last_radar_info; in ath10k_dfs_radar_report()
4119 radar_info->pri_min = rs.pri_min; in ath10k_dfs_radar_report()
4120 radar_info->pri_max = rs.pri_max; in ath10k_dfs_radar_report()
4121 radar_info->width_min = rs.width_min; in ath10k_dfs_radar_report()
4122 radar_info->width_max = rs.width_max; in ath10k_dfs_radar_report()
4124 radar_info->sidx_min = MS(reg0, RADAR_REPORT_REG0_PULSE_SIDX); in ath10k_dfs_radar_report()
4125 radar_info->sidx_max = MS(reg0, RADAR_REPORT_REG0_PULSE_SIDX); in ath10k_dfs_radar_report()
4129 radar_info->pri_min, radar_info->pri_max, in ath10k_dfs_radar_report()
4130 radar_info->width_min, radar_info->width_max, in ath10k_dfs_radar_report()
4131 radar_info->sidx_min, radar_info->sidx_max); in ath10k_dfs_radar_report()
4132 ieee80211_queue_work(ar->hw, &ar->radar_confirmation_work); in ath10k_dfs_radar_report()
4133 spin_unlock_bh(&ar->data_lock); in ath10k_dfs_radar_report()
4149 reg0 = __le32_to_cpu(fftr->reg0); in ath10k_dfs_fft_report()
4150 reg1 = __le32_to_cpu(fftr->reg1); in ath10k_dfs_fft_report()
4151 rssi = phyerr->rssi_combined; in ath10k_dfs_fft_report()
4173 return -EINVAL; in ath10k_dfs_fft_report()
4189 buf_len = phyerr->buf_len; in ath10k_wmi_event_dfs()
4192 phyerr->phy_err_code, phyerr->rssi_combined, in ath10k_wmi_event_dfs()
4193 phyerr->tsf_timestamp, tsf, buf_len); in ath10k_wmi_event_dfs()
4208 tlv = (struct phyerr_tlv *)&phyerr->buf[i]; in ath10k_wmi_event_dfs()
4209 tlv_len = __le16_to_cpu(tlv->len); in ath10k_wmi_event_dfs()
4210 tlv_buf = &phyerr->buf[i + sizeof(*tlv)]; in ath10k_wmi_event_dfs()
4213 tlv_len, tlv->tag, tlv->sig); in ath10k_wmi_event_dfs()
4215 switch (tlv->tag) { in ath10k_wmi_event_dfs()
4254 buf_len = phyerr->buf_len; in ath10k_wmi_event_spectral_scan()
4263 tlv = (struct phyerr_tlv *)&phyerr->buf[i]; in ath10k_wmi_event_spectral_scan()
4264 tlv_len = __le16_to_cpu(tlv->len); in ath10k_wmi_event_spectral_scan()
4265 tlv_buf = &phyerr->buf[i + sizeof(*tlv)]; in ath10k_wmi_event_spectral_scan()
4273 switch (tlv->tag) { in ath10k_wmi_event_spectral_scan()
4281 fftr_len = tlv_len - sizeof(*fftr); in ath10k_wmi_event_spectral_scan()
4302 struct wmi_phyerr_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_phyerr_ev_hdr()
4304 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_phyerr_ev_hdr()
4305 return -EPROTO; in ath10k_wmi_op_pull_phyerr_ev_hdr()
4307 arg->num_phyerrs = __le32_to_cpu(ev->num_phyerrs); in ath10k_wmi_op_pull_phyerr_ev_hdr()
4308 arg->tsf_l32 = __le32_to_cpu(ev->tsf_l32); in ath10k_wmi_op_pull_phyerr_ev_hdr()
4309 arg->tsf_u32 = __le32_to_cpu(ev->tsf_u32); in ath10k_wmi_op_pull_phyerr_ev_hdr()
4310 arg->buf_len = skb->len - sizeof(*ev); in ath10k_wmi_op_pull_phyerr_ev_hdr()
4311 arg->phyerrs = ev->phyerrs; in ath10k_wmi_op_pull_phyerr_ev_hdr()
4320 struct wmi_10_4_phyerr_event *ev = (void *)skb->data; in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4322 if (skb->len < sizeof(*ev)) in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4323 return -EPROTO; in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4326 arg->num_phyerrs = 1; in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4328 arg->tsf_l32 = __le32_to_cpu(ev->tsf_l32); in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4329 arg->tsf_u32 = __le32_to_cpu(ev->tsf_u32); in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4330 arg->buf_len = skb->len; in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4331 arg->phyerrs = skb->data; in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4347 return -EINVAL; in ath10k_wmi_op_pull_phyerr_ev()
4350 arg->tsf_timestamp = __le32_to_cpu(phyerr->tsf_timestamp); in ath10k_wmi_op_pull_phyerr_ev()
4351 arg->freq1 = __le16_to_cpu(phyerr->freq1); in ath10k_wmi_op_pull_phyerr_ev()
4352 arg->freq2 = __le16_to_cpu(phyerr->freq2); in ath10k_wmi_op_pull_phyerr_ev()
4353 arg->rssi_combined = phyerr->rssi_combined; in ath10k_wmi_op_pull_phyerr_ev()
4354 arg->chan_width_mhz = phyerr->chan_width_mhz; in ath10k_wmi_op_pull_phyerr_ev()
4355 arg->buf_len = __le32_to_cpu(phyerr->buf_len); in ath10k_wmi_op_pull_phyerr_ev()
4356 arg->buf = phyerr->buf; in ath10k_wmi_op_pull_phyerr_ev()
4357 arg->hdr_len = sizeof(*phyerr); in ath10k_wmi_op_pull_phyerr_ev()
4360 arg->nf_chains[i] = __le16_to_cpu(phyerr->nf_chains[i]); in ath10k_wmi_op_pull_phyerr_ev()
4362 switch (phyerr->phy_err_code) { in ath10k_wmi_op_pull_phyerr_ev()
4364 arg->phy_err_code = PHY_ERROR_SPECTRAL_SCAN; in ath10k_wmi_op_pull_phyerr_ev()
4367 arg->phy_err_code = PHY_ERROR_FALSE_RADAR_EXT; in ath10k_wmi_op_pull_phyerr_ev()
4370 arg->phy_err_code = PHY_ERROR_RADAR; in ath10k_wmi_op_pull_phyerr_ev()
4373 arg->phy_err_code = PHY_ERROR_UNKNOWN; in ath10k_wmi_op_pull_phyerr_ev()
4392 return -EINVAL; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4395 arg->tsf_timestamp = __le32_to_cpu(phyerr->tsf_timestamp); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4396 arg->freq1 = __le16_to_cpu(phyerr->freq1); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4397 arg->freq2 = __le16_to_cpu(phyerr->freq2); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4398 arg->rssi_combined = phyerr->rssi_combined; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4399 arg->chan_width_mhz = phyerr->chan_width_mhz; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4400 arg->buf_len = __le32_to_cpu(phyerr->buf_len); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4401 arg->buf = phyerr->buf; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4402 arg->hdr_len = sizeof(*phyerr); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4405 arg->nf_chains[i] = __le16_to_cpu(phyerr->nf_chains[i]); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4407 phy_err_mask = __le32_to_cpu(phyerr->phy_err_mask[0]); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4410 arg->phy_err_code = PHY_ERROR_SPECTRAL_SCAN; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4412 arg->phy_err_code = PHY_ERROR_RADAR; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4414 arg->phy_err_code = PHY_ERROR_UNKNOWN; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4458 left_len -= phyerr_arg.hdr_len; in ath10k_wmi_event_phyerr()
4467 left_len -= buf_len; in ath10k_wmi_event_phyerr()
4492 struct wmi_dfs_status_ev_arg *ev = (void *)skb->data; in ath10k_wmi_10_4_op_pull_dfs_status_ev()
4494 if (skb->len < sizeof(*ev)) in ath10k_wmi_10_4_op_pull_dfs_status_ev()
4495 return -EPROTO; in ath10k_wmi_10_4_op_pull_dfs_status_ev()
4497 arg->status = ev->status; in ath10k_wmi_10_4_op_pull_dfs_status_ev()
4526 complete(&ar->wmi.radar_confirm); in ath10k_wmi_event_dfs_status_check()
4580 for (i = 0; i < sizeof(buf) - 1; i++) { in ath10k_wmi_event_debug_print()
4581 if (i >= skb->len) in ath10k_wmi_event_debug_print()
4584 c = skb->data[i]; in ath10k_wmi_event_debug_print()
4595 if (i == sizeof(buf) - 1) in ath10k_wmi_event_debug_print()
4596 ath10k_warn(ar, "wmi debug print truncated: %d\n", skb->len); in ath10k_wmi_event_debug_print()
4599 if (skb->data[i - 1] == '\n') in ath10k_wmi_event_debug_print()
4600 i--; in ath10k_wmi_event_debug_print()
4640 complete(&ar->wow.wakeup_completed); in ath10k_wmi_event_wow_wakeup_host()
4666 ch = num_chains - 1; in ath10k_tpc_config_get_rate()
4668 tpc = min_t(u8, ev->rates_array[rate_idx], ev->max_reg_allow_pow[ch]); in ath10k_tpc_config_get_rate()
4670 if (__le32_to_cpu(ev->num_tx_chain) <= 1) in ath10k_tpc_config_get_rate()
4676 stm_idx = num_streams - 1; in ath10k_tpc_config_get_rate()
4683 ev->max_reg_allow_pow_agstbc[ch - 1][stm_idx]); in ath10k_tpc_config_get_rate()
4687 ev->max_reg_allow_pow_agtxbf[ch - 1][stm_idx]); in ath10k_tpc_config_get_rate()
4691 ev->max_reg_allow_pow_agcdd[ch - 1][stm_idx]); in ath10k_tpc_config_get_rate()
4713 flags = __le32_to_cpu(ev->flags); in ath10k_tpc_config_disp_tables()
4719 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_tpc_config_disp_tables()
4726 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_tpc_config_disp_tables()
4733 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_tpc_config_disp_tables()
4744 for (i = 0; i < tpc_stats->rate_max; i++) { in ath10k_tpc_config_disp_tables()
4750 for (j = 0; j < tpc_stats->num_tx_chain; j++) { in ath10k_tpc_config_disp_tables()
4757 tpc_stats->tpc_table[type].pream_idx[i] = pream_idx; in ath10k_tpc_config_disp_tables()
4758 tpc_stats->tpc_table[type].rate_code[i] = rate_code[i]; in ath10k_tpc_config_disp_tables()
4759 memcpy(tpc_stats->tpc_table[type].tpc_value[i], in ath10k_tpc_config_disp_tables()
4869 ev = (struct wmi_pdev_tpc_config_event *)skb->data; in ath10k_wmi_event_pdev_tpc_config()
4871 num_tx_chain = __le32_to_cpu(ev->num_tx_chain); in ath10k_wmi_event_pdev_tpc_config()
4879 rate_max = __le32_to_cpu(ev->rate_max); in ath10k_wmi_event_pdev_tpc_config()
4893 tpc_stats->chan_freq = __le32_to_cpu(ev->chan_freq); in ath10k_wmi_event_pdev_tpc_config()
4894 tpc_stats->phy_mode = __le32_to_cpu(ev->phy_mode); in ath10k_wmi_event_pdev_tpc_config()
4895 tpc_stats->ctl = __le32_to_cpu(ev->ctl); in ath10k_wmi_event_pdev_tpc_config()
4896 tpc_stats->reg_domain = __le32_to_cpu(ev->reg_domain); in ath10k_wmi_event_pdev_tpc_config()
4897 tpc_stats->twice_antenna_gain = a_sle32_to_cpu(ev->twice_antenna_gain); in ath10k_wmi_event_pdev_tpc_config()
4898 tpc_stats->twice_antenna_reduction = in ath10k_wmi_event_pdev_tpc_config()
4899 __le32_to_cpu(ev->twice_antenna_reduction); in ath10k_wmi_event_pdev_tpc_config()
4900 tpc_stats->power_limit = __le32_to_cpu(ev->power_limit); in ath10k_wmi_event_pdev_tpc_config()
4901 tpc_stats->twice_max_rd_power = __le32_to_cpu(ev->twice_max_rd_power); in ath10k_wmi_event_pdev_tpc_config()
4902 tpc_stats->num_tx_chain = num_tx_chain; in ath10k_wmi_event_pdev_tpc_config()
4903 tpc_stats->rate_max = rate_max; in ath10k_wmi_event_pdev_tpc_config()
4919 __le32_to_cpu(ev->chan_freq), in ath10k_wmi_event_pdev_tpc_config()
4920 __le32_to_cpu(ev->phy_mode), in ath10k_wmi_event_pdev_tpc_config()
4921 __le32_to_cpu(ev->ctl), in ath10k_wmi_event_pdev_tpc_config()
4922 __le32_to_cpu(ev->reg_domain), in ath10k_wmi_event_pdev_tpc_config()
4923 a_sle32_to_cpu(ev->twice_antenna_gain), in ath10k_wmi_event_pdev_tpc_config()
4924 __le32_to_cpu(ev->twice_antenna_reduction), in ath10k_wmi_event_pdev_tpc_config()
4925 __le32_to_cpu(ev->power_limit), in ath10k_wmi_event_pdev_tpc_config()
4926 __le32_to_cpu(ev->twice_max_rd_power) / 2, in ath10k_wmi_event_pdev_tpc_config()
4927 __le32_to_cpu(ev->num_tx_chain), in ath10k_wmi_event_pdev_tpc_config()
4928 __le32_to_cpu(ev->rate_max)); in ath10k_wmi_event_pdev_tpc_config()
4943 ch = num_chains - 1; in ath10k_wmi_tpc_final_get_rate()
4944 stm_idx = num_streams - 1; in ath10k_wmi_tpc_final_get_rate()
4945 pream = -1; in ath10k_wmi_tpc_final_get_rate()
4947 if (__le32_to_cpu(ev->chan_freq) <= 2483) { in ath10k_wmi_tpc_final_get_rate()
4967 pream = -1; in ath10k_wmi_tpc_final_get_rate()
4972 if (__le32_to_cpu(ev->chan_freq) >= 5180) { in ath10k_wmi_tpc_final_get_rate()
4992 pream = -1; in ath10k_wmi_tpc_final_get_rate()
4997 if (pream == -1) { in ath10k_wmi_tpc_final_get_rate()
4999 pream_idx, __le32_to_cpu(ev->chan_freq)); in ath10k_wmi_tpc_final_get_rate()
5005 tpc = min_t(u8, ev->rates_array[rate_idx], in ath10k_wmi_tpc_final_get_rate()
5006 ev->max_reg_allow_pow[ch]); in ath10k_wmi_tpc_final_get_rate()
5008 tpc = min_t(u8, min_t(u8, ev->rates_array[rate_idx], in ath10k_wmi_tpc_final_get_rate()
5009 ev->max_reg_allow_pow[ch]), in ath10k_wmi_tpc_final_get_rate()
5010 ev->ctl_power_table[0][pream][stm_idx]); in ath10k_wmi_tpc_final_get_rate()
5012 if (__le32_to_cpu(ev->num_tx_chain) <= 1) in ath10k_wmi_tpc_final_get_rate()
5023 pow_agstbc = ev->max_reg_allow_pow_agstbc[ch - 1][stm_idx]; in ath10k_wmi_tpc_final_get_rate()
5028 ev->ctl_power_table[0][pream][stm_idx]); in ath10k_wmi_tpc_final_get_rate()
5031 pow_agtxbf = ev->max_reg_allow_pow_agtxbf[ch - 1][stm_idx]; in ath10k_wmi_tpc_final_get_rate()
5036 ev->ctl_power_table[1][pream][stm_idx]); in ath10k_wmi_tpc_final_get_rate()
5039 pow_agcdd = ev->max_reg_allow_pow_agcdd[ch - 1][stm_idx]; in ath10k_wmi_tpc_final_get_rate()
5044 ev->ctl_power_table[0][pream][stm_idx]); in ath10k_wmi_tpc_final_get_rate()
5067 flags = __le32_to_cpu(ev->flags); in ath10k_wmi_tpc_stats_final_disp_tables()
5073 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_wmi_tpc_stats_final_disp_tables()
5080 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_wmi_tpc_stats_final_disp_tables()
5087 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_wmi_tpc_stats_final_disp_tables()
5098 for (i = 0; i < tpc_stats->rate_max; i++) { in ath10k_wmi_tpc_stats_final_disp_tables()
5104 for (j = 0; j < tpc_stats->num_tx_chain; j++) { in ath10k_wmi_tpc_stats_final_disp_tables()
5111 tpc_stats->tpc_table_final[type].pream_idx[i] = pream_idx; in ath10k_wmi_tpc_stats_final_disp_tables()
5112 tpc_stats->tpc_table_final[type].rate_code[i] = rate_code[i]; in ath10k_wmi_tpc_stats_final_disp_tables()
5113 memcpy(tpc_stats->tpc_table_final[type].tpc_value[i], in ath10k_wmi_tpc_stats_final_disp_tables()
5126 ev = (struct wmi_pdev_tpc_final_table_event *)skb->data; in ath10k_wmi_event_tpc_final_table()
5128 num_tx_chain = __le32_to_cpu(ev->num_tx_chain); in ath10k_wmi_event_tpc_final_table()
5135 rate_max = __le32_to_cpu(ev->rate_max); in ath10k_wmi_event_tpc_final_table()
5149 tpc_stats->chan_freq = __le32_to_cpu(ev->chan_freq); in ath10k_wmi_event_tpc_final_table()
5150 tpc_stats->phy_mode = __le32_to_cpu(ev->phy_mode); in ath10k_wmi_event_tpc_final_table()
5151 tpc_stats->ctl = __le32_to_cpu(ev->ctl); in ath10k_wmi_event_tpc_final_table()
5152 tpc_stats->reg_domain = __le32_to_cpu(ev->reg_domain); in ath10k_wmi_event_tpc_final_table()
5153 tpc_stats->twice_antenna_gain = a_sle32_to_cpu(ev->twice_antenna_gain); in ath10k_wmi_event_tpc_final_table()
5154 tpc_stats->twice_antenna_reduction = in ath10k_wmi_event_tpc_final_table()
5155 __le32_to_cpu(ev->twice_antenna_reduction); in ath10k_wmi_event_tpc_final_table()
5156 tpc_stats->power_limit = __le32_to_cpu(ev->power_limit); in ath10k_wmi_event_tpc_final_table()
5157 tpc_stats->twice_max_rd_power = __le32_to_cpu(ev->twice_max_rd_power); in ath10k_wmi_event_tpc_final_table()
5158 tpc_stats->num_tx_chain = num_tx_chain; in ath10k_wmi_event_tpc_final_table()
5159 tpc_stats->rate_max = rate_max; in ath10k_wmi_event_tpc_final_table()
5175 __le32_to_cpu(ev->chan_freq), in ath10k_wmi_event_tpc_final_table()
5176 __le32_to_cpu(ev->phy_mode), in ath10k_wmi_event_tpc_final_table()
5177 __le32_to_cpu(ev->ctl), in ath10k_wmi_event_tpc_final_table()
5178 __le32_to_cpu(ev->reg_domain), in ath10k_wmi_event_tpc_final_table()
5179 a_sle32_to_cpu(ev->twice_antenna_gain), in ath10k_wmi_event_tpc_final_table()
5180 __le32_to_cpu(ev->twice_antenna_reduction), in ath10k_wmi_event_tpc_final_table()
5181 __le32_to_cpu(ev->power_limit), in ath10k_wmi_event_tpc_final_table()
5182 __le32_to_cpu(ev->twice_max_rd_power) / 2, in ath10k_wmi_event_tpc_final_table()
5183 __le32_to_cpu(ev->num_tx_chain), in ath10k_wmi_event_tpc_final_table()
5184 __le32_to_cpu(ev->rate_max)); in ath10k_wmi_event_tpc_final_table()
5198 if (skb->len < sizeof(*ev)) { in ath10k_wmi_handle_tdls_peer_event()
5200 skb->len); in ath10k_wmi_handle_tdls_peer_event()
5204 ev = (struct wmi_tdls_peer_event *)skb->data; in ath10k_wmi_handle_tdls_peer_event()
5205 vdev_id = __le32_to_cpu(ev->vdev_id); in ath10k_wmi_handle_tdls_peer_event()
5206 peer_status = __le32_to_cpu(ev->peer_status); in ath10k_wmi_handle_tdls_peer_event()
5207 peer_reason = __le32_to_cpu(ev->peer_reason); in ath10k_wmi_handle_tdls_peer_event()
5209 spin_lock_bh(&ar->data_lock); in ath10k_wmi_handle_tdls_peer_event()
5210 peer = ath10k_peer_find(ar, vdev_id, ev->peer_macaddr.addr); in ath10k_wmi_handle_tdls_peer_event()
5211 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_handle_tdls_peer_event()
5215 ev->peer_macaddr.addr); in ath10k_wmi_handle_tdls_peer_event()
5239 ieee80211_tdls_oper_request(arvif->vif, ev->peer_macaddr.addr, in ath10k_wmi_handle_tdls_peer_event()
5245 ev->peer_macaddr.addr, peer_reason); in ath10k_wmi_handle_tdls_peer_event()
5263 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_peer_sta_ps_state_chg()
5265 ev = (struct wmi_peer_sta_ps_state_chg_event *)skb->data; in ath10k_wmi_event_peer_sta_ps_state_chg()
5266 ether_addr_copy(peer_addr, ev->peer_macaddr.addr); in ath10k_wmi_event_peer_sta_ps_state_chg()
5270 sta = ieee80211_find_sta_by_ifaddr(ar->hw, peer_addr, NULL); in ath10k_wmi_event_peer_sta_ps_state_chg()
5278 arsta = (struct ath10k_sta *)sta->drv_priv; in ath10k_wmi_event_peer_sta_ps_state_chg()
5279 arsta->peer_ps_state = __le32_to_cpu(ev->peer_ps_state); in ath10k_wmi_event_peer_sta_ps_state_chg()
5336 int idx = ar->wmi.num_mem_chunks; in ath10k_wmi_alloc_chunk()
5340 vaddr = dma_alloc_coherent(ar->dev, pool_size, &paddr, GFP_KERNEL); in ath10k_wmi_alloc_chunk()
5343 return -ENOMEM; in ath10k_wmi_alloc_chunk()
5345 ar->wmi.mem_chunks[idx].vaddr = vaddr; in ath10k_wmi_alloc_chunk()
5346 ar->wmi.mem_chunks[idx].paddr = paddr; in ath10k_wmi_alloc_chunk()
5347 ar->wmi.mem_chunks[idx].len = pool_size; in ath10k_wmi_alloc_chunk()
5348 ar->wmi.mem_chunks[idx].req_id = req_id; in ath10k_wmi_alloc_chunk()
5349 ar->wmi.num_mem_chunks++; in ath10k_wmi_alloc_chunk()
5364 num_units -= ret; in ath10k_wmi_alloc_host_mem()
5380 if (ar->wmi.num_mem_chunks != num_mem_reqs) in ath10k_wmi_is_host_mem_allocated()
5384 req_id = __le32_to_cpu(mem_reqs[i]->req_id); in ath10k_wmi_is_host_mem_allocated()
5385 num_units = __le32_to_cpu(mem_reqs[i]->num_units); in ath10k_wmi_is_host_mem_allocated()
5386 unit_size = __le32_to_cpu(mem_reqs[i]->unit_size); in ath10k_wmi_is_host_mem_allocated()
5387 num_unit_info = __le32_to_cpu(mem_reqs[i]->num_unit_info); in ath10k_wmi_is_host_mem_allocated()
5390 if (ar->num_active_peers) in ath10k_wmi_is_host_mem_allocated()
5391 num_units = ar->num_active_peers + 1; in ath10k_wmi_is_host_mem_allocated()
5393 num_units = ar->max_num_peers + 1; in ath10k_wmi_is_host_mem_allocated()
5395 num_units = ar->max_num_peers + 1; in ath10k_wmi_is_host_mem_allocated()
5397 num_units = ar->max_num_vdevs + 1; in ath10k_wmi_is_host_mem_allocated()
5401 for (j = 0; j < ar->wmi.num_mem_chunks; j++) { in ath10k_wmi_is_host_mem_allocated()
5402 if (ar->wmi.mem_chunks[j].req_id == req_id) { in ath10k_wmi_is_host_mem_allocated()
5404 if (ar->wmi.mem_chunks[j].len == pool_size) { in ath10k_wmi_is_host_mem_allocated()
5424 if (skb->len < sizeof(*ev)) in ath10k_wmi_main_op_pull_svc_rdy_ev()
5425 return -EPROTO; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5427 ev = (void *)skb->data; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5429 arg->min_tx_power = ev->hw_min_tx_power; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5430 arg->max_tx_power = ev->hw_max_tx_power; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5431 arg->ht_cap = ev->ht_cap_info; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5432 arg->vht_cap = ev->vht_cap_info; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5433 arg->vht_supp_mcs = ev->vht_supp_mcs; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5434 arg->sw_ver0 = ev->sw_version; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5435 arg->sw_ver1 = ev->sw_version_1; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5436 arg->phy_capab = ev->phy_capability; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5437 arg->num_rf_chains = ev->num_rf_chains; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5438 arg->eeprom_rd = ev->hal_reg_capabilities.eeprom_rd; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5439 arg->low_2ghz_chan = ev->hal_reg_capabilities.low_2ghz_chan; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5440 arg->high_2ghz_chan = ev->hal_reg_capabilities.high_2ghz_chan; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5441 arg->low_5ghz_chan = ev->hal_reg_capabilities.low_5ghz_chan; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5442 arg->high_5ghz_chan = ev->hal_reg_capabilities.high_5ghz_chan; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5443 arg->num_mem_reqs = ev->num_mem_reqs; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5444 arg->service_map = ev->wmi_service_bitmap; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5445 arg->service_map_len = sizeof(ev->wmi_service_bitmap); in ath10k_wmi_main_op_pull_svc_rdy_ev()
5447 n = min_t(size_t, __le32_to_cpu(arg->num_mem_reqs), in ath10k_wmi_main_op_pull_svc_rdy_ev()
5448 ARRAY_SIZE(arg->mem_reqs)); in ath10k_wmi_main_op_pull_svc_rdy_ev()
5450 arg->mem_reqs[i] = &ev->mem_reqs[i]; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5452 if (skb->len < in ath10k_wmi_main_op_pull_svc_rdy_ev()
5453 __le32_to_cpu(arg->num_mem_reqs) * sizeof(arg->mem_reqs[0])) in ath10k_wmi_main_op_pull_svc_rdy_ev()
5454 return -EPROTO; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5466 if (skb->len < sizeof(*ev)) in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5467 return -EPROTO; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5469 ev = (void *)skb->data; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5471 arg->min_tx_power = ev->hw_min_tx_power; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5472 arg->max_tx_power = ev->hw_max_tx_power; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5473 arg->ht_cap = ev->ht_cap_info; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5474 arg->vht_cap = ev->vht_cap_info; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5475 arg->vht_supp_mcs = ev->vht_supp_mcs; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5476 arg->sw_ver0 = ev->sw_version; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5477 arg->phy_capab = ev->phy_capability; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5478 arg->num_rf_chains = ev->num_rf_chains; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5479 arg->eeprom_rd = ev->hal_reg_capabilities.eeprom_rd; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5480 arg->low_2ghz_chan = ev->hal_reg_capabilities.low_2ghz_chan; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5481 arg->high_2ghz_chan = ev->hal_reg_capabilities.high_2ghz_chan; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5482 arg->low_5ghz_chan = ev->hal_reg_capabilities.low_5ghz_chan; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5483 arg->high_5ghz_chan = ev->hal_reg_capabilities.high_5ghz_chan; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5484 arg->num_mem_reqs = ev->num_mem_reqs; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5485 arg->service_map = ev->wmi_service_bitmap; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5486 arg->service_map_len = sizeof(ev->wmi_service_bitmap); in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5488 /* Deliberately skipping ev->sys_cap_info as WMI and WMI-TLV have in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5491 * WMI interface (only from WMI-TLV) safest it to skip it. in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5494 n = min_t(size_t, __le32_to_cpu(arg->num_mem_reqs), in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5495 ARRAY_SIZE(arg->mem_reqs)); in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5497 arg->mem_reqs[i] = &ev->mem_reqs[i]; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5499 if (skb->len < in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5500 __le32_to_cpu(arg->num_mem_reqs) * sizeof(arg->mem_reqs[0])) in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5501 return -EPROTO; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5509 struct sk_buff *skb = ar->svc_rdy_skb; in ath10k_wmi_event_service_ready_work()
5526 ath10k_wmi_map_svc(ar, arg.service_map, ar->wmi.svc_map, in ath10k_wmi_event_service_ready_work()
5529 ar->hw_min_tx_power = __le32_to_cpu(arg.min_tx_power); in ath10k_wmi_event_service_ready_work()
5530 ar->hw_max_tx_power = __le32_to_cpu(arg.max_tx_power); in ath10k_wmi_event_service_ready_work()
5531 ar->ht_cap_info = __le32_to_cpu(arg.ht_cap); in ath10k_wmi_event_service_ready_work()
5532 ar->vht_cap_info = __le32_to_cpu(arg.vht_cap); in ath10k_wmi_event_service_ready_work()
5533 ar->vht_supp_mcs = __le32_to_cpu(arg.vht_supp_mcs); in ath10k_wmi_event_service_ready_work()
5534 ar->fw_version_major = in ath10k_wmi_event_service_ready_work()
5536 ar->fw_version_minor = (__le32_to_cpu(arg.sw_ver0) & 0x00ffffff); in ath10k_wmi_event_service_ready_work()
5537 ar->fw_version_release = in ath10k_wmi_event_service_ready_work()
5539 ar->fw_version_build = (__le32_to_cpu(arg.sw_ver1) & 0x0000ffff); in ath10k_wmi_event_service_ready_work()
5540 ar->phy_capability = __le32_to_cpu(arg.phy_capab); in ath10k_wmi_event_service_ready_work()
5541 ar->num_rf_chains = __le32_to_cpu(arg.num_rf_chains); in ath10k_wmi_event_service_ready_work()
5542 ar->hw_eeprom_rd = __le32_to_cpu(arg.eeprom_rd); in ath10k_wmi_event_service_ready_work()
5543 ar->low_2ghz_chan = __le32_to_cpu(arg.low_2ghz_chan); in ath10k_wmi_event_service_ready_work()
5544 ar->high_2ghz_chan = __le32_to_cpu(arg.high_2ghz_chan); in ath10k_wmi_event_service_ready_work()
5545 ar->low_5ghz_chan = __le32_to_cpu(arg.low_5ghz_chan); in ath10k_wmi_event_service_ready_work()
5546 ar->high_5ghz_chan = __le32_to_cpu(arg.high_5ghz_chan); in ath10k_wmi_event_service_ready_work()
5547 ar->sys_cap_info = __le32_to_cpu(arg.sys_cap_info); in ath10k_wmi_event_service_ready_work()
5552 ar->sys_cap_info); in ath10k_wmi_event_service_ready_work()
5554 if (ar->num_rf_chains > ar->max_spatial_stream) { in ath10k_wmi_event_service_ready_work()
5556 ar->num_rf_chains, ar->max_spatial_stream); in ath10k_wmi_event_service_ready_work()
5557 ar->num_rf_chains = ar->max_spatial_stream; in ath10k_wmi_event_service_ready_work()
5560 if (!ar->cfg_tx_chainmask) { in ath10k_wmi_event_service_ready_work()
5561 ar->cfg_tx_chainmask = (1 << ar->num_rf_chains) - 1; in ath10k_wmi_event_service_ready_work()
5562 ar->cfg_rx_chainmask = (1 << ar->num_rf_chains) - 1; in ath10k_wmi_event_service_ready_work()
5565 if (strlen(ar->hw->wiphy->fw_version) == 0) { in ath10k_wmi_event_service_ready_work()
5566 snprintf(ar->hw->wiphy->fw_version, in ath10k_wmi_event_service_ready_work()
5567 sizeof(ar->hw->wiphy->fw_version), in ath10k_wmi_event_service_ready_work()
5569 ar->fw_version_major, in ath10k_wmi_event_service_ready_work()
5570 ar->fw_version_minor, in ath10k_wmi_event_service_ready_work()
5571 ar->fw_version_release, in ath10k_wmi_event_service_ready_work()
5572 ar->fw_version_build); in ath10k_wmi_event_service_ready_work()
5582 if (test_bit(WMI_SERVICE_PEER_CACHING, ar->wmi.svc_map)) { in ath10k_wmi_event_service_ready_work()
5584 ar->running_fw->fw_file.fw_features)) in ath10k_wmi_event_service_ready_work()
5585 ar->num_active_peers = TARGET_10_4_QCACHE_ACTIVE_PEERS_PFC + in ath10k_wmi_event_service_ready_work()
5586 ar->max_num_vdevs; in ath10k_wmi_event_service_ready_work()
5588 ar->num_active_peers = TARGET_10_4_QCACHE_ACTIVE_PEERS + in ath10k_wmi_event_service_ready_work()
5589 ar->max_num_vdevs; in ath10k_wmi_event_service_ready_work()
5591 ar->max_num_peers = TARGET_10_4_NUM_QCACHE_PEERS_MAX + in ath10k_wmi_event_service_ready_work()
5592 ar->max_num_vdevs; in ath10k_wmi_event_service_ready_work()
5593 ar->num_tids = ar->num_active_peers * 2; in ath10k_wmi_event_service_ready_work()
5594 ar->max_num_stations = TARGET_10_4_NUM_QCACHE_PEERS_MAX; in ath10k_wmi_event_service_ready_work()
5614 req_id = __le32_to_cpu(arg.mem_reqs[i]->req_id); in ath10k_wmi_event_service_ready_work()
5615 num_units = __le32_to_cpu(arg.mem_reqs[i]->num_units); in ath10k_wmi_event_service_ready_work()
5616 unit_size = __le32_to_cpu(arg.mem_reqs[i]->unit_size); in ath10k_wmi_event_service_ready_work()
5617 num_unit_info = __le32_to_cpu(arg.mem_reqs[i]->num_unit_info); in ath10k_wmi_event_service_ready_work()
5620 if (ar->num_active_peers) in ath10k_wmi_event_service_ready_work()
5621 num_units = ar->num_active_peers + 1; in ath10k_wmi_event_service_ready_work()
5623 num_units = ar->max_num_peers + 1; in ath10k_wmi_event_service_ready_work()
5630 num_units = ar->max_num_peers + 1; in ath10k_wmi_event_service_ready_work()
5632 num_units = ar->max_num_vdevs + 1; in ath10k_wmi_event_service_ready_work()
5638 __le32_to_cpu(arg.mem_reqs[i]->num_units), in ath10k_wmi_event_service_ready_work()
5670 ar->svc_rdy_skb = NULL; in ath10k_wmi_event_service_ready_work()
5671 complete(&ar->wmi.service_ready); in ath10k_wmi_event_service_ready_work()
5676 ar->svc_rdy_skb = skb; in ath10k_wmi_event_service_ready()
5677 queue_work(ar->workqueue_aux, &ar->svc_rdy_work); in ath10k_wmi_event_service_ready()
5683 struct wmi_ready_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_rdy_ev()
5685 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_rdy_ev()
5686 return -EPROTO; in ath10k_wmi_op_pull_rdy_ev()
5689 arg->sw_version = ev->sw_version; in ath10k_wmi_op_pull_rdy_ev()
5690 arg->abi_version = ev->abi_version; in ath10k_wmi_op_pull_rdy_ev()
5691 arg->status = ev->status; in ath10k_wmi_op_pull_rdy_ev()
5692 arg->mac_addr = ev->mac_addr.addr; in ath10k_wmi_op_pull_rdy_ev()
5700 struct wmi_roam_ev *ev = (void *)skb->data; in ath10k_wmi_op_pull_roam_ev()
5702 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_roam_ev()
5703 return -EPROTO; in ath10k_wmi_op_pull_roam_ev()
5706 arg->vdev_id = ev->vdev_id; in ath10k_wmi_op_pull_roam_ev()
5707 arg->reason = ev->reason; in ath10k_wmi_op_pull_roam_ev()
5716 struct wmi_echo_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_echo_ev()
5718 arg->value = ev->value; in ath10k_wmi_op_pull_echo_ev()
5741 if (is_zero_ether_addr(ar->mac_addr)) in ath10k_wmi_event_ready()
5742 ether_addr_copy(ar->mac_addr, arg.mac_addr); in ath10k_wmi_event_ready()
5743 complete(&ar->wmi.unified_ready); in ath10k_wmi_event_ready()
5763 ath10k_wmi_map_svc_ext(ar, arg.service_map_ext, ar->wmi.svc_map, in ath10k_wmi_event_service_available()
5771 ev = (struct wmi_pdev_temperature_event *)skb->data; in ath10k_wmi_event_temperature()
5772 if (WARN_ON(skb->len < sizeof(*ev))) in ath10k_wmi_event_temperature()
5773 return -EPROTO; in ath10k_wmi_event_temperature()
5775 ath10k_thermal_event_temperature(ar, __le32_to_cpu(ev->temperature)); in ath10k_wmi_event_temperature()
5784 u64 busy, total, tx, rx, rx_bss; in ath10k_wmi_event_pdev_bss_chan_info() local
5786 u32 cc_freq_hz = ar->hw_params.channel_counters_freq_hz; in ath10k_wmi_event_pdev_bss_chan_info()
5789 ev = (struct wmi_pdev_bss_chan_info_event *)skb->data; in ath10k_wmi_event_pdev_bss_chan_info()
5790 if (WARN_ON(skb->len < sizeof(*ev))) in ath10k_wmi_event_pdev_bss_chan_info()
5791 return -EPROTO; in ath10k_wmi_event_pdev_bss_chan_info()
5793 freq = __le32_to_cpu(ev->freq); in ath10k_wmi_event_pdev_bss_chan_info()
5794 noise_floor = __le32_to_cpu(ev->noise_floor); in ath10k_wmi_event_pdev_bss_chan_info()
5795 busy = __le64_to_cpu(ev->cycle_busy); in ath10k_wmi_event_pdev_bss_chan_info()
5796 total = __le64_to_cpu(ev->cycle_total); in ath10k_wmi_event_pdev_bss_chan_info()
5797 tx = __le64_to_cpu(ev->cycle_tx); in ath10k_wmi_event_pdev_bss_chan_info()
5798 rx = __le64_to_cpu(ev->cycle_rx); in ath10k_wmi_event_pdev_bss_chan_info()
5799 rx_bss = __le64_to_cpu(ev->cycle_rx_bss); in ath10k_wmi_event_pdev_bss_chan_info()
5802 …"wmi event pdev bss chan info:\n freq: %d noise: %d cycle: busy %llu total %llu tx %llu rx %llu rx… in ath10k_wmi_event_pdev_bss_chan_info()
5803 freq, noise_floor, busy, total, tx, rx, rx_bss); in ath10k_wmi_event_pdev_bss_chan_info()
5805 spin_lock_bh(&ar->data_lock); in ath10k_wmi_event_pdev_bss_chan_info()
5807 if (idx >= ARRAY_SIZE(ar->survey)) { in ath10k_wmi_event_pdev_bss_chan_info()
5813 survey = &ar->survey[idx]; in ath10k_wmi_event_pdev_bss_chan_info()
5815 survey->noise = noise_floor; in ath10k_wmi_event_pdev_bss_chan_info()
5816 survey->time = div_u64(total, cc_freq_hz); in ath10k_wmi_event_pdev_bss_chan_info()
5817 survey->time_busy = div_u64(busy, cc_freq_hz); in ath10k_wmi_event_pdev_bss_chan_info()
5818 survey->time_rx = div_u64(rx_bss, cc_freq_hz); in ath10k_wmi_event_pdev_bss_chan_info()
5819 survey->time_tx = div_u64(tx, cc_freq_hz); in ath10k_wmi_event_pdev_bss_chan_info()
5820 survey->filled |= (SURVEY_INFO_NOISE_DBM | in ath10k_wmi_event_pdev_bss_chan_info()
5826 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_event_pdev_bss_chan_info()
5827 complete(&ar->bss_survey_done); in ath10k_wmi_event_pdev_bss_chan_info()
5833 if (ar->hw_params.hw_ops->set_coverage_class) { in ath10k_wmi_queue_set_coverage_class_work()
5834 spin_lock_bh(&ar->data_lock); in ath10k_wmi_queue_set_coverage_class_work()
5839 * coverage class has a non-zero value. in ath10k_wmi_queue_set_coverage_class_work()
5841 if (ar->fw_coverage.coverage_class) in ath10k_wmi_queue_set_coverage_class_work()
5842 queue_work(ar->workqueue, &ar->set_coverage_class_work); in ath10k_wmi_queue_set_coverage_class_work()
5844 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_queue_set_coverage_class_work()
5853 cmd_hdr = (struct wmi_cmd_hdr *)skb->data; in ath10k_wmi_op_rx()
5854 id = MS(__le32_to_cpu(cmd_hdr->cmd_id), WMI_CMD_HDR_CMD_ID); in ath10k_wmi_op_rx()
5859 trace_ath10k_wmi_event(ar, id, skb->data, skb->len); in ath10k_wmi_op_rx()
5981 cmd_hdr = (struct wmi_cmd_hdr *)skb->data; in ath10k_wmi_10_1_op_rx()
5982 id = MS(__le32_to_cpu(cmd_hdr->cmd_id), WMI_CMD_HDR_CMD_ID); in ath10k_wmi_10_1_op_rx()
5987 trace_ath10k_wmi_event(ar, id, skb->data, skb->len); in ath10k_wmi_10_1_op_rx()
6112 cmd_hdr = (struct wmi_cmd_hdr *)skb->data; in ath10k_wmi_10_2_op_rx()
6113 id = MS(__le32_to_cpu(cmd_hdr->cmd_id), WMI_CMD_HDR_CMD_ID); in ath10k_wmi_10_2_op_rx()
6118 trace_ath10k_wmi_event(ar, id, skb->data, skb->len); in ath10k_wmi_10_2_op_rx()
6261 cmd_hdr = (struct wmi_cmd_hdr *)skb->data; in ath10k_wmi_10_4_op_rx()
6262 id = MS(__le32_to_cpu(cmd_hdr->cmd_id), WMI_CMD_HDR_CMD_ID); in ath10k_wmi_10_4_op_rx()
6267 trace_ath10k_wmi_event(ar, id, skb->data, skb->len); in ath10k_wmi_10_4_op_rx()
6381 ath10k_warn(ar, "failed to process wmi rx: %d\n", ret); in ath10k_wmi_process_rx()
6390 memset(&ar->wmi.svc_map, 0, sizeof(ar->wmi.svc_map)); in ath10k_wmi_connect()
6403 status = ath10k_htc_connect_service(&ar->htc, &conn_req, &conn_resp); in ath10k_wmi_connect()
6410 ar->wmi.eid = conn_resp.eid; in ath10k_wmi_connect()
6423 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_set_base_macaddr()
6425 cmd = (struct wmi_pdev_set_base_macaddr_cmd *)skb->data; in ath10k_wmi_op_gen_pdev_set_base_macaddr()
6426 ether_addr_copy(cmd->mac_addr.addr, macaddr); in ath10k_wmi_op_gen_pdev_set_base_macaddr()
6443 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_set_rd()
6445 cmd = (struct wmi_pdev_set_regdomain_cmd *)skb->data; in ath10k_wmi_op_gen_pdev_set_rd()
6446 cmd->reg_domain = __cpu_to_le32(rd); in ath10k_wmi_op_gen_pdev_set_rd()
6447 cmd->reg_domain_2G = __cpu_to_le32(rd2g); in ath10k_wmi_op_gen_pdev_set_rd()
6448 cmd->reg_domain_5G = __cpu_to_le32(rd5g); in ath10k_wmi_op_gen_pdev_set_rd()
6449 cmd->conformance_test_limit_2G = __cpu_to_le32(ctl2g); in ath10k_wmi_op_gen_pdev_set_rd()
6450 cmd->conformance_test_limit_5G = __cpu_to_le32(ctl5g); in ath10k_wmi_op_gen_pdev_set_rd()
6468 return ERR_PTR(-ENOMEM); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6470 cmd = (struct wmi_pdev_set_regdomain_cmd_10x *)skb->data; in ath10k_wmi_10x_op_gen_pdev_set_rd()
6471 cmd->reg_domain = __cpu_to_le32(rd); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6472 cmd->reg_domain_2G = __cpu_to_le32(rd2g); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6473 cmd->reg_domain_5G = __cpu_to_le32(rd5g); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6474 cmd->conformance_test_limit_2G = __cpu_to_le32(ctl2g); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6475 cmd->conformance_test_limit_5G = __cpu_to_le32(ctl5g); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6476 cmd->dfs_domain = __cpu_to_le32(dfs_reg); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6492 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_suspend()
6494 cmd = (struct wmi_pdev_suspend_cmd *)skb->data; in ath10k_wmi_op_gen_pdev_suspend()
6495 cmd->suspend_opt = __cpu_to_le32(suspend_opt); in ath10k_wmi_op_gen_pdev_suspend()
6507 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_resume()
6521 return ERR_PTR(-EOPNOTSUPP); in ath10k_wmi_op_gen_pdev_set_param()
6526 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_set_param()
6528 cmd = (struct wmi_pdev_set_param_cmd *)skb->data; in ath10k_wmi_op_gen_pdev_set_param()
6529 cmd->param_id = __cpu_to_le32(id); in ath10k_wmi_op_gen_pdev_set_param()
6530 cmd->param_value = __cpu_to_le32(value); in ath10k_wmi_op_gen_pdev_set_param()
6543 chunks->count = __cpu_to_le32(ar->wmi.num_mem_chunks); in ath10k_wmi_put_host_mem_chunks()
6545 for (i = 0; i < ar->wmi.num_mem_chunks; i++) { in ath10k_wmi_put_host_mem_chunks()
6546 chunk = &chunks->items[i]; in ath10k_wmi_put_host_mem_chunks()
6547 chunk->ptr = __cpu_to_le32(ar->wmi.mem_chunks[i].paddr); in ath10k_wmi_put_host_mem_chunks()
6548 chunk->size = __cpu_to_le32(ar->wmi.mem_chunks[i].len); in ath10k_wmi_put_host_mem_chunks()
6549 chunk->req_id = __cpu_to_le32(ar->wmi.mem_chunks[i].req_id); in ath10k_wmi_put_host_mem_chunks()
6554 ar->wmi.mem_chunks[i].len, in ath10k_wmi_put_host_mem_chunks()
6555 (unsigned long long)ar->wmi.mem_chunks[i].paddr); in ath10k_wmi_put_host_mem_chunks()
6582 config.rx_decap_mode = __cpu_to_le32(ar->wmi.rx_decap_mode); in ath10k_wmi_op_gen_init()
6617 ar->wmi.num_mem_chunks)); in ath10k_wmi_op_gen_init()
6619 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_init()
6621 cmd = (struct wmi_init_cmd *)buf->data; in ath10k_wmi_op_gen_init()
6623 memcpy(&cmd->resource_config, &config, sizeof(config)); in ath10k_wmi_op_gen_init()
6624 ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks); in ath10k_wmi_op_gen_init()
6648 config.rx_decap_mode = __cpu_to_le32(ar->wmi.rx_decap_mode); in ath10k_wmi_10_1_op_gen_init()
6680 ar->wmi.num_mem_chunks)); in ath10k_wmi_10_1_op_gen_init()
6682 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_1_op_gen_init()
6684 cmd = (struct wmi_init_cmd_10x *)buf->data; in ath10k_wmi_10_1_op_gen_init()
6686 memcpy(&cmd->resource_config, &config, sizeof(config)); in ath10k_wmi_10_1_op_gen_init()
6687 ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks); in ath10k_wmi_10_1_op_gen_init()
6718 config.rx_decap_mode = __cpu_to_le32(ar->wmi.rx_decap_mode); in ath10k_wmi_10_2_op_gen_init()
6751 ar->wmi.num_mem_chunks)); in ath10k_wmi_10_2_op_gen_init()
6753 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_op_gen_init()
6755 cmd = (struct wmi_init_cmd_10_2 *)buf->data; in ath10k_wmi_10_2_op_gen_init()
6759 if (test_bit(ATH10K_FLAG_BTCOEX, &ar->dev_flags) && in ath10k_wmi_10_2_op_gen_init()
6760 test_bit(WMI_SERVICE_COEX_GPIO, ar->wmi.svc_map)) in ath10k_wmi_10_2_op_gen_init()
6766 if (test_bit(WMI_SERVICE_BSS_CHANNEL_INFO_64, ar->wmi.svc_map)) in ath10k_wmi_10_2_op_gen_init()
6769 cmd->resource_config.feature_mask = __cpu_to_le32(features); in ath10k_wmi_10_2_op_gen_init()
6771 memcpy(&cmd->resource_config.common, &config, sizeof(config)); in ath10k_wmi_10_2_op_gen_init()
6772 ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks); in ath10k_wmi_10_2_op_gen_init()
6784 config.num_vdevs = __cpu_to_le32(ar->max_num_vdevs); in ath10k_wmi_10_4_op_gen_init()
6785 config.num_peers = __cpu_to_le32(ar->max_num_peers); in ath10k_wmi_10_4_op_gen_init()
6786 config.num_active_peers = __cpu_to_le32(ar->num_active_peers); in ath10k_wmi_10_4_op_gen_init()
6787 config.num_tids = __cpu_to_le32(ar->num_tids); in ath10k_wmi_10_4_op_gen_init()
6794 config.tx_chain_mask = __cpu_to_le32(ar->hw_params.tx_chain_mask); in ath10k_wmi_10_4_op_gen_init()
6795 config.rx_chain_mask = __cpu_to_le32(ar->hw_params.rx_chain_mask); in ath10k_wmi_10_4_op_gen_init()
6802 config.rx_decap_mode = __cpu_to_le32(ar->wmi.rx_decap_mode); in ath10k_wmi_10_4_op_gen_init()
6826 config.num_msdu_desc = __cpu_to_le32(ar->htt.max_num_pending_tx); in ath10k_wmi_10_4_op_gen_init()
6845 ar->wmi.num_mem_chunks)); in ath10k_wmi_10_4_op_gen_init()
6847 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_op_gen_init()
6849 cmd = (struct wmi_init_cmd_10_4 *)buf->data; in ath10k_wmi_10_4_op_gen_init()
6850 memcpy(&cmd->resource_config, &config, sizeof(config)); in ath10k_wmi_10_4_op_gen_init()
6851 ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks); in ath10k_wmi_10_4_op_gen_init()
6859 if (arg->ie_len > WLAN_SCAN_PARAMS_MAX_IE_LEN) in ath10k_wmi_start_scan_verify()
6860 return -EINVAL; in ath10k_wmi_start_scan_verify()
6861 if (arg->n_channels > ARRAY_SIZE(arg->channels)) in ath10k_wmi_start_scan_verify()
6862 return -EINVAL; in ath10k_wmi_start_scan_verify()
6863 if (arg->n_ssids > WLAN_SCAN_PARAMS_MAX_SSID) in ath10k_wmi_start_scan_verify()
6864 return -EINVAL; in ath10k_wmi_start_scan_verify()
6865 if (arg->n_bssids > WLAN_SCAN_PARAMS_MAX_BSSID) in ath10k_wmi_start_scan_verify()
6866 return -EINVAL; in ath10k_wmi_start_scan_verify()
6876 if (arg->ie_len) { in ath10k_wmi_start_scan_tlvs_len()
6878 len += roundup(arg->ie_len, 4); in ath10k_wmi_start_scan_tlvs_len()
6881 if (arg->n_channels) { in ath10k_wmi_start_scan_tlvs_len()
6883 len += sizeof(__le32) * arg->n_channels; in ath10k_wmi_start_scan_tlvs_len()
6886 if (arg->n_ssids) { in ath10k_wmi_start_scan_tlvs_len()
6888 len += sizeof(struct wmi_ssid) * arg->n_ssids; in ath10k_wmi_start_scan_tlvs_len()
6891 if (arg->n_bssids) { in ath10k_wmi_start_scan_tlvs_len()
6893 len += sizeof(struct wmi_mac_addr) * arg->n_bssids; in ath10k_wmi_start_scan_tlvs_len()
6906 scan_id |= arg->scan_id; in ath10k_wmi_put_start_scan_common()
6909 scan_req_id |= arg->scan_req_id; in ath10k_wmi_put_start_scan_common()
6911 cmn->scan_id = __cpu_to_le32(scan_id); in ath10k_wmi_put_start_scan_common()
6912 cmn->scan_req_id = __cpu_to_le32(scan_req_id); in ath10k_wmi_put_start_scan_common()
6913 cmn->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_put_start_scan_common()
6914 cmn->scan_priority = __cpu_to_le32(arg->scan_priority); in ath10k_wmi_put_start_scan_common()
6915 cmn->notify_scan_events = __cpu_to_le32(arg->notify_scan_events); in ath10k_wmi_put_start_scan_common()
6916 cmn->dwell_time_active = __cpu_to_le32(arg->dwell_time_active); in ath10k_wmi_put_start_scan_common()
6917 cmn->dwell_time_passive = __cpu_to_le32(arg->dwell_time_passive); in ath10k_wmi_put_start_scan_common()
6918 cmn->min_rest_time = __cpu_to_le32(arg->min_rest_time); in ath10k_wmi_put_start_scan_common()
6919 cmn->max_rest_time = __cpu_to_le32(arg->max_rest_time); in ath10k_wmi_put_start_scan_common()
6920 cmn->repeat_probe_time = __cpu_to_le32(arg->repeat_probe_time); in ath10k_wmi_put_start_scan_common()
6921 cmn->probe_spacing_time = __cpu_to_le32(arg->probe_spacing_time); in ath10k_wmi_put_start_scan_common()
6922 cmn->idle_time = __cpu_to_le32(arg->idle_time); in ath10k_wmi_put_start_scan_common()
6923 cmn->max_scan_time = __cpu_to_le32(arg->max_scan_time); in ath10k_wmi_put_start_scan_common()
6924 cmn->probe_delay = __cpu_to_le32(arg->probe_delay); in ath10k_wmi_put_start_scan_common()
6925 cmn->scan_ctrl_flags = __cpu_to_le32(arg->scan_ctrl_flags); in ath10k_wmi_put_start_scan_common()
6936 void *ptr = tlvs->tlvs; in ath10k_wmi_put_start_scan_tlvs()
6939 if (arg->n_channels) { in ath10k_wmi_put_start_scan_tlvs()
6941 channels->tag = __cpu_to_le32(WMI_CHAN_LIST_TAG); in ath10k_wmi_put_start_scan_tlvs()
6942 channels->num_chan = __cpu_to_le32(arg->n_channels); in ath10k_wmi_put_start_scan_tlvs()
6944 for (i = 0; i < arg->n_channels; i++) in ath10k_wmi_put_start_scan_tlvs()
6945 channels->channel_list[i].freq = in ath10k_wmi_put_start_scan_tlvs()
6946 __cpu_to_le16(arg->channels[i]); in ath10k_wmi_put_start_scan_tlvs()
6949 ptr += sizeof(__le32) * arg->n_channels; in ath10k_wmi_put_start_scan_tlvs()
6952 if (arg->n_ssids) { in ath10k_wmi_put_start_scan_tlvs()
6954 ssids->tag = __cpu_to_le32(WMI_SSID_LIST_TAG); in ath10k_wmi_put_start_scan_tlvs()
6955 ssids->num_ssids = __cpu_to_le32(arg->n_ssids); in ath10k_wmi_put_start_scan_tlvs()
6957 for (i = 0; i < arg->n_ssids; i++) { in ath10k_wmi_put_start_scan_tlvs()
6958 ssids->ssids[i].ssid_len = in ath10k_wmi_put_start_scan_tlvs()
6959 __cpu_to_le32(arg->ssids[i].len); in ath10k_wmi_put_start_scan_tlvs()
6960 memcpy(&ssids->ssids[i].ssid, in ath10k_wmi_put_start_scan_tlvs()
6961 arg->ssids[i].ssid, in ath10k_wmi_put_start_scan_tlvs()
6962 arg->ssids[i].len); in ath10k_wmi_put_start_scan_tlvs()
6966 ptr += sizeof(struct wmi_ssid) * arg->n_ssids; in ath10k_wmi_put_start_scan_tlvs()
6969 if (arg->n_bssids) { in ath10k_wmi_put_start_scan_tlvs()
6971 bssids->tag = __cpu_to_le32(WMI_BSSID_LIST_TAG); in ath10k_wmi_put_start_scan_tlvs()
6972 bssids->num_bssid = __cpu_to_le32(arg->n_bssids); in ath10k_wmi_put_start_scan_tlvs()
6974 for (i = 0; i < arg->n_bssids; i++) in ath10k_wmi_put_start_scan_tlvs()
6975 ether_addr_copy(bssids->bssid_list[i].addr, in ath10k_wmi_put_start_scan_tlvs()
6976 arg->bssids[i].bssid); in ath10k_wmi_put_start_scan_tlvs()
6979 ptr += sizeof(struct wmi_mac_addr) * arg->n_bssids; in ath10k_wmi_put_start_scan_tlvs()
6982 if (arg->ie_len) { in ath10k_wmi_put_start_scan_tlvs()
6984 ie->tag = __cpu_to_le32(WMI_IE_TAG); in ath10k_wmi_put_start_scan_tlvs()
6985 ie->ie_len = __cpu_to_le32(arg->ie_len); in ath10k_wmi_put_start_scan_tlvs()
6986 memcpy(ie->ie_data, arg->ie, arg->ie_len); in ath10k_wmi_put_start_scan_tlvs()
6989 ptr += roundup(arg->ie_len, 4); in ath10k_wmi_put_start_scan_tlvs()
7009 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_start_scan()
7011 cmd = (struct wmi_start_scan_cmd *)skb->data; in ath10k_wmi_op_gen_start_scan()
7013 ath10k_wmi_put_start_scan_common(&cmd->common, arg); in ath10k_wmi_op_gen_start_scan()
7014 ath10k_wmi_put_start_scan_tlvs(&cmd->tlvs, arg); in ath10k_wmi_op_gen_start_scan()
7016 cmd->burst_duration_ms = __cpu_to_le32(0); in ath10k_wmi_op_gen_start_scan()
7038 return ERR_PTR(-ENOMEM); in ath10k_wmi_10x_op_gen_start_scan()
7040 cmd = (struct wmi_10x_start_scan_cmd *)skb->data; in ath10k_wmi_10x_op_gen_start_scan()
7042 ath10k_wmi_put_start_scan_common(&cmd->common, arg); in ath10k_wmi_10x_op_gen_start_scan()
7043 ath10k_wmi_put_start_scan_tlvs(&cmd->tlvs, arg); in ath10k_wmi_10x_op_gen_start_scan()
7053 arg->scan_req_id = 1; in ath10k_wmi_start_scan_init()
7054 arg->scan_priority = WMI_SCAN_PRIORITY_LOW; in ath10k_wmi_start_scan_init()
7055 arg->dwell_time_active = 50; in ath10k_wmi_start_scan_init()
7056 arg->dwell_time_passive = 150; in ath10k_wmi_start_scan_init()
7057 arg->min_rest_time = 50; in ath10k_wmi_start_scan_init()
7058 arg->max_rest_time = 500; in ath10k_wmi_start_scan_init()
7059 arg->repeat_probe_time = 0; in ath10k_wmi_start_scan_init()
7060 arg->probe_spacing_time = 0; in ath10k_wmi_start_scan_init()
7061 arg->idle_time = 0; in ath10k_wmi_start_scan_init()
7062 arg->max_scan_time = 20000; in ath10k_wmi_start_scan_init()
7063 arg->probe_delay = 5; in ath10k_wmi_start_scan_init()
7064 arg->notify_scan_events = WMI_SCAN_EVENT_STARTED in ath10k_wmi_start_scan_init()
7070 arg->scan_ctrl_flags |= WMI_SCAN_CHAN_STAT_EVENT; in ath10k_wmi_start_scan_init()
7071 arg->n_bssids = 1; in ath10k_wmi_start_scan_init()
7072 arg->bssids[0].bssid = "\xFF\xFF\xFF\xFF\xFF\xFF"; in ath10k_wmi_start_scan_init()
7084 if (arg->req_id > 0xFFF) in ath10k_wmi_op_gen_stop_scan()
7085 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_stop_scan()
7086 if (arg->req_type == WMI_SCAN_STOP_ONE && arg->u.scan_id > 0xFFF) in ath10k_wmi_op_gen_stop_scan()
7087 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_stop_scan()
7091 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_stop_scan()
7093 scan_id = arg->u.scan_id; in ath10k_wmi_op_gen_stop_scan()
7096 req_id = arg->req_id; in ath10k_wmi_op_gen_stop_scan()
7099 cmd = (struct wmi_stop_scan_cmd *)skb->data; in ath10k_wmi_op_gen_stop_scan()
7100 cmd->req_type = __cpu_to_le32(arg->req_type); in ath10k_wmi_op_gen_stop_scan()
7101 cmd->vdev_id = __cpu_to_le32(arg->u.vdev_id); in ath10k_wmi_op_gen_stop_scan()
7102 cmd->scan_id = __cpu_to_le32(scan_id); in ath10k_wmi_op_gen_stop_scan()
7103 cmd->scan_req_id = __cpu_to_le32(req_id); in ath10k_wmi_op_gen_stop_scan()
7107 arg->req_id, arg->req_type, arg->u.scan_id); in ath10k_wmi_op_gen_stop_scan()
7122 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_create()
7124 cmd = (struct wmi_vdev_create_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_create()
7125 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_create()
7126 cmd->vdev_type = __cpu_to_le32(type); in ath10k_wmi_op_gen_vdev_create()
7127 cmd->vdev_subtype = __cpu_to_le32(subtype); in ath10k_wmi_op_gen_vdev_create()
7128 ether_addr_copy(cmd->vdev_macaddr.addr, macaddr); in ath10k_wmi_op_gen_vdev_create()
7144 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_delete()
7146 cmd = (struct wmi_vdev_delete_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_delete()
7147 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_delete()
7164 if (WARN_ON(arg->hidden_ssid && !arg->ssid)) in ath10k_wmi_op_gen_vdev_start()
7165 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_vdev_start()
7166 if (WARN_ON(arg->ssid_len > sizeof(cmd->ssid.ssid))) in ath10k_wmi_op_gen_vdev_start()
7167 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_vdev_start()
7176 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_start()
7178 if (arg->hidden_ssid) in ath10k_wmi_op_gen_vdev_start()
7180 if (arg->pmf_enabled) in ath10k_wmi_op_gen_vdev_start()
7183 cmd = (struct wmi_vdev_start_request_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_start()
7184 cmd->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_op_gen_vdev_start()
7185 cmd->disable_hw_ack = __cpu_to_le32(arg->disable_hw_ack); in ath10k_wmi_op_gen_vdev_start()
7186 cmd->beacon_interval = __cpu_to_le32(arg->bcn_intval); in ath10k_wmi_op_gen_vdev_start()
7187 cmd->dtim_period = __cpu_to_le32(arg->dtim_period); in ath10k_wmi_op_gen_vdev_start()
7188 cmd->flags = __cpu_to_le32(flags); in ath10k_wmi_op_gen_vdev_start()
7189 cmd->bcn_tx_rate = __cpu_to_le32(arg->bcn_tx_rate); in ath10k_wmi_op_gen_vdev_start()
7190 cmd->bcn_tx_power = __cpu_to_le32(arg->bcn_tx_power); in ath10k_wmi_op_gen_vdev_start()
7192 if (arg->ssid) { in ath10k_wmi_op_gen_vdev_start()
7193 cmd->ssid.ssid_len = __cpu_to_le32(arg->ssid_len); in ath10k_wmi_op_gen_vdev_start()
7194 memcpy(cmd->ssid.ssid, arg->ssid, arg->ssid_len); in ath10k_wmi_op_gen_vdev_start()
7197 ath10k_wmi_put_wmi_channel(ar, &cmd->chan, &arg->channel); in ath10k_wmi_op_gen_vdev_start()
7201 cmdname, arg->vdev_id, in ath10k_wmi_op_gen_vdev_start()
7202 flags, arg->channel.freq, arg->channel.mode, in ath10k_wmi_op_gen_vdev_start()
7203 cmd->chan.flags, arg->channel.max_power); in ath10k_wmi_op_gen_vdev_start()
7216 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_stop()
7218 cmd = (struct wmi_vdev_stop_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_stop()
7219 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_stop()
7234 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_up()
7236 cmd = (struct wmi_vdev_up_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_up()
7237 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_up()
7238 cmd->vdev_assoc_id = __cpu_to_le32(aid); in ath10k_wmi_op_gen_vdev_up()
7239 ether_addr_copy(cmd->vdev_bssid.addr, bssid); in ath10k_wmi_op_gen_vdev_up()
7255 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_down()
7257 cmd = (struct wmi_vdev_down_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_down()
7258 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_down()
7276 return ERR_PTR(-EOPNOTSUPP); in ath10k_wmi_op_gen_vdev_set_param()
7281 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_set_param()
7283 cmd = (struct wmi_vdev_set_param_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_set_param()
7284 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_set_param()
7285 cmd->param_id = __cpu_to_le32(param_id); in ath10k_wmi_op_gen_vdev_set_param()
7286 cmd->param_value = __cpu_to_le32(param_value); in ath10k_wmi_op_gen_vdev_set_param()
7301 if (arg->key_cipher == WMI_CIPHER_NONE && arg->key_data != NULL) in ath10k_wmi_op_gen_vdev_install_key()
7302 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_vdev_install_key()
7303 if (arg->key_cipher != WMI_CIPHER_NONE && arg->key_data == NULL) in ath10k_wmi_op_gen_vdev_install_key()
7304 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_vdev_install_key()
7306 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd) + arg->key_len); in ath10k_wmi_op_gen_vdev_install_key()
7308 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_install_key()
7310 cmd = (struct wmi_vdev_install_key_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_install_key()
7311 cmd->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_op_gen_vdev_install_key()
7312 cmd->key_idx = __cpu_to_le32(arg->key_idx); in ath10k_wmi_op_gen_vdev_install_key()
7313 cmd->key_flags = __cpu_to_le32(arg->key_flags); in ath10k_wmi_op_gen_vdev_install_key()
7314 cmd->key_cipher = __cpu_to_le32(arg->key_cipher); in ath10k_wmi_op_gen_vdev_install_key()
7315 cmd->key_len = __cpu_to_le32(arg->key_len); in ath10k_wmi_op_gen_vdev_install_key()
7316 cmd->key_txmic_len = __cpu_to_le32(arg->key_txmic_len); in ath10k_wmi_op_gen_vdev_install_key()
7317 cmd->key_rxmic_len = __cpu_to_le32(arg->key_rxmic_len); in ath10k_wmi_op_gen_vdev_install_key()
7319 if (arg->macaddr) in ath10k_wmi_op_gen_vdev_install_key()
7320 ether_addr_copy(cmd->peer_macaddr.addr, arg->macaddr); in ath10k_wmi_op_gen_vdev_install_key()
7321 if (arg->key_data) in ath10k_wmi_op_gen_vdev_install_key()
7322 memcpy(cmd->key_data, arg->key_data, arg->key_len); in ath10k_wmi_op_gen_vdev_install_key()
7326 arg->key_idx, arg->key_cipher, arg->key_len); in ath10k_wmi_op_gen_vdev_install_key()
7339 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_spectral_conf()
7341 cmd = (struct wmi_vdev_spectral_conf_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_spectral_conf()
7342 cmd->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_op_gen_vdev_spectral_conf()
7343 cmd->scan_count = __cpu_to_le32(arg->scan_count); in ath10k_wmi_op_gen_vdev_spectral_conf()
7344 cmd->scan_period = __cpu_to_le32(arg->scan_period); in ath10k_wmi_op_gen_vdev_spectral_conf()
7345 cmd->scan_priority = __cpu_to_le32(arg->scan_priority); in ath10k_wmi_op_gen_vdev_spectral_conf()
7346 cmd->scan_fft_size = __cpu_to_le32(arg->scan_fft_size); in ath10k_wmi_op_gen_vdev_spectral_conf()
7347 cmd->scan_gc_ena = __cpu_to_le32(arg->scan_gc_ena); in ath10k_wmi_op_gen_vdev_spectral_conf()
7348 cmd->scan_restart_ena = __cpu_to_le32(arg->scan_restart_ena); in ath10k_wmi_op_gen_vdev_spectral_conf()
7349 cmd->scan_noise_floor_ref = __cpu_to_le32(arg->scan_noise_floor_ref); in ath10k_wmi_op_gen_vdev_spectral_conf()
7350 cmd->scan_init_delay = __cpu_to_le32(arg->scan_init_delay); in ath10k_wmi_op_gen_vdev_spectral_conf()
7351 cmd->scan_nb_tone_thr = __cpu_to_le32(arg->scan_nb_tone_thr); in ath10k_wmi_op_gen_vdev_spectral_conf()
7352 cmd->scan_str_bin_thr = __cpu_to_le32(arg->scan_str_bin_thr); in ath10k_wmi_op_gen_vdev_spectral_conf()
7353 cmd->scan_wb_rpt_mode = __cpu_to_le32(arg->scan_wb_rpt_mode); in ath10k_wmi_op_gen_vdev_spectral_conf()
7354 cmd->scan_rssi_rpt_mode = __cpu_to_le32(arg->scan_rssi_rpt_mode); in ath10k_wmi_op_gen_vdev_spectral_conf()
7355 cmd->scan_rssi_thr = __cpu_to_le32(arg->scan_rssi_thr); in ath10k_wmi_op_gen_vdev_spectral_conf()
7356 cmd->scan_pwr_format = __cpu_to_le32(arg->scan_pwr_format); in ath10k_wmi_op_gen_vdev_spectral_conf()
7357 cmd->scan_rpt_mode = __cpu_to_le32(arg->scan_rpt_mode); in ath10k_wmi_op_gen_vdev_spectral_conf()
7358 cmd->scan_bin_scale = __cpu_to_le32(arg->scan_bin_scale); in ath10k_wmi_op_gen_vdev_spectral_conf()
7359 cmd->scan_dbm_adj = __cpu_to_le32(arg->scan_dbm_adj); in ath10k_wmi_op_gen_vdev_spectral_conf()
7360 cmd->scan_chn_mask = __cpu_to_le32(arg->scan_chn_mask); in ath10k_wmi_op_gen_vdev_spectral_conf()
7374 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_spectral_enable()
7376 cmd = (struct wmi_vdev_spectral_enable_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_spectral_enable()
7377 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_spectral_enable()
7378 cmd->trigger_cmd = __cpu_to_le32(trigger); in ath10k_wmi_op_gen_vdev_spectral_enable()
7379 cmd->enable_cmd = __cpu_to_le32(enable); in ath10k_wmi_op_gen_vdev_spectral_enable()
7394 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_peer_create()
7396 cmd = (struct wmi_peer_create_cmd *)skb->data; in ath10k_wmi_op_gen_peer_create()
7397 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_peer_create()
7398 ether_addr_copy(cmd->peer_macaddr.addr, peer_addr); in ath10k_wmi_op_gen_peer_create()
7399 cmd->peer_type = __cpu_to_le32(peer_type); in ath10k_wmi_op_gen_peer_create()
7416 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_peer_delete()
7418 cmd = (struct wmi_peer_delete_cmd *)skb->data; in ath10k_wmi_op_gen_peer_delete()
7419 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_peer_delete()
7420 ether_addr_copy(cmd->peer_macaddr.addr, peer_addr); in ath10k_wmi_op_gen_peer_delete()
7437 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_peer_flush()
7439 cmd = (struct wmi_peer_flush_tids_cmd *)skb->data; in ath10k_wmi_op_gen_peer_flush()
7440 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_peer_flush()
7441 cmd->peer_tid_bitmap = __cpu_to_le32(tid_bitmap); in ath10k_wmi_op_gen_peer_flush()
7442 ether_addr_copy(cmd->peer_macaddr.addr, peer_addr); in ath10k_wmi_op_gen_peer_flush()
7461 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_peer_set_param()
7463 cmd = (struct wmi_peer_set_param_cmd *)skb->data; in ath10k_wmi_op_gen_peer_set_param()
7464 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_peer_set_param()
7465 cmd->param_id = __cpu_to_le32(param_id); in ath10k_wmi_op_gen_peer_set_param()
7466 cmd->param_value = __cpu_to_le32(param_value); in ath10k_wmi_op_gen_peer_set_param()
7467 ether_addr_copy(cmd->peer_macaddr.addr, peer_addr); in ath10k_wmi_op_gen_peer_set_param()
7484 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_set_psmode()
7486 cmd = (struct wmi_sta_powersave_mode_cmd *)skb->data; in ath10k_wmi_op_gen_set_psmode()
7487 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_set_psmode()
7488 cmd->sta_ps_mode = __cpu_to_le32(psmode); in ath10k_wmi_op_gen_set_psmode()
7506 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_set_sta_ps()
7508 cmd = (struct wmi_sta_powersave_param_cmd *)skb->data; in ath10k_wmi_op_gen_set_sta_ps()
7509 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_set_sta_ps()
7510 cmd->param_id = __cpu_to_le32(param_id); in ath10k_wmi_op_gen_set_sta_ps()
7511 cmd->param_value = __cpu_to_le32(value); in ath10k_wmi_op_gen_set_sta_ps()
7527 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_set_ap_ps()
7531 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_set_ap_ps()
7533 cmd = (struct wmi_ap_ps_peer_cmd *)skb->data; in ath10k_wmi_op_gen_set_ap_ps()
7534 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_set_ap_ps()
7535 cmd->param_id = __cpu_to_le32(param_id); in ath10k_wmi_op_gen_set_ap_ps()
7536 cmd->param_value = __cpu_to_le32(value); in ath10k_wmi_op_gen_set_ap_ps()
7537 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath10k_wmi_op_gen_set_ap_ps()
7555 skb = ath10k_wmi_alloc_skb(ar, struct_size(cmd, chan_info, arg->n_channels)); in ath10k_wmi_op_gen_scan_chan_list()
7557 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_scan_chan_list()
7559 cmd = (struct wmi_scan_chan_list_cmd *)skb->data; in ath10k_wmi_op_gen_scan_chan_list()
7560 cmd->num_scan_chans = __cpu_to_le32(arg->n_channels); in ath10k_wmi_op_gen_scan_chan_list()
7562 for (i = 0; i < arg->n_channels; i++) { in ath10k_wmi_op_gen_scan_chan_list()
7563 ch = &arg->channels[i]; in ath10k_wmi_op_gen_scan_chan_list()
7564 ci = &cmd->chan_info[i]; in ath10k_wmi_op_gen_scan_chan_list()
7578 cmd->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_peer_assoc_fill()
7579 cmd->peer_new_assoc = __cpu_to_le32(arg->peer_reassoc ? 0 : 1); in ath10k_wmi_peer_assoc_fill()
7580 cmd->peer_associd = __cpu_to_le32(arg->peer_aid); in ath10k_wmi_peer_assoc_fill()
7581 cmd->peer_flags = __cpu_to_le32(arg->peer_flags); in ath10k_wmi_peer_assoc_fill()
7582 cmd->peer_caps = __cpu_to_le32(arg->peer_caps); in ath10k_wmi_peer_assoc_fill()
7583 cmd->peer_listen_intval = __cpu_to_le32(arg->peer_listen_intval); in ath10k_wmi_peer_assoc_fill()
7584 cmd->peer_ht_caps = __cpu_to_le32(arg->peer_ht_caps); in ath10k_wmi_peer_assoc_fill()
7585 cmd->peer_max_mpdu = __cpu_to_le32(arg->peer_max_mpdu); in ath10k_wmi_peer_assoc_fill()
7586 cmd->peer_mpdu_density = __cpu_to_le32(arg->peer_mpdu_density); in ath10k_wmi_peer_assoc_fill()
7587 cmd->peer_rate_caps = __cpu_to_le32(arg->peer_rate_caps); in ath10k_wmi_peer_assoc_fill()
7588 cmd->peer_nss = __cpu_to_le32(arg->peer_num_spatial_streams); in ath10k_wmi_peer_assoc_fill()
7589 cmd->peer_vht_caps = __cpu_to_le32(arg->peer_vht_caps); in ath10k_wmi_peer_assoc_fill()
7590 cmd->peer_phymode = __cpu_to_le32(arg->peer_phymode); in ath10k_wmi_peer_assoc_fill()
7592 ether_addr_copy(cmd->peer_macaddr.addr, arg->addr); in ath10k_wmi_peer_assoc_fill()
7594 cmd->peer_legacy_rates.num_rates = in ath10k_wmi_peer_assoc_fill()
7595 __cpu_to_le32(arg->peer_legacy_rates.num_rates); in ath10k_wmi_peer_assoc_fill()
7596 memcpy(cmd->peer_legacy_rates.rates, arg->peer_legacy_rates.rates, in ath10k_wmi_peer_assoc_fill()
7597 arg->peer_legacy_rates.num_rates); in ath10k_wmi_peer_assoc_fill()
7599 cmd->peer_ht_rates.num_rates = in ath10k_wmi_peer_assoc_fill()
7600 __cpu_to_le32(arg->peer_ht_rates.num_rates); in ath10k_wmi_peer_assoc_fill()
7601 memcpy(cmd->peer_ht_rates.rates, arg->peer_ht_rates.rates, in ath10k_wmi_peer_assoc_fill()
7602 arg->peer_ht_rates.num_rates); in ath10k_wmi_peer_assoc_fill()
7604 cmd->peer_vht_rates.rx_max_rate = in ath10k_wmi_peer_assoc_fill()
7605 __cpu_to_le32(arg->peer_vht_rates.rx_max_rate); in ath10k_wmi_peer_assoc_fill()
7606 cmd->peer_vht_rates.rx_mcs_set = in ath10k_wmi_peer_assoc_fill()
7607 __cpu_to_le32(arg->peer_vht_rates.rx_mcs_set); in ath10k_wmi_peer_assoc_fill()
7608 cmd->peer_vht_rates.tx_max_rate = in ath10k_wmi_peer_assoc_fill()
7609 __cpu_to_le32(arg->peer_vht_rates.tx_max_rate); in ath10k_wmi_peer_assoc_fill()
7610 cmd->peer_vht_rates.tx_mcs_set = in ath10k_wmi_peer_assoc_fill()
7611 __cpu_to_le32(arg->peer_vht_rates.tx_mcs_set); in ath10k_wmi_peer_assoc_fill()
7621 memset(cmd->peer_ht_info, 0, sizeof(cmd->peer_ht_info)); in ath10k_wmi_peer_assoc_fill_main()
7647 cmd->info0 = __cpu_to_le32(info0); in ath10k_wmi_peer_assoc_fill_10_2()
7657 cmd->peer_bw_rxnss_override = in ath10k_wmi_peer_assoc_fill_10_4()
7658 __cpu_to_le32(arg->peer_bw_rxnss_override); in ath10k_wmi_peer_assoc_fill_10_4()
7664 if (arg->peer_mpdu_density > 16) in ath10k_wmi_peer_assoc_check_arg()
7665 return -EINVAL; in ath10k_wmi_peer_assoc_check_arg()
7666 if (arg->peer_legacy_rates.num_rates > MAX_SUPPORTED_RATES) in ath10k_wmi_peer_assoc_check_arg()
7667 return -EINVAL; in ath10k_wmi_peer_assoc_check_arg()
7668 if (arg->peer_ht_rates.num_rates > MAX_SUPPORTED_RATES) in ath10k_wmi_peer_assoc_check_arg()
7669 return -EINVAL; in ath10k_wmi_peer_assoc_check_arg()
7688 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_peer_assoc()
7690 ath10k_wmi_peer_assoc_fill_main(ar, skb->data, arg); in ath10k_wmi_op_gen_peer_assoc()
7694 arg->vdev_id, arg->addr, in ath10k_wmi_op_gen_peer_assoc()
7695 arg->peer_reassoc ? "reassociate" : "new"); in ath10k_wmi_op_gen_peer_assoc()
7713 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_1_op_gen_peer_assoc()
7715 ath10k_wmi_peer_assoc_fill_10_1(ar, skb->data, arg); in ath10k_wmi_10_1_op_gen_peer_assoc()
7719 arg->vdev_id, arg->addr, in ath10k_wmi_10_1_op_gen_peer_assoc()
7720 arg->peer_reassoc ? "reassociate" : "new"); in ath10k_wmi_10_1_op_gen_peer_assoc()
7738 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_op_gen_peer_assoc()
7740 ath10k_wmi_peer_assoc_fill_10_2(ar, skb->data, arg); in ath10k_wmi_10_2_op_gen_peer_assoc()
7744 arg->vdev_id, arg->addr, in ath10k_wmi_10_2_op_gen_peer_assoc()
7745 arg->peer_reassoc ? "reassociate" : "new"); in ath10k_wmi_10_2_op_gen_peer_assoc()
7763 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_op_gen_peer_assoc()
7765 ath10k_wmi_peer_assoc_fill_10_4(ar, skb->data, arg); in ath10k_wmi_10_4_op_gen_peer_assoc()
7769 arg->vdev_id, arg->addr, in ath10k_wmi_10_4_op_gen_peer_assoc()
7770 arg->peer_reassoc ? "reassociate" : "new"); in ath10k_wmi_10_4_op_gen_peer_assoc()
7781 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_op_gen_pdev_get_temperature()
7796 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_op_gen_pdev_bss_chan_info()
7798 cmd = (struct wmi_pdev_chan_info_req_cmd *)skb->data; in ath10k_wmi_10_2_op_gen_pdev_bss_chan_info()
7799 cmd->type = __cpu_to_le32(type); in ath10k_wmi_10_2_op_gen_pdev_bss_chan_info()
7820 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_beacon_dma()
7823 fc = le16_to_cpu(hdr->frame_control); in ath10k_wmi_op_gen_beacon_dma()
7825 cmd = (struct wmi_bcn_tx_ref_cmd *)skb->data; in ath10k_wmi_op_gen_beacon_dma()
7826 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_beacon_dma()
7827 cmd->data_len = __cpu_to_le32(bcn_len); in ath10k_wmi_op_gen_beacon_dma()
7828 cmd->data_ptr = __cpu_to_le32(bcn_paddr); in ath10k_wmi_op_gen_beacon_dma()
7829 cmd->msdu_id = 0; in ath10k_wmi_op_gen_beacon_dma()
7830 cmd->frame_control = __cpu_to_le32(fc); in ath10k_wmi_op_gen_beacon_dma()
7831 cmd->flags = 0; in ath10k_wmi_op_gen_beacon_dma()
7832 cmd->antenna_mask = __cpu_to_le32(WMI_BCN_TX_REF_DEF_ANTENNA); in ath10k_wmi_op_gen_beacon_dma()
7835 cmd->flags |= __cpu_to_le32(WMI_BCN_TX_REF_FLAG_DTIM_ZERO); in ath10k_wmi_op_gen_beacon_dma()
7838 cmd->flags |= __cpu_to_le32(WMI_BCN_TX_REF_FLAG_DELIVER_CAB); in ath10k_wmi_op_gen_beacon_dma()
7846 params->cwmin = __cpu_to_le32(arg->cwmin); in ath10k_wmi_set_wmm_param()
7847 params->cwmax = __cpu_to_le32(arg->cwmax); in ath10k_wmi_set_wmm_param()
7848 params->aifs = __cpu_to_le32(arg->aifs); in ath10k_wmi_set_wmm_param()
7849 params->txop = __cpu_to_le32(arg->txop); in ath10k_wmi_set_wmm_param()
7850 params->acm = __cpu_to_le32(arg->acm); in ath10k_wmi_set_wmm_param()
7851 params->no_ack = __cpu_to_le32(arg->no_ack); in ath10k_wmi_set_wmm_param()
7863 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_set_wmm()
7865 cmd = (struct wmi_pdev_set_wmm_params *)skb->data; in ath10k_wmi_op_gen_pdev_set_wmm()
7866 ath10k_wmi_set_wmm_param(&cmd->ac_be, &arg->ac_be); in ath10k_wmi_op_gen_pdev_set_wmm()
7867 ath10k_wmi_set_wmm_param(&cmd->ac_bk, &arg->ac_bk); in ath10k_wmi_op_gen_pdev_set_wmm()
7868 ath10k_wmi_set_wmm_param(&cmd->ac_vi, &arg->ac_vi); in ath10k_wmi_op_gen_pdev_set_wmm()
7869 ath10k_wmi_set_wmm_param(&cmd->ac_vo, &arg->ac_vo); in ath10k_wmi_op_gen_pdev_set_wmm()
7883 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_request_stats()
7885 cmd = (struct wmi_request_stats_cmd *)skb->data; in ath10k_wmi_op_gen_request_stats()
7886 cmd->stats_id = __cpu_to_le32(stats_mask); in ath10k_wmi_op_gen_request_stats()
7902 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_force_fw_hang()
7904 cmd = (struct wmi_force_fw_hang_cmd *)skb->data; in ath10k_wmi_op_gen_force_fw_hang()
7905 cmd->type = __cpu_to_le32(type); in ath10k_wmi_op_gen_force_fw_hang()
7906 cmd->delay_ms = __cpu_to_le32(delay_ms); in ath10k_wmi_op_gen_force_fw_hang()
7923 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_dbglog_cfg()
7925 cmd = (struct wmi_dbglog_cfg_cmd *)skb->data; in ath10k_wmi_op_gen_dbglog_cfg()
7937 cmd->module_enable = __cpu_to_le32(module_enable); in ath10k_wmi_op_gen_dbglog_cfg()
7938 cmd->module_valid = __cpu_to_le32(~0); in ath10k_wmi_op_gen_dbglog_cfg()
7939 cmd->config_enable = __cpu_to_le32(cfg); in ath10k_wmi_op_gen_dbglog_cfg()
7940 cmd->config_valid = __cpu_to_le32(ATH10K_DBGLOG_CFG_LOG_LVL_MASK); in ath10k_wmi_op_gen_dbglog_cfg()
7944 __le32_to_cpu(cmd->module_enable), in ath10k_wmi_op_gen_dbglog_cfg()
7945 __le32_to_cpu(cmd->module_valid), in ath10k_wmi_op_gen_dbglog_cfg()
7946 __le32_to_cpu(cmd->config_enable), in ath10k_wmi_op_gen_dbglog_cfg()
7947 __le32_to_cpu(cmd->config_valid)); in ath10k_wmi_op_gen_dbglog_cfg()
7961 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
7963 cmd = (struct wmi_10_4_dbglog_cfg_cmd *)skb->data; in ath10k_wmi_10_4_op_gen_dbglog_cfg()
7975 cmd->module_enable = __cpu_to_le64(module_enable); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
7976 cmd->module_valid = __cpu_to_le64(~0); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
7977 cmd->config_enable = __cpu_to_le32(cfg); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
7978 cmd->config_valid = __cpu_to_le32(ATH10K_DBGLOG_CFG_LOG_LVL_MASK); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
7982 __le64_to_cpu(cmd->module_enable), in ath10k_wmi_10_4_op_gen_dbglog_cfg()
7983 __le64_to_cpu(cmd->module_valid), in ath10k_wmi_10_4_op_gen_dbglog_cfg()
7984 __le32_to_cpu(cmd->config_enable), in ath10k_wmi_10_4_op_gen_dbglog_cfg()
7985 __le32_to_cpu(cmd->config_valid)); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
7997 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pktlog_enable()
8001 cmd = (struct wmi_pdev_pktlog_enable_cmd *)skb->data; in ath10k_wmi_op_gen_pktlog_enable()
8002 cmd->ev_bitmap = __cpu_to_le32(ev_bitmap); in ath10k_wmi_op_gen_pktlog_enable()
8016 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pktlog_disable()
8032 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8034 cmd = (struct wmi_pdev_set_quiet_cmd *)skb->data; in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8035 cmd->period = __cpu_to_le32(period); in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8036 cmd->duration = __cpu_to_le32(duration); in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8037 cmd->next_start = __cpu_to_le32(next_offset); in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8038 cmd->enabled = __cpu_to_le32(enabled); in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8054 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_addba_clear_resp()
8058 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_addba_clear_resp()
8060 cmd = (struct wmi_addba_clear_resp_cmd *)skb->data; in ath10k_wmi_op_gen_addba_clear_resp()
8061 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_addba_clear_resp()
8062 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath10k_wmi_op_gen_addba_clear_resp()
8078 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_addba_send()
8082 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_addba_send()
8084 cmd = (struct wmi_addba_send_cmd *)skb->data; in ath10k_wmi_op_gen_addba_send()
8085 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_addba_send()
8086 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath10k_wmi_op_gen_addba_send()
8087 cmd->tid = __cpu_to_le32(tid); in ath10k_wmi_op_gen_addba_send()
8088 cmd->buffersize = __cpu_to_le32(buf_size); in ath10k_wmi_op_gen_addba_send()
8104 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_addba_set_resp()
8108 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_addba_set_resp()
8110 cmd = (struct wmi_addba_setresponse_cmd *)skb->data; in ath10k_wmi_op_gen_addba_set_resp()
8111 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_addba_set_resp()
8112 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath10k_wmi_op_gen_addba_set_resp()
8113 cmd->tid = __cpu_to_le32(tid); in ath10k_wmi_op_gen_addba_set_resp()
8114 cmd->statuscode = __cpu_to_le32(status); in ath10k_wmi_op_gen_addba_set_resp()
8130 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_delba_send()
8134 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_delba_send()
8136 cmd = (struct wmi_delba_send_cmd *)skb->data; in ath10k_wmi_op_gen_delba_send()
8137 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_delba_send()
8138 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath10k_wmi_op_gen_delba_send()
8139 cmd->tid = __cpu_to_le32(tid); in ath10k_wmi_op_gen_delba_send()
8140 cmd->initiator = __cpu_to_le32(initiator); in ath10k_wmi_op_gen_delba_send()
8141 cmd->reasoncode = __cpu_to_le32(reason); in ath10k_wmi_op_gen_delba_send()
8157 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config()
8159 cmd = (struct wmi_pdev_get_tpc_config_cmd *)skb->data; in ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config()
8160 cmd->param = __cpu_to_le32(param); in ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config()
8196 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_fw_pdev_base_stats_fill()
8197 len += scnprintf(buf + len, buf_len - len, "%30s\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8199 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8202 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8203 "Channel noise floor", pdev->ch_noise_floor); in ath10k_wmi_fw_pdev_base_stats_fill()
8204 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8205 "Channel TX power", pdev->chan_tx_power); in ath10k_wmi_fw_pdev_base_stats_fill()
8206 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8207 "TX frame count", pdev->tx_frame_count); in ath10k_wmi_fw_pdev_base_stats_fill()
8208 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8209 "RX frame count", pdev->rx_frame_count); in ath10k_wmi_fw_pdev_base_stats_fill()
8210 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8211 "RX clear count", pdev->rx_clear_count); in ath10k_wmi_fw_pdev_base_stats_fill()
8212 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8213 "Cycle count", pdev->cycle_count); in ath10k_wmi_fw_pdev_base_stats_fill()
8214 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8215 "PHY error count", pdev->phy_err_count); in ath10k_wmi_fw_pdev_base_stats_fill()
8227 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_extra_stats_fill()
8228 "RTS bad count", pdev->rts_bad); in ath10k_wmi_fw_pdev_extra_stats_fill()
8229 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_extra_stats_fill()
8230 "RTS good count", pdev->rts_good); in ath10k_wmi_fw_pdev_extra_stats_fill()
8231 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_extra_stats_fill()
8232 "FCS bad count", pdev->fcs_bad); in ath10k_wmi_fw_pdev_extra_stats_fill()
8233 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_extra_stats_fill()
8234 "No beacon count", pdev->no_beacons); in ath10k_wmi_fw_pdev_extra_stats_fill()
8235 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_extra_stats_fill()
8236 "MIB int count", pdev->mib_int_count); in ath10k_wmi_fw_pdev_extra_stats_fill()
8238 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_fw_pdev_extra_stats_fill()
8249 len += scnprintf(buf + len, buf_len - len, "\n%30s\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8251 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8254 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8255 "HTT cookies queued", pdev->comp_queued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8256 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8257 "HTT cookies disp.", pdev->comp_delivered); in ath10k_wmi_fw_pdev_tx_stats_fill()
8258 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8259 "MSDU queued", pdev->msdu_enqued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8260 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8261 "MPDU queued", pdev->mpdu_enqued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8262 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8263 "MSDUs dropped", pdev->wmm_drop); in ath10k_wmi_fw_pdev_tx_stats_fill()
8264 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8265 "Local enqued", pdev->local_enqued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8266 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8267 "Local freed", pdev->local_freed); in ath10k_wmi_fw_pdev_tx_stats_fill()
8268 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8269 "HW queued", pdev->hw_queued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8270 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8271 "PPDUs reaped", pdev->hw_reaped); in ath10k_wmi_fw_pdev_tx_stats_fill()
8272 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8273 "Num underruns", pdev->underrun); in ath10k_wmi_fw_pdev_tx_stats_fill()
8274 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8275 "PPDUs cleaned", pdev->tx_abort); in ath10k_wmi_fw_pdev_tx_stats_fill()
8276 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8277 "MPDUs requeued", pdev->mpdus_requeued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8278 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8279 "Excessive retries", pdev->tx_ko); in ath10k_wmi_fw_pdev_tx_stats_fill()
8280 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8281 "HW rate", pdev->data_rc); in ath10k_wmi_fw_pdev_tx_stats_fill()
8282 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8283 "Sched self triggers", pdev->self_triggers); in ath10k_wmi_fw_pdev_tx_stats_fill()
8284 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8286 pdev->sw_retry_failure); in ath10k_wmi_fw_pdev_tx_stats_fill()
8287 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8289 pdev->illgl_rate_phy_err); in ath10k_wmi_fw_pdev_tx_stats_fill()
8290 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8291 "Pdev continuous xretry", pdev->pdev_cont_xretry); in ath10k_wmi_fw_pdev_tx_stats_fill()
8292 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8293 "TX timeout", pdev->pdev_tx_timeout); in ath10k_wmi_fw_pdev_tx_stats_fill()
8294 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8295 "PDEV resets", pdev->pdev_resets); in ath10k_wmi_fw_pdev_tx_stats_fill()
8296 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8297 "PHY underrun", pdev->phy_underrun); in ath10k_wmi_fw_pdev_tx_stats_fill()
8298 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8299 "MPDU is more than txop limit", pdev->txop_ovf); in ath10k_wmi_fw_pdev_tx_stats_fill()
8310 len += scnprintf(buf + len, buf_len - len, "\n%30s\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8311 "ath10k PDEV RX stats"); in ath10k_wmi_fw_pdev_rx_stats_fill()
8312 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8315 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8317 pdev->mid_ppdu_route_change); in ath10k_wmi_fw_pdev_rx_stats_fill()
8318 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8319 "Tot. number of statuses", pdev->status_rcvd); in ath10k_wmi_fw_pdev_rx_stats_fill()
8320 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8321 "Extra frags on rings 0", pdev->r0_frags); in ath10k_wmi_fw_pdev_rx_stats_fill()
8322 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8323 "Extra frags on rings 1", pdev->r1_frags); in ath10k_wmi_fw_pdev_rx_stats_fill()
8324 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8325 "Extra frags on rings 2", pdev->r2_frags); in ath10k_wmi_fw_pdev_rx_stats_fill()
8326 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8327 "Extra frags on rings 3", pdev->r3_frags); in ath10k_wmi_fw_pdev_rx_stats_fill()
8328 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8329 "MSDUs delivered to HTT", pdev->htt_msdus); in ath10k_wmi_fw_pdev_rx_stats_fill()
8330 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8331 "MPDUs delivered to HTT", pdev->htt_mpdus); in ath10k_wmi_fw_pdev_rx_stats_fill()
8332 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8333 "MSDUs delivered to stack", pdev->loc_msdus); in ath10k_wmi_fw_pdev_rx_stats_fill()
8334 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8335 "MPDUs delivered to stack", pdev->loc_mpdus); in ath10k_wmi_fw_pdev_rx_stats_fill()
8336 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8337 "Oversized AMSDUs", pdev->oversize_amsdu); in ath10k_wmi_fw_pdev_rx_stats_fill()
8338 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8339 "PHY errors", pdev->phy_errs); in ath10k_wmi_fw_pdev_rx_stats_fill()
8340 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8341 "PHY errors drops", pdev->phy_err_drop); in ath10k_wmi_fw_pdev_rx_stats_fill()
8342 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8343 "MPDU errors (FCS, MIC, ENC)", pdev->mpdu_errs); in ath10k_wmi_fw_pdev_rx_stats_fill()
8355 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8356 "vdev id", vdev->vdev_id); in ath10k_wmi_fw_vdev_stats_fill()
8357 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8358 "beacon snr", vdev->beacon_snr); in ath10k_wmi_fw_vdev_stats_fill()
8359 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8360 "data snr", vdev->data_snr); in ath10k_wmi_fw_vdev_stats_fill()
8361 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8362 "num rx frames", vdev->num_rx_frames); in ath10k_wmi_fw_vdev_stats_fill()
8363 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8364 "num rts fail", vdev->num_rts_fail); in ath10k_wmi_fw_vdev_stats_fill()
8365 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8366 "num rts success", vdev->num_rts_success); in ath10k_wmi_fw_vdev_stats_fill()
8367 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8368 "num rx err", vdev->num_rx_err); in ath10k_wmi_fw_vdev_stats_fill()
8369 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8370 "num rx discard", vdev->num_rx_discard); in ath10k_wmi_fw_vdev_stats_fill()
8371 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8372 "num tx not acked", vdev->num_tx_not_acked); in ath10k_wmi_fw_vdev_stats_fill()
8374 for (i = 0 ; i < ARRAY_SIZE(vdev->num_tx_frames); i++) in ath10k_wmi_fw_vdev_stats_fill()
8375 len += scnprintf(buf + len, buf_len - len, in ath10k_wmi_fw_vdev_stats_fill()
8378 vdev->num_tx_frames[i]); in ath10k_wmi_fw_vdev_stats_fill()
8380 for (i = 0 ; i < ARRAY_SIZE(vdev->num_tx_frames_retries); i++) in ath10k_wmi_fw_vdev_stats_fill()
8381 len += scnprintf(buf + len, buf_len - len, in ath10k_wmi_fw_vdev_stats_fill()
8384 vdev->num_tx_frames_retries[i]); in ath10k_wmi_fw_vdev_stats_fill()
8386 for (i = 0 ; i < ARRAY_SIZE(vdev->num_tx_frames_failures); i++) in ath10k_wmi_fw_vdev_stats_fill()
8387 len += scnprintf(buf + len, buf_len - len, in ath10k_wmi_fw_vdev_stats_fill()
8390 vdev->num_tx_frames_failures[i]); in ath10k_wmi_fw_vdev_stats_fill()
8392 for (i = 0 ; i < ARRAY_SIZE(vdev->tx_rate_history); i++) in ath10k_wmi_fw_vdev_stats_fill()
8393 len += scnprintf(buf + len, buf_len - len, in ath10k_wmi_fw_vdev_stats_fill()
8396 vdev->tx_rate_history[i]); in ath10k_wmi_fw_vdev_stats_fill()
8398 for (i = 0 ; i < ARRAY_SIZE(vdev->beacon_rssi_history); i++) in ath10k_wmi_fw_vdev_stats_fill()
8399 len += scnprintf(buf + len, buf_len - len, in ath10k_wmi_fw_vdev_stats_fill()
8402 vdev->beacon_rssi_history[i]); in ath10k_wmi_fw_vdev_stats_fill()
8404 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_fw_vdev_stats_fill()
8415 len += scnprintf(buf + len, buf_len - len, "%30s %pM\n", in ath10k_wmi_fw_peer_stats_fill()
8416 "Peer MAC address", peer->peer_macaddr); in ath10k_wmi_fw_peer_stats_fill()
8417 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_peer_stats_fill()
8418 "Peer RSSI", peer->peer_rssi); in ath10k_wmi_fw_peer_stats_fill()
8419 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_peer_stats_fill()
8420 "Peer TX rate", peer->peer_tx_rate); in ath10k_wmi_fw_peer_stats_fill()
8421 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_peer_stats_fill()
8422 "Peer RX rate", peer->peer_rx_rate); in ath10k_wmi_fw_peer_stats_fill()
8424 len += scnprintf(buf + len, buf_len - len, "%30s %llu\n", in ath10k_wmi_fw_peer_stats_fill()
8425 "Peer RX duration", peer->rx_duration); in ath10k_wmi_fw_peer_stats_fill()
8427 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_fw_peer_stats_fill()
8438 len += scnprintf(buf + len, buf_len - len, "%30s %pM\n", in ath10k_wmi_fw_extd_peer_stats_fill()
8439 "Peer MAC address", peer->peer_macaddr); in ath10k_wmi_fw_extd_peer_stats_fill()
8440 len += scnprintf(buf + len, buf_len - len, "%30s %llu\n", in ath10k_wmi_fw_extd_peer_stats_fill()
8441 "Peer RX duration", peer->rx_duration); in ath10k_wmi_fw_extd_peer_stats_fill()
8456 spin_lock_bh(&ar->data_lock); in ath10k_wmi_main_op_fw_stats_fill()
8458 pdev = list_first_entry_or_null(&fw_stats->pdevs, in ath10k_wmi_main_op_fw_stats_fill()
8465 num_peers = ath10k_wmi_fw_stats_num_peers(&fw_stats->peers); in ath10k_wmi_main_op_fw_stats_fill()
8466 num_vdevs = ath10k_wmi_fw_stats_num_vdevs(&fw_stats->vdevs); in ath10k_wmi_main_op_fw_stats_fill()
8472 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_main_op_fw_stats_fill()
8473 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_main_op_fw_stats_fill()
8475 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_main_op_fw_stats_fill()
8478 list_for_each_entry(vdev, &fw_stats->vdevs, list) { in ath10k_wmi_main_op_fw_stats_fill()
8482 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_main_op_fw_stats_fill()
8483 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_main_op_fw_stats_fill()
8485 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_main_op_fw_stats_fill()
8488 list_for_each_entry(peer, &fw_stats->peers, list) { in ath10k_wmi_main_op_fw_stats_fill()
8490 fw_stats->extended); in ath10k_wmi_main_op_fw_stats_fill()
8494 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_main_op_fw_stats_fill()
8497 buf[len - 1] = 0; in ath10k_wmi_main_op_fw_stats_fill()
8514 spin_lock_bh(&ar->data_lock); in ath10k_wmi_10x_op_fw_stats_fill()
8516 pdev = list_first_entry_or_null(&fw_stats->pdevs, in ath10k_wmi_10x_op_fw_stats_fill()
8523 num_peers = ath10k_wmi_fw_stats_num_peers(&fw_stats->peers); in ath10k_wmi_10x_op_fw_stats_fill()
8524 num_vdevs = ath10k_wmi_fw_stats_num_vdevs(&fw_stats->vdevs); in ath10k_wmi_10x_op_fw_stats_fill()
8531 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_10x_op_fw_stats_fill()
8532 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_10x_op_fw_stats_fill()
8534 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_10x_op_fw_stats_fill()
8537 list_for_each_entry(vdev, &fw_stats->vdevs, list) { in ath10k_wmi_10x_op_fw_stats_fill()
8541 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_10x_op_fw_stats_fill()
8542 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_10x_op_fw_stats_fill()
8544 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_10x_op_fw_stats_fill()
8547 list_for_each_entry(peer, &fw_stats->peers, list) { in ath10k_wmi_10x_op_fw_stats_fill()
8549 fw_stats->extended); in ath10k_wmi_10x_op_fw_stats_fill()
8553 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_10x_op_fw_stats_fill()
8556 buf[len - 1] = 0; in ath10k_wmi_10x_op_fw_stats_fill()
8570 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_enable_adaptive_cca()
8572 cmd = (struct wmi_pdev_set_adaptive_cca_params *)skb->data; in ath10k_wmi_op_gen_pdev_enable_adaptive_cca()
8573 cmd->enable = __cpu_to_le32(enable); in ath10k_wmi_op_gen_pdev_enable_adaptive_cca()
8574 cmd->cca_detect_level = __cpu_to_le32(detect_level); in ath10k_wmi_op_gen_pdev_enable_adaptive_cca()
8575 cmd->cca_detect_margin = __cpu_to_le32(detect_margin); in ath10k_wmi_op_gen_pdev_enable_adaptive_cca()
8591 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8592 "vdev id", vdev->vdev_id); in ath10k_wmi_fw_vdev_stats_extd_fill()
8593 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8594 "ppdu aggr count", vdev->ppdu_aggr_cnt); in ath10k_wmi_fw_vdev_stats_extd_fill()
8595 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8596 "ppdu noack", vdev->ppdu_noack); in ath10k_wmi_fw_vdev_stats_extd_fill()
8597 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8598 "mpdu queued", vdev->mpdu_queued); in ath10k_wmi_fw_vdev_stats_extd_fill()
8599 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8600 "ppdu nonaggr count", vdev->ppdu_nonaggr_cnt); in ath10k_wmi_fw_vdev_stats_extd_fill()
8601 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8602 "mpdu sw requeued", vdev->mpdu_sw_requeued); in ath10k_wmi_fw_vdev_stats_extd_fill()
8603 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8604 "mpdu success retry", vdev->mpdu_suc_retry); in ath10k_wmi_fw_vdev_stats_extd_fill()
8605 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8606 "mpdu success multitry", vdev->mpdu_suc_multitry); in ath10k_wmi_fw_vdev_stats_extd_fill()
8607 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8608 "mpdu fail retry", vdev->mpdu_fail_retry); in ath10k_wmi_fw_vdev_stats_extd_fill()
8609 val = vdev->tx_ftm_suc; in ath10k_wmi_fw_vdev_stats_extd_fill()
8611 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8614 val = vdev->tx_ftm_suc_retry; in ath10k_wmi_fw_vdev_stats_extd_fill()
8616 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8619 val = vdev->tx_ftm_fail; in ath10k_wmi_fw_vdev_stats_extd_fill()
8621 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8624 val = vdev->rx_ftmr_cnt; in ath10k_wmi_fw_vdev_stats_extd_fill()
8626 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8627 "rx ftm request count", in ath10k_wmi_fw_vdev_stats_extd_fill()
8629 val = vdev->rx_ftmr_dup_cnt; in ath10k_wmi_fw_vdev_stats_extd_fill()
8631 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8632 "rx ftm request dup count", in ath10k_wmi_fw_vdev_stats_extd_fill()
8634 val = vdev->rx_iftmr_cnt; 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 "rx initial ftm req count", in ath10k_wmi_fw_vdev_stats_extd_fill()
8639 val = vdev->rx_iftmr_dup_cnt; in ath10k_wmi_fw_vdev_stats_extd_fill()
8641 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8642 "rx initial ftm req dup cnt", in ath10k_wmi_fw_vdev_stats_extd_fill()
8644 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_fw_vdev_stats_extd_fill()
8662 spin_lock_bh(&ar->data_lock); in ath10k_wmi_10_4_op_fw_stats_fill()
8664 pdev = list_first_entry_or_null(&fw_stats->pdevs, in ath10k_wmi_10_4_op_fw_stats_fill()
8671 num_peers = ath10k_wmi_fw_stats_num_peers(&fw_stats->peers); in ath10k_wmi_10_4_op_fw_stats_fill()
8672 num_vdevs = ath10k_wmi_fw_stats_num_vdevs(&fw_stats->vdevs); in ath10k_wmi_10_4_op_fw_stats_fill()
8678 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8679 "HW paused", pdev->hw_paused); in ath10k_wmi_10_4_op_fw_stats_fill()
8680 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8681 "Seqs posted", pdev->seq_posted); in ath10k_wmi_10_4_op_fw_stats_fill()
8682 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8683 "Seqs failed queueing", pdev->seq_failed_queueing); in ath10k_wmi_10_4_op_fw_stats_fill()
8684 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8685 "Seqs completed", pdev->seq_completed); in ath10k_wmi_10_4_op_fw_stats_fill()
8686 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8687 "Seqs restarted", pdev->seq_restarted); in ath10k_wmi_10_4_op_fw_stats_fill()
8688 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8689 "MU Seqs posted", pdev->mu_seq_posted); in ath10k_wmi_10_4_op_fw_stats_fill()
8690 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8691 "MPDUs SW flushed", pdev->mpdus_sw_flush); in ath10k_wmi_10_4_op_fw_stats_fill()
8692 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8693 "MPDUs HW filtered", pdev->mpdus_hw_filter); in ath10k_wmi_10_4_op_fw_stats_fill()
8694 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8695 "MPDUs truncated", pdev->mpdus_truncated); in ath10k_wmi_10_4_op_fw_stats_fill()
8696 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8697 "MPDUs receive no ACK", pdev->mpdus_ack_failed); in ath10k_wmi_10_4_op_fw_stats_fill()
8698 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8699 "MPDUs expired", pdev->mpdus_expired); in ath10k_wmi_10_4_op_fw_stats_fill()
8702 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8703 "Num Rx Overflow errors", pdev->rx_ovfl_errs); in ath10k_wmi_10_4_op_fw_stats_fill()
8705 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_10_4_op_fw_stats_fill()
8706 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8708 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8710 list_for_each_entry(vdev, &fw_stats->vdevs, list) { in ath10k_wmi_10_4_op_fw_stats_fill()
8714 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_10_4_op_fw_stats_fill()
8715 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8717 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8720 list_for_each_entry(peer, &fw_stats->peers, list) { in ath10k_wmi_10_4_op_fw_stats_fill()
8722 fw_stats->extended); in ath10k_wmi_10_4_op_fw_stats_fill()
8725 if (fw_stats->extended) { in ath10k_wmi_10_4_op_fw_stats_fill()
8726 list_for_each_entry(extd_peer, &fw_stats->peers_extd, list) { in ath10k_wmi_10_4_op_fw_stats_fill()
8733 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_10_4_op_fw_stats_fill()
8736 buf[len - 1] = 0; in ath10k_wmi_10_4_op_fw_stats_fill()
8757 return -ENOTSUPP; in ath10k_wmi_op_get_vdev_subtype()
8759 return -ENOTSUPP; in ath10k_wmi_op_get_vdev_subtype()
8779 return -ENOTSUPP; in ath10k_wmi_10_2_4_op_get_vdev_subtype()
8781 return -ENOTSUPP; in ath10k_wmi_10_2_4_op_get_vdev_subtype()
8803 return -ENOTSUPP; in ath10k_wmi_10_4_op_get_vdev_subtype()
8817 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_ext_resource_config()
8819 if (test_bit(WMI_SERVICE_TDLS_UAPSD_SLEEP_STA, ar->wmi.svc_map)) in ath10k_wmi_10_4_ext_resource_config()
8822 cmd = (struct wmi_ext_resource_config_10_4_cmd *)skb->data; in ath10k_wmi_10_4_ext_resource_config()
8823 cmd->host_platform_config = __cpu_to_le32(type); in ath10k_wmi_10_4_ext_resource_config()
8824 cmd->fw_feature_bitmap = __cpu_to_le32(fw_feature_bitmap); in ath10k_wmi_10_4_ext_resource_config()
8825 cmd->wlan_gpio_priority = __cpu_to_le32(ar->coex_gpio_pin); in ath10k_wmi_10_4_ext_resource_config()
8826 cmd->coex_version = __cpu_to_le32(WMI_NO_COEX_VERSION_SUPPORT); in ath10k_wmi_10_4_ext_resource_config()
8827 cmd->coex_gpio_pin1 = __cpu_to_le32(-1); in ath10k_wmi_10_4_ext_resource_config()
8828 cmd->coex_gpio_pin2 = __cpu_to_le32(-1); in ath10k_wmi_10_4_ext_resource_config()
8829 cmd->coex_gpio_pin3 = __cpu_to_le32(-1); in ath10k_wmi_10_4_ext_resource_config()
8830 cmd->num_tdls_vdevs = __cpu_to_le32(TARGET_10_4_NUM_TDLS_VDEVS); in ath10k_wmi_10_4_ext_resource_config()
8831 cmd->num_tdls_conn_table_entries = __cpu_to_le32(20); in ath10k_wmi_10_4_ext_resource_config()
8832 cmd->max_tdls_concurrent_sleep_sta = __cpu_to_le32(num_tdls_sleep_sta); in ath10k_wmi_10_4_ext_resource_config()
8833 cmd->max_tdls_concurrent_buffer_sta = in ath10k_wmi_10_4_ext_resource_config()
8852 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8854 if (test_bit(WMI_SERVICE_TDLS_EXPLICIT_MODE_ONLY, ar->wmi.svc_map) && in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8858 if (test_bit(WMI_SERVICE_TDLS_UAPSD_BUFFER_STA, ar->wmi.svc_map)) in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8861 cmd = (struct wmi_10_4_tdls_set_state_cmd *)skb->data; in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8862 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8863 cmd->state = __cpu_to_le32(state); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8864 cmd->notification_interval_ms = __cpu_to_le32(5000); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8865 cmd->tx_discovery_threshold = __cpu_to_le32(100); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8866 cmd->tx_teardown_threshold = __cpu_to_le32(5); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8867 cmd->rssi_teardown_threshold = __cpu_to_le32(-75); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8868 cmd->rssi_delta = __cpu_to_le32(-20); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8869 cmd->tdls_options = __cpu_to_le32(options); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8870 cmd->tdls_peer_traffic_ind_window = __cpu_to_le32(2); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8871 cmd->tdls_peer_traffic_response_timeout_ms = __cpu_to_le32(5000); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8872 cmd->tdls_puapsd_mask = __cpu_to_le32(0xf); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8873 cmd->tdls_puapsd_inactivity_time_ms = __cpu_to_le32(0); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8874 cmd->tdls_puapsd_rx_frame_threshold = __cpu_to_le32(10); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8875 cmd->teardown_notification_ms = __cpu_to_le32(10); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8876 cmd->tdls_peer_kickout_threshold = __cpu_to_le32(96); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8883 static u32 ath10k_wmi_prepare_peer_qos(u8 uapsd_queues, u8 sp) in ath10k_wmi_prepare_peer_qos() argument
8896 peer_qos |= SM(sp, WMI_TDLS_PEER_SP); in ath10k_wmi_prepare_peer_qos()
8909 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_op_gen_pdev_get_tpc_table_cmdid()
8911 cmd = (struct wmi_pdev_get_tpc_table_cmd *)skb->data; in ath10k_wmi_10_4_op_gen_pdev_get_tpc_table_cmdid()
8912 cmd->param = __cpu_to_le32(param); in ath10k_wmi_10_4_op_gen_pdev_get_tpc_table_cmdid()
8934 chan_len = cap->peer_chan_len ? (cap->peer_chan_len - 1) : 0; in ath10k_wmi_10_4_gen_tdls_peer_update()
8940 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_gen_tdls_peer_update()
8942 memset(skb->data, 0, sizeof(*cmd)); in ath10k_wmi_10_4_gen_tdls_peer_update()
8944 cmd = (struct wmi_10_4_tdls_peer_update_cmd *)skb->data; in ath10k_wmi_10_4_gen_tdls_peer_update()
8945 cmd->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_10_4_gen_tdls_peer_update()
8946 ether_addr_copy(cmd->peer_macaddr.addr, arg->addr); in ath10k_wmi_10_4_gen_tdls_peer_update()
8947 cmd->peer_state = __cpu_to_le32(arg->peer_state); in ath10k_wmi_10_4_gen_tdls_peer_update()
8949 peer_qos = ath10k_wmi_prepare_peer_qos(cap->peer_uapsd_queues, in ath10k_wmi_10_4_gen_tdls_peer_update()
8950 cap->peer_max_sp); in ath10k_wmi_10_4_gen_tdls_peer_update()
8952 peer_cap = &cmd->peer_capab; in ath10k_wmi_10_4_gen_tdls_peer_update()
8953 peer_cap->peer_qos = __cpu_to_le32(peer_qos); in ath10k_wmi_10_4_gen_tdls_peer_update()
8954 peer_cap->buff_sta_support = __cpu_to_le32(cap->buff_sta_support); in ath10k_wmi_10_4_gen_tdls_peer_update()
8955 peer_cap->off_chan_support = __cpu_to_le32(cap->off_chan_support); in ath10k_wmi_10_4_gen_tdls_peer_update()
8956 peer_cap->peer_curr_operclass = __cpu_to_le32(cap->peer_curr_operclass); in ath10k_wmi_10_4_gen_tdls_peer_update()
8957 peer_cap->self_curr_operclass = __cpu_to_le32(cap->self_curr_operclass); in ath10k_wmi_10_4_gen_tdls_peer_update()
8958 peer_cap->peer_chan_len = __cpu_to_le32(cap->peer_chan_len); in ath10k_wmi_10_4_gen_tdls_peer_update()
8959 peer_cap->peer_operclass_len = __cpu_to_le32(cap->peer_operclass_len); in ath10k_wmi_10_4_gen_tdls_peer_update()
8962 peer_cap->peer_operclass[i] = cap->peer_operclass[i]; in ath10k_wmi_10_4_gen_tdls_peer_update()
8964 peer_cap->is_peer_responder = __cpu_to_le32(cap->is_peer_responder); in ath10k_wmi_10_4_gen_tdls_peer_update()
8965 peer_cap->pref_offchan_num = __cpu_to_le32(cap->pref_offchan_num); in ath10k_wmi_10_4_gen_tdls_peer_update()
8966 peer_cap->pref_offchan_bw = __cpu_to_le32(cap->pref_offchan_bw); in ath10k_wmi_10_4_gen_tdls_peer_update()
8968 for (i = 0; i < cap->peer_chan_len; i++) { in ath10k_wmi_10_4_gen_tdls_peer_update()
8969 chan = (struct wmi_channel *)&peer_cap->peer_chan_list[i]; in ath10k_wmi_10_4_gen_tdls_peer_update()
8975 arg->vdev_id, arg->peer_state, cap->peer_chan_len); in ath10k_wmi_10_4_gen_tdls_peer_update()
8988 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_gen_radar_found()
8990 cmd = (struct wmi_radar_found_info *)skb->data; in ath10k_wmi_10_4_gen_radar_found()
8991 cmd->pri_min = __cpu_to_le32(arg->pri_min); in ath10k_wmi_10_4_gen_radar_found()
8992 cmd->pri_max = __cpu_to_le32(arg->pri_max); in ath10k_wmi_10_4_gen_radar_found()
8993 cmd->width_min = __cpu_to_le32(arg->width_min); in ath10k_wmi_10_4_gen_radar_found()
8994 cmd->width_max = __cpu_to_le32(arg->width_max); in ath10k_wmi_10_4_gen_radar_found()
8995 cmd->sidx_min = __cpu_to_le32(arg->sidx_min); in ath10k_wmi_10_4_gen_radar_found()
8996 cmd->sidx_max = __cpu_to_le32(arg->sidx_max); in ath10k_wmi_10_4_gen_radar_found()
9000 arg->pri_min, arg->pri_max, arg->width_min, in ath10k_wmi_10_4_gen_radar_found()
9001 arg->width_max, arg->sidx_min, arg->sidx_max); in ath10k_wmi_10_4_gen_radar_found()
9014 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9016 memset(skb->data, 0, sizeof(*cmd)); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9018 cmd = (struct wmi_peer_per_tid_cfg_cmd *)skb->data; in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9019 cmd->vdev_id = cpu_to_le32(arg->vdev_id); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9020 ether_addr_copy(cmd->peer_macaddr.addr, arg->peer_macaddr.addr); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9021 cmd->tid = cpu_to_le32(arg->tid); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9022 cmd->ack_policy = cpu_to_le32(arg->ack_policy); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9023 cmd->aggr_control = cpu_to_le32(arg->aggr_control); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9024 cmd->rate_control = cpu_to_le32(arg->rate_ctrl); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9025 cmd->retry_count = cpu_to_le32(arg->retry_count); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9026 cmd->rcode_flags = cpu_to_le32(arg->rcode_flags); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9027 cmd->ext_tid_cfg_bitmap = cpu_to_le32(arg->ext_tid_cfg_bitmap); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9028 cmd->rtscts_ctrl = cpu_to_le32(arg->rtscts_ctrl); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9032 arg->tid, arg->vdev_id, arg->ack_policy, arg->aggr_control, in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9033 arg->rate_ctrl, arg->rcode_flags, arg->retry_count, in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9034 arg->rtscts_ctrl, arg->ext_tid_cfg_bitmap, arg->peer_macaddr.addr); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9046 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_echo()
9048 cmd = (struct wmi_echo_cmd *)skb->data; in ath10k_wmi_op_gen_echo()
9049 cmd->value = cpu_to_le32(value); in ath10k_wmi_op_gen_echo()
9062 spin_lock_bh(&ar->data_lock); in ath10k_wmi_barrier()
9063 reinit_completion(&ar->wmi.barrier); in ath10k_wmi_barrier()
9064 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_barrier()
9072 time_left = wait_for_completion_timeout(&ar->wmi.barrier, in ath10k_wmi_barrier()
9075 return -ETIMEDOUT; in ath10k_wmi_barrier()
9089 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_4_op_gen_bb_timing()
9091 cmd = (struct wmi_pdev_bb_timing_cfg_cmd *)skb->data; in ath10k_wmi_10_2_4_op_gen_bb_timing()
9092 cmd->bb_tx_timing = __cpu_to_le32(arg->bb_tx_timing); in ath10k_wmi_10_2_4_op_gen_bb_timing()
9093 cmd->bb_xpa_timing = __cpu_to_le32(arg->bb_xpa_timing); in ath10k_wmi_10_2_4_op_gen_bb_timing()
9097 arg->bb_tx_timing, arg->bb_xpa_timing); in ath10k_wmi_10_2_4_op_gen_bb_timing()
9102 .rx = ath10k_wmi_op_rx,
9171 .rx = ath10k_wmi_10_1_op_rx,
9241 .rx = ath10k_wmi_10_2_op_rx,
9309 .rx = ath10k_wmi_10_2_op_rx,
9383 .rx = ath10k_wmi_10_4_op_rx,
9461 switch (ar->running_fw->fw_file.wmi_op_version) { in ath10k_wmi_attach()
9463 ar->wmi.ops = &wmi_10_4_ops; in ath10k_wmi_attach()
9464 ar->wmi.cmd = &wmi_10_4_cmd_map; in ath10k_wmi_attach()
9465 ar->wmi.vdev_param = &wmi_10_4_vdev_param_map; in ath10k_wmi_attach()
9466 ar->wmi.pdev_param = &wmi_10_4_pdev_param_map; in ath10k_wmi_attach()
9467 ar->wmi.peer_param = &wmi_peer_param_map; in ath10k_wmi_attach()
9468 ar->wmi.peer_flags = &wmi_10_2_peer_flags_map; in ath10k_wmi_attach()
9469 ar->wmi_key_cipher = wmi_key_cipher_suites; in ath10k_wmi_attach()
9472 ar->wmi.cmd = &wmi_10_2_4_cmd_map; in ath10k_wmi_attach()
9473 ar->wmi.ops = &wmi_10_2_4_ops; in ath10k_wmi_attach()
9474 ar->wmi.vdev_param = &wmi_10_2_4_vdev_param_map; in ath10k_wmi_attach()
9475 ar->wmi.pdev_param = &wmi_10_2_4_pdev_param_map; in ath10k_wmi_attach()
9476 ar->wmi.peer_param = &wmi_peer_param_map; in ath10k_wmi_attach()
9477 ar->wmi.peer_flags = &wmi_10_2_peer_flags_map; in ath10k_wmi_attach()
9478 ar->wmi_key_cipher = wmi_key_cipher_suites; in ath10k_wmi_attach()
9481 ar->wmi.cmd = &wmi_10_2_cmd_map; in ath10k_wmi_attach()
9482 ar->wmi.ops = &wmi_10_2_ops; in ath10k_wmi_attach()
9483 ar->wmi.vdev_param = &wmi_10x_vdev_param_map; in ath10k_wmi_attach()
9484 ar->wmi.pdev_param = &wmi_10x_pdev_param_map; in ath10k_wmi_attach()
9485 ar->wmi.peer_param = &wmi_peer_param_map; in ath10k_wmi_attach()
9486 ar->wmi.peer_flags = &wmi_10_2_peer_flags_map; in ath10k_wmi_attach()
9487 ar->wmi_key_cipher = wmi_key_cipher_suites; in ath10k_wmi_attach()
9490 ar->wmi.cmd = &wmi_10x_cmd_map; in ath10k_wmi_attach()
9491 ar->wmi.ops = &wmi_10_1_ops; in ath10k_wmi_attach()
9492 ar->wmi.vdev_param = &wmi_10x_vdev_param_map; in ath10k_wmi_attach()
9493 ar->wmi.pdev_param = &wmi_10x_pdev_param_map; in ath10k_wmi_attach()
9494 ar->wmi.peer_param = &wmi_peer_param_map; in ath10k_wmi_attach()
9495 ar->wmi.peer_flags = &wmi_10x_peer_flags_map; in ath10k_wmi_attach()
9496 ar->wmi_key_cipher = wmi_key_cipher_suites; in ath10k_wmi_attach()
9499 ar->wmi.cmd = &wmi_cmd_map; in ath10k_wmi_attach()
9500 ar->wmi.ops = &wmi_ops; in ath10k_wmi_attach()
9501 ar->wmi.vdev_param = &wmi_vdev_param_map; in ath10k_wmi_attach()
9502 ar->wmi.pdev_param = &wmi_pdev_param_map; in ath10k_wmi_attach()
9503 ar->wmi.peer_param = &wmi_peer_param_map; in ath10k_wmi_attach()
9504 ar->wmi.peer_flags = &wmi_peer_flags_map; in ath10k_wmi_attach()
9505 ar->wmi_key_cipher = wmi_key_cipher_suites; in ath10k_wmi_attach()
9509 ar->wmi_key_cipher = wmi_tlv_key_cipher_suites; in ath10k_wmi_attach()
9514 ar->running_fw->fw_file.wmi_op_version); in ath10k_wmi_attach()
9515 return -EINVAL; in ath10k_wmi_attach()
9518 init_completion(&ar->wmi.service_ready); in ath10k_wmi_attach()
9519 init_completion(&ar->wmi.unified_ready); in ath10k_wmi_attach()
9520 init_completion(&ar->wmi.barrier); in ath10k_wmi_attach()
9521 init_completion(&ar->wmi.radar_confirm); in ath10k_wmi_attach()
9523 INIT_WORK(&ar->svc_rdy_work, ath10k_wmi_event_service_ready_work); in ath10k_wmi_attach()
9524 INIT_WORK(&ar->radar_confirmation_work, in ath10k_wmi_attach()
9528 ar->running_fw->fw_file.fw_features)) { in ath10k_wmi_attach()
9529 idr_init(&ar->wmi.mgmt_pending_tx); in ath10k_wmi_attach()
9540 for (i = 0; i < ar->wmi.num_mem_chunks; i++) { in ath10k_wmi_free_host_mem()
9541 dma_free_coherent(ar->dev, in ath10k_wmi_free_host_mem()
9542 ar->wmi.mem_chunks[i].len, in ath10k_wmi_free_host_mem()
9543 ar->wmi.mem_chunks[i].vaddr, in ath10k_wmi_free_host_mem()
9544 ar->wmi.mem_chunks[i].paddr); in ath10k_wmi_free_host_mem()
9547 ar->wmi.num_mem_chunks = 0; in ath10k_wmi_free_host_mem()
9560 msdu = pkt_addr->vaddr; in ath10k_wmi_mgmt_tx_clean_up_pending()
9561 dma_unmap_single(ar->dev, pkt_addr->paddr, in ath10k_wmi_mgmt_tx_clean_up_pending()
9562 msdu->len, DMA_TO_DEVICE); in ath10k_wmi_mgmt_tx_clean_up_pending()
9563 ieee80211_free_txskb(ar->hw, msdu); in ath10k_wmi_mgmt_tx_clean_up_pending()
9571 ar->running_fw->fw_file.fw_features)) { in ath10k_wmi_detach()
9572 spin_lock_bh(&ar->data_lock); in ath10k_wmi_detach()
9573 idr_for_each(&ar->wmi.mgmt_pending_tx, in ath10k_wmi_detach()
9575 idr_destroy(&ar->wmi.mgmt_pending_tx); in ath10k_wmi_detach()
9576 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_detach()
9579 cancel_work_sync(&ar->svc_rdy_work); in ath10k_wmi_detach()
9580 dev_kfree_skb(ar->svc_rdy_skb); in ath10k_wmi_detach()