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()
1940 queue_work(ar->workqueue, &ar->restart_work); 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.is_valid_ack_signal = true; 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()
2614 "event mgmt rx skb %pK len %d ftype %02x stype %02x\n", in ath10k_wmi_event_mgmt_rx()
2615 skb, skb->len, in ath10k_wmi_event_mgmt_rx()
2619 "event mgmt rx freq %d band %d snr %d, rate_idx %d\n", in ath10k_wmi_event_mgmt_rx()
2620 status->freq, status->band, status->signal, in ath10k_wmi_event_mgmt_rx()
2621 status->rate_idx); in ath10k_wmi_event_mgmt_rx()
2623 ieee80211_rx_ni(ar->hw, skb); in ath10k_wmi_event_mgmt_rx()
2634 sband = ar->hw->wiphy->bands[band]; in freq_to_idx()
2638 for (ch = 0; ch < sband->n_channels; ch++, idx++) in freq_to_idx()
2639 if (sband->channels[ch].center_freq == freq) in freq_to_idx()
2650 struct wmi_chan_info_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_ch_info_ev()
2652 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_ch_info_ev()
2653 return -EPROTO; in ath10k_wmi_op_pull_ch_info_ev()
2656 arg->err_code = ev->err_code; in ath10k_wmi_op_pull_ch_info_ev()
2657 arg->freq = ev->freq; in ath10k_wmi_op_pull_ch_info_ev()
2658 arg->cmd_flags = ev->cmd_flags; in ath10k_wmi_op_pull_ch_info_ev()
2659 arg->noise_floor = ev->noise_floor; in ath10k_wmi_op_pull_ch_info_ev()
2660 arg->rx_clear_count = ev->rx_clear_count; in ath10k_wmi_op_pull_ch_info_ev()
2661 arg->cycle_count = ev->cycle_count; in ath10k_wmi_op_pull_ch_info_ev()
2670 struct wmi_10_4_chan_info_event *ev = (void *)skb->data; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2672 if (skb->len < sizeof(*ev)) in ath10k_wmi_10_4_op_pull_ch_info_ev()
2673 return -EPROTO; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2676 arg->err_code = ev->err_code; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2677 arg->freq = ev->freq; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2678 arg->cmd_flags = ev->cmd_flags; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2679 arg->noise_floor = ev->noise_floor; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2680 arg->rx_clear_count = ev->rx_clear_count; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2681 arg->cycle_count = ev->cycle_count; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2682 arg->chan_tx_pwr_range = ev->chan_tx_pwr_range; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2683 arg->chan_tx_pwr_tp = ev->chan_tx_pwr_tp; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2684 arg->rx_frame_count = ev->rx_frame_count; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2699 if (params->cmd_flags & WMI_CHAN_INFO_FLAG_COMPLETE) { in ath10k_wmi_event_chan_info_unpaired()
2704 idx = freq_to_idx(ar, params->freq); in ath10k_wmi_event_chan_info_unpaired()
2705 if (idx >= ARRAY_SIZE(ar->survey)) { in ath10k_wmi_event_chan_info_unpaired()
2707 params->freq, idx); in ath10k_wmi_event_chan_info_unpaired()
2711 survey = &ar->survey[idx]; in ath10k_wmi_event_chan_info_unpaired()
2713 if (!params->mac_clk_mhz) in ath10k_wmi_event_chan_info_unpaired()
2718 survey->noise = params->noise_floor; in ath10k_wmi_event_chan_info_unpaired()
2719 survey->time = (params->cycle_count / params->mac_clk_mhz) / 1000; in ath10k_wmi_event_chan_info_unpaired()
2720 survey->time_busy = (params->rx_clear_count / params->mac_clk_mhz) / 1000; in ath10k_wmi_event_chan_info_unpaired()
2721 survey->filled |= SURVEY_INFO_NOISE_DBM | SURVEY_INFO_TIME | in ath10k_wmi_event_chan_info_unpaired()
2735 idx = freq_to_idx(ar, params->freq); in ath10k_wmi_event_chan_info_paired()
2736 if (idx >= ARRAY_SIZE(ar->survey)) { in ath10k_wmi_event_chan_info_paired()
2738 params->freq, idx); in ath10k_wmi_event_chan_info_paired()
2742 if (params->cmd_flags & WMI_CHAN_INFO_FLAG_COMPLETE) { in ath10k_wmi_event_chan_info_paired()
2743 if (ar->ch_info_can_report_survey) { in ath10k_wmi_event_chan_info_paired()
2744 survey = &ar->survey[idx]; in ath10k_wmi_event_chan_info_paired()
2745 survey->noise = params->noise_floor; in ath10k_wmi_event_chan_info_paired()
2746 survey->filled = SURVEY_INFO_NOISE_DBM; in ath10k_wmi_event_chan_info_paired()
2750 params->cycle_count, in ath10k_wmi_event_chan_info_paired()
2751 params->rx_clear_count, in ath10k_wmi_event_chan_info_paired()
2752 ar->survey_last_cycle_count, in ath10k_wmi_event_chan_info_paired()
2753 ar->survey_last_rx_clear_count); in ath10k_wmi_event_chan_info_paired()
2756 ar->ch_info_can_report_survey = false; in ath10k_wmi_event_chan_info_paired()
2758 ar->ch_info_can_report_survey = true; in ath10k_wmi_event_chan_info_paired()
2761 if (!(params->cmd_flags & WMI_CHAN_INFO_FLAG_PRE_COMPLETE)) { in ath10k_wmi_event_chan_info_paired()
2762 ar->survey_last_rx_clear_count = params->rx_clear_count; in ath10k_wmi_event_chan_info_paired()
2763 ar->survey_last_cycle_count = params->cycle_count; in ath10k_wmi_event_chan_info_paired()
2793 spin_lock_bh(&ar->data_lock); in ath10k_wmi_event_chan_info()
2795 switch (ar->scan.state) { in ath10k_wmi_event_chan_info()
2806 ar->running_fw->fw_file.fw_features)) in ath10k_wmi_event_chan_info()
2812 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_event_chan_info()
2831 complete(&ar->wmi.barrier); in ath10k_wmi_event_echo()
2837 skb->len); in ath10k_wmi_event_debug_mesg()
2839 trace_ath10k_wmi_dbglog(ar, skb->data, skb->len); in ath10k_wmi_event_debug_mesg()
2847 dst->ch_noise_floor = __le32_to_cpu(src->chan_nf); in ath10k_wmi_pull_pdev_stats_base()
2848 dst->tx_frame_count = __le32_to_cpu(src->tx_frame_count); in ath10k_wmi_pull_pdev_stats_base()
2849 dst->rx_frame_count = __le32_to_cpu(src->rx_frame_count); in ath10k_wmi_pull_pdev_stats_base()
2850 dst->rx_clear_count = __le32_to_cpu(src->rx_clear_count); in ath10k_wmi_pull_pdev_stats_base()
2851 dst->cycle_count = __le32_to_cpu(src->cycle_count); in ath10k_wmi_pull_pdev_stats_base()
2852 dst->phy_err_count = __le32_to_cpu(src->phy_err_count); in ath10k_wmi_pull_pdev_stats_base()
2853 dst->chan_tx_power = __le32_to_cpu(src->chan_tx_pwr); in ath10k_wmi_pull_pdev_stats_base()
2859 dst->comp_queued = __le32_to_cpu(src->comp_queued); in ath10k_wmi_pull_pdev_stats_tx()
2860 dst->comp_delivered = __le32_to_cpu(src->comp_delivered); in ath10k_wmi_pull_pdev_stats_tx()
2861 dst->msdu_enqued = __le32_to_cpu(src->msdu_enqued); in ath10k_wmi_pull_pdev_stats_tx()
2862 dst->mpdu_enqued = __le32_to_cpu(src->mpdu_enqued); in ath10k_wmi_pull_pdev_stats_tx()
2863 dst->wmm_drop = __le32_to_cpu(src->wmm_drop); in ath10k_wmi_pull_pdev_stats_tx()
2864 dst->local_enqued = __le32_to_cpu(src->local_enqued); in ath10k_wmi_pull_pdev_stats_tx()
2865 dst->local_freed = __le32_to_cpu(src->local_freed); in ath10k_wmi_pull_pdev_stats_tx()
2866 dst->hw_queued = __le32_to_cpu(src->hw_queued); in ath10k_wmi_pull_pdev_stats_tx()
2867 dst->hw_reaped = __le32_to_cpu(src->hw_reaped); in ath10k_wmi_pull_pdev_stats_tx()
2868 dst->underrun = __le32_to_cpu(src->underrun); in ath10k_wmi_pull_pdev_stats_tx()
2869 dst->tx_abort = __le32_to_cpu(src->tx_abort); in ath10k_wmi_pull_pdev_stats_tx()
2870 dst->mpdus_requed = __le32_to_cpu(src->mpdus_requed); in ath10k_wmi_pull_pdev_stats_tx()
2871 dst->tx_ko = __le32_to_cpu(src->tx_ko); in ath10k_wmi_pull_pdev_stats_tx()
2872 dst->data_rc = __le32_to_cpu(src->data_rc); in ath10k_wmi_pull_pdev_stats_tx()
2873 dst->self_triggers = __le32_to_cpu(src->self_triggers); in ath10k_wmi_pull_pdev_stats_tx()
2874 dst->sw_retry_failure = __le32_to_cpu(src->sw_retry_failure); in ath10k_wmi_pull_pdev_stats_tx()
2875 dst->illgl_rate_phy_err = __le32_to_cpu(src->illgl_rate_phy_err); in ath10k_wmi_pull_pdev_stats_tx()
2876 dst->pdev_cont_xretry = __le32_to_cpu(src->pdev_cont_xretry); in ath10k_wmi_pull_pdev_stats_tx()
2877 dst->pdev_tx_timeout = __le32_to_cpu(src->pdev_tx_timeout); in ath10k_wmi_pull_pdev_stats_tx()
2878 dst->pdev_resets = __le32_to_cpu(src->pdev_resets); in ath10k_wmi_pull_pdev_stats_tx()
2879 dst->phy_underrun = __le32_to_cpu(src->phy_underrun); in ath10k_wmi_pull_pdev_stats_tx()
2880 dst->txop_ovf = __le32_to_cpu(src->txop_ovf); in ath10k_wmi_pull_pdev_stats_tx()
2887 dst->comp_queued = __le32_to_cpu(src->comp_queued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2888 dst->comp_delivered = __le32_to_cpu(src->comp_delivered); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2889 dst->msdu_enqued = __le32_to_cpu(src->msdu_enqued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2890 dst->mpdu_enqued = __le32_to_cpu(src->mpdu_enqued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2891 dst->wmm_drop = __le32_to_cpu(src->wmm_drop); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2892 dst->local_enqued = __le32_to_cpu(src->local_enqued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2893 dst->local_freed = __le32_to_cpu(src->local_freed); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2894 dst->hw_queued = __le32_to_cpu(src->hw_queued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2895 dst->hw_reaped = __le32_to_cpu(src->hw_reaped); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2896 dst->underrun = __le32_to_cpu(src->underrun); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2897 dst->tx_abort = __le32_to_cpu(src->tx_abort); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2898 dst->mpdus_requed = __le32_to_cpu(src->mpdus_requed); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2899 dst->tx_ko = __le32_to_cpu(src->tx_ko); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2900 dst->data_rc = __le32_to_cpu(src->data_rc); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2901 dst->self_triggers = __le32_to_cpu(src->self_triggers); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2902 dst->sw_retry_failure = __le32_to_cpu(src->sw_retry_failure); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2903 dst->illgl_rate_phy_err = __le32_to_cpu(src->illgl_rate_phy_err); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2904 dst->pdev_cont_xretry = __le32_to_cpu(src->pdev_cont_xretry); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2905 dst->pdev_tx_timeout = __le32_to_cpu(src->pdev_tx_timeout); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2906 dst->pdev_resets = __le32_to_cpu(src->pdev_resets); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2907 dst->phy_underrun = __le32_to_cpu(src->phy_underrun); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2908 dst->txop_ovf = __le32_to_cpu(src->txop_ovf); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2909 dst->hw_paused = __le32_to_cpu(src->hw_paused); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2910 dst->seq_posted = __le32_to_cpu(src->seq_posted); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2911 dst->seq_failed_queueing = in ath10k_wmi_10_4_pull_pdev_stats_tx()
2912 __le32_to_cpu(src->seq_failed_queueing); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2913 dst->seq_completed = __le32_to_cpu(src->seq_completed); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2914 dst->seq_restarted = __le32_to_cpu(src->seq_restarted); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2915 dst->mu_seq_posted = __le32_to_cpu(src->mu_seq_posted); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2916 dst->mpdus_sw_flush = __le32_to_cpu(src->mpdus_sw_flush); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2917 dst->mpdus_hw_filter = __le32_to_cpu(src->mpdus_hw_filter); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2918 dst->mpdus_truncated = __le32_to_cpu(src->mpdus_truncated); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2919 dst->mpdus_ack_failed = __le32_to_cpu(src->mpdus_ack_failed); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2920 dst->mpdus_hw_filter = __le32_to_cpu(src->mpdus_hw_filter); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2921 dst->mpdus_expired = __le32_to_cpu(src->mpdus_expired); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2927 dst->mid_ppdu_route_change = __le32_to_cpu(src->mid_ppdu_route_change); in ath10k_wmi_pull_pdev_stats_rx()
2928 dst->status_rcvd = __le32_to_cpu(src->status_rcvd); in ath10k_wmi_pull_pdev_stats_rx()
2929 dst->r0_frags = __le32_to_cpu(src->r0_frags); in ath10k_wmi_pull_pdev_stats_rx()
2930 dst->r1_frags = __le32_to_cpu(src->r1_frags); in ath10k_wmi_pull_pdev_stats_rx()
2931 dst->r2_frags = __le32_to_cpu(src->r2_frags); in ath10k_wmi_pull_pdev_stats_rx()
2932 dst->r3_frags = __le32_to_cpu(src->r3_frags); in ath10k_wmi_pull_pdev_stats_rx()
2933 dst->htt_msdus = __le32_to_cpu(src->htt_msdus); in ath10k_wmi_pull_pdev_stats_rx()
2934 dst->htt_mpdus = __le32_to_cpu(src->htt_mpdus); in ath10k_wmi_pull_pdev_stats_rx()
2935 dst->loc_msdus = __le32_to_cpu(src->loc_msdus); in ath10k_wmi_pull_pdev_stats_rx()
2936 dst->loc_mpdus = __le32_to_cpu(src->loc_mpdus); in ath10k_wmi_pull_pdev_stats_rx()
2937 dst->oversize_amsdu = __le32_to_cpu(src->oversize_amsdu); in ath10k_wmi_pull_pdev_stats_rx()
2938 dst->phy_errs = __le32_to_cpu(src->phy_errs); in ath10k_wmi_pull_pdev_stats_rx()
2939 dst->phy_err_drop = __le32_to_cpu(src->phy_err_drop); in ath10k_wmi_pull_pdev_stats_rx()
2940 dst->mpdu_errs = __le32_to_cpu(src->mpdu_errs); in ath10k_wmi_pull_pdev_stats_rx()
2946 dst->ack_rx_bad = __le32_to_cpu(src->ack_rx_bad); in ath10k_wmi_pull_pdev_stats_extra()
2947 dst->rts_bad = __le32_to_cpu(src->rts_bad); in ath10k_wmi_pull_pdev_stats_extra()
2948 dst->rts_good = __le32_to_cpu(src->rts_good); in ath10k_wmi_pull_pdev_stats_extra()
2949 dst->fcs_bad = __le32_to_cpu(src->fcs_bad); in ath10k_wmi_pull_pdev_stats_extra()
2950 dst->no_beacons = __le32_to_cpu(src->no_beacons); in ath10k_wmi_pull_pdev_stats_extra()
2951 dst->mib_int_count = __le32_to_cpu(src->mib_int_count); in ath10k_wmi_pull_pdev_stats_extra()
2957 ether_addr_copy(dst->peer_macaddr, src->peer_macaddr.addr); in ath10k_wmi_pull_peer_stats()
2958 dst->peer_rssi = __le32_to_cpu(src->peer_rssi); in ath10k_wmi_pull_peer_stats()
2959 dst->peer_tx_rate = __le32_to_cpu(src->peer_tx_rate); in ath10k_wmi_pull_peer_stats()
2966 ether_addr_copy(dst->peer_macaddr, src->peer_macaddr.addr); in ath10k_wmi_10_4_pull_peer_stats()
2967 dst->peer_rssi = __le32_to_cpu(src->peer_rssi); in ath10k_wmi_10_4_pull_peer_stats()
2968 dst->peer_tx_rate = __le32_to_cpu(src->peer_tx_rate); in ath10k_wmi_10_4_pull_peer_stats()
2969 dst->peer_rx_rate = __le32_to_cpu(src->peer_rx_rate); in ath10k_wmi_10_4_pull_peer_stats()
2976 dst->vdev_id = __le32_to_cpu(src->vdev_id); in ath10k_wmi_10_4_pull_vdev_stats()
2977 dst->ppdu_aggr_cnt = __le32_to_cpu(src->ppdu_aggr_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
2978 dst->ppdu_noack = __le32_to_cpu(src->ppdu_noack); in ath10k_wmi_10_4_pull_vdev_stats()
2979 dst->mpdu_queued = __le32_to_cpu(src->mpdu_queued); in ath10k_wmi_10_4_pull_vdev_stats()
2980 dst->ppdu_nonaggr_cnt = __le32_to_cpu(src->ppdu_nonaggr_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
2981 dst->mpdu_sw_requeued = __le32_to_cpu(src->mpdu_sw_requeued); in ath10k_wmi_10_4_pull_vdev_stats()
2982 dst->mpdu_suc_retry = __le32_to_cpu(src->mpdu_suc_retry); in ath10k_wmi_10_4_pull_vdev_stats()
2983 dst->mpdu_suc_multitry = __le32_to_cpu(src->mpdu_suc_multitry); in ath10k_wmi_10_4_pull_vdev_stats()
2984 dst->mpdu_fail_retry = __le32_to_cpu(src->mpdu_fail_retry); in ath10k_wmi_10_4_pull_vdev_stats()
2985 dst->tx_ftm_suc = __le32_to_cpu(src->tx_ftm_suc); in ath10k_wmi_10_4_pull_vdev_stats()
2986 dst->tx_ftm_suc_retry = __le32_to_cpu(src->tx_ftm_suc_retry); in ath10k_wmi_10_4_pull_vdev_stats()
2987 dst->tx_ftm_fail = __le32_to_cpu(src->tx_ftm_fail); in ath10k_wmi_10_4_pull_vdev_stats()
2988 dst->rx_ftmr_cnt = __le32_to_cpu(src->rx_ftmr_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
2989 dst->rx_ftmr_dup_cnt = __le32_to_cpu(src->rx_ftmr_dup_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
2990 dst->rx_iftmr_cnt = __le32_to_cpu(src->rx_iftmr_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
2991 dst->rx_iftmr_dup_cnt = __le32_to_cpu(src->rx_iftmr_dup_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
2998 const struct wmi_stats_event *ev = (void *)skb->data; in ath10k_wmi_main_op_pull_fw_stats()
3003 return -EPROTO; in ath10k_wmi_main_op_pull_fw_stats()
3005 num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats); in ath10k_wmi_main_op_pull_fw_stats()
3006 num_peer_stats = __le32_to_cpu(ev->num_peer_stats); in ath10k_wmi_main_op_pull_fw_stats()
3012 src = (void *)skb->data; in ath10k_wmi_main_op_pull_fw_stats()
3014 return -EPROTO; in ath10k_wmi_main_op_pull_fw_stats()
3020 ath10k_wmi_pull_pdev_stats_base(&src->base, dst); in ath10k_wmi_main_op_pull_fw_stats()
3021 ath10k_wmi_pull_pdev_stats_tx(&src->tx, dst); in ath10k_wmi_main_op_pull_fw_stats()
3022 ath10k_wmi_pull_pdev_stats_rx(&src->rx, dst); in ath10k_wmi_main_op_pull_fw_stats()
3024 list_add_tail(&dst->list, &stats->pdevs); in ath10k_wmi_main_op_pull_fw_stats()
3033 src = (void *)skb->data; in ath10k_wmi_main_op_pull_fw_stats()
3035 return -EPROTO; in ath10k_wmi_main_op_pull_fw_stats()
3042 list_add_tail(&dst->list, &stats->peers); in ath10k_wmi_main_op_pull_fw_stats()
3052 const struct wmi_stats_event *ev = (void *)skb->data; in ath10k_wmi_10x_op_pull_fw_stats()
3057 return -EPROTO; in ath10k_wmi_10x_op_pull_fw_stats()
3059 num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats); in ath10k_wmi_10x_op_pull_fw_stats()
3060 num_peer_stats = __le32_to_cpu(ev->num_peer_stats); in ath10k_wmi_10x_op_pull_fw_stats()
3066 src = (void *)skb->data; in ath10k_wmi_10x_op_pull_fw_stats()
3068 return -EPROTO; in ath10k_wmi_10x_op_pull_fw_stats()
3074 ath10k_wmi_pull_pdev_stats_base(&src->base, dst); in ath10k_wmi_10x_op_pull_fw_stats()
3075 ath10k_wmi_pull_pdev_stats_tx(&src->tx, dst); in ath10k_wmi_10x_op_pull_fw_stats()
3076 ath10k_wmi_pull_pdev_stats_rx(&src->rx, dst); in ath10k_wmi_10x_op_pull_fw_stats()
3077 ath10k_wmi_pull_pdev_stats_extra(&src->extra, dst); in ath10k_wmi_10x_op_pull_fw_stats()
3079 list_add_tail(&dst->list, &stats->pdevs); in ath10k_wmi_10x_op_pull_fw_stats()
3088 src = (void *)skb->data; in ath10k_wmi_10x_op_pull_fw_stats()
3090 return -EPROTO; in ath10k_wmi_10x_op_pull_fw_stats()
3096 ath10k_wmi_pull_peer_stats(&src->old, dst); in ath10k_wmi_10x_op_pull_fw_stats()
3098 dst->peer_rx_rate = __le32_to_cpu(src->peer_rx_rate); in ath10k_wmi_10x_op_pull_fw_stats()
3100 list_add_tail(&dst->list, &stats->peers); in ath10k_wmi_10x_op_pull_fw_stats()
3110 const struct wmi_10_2_stats_event *ev = (void *)skb->data; in ath10k_wmi_10_2_op_pull_fw_stats()
3117 return -EPROTO; in ath10k_wmi_10_2_op_pull_fw_stats()
3119 num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats); in ath10k_wmi_10_2_op_pull_fw_stats()
3120 num_pdev_ext_stats = __le32_to_cpu(ev->num_pdev_ext_stats); in ath10k_wmi_10_2_op_pull_fw_stats()
3121 num_peer_stats = __le32_to_cpu(ev->num_peer_stats); in ath10k_wmi_10_2_op_pull_fw_stats()
3127 src = (void *)skb->data; in ath10k_wmi_10_2_op_pull_fw_stats()
3129 return -EPROTO; in ath10k_wmi_10_2_op_pull_fw_stats()
3135 ath10k_wmi_pull_pdev_stats_base(&src->base, dst); in ath10k_wmi_10_2_op_pull_fw_stats()
3136 ath10k_wmi_pull_pdev_stats_tx(&src->tx, dst); in ath10k_wmi_10_2_op_pull_fw_stats()
3137 ath10k_wmi_pull_pdev_stats_rx(&src->rx, dst); in ath10k_wmi_10_2_op_pull_fw_stats()
3138 ath10k_wmi_pull_pdev_stats_extra(&src->extra, dst); in ath10k_wmi_10_2_op_pull_fw_stats()
3141 list_add_tail(&dst->list, &stats->pdevs); in ath10k_wmi_10_2_op_pull_fw_stats()
3147 src = (void *)skb->data; in ath10k_wmi_10_2_op_pull_fw_stats()
3149 return -EPROTO; in ath10k_wmi_10_2_op_pull_fw_stats()
3154 * required to parse following sub-structures properly. in ath10k_wmi_10_2_op_pull_fw_stats()
3164 src = (void *)skb->data; in ath10k_wmi_10_2_op_pull_fw_stats()
3166 return -EPROTO; in ath10k_wmi_10_2_op_pull_fw_stats()
3172 ath10k_wmi_pull_peer_stats(&src->old, dst); in ath10k_wmi_10_2_op_pull_fw_stats()
3174 dst->peer_rx_rate = __le32_to_cpu(src->peer_rx_rate); in ath10k_wmi_10_2_op_pull_fw_stats()
3177 list_add_tail(&dst->list, &stats->peers); in ath10k_wmi_10_2_op_pull_fw_stats()
3187 const struct wmi_10_2_stats_event *ev = (void *)skb->data; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3194 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3196 num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3197 num_pdev_ext_stats = __le32_to_cpu(ev->num_pdev_ext_stats); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3198 num_peer_stats = __le32_to_cpu(ev->num_peer_stats); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3204 src = (void *)skb->data; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3206 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3212 ath10k_wmi_pull_pdev_stats_base(&src->base, dst); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3213 ath10k_wmi_pull_pdev_stats_tx(&src->tx, dst); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3214 ath10k_wmi_pull_pdev_stats_rx(&src->rx, dst); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3215 ath10k_wmi_pull_pdev_stats_extra(&src->extra, dst); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3218 list_add_tail(&dst->list, &stats->pdevs); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3224 src = (void *)skb->data; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3226 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3231 * required to parse following sub-structures properly. in ath10k_wmi_10_2_4_op_pull_fw_stats()
3242 if (test_bit(WMI_SERVICE_PEER_STATS, ar->wmi.svc_map)) in ath10k_wmi_10_2_4_op_pull_fw_stats()
3247 src = (void *)skb->data; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3249 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3255 ath10k_wmi_pull_peer_stats(&src->common.old, dst); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3257 dst->peer_rx_rate = __le32_to_cpu(src->common.peer_rx_rate); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3260 dst->rx_duration = __le32_to_cpu(src->rx_duration); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3263 list_add_tail(&dst->list, &stats->peers); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3273 const struct wmi_10_2_stats_event *ev = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3283 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3285 num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats); in ath10k_wmi_10_4_op_pull_fw_stats()
3286 num_pdev_ext_stats = __le32_to_cpu(ev->num_pdev_ext_stats); in ath10k_wmi_10_4_op_pull_fw_stats()
3287 num_vdev_stats = __le32_to_cpu(ev->num_vdev_stats); in ath10k_wmi_10_4_op_pull_fw_stats()
3288 num_peer_stats = __le32_to_cpu(ev->num_peer_stats); in ath10k_wmi_10_4_op_pull_fw_stats()
3289 num_bcnflt_stats = __le32_to_cpu(ev->num_bcnflt_stats); in ath10k_wmi_10_4_op_pull_fw_stats()
3290 stats_id = __le32_to_cpu(ev->stats_id); in ath10k_wmi_10_4_op_pull_fw_stats()
3296 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3298 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3304 ath10k_wmi_pull_pdev_stats_base(&src->base, dst); in ath10k_wmi_10_4_op_pull_fw_stats()
3305 ath10k_wmi_10_4_pull_pdev_stats_tx(&src->tx, dst); in ath10k_wmi_10_4_op_pull_fw_stats()
3306 ath10k_wmi_pull_pdev_stats_rx(&src->rx, dst); in ath10k_wmi_10_4_op_pull_fw_stats()
3307 dst->rx_ovfl_errs = __le32_to_cpu(src->rx_ovfl_errs); in ath10k_wmi_10_4_op_pull_fw_stats()
3308 ath10k_wmi_pull_pdev_stats_extra(&src->extra, dst); in ath10k_wmi_10_4_op_pull_fw_stats()
3310 list_add_tail(&dst->list, &stats->pdevs); in ath10k_wmi_10_4_op_pull_fw_stats()
3316 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3318 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3323 * required to parse following sub-structures properly. in ath10k_wmi_10_4_op_pull_fw_stats()
3333 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3335 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3342 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3344 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3351 list_add_tail(&dst->list, &stats->peers); in ath10k_wmi_10_4_op_pull_fw_stats()
3357 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3359 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3364 * required to parse following sub-structures properly. in ath10k_wmi_10_4_op_pull_fw_stats()
3369 stats->extended = true; in ath10k_wmi_10_4_op_pull_fw_stats()
3375 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3377 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3383 ether_addr_copy(dst->peer_macaddr, in ath10k_wmi_10_4_op_pull_fw_stats()
3384 src->peer_macaddr.addr); in ath10k_wmi_10_4_op_pull_fw_stats()
3385 dst->rx_duration = __le32_to_cpu(src->rx_duration); in ath10k_wmi_10_4_op_pull_fw_stats()
3386 list_add_tail(&dst->list, &stats->peers_extd); in ath10k_wmi_10_4_op_pull_fw_stats()
3395 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3397 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3403 list_add_tail(&dst->list, &stats->vdevs); in ath10k_wmi_10_4_op_pull_fw_stats()
3420 struct wmi_vdev_start_response_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_vdev_start_ev()
3422 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_vdev_start_ev()
3423 return -EPROTO; in ath10k_wmi_op_pull_vdev_start_ev()
3426 arg->vdev_id = ev->vdev_id; in ath10k_wmi_op_pull_vdev_start_ev()
3427 arg->req_id = ev->req_id; in ath10k_wmi_op_pull_vdev_start_ev()
3428 arg->resp_type = ev->resp_type; in ath10k_wmi_op_pull_vdev_start_ev()
3429 arg->status = ev->status; in ath10k_wmi_op_pull_vdev_start_ev()
3442 ar->last_wmi_vdev_start_status = 0; in ath10k_wmi_event_vdev_start_resp()
3447 ar->last_wmi_vdev_start_status = ret; in ath10k_wmi_event_vdev_start_resp()
3453 ath10k_warn(ar, "vdev-start-response reports status error: %d (%s)\n", in ath10k_wmi_event_vdev_start_resp()
3455 "chan-invalid" : "unknown"); in ath10k_wmi_event_vdev_start_resp()
3459 ar->last_wmi_vdev_start_status = -EINVAL; in ath10k_wmi_event_vdev_start_resp()
3463 complete(&ar->vdev_setup_done); in ath10k_wmi_event_vdev_start_resp()
3469 complete(&ar->vdev_setup_done); in ath10k_wmi_event_vdev_stopped()
3476 struct wmi_peer_sta_kickout_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_peer_kick_ev()
3478 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_peer_kick_ev()
3479 return -EPROTO; in ath10k_wmi_op_pull_peer_kick_ev()
3482 arg->mac_addr = ev->peer_macaddr.addr; in ath10k_wmi_op_pull_peer_kick_ev()
3505 sta = ieee80211_find_sta_by_ifaddr(ar->hw, arg.mac_addr, NULL); in ath10k_wmi_event_peer_sta_kickout()
3526 * sleep transition from connected stations - these do not
3547 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)bcn->data; in ath10k_wmi_update_tim()
3557 tim_len = tim_info->tim_len ? __le32_to_cpu(tim_info->tim_len) : 1; in ath10k_wmi_update_tim()
3562 if (__le32_to_cpu(tim_info->tim_changed)) { in ath10k_wmi_update_tim()
3565 if (sizeof(arvif->u.ap.tim_bitmap) < tim_len) { in ath10k_wmi_update_tim()
3567 tim_len, sizeof(arvif->u.ap.tim_bitmap)); in ath10k_wmi_update_tim()
3568 tim_len = sizeof(arvif->u.ap.tim_bitmap); in ath10k_wmi_update_tim()
3572 t = tim_info->tim_bitmap[i / 4]; in ath10k_wmi_update_tim()
3574 arvif->u.ap.tim_bitmap[i] = (v >> ((i % 4) * 8)) & 0xFF; in ath10k_wmi_update_tim()
3580 arvif->u.ap.tim_len = 0; in ath10k_wmi_update_tim()
3582 if (arvif->u.ap.tim_bitmap[i]) in ath10k_wmi_update_tim()
3583 arvif->u.ap.tim_len = i; in ath10k_wmi_update_tim()
3585 arvif->u.ap.tim_len++; in ath10k_wmi_update_tim()
3588 ies = bcn->data; in ath10k_wmi_update_tim()
3589 ies += ieee80211_hdrlen(hdr->frame_control); in ath10k_wmi_update_tim()
3593 (u8 *)skb_tail_pointer(bcn) - ies); in ath10k_wmi_update_tim()
3595 if (arvif->vdev_type != WMI_VDEV_TYPE_IBSS) in ath10k_wmi_update_tim()
3602 pvm_len = ie_len - 3; /* exclude dtim count, dtim period, bmap ctl */ in ath10k_wmi_update_tim()
3604 if (pvm_len < arvif->u.ap.tim_len) { in ath10k_wmi_update_tim()
3605 int expand_size = tim_len - pvm_len; in ath10k_wmi_update_tim()
3606 int move_size = skb_tail_pointer(bcn) - (ie + 2 + ie_len); in ath10k_wmi_update_tim()
3625 tim->bitmap_ctrl = !!__le32_to_cpu(tim_info->tim_mcast); in ath10k_wmi_update_tim()
3626 memcpy(tim->virtual_map, arvif->u.ap.tim_bitmap, pvm_len); in ath10k_wmi_update_tim()
3628 if (tim->dtim_count == 0) { in ath10k_wmi_update_tim()
3629 ATH10K_SKB_CB(bcn)->flags |= ATH10K_SKB_F_DTIM_ZERO; in ath10k_wmi_update_tim()
3631 if (__le32_to_cpu(tim_info->tim_mcast) == 1) in ath10k_wmi_update_tim()
3632 ATH10K_SKB_CB(bcn)->flags |= ATH10K_SKB_F_DELIVER_CAB; in ath10k_wmi_update_tim()
3636 tim->dtim_count, tim->dtim_period, in ath10k_wmi_update_tim()
3637 tim->bitmap_ctrl, pvm_len); in ath10k_wmi_update_tim()
3644 if (!arvif->vif->p2p) in ath10k_wmi_update_noa()
3647 ath10k_dbg(ar, ATH10K_DBG_MGMT, "noa changed: %d\n", noa->changed); in ath10k_wmi_update_noa()
3649 if (noa->changed & WMI_P2P_NOA_CHANGED_BIT) in ath10k_wmi_update_noa()
3652 if (arvif->u.ap.noa_data) in ath10k_wmi_update_noa()
3653 if (!pskb_expand_head(bcn, 0, arvif->u.ap.noa_len, GFP_ATOMIC)) in ath10k_wmi_update_noa()
3654 skb_put_data(bcn, arvif->u.ap.noa_data, in ath10k_wmi_update_noa()
3655 arvif->u.ap.noa_len); in ath10k_wmi_update_noa()
3661 struct wmi_host_swba_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_swba_ev()
3665 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_swba_ev()
3666 return -EPROTO; in ath10k_wmi_op_pull_swba_ev()
3669 arg->vdev_map = ev->vdev_map; in ath10k_wmi_op_pull_swba_ev()
3671 for (i = 0, map = __le32_to_cpu(ev->vdev_map); map; map >>= 1) { in ath10k_wmi_op_pull_swba_ev()
3678 if (WARN_ON_ONCE(i == ARRAY_SIZE(arg->tim_info))) in ath10k_wmi_op_pull_swba_ev()
3681 if (__le32_to_cpu(ev->bcn_info[i].tim_info.tim_len) > in ath10k_wmi_op_pull_swba_ev()
3682 sizeof(ev->bcn_info[i].tim_info.tim_bitmap)) { in ath10k_wmi_op_pull_swba_ev()
3684 return -EPROTO; in ath10k_wmi_op_pull_swba_ev()
3687 arg->tim_info[i].tim_len = ev->bcn_info[i].tim_info.tim_len; in ath10k_wmi_op_pull_swba_ev()
3688 arg->tim_info[i].tim_mcast = ev->bcn_info[i].tim_info.tim_mcast; in ath10k_wmi_op_pull_swba_ev()
3689 arg->tim_info[i].tim_bitmap = in ath10k_wmi_op_pull_swba_ev()
3690 ev->bcn_info[i].tim_info.tim_bitmap; in ath10k_wmi_op_pull_swba_ev()
3691 arg->tim_info[i].tim_changed = in ath10k_wmi_op_pull_swba_ev()
3692 ev->bcn_info[i].tim_info.tim_changed; in ath10k_wmi_op_pull_swba_ev()
3693 arg->tim_info[i].tim_num_ps_pending = in ath10k_wmi_op_pull_swba_ev()
3694 ev->bcn_info[i].tim_info.tim_num_ps_pending; in ath10k_wmi_op_pull_swba_ev()
3696 arg->noa_info[i] = &ev->bcn_info[i].p2p_noa_info; in ath10k_wmi_op_pull_swba_ev()
3707 struct wmi_10_2_4_host_swba_event *ev = (void *)skb->data; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3711 if (skb->len < sizeof(*ev)) in ath10k_wmi_10_2_4_op_pull_swba_ev()
3712 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3715 arg->vdev_map = ev->vdev_map; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3717 for (i = 0, map = __le32_to_cpu(ev->vdev_map); map; map >>= 1) { in ath10k_wmi_10_2_4_op_pull_swba_ev()
3724 if (WARN_ON_ONCE(i == ARRAY_SIZE(arg->tim_info))) in ath10k_wmi_10_2_4_op_pull_swba_ev()
3727 if (__le32_to_cpu(ev->bcn_info[i].tim_info.tim_len) > in ath10k_wmi_10_2_4_op_pull_swba_ev()
3728 sizeof(ev->bcn_info[i].tim_info.tim_bitmap)) { in ath10k_wmi_10_2_4_op_pull_swba_ev()
3730 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3733 arg->tim_info[i].tim_len = ev->bcn_info[i].tim_info.tim_len; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3734 arg->tim_info[i].tim_mcast = ev->bcn_info[i].tim_info.tim_mcast; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3735 arg->tim_info[i].tim_bitmap = in ath10k_wmi_10_2_4_op_pull_swba_ev()
3736 ev->bcn_info[i].tim_info.tim_bitmap; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3737 arg->tim_info[i].tim_changed = in ath10k_wmi_10_2_4_op_pull_swba_ev()
3738 ev->bcn_info[i].tim_info.tim_changed; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3739 arg->tim_info[i].tim_num_ps_pending = in ath10k_wmi_10_2_4_op_pull_swba_ev()
3740 ev->bcn_info[i].tim_info.tim_num_ps_pending; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3751 struct wmi_10_4_host_swba_event *ev = (void *)skb->data; in ath10k_wmi_10_4_op_pull_swba_ev()
3755 if (skb->len < sizeof(*ev)) in ath10k_wmi_10_4_op_pull_swba_ev()
3756 return -EPROTO; in ath10k_wmi_10_4_op_pull_swba_ev()
3759 arg->vdev_map = ev->vdev_map; in ath10k_wmi_10_4_op_pull_swba_ev()
3761 for (i = 0, map = __le32_to_cpu(ev->vdev_map); map; map >>= 1) { in ath10k_wmi_10_4_op_pull_swba_ev()
3768 if (WARN_ON_ONCE(i == ARRAY_SIZE(arg->tim_info))) in ath10k_wmi_10_4_op_pull_swba_ev()
3771 if (__le32_to_cpu(ev->bcn_info[i].tim_info.tim_len) > in ath10k_wmi_10_4_op_pull_swba_ev()
3772 sizeof(ev->bcn_info[i].tim_info.tim_bitmap)) { in ath10k_wmi_10_4_op_pull_swba_ev()
3774 return -EPROTO; in ath10k_wmi_10_4_op_pull_swba_ev()
3777 tim_len = __le32_to_cpu(ev->bcn_info[i].tim_info.tim_len); in ath10k_wmi_10_4_op_pull_swba_ev()
3780 tim_len -= 4; in ath10k_wmi_10_4_op_pull_swba_ev()
3781 arg->tim_info[i].tim_len = __cpu_to_le32(tim_len); in ath10k_wmi_10_4_op_pull_swba_ev()
3783 arg->tim_info[i].tim_len = 0; in ath10k_wmi_10_4_op_pull_swba_ev()
3786 arg->tim_info[i].tim_mcast = ev->bcn_info[i].tim_info.tim_mcast; in ath10k_wmi_10_4_op_pull_swba_ev()
3787 arg->tim_info[i].tim_bitmap = in ath10k_wmi_10_4_op_pull_swba_ev()
3788 ev->bcn_info[i].tim_info.tim_bitmap; in ath10k_wmi_10_4_op_pull_swba_ev()
3789 arg->tim_info[i].tim_changed = in ath10k_wmi_10_4_op_pull_swba_ev()
3790 ev->bcn_info[i].tim_info.tim_changed; in ath10k_wmi_10_4_op_pull_swba_ev()
3791 arg->tim_info[i].tim_num_ps_pending = in ath10k_wmi_10_4_op_pull_swba_ev()
3792 ev->bcn_info[i].tim_info.tim_num_ps_pending; in ath10k_wmi_10_4_op_pull_swba_ev()
3813 int i = -1; in ath10k_wmi_event_host_swba()
3849 __le32_to_cpu(tim_info->tim_len), in ath10k_wmi_event_host_swba()
3850 __le32_to_cpu(tim_info->tim_mcast), in ath10k_wmi_event_host_swba()
3851 __le32_to_cpu(tim_info->tim_changed), in ath10k_wmi_event_host_swba()
3852 __le32_to_cpu(tim_info->tim_num_ps_pending), in ath10k_wmi_event_host_swba()
3853 __le32_to_cpu(tim_info->tim_bitmap[3]), in ath10k_wmi_event_host_swba()
3854 __le32_to_cpu(tim_info->tim_bitmap[2]), in ath10k_wmi_event_host_swba()
3855 __le32_to_cpu(tim_info->tim_bitmap[1]), in ath10k_wmi_event_host_swba()
3856 __le32_to_cpu(tim_info->tim_bitmap[0])); in ath10k_wmi_event_host_swba()
3872 if (!arvif->is_up) in ath10k_wmi_event_host_swba()
3881 if (arvif->vif->csa_active && in ath10k_wmi_event_host_swba()
3882 ieee80211_beacon_cntdwn_is_complete(arvif->vif)) { in ath10k_wmi_event_host_swba()
3883 ieee80211_csa_finish(arvif->vif); in ath10k_wmi_event_host_swba()
3887 bcn = ieee80211_beacon_get(ar->hw, arvif->vif); in ath10k_wmi_event_host_swba()
3893 ath10k_tx_h_seq_no(arvif->vif, bcn); in ath10k_wmi_event_host_swba()
3897 spin_lock_bh(&ar->data_lock); in ath10k_wmi_event_host_swba()
3899 if (arvif->beacon) { in ath10k_wmi_event_host_swba()
3900 switch (arvif->beacon_state) { in ath10k_wmi_event_host_swba()
3905 arvif->vdev_id); in ath10k_wmi_event_host_swba()
3909 arvif->vdev_id); in ath10k_wmi_event_host_swba()
3917 if (!arvif->beacon_buf) { in ath10k_wmi_event_host_swba()
3918 paddr = dma_map_single(arvif->ar->dev, bcn->data, in ath10k_wmi_event_host_swba()
3919 bcn->len, DMA_TO_DEVICE); in ath10k_wmi_event_host_swba()
3920 ret = dma_mapping_error(arvif->ar->dev, paddr); in ath10k_wmi_event_host_swba()
3928 ATH10K_SKB_CB(bcn)->paddr = paddr; in ath10k_wmi_event_host_swba()
3930 if (bcn->len > IEEE80211_MAX_FRAME_LEN) { in ath10k_wmi_event_host_swba()
3931 ath10k_warn(ar, "trimming beacon %d -> %d bytes!\n", in ath10k_wmi_event_host_swba()
3932 bcn->len, IEEE80211_MAX_FRAME_LEN); in ath10k_wmi_event_host_swba()
3935 memcpy(arvif->beacon_buf, bcn->data, bcn->len); in ath10k_wmi_event_host_swba()
3936 ATH10K_SKB_CB(bcn)->paddr = arvif->beacon_paddr; in ath10k_wmi_event_host_swba()
3939 arvif->beacon = bcn; in ath10k_wmi_event_host_swba()
3940 arvif->beacon_state = ATH10K_BEACON_SCHEDULED; in ath10k_wmi_event_host_swba()
3942 trace_ath10k_tx_hdr(ar, bcn->data, bcn->len); in ath10k_wmi_event_host_swba()
3943 trace_ath10k_tx_payload(ar, bcn->data, bcn->len); in ath10k_wmi_event_host_swba()
3946 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_event_host_swba()
3965 if (ar->dfs_block_radar_events) in ath10k_radar_detected()
3968 ieee80211_radar_detected(ar->hw); in ath10k_radar_detected()
3978 reinit_completion(&ar->wmi.radar_confirm); in ath10k_radar_confirmation_work()
3980 spin_lock_bh(&ar->data_lock); in ath10k_radar_confirmation_work()
3981 memcpy(&radar_info, &ar->last_radar_info, sizeof(radar_info)); in ath10k_radar_confirmation_work()
3982 spin_unlock_bh(&ar->data_lock); in ath10k_radar_confirmation_work()
3990 time_left = wait_for_completion_timeout(&ar->wmi.radar_confirm, in ath10k_radar_confirmation_work()
4013 spin_lock_bh(&ar->data_lock); in ath10k_radar_confirmation_work()
4014 if (ar->radar_conf_state != ATH10K_RADAR_CONFIRMATION_STOPPED) in ath10k_radar_confirmation_work()
4015 ar->radar_conf_state = ATH10K_RADAR_CONFIRMATION_IDLE; in ath10k_radar_confirmation_work()
4016 spin_unlock_bh(&ar->data_lock); in ath10k_radar_confirmation_work()
4032 reg0 = __le32_to_cpu(rr->reg0); in ath10k_dfs_radar_report()
4033 reg1 = __le32_to_cpu(rr->reg1); in ath10k_dfs_radar_report()
4053 if (!ar->dfs_detector) in ath10k_dfs_radar_report()
4056 spin_lock_bh(&ar->data_lock); in ath10k_dfs_radar_report()
4057 ch = ar->rx_channel; in ath10k_dfs_radar_report()
4061 ch = ar->tgt_oper_chan; in ath10k_dfs_radar_report()
4063 spin_unlock_bh(&ar->data_lock); in ath10k_dfs_radar_report()
4071 tsf32l = phyerr->tsf_timestamp; in ath10k_dfs_radar_report()
4076 rssi = phyerr->rssi_combined; in ath10k_dfs_radar_report()
4085 pe.freq = ch->center_freq; in ath10k_dfs_radar_report()
4095 if (!ar->dfs_detector->add_pulse(ar->dfs_detector, &pe, &rs)) { in ath10k_dfs_radar_report()
4101 if ((test_bit(WMI_SERVICE_HOST_DFS_CHECK_SUPPORT, ar->wmi.svc_map)) && in ath10k_dfs_radar_report()
4102 ar->dfs_detector->region == NL80211_DFS_FCC) { in ath10k_dfs_radar_report()
4107 spin_lock_bh(&ar->data_lock); in ath10k_dfs_radar_report()
4108 if (ar->radar_conf_state != ATH10K_RADAR_CONFIRMATION_IDLE) { in ath10k_dfs_radar_report()
4109 spin_unlock_bh(&ar->data_lock); in ath10k_dfs_radar_report()
4112 ar->radar_conf_state = ATH10K_RADAR_CONFIRMATION_INPROGRESS; in ath10k_dfs_radar_report()
4113 radar_info = &ar->last_radar_info; in ath10k_dfs_radar_report()
4115 radar_info->pri_min = rs.pri_min; in ath10k_dfs_radar_report()
4116 radar_info->pri_max = rs.pri_max; in ath10k_dfs_radar_report()
4117 radar_info->width_min = rs.width_min; in ath10k_dfs_radar_report()
4118 radar_info->width_max = rs.width_max; in ath10k_dfs_radar_report()
4120 radar_info->sidx_min = MS(reg0, RADAR_REPORT_REG0_PULSE_SIDX); in ath10k_dfs_radar_report()
4121 radar_info->sidx_max = MS(reg0, RADAR_REPORT_REG0_PULSE_SIDX); in ath10k_dfs_radar_report()
4125 radar_info->pri_min, radar_info->pri_max, in ath10k_dfs_radar_report()
4126 radar_info->width_min, radar_info->width_max, in ath10k_dfs_radar_report()
4127 radar_info->sidx_min, radar_info->sidx_max); in ath10k_dfs_radar_report()
4128 ieee80211_queue_work(ar->hw, &ar->radar_confirmation_work); in ath10k_dfs_radar_report()
4129 spin_unlock_bh(&ar->data_lock); in ath10k_dfs_radar_report()
4145 reg0 = __le32_to_cpu(fftr->reg0); in ath10k_dfs_fft_report()
4146 reg1 = __le32_to_cpu(fftr->reg1); in ath10k_dfs_fft_report()
4147 rssi = phyerr->rssi_combined; in ath10k_dfs_fft_report()
4169 return -EINVAL; in ath10k_dfs_fft_report()
4185 buf_len = phyerr->buf_len; in ath10k_wmi_event_dfs()
4188 phyerr->phy_err_code, phyerr->rssi_combined, in ath10k_wmi_event_dfs()
4189 phyerr->tsf_timestamp, tsf, buf_len); in ath10k_wmi_event_dfs()
4204 tlv = (struct phyerr_tlv *)&phyerr->buf[i]; in ath10k_wmi_event_dfs()
4205 tlv_len = __le16_to_cpu(tlv->len); in ath10k_wmi_event_dfs()
4206 tlv_buf = &phyerr->buf[i + sizeof(*tlv)]; in ath10k_wmi_event_dfs()
4209 tlv_len, tlv->tag, tlv->sig); in ath10k_wmi_event_dfs()
4211 switch (tlv->tag) { in ath10k_wmi_event_dfs()
4250 buf_len = phyerr->buf_len; in ath10k_wmi_event_spectral_scan()
4259 tlv = (struct phyerr_tlv *)&phyerr->buf[i]; in ath10k_wmi_event_spectral_scan()
4260 tlv_len = __le16_to_cpu(tlv->len); in ath10k_wmi_event_spectral_scan()
4261 tlv_buf = &phyerr->buf[i + sizeof(*tlv)]; in ath10k_wmi_event_spectral_scan()
4269 switch (tlv->tag) { in ath10k_wmi_event_spectral_scan()
4277 fftr_len = tlv_len - sizeof(*fftr); in ath10k_wmi_event_spectral_scan()
4298 struct wmi_phyerr_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_phyerr_ev_hdr()
4300 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_phyerr_ev_hdr()
4301 return -EPROTO; in ath10k_wmi_op_pull_phyerr_ev_hdr()
4303 arg->num_phyerrs = __le32_to_cpu(ev->num_phyerrs); in ath10k_wmi_op_pull_phyerr_ev_hdr()
4304 arg->tsf_l32 = __le32_to_cpu(ev->tsf_l32); in ath10k_wmi_op_pull_phyerr_ev_hdr()
4305 arg->tsf_u32 = __le32_to_cpu(ev->tsf_u32); in ath10k_wmi_op_pull_phyerr_ev_hdr()
4306 arg->buf_len = skb->len - sizeof(*ev); in ath10k_wmi_op_pull_phyerr_ev_hdr()
4307 arg->phyerrs = ev->phyerrs; in ath10k_wmi_op_pull_phyerr_ev_hdr()
4316 struct wmi_10_4_phyerr_event *ev = (void *)skb->data; in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4318 if (skb->len < sizeof(*ev)) in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4319 return -EPROTO; in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4322 arg->num_phyerrs = 1; in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4324 arg->tsf_l32 = __le32_to_cpu(ev->tsf_l32); in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4325 arg->tsf_u32 = __le32_to_cpu(ev->tsf_u32); in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4326 arg->buf_len = skb->len; in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4327 arg->phyerrs = skb->data; in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4343 return -EINVAL; in ath10k_wmi_op_pull_phyerr_ev()
4346 arg->tsf_timestamp = __le32_to_cpu(phyerr->tsf_timestamp); in ath10k_wmi_op_pull_phyerr_ev()
4347 arg->freq1 = __le16_to_cpu(phyerr->freq1); in ath10k_wmi_op_pull_phyerr_ev()
4348 arg->freq2 = __le16_to_cpu(phyerr->freq2); in ath10k_wmi_op_pull_phyerr_ev()
4349 arg->rssi_combined = phyerr->rssi_combined; in ath10k_wmi_op_pull_phyerr_ev()
4350 arg->chan_width_mhz = phyerr->chan_width_mhz; in ath10k_wmi_op_pull_phyerr_ev()
4351 arg->buf_len = __le32_to_cpu(phyerr->buf_len); in ath10k_wmi_op_pull_phyerr_ev()
4352 arg->buf = phyerr->buf; in ath10k_wmi_op_pull_phyerr_ev()
4353 arg->hdr_len = sizeof(*phyerr); in ath10k_wmi_op_pull_phyerr_ev()
4356 arg->nf_chains[i] = __le16_to_cpu(phyerr->nf_chains[i]); in ath10k_wmi_op_pull_phyerr_ev()
4358 switch (phyerr->phy_err_code) { in ath10k_wmi_op_pull_phyerr_ev()
4360 arg->phy_err_code = PHY_ERROR_SPECTRAL_SCAN; in ath10k_wmi_op_pull_phyerr_ev()
4363 arg->phy_err_code = PHY_ERROR_FALSE_RADAR_EXT; in ath10k_wmi_op_pull_phyerr_ev()
4366 arg->phy_err_code = PHY_ERROR_RADAR; in ath10k_wmi_op_pull_phyerr_ev()
4369 arg->phy_err_code = PHY_ERROR_UNKNOWN; in ath10k_wmi_op_pull_phyerr_ev()
4388 return -EINVAL; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4391 arg->tsf_timestamp = __le32_to_cpu(phyerr->tsf_timestamp); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4392 arg->freq1 = __le16_to_cpu(phyerr->freq1); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4393 arg->freq2 = __le16_to_cpu(phyerr->freq2); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4394 arg->rssi_combined = phyerr->rssi_combined; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4395 arg->chan_width_mhz = phyerr->chan_width_mhz; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4396 arg->buf_len = __le32_to_cpu(phyerr->buf_len); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4397 arg->buf = phyerr->buf; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4398 arg->hdr_len = sizeof(*phyerr); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4401 arg->nf_chains[i] = __le16_to_cpu(phyerr->nf_chains[i]); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4403 phy_err_mask = __le32_to_cpu(phyerr->phy_err_mask[0]); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4406 arg->phy_err_code = PHY_ERROR_SPECTRAL_SCAN; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4408 arg->phy_err_code = PHY_ERROR_RADAR; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4410 arg->phy_err_code = PHY_ERROR_UNKNOWN; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4454 left_len -= phyerr_arg.hdr_len; in ath10k_wmi_event_phyerr()
4463 left_len -= buf_len; in ath10k_wmi_event_phyerr()
4488 struct wmi_dfs_status_ev_arg *ev = (void *)skb->data; in ath10k_wmi_10_4_op_pull_dfs_status_ev()
4490 if (skb->len < sizeof(*ev)) in ath10k_wmi_10_4_op_pull_dfs_status_ev()
4491 return -EPROTO; in ath10k_wmi_10_4_op_pull_dfs_status_ev()
4493 arg->status = ev->status; in ath10k_wmi_10_4_op_pull_dfs_status_ev()
4522 complete(&ar->wmi.radar_confirm); in ath10k_wmi_event_dfs_status_check()
4576 for (i = 0; i < sizeof(buf) - 1; i++) { in ath10k_wmi_event_debug_print()
4577 if (i >= skb->len) in ath10k_wmi_event_debug_print()
4580 c = skb->data[i]; in ath10k_wmi_event_debug_print()
4591 if (i == sizeof(buf) - 1) in ath10k_wmi_event_debug_print()
4592 ath10k_warn(ar, "wmi debug print truncated: %d\n", skb->len); in ath10k_wmi_event_debug_print()
4595 if (skb->data[i - 1] == '\n') in ath10k_wmi_event_debug_print()
4596 i--; in ath10k_wmi_event_debug_print()
4636 complete(&ar->wow.wakeup_completed); in ath10k_wmi_event_wow_wakeup_host()
4662 ch = num_chains - 1; in ath10k_tpc_config_get_rate()
4664 tpc = min_t(u8, ev->rates_array[rate_idx], ev->max_reg_allow_pow[ch]); in ath10k_tpc_config_get_rate()
4666 if (__le32_to_cpu(ev->num_tx_chain) <= 1) in ath10k_tpc_config_get_rate()
4672 stm_idx = num_streams - 1; in ath10k_tpc_config_get_rate()
4679 ev->max_reg_allow_pow_agstbc[ch - 1][stm_idx]); in ath10k_tpc_config_get_rate()
4683 ev->max_reg_allow_pow_agtxbf[ch - 1][stm_idx]); in ath10k_tpc_config_get_rate()
4687 ev->max_reg_allow_pow_agcdd[ch - 1][stm_idx]); in ath10k_tpc_config_get_rate()
4709 flags = __le32_to_cpu(ev->flags); in ath10k_tpc_config_disp_tables()
4715 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_tpc_config_disp_tables()
4722 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_tpc_config_disp_tables()
4729 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_tpc_config_disp_tables()
4740 for (i = 0; i < tpc_stats->rate_max; i++) { in ath10k_tpc_config_disp_tables()
4746 for (j = 0; j < tpc_stats->num_tx_chain; j++) { in ath10k_tpc_config_disp_tables()
4753 tpc_stats->tpc_table[type].pream_idx[i] = pream_idx; in ath10k_tpc_config_disp_tables()
4754 tpc_stats->tpc_table[type].rate_code[i] = rate_code[i]; in ath10k_tpc_config_disp_tables()
4755 memcpy(tpc_stats->tpc_table[type].tpc_value[i], in ath10k_tpc_config_disp_tables()
4865 ev = (struct wmi_pdev_tpc_config_event *)skb->data; in ath10k_wmi_event_pdev_tpc_config()
4867 num_tx_chain = __le32_to_cpu(ev->num_tx_chain); in ath10k_wmi_event_pdev_tpc_config()
4875 rate_max = __le32_to_cpu(ev->rate_max); in ath10k_wmi_event_pdev_tpc_config()
4889 tpc_stats->chan_freq = __le32_to_cpu(ev->chan_freq); in ath10k_wmi_event_pdev_tpc_config()
4890 tpc_stats->phy_mode = __le32_to_cpu(ev->phy_mode); in ath10k_wmi_event_pdev_tpc_config()
4891 tpc_stats->ctl = __le32_to_cpu(ev->ctl); in ath10k_wmi_event_pdev_tpc_config()
4892 tpc_stats->reg_domain = __le32_to_cpu(ev->reg_domain); in ath10k_wmi_event_pdev_tpc_config()
4893 tpc_stats->twice_antenna_gain = a_sle32_to_cpu(ev->twice_antenna_gain); in ath10k_wmi_event_pdev_tpc_config()
4894 tpc_stats->twice_antenna_reduction = in ath10k_wmi_event_pdev_tpc_config()
4895 __le32_to_cpu(ev->twice_antenna_reduction); in ath10k_wmi_event_pdev_tpc_config()
4896 tpc_stats->power_limit = __le32_to_cpu(ev->power_limit); in ath10k_wmi_event_pdev_tpc_config()
4897 tpc_stats->twice_max_rd_power = __le32_to_cpu(ev->twice_max_rd_power); in ath10k_wmi_event_pdev_tpc_config()
4898 tpc_stats->num_tx_chain = num_tx_chain; in ath10k_wmi_event_pdev_tpc_config()
4899 tpc_stats->rate_max = rate_max; in ath10k_wmi_event_pdev_tpc_config()
4915 __le32_to_cpu(ev->chan_freq), in ath10k_wmi_event_pdev_tpc_config()
4916 __le32_to_cpu(ev->phy_mode), in ath10k_wmi_event_pdev_tpc_config()
4917 __le32_to_cpu(ev->ctl), in ath10k_wmi_event_pdev_tpc_config()
4918 __le32_to_cpu(ev->reg_domain), in ath10k_wmi_event_pdev_tpc_config()
4919 a_sle32_to_cpu(ev->twice_antenna_gain), in ath10k_wmi_event_pdev_tpc_config()
4920 __le32_to_cpu(ev->twice_antenna_reduction), in ath10k_wmi_event_pdev_tpc_config()
4921 __le32_to_cpu(ev->power_limit), in ath10k_wmi_event_pdev_tpc_config()
4922 __le32_to_cpu(ev->twice_max_rd_power) / 2, in ath10k_wmi_event_pdev_tpc_config()
4923 __le32_to_cpu(ev->num_tx_chain), in ath10k_wmi_event_pdev_tpc_config()
4924 __le32_to_cpu(ev->rate_max)); in ath10k_wmi_event_pdev_tpc_config()
4939 ch = num_chains - 1; in ath10k_wmi_tpc_final_get_rate()
4940 stm_idx = num_streams - 1; in ath10k_wmi_tpc_final_get_rate()
4941 pream = -1; in ath10k_wmi_tpc_final_get_rate()
4943 if (__le32_to_cpu(ev->chan_freq) <= 2483) { in ath10k_wmi_tpc_final_get_rate()
4963 pream = -1; in ath10k_wmi_tpc_final_get_rate()
4968 if (__le32_to_cpu(ev->chan_freq) >= 5180) { in ath10k_wmi_tpc_final_get_rate()
4988 pream = -1; in ath10k_wmi_tpc_final_get_rate()
4993 if (pream == -1) { in ath10k_wmi_tpc_final_get_rate()
4995 pream_idx, __le32_to_cpu(ev->chan_freq)); in ath10k_wmi_tpc_final_get_rate()
5001 tpc = min_t(u8, ev->rates_array[rate_idx], in ath10k_wmi_tpc_final_get_rate()
5002 ev->max_reg_allow_pow[ch]); in ath10k_wmi_tpc_final_get_rate()
5004 tpc = min_t(u8, min_t(u8, ev->rates_array[rate_idx], in ath10k_wmi_tpc_final_get_rate()
5005 ev->max_reg_allow_pow[ch]), in ath10k_wmi_tpc_final_get_rate()
5006 ev->ctl_power_table[0][pream][stm_idx]); in ath10k_wmi_tpc_final_get_rate()
5008 if (__le32_to_cpu(ev->num_tx_chain) <= 1) in ath10k_wmi_tpc_final_get_rate()
5019 pow_agstbc = ev->max_reg_allow_pow_agstbc[ch - 1][stm_idx]; in ath10k_wmi_tpc_final_get_rate()
5024 ev->ctl_power_table[0][pream][stm_idx]); in ath10k_wmi_tpc_final_get_rate()
5027 pow_agtxbf = ev->max_reg_allow_pow_agtxbf[ch - 1][stm_idx]; in ath10k_wmi_tpc_final_get_rate()
5032 ev->ctl_power_table[1][pream][stm_idx]); in ath10k_wmi_tpc_final_get_rate()
5035 pow_agcdd = ev->max_reg_allow_pow_agcdd[ch - 1][stm_idx]; in ath10k_wmi_tpc_final_get_rate()
5040 ev->ctl_power_table[0][pream][stm_idx]); in ath10k_wmi_tpc_final_get_rate()
5063 flags = __le32_to_cpu(ev->flags); in ath10k_wmi_tpc_stats_final_disp_tables()
5069 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_wmi_tpc_stats_final_disp_tables()
5076 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_wmi_tpc_stats_final_disp_tables()
5083 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_wmi_tpc_stats_final_disp_tables()
5094 for (i = 0; i < tpc_stats->rate_max; i++) { in ath10k_wmi_tpc_stats_final_disp_tables()
5100 for (j = 0; j < tpc_stats->num_tx_chain; j++) { in ath10k_wmi_tpc_stats_final_disp_tables()
5107 tpc_stats->tpc_table_final[type].pream_idx[i] = pream_idx; in ath10k_wmi_tpc_stats_final_disp_tables()
5108 tpc_stats->tpc_table_final[type].rate_code[i] = rate_code[i]; in ath10k_wmi_tpc_stats_final_disp_tables()
5109 memcpy(tpc_stats->tpc_table_final[type].tpc_value[i], in ath10k_wmi_tpc_stats_final_disp_tables()
5122 ev = (struct wmi_pdev_tpc_final_table_event *)skb->data; in ath10k_wmi_event_tpc_final_table()
5124 num_tx_chain = __le32_to_cpu(ev->num_tx_chain); in ath10k_wmi_event_tpc_final_table()
5131 rate_max = __le32_to_cpu(ev->rate_max); in ath10k_wmi_event_tpc_final_table()
5145 tpc_stats->chan_freq = __le32_to_cpu(ev->chan_freq); in ath10k_wmi_event_tpc_final_table()
5146 tpc_stats->phy_mode = __le32_to_cpu(ev->phy_mode); in ath10k_wmi_event_tpc_final_table()
5147 tpc_stats->ctl = __le32_to_cpu(ev->ctl); in ath10k_wmi_event_tpc_final_table()
5148 tpc_stats->reg_domain = __le32_to_cpu(ev->reg_domain); in ath10k_wmi_event_tpc_final_table()
5149 tpc_stats->twice_antenna_gain = a_sle32_to_cpu(ev->twice_antenna_gain); in ath10k_wmi_event_tpc_final_table()
5150 tpc_stats->twice_antenna_reduction = in ath10k_wmi_event_tpc_final_table()
5151 __le32_to_cpu(ev->twice_antenna_reduction); in ath10k_wmi_event_tpc_final_table()
5152 tpc_stats->power_limit = __le32_to_cpu(ev->power_limit); in ath10k_wmi_event_tpc_final_table()
5153 tpc_stats->twice_max_rd_power = __le32_to_cpu(ev->twice_max_rd_power); in ath10k_wmi_event_tpc_final_table()
5154 tpc_stats->num_tx_chain = num_tx_chain; in ath10k_wmi_event_tpc_final_table()
5155 tpc_stats->rate_max = rate_max; in ath10k_wmi_event_tpc_final_table()
5171 __le32_to_cpu(ev->chan_freq), in ath10k_wmi_event_tpc_final_table()
5172 __le32_to_cpu(ev->phy_mode), in ath10k_wmi_event_tpc_final_table()
5173 __le32_to_cpu(ev->ctl), in ath10k_wmi_event_tpc_final_table()
5174 __le32_to_cpu(ev->reg_domain), in ath10k_wmi_event_tpc_final_table()
5175 a_sle32_to_cpu(ev->twice_antenna_gain), in ath10k_wmi_event_tpc_final_table()
5176 __le32_to_cpu(ev->twice_antenna_reduction), in ath10k_wmi_event_tpc_final_table()
5177 __le32_to_cpu(ev->power_limit), in ath10k_wmi_event_tpc_final_table()
5178 __le32_to_cpu(ev->twice_max_rd_power) / 2, in ath10k_wmi_event_tpc_final_table()
5179 __le32_to_cpu(ev->num_tx_chain), in ath10k_wmi_event_tpc_final_table()
5180 __le32_to_cpu(ev->rate_max)); in ath10k_wmi_event_tpc_final_table()
5194 if (skb->len < sizeof(*ev)) { in ath10k_wmi_handle_tdls_peer_event()
5196 skb->len); in ath10k_wmi_handle_tdls_peer_event()
5200 ev = (struct wmi_tdls_peer_event *)skb->data; in ath10k_wmi_handle_tdls_peer_event()
5201 vdev_id = __le32_to_cpu(ev->vdev_id); in ath10k_wmi_handle_tdls_peer_event()
5202 peer_status = __le32_to_cpu(ev->peer_status); in ath10k_wmi_handle_tdls_peer_event()
5203 peer_reason = __le32_to_cpu(ev->peer_reason); in ath10k_wmi_handle_tdls_peer_event()
5205 spin_lock_bh(&ar->data_lock); in ath10k_wmi_handle_tdls_peer_event()
5206 peer = ath10k_peer_find(ar, vdev_id, ev->peer_macaddr.addr); in ath10k_wmi_handle_tdls_peer_event()
5207 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_handle_tdls_peer_event()
5211 ev->peer_macaddr.addr); in ath10k_wmi_handle_tdls_peer_event()
5235 ieee80211_tdls_oper_request(arvif->vif, ev->peer_macaddr.addr, in ath10k_wmi_handle_tdls_peer_event()
5241 ev->peer_macaddr.addr, peer_reason); in ath10k_wmi_handle_tdls_peer_event()
5259 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_peer_sta_ps_state_chg()
5261 ev = (struct wmi_peer_sta_ps_state_chg_event *)skb->data; in ath10k_wmi_event_peer_sta_ps_state_chg()
5262 ether_addr_copy(peer_addr, ev->peer_macaddr.addr); in ath10k_wmi_event_peer_sta_ps_state_chg()
5266 sta = ieee80211_find_sta_by_ifaddr(ar->hw, peer_addr, NULL); in ath10k_wmi_event_peer_sta_ps_state_chg()
5274 arsta = (struct ath10k_sta *)sta->drv_priv; in ath10k_wmi_event_peer_sta_ps_state_chg()
5275 arsta->peer_ps_state = __le32_to_cpu(ev->peer_ps_state); in ath10k_wmi_event_peer_sta_ps_state_chg()
5332 int idx = ar->wmi.num_mem_chunks; in ath10k_wmi_alloc_chunk()
5336 vaddr = dma_alloc_coherent(ar->dev, pool_size, &paddr, GFP_KERNEL); in ath10k_wmi_alloc_chunk()
5339 return -ENOMEM; in ath10k_wmi_alloc_chunk()
5341 ar->wmi.mem_chunks[idx].vaddr = vaddr; in ath10k_wmi_alloc_chunk()
5342 ar->wmi.mem_chunks[idx].paddr = paddr; in ath10k_wmi_alloc_chunk()
5343 ar->wmi.mem_chunks[idx].len = pool_size; in ath10k_wmi_alloc_chunk()
5344 ar->wmi.mem_chunks[idx].req_id = req_id; in ath10k_wmi_alloc_chunk()
5345 ar->wmi.num_mem_chunks++; in ath10k_wmi_alloc_chunk()
5360 num_units -= ret; in ath10k_wmi_alloc_host_mem()
5376 if (ar->wmi.num_mem_chunks != num_mem_reqs) in ath10k_wmi_is_host_mem_allocated()
5380 req_id = __le32_to_cpu(mem_reqs[i]->req_id); in ath10k_wmi_is_host_mem_allocated()
5381 num_units = __le32_to_cpu(mem_reqs[i]->num_units); in ath10k_wmi_is_host_mem_allocated()
5382 unit_size = __le32_to_cpu(mem_reqs[i]->unit_size); in ath10k_wmi_is_host_mem_allocated()
5383 num_unit_info = __le32_to_cpu(mem_reqs[i]->num_unit_info); in ath10k_wmi_is_host_mem_allocated()
5386 if (ar->num_active_peers) in ath10k_wmi_is_host_mem_allocated()
5387 num_units = ar->num_active_peers + 1; in ath10k_wmi_is_host_mem_allocated()
5389 num_units = ar->max_num_peers + 1; in ath10k_wmi_is_host_mem_allocated()
5391 num_units = ar->max_num_peers + 1; in ath10k_wmi_is_host_mem_allocated()
5393 num_units = ar->max_num_vdevs + 1; in ath10k_wmi_is_host_mem_allocated()
5397 for (j = 0; j < ar->wmi.num_mem_chunks; j++) { in ath10k_wmi_is_host_mem_allocated()
5398 if (ar->wmi.mem_chunks[j].req_id == req_id) { in ath10k_wmi_is_host_mem_allocated()
5400 if (ar->wmi.mem_chunks[j].len == pool_size) { in ath10k_wmi_is_host_mem_allocated()
5420 if (skb->len < sizeof(*ev)) in ath10k_wmi_main_op_pull_svc_rdy_ev()
5421 return -EPROTO; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5423 ev = (void *)skb->data; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5425 arg->min_tx_power = ev->hw_min_tx_power; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5426 arg->max_tx_power = ev->hw_max_tx_power; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5427 arg->ht_cap = ev->ht_cap_info; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5428 arg->vht_cap = ev->vht_cap_info; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5429 arg->vht_supp_mcs = ev->vht_supp_mcs; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5430 arg->sw_ver0 = ev->sw_version; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5431 arg->sw_ver1 = ev->sw_version_1; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5432 arg->phy_capab = ev->phy_capability; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5433 arg->num_rf_chains = ev->num_rf_chains; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5434 arg->eeprom_rd = ev->hal_reg_capabilities.eeprom_rd; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5435 arg->low_2ghz_chan = ev->hal_reg_capabilities.low_2ghz_chan; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5436 arg->high_2ghz_chan = ev->hal_reg_capabilities.high_2ghz_chan; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5437 arg->low_5ghz_chan = ev->hal_reg_capabilities.low_5ghz_chan; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5438 arg->high_5ghz_chan = ev->hal_reg_capabilities.high_5ghz_chan; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5439 arg->num_mem_reqs = ev->num_mem_reqs; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5440 arg->service_map = ev->wmi_service_bitmap; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5441 arg->service_map_len = sizeof(ev->wmi_service_bitmap); in ath10k_wmi_main_op_pull_svc_rdy_ev()
5443 n = min_t(size_t, __le32_to_cpu(arg->num_mem_reqs), in ath10k_wmi_main_op_pull_svc_rdy_ev()
5444 ARRAY_SIZE(arg->mem_reqs)); in ath10k_wmi_main_op_pull_svc_rdy_ev()
5446 arg->mem_reqs[i] = &ev->mem_reqs[i]; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5448 if (skb->len < in ath10k_wmi_main_op_pull_svc_rdy_ev()
5449 __le32_to_cpu(arg->num_mem_reqs) * sizeof(arg->mem_reqs[0])) in ath10k_wmi_main_op_pull_svc_rdy_ev()
5450 return -EPROTO; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5462 if (skb->len < sizeof(*ev)) in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5463 return -EPROTO; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5465 ev = (void *)skb->data; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5467 arg->min_tx_power = ev->hw_min_tx_power; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5468 arg->max_tx_power = ev->hw_max_tx_power; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5469 arg->ht_cap = ev->ht_cap_info; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5470 arg->vht_cap = ev->vht_cap_info; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5471 arg->vht_supp_mcs = ev->vht_supp_mcs; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5472 arg->sw_ver0 = ev->sw_version; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5473 arg->phy_capab = ev->phy_capability; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5474 arg->num_rf_chains = ev->num_rf_chains; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5475 arg->eeprom_rd = ev->hal_reg_capabilities.eeprom_rd; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5476 arg->low_2ghz_chan = ev->hal_reg_capabilities.low_2ghz_chan; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5477 arg->high_2ghz_chan = ev->hal_reg_capabilities.high_2ghz_chan; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5478 arg->low_5ghz_chan = ev->hal_reg_capabilities.low_5ghz_chan; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5479 arg->high_5ghz_chan = ev->hal_reg_capabilities.high_5ghz_chan; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5480 arg->num_mem_reqs = ev->num_mem_reqs; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5481 arg->service_map = ev->wmi_service_bitmap; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5482 arg->service_map_len = sizeof(ev->wmi_service_bitmap); in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5484 /* Deliberately skipping ev->sys_cap_info as WMI and WMI-TLV have in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5487 * WMI interface (only from WMI-TLV) safest it to skip it. in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5490 n = min_t(size_t, __le32_to_cpu(arg->num_mem_reqs), in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5491 ARRAY_SIZE(arg->mem_reqs)); in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5493 arg->mem_reqs[i] = &ev->mem_reqs[i]; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5495 if (skb->len < in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5496 __le32_to_cpu(arg->num_mem_reqs) * sizeof(arg->mem_reqs[0])) in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5497 return -EPROTO; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5505 struct sk_buff *skb = ar->svc_rdy_skb; in ath10k_wmi_event_service_ready_work()
5522 ath10k_wmi_map_svc(ar, arg.service_map, ar->wmi.svc_map, in ath10k_wmi_event_service_ready_work()
5525 ar->hw_min_tx_power = __le32_to_cpu(arg.min_tx_power); in ath10k_wmi_event_service_ready_work()
5526 ar->hw_max_tx_power = __le32_to_cpu(arg.max_tx_power); in ath10k_wmi_event_service_ready_work()
5527 ar->ht_cap_info = __le32_to_cpu(arg.ht_cap); in ath10k_wmi_event_service_ready_work()
5528 ar->vht_cap_info = __le32_to_cpu(arg.vht_cap); in ath10k_wmi_event_service_ready_work()
5529 ar->vht_supp_mcs = __le32_to_cpu(arg.vht_supp_mcs); in ath10k_wmi_event_service_ready_work()
5530 ar->fw_version_major = in ath10k_wmi_event_service_ready_work()
5532 ar->fw_version_minor = (__le32_to_cpu(arg.sw_ver0) & 0x00ffffff); in ath10k_wmi_event_service_ready_work()
5533 ar->fw_version_release = in ath10k_wmi_event_service_ready_work()
5535 ar->fw_version_build = (__le32_to_cpu(arg.sw_ver1) & 0x0000ffff); in ath10k_wmi_event_service_ready_work()
5536 ar->phy_capability = __le32_to_cpu(arg.phy_capab); in ath10k_wmi_event_service_ready_work()
5537 ar->num_rf_chains = __le32_to_cpu(arg.num_rf_chains); in ath10k_wmi_event_service_ready_work()
5538 ar->hw_eeprom_rd = __le32_to_cpu(arg.eeprom_rd); in ath10k_wmi_event_service_ready_work()
5539 ar->low_2ghz_chan = __le32_to_cpu(arg.low_2ghz_chan); in ath10k_wmi_event_service_ready_work()
5540 ar->high_2ghz_chan = __le32_to_cpu(arg.high_2ghz_chan); in ath10k_wmi_event_service_ready_work()
5541 ar->low_5ghz_chan = __le32_to_cpu(arg.low_5ghz_chan); in ath10k_wmi_event_service_ready_work()
5542 ar->high_5ghz_chan = __le32_to_cpu(arg.high_5ghz_chan); in ath10k_wmi_event_service_ready_work()
5543 ar->sys_cap_info = __le32_to_cpu(arg.sys_cap_info); in ath10k_wmi_event_service_ready_work()
5548 ar->sys_cap_info); in ath10k_wmi_event_service_ready_work()
5550 if (ar->num_rf_chains > ar->max_spatial_stream) { in ath10k_wmi_event_service_ready_work()
5552 ar->num_rf_chains, ar->max_spatial_stream); in ath10k_wmi_event_service_ready_work()
5553 ar->num_rf_chains = ar->max_spatial_stream; in ath10k_wmi_event_service_ready_work()
5556 if (!ar->cfg_tx_chainmask) { in ath10k_wmi_event_service_ready_work()
5557 ar->cfg_tx_chainmask = (1 << ar->num_rf_chains) - 1; in ath10k_wmi_event_service_ready_work()
5558 ar->cfg_rx_chainmask = (1 << ar->num_rf_chains) - 1; in ath10k_wmi_event_service_ready_work()
5561 if (strlen(ar->hw->wiphy->fw_version) == 0) { in ath10k_wmi_event_service_ready_work()
5562 snprintf(ar->hw->wiphy->fw_version, in ath10k_wmi_event_service_ready_work()
5563 sizeof(ar->hw->wiphy->fw_version), in ath10k_wmi_event_service_ready_work()
5565 ar->fw_version_major, in ath10k_wmi_event_service_ready_work()
5566 ar->fw_version_minor, in ath10k_wmi_event_service_ready_work()
5567 ar->fw_version_release, in ath10k_wmi_event_service_ready_work()
5568 ar->fw_version_build); in ath10k_wmi_event_service_ready_work()
5578 if (test_bit(WMI_SERVICE_PEER_CACHING, ar->wmi.svc_map)) { in ath10k_wmi_event_service_ready_work()
5580 ar->running_fw->fw_file.fw_features)) in ath10k_wmi_event_service_ready_work()
5581 ar->num_active_peers = TARGET_10_4_QCACHE_ACTIVE_PEERS_PFC + in ath10k_wmi_event_service_ready_work()
5582 ar->max_num_vdevs; in ath10k_wmi_event_service_ready_work()
5584 ar->num_active_peers = TARGET_10_4_QCACHE_ACTIVE_PEERS + in ath10k_wmi_event_service_ready_work()
5585 ar->max_num_vdevs; in ath10k_wmi_event_service_ready_work()
5587 ar->max_num_peers = TARGET_10_4_NUM_QCACHE_PEERS_MAX + in ath10k_wmi_event_service_ready_work()
5588 ar->max_num_vdevs; in ath10k_wmi_event_service_ready_work()
5589 ar->num_tids = ar->num_active_peers * 2; in ath10k_wmi_event_service_ready_work()
5590 ar->max_num_stations = TARGET_10_4_NUM_QCACHE_PEERS_MAX; in ath10k_wmi_event_service_ready_work()
5610 req_id = __le32_to_cpu(arg.mem_reqs[i]->req_id); in ath10k_wmi_event_service_ready_work()
5611 num_units = __le32_to_cpu(arg.mem_reqs[i]->num_units); in ath10k_wmi_event_service_ready_work()
5612 unit_size = __le32_to_cpu(arg.mem_reqs[i]->unit_size); in ath10k_wmi_event_service_ready_work()
5613 num_unit_info = __le32_to_cpu(arg.mem_reqs[i]->num_unit_info); in ath10k_wmi_event_service_ready_work()
5616 if (ar->num_active_peers) in ath10k_wmi_event_service_ready_work()
5617 num_units = ar->num_active_peers + 1; in ath10k_wmi_event_service_ready_work()
5619 num_units = ar->max_num_peers + 1; in ath10k_wmi_event_service_ready_work()
5626 num_units = ar->max_num_peers + 1; in ath10k_wmi_event_service_ready_work()
5628 num_units = ar->max_num_vdevs + 1; in ath10k_wmi_event_service_ready_work()
5634 __le32_to_cpu(arg.mem_reqs[i]->num_units), in ath10k_wmi_event_service_ready_work()
5666 ar->svc_rdy_skb = NULL; in ath10k_wmi_event_service_ready_work()
5667 complete(&ar->wmi.service_ready); in ath10k_wmi_event_service_ready_work()
5672 ar->svc_rdy_skb = skb; in ath10k_wmi_event_service_ready()
5673 queue_work(ar->workqueue_aux, &ar->svc_rdy_work); in ath10k_wmi_event_service_ready()
5679 struct wmi_ready_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_rdy_ev()
5681 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_rdy_ev()
5682 return -EPROTO; in ath10k_wmi_op_pull_rdy_ev()
5685 arg->sw_version = ev->sw_version; in ath10k_wmi_op_pull_rdy_ev()
5686 arg->abi_version = ev->abi_version; in ath10k_wmi_op_pull_rdy_ev()
5687 arg->status = ev->status; in ath10k_wmi_op_pull_rdy_ev()
5688 arg->mac_addr = ev->mac_addr.addr; in ath10k_wmi_op_pull_rdy_ev()
5696 struct wmi_roam_ev *ev = (void *)skb->data; in ath10k_wmi_op_pull_roam_ev()
5698 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_roam_ev()
5699 return -EPROTO; in ath10k_wmi_op_pull_roam_ev()
5702 arg->vdev_id = ev->vdev_id; in ath10k_wmi_op_pull_roam_ev()
5703 arg->reason = ev->reason; in ath10k_wmi_op_pull_roam_ev()
5712 struct wmi_echo_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_echo_ev()
5714 arg->value = ev->value; in ath10k_wmi_op_pull_echo_ev()
5737 if (is_zero_ether_addr(ar->mac_addr)) in ath10k_wmi_event_ready()
5738 ether_addr_copy(ar->mac_addr, arg.mac_addr); in ath10k_wmi_event_ready()
5739 complete(&ar->wmi.unified_ready); in ath10k_wmi_event_ready()
5754 ath10k_wmi_map_svc_ext(ar, arg.service_map_ext, ar->wmi.svc_map, in ath10k_wmi_event_service_available()
5762 ev = (struct wmi_pdev_temperature_event *)skb->data; in ath10k_wmi_event_temperature()
5763 if (WARN_ON(skb->len < sizeof(*ev))) in ath10k_wmi_event_temperature()
5764 return -EPROTO; in ath10k_wmi_event_temperature()
5766 ath10k_thermal_event_temperature(ar, __le32_to_cpu(ev->temperature)); in ath10k_wmi_event_temperature()
5775 u64 busy, total, tx, rx, rx_bss; in ath10k_wmi_event_pdev_bss_chan_info() local
5777 u32 cc_freq_hz = ar->hw_params.channel_counters_freq_hz; in ath10k_wmi_event_pdev_bss_chan_info()
5780 ev = (struct wmi_pdev_bss_chan_info_event *)skb->data; in ath10k_wmi_event_pdev_bss_chan_info()
5781 if (WARN_ON(skb->len < sizeof(*ev))) in ath10k_wmi_event_pdev_bss_chan_info()
5782 return -EPROTO; in ath10k_wmi_event_pdev_bss_chan_info()
5784 freq = __le32_to_cpu(ev->freq); in ath10k_wmi_event_pdev_bss_chan_info()
5785 noise_floor = __le32_to_cpu(ev->noise_floor); in ath10k_wmi_event_pdev_bss_chan_info()
5786 busy = __le64_to_cpu(ev->cycle_busy); in ath10k_wmi_event_pdev_bss_chan_info()
5787 total = __le64_to_cpu(ev->cycle_total); in ath10k_wmi_event_pdev_bss_chan_info()
5788 tx = __le64_to_cpu(ev->cycle_tx); in ath10k_wmi_event_pdev_bss_chan_info()
5789 rx = __le64_to_cpu(ev->cycle_rx); in ath10k_wmi_event_pdev_bss_chan_info()
5790 rx_bss = __le64_to_cpu(ev->cycle_rx_bss); in ath10k_wmi_event_pdev_bss_chan_info()
5793 …"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()
5794 freq, noise_floor, busy, total, tx, rx, rx_bss); in ath10k_wmi_event_pdev_bss_chan_info()
5796 spin_lock_bh(&ar->data_lock); in ath10k_wmi_event_pdev_bss_chan_info()
5798 if (idx >= ARRAY_SIZE(ar->survey)) { in ath10k_wmi_event_pdev_bss_chan_info()
5804 survey = &ar->survey[idx]; in ath10k_wmi_event_pdev_bss_chan_info()
5806 survey->noise = noise_floor; in ath10k_wmi_event_pdev_bss_chan_info()
5807 survey->time = div_u64(total, cc_freq_hz); in ath10k_wmi_event_pdev_bss_chan_info()
5808 survey->time_busy = div_u64(busy, cc_freq_hz); in ath10k_wmi_event_pdev_bss_chan_info()
5809 survey->time_rx = div_u64(rx_bss, cc_freq_hz); in ath10k_wmi_event_pdev_bss_chan_info()
5810 survey->time_tx = div_u64(tx, cc_freq_hz); in ath10k_wmi_event_pdev_bss_chan_info()
5811 survey->filled |= (SURVEY_INFO_NOISE_DBM | in ath10k_wmi_event_pdev_bss_chan_info()
5817 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_event_pdev_bss_chan_info()
5818 complete(&ar->bss_survey_done); in ath10k_wmi_event_pdev_bss_chan_info()
5824 if (ar->hw_params.hw_ops->set_coverage_class) { in ath10k_wmi_queue_set_coverage_class_work()
5825 spin_lock_bh(&ar->data_lock); in ath10k_wmi_queue_set_coverage_class_work()
5830 * coverage class has a non-zero value. in ath10k_wmi_queue_set_coverage_class_work()
5832 if (ar->fw_coverage.coverage_class) in ath10k_wmi_queue_set_coverage_class_work()
5833 queue_work(ar->workqueue, &ar->set_coverage_class_work); in ath10k_wmi_queue_set_coverage_class_work()
5835 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_queue_set_coverage_class_work()
5844 cmd_hdr = (struct wmi_cmd_hdr *)skb->data; in ath10k_wmi_op_rx()
5845 id = MS(__le32_to_cpu(cmd_hdr->cmd_id), WMI_CMD_HDR_CMD_ID); in ath10k_wmi_op_rx()
5850 trace_ath10k_wmi_event(ar, id, skb->data, skb->len); in ath10k_wmi_op_rx()
5972 cmd_hdr = (struct wmi_cmd_hdr *)skb->data; in ath10k_wmi_10_1_op_rx()
5973 id = MS(__le32_to_cpu(cmd_hdr->cmd_id), WMI_CMD_HDR_CMD_ID); in ath10k_wmi_10_1_op_rx()
5978 trace_ath10k_wmi_event(ar, id, skb->data, skb->len); in ath10k_wmi_10_1_op_rx()
6103 cmd_hdr = (struct wmi_cmd_hdr *)skb->data; in ath10k_wmi_10_2_op_rx()
6104 id = MS(__le32_to_cpu(cmd_hdr->cmd_id), WMI_CMD_HDR_CMD_ID); in ath10k_wmi_10_2_op_rx()
6109 trace_ath10k_wmi_event(ar, id, skb->data, skb->len); in ath10k_wmi_10_2_op_rx()
6252 cmd_hdr = (struct wmi_cmd_hdr *)skb->data; in ath10k_wmi_10_4_op_rx()
6253 id = MS(__le32_to_cpu(cmd_hdr->cmd_id), WMI_CMD_HDR_CMD_ID); in ath10k_wmi_10_4_op_rx()
6258 trace_ath10k_wmi_event(ar, id, skb->data, skb->len); in ath10k_wmi_10_4_op_rx()
6372 ath10k_warn(ar, "failed to process wmi rx: %d\n", ret); in ath10k_wmi_process_rx()
6381 memset(&ar->wmi.svc_map, 0, sizeof(ar->wmi.svc_map)); in ath10k_wmi_connect()
6394 status = ath10k_htc_connect_service(&ar->htc, &conn_req, &conn_resp); in ath10k_wmi_connect()
6401 ar->wmi.eid = conn_resp.eid; in ath10k_wmi_connect()
6414 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_set_base_macaddr()
6416 cmd = (struct wmi_pdev_set_base_macaddr_cmd *)skb->data; in ath10k_wmi_op_gen_pdev_set_base_macaddr()
6417 ether_addr_copy(cmd->mac_addr.addr, macaddr); in ath10k_wmi_op_gen_pdev_set_base_macaddr()
6434 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_set_rd()
6436 cmd = (struct wmi_pdev_set_regdomain_cmd *)skb->data; in ath10k_wmi_op_gen_pdev_set_rd()
6437 cmd->reg_domain = __cpu_to_le32(rd); in ath10k_wmi_op_gen_pdev_set_rd()
6438 cmd->reg_domain_2G = __cpu_to_le32(rd2g); in ath10k_wmi_op_gen_pdev_set_rd()
6439 cmd->reg_domain_5G = __cpu_to_le32(rd5g); in ath10k_wmi_op_gen_pdev_set_rd()
6440 cmd->conformance_test_limit_2G = __cpu_to_le32(ctl2g); in ath10k_wmi_op_gen_pdev_set_rd()
6441 cmd->conformance_test_limit_5G = __cpu_to_le32(ctl5g); in ath10k_wmi_op_gen_pdev_set_rd()
6459 return ERR_PTR(-ENOMEM); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6461 cmd = (struct wmi_pdev_set_regdomain_cmd_10x *)skb->data; in ath10k_wmi_10x_op_gen_pdev_set_rd()
6462 cmd->reg_domain = __cpu_to_le32(rd); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6463 cmd->reg_domain_2G = __cpu_to_le32(rd2g); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6464 cmd->reg_domain_5G = __cpu_to_le32(rd5g); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6465 cmd->conformance_test_limit_2G = __cpu_to_le32(ctl2g); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6466 cmd->conformance_test_limit_5G = __cpu_to_le32(ctl5g); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6467 cmd->dfs_domain = __cpu_to_le32(dfs_reg); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6483 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_suspend()
6485 cmd = (struct wmi_pdev_suspend_cmd *)skb->data; in ath10k_wmi_op_gen_pdev_suspend()
6486 cmd->suspend_opt = __cpu_to_le32(suspend_opt); in ath10k_wmi_op_gen_pdev_suspend()
6498 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_resume()
6512 return ERR_PTR(-EOPNOTSUPP); in ath10k_wmi_op_gen_pdev_set_param()
6517 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_set_param()
6519 cmd = (struct wmi_pdev_set_param_cmd *)skb->data; in ath10k_wmi_op_gen_pdev_set_param()
6520 cmd->param_id = __cpu_to_le32(id); in ath10k_wmi_op_gen_pdev_set_param()
6521 cmd->param_value = __cpu_to_le32(value); in ath10k_wmi_op_gen_pdev_set_param()
6534 chunks->count = __cpu_to_le32(ar->wmi.num_mem_chunks); in ath10k_wmi_put_host_mem_chunks()
6536 for (i = 0; i < ar->wmi.num_mem_chunks; i++) { in ath10k_wmi_put_host_mem_chunks()
6537 chunk = &chunks->items[i]; in ath10k_wmi_put_host_mem_chunks()
6538 chunk->ptr = __cpu_to_le32(ar->wmi.mem_chunks[i].paddr); in ath10k_wmi_put_host_mem_chunks()
6539 chunk->size = __cpu_to_le32(ar->wmi.mem_chunks[i].len); in ath10k_wmi_put_host_mem_chunks()
6540 chunk->req_id = __cpu_to_le32(ar->wmi.mem_chunks[i].req_id); in ath10k_wmi_put_host_mem_chunks()
6545 ar->wmi.mem_chunks[i].len, in ath10k_wmi_put_host_mem_chunks()
6546 (unsigned long long)ar->wmi.mem_chunks[i].paddr); in ath10k_wmi_put_host_mem_chunks()
6573 config.rx_decap_mode = __cpu_to_le32(ar->wmi.rx_decap_mode); in ath10k_wmi_op_gen_init()
6608 ar->wmi.num_mem_chunks)); in ath10k_wmi_op_gen_init()
6610 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_init()
6612 cmd = (struct wmi_init_cmd *)buf->data; in ath10k_wmi_op_gen_init()
6614 memcpy(&cmd->resource_config, &config, sizeof(config)); in ath10k_wmi_op_gen_init()
6615 ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks); in ath10k_wmi_op_gen_init()
6639 config.rx_decap_mode = __cpu_to_le32(ar->wmi.rx_decap_mode); in ath10k_wmi_10_1_op_gen_init()
6671 ar->wmi.num_mem_chunks)); in ath10k_wmi_10_1_op_gen_init()
6673 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_1_op_gen_init()
6675 cmd = (struct wmi_init_cmd_10x *)buf->data; in ath10k_wmi_10_1_op_gen_init()
6677 memcpy(&cmd->resource_config, &config, sizeof(config)); in ath10k_wmi_10_1_op_gen_init()
6678 ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks); in ath10k_wmi_10_1_op_gen_init()
6709 config.rx_decap_mode = __cpu_to_le32(ar->wmi.rx_decap_mode); in ath10k_wmi_10_2_op_gen_init()
6742 ar->wmi.num_mem_chunks)); in ath10k_wmi_10_2_op_gen_init()
6744 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_op_gen_init()
6746 cmd = (struct wmi_init_cmd_10_2 *)buf->data; in ath10k_wmi_10_2_op_gen_init()
6750 if (test_bit(ATH10K_FLAG_BTCOEX, &ar->dev_flags) && in ath10k_wmi_10_2_op_gen_init()
6751 test_bit(WMI_SERVICE_COEX_GPIO, ar->wmi.svc_map)) in ath10k_wmi_10_2_op_gen_init()
6757 if (test_bit(WMI_SERVICE_BSS_CHANNEL_INFO_64, ar->wmi.svc_map)) in ath10k_wmi_10_2_op_gen_init()
6760 cmd->resource_config.feature_mask = __cpu_to_le32(features); in ath10k_wmi_10_2_op_gen_init()
6762 memcpy(&cmd->resource_config.common, &config, sizeof(config)); in ath10k_wmi_10_2_op_gen_init()
6763 ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks); in ath10k_wmi_10_2_op_gen_init()
6775 config.num_vdevs = __cpu_to_le32(ar->max_num_vdevs); in ath10k_wmi_10_4_op_gen_init()
6776 config.num_peers = __cpu_to_le32(ar->max_num_peers); in ath10k_wmi_10_4_op_gen_init()
6777 config.num_active_peers = __cpu_to_le32(ar->num_active_peers); in ath10k_wmi_10_4_op_gen_init()
6778 config.num_tids = __cpu_to_le32(ar->num_tids); in ath10k_wmi_10_4_op_gen_init()
6785 config.tx_chain_mask = __cpu_to_le32(ar->hw_params.tx_chain_mask); in ath10k_wmi_10_4_op_gen_init()
6786 config.rx_chain_mask = __cpu_to_le32(ar->hw_params.rx_chain_mask); in ath10k_wmi_10_4_op_gen_init()
6793 config.rx_decap_mode = __cpu_to_le32(ar->wmi.rx_decap_mode); in ath10k_wmi_10_4_op_gen_init()
6817 config.num_msdu_desc = __cpu_to_le32(ar->htt.max_num_pending_tx); in ath10k_wmi_10_4_op_gen_init()
6836 ar->wmi.num_mem_chunks)); in ath10k_wmi_10_4_op_gen_init()
6838 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_op_gen_init()
6840 cmd = (struct wmi_init_cmd_10_4 *)buf->data; in ath10k_wmi_10_4_op_gen_init()
6841 memcpy(&cmd->resource_config, &config, sizeof(config)); in ath10k_wmi_10_4_op_gen_init()
6842 ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks); in ath10k_wmi_10_4_op_gen_init()
6850 if (arg->ie_len > WLAN_SCAN_PARAMS_MAX_IE_LEN) in ath10k_wmi_start_scan_verify()
6851 return -EINVAL; in ath10k_wmi_start_scan_verify()
6852 if (arg->n_channels > ARRAY_SIZE(arg->channels)) in ath10k_wmi_start_scan_verify()
6853 return -EINVAL; in ath10k_wmi_start_scan_verify()
6854 if (arg->n_ssids > WLAN_SCAN_PARAMS_MAX_SSID) in ath10k_wmi_start_scan_verify()
6855 return -EINVAL; in ath10k_wmi_start_scan_verify()
6856 if (arg->n_bssids > WLAN_SCAN_PARAMS_MAX_BSSID) in ath10k_wmi_start_scan_verify()
6857 return -EINVAL; in ath10k_wmi_start_scan_verify()
6867 if (arg->ie_len) { in ath10k_wmi_start_scan_tlvs_len()
6869 len += roundup(arg->ie_len, 4); in ath10k_wmi_start_scan_tlvs_len()
6872 if (arg->n_channels) { in ath10k_wmi_start_scan_tlvs_len()
6874 len += sizeof(__le32) * arg->n_channels; in ath10k_wmi_start_scan_tlvs_len()
6877 if (arg->n_ssids) { in ath10k_wmi_start_scan_tlvs_len()
6879 len += sizeof(struct wmi_ssid) * arg->n_ssids; in ath10k_wmi_start_scan_tlvs_len()
6882 if (arg->n_bssids) { in ath10k_wmi_start_scan_tlvs_len()
6884 len += sizeof(struct wmi_mac_addr) * arg->n_bssids; in ath10k_wmi_start_scan_tlvs_len()
6897 scan_id |= arg->scan_id; in ath10k_wmi_put_start_scan_common()
6900 scan_req_id |= arg->scan_req_id; in ath10k_wmi_put_start_scan_common()
6902 cmn->scan_id = __cpu_to_le32(scan_id); in ath10k_wmi_put_start_scan_common()
6903 cmn->scan_req_id = __cpu_to_le32(scan_req_id); in ath10k_wmi_put_start_scan_common()
6904 cmn->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_put_start_scan_common()
6905 cmn->scan_priority = __cpu_to_le32(arg->scan_priority); in ath10k_wmi_put_start_scan_common()
6906 cmn->notify_scan_events = __cpu_to_le32(arg->notify_scan_events); in ath10k_wmi_put_start_scan_common()
6907 cmn->dwell_time_active = __cpu_to_le32(arg->dwell_time_active); in ath10k_wmi_put_start_scan_common()
6908 cmn->dwell_time_passive = __cpu_to_le32(arg->dwell_time_passive); in ath10k_wmi_put_start_scan_common()
6909 cmn->min_rest_time = __cpu_to_le32(arg->min_rest_time); in ath10k_wmi_put_start_scan_common()
6910 cmn->max_rest_time = __cpu_to_le32(arg->max_rest_time); in ath10k_wmi_put_start_scan_common()
6911 cmn->repeat_probe_time = __cpu_to_le32(arg->repeat_probe_time); in ath10k_wmi_put_start_scan_common()
6912 cmn->probe_spacing_time = __cpu_to_le32(arg->probe_spacing_time); in ath10k_wmi_put_start_scan_common()
6913 cmn->idle_time = __cpu_to_le32(arg->idle_time); in ath10k_wmi_put_start_scan_common()
6914 cmn->max_scan_time = __cpu_to_le32(arg->max_scan_time); in ath10k_wmi_put_start_scan_common()
6915 cmn->probe_delay = __cpu_to_le32(arg->probe_delay); in ath10k_wmi_put_start_scan_common()
6916 cmn->scan_ctrl_flags = __cpu_to_le32(arg->scan_ctrl_flags); in ath10k_wmi_put_start_scan_common()
6927 void *ptr = tlvs->tlvs; in ath10k_wmi_put_start_scan_tlvs()
6930 if (arg->n_channels) { in ath10k_wmi_put_start_scan_tlvs()
6932 channels->tag = __cpu_to_le32(WMI_CHAN_LIST_TAG); in ath10k_wmi_put_start_scan_tlvs()
6933 channels->num_chan = __cpu_to_le32(arg->n_channels); in ath10k_wmi_put_start_scan_tlvs()
6935 for (i = 0; i < arg->n_channels; i++) in ath10k_wmi_put_start_scan_tlvs()
6936 channels->channel_list[i].freq = in ath10k_wmi_put_start_scan_tlvs()
6937 __cpu_to_le16(arg->channels[i]); in ath10k_wmi_put_start_scan_tlvs()
6940 ptr += sizeof(__le32) * arg->n_channels; in ath10k_wmi_put_start_scan_tlvs()
6943 if (arg->n_ssids) { in ath10k_wmi_put_start_scan_tlvs()
6945 ssids->tag = __cpu_to_le32(WMI_SSID_LIST_TAG); in ath10k_wmi_put_start_scan_tlvs()
6946 ssids->num_ssids = __cpu_to_le32(arg->n_ssids); in ath10k_wmi_put_start_scan_tlvs()
6948 for (i = 0; i < arg->n_ssids; i++) { in ath10k_wmi_put_start_scan_tlvs()
6949 ssids->ssids[i].ssid_len = in ath10k_wmi_put_start_scan_tlvs()
6950 __cpu_to_le32(arg->ssids[i].len); in ath10k_wmi_put_start_scan_tlvs()
6951 memcpy(&ssids->ssids[i].ssid, in ath10k_wmi_put_start_scan_tlvs()
6952 arg->ssids[i].ssid, in ath10k_wmi_put_start_scan_tlvs()
6953 arg->ssids[i].len); in ath10k_wmi_put_start_scan_tlvs()
6957 ptr += sizeof(struct wmi_ssid) * arg->n_ssids; in ath10k_wmi_put_start_scan_tlvs()
6960 if (arg->n_bssids) { in ath10k_wmi_put_start_scan_tlvs()
6962 bssids->tag = __cpu_to_le32(WMI_BSSID_LIST_TAG); in ath10k_wmi_put_start_scan_tlvs()
6963 bssids->num_bssid = __cpu_to_le32(arg->n_bssids); in ath10k_wmi_put_start_scan_tlvs()
6965 for (i = 0; i < arg->n_bssids; i++) in ath10k_wmi_put_start_scan_tlvs()
6966 ether_addr_copy(bssids->bssid_list[i].addr, in ath10k_wmi_put_start_scan_tlvs()
6967 arg->bssids[i].bssid); in ath10k_wmi_put_start_scan_tlvs()
6970 ptr += sizeof(struct wmi_mac_addr) * arg->n_bssids; in ath10k_wmi_put_start_scan_tlvs()
6973 if (arg->ie_len) { in ath10k_wmi_put_start_scan_tlvs()
6975 ie->tag = __cpu_to_le32(WMI_IE_TAG); in ath10k_wmi_put_start_scan_tlvs()
6976 ie->ie_len = __cpu_to_le32(arg->ie_len); in ath10k_wmi_put_start_scan_tlvs()
6977 memcpy(ie->ie_data, arg->ie, arg->ie_len); in ath10k_wmi_put_start_scan_tlvs()
6980 ptr += roundup(arg->ie_len, 4); in ath10k_wmi_put_start_scan_tlvs()
7000 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_start_scan()
7002 cmd = (struct wmi_start_scan_cmd *)skb->data; in ath10k_wmi_op_gen_start_scan()
7004 ath10k_wmi_put_start_scan_common(&cmd->common, arg); in ath10k_wmi_op_gen_start_scan()
7005 ath10k_wmi_put_start_scan_tlvs(&cmd->tlvs, arg); in ath10k_wmi_op_gen_start_scan()
7007 cmd->burst_duration_ms = __cpu_to_le32(0); in ath10k_wmi_op_gen_start_scan()
7029 return ERR_PTR(-ENOMEM); in ath10k_wmi_10x_op_gen_start_scan()
7031 cmd = (struct wmi_10x_start_scan_cmd *)skb->data; in ath10k_wmi_10x_op_gen_start_scan()
7033 ath10k_wmi_put_start_scan_common(&cmd->common, arg); in ath10k_wmi_10x_op_gen_start_scan()
7034 ath10k_wmi_put_start_scan_tlvs(&cmd->tlvs, arg); in ath10k_wmi_10x_op_gen_start_scan()
7044 arg->scan_req_id = 1; in ath10k_wmi_start_scan_init()
7045 arg->scan_priority = WMI_SCAN_PRIORITY_LOW; in ath10k_wmi_start_scan_init()
7046 arg->dwell_time_active = 50; in ath10k_wmi_start_scan_init()
7047 arg->dwell_time_passive = 150; in ath10k_wmi_start_scan_init()
7048 arg->min_rest_time = 50; in ath10k_wmi_start_scan_init()
7049 arg->max_rest_time = 500; in ath10k_wmi_start_scan_init()
7050 arg->repeat_probe_time = 0; in ath10k_wmi_start_scan_init()
7051 arg->probe_spacing_time = 0; in ath10k_wmi_start_scan_init()
7052 arg->idle_time = 0; in ath10k_wmi_start_scan_init()
7053 arg->max_scan_time = 20000; in ath10k_wmi_start_scan_init()
7054 arg->probe_delay = 5; in ath10k_wmi_start_scan_init()
7055 arg->notify_scan_events = WMI_SCAN_EVENT_STARTED in ath10k_wmi_start_scan_init()
7061 arg->scan_ctrl_flags |= WMI_SCAN_CHAN_STAT_EVENT; in ath10k_wmi_start_scan_init()
7062 arg->n_bssids = 1; in ath10k_wmi_start_scan_init()
7063 arg->bssids[0].bssid = "\xFF\xFF\xFF\xFF\xFF\xFF"; in ath10k_wmi_start_scan_init()
7075 if (arg->req_id > 0xFFF) in ath10k_wmi_op_gen_stop_scan()
7076 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_stop_scan()
7077 if (arg->req_type == WMI_SCAN_STOP_ONE && arg->u.scan_id > 0xFFF) in ath10k_wmi_op_gen_stop_scan()
7078 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_stop_scan()
7082 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_stop_scan()
7084 scan_id = arg->u.scan_id; in ath10k_wmi_op_gen_stop_scan()
7087 req_id = arg->req_id; in ath10k_wmi_op_gen_stop_scan()
7090 cmd = (struct wmi_stop_scan_cmd *)skb->data; in ath10k_wmi_op_gen_stop_scan()
7091 cmd->req_type = __cpu_to_le32(arg->req_type); in ath10k_wmi_op_gen_stop_scan()
7092 cmd->vdev_id = __cpu_to_le32(arg->u.vdev_id); in ath10k_wmi_op_gen_stop_scan()
7093 cmd->scan_id = __cpu_to_le32(scan_id); in ath10k_wmi_op_gen_stop_scan()
7094 cmd->scan_req_id = __cpu_to_le32(req_id); in ath10k_wmi_op_gen_stop_scan()
7098 arg->req_id, arg->req_type, arg->u.scan_id); in ath10k_wmi_op_gen_stop_scan()
7113 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_create()
7115 cmd = (struct wmi_vdev_create_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_create()
7116 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_create()
7117 cmd->vdev_type = __cpu_to_le32(type); in ath10k_wmi_op_gen_vdev_create()
7118 cmd->vdev_subtype = __cpu_to_le32(subtype); in ath10k_wmi_op_gen_vdev_create()
7119 ether_addr_copy(cmd->vdev_macaddr.addr, macaddr); in ath10k_wmi_op_gen_vdev_create()
7135 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_delete()
7137 cmd = (struct wmi_vdev_delete_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_delete()
7138 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_delete()
7155 if (WARN_ON(arg->hidden_ssid && !arg->ssid)) in ath10k_wmi_op_gen_vdev_start()
7156 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_vdev_start()
7157 if (WARN_ON(arg->ssid_len > sizeof(cmd->ssid.ssid))) in ath10k_wmi_op_gen_vdev_start()
7158 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_vdev_start()
7167 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_start()
7169 if (arg->hidden_ssid) in ath10k_wmi_op_gen_vdev_start()
7171 if (arg->pmf_enabled) in ath10k_wmi_op_gen_vdev_start()
7174 cmd = (struct wmi_vdev_start_request_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_start()
7175 cmd->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_op_gen_vdev_start()
7176 cmd->disable_hw_ack = __cpu_to_le32(arg->disable_hw_ack); in ath10k_wmi_op_gen_vdev_start()
7177 cmd->beacon_interval = __cpu_to_le32(arg->bcn_intval); in ath10k_wmi_op_gen_vdev_start()
7178 cmd->dtim_period = __cpu_to_le32(arg->dtim_period); in ath10k_wmi_op_gen_vdev_start()
7179 cmd->flags = __cpu_to_le32(flags); in ath10k_wmi_op_gen_vdev_start()
7180 cmd->bcn_tx_rate = __cpu_to_le32(arg->bcn_tx_rate); in ath10k_wmi_op_gen_vdev_start()
7181 cmd->bcn_tx_power = __cpu_to_le32(arg->bcn_tx_power); in ath10k_wmi_op_gen_vdev_start()
7183 if (arg->ssid) { in ath10k_wmi_op_gen_vdev_start()
7184 cmd->ssid.ssid_len = __cpu_to_le32(arg->ssid_len); in ath10k_wmi_op_gen_vdev_start()
7185 memcpy(cmd->ssid.ssid, arg->ssid, arg->ssid_len); in ath10k_wmi_op_gen_vdev_start()
7188 ath10k_wmi_put_wmi_channel(ar, &cmd->chan, &arg->channel); in ath10k_wmi_op_gen_vdev_start()
7192 cmdname, arg->vdev_id, in ath10k_wmi_op_gen_vdev_start()
7193 flags, arg->channel.freq, arg->channel.mode, in ath10k_wmi_op_gen_vdev_start()
7194 cmd->chan.flags, arg->channel.max_power); in ath10k_wmi_op_gen_vdev_start()
7207 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_stop()
7209 cmd = (struct wmi_vdev_stop_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_stop()
7210 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_stop()
7225 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_up()
7227 cmd = (struct wmi_vdev_up_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_up()
7228 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_up()
7229 cmd->vdev_assoc_id = __cpu_to_le32(aid); in ath10k_wmi_op_gen_vdev_up()
7230 ether_addr_copy(cmd->vdev_bssid.addr, bssid); in ath10k_wmi_op_gen_vdev_up()
7246 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_down()
7248 cmd = (struct wmi_vdev_down_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_down()
7249 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_down()
7267 return ERR_PTR(-EOPNOTSUPP); in ath10k_wmi_op_gen_vdev_set_param()
7272 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_set_param()
7274 cmd = (struct wmi_vdev_set_param_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_set_param()
7275 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_set_param()
7276 cmd->param_id = __cpu_to_le32(param_id); in ath10k_wmi_op_gen_vdev_set_param()
7277 cmd->param_value = __cpu_to_le32(param_value); in ath10k_wmi_op_gen_vdev_set_param()
7292 if (arg->key_cipher == WMI_CIPHER_NONE && arg->key_data != NULL) in ath10k_wmi_op_gen_vdev_install_key()
7293 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_vdev_install_key()
7294 if (arg->key_cipher != WMI_CIPHER_NONE && arg->key_data == NULL) in ath10k_wmi_op_gen_vdev_install_key()
7295 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_vdev_install_key()
7297 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd) + arg->key_len); in ath10k_wmi_op_gen_vdev_install_key()
7299 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_install_key()
7301 cmd = (struct wmi_vdev_install_key_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_install_key()
7302 cmd->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_op_gen_vdev_install_key()
7303 cmd->key_idx = __cpu_to_le32(arg->key_idx); in ath10k_wmi_op_gen_vdev_install_key()
7304 cmd->key_flags = __cpu_to_le32(arg->key_flags); in ath10k_wmi_op_gen_vdev_install_key()
7305 cmd->key_cipher = __cpu_to_le32(arg->key_cipher); in ath10k_wmi_op_gen_vdev_install_key()
7306 cmd->key_len = __cpu_to_le32(arg->key_len); in ath10k_wmi_op_gen_vdev_install_key()
7307 cmd->key_txmic_len = __cpu_to_le32(arg->key_txmic_len); in ath10k_wmi_op_gen_vdev_install_key()
7308 cmd->key_rxmic_len = __cpu_to_le32(arg->key_rxmic_len); in ath10k_wmi_op_gen_vdev_install_key()
7310 if (arg->macaddr) in ath10k_wmi_op_gen_vdev_install_key()
7311 ether_addr_copy(cmd->peer_macaddr.addr, arg->macaddr); in ath10k_wmi_op_gen_vdev_install_key()
7312 if (arg->key_data) in ath10k_wmi_op_gen_vdev_install_key()
7313 memcpy(cmd->key_data, arg->key_data, arg->key_len); in ath10k_wmi_op_gen_vdev_install_key()
7317 arg->key_idx, arg->key_cipher, arg->key_len); in ath10k_wmi_op_gen_vdev_install_key()
7330 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_spectral_conf()
7332 cmd = (struct wmi_vdev_spectral_conf_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_spectral_conf()
7333 cmd->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_op_gen_vdev_spectral_conf()
7334 cmd->scan_count = __cpu_to_le32(arg->scan_count); in ath10k_wmi_op_gen_vdev_spectral_conf()
7335 cmd->scan_period = __cpu_to_le32(arg->scan_period); in ath10k_wmi_op_gen_vdev_spectral_conf()
7336 cmd->scan_priority = __cpu_to_le32(arg->scan_priority); in ath10k_wmi_op_gen_vdev_spectral_conf()
7337 cmd->scan_fft_size = __cpu_to_le32(arg->scan_fft_size); in ath10k_wmi_op_gen_vdev_spectral_conf()
7338 cmd->scan_gc_ena = __cpu_to_le32(arg->scan_gc_ena); in ath10k_wmi_op_gen_vdev_spectral_conf()
7339 cmd->scan_restart_ena = __cpu_to_le32(arg->scan_restart_ena); in ath10k_wmi_op_gen_vdev_spectral_conf()
7340 cmd->scan_noise_floor_ref = __cpu_to_le32(arg->scan_noise_floor_ref); in ath10k_wmi_op_gen_vdev_spectral_conf()
7341 cmd->scan_init_delay = __cpu_to_le32(arg->scan_init_delay); in ath10k_wmi_op_gen_vdev_spectral_conf()
7342 cmd->scan_nb_tone_thr = __cpu_to_le32(arg->scan_nb_tone_thr); in ath10k_wmi_op_gen_vdev_spectral_conf()
7343 cmd->scan_str_bin_thr = __cpu_to_le32(arg->scan_str_bin_thr); in ath10k_wmi_op_gen_vdev_spectral_conf()
7344 cmd->scan_wb_rpt_mode = __cpu_to_le32(arg->scan_wb_rpt_mode); in ath10k_wmi_op_gen_vdev_spectral_conf()
7345 cmd->scan_rssi_rpt_mode = __cpu_to_le32(arg->scan_rssi_rpt_mode); in ath10k_wmi_op_gen_vdev_spectral_conf()
7346 cmd->scan_rssi_thr = __cpu_to_le32(arg->scan_rssi_thr); in ath10k_wmi_op_gen_vdev_spectral_conf()
7347 cmd->scan_pwr_format = __cpu_to_le32(arg->scan_pwr_format); in ath10k_wmi_op_gen_vdev_spectral_conf()
7348 cmd->scan_rpt_mode = __cpu_to_le32(arg->scan_rpt_mode); in ath10k_wmi_op_gen_vdev_spectral_conf()
7349 cmd->scan_bin_scale = __cpu_to_le32(arg->scan_bin_scale); in ath10k_wmi_op_gen_vdev_spectral_conf()
7350 cmd->scan_dbm_adj = __cpu_to_le32(arg->scan_dbm_adj); in ath10k_wmi_op_gen_vdev_spectral_conf()
7351 cmd->scan_chn_mask = __cpu_to_le32(arg->scan_chn_mask); in ath10k_wmi_op_gen_vdev_spectral_conf()
7365 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_spectral_enable()
7367 cmd = (struct wmi_vdev_spectral_enable_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_spectral_enable()
7368 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_spectral_enable()
7369 cmd->trigger_cmd = __cpu_to_le32(trigger); in ath10k_wmi_op_gen_vdev_spectral_enable()
7370 cmd->enable_cmd = __cpu_to_le32(enable); in ath10k_wmi_op_gen_vdev_spectral_enable()
7385 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_peer_create()
7387 cmd = (struct wmi_peer_create_cmd *)skb->data; in ath10k_wmi_op_gen_peer_create()
7388 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_peer_create()
7389 ether_addr_copy(cmd->peer_macaddr.addr, peer_addr); in ath10k_wmi_op_gen_peer_create()
7390 cmd->peer_type = __cpu_to_le32(peer_type); in ath10k_wmi_op_gen_peer_create()
7407 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_peer_delete()
7409 cmd = (struct wmi_peer_delete_cmd *)skb->data; in ath10k_wmi_op_gen_peer_delete()
7410 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_peer_delete()
7411 ether_addr_copy(cmd->peer_macaddr.addr, peer_addr); in ath10k_wmi_op_gen_peer_delete()
7428 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_peer_flush()
7430 cmd = (struct wmi_peer_flush_tids_cmd *)skb->data; in ath10k_wmi_op_gen_peer_flush()
7431 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_peer_flush()
7432 cmd->peer_tid_bitmap = __cpu_to_le32(tid_bitmap); in ath10k_wmi_op_gen_peer_flush()
7433 ether_addr_copy(cmd->peer_macaddr.addr, peer_addr); in ath10k_wmi_op_gen_peer_flush()
7452 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_peer_set_param()
7454 cmd = (struct wmi_peer_set_param_cmd *)skb->data; in ath10k_wmi_op_gen_peer_set_param()
7455 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_peer_set_param()
7456 cmd->param_id = __cpu_to_le32(param_id); in ath10k_wmi_op_gen_peer_set_param()
7457 cmd->param_value = __cpu_to_le32(param_value); in ath10k_wmi_op_gen_peer_set_param()
7458 ether_addr_copy(cmd->peer_macaddr.addr, peer_addr); in ath10k_wmi_op_gen_peer_set_param()
7475 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_set_psmode()
7477 cmd = (struct wmi_sta_powersave_mode_cmd *)skb->data; in ath10k_wmi_op_gen_set_psmode()
7478 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_set_psmode()
7479 cmd->sta_ps_mode = __cpu_to_le32(psmode); in ath10k_wmi_op_gen_set_psmode()
7497 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_set_sta_ps()
7499 cmd = (struct wmi_sta_powersave_param_cmd *)skb->data; in ath10k_wmi_op_gen_set_sta_ps()
7500 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_set_sta_ps()
7501 cmd->param_id = __cpu_to_le32(param_id); in ath10k_wmi_op_gen_set_sta_ps()
7502 cmd->param_value = __cpu_to_le32(value); in ath10k_wmi_op_gen_set_sta_ps()
7518 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_set_ap_ps()
7522 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_set_ap_ps()
7524 cmd = (struct wmi_ap_ps_peer_cmd *)skb->data; in ath10k_wmi_op_gen_set_ap_ps()
7525 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_set_ap_ps()
7526 cmd->param_id = __cpu_to_le32(param_id); in ath10k_wmi_op_gen_set_ap_ps()
7527 cmd->param_value = __cpu_to_le32(value); in ath10k_wmi_op_gen_set_ap_ps()
7528 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath10k_wmi_op_gen_set_ap_ps()
7546 skb = ath10k_wmi_alloc_skb(ar, struct_size(cmd, chan_info, arg->n_channels)); in ath10k_wmi_op_gen_scan_chan_list()
7548 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_scan_chan_list()
7550 cmd = (struct wmi_scan_chan_list_cmd *)skb->data; in ath10k_wmi_op_gen_scan_chan_list()
7551 cmd->num_scan_chans = __cpu_to_le32(arg->n_channels); in ath10k_wmi_op_gen_scan_chan_list()
7553 for (i = 0; i < arg->n_channels; i++) { in ath10k_wmi_op_gen_scan_chan_list()
7554 ch = &arg->channels[i]; in ath10k_wmi_op_gen_scan_chan_list()
7555 ci = &cmd->chan_info[i]; in ath10k_wmi_op_gen_scan_chan_list()
7569 cmd->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_peer_assoc_fill()
7570 cmd->peer_new_assoc = __cpu_to_le32(arg->peer_reassoc ? 0 : 1); in ath10k_wmi_peer_assoc_fill()
7571 cmd->peer_associd = __cpu_to_le32(arg->peer_aid); in ath10k_wmi_peer_assoc_fill()
7572 cmd->peer_flags = __cpu_to_le32(arg->peer_flags); in ath10k_wmi_peer_assoc_fill()
7573 cmd->peer_caps = __cpu_to_le32(arg->peer_caps); in ath10k_wmi_peer_assoc_fill()
7574 cmd->peer_listen_intval = __cpu_to_le32(arg->peer_listen_intval); in ath10k_wmi_peer_assoc_fill()
7575 cmd->peer_ht_caps = __cpu_to_le32(arg->peer_ht_caps); in ath10k_wmi_peer_assoc_fill()
7576 cmd->peer_max_mpdu = __cpu_to_le32(arg->peer_max_mpdu); in ath10k_wmi_peer_assoc_fill()
7577 cmd->peer_mpdu_density = __cpu_to_le32(arg->peer_mpdu_density); in ath10k_wmi_peer_assoc_fill()
7578 cmd->peer_rate_caps = __cpu_to_le32(arg->peer_rate_caps); in ath10k_wmi_peer_assoc_fill()
7579 cmd->peer_nss = __cpu_to_le32(arg->peer_num_spatial_streams); in ath10k_wmi_peer_assoc_fill()
7580 cmd->peer_vht_caps = __cpu_to_le32(arg->peer_vht_caps); in ath10k_wmi_peer_assoc_fill()
7581 cmd->peer_phymode = __cpu_to_le32(arg->peer_phymode); in ath10k_wmi_peer_assoc_fill()
7583 ether_addr_copy(cmd->peer_macaddr.addr, arg->addr); in ath10k_wmi_peer_assoc_fill()
7585 cmd->peer_legacy_rates.num_rates = in ath10k_wmi_peer_assoc_fill()
7586 __cpu_to_le32(arg->peer_legacy_rates.num_rates); in ath10k_wmi_peer_assoc_fill()
7587 memcpy(cmd->peer_legacy_rates.rates, arg->peer_legacy_rates.rates, in ath10k_wmi_peer_assoc_fill()
7588 arg->peer_legacy_rates.num_rates); in ath10k_wmi_peer_assoc_fill()
7590 cmd->peer_ht_rates.num_rates = in ath10k_wmi_peer_assoc_fill()
7591 __cpu_to_le32(arg->peer_ht_rates.num_rates); in ath10k_wmi_peer_assoc_fill()
7592 memcpy(cmd->peer_ht_rates.rates, arg->peer_ht_rates.rates, in ath10k_wmi_peer_assoc_fill()
7593 arg->peer_ht_rates.num_rates); in ath10k_wmi_peer_assoc_fill()
7595 cmd->peer_vht_rates.rx_max_rate = in ath10k_wmi_peer_assoc_fill()
7596 __cpu_to_le32(arg->peer_vht_rates.rx_max_rate); in ath10k_wmi_peer_assoc_fill()
7597 cmd->peer_vht_rates.rx_mcs_set = in ath10k_wmi_peer_assoc_fill()
7598 __cpu_to_le32(arg->peer_vht_rates.rx_mcs_set); in ath10k_wmi_peer_assoc_fill()
7599 cmd->peer_vht_rates.tx_max_rate = in ath10k_wmi_peer_assoc_fill()
7600 __cpu_to_le32(arg->peer_vht_rates.tx_max_rate); in ath10k_wmi_peer_assoc_fill()
7601 cmd->peer_vht_rates.tx_mcs_set = in ath10k_wmi_peer_assoc_fill()
7602 __cpu_to_le32(arg->peer_vht_rates.tx_mcs_set); in ath10k_wmi_peer_assoc_fill()
7612 memset(cmd->peer_ht_info, 0, sizeof(cmd->peer_ht_info)); in ath10k_wmi_peer_assoc_fill_main()
7638 cmd->info0 = __cpu_to_le32(info0); in ath10k_wmi_peer_assoc_fill_10_2()
7648 cmd->peer_bw_rxnss_override = in ath10k_wmi_peer_assoc_fill_10_4()
7649 __cpu_to_le32(arg->peer_bw_rxnss_override); in ath10k_wmi_peer_assoc_fill_10_4()
7655 if (arg->peer_mpdu_density > 16) in ath10k_wmi_peer_assoc_check_arg()
7656 return -EINVAL; in ath10k_wmi_peer_assoc_check_arg()
7657 if (arg->peer_legacy_rates.num_rates > MAX_SUPPORTED_RATES) in ath10k_wmi_peer_assoc_check_arg()
7658 return -EINVAL; in ath10k_wmi_peer_assoc_check_arg()
7659 if (arg->peer_ht_rates.num_rates > MAX_SUPPORTED_RATES) in ath10k_wmi_peer_assoc_check_arg()
7660 return -EINVAL; in ath10k_wmi_peer_assoc_check_arg()
7679 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_peer_assoc()
7681 ath10k_wmi_peer_assoc_fill_main(ar, skb->data, arg); in ath10k_wmi_op_gen_peer_assoc()
7685 arg->vdev_id, arg->addr, in ath10k_wmi_op_gen_peer_assoc()
7686 arg->peer_reassoc ? "reassociate" : "new"); in ath10k_wmi_op_gen_peer_assoc()
7704 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_1_op_gen_peer_assoc()
7706 ath10k_wmi_peer_assoc_fill_10_1(ar, skb->data, arg); in ath10k_wmi_10_1_op_gen_peer_assoc()
7710 arg->vdev_id, arg->addr, in ath10k_wmi_10_1_op_gen_peer_assoc()
7711 arg->peer_reassoc ? "reassociate" : "new"); in ath10k_wmi_10_1_op_gen_peer_assoc()
7729 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_op_gen_peer_assoc()
7731 ath10k_wmi_peer_assoc_fill_10_2(ar, skb->data, arg); in ath10k_wmi_10_2_op_gen_peer_assoc()
7735 arg->vdev_id, arg->addr, in ath10k_wmi_10_2_op_gen_peer_assoc()
7736 arg->peer_reassoc ? "reassociate" : "new"); in ath10k_wmi_10_2_op_gen_peer_assoc()
7754 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_op_gen_peer_assoc()
7756 ath10k_wmi_peer_assoc_fill_10_4(ar, skb->data, arg); in ath10k_wmi_10_4_op_gen_peer_assoc()
7760 arg->vdev_id, arg->addr, in ath10k_wmi_10_4_op_gen_peer_assoc()
7761 arg->peer_reassoc ? "reassociate" : "new"); in ath10k_wmi_10_4_op_gen_peer_assoc()
7772 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_op_gen_pdev_get_temperature()
7787 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_op_gen_pdev_bss_chan_info()
7789 cmd = (struct wmi_pdev_chan_info_req_cmd *)skb->data; in ath10k_wmi_10_2_op_gen_pdev_bss_chan_info()
7790 cmd->type = __cpu_to_le32(type); in ath10k_wmi_10_2_op_gen_pdev_bss_chan_info()
7811 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_beacon_dma()
7814 fc = le16_to_cpu(hdr->frame_control); in ath10k_wmi_op_gen_beacon_dma()
7816 cmd = (struct wmi_bcn_tx_ref_cmd *)skb->data; in ath10k_wmi_op_gen_beacon_dma()
7817 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_beacon_dma()
7818 cmd->data_len = __cpu_to_le32(bcn_len); in ath10k_wmi_op_gen_beacon_dma()
7819 cmd->data_ptr = __cpu_to_le32(bcn_paddr); in ath10k_wmi_op_gen_beacon_dma()
7820 cmd->msdu_id = 0; in ath10k_wmi_op_gen_beacon_dma()
7821 cmd->frame_control = __cpu_to_le32(fc); in ath10k_wmi_op_gen_beacon_dma()
7822 cmd->flags = 0; in ath10k_wmi_op_gen_beacon_dma()
7823 cmd->antenna_mask = __cpu_to_le32(WMI_BCN_TX_REF_DEF_ANTENNA); in ath10k_wmi_op_gen_beacon_dma()
7826 cmd->flags |= __cpu_to_le32(WMI_BCN_TX_REF_FLAG_DTIM_ZERO); in ath10k_wmi_op_gen_beacon_dma()
7829 cmd->flags |= __cpu_to_le32(WMI_BCN_TX_REF_FLAG_DELIVER_CAB); in ath10k_wmi_op_gen_beacon_dma()
7837 params->cwmin = __cpu_to_le32(arg->cwmin); in ath10k_wmi_set_wmm_param()
7838 params->cwmax = __cpu_to_le32(arg->cwmax); in ath10k_wmi_set_wmm_param()
7839 params->aifs = __cpu_to_le32(arg->aifs); in ath10k_wmi_set_wmm_param()
7840 params->txop = __cpu_to_le32(arg->txop); in ath10k_wmi_set_wmm_param()
7841 params->acm = __cpu_to_le32(arg->acm); in ath10k_wmi_set_wmm_param()
7842 params->no_ack = __cpu_to_le32(arg->no_ack); in ath10k_wmi_set_wmm_param()
7854 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_set_wmm()
7856 cmd = (struct wmi_pdev_set_wmm_params *)skb->data; in ath10k_wmi_op_gen_pdev_set_wmm()
7857 ath10k_wmi_set_wmm_param(&cmd->ac_be, &arg->ac_be); in ath10k_wmi_op_gen_pdev_set_wmm()
7858 ath10k_wmi_set_wmm_param(&cmd->ac_bk, &arg->ac_bk); in ath10k_wmi_op_gen_pdev_set_wmm()
7859 ath10k_wmi_set_wmm_param(&cmd->ac_vi, &arg->ac_vi); in ath10k_wmi_op_gen_pdev_set_wmm()
7860 ath10k_wmi_set_wmm_param(&cmd->ac_vo, &arg->ac_vo); in ath10k_wmi_op_gen_pdev_set_wmm()
7874 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_request_stats()
7876 cmd = (struct wmi_request_stats_cmd *)skb->data; in ath10k_wmi_op_gen_request_stats()
7877 cmd->stats_id = __cpu_to_le32(stats_mask); in ath10k_wmi_op_gen_request_stats()
7893 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_force_fw_hang()
7895 cmd = (struct wmi_force_fw_hang_cmd *)skb->data; in ath10k_wmi_op_gen_force_fw_hang()
7896 cmd->type = __cpu_to_le32(type); in ath10k_wmi_op_gen_force_fw_hang()
7897 cmd->delay_ms = __cpu_to_le32(delay_ms); in ath10k_wmi_op_gen_force_fw_hang()
7914 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_dbglog_cfg()
7916 cmd = (struct wmi_dbglog_cfg_cmd *)skb->data; in ath10k_wmi_op_gen_dbglog_cfg()
7928 cmd->module_enable = __cpu_to_le32(module_enable); in ath10k_wmi_op_gen_dbglog_cfg()
7929 cmd->module_valid = __cpu_to_le32(~0); in ath10k_wmi_op_gen_dbglog_cfg()
7930 cmd->config_enable = __cpu_to_le32(cfg); in ath10k_wmi_op_gen_dbglog_cfg()
7931 cmd->config_valid = __cpu_to_le32(ATH10K_DBGLOG_CFG_LOG_LVL_MASK); in ath10k_wmi_op_gen_dbglog_cfg()
7935 __le32_to_cpu(cmd->module_enable), in ath10k_wmi_op_gen_dbglog_cfg()
7936 __le32_to_cpu(cmd->module_valid), in ath10k_wmi_op_gen_dbglog_cfg()
7937 __le32_to_cpu(cmd->config_enable), in ath10k_wmi_op_gen_dbglog_cfg()
7938 __le32_to_cpu(cmd->config_valid)); in ath10k_wmi_op_gen_dbglog_cfg()
7952 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
7954 cmd = (struct wmi_10_4_dbglog_cfg_cmd *)skb->data; in ath10k_wmi_10_4_op_gen_dbglog_cfg()
7966 cmd->module_enable = __cpu_to_le64(module_enable); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
7967 cmd->module_valid = __cpu_to_le64(~0); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
7968 cmd->config_enable = __cpu_to_le32(cfg); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
7969 cmd->config_valid = __cpu_to_le32(ATH10K_DBGLOG_CFG_LOG_LVL_MASK); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
7973 __le64_to_cpu(cmd->module_enable), in ath10k_wmi_10_4_op_gen_dbglog_cfg()
7974 __le64_to_cpu(cmd->module_valid), in ath10k_wmi_10_4_op_gen_dbglog_cfg()
7975 __le32_to_cpu(cmd->config_enable), in ath10k_wmi_10_4_op_gen_dbglog_cfg()
7976 __le32_to_cpu(cmd->config_valid)); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
7988 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pktlog_enable()
7992 cmd = (struct wmi_pdev_pktlog_enable_cmd *)skb->data; in ath10k_wmi_op_gen_pktlog_enable()
7993 cmd->ev_bitmap = __cpu_to_le32(ev_bitmap); in ath10k_wmi_op_gen_pktlog_enable()
8007 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pktlog_disable()
8023 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8025 cmd = (struct wmi_pdev_set_quiet_cmd *)skb->data; in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8026 cmd->period = __cpu_to_le32(period); in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8027 cmd->duration = __cpu_to_le32(duration); in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8028 cmd->next_start = __cpu_to_le32(next_offset); in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8029 cmd->enabled = __cpu_to_le32(enabled); in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8045 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_addba_clear_resp()
8049 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_addba_clear_resp()
8051 cmd = (struct wmi_addba_clear_resp_cmd *)skb->data; in ath10k_wmi_op_gen_addba_clear_resp()
8052 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_addba_clear_resp()
8053 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath10k_wmi_op_gen_addba_clear_resp()
8069 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_addba_send()
8073 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_addba_send()
8075 cmd = (struct wmi_addba_send_cmd *)skb->data; in ath10k_wmi_op_gen_addba_send()
8076 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_addba_send()
8077 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath10k_wmi_op_gen_addba_send()
8078 cmd->tid = __cpu_to_le32(tid); in ath10k_wmi_op_gen_addba_send()
8079 cmd->buffersize = __cpu_to_le32(buf_size); in ath10k_wmi_op_gen_addba_send()
8095 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_addba_set_resp()
8099 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_addba_set_resp()
8101 cmd = (struct wmi_addba_setresponse_cmd *)skb->data; in ath10k_wmi_op_gen_addba_set_resp()
8102 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_addba_set_resp()
8103 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath10k_wmi_op_gen_addba_set_resp()
8104 cmd->tid = __cpu_to_le32(tid); in ath10k_wmi_op_gen_addba_set_resp()
8105 cmd->statuscode = __cpu_to_le32(status); in ath10k_wmi_op_gen_addba_set_resp()
8121 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_delba_send()
8125 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_delba_send()
8127 cmd = (struct wmi_delba_send_cmd *)skb->data; in ath10k_wmi_op_gen_delba_send()
8128 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_delba_send()
8129 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath10k_wmi_op_gen_delba_send()
8130 cmd->tid = __cpu_to_le32(tid); in ath10k_wmi_op_gen_delba_send()
8131 cmd->initiator = __cpu_to_le32(initiator); in ath10k_wmi_op_gen_delba_send()
8132 cmd->reasoncode = __cpu_to_le32(reason); in ath10k_wmi_op_gen_delba_send()
8148 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config()
8150 cmd = (struct wmi_pdev_get_tpc_config_cmd *)skb->data; in ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config()
8151 cmd->param = __cpu_to_le32(param); in ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config()
8187 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_fw_pdev_base_stats_fill()
8188 len += scnprintf(buf + len, buf_len - len, "%30s\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8190 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8193 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8194 "Channel noise floor", pdev->ch_noise_floor); in ath10k_wmi_fw_pdev_base_stats_fill()
8195 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8196 "Channel TX power", pdev->chan_tx_power); in ath10k_wmi_fw_pdev_base_stats_fill()
8197 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8198 "TX frame count", pdev->tx_frame_count); in ath10k_wmi_fw_pdev_base_stats_fill()
8199 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8200 "RX frame count", pdev->rx_frame_count); in ath10k_wmi_fw_pdev_base_stats_fill()
8201 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8202 "RX clear count", pdev->rx_clear_count); in ath10k_wmi_fw_pdev_base_stats_fill()
8203 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8204 "Cycle count", pdev->cycle_count); in ath10k_wmi_fw_pdev_base_stats_fill()
8205 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8206 "PHY error count", pdev->phy_err_count); in ath10k_wmi_fw_pdev_base_stats_fill()
8218 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_extra_stats_fill()
8219 "RTS bad count", pdev->rts_bad); in ath10k_wmi_fw_pdev_extra_stats_fill()
8220 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_extra_stats_fill()
8221 "RTS good count", pdev->rts_good); in ath10k_wmi_fw_pdev_extra_stats_fill()
8222 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_extra_stats_fill()
8223 "FCS bad count", pdev->fcs_bad); in ath10k_wmi_fw_pdev_extra_stats_fill()
8224 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_extra_stats_fill()
8225 "No beacon count", pdev->no_beacons); in ath10k_wmi_fw_pdev_extra_stats_fill()
8226 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_extra_stats_fill()
8227 "MIB int count", pdev->mib_int_count); in ath10k_wmi_fw_pdev_extra_stats_fill()
8229 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_fw_pdev_extra_stats_fill()
8240 len += scnprintf(buf + len, buf_len - len, "\n%30s\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8242 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8245 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8246 "HTT cookies queued", pdev->comp_queued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8247 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8248 "HTT cookies disp.", pdev->comp_delivered); in ath10k_wmi_fw_pdev_tx_stats_fill()
8249 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8250 "MSDU queued", pdev->msdu_enqued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8251 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8252 "MPDU queued", pdev->mpdu_enqued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8253 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8254 "MSDUs dropped", pdev->wmm_drop); in ath10k_wmi_fw_pdev_tx_stats_fill()
8255 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8256 "Local enqued", pdev->local_enqued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8257 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8258 "Local freed", pdev->local_freed); in ath10k_wmi_fw_pdev_tx_stats_fill()
8259 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8260 "HW queued", pdev->hw_queued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8261 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8262 "PPDUs reaped", pdev->hw_reaped); in ath10k_wmi_fw_pdev_tx_stats_fill()
8263 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8264 "Num underruns", pdev->underrun); in ath10k_wmi_fw_pdev_tx_stats_fill()
8265 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8266 "PPDUs cleaned", pdev->tx_abort); in ath10k_wmi_fw_pdev_tx_stats_fill()
8267 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8268 "MPDUs requed", pdev->mpdus_requed); in ath10k_wmi_fw_pdev_tx_stats_fill()
8269 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8270 "Excessive retries", pdev->tx_ko); in ath10k_wmi_fw_pdev_tx_stats_fill()
8271 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8272 "HW rate", pdev->data_rc); in ath10k_wmi_fw_pdev_tx_stats_fill()
8273 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8274 "Sched self triggers", pdev->self_triggers); in ath10k_wmi_fw_pdev_tx_stats_fill()
8275 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8277 pdev->sw_retry_failure); 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()
8280 pdev->illgl_rate_phy_err); in ath10k_wmi_fw_pdev_tx_stats_fill()
8281 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8282 "Pdev continuous xretry", pdev->pdev_cont_xretry); in ath10k_wmi_fw_pdev_tx_stats_fill()
8283 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8284 "TX timeout", pdev->pdev_tx_timeout); in ath10k_wmi_fw_pdev_tx_stats_fill()
8285 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8286 "PDEV resets", pdev->pdev_resets); 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()
8288 "PHY underrun", pdev->phy_underrun); in ath10k_wmi_fw_pdev_tx_stats_fill()
8289 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8290 "MPDU is more than txop limit", pdev->txop_ovf); in ath10k_wmi_fw_pdev_tx_stats_fill()
8301 len += scnprintf(buf + len, buf_len - len, "\n%30s\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8302 "ath10k PDEV RX stats"); in ath10k_wmi_fw_pdev_rx_stats_fill()
8303 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8306 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8308 pdev->mid_ppdu_route_change); in ath10k_wmi_fw_pdev_rx_stats_fill()
8309 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8310 "Tot. number of statuses", pdev->status_rcvd); in ath10k_wmi_fw_pdev_rx_stats_fill()
8311 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8312 "Extra frags on rings 0", pdev->r0_frags); in ath10k_wmi_fw_pdev_rx_stats_fill()
8313 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8314 "Extra frags on rings 1", pdev->r1_frags); 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()
8316 "Extra frags on rings 2", pdev->r2_frags); in ath10k_wmi_fw_pdev_rx_stats_fill()
8317 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8318 "Extra frags on rings 3", pdev->r3_frags); in ath10k_wmi_fw_pdev_rx_stats_fill()
8319 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8320 "MSDUs delivered to HTT", pdev->htt_msdus); in ath10k_wmi_fw_pdev_rx_stats_fill()
8321 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8322 "MPDUs delivered to HTT", pdev->htt_mpdus); in ath10k_wmi_fw_pdev_rx_stats_fill()
8323 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8324 "MSDUs delivered to stack", pdev->loc_msdus); in ath10k_wmi_fw_pdev_rx_stats_fill()
8325 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8326 "MPDUs delivered to stack", pdev->loc_mpdus); in ath10k_wmi_fw_pdev_rx_stats_fill()
8327 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8328 "Oversized AMSDUs", pdev->oversize_amsdu); in ath10k_wmi_fw_pdev_rx_stats_fill()
8329 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8330 "PHY errors", pdev->phy_errs); in ath10k_wmi_fw_pdev_rx_stats_fill()
8331 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8332 "PHY errors drops", pdev->phy_err_drop); in ath10k_wmi_fw_pdev_rx_stats_fill()
8333 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8334 "MPDU errors (FCS, MIC, ENC)", pdev->mpdu_errs); in ath10k_wmi_fw_pdev_rx_stats_fill()
8346 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8347 "vdev id", vdev->vdev_id); in ath10k_wmi_fw_vdev_stats_fill()
8348 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8349 "beacon snr", vdev->beacon_snr); in ath10k_wmi_fw_vdev_stats_fill()
8350 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8351 "data snr", vdev->data_snr); in ath10k_wmi_fw_vdev_stats_fill()
8352 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8353 "num rx frames", vdev->num_rx_frames); in ath10k_wmi_fw_vdev_stats_fill()
8354 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8355 "num rts fail", vdev->num_rts_fail); in ath10k_wmi_fw_vdev_stats_fill()
8356 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8357 "num rts success", vdev->num_rts_success); in ath10k_wmi_fw_vdev_stats_fill()
8358 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8359 "num rx err", vdev->num_rx_err); in ath10k_wmi_fw_vdev_stats_fill()
8360 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8361 "num rx discard", vdev->num_rx_discard); in ath10k_wmi_fw_vdev_stats_fill()
8362 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8363 "num tx not acked", vdev->num_tx_not_acked); in ath10k_wmi_fw_vdev_stats_fill()
8365 for (i = 0 ; i < ARRAY_SIZE(vdev->num_tx_frames); i++) in ath10k_wmi_fw_vdev_stats_fill()
8366 len += scnprintf(buf + len, buf_len - len, in ath10k_wmi_fw_vdev_stats_fill()
8369 vdev->num_tx_frames[i]); in ath10k_wmi_fw_vdev_stats_fill()
8371 for (i = 0 ; i < ARRAY_SIZE(vdev->num_tx_frames_retries); i++) in ath10k_wmi_fw_vdev_stats_fill()
8372 len += scnprintf(buf + len, buf_len - len, in ath10k_wmi_fw_vdev_stats_fill()
8375 vdev->num_tx_frames_retries[i]); in ath10k_wmi_fw_vdev_stats_fill()
8377 for (i = 0 ; i < ARRAY_SIZE(vdev->num_tx_frames_failures); i++) in ath10k_wmi_fw_vdev_stats_fill()
8378 len += scnprintf(buf + len, buf_len - len, in ath10k_wmi_fw_vdev_stats_fill()
8381 vdev->num_tx_frames_failures[i]); in ath10k_wmi_fw_vdev_stats_fill()
8383 for (i = 0 ; i < ARRAY_SIZE(vdev->tx_rate_history); i++) in ath10k_wmi_fw_vdev_stats_fill()
8384 len += scnprintf(buf + len, buf_len - len, in ath10k_wmi_fw_vdev_stats_fill()
8387 vdev->tx_rate_history[i]); in ath10k_wmi_fw_vdev_stats_fill()
8389 for (i = 0 ; i < ARRAY_SIZE(vdev->beacon_rssi_history); i++) in ath10k_wmi_fw_vdev_stats_fill()
8390 len += scnprintf(buf + len, buf_len - len, in ath10k_wmi_fw_vdev_stats_fill()
8393 vdev->beacon_rssi_history[i]); in ath10k_wmi_fw_vdev_stats_fill()
8395 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_fw_vdev_stats_fill()
8406 len += scnprintf(buf + len, buf_len - len, "%30s %pM\n", in ath10k_wmi_fw_peer_stats_fill()
8407 "Peer MAC address", peer->peer_macaddr); in ath10k_wmi_fw_peer_stats_fill()
8408 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_peer_stats_fill()
8409 "Peer RSSI", peer->peer_rssi); in ath10k_wmi_fw_peer_stats_fill()
8410 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_peer_stats_fill()
8411 "Peer TX rate", peer->peer_tx_rate); in ath10k_wmi_fw_peer_stats_fill()
8412 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_peer_stats_fill()
8413 "Peer RX rate", peer->peer_rx_rate); in ath10k_wmi_fw_peer_stats_fill()
8415 len += scnprintf(buf + len, buf_len - len, "%30s %llu\n", in ath10k_wmi_fw_peer_stats_fill()
8416 "Peer RX duration", peer->rx_duration); in ath10k_wmi_fw_peer_stats_fill()
8418 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_fw_peer_stats_fill()
8429 len += scnprintf(buf + len, buf_len - len, "%30s %pM\n", in ath10k_wmi_fw_extd_peer_stats_fill()
8430 "Peer MAC address", peer->peer_macaddr); in ath10k_wmi_fw_extd_peer_stats_fill()
8431 len += scnprintf(buf + len, buf_len - len, "%30s %llu\n", in ath10k_wmi_fw_extd_peer_stats_fill()
8432 "Peer RX duration", peer->rx_duration); in ath10k_wmi_fw_extd_peer_stats_fill()
8447 spin_lock_bh(&ar->data_lock); in ath10k_wmi_main_op_fw_stats_fill()
8449 pdev = list_first_entry_or_null(&fw_stats->pdevs, in ath10k_wmi_main_op_fw_stats_fill()
8456 num_peers = ath10k_wmi_fw_stats_num_peers(&fw_stats->peers); in ath10k_wmi_main_op_fw_stats_fill()
8457 num_vdevs = ath10k_wmi_fw_stats_num_vdevs(&fw_stats->vdevs); in ath10k_wmi_main_op_fw_stats_fill()
8463 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_main_op_fw_stats_fill()
8464 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_main_op_fw_stats_fill()
8466 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_main_op_fw_stats_fill()
8469 list_for_each_entry(vdev, &fw_stats->vdevs, list) { in ath10k_wmi_main_op_fw_stats_fill()
8473 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_main_op_fw_stats_fill()
8474 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_main_op_fw_stats_fill()
8476 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_main_op_fw_stats_fill()
8479 list_for_each_entry(peer, &fw_stats->peers, list) { in ath10k_wmi_main_op_fw_stats_fill()
8481 fw_stats->extended); in ath10k_wmi_main_op_fw_stats_fill()
8485 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_main_op_fw_stats_fill()
8488 buf[len - 1] = 0; in ath10k_wmi_main_op_fw_stats_fill()
8505 spin_lock_bh(&ar->data_lock); in ath10k_wmi_10x_op_fw_stats_fill()
8507 pdev = list_first_entry_or_null(&fw_stats->pdevs, in ath10k_wmi_10x_op_fw_stats_fill()
8514 num_peers = ath10k_wmi_fw_stats_num_peers(&fw_stats->peers); in ath10k_wmi_10x_op_fw_stats_fill()
8515 num_vdevs = ath10k_wmi_fw_stats_num_vdevs(&fw_stats->vdevs); in ath10k_wmi_10x_op_fw_stats_fill()
8522 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_10x_op_fw_stats_fill()
8523 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_10x_op_fw_stats_fill()
8525 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_10x_op_fw_stats_fill()
8528 list_for_each_entry(vdev, &fw_stats->vdevs, list) { in ath10k_wmi_10x_op_fw_stats_fill()
8532 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_10x_op_fw_stats_fill()
8533 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_10x_op_fw_stats_fill()
8535 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_10x_op_fw_stats_fill()
8538 list_for_each_entry(peer, &fw_stats->peers, list) { in ath10k_wmi_10x_op_fw_stats_fill()
8540 fw_stats->extended); in ath10k_wmi_10x_op_fw_stats_fill()
8544 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_10x_op_fw_stats_fill()
8547 buf[len - 1] = 0; in ath10k_wmi_10x_op_fw_stats_fill()
8561 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_enable_adaptive_cca()
8563 cmd = (struct wmi_pdev_set_adaptive_cca_params *)skb->data; in ath10k_wmi_op_gen_pdev_enable_adaptive_cca()
8564 cmd->enable = __cpu_to_le32(enable); in ath10k_wmi_op_gen_pdev_enable_adaptive_cca()
8565 cmd->cca_detect_level = __cpu_to_le32(detect_level); in ath10k_wmi_op_gen_pdev_enable_adaptive_cca()
8566 cmd->cca_detect_margin = __cpu_to_le32(detect_margin); in ath10k_wmi_op_gen_pdev_enable_adaptive_cca()
8582 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8583 "vdev id", vdev->vdev_id); in ath10k_wmi_fw_vdev_stats_extd_fill()
8584 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8585 "ppdu aggr count", vdev->ppdu_aggr_cnt); in ath10k_wmi_fw_vdev_stats_extd_fill()
8586 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8587 "ppdu noack", vdev->ppdu_noack); in ath10k_wmi_fw_vdev_stats_extd_fill()
8588 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8589 "mpdu queued", vdev->mpdu_queued); in ath10k_wmi_fw_vdev_stats_extd_fill()
8590 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8591 "ppdu nonaggr count", vdev->ppdu_nonaggr_cnt); in ath10k_wmi_fw_vdev_stats_extd_fill()
8592 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8593 "mpdu sw requeued", vdev->mpdu_sw_requeued); in ath10k_wmi_fw_vdev_stats_extd_fill()
8594 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8595 "mpdu success retry", vdev->mpdu_suc_retry); in ath10k_wmi_fw_vdev_stats_extd_fill()
8596 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8597 "mpdu success multitry", vdev->mpdu_suc_multitry); in ath10k_wmi_fw_vdev_stats_extd_fill()
8598 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8599 "mpdu fail retry", vdev->mpdu_fail_retry); in ath10k_wmi_fw_vdev_stats_extd_fill()
8600 val = vdev->tx_ftm_suc; in ath10k_wmi_fw_vdev_stats_extd_fill()
8602 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8605 val = vdev->tx_ftm_suc_retry; 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()
8610 val = vdev->tx_ftm_fail; in ath10k_wmi_fw_vdev_stats_extd_fill()
8612 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8615 val = vdev->rx_ftmr_cnt; in ath10k_wmi_fw_vdev_stats_extd_fill()
8617 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8618 "rx ftm request count", in ath10k_wmi_fw_vdev_stats_extd_fill()
8620 val = vdev->rx_ftmr_dup_cnt; in ath10k_wmi_fw_vdev_stats_extd_fill()
8622 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8623 "rx ftm request dup count", in ath10k_wmi_fw_vdev_stats_extd_fill()
8625 val = vdev->rx_iftmr_cnt; in ath10k_wmi_fw_vdev_stats_extd_fill()
8627 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8628 "rx initial ftm req count", in ath10k_wmi_fw_vdev_stats_extd_fill()
8630 val = vdev->rx_iftmr_dup_cnt; in ath10k_wmi_fw_vdev_stats_extd_fill()
8632 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8633 "rx initial ftm req dup cnt", in ath10k_wmi_fw_vdev_stats_extd_fill()
8635 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_fw_vdev_stats_extd_fill()
8653 spin_lock_bh(&ar->data_lock); in ath10k_wmi_10_4_op_fw_stats_fill()
8655 pdev = list_first_entry_or_null(&fw_stats->pdevs, in ath10k_wmi_10_4_op_fw_stats_fill()
8662 num_peers = ath10k_wmi_fw_stats_num_peers(&fw_stats->peers); in ath10k_wmi_10_4_op_fw_stats_fill()
8663 num_vdevs = ath10k_wmi_fw_stats_num_vdevs(&fw_stats->vdevs); in ath10k_wmi_10_4_op_fw_stats_fill()
8669 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8670 "HW paused", pdev->hw_paused); in ath10k_wmi_10_4_op_fw_stats_fill()
8671 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8672 "Seqs posted", pdev->seq_posted); in ath10k_wmi_10_4_op_fw_stats_fill()
8673 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8674 "Seqs failed queueing", pdev->seq_failed_queueing); in ath10k_wmi_10_4_op_fw_stats_fill()
8675 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8676 "Seqs completed", pdev->seq_completed); in ath10k_wmi_10_4_op_fw_stats_fill()
8677 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8678 "Seqs restarted", pdev->seq_restarted); in ath10k_wmi_10_4_op_fw_stats_fill()
8679 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8680 "MU Seqs posted", pdev->mu_seq_posted); in ath10k_wmi_10_4_op_fw_stats_fill()
8681 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8682 "MPDUs SW flushed", pdev->mpdus_sw_flush); in ath10k_wmi_10_4_op_fw_stats_fill()
8683 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8684 "MPDUs HW filtered", pdev->mpdus_hw_filter); in ath10k_wmi_10_4_op_fw_stats_fill()
8685 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8686 "MPDUs truncated", pdev->mpdus_truncated); in ath10k_wmi_10_4_op_fw_stats_fill()
8687 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8688 "MPDUs receive no ACK", pdev->mpdus_ack_failed); in ath10k_wmi_10_4_op_fw_stats_fill()
8689 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8690 "MPDUs expired", pdev->mpdus_expired); in ath10k_wmi_10_4_op_fw_stats_fill()
8693 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8694 "Num Rx Overflow errors", pdev->rx_ovfl_errs); in ath10k_wmi_10_4_op_fw_stats_fill()
8696 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_10_4_op_fw_stats_fill()
8697 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8699 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8701 list_for_each_entry(vdev, &fw_stats->vdevs, list) { 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()
8711 list_for_each_entry(peer, &fw_stats->peers, list) { in ath10k_wmi_10_4_op_fw_stats_fill()
8713 fw_stats->extended); in ath10k_wmi_10_4_op_fw_stats_fill()
8716 if (fw_stats->extended) { in ath10k_wmi_10_4_op_fw_stats_fill()
8717 list_for_each_entry(extd_peer, &fw_stats->peers_extd, list) { in ath10k_wmi_10_4_op_fw_stats_fill()
8724 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_10_4_op_fw_stats_fill()
8727 buf[len - 1] = 0; in ath10k_wmi_10_4_op_fw_stats_fill()
8748 return -ENOTSUPP; in ath10k_wmi_op_get_vdev_subtype()
8750 return -ENOTSUPP; in ath10k_wmi_op_get_vdev_subtype()
8770 return -ENOTSUPP; in ath10k_wmi_10_2_4_op_get_vdev_subtype()
8772 return -ENOTSUPP; in ath10k_wmi_10_2_4_op_get_vdev_subtype()
8794 return -ENOTSUPP; in ath10k_wmi_10_4_op_get_vdev_subtype()
8808 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_ext_resource_config()
8810 if (test_bit(WMI_SERVICE_TDLS_UAPSD_SLEEP_STA, ar->wmi.svc_map)) in ath10k_wmi_10_4_ext_resource_config()
8813 cmd = (struct wmi_ext_resource_config_10_4_cmd *)skb->data; in ath10k_wmi_10_4_ext_resource_config()
8814 cmd->host_platform_config = __cpu_to_le32(type); in ath10k_wmi_10_4_ext_resource_config()
8815 cmd->fw_feature_bitmap = __cpu_to_le32(fw_feature_bitmap); in ath10k_wmi_10_4_ext_resource_config()
8816 cmd->wlan_gpio_priority = __cpu_to_le32(ar->coex_gpio_pin); in ath10k_wmi_10_4_ext_resource_config()
8817 cmd->coex_version = __cpu_to_le32(WMI_NO_COEX_VERSION_SUPPORT); in ath10k_wmi_10_4_ext_resource_config()
8818 cmd->coex_gpio_pin1 = __cpu_to_le32(-1); in ath10k_wmi_10_4_ext_resource_config()
8819 cmd->coex_gpio_pin2 = __cpu_to_le32(-1); in ath10k_wmi_10_4_ext_resource_config()
8820 cmd->coex_gpio_pin3 = __cpu_to_le32(-1); in ath10k_wmi_10_4_ext_resource_config()
8821 cmd->num_tdls_vdevs = __cpu_to_le32(TARGET_10_4_NUM_TDLS_VDEVS); in ath10k_wmi_10_4_ext_resource_config()
8822 cmd->num_tdls_conn_table_entries = __cpu_to_le32(20); in ath10k_wmi_10_4_ext_resource_config()
8823 cmd->max_tdls_concurrent_sleep_sta = __cpu_to_le32(num_tdls_sleep_sta); in ath10k_wmi_10_4_ext_resource_config()
8824 cmd->max_tdls_concurrent_buffer_sta = in ath10k_wmi_10_4_ext_resource_config()
8843 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8845 if (test_bit(WMI_SERVICE_TDLS_EXPLICIT_MODE_ONLY, ar->wmi.svc_map) && in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8849 if (test_bit(WMI_SERVICE_TDLS_UAPSD_BUFFER_STA, ar->wmi.svc_map)) in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8852 cmd = (struct wmi_10_4_tdls_set_state_cmd *)skb->data; in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8853 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8854 cmd->state = __cpu_to_le32(state); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8855 cmd->notification_interval_ms = __cpu_to_le32(5000); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8856 cmd->tx_discovery_threshold = __cpu_to_le32(100); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8857 cmd->tx_teardown_threshold = __cpu_to_le32(5); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8858 cmd->rssi_teardown_threshold = __cpu_to_le32(-75); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8859 cmd->rssi_delta = __cpu_to_le32(-20); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8860 cmd->tdls_options = __cpu_to_le32(options); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8861 cmd->tdls_peer_traffic_ind_window = __cpu_to_le32(2); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8862 cmd->tdls_peer_traffic_response_timeout_ms = __cpu_to_le32(5000); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8863 cmd->tdls_puapsd_mask = __cpu_to_le32(0xf); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8864 cmd->tdls_puapsd_inactivity_time_ms = __cpu_to_le32(0); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8865 cmd->tdls_puapsd_rx_frame_threshold = __cpu_to_le32(10); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8866 cmd->teardown_notification_ms = __cpu_to_le32(10); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8867 cmd->tdls_peer_kickout_threshold = __cpu_to_le32(96); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8874 static u32 ath10k_wmi_prepare_peer_qos(u8 uapsd_queues, u8 sp) in ath10k_wmi_prepare_peer_qos() argument
8887 peer_qos |= SM(sp, WMI_TDLS_PEER_SP); in ath10k_wmi_prepare_peer_qos()
8900 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_op_gen_pdev_get_tpc_table_cmdid()
8902 cmd = (struct wmi_pdev_get_tpc_table_cmd *)skb->data; in ath10k_wmi_10_4_op_gen_pdev_get_tpc_table_cmdid()
8903 cmd->param = __cpu_to_le32(param); in ath10k_wmi_10_4_op_gen_pdev_get_tpc_table_cmdid()
8925 chan_len = cap->peer_chan_len ? (cap->peer_chan_len - 1) : 0; in ath10k_wmi_10_4_gen_tdls_peer_update()
8931 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_gen_tdls_peer_update()
8933 memset(skb->data, 0, sizeof(*cmd)); in ath10k_wmi_10_4_gen_tdls_peer_update()
8935 cmd = (struct wmi_10_4_tdls_peer_update_cmd *)skb->data; in ath10k_wmi_10_4_gen_tdls_peer_update()
8936 cmd->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_10_4_gen_tdls_peer_update()
8937 ether_addr_copy(cmd->peer_macaddr.addr, arg->addr); in ath10k_wmi_10_4_gen_tdls_peer_update()
8938 cmd->peer_state = __cpu_to_le32(arg->peer_state); in ath10k_wmi_10_4_gen_tdls_peer_update()
8940 peer_qos = ath10k_wmi_prepare_peer_qos(cap->peer_uapsd_queues, in ath10k_wmi_10_4_gen_tdls_peer_update()
8941 cap->peer_max_sp); in ath10k_wmi_10_4_gen_tdls_peer_update()
8943 peer_cap = &cmd->peer_capab; in ath10k_wmi_10_4_gen_tdls_peer_update()
8944 peer_cap->peer_qos = __cpu_to_le32(peer_qos); in ath10k_wmi_10_4_gen_tdls_peer_update()
8945 peer_cap->buff_sta_support = __cpu_to_le32(cap->buff_sta_support); in ath10k_wmi_10_4_gen_tdls_peer_update()
8946 peer_cap->off_chan_support = __cpu_to_le32(cap->off_chan_support); in ath10k_wmi_10_4_gen_tdls_peer_update()
8947 peer_cap->peer_curr_operclass = __cpu_to_le32(cap->peer_curr_operclass); in ath10k_wmi_10_4_gen_tdls_peer_update()
8948 peer_cap->self_curr_operclass = __cpu_to_le32(cap->self_curr_operclass); in ath10k_wmi_10_4_gen_tdls_peer_update()
8949 peer_cap->peer_chan_len = __cpu_to_le32(cap->peer_chan_len); in ath10k_wmi_10_4_gen_tdls_peer_update()
8950 peer_cap->peer_operclass_len = __cpu_to_le32(cap->peer_operclass_len); in ath10k_wmi_10_4_gen_tdls_peer_update()
8953 peer_cap->peer_operclass[i] = cap->peer_operclass[i]; in ath10k_wmi_10_4_gen_tdls_peer_update()
8955 peer_cap->is_peer_responder = __cpu_to_le32(cap->is_peer_responder); in ath10k_wmi_10_4_gen_tdls_peer_update()
8956 peer_cap->pref_offchan_num = __cpu_to_le32(cap->pref_offchan_num); in ath10k_wmi_10_4_gen_tdls_peer_update()
8957 peer_cap->pref_offchan_bw = __cpu_to_le32(cap->pref_offchan_bw); in ath10k_wmi_10_4_gen_tdls_peer_update()
8959 for (i = 0; i < cap->peer_chan_len; i++) { in ath10k_wmi_10_4_gen_tdls_peer_update()
8960 chan = (struct wmi_channel *)&peer_cap->peer_chan_list[i]; in ath10k_wmi_10_4_gen_tdls_peer_update()
8966 arg->vdev_id, arg->peer_state, cap->peer_chan_len); in ath10k_wmi_10_4_gen_tdls_peer_update()
8979 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_gen_radar_found()
8981 cmd = (struct wmi_radar_found_info *)skb->data; in ath10k_wmi_10_4_gen_radar_found()
8982 cmd->pri_min = __cpu_to_le32(arg->pri_min); in ath10k_wmi_10_4_gen_radar_found()
8983 cmd->pri_max = __cpu_to_le32(arg->pri_max); in ath10k_wmi_10_4_gen_radar_found()
8984 cmd->width_min = __cpu_to_le32(arg->width_min); in ath10k_wmi_10_4_gen_radar_found()
8985 cmd->width_max = __cpu_to_le32(arg->width_max); in ath10k_wmi_10_4_gen_radar_found()
8986 cmd->sidx_min = __cpu_to_le32(arg->sidx_min); in ath10k_wmi_10_4_gen_radar_found()
8987 cmd->sidx_max = __cpu_to_le32(arg->sidx_max); in ath10k_wmi_10_4_gen_radar_found()
8991 arg->pri_min, arg->pri_max, arg->width_min, in ath10k_wmi_10_4_gen_radar_found()
8992 arg->width_max, arg->sidx_min, arg->sidx_max); in ath10k_wmi_10_4_gen_radar_found()
9005 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9007 memset(skb->data, 0, sizeof(*cmd)); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9009 cmd = (struct wmi_peer_per_tid_cfg_cmd *)skb->data; in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9010 cmd->vdev_id = cpu_to_le32(arg->vdev_id); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9011 ether_addr_copy(cmd->peer_macaddr.addr, arg->peer_macaddr.addr); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9012 cmd->tid = cpu_to_le32(arg->tid); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9013 cmd->ack_policy = cpu_to_le32(arg->ack_policy); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9014 cmd->aggr_control = cpu_to_le32(arg->aggr_control); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9015 cmd->rate_control = cpu_to_le32(arg->rate_ctrl); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9016 cmd->retry_count = cpu_to_le32(arg->retry_count); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9017 cmd->rcode_flags = cpu_to_le32(arg->rcode_flags); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9018 cmd->ext_tid_cfg_bitmap = cpu_to_le32(arg->ext_tid_cfg_bitmap); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9019 cmd->rtscts_ctrl = cpu_to_le32(arg->rtscts_ctrl); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9023 arg->tid, arg->vdev_id, arg->ack_policy, arg->aggr_control, in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9024 arg->rate_ctrl, arg->rcode_flags, arg->retry_count, in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9025 arg->rtscts_ctrl, arg->ext_tid_cfg_bitmap, arg->peer_macaddr.addr); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9037 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_echo()
9039 cmd = (struct wmi_echo_cmd *)skb->data; in ath10k_wmi_op_gen_echo()
9040 cmd->value = cpu_to_le32(value); in ath10k_wmi_op_gen_echo()
9053 spin_lock_bh(&ar->data_lock); in ath10k_wmi_barrier()
9054 reinit_completion(&ar->wmi.barrier); in ath10k_wmi_barrier()
9055 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_barrier()
9063 time_left = wait_for_completion_timeout(&ar->wmi.barrier, in ath10k_wmi_barrier()
9066 return -ETIMEDOUT; in ath10k_wmi_barrier()
9080 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_4_op_gen_bb_timing()
9082 cmd = (struct wmi_pdev_bb_timing_cfg_cmd *)skb->data; in ath10k_wmi_10_2_4_op_gen_bb_timing()
9083 cmd->bb_tx_timing = __cpu_to_le32(arg->bb_tx_timing); in ath10k_wmi_10_2_4_op_gen_bb_timing()
9084 cmd->bb_xpa_timing = __cpu_to_le32(arg->bb_xpa_timing); in ath10k_wmi_10_2_4_op_gen_bb_timing()
9088 arg->bb_tx_timing, arg->bb_xpa_timing); in ath10k_wmi_10_2_4_op_gen_bb_timing()
9093 .rx = ath10k_wmi_op_rx,
9162 .rx = ath10k_wmi_10_1_op_rx,
9232 .rx = ath10k_wmi_10_2_op_rx,
9300 .rx = ath10k_wmi_10_2_op_rx,
9374 .rx = ath10k_wmi_10_4_op_rx,
9452 switch (ar->running_fw->fw_file.wmi_op_version) { in ath10k_wmi_attach()
9454 ar->wmi.ops = &wmi_10_4_ops; in ath10k_wmi_attach()
9455 ar->wmi.cmd = &wmi_10_4_cmd_map; in ath10k_wmi_attach()
9456 ar->wmi.vdev_param = &wmi_10_4_vdev_param_map; in ath10k_wmi_attach()
9457 ar->wmi.pdev_param = &wmi_10_4_pdev_param_map; in ath10k_wmi_attach()
9458 ar->wmi.peer_param = &wmi_peer_param_map; in ath10k_wmi_attach()
9459 ar->wmi.peer_flags = &wmi_10_2_peer_flags_map; in ath10k_wmi_attach()
9460 ar->wmi_key_cipher = wmi_key_cipher_suites; in ath10k_wmi_attach()
9463 ar->wmi.cmd = &wmi_10_2_4_cmd_map; in ath10k_wmi_attach()
9464 ar->wmi.ops = &wmi_10_2_4_ops; in ath10k_wmi_attach()
9465 ar->wmi.vdev_param = &wmi_10_2_4_vdev_param_map; in ath10k_wmi_attach()
9466 ar->wmi.pdev_param = &wmi_10_2_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_cmd_map; in ath10k_wmi_attach()
9473 ar->wmi.ops = &wmi_10_2_ops; in ath10k_wmi_attach()
9474 ar->wmi.vdev_param = &wmi_10x_vdev_param_map; in ath10k_wmi_attach()
9475 ar->wmi.pdev_param = &wmi_10x_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_10x_cmd_map; in ath10k_wmi_attach()
9482 ar->wmi.ops = &wmi_10_1_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_10x_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_cmd_map; in ath10k_wmi_attach()
9491 ar->wmi.ops = &wmi_ops; in ath10k_wmi_attach()
9492 ar->wmi.vdev_param = &wmi_vdev_param_map; in ath10k_wmi_attach()
9493 ar->wmi.pdev_param = &wmi_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_peer_flags_map; in ath10k_wmi_attach()
9496 ar->wmi_key_cipher = wmi_key_cipher_suites; in ath10k_wmi_attach()
9500 ar->wmi_key_cipher = wmi_tlv_key_cipher_suites; in ath10k_wmi_attach()
9505 ar->running_fw->fw_file.wmi_op_version); in ath10k_wmi_attach()
9506 return -EINVAL; in ath10k_wmi_attach()
9509 init_completion(&ar->wmi.service_ready); in ath10k_wmi_attach()
9510 init_completion(&ar->wmi.unified_ready); in ath10k_wmi_attach()
9511 init_completion(&ar->wmi.barrier); in ath10k_wmi_attach()
9512 init_completion(&ar->wmi.radar_confirm); in ath10k_wmi_attach()
9514 INIT_WORK(&ar->svc_rdy_work, ath10k_wmi_event_service_ready_work); in ath10k_wmi_attach()
9515 INIT_WORK(&ar->radar_confirmation_work, in ath10k_wmi_attach()
9519 ar->running_fw->fw_file.fw_features)) { in ath10k_wmi_attach()
9520 idr_init(&ar->wmi.mgmt_pending_tx); in ath10k_wmi_attach()
9531 for (i = 0; i < ar->wmi.num_mem_chunks; i++) { in ath10k_wmi_free_host_mem()
9532 dma_free_coherent(ar->dev, in ath10k_wmi_free_host_mem()
9533 ar->wmi.mem_chunks[i].len, in ath10k_wmi_free_host_mem()
9534 ar->wmi.mem_chunks[i].vaddr, in ath10k_wmi_free_host_mem()
9535 ar->wmi.mem_chunks[i].paddr); in ath10k_wmi_free_host_mem()
9538 ar->wmi.num_mem_chunks = 0; in ath10k_wmi_free_host_mem()
9551 msdu = pkt_addr->vaddr; in ath10k_wmi_mgmt_tx_clean_up_pending()
9552 dma_unmap_single(ar->dev, pkt_addr->paddr, in ath10k_wmi_mgmt_tx_clean_up_pending()
9553 msdu->len, DMA_TO_DEVICE); in ath10k_wmi_mgmt_tx_clean_up_pending()
9554 ieee80211_free_txskb(ar->hw, msdu); in ath10k_wmi_mgmt_tx_clean_up_pending()
9562 ar->running_fw->fw_file.fw_features)) { in ath10k_wmi_detach()
9563 spin_lock_bh(&ar->data_lock); in ath10k_wmi_detach()
9564 idr_for_each(&ar->wmi.mgmt_pending_tx, in ath10k_wmi_detach()
9566 idr_destroy(&ar->wmi.mgmt_pending_tx); in ath10k_wmi_detach()
9567 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_detach()
9570 cancel_work_sync(&ar->svc_rdy_work); in ath10k_wmi_detach()
9571 dev_kfree_skb(ar->svc_rdy_skb); in ath10k_wmi_detach()