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.
6 * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
17 #include "wmi-tlv.h"
20 #include "wmi-ops.h"
1708 if (arg->passive) in ath10k_wmi_put_wmi_channel()
1710 if (arg->allow_ibss) in ath10k_wmi_put_wmi_channel()
1712 if (arg->allow_ht) in ath10k_wmi_put_wmi_channel()
1714 if (arg->allow_vht) in ath10k_wmi_put_wmi_channel()
1716 if (arg->ht40plus) in ath10k_wmi_put_wmi_channel()
1718 if (arg->chan_radar) in ath10k_wmi_put_wmi_channel()
1721 ch->band_center_freq2 = 0; in ath10k_wmi_put_wmi_channel()
1722 ch->mhz = __cpu_to_le32(arg->freq); in ath10k_wmi_put_wmi_channel()
1723 ch->band_center_freq1 = __cpu_to_le32(arg->band_center_freq1); in ath10k_wmi_put_wmi_channel()
1724 if (arg->mode == MODE_11AC_VHT80_80) { in ath10k_wmi_put_wmi_channel()
1725 ch->band_center_freq2 = __cpu_to_le32(arg->band_center_freq2); in ath10k_wmi_put_wmi_channel()
1726 chan = ieee80211_get_channel(ar->hw->wiphy, in ath10k_wmi_put_wmi_channel()
1727 arg->band_center_freq2 - 10); in ath10k_wmi_put_wmi_channel()
1730 if (arg->mode == MODE_11AC_VHT160) { in ath10k_wmi_put_wmi_channel()
1734 if (arg->freq > arg->band_center_freq1) { in ath10k_wmi_put_wmi_channel()
1735 band_center_freq1 = arg->band_center_freq1 + 40; in ath10k_wmi_put_wmi_channel()
1736 band_center_freq2 = arg->band_center_freq1 - 40; in ath10k_wmi_put_wmi_channel()
1738 band_center_freq1 = arg->band_center_freq1 - 40; in ath10k_wmi_put_wmi_channel()
1739 band_center_freq2 = arg->band_center_freq1 + 40; in ath10k_wmi_put_wmi_channel()
1742 ch->band_center_freq1 = in ath10k_wmi_put_wmi_channel()
1745 chan = ieee80211_get_channel(ar->hw->wiphy, in ath10k_wmi_put_wmi_channel()
1746 band_center_freq2 - 10); in ath10k_wmi_put_wmi_channel()
1748 ch->band_center_freq2 = __cpu_to_le32(arg->band_center_freq1); in ath10k_wmi_put_wmi_channel()
1751 if (chan && chan->flags & IEEE80211_CHAN_RADAR) in ath10k_wmi_put_wmi_channel()
1754 ch->min_power = arg->min_power; in ath10k_wmi_put_wmi_channel()
1755 ch->max_power = arg->max_power; in ath10k_wmi_put_wmi_channel()
1756 ch->reg_power = arg->max_reg_power; in ath10k_wmi_put_wmi_channel()
1757 ch->antenna_max = arg->max_antenna_gain; in ath10k_wmi_put_wmi_channel()
1758 ch->max_tx_power = arg->max_power; in ath10k_wmi_put_wmi_channel()
1761 ch->mode = arg->mode; in ath10k_wmi_put_wmi_channel()
1762 ch->flags |= __cpu_to_le32(flags); in ath10k_wmi_put_wmi_channel()
1769 time_left = wait_for_completion_timeout(&ar->wmi.service_ready, in ath10k_wmi_wait_for_service_ready()
1783 time_left = wait_for_completion_timeout(&ar->wmi.service_ready, in ath10k_wmi_wait_for_service_ready()
1787 return -ETIMEDOUT; in ath10k_wmi_wait_for_service_ready()
1800 time_left = wait_for_completion_timeout(&ar->wmi.unified_ready, in ath10k_wmi_wait_for_unified_ready()
1803 return -ETIMEDOUT; in ath10k_wmi_wait_for_unified_ready()
1817 if (!IS_ALIGNED((unsigned long)skb->data, 4)) in ath10k_wmi_alloc_skb()
1821 memset(skb->data, 0, round_len); in ath10k_wmi_alloc_skb()
1840 return -ENOMEM; in ath10k_wmi_cmd_send_nowait()
1844 cmd_hdr = (struct wmi_cmd_hdr *)skb->data; in ath10k_wmi_cmd_send_nowait()
1845 cmd_hdr->cmd_id = __cpu_to_le32(cmd); in ath10k_wmi_cmd_send_nowait()
1848 trace_ath10k_wmi_cmd(ar, cmd_id, skb->data, skb->len); in ath10k_wmi_cmd_send_nowait()
1849 ret = ath10k_htc_send(&ar->htc, ar->wmi.eid, skb); in ath10k_wmi_cmd_send_nowait()
1863 struct ath10k *ar = arvif->ar; in ath10k_wmi_tx_beacon_nowait()
1870 spin_lock_bh(&ar->data_lock); in ath10k_wmi_tx_beacon_nowait()
1872 bcn = arvif->beacon; in ath10k_wmi_tx_beacon_nowait()
1879 switch (arvif->beacon_state) { in ath10k_wmi_tx_beacon_nowait()
1884 arvif->beacon_state = ATH10K_BEACON_SENDING; in ath10k_wmi_tx_beacon_nowait()
1885 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_tx_beacon_nowait()
1887 dtim_zero = !!(cb->flags & ATH10K_SKB_F_DTIM_ZERO); in ath10k_wmi_tx_beacon_nowait()
1888 deliver_cab = !!(cb->flags & ATH10K_SKB_F_DELIVER_CAB); in ath10k_wmi_tx_beacon_nowait()
1889 ret = ath10k_wmi_beacon_send_ref_nowait(arvif->ar, in ath10k_wmi_tx_beacon_nowait()
1890 arvif->vdev_id, in ath10k_wmi_tx_beacon_nowait()
1891 bcn->data, bcn->len, in ath10k_wmi_tx_beacon_nowait()
1892 cb->paddr, in ath10k_wmi_tx_beacon_nowait()
1896 spin_lock_bh(&ar->data_lock); in ath10k_wmi_tx_beacon_nowait()
1899 arvif->beacon_state = ATH10K_BEACON_SENT; in ath10k_wmi_tx_beacon_nowait()
1901 arvif->beacon_state = ATH10K_BEACON_SCHEDULED; in ath10k_wmi_tx_beacon_nowait()
1905 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_tx_beacon_nowait()
1911 struct ath10k_vif *arvif = (void *)vif->drv_priv; in ath10k_wmi_tx_beacons_iter()
1918 ieee80211_iterate_active_interfaces_atomic(ar->hw, in ath10k_wmi_tx_beacons_nowait()
1929 wake_up(&ar->wmi.tx_credits_wq); in ath10k_wmi_op_ep_tx_credits()
1934 int ret = -EOPNOTSUPP; in ath10k_wmi_cmd_send()
1945 wait_event_timeout(ar->wmi.tx_credits_wq, ({ in ath10k_wmi_cmd_send()
1946 if (ar->state == ATH10K_STATE_WEDGED) { in ath10k_wmi_cmd_send()
1947 ret = -ESHUTDOWN; in ath10k_wmi_cmd_send()
1956 if (ret && test_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags)) in ath10k_wmi_cmd_send()
1957 ret = -ESHUTDOWN; in ath10k_wmi_cmd_send()
1959 (ret != -EAGAIN); in ath10k_wmi_cmd_send()
1965 if (ret == -EAGAIN) { in ath10k_wmi_cmd_send()
1984 u32 buf_len = msdu->len; in ath10k_wmi_op_gen_mgmt_tx()
1988 hdr = (struct ieee80211_hdr *)msdu->data; in ath10k_wmi_op_gen_mgmt_tx()
1989 fc = le16_to_cpu(hdr->frame_control); in ath10k_wmi_op_gen_mgmt_tx()
1991 if (cb->vif) { in ath10k_wmi_op_gen_mgmt_tx()
1992 arvif = (void *)cb->vif->drv_priv; in ath10k_wmi_op_gen_mgmt_tx()
1993 vdev_id = arvif->vdev_id; in ath10k_wmi_op_gen_mgmt_tx()
1998 if (WARN_ON_ONCE(!ieee80211_is_mgmt(hdr->frame_control))) in ath10k_wmi_op_gen_mgmt_tx()
1999 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_mgmt_tx()
2001 len = sizeof(cmd->hdr) + msdu->len; in ath10k_wmi_op_gen_mgmt_tx()
2003 if ((ieee80211_is_action(hdr->frame_control) || in ath10k_wmi_op_gen_mgmt_tx()
2004 ieee80211_is_deauth(hdr->frame_control) || in ath10k_wmi_op_gen_mgmt_tx()
2005 ieee80211_is_disassoc(hdr->frame_control)) && in ath10k_wmi_op_gen_mgmt_tx()
2006 ieee80211_has_protected(hdr->frame_control)) { in ath10k_wmi_op_gen_mgmt_tx()
2007 peer_addr = hdr->addr1; in ath10k_wmi_op_gen_mgmt_tx()
2012 if (cb->ucast_cipher == WLAN_CIPHER_SUITE_GCMP || in ath10k_wmi_op_gen_mgmt_tx()
2013 cb->ucast_cipher == WLAN_CIPHER_SUITE_GCMP_256) { in ath10k_wmi_op_gen_mgmt_tx()
2027 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_mgmt_tx()
2029 cmd = (struct wmi_mgmt_tx_cmd *)skb->data; in ath10k_wmi_op_gen_mgmt_tx()
2031 cmd->hdr.vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_mgmt_tx()
2032 cmd->hdr.tx_rate = 0; in ath10k_wmi_op_gen_mgmt_tx()
2033 cmd->hdr.tx_power = 0; in ath10k_wmi_op_gen_mgmt_tx()
2034 cmd->hdr.buf_len = __cpu_to_le32(buf_len); in ath10k_wmi_op_gen_mgmt_tx()
2036 ether_addr_copy(cmd->hdr.peer_macaddr.addr, ieee80211_get_DA(hdr)); in ath10k_wmi_op_gen_mgmt_tx()
2037 memcpy(cmd->buf, msdu->data, msdu->len); in ath10k_wmi_op_gen_mgmt_tx()
2040 msdu, skb->len, fc & IEEE80211_FCTL_FTYPE, in ath10k_wmi_op_gen_mgmt_tx()
2042 trace_ath10k_tx_hdr(ar, skb->data, skb->len); in ath10k_wmi_op_gen_mgmt_tx()
2043 trace_ath10k_tx_payload(ar, skb->data, skb->len); in ath10k_wmi_op_gen_mgmt_tx()
2050 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_scan_started()
2052 switch (ar->scan.state) { in ath10k_wmi_event_scan_started()
2057 ath10k_scan_state_str(ar->scan.state), in ath10k_wmi_event_scan_started()
2058 ar->scan.state); in ath10k_wmi_event_scan_started()
2061 ar->scan.state = ATH10K_SCAN_RUNNING; in ath10k_wmi_event_scan_started()
2063 if (ar->scan.is_roc) in ath10k_wmi_event_scan_started()
2064 ieee80211_ready_on_channel(ar->hw); in ath10k_wmi_event_scan_started()
2066 complete(&ar->scan.started); in ath10k_wmi_event_scan_started()
2073 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_scan_start_failed()
2075 switch (ar->scan.state) { in ath10k_wmi_event_scan_start_failed()
2080 ath10k_scan_state_str(ar->scan.state), in ath10k_wmi_event_scan_start_failed()
2081 ar->scan.state); in ath10k_wmi_event_scan_start_failed()
2084 complete(&ar->scan.started); in ath10k_wmi_event_scan_start_failed()
2092 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_scan_completed()
2094 switch (ar->scan.state) { in ath10k_wmi_event_scan_completed()
2106 ath10k_scan_state_str(ar->scan.state), in ath10k_wmi_event_scan_completed()
2107 ar->scan.state); in ath10k_wmi_event_scan_completed()
2118 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_scan_bss_chan()
2120 switch (ar->scan.state) { in ath10k_wmi_event_scan_bss_chan()
2124 ath10k_scan_state_str(ar->scan.state), in ath10k_wmi_event_scan_bss_chan()
2125 ar->scan.state); in ath10k_wmi_event_scan_bss_chan()
2129 ar->scan_channel = NULL; in ath10k_wmi_event_scan_bss_chan()
2136 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_scan_foreign_chan()
2138 switch (ar->scan.state) { in ath10k_wmi_event_scan_foreign_chan()
2142 ath10k_scan_state_str(ar->scan.state), in ath10k_wmi_event_scan_foreign_chan()
2143 ar->scan.state); in ath10k_wmi_event_scan_foreign_chan()
2147 ar->scan_channel = ieee80211_get_channel(ar->hw->wiphy, freq); in ath10k_wmi_event_scan_foreign_chan()
2149 if (ar->scan.is_roc && ar->scan.roc_freq == freq) in ath10k_wmi_event_scan_foreign_chan()
2150 complete(&ar->scan.on_channel); in ath10k_wmi_event_scan_foreign_chan()
2200 struct wmi_scan_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_scan_ev()
2202 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_scan_ev()
2203 return -EPROTO; in ath10k_wmi_op_pull_scan_ev()
2206 arg->event_type = ev->event_type; in ath10k_wmi_op_pull_scan_ev()
2207 arg->reason = ev->reason; in ath10k_wmi_op_pull_scan_ev()
2208 arg->channel_freq = ev->channel_freq; in ath10k_wmi_op_pull_scan_ev()
2209 arg->scan_req_id = ev->scan_req_id; in ath10k_wmi_op_pull_scan_ev()
2210 arg->scan_id = ev->scan_id; in ath10k_wmi_op_pull_scan_ev()
2211 arg->vdev_id = ev->vdev_id; in ath10k_wmi_op_pull_scan_ev()
2240 spin_lock_bh(&ar->data_lock); in ath10k_wmi_event_scan()
2246 ath10k_scan_state_str(ar->scan.state), ar->scan.state); in ath10k_wmi_event_scan()
2273 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_event_scan()
2284 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; in ath10k_wmi_handle_wep_reauth()
2289 if (!ieee80211_is_auth(hdr->frame_control) || in ath10k_wmi_handle_wep_reauth()
2290 !ieee80211_has_protected(hdr->frame_control)) in ath10k_wmi_handle_wep_reauth()
2293 hdrlen = ieee80211_hdrlen(hdr->frame_control); in ath10k_wmi_handle_wep_reauth()
2294 if (skb->len < (hdrlen + IEEE80211_WEP_IV_LEN)) in ath10k_wmi_handle_wep_reauth()
2297 keyidx = skb->data[hdrlen + (IEEE80211_WEP_IV_LEN - 1)] >> WEP_KEYID_SHIFT; in ath10k_wmi_handle_wep_reauth()
2300 spin_lock_bh(&ar->data_lock); in ath10k_wmi_handle_wep_reauth()
2302 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_handle_wep_reauth()
2307 status->flag |= RX_FLAG_DECRYPTED; in ath10k_wmi_handle_wep_reauth()
2323 ar->running_fw->fw_file.fw_features)) { in ath10k_wmi_op_pull_mgmt_rx_ev()
2324 ev_v2 = (struct wmi_mgmt_rx_event_v2 *)skb->data; in ath10k_wmi_op_pull_mgmt_rx_ev()
2325 ev_hdr = &ev_v2->hdr.v1; in ath10k_wmi_op_pull_mgmt_rx_ev()
2328 ev_v1 = (struct wmi_mgmt_rx_event_v1 *)skb->data; in ath10k_wmi_op_pull_mgmt_rx_ev()
2329 ev_hdr = &ev_v1->hdr; in ath10k_wmi_op_pull_mgmt_rx_ev()
2333 if (skb->len < pull_len) in ath10k_wmi_op_pull_mgmt_rx_ev()
2334 return -EPROTO; in ath10k_wmi_op_pull_mgmt_rx_ev()
2337 arg->channel = ev_hdr->channel; in ath10k_wmi_op_pull_mgmt_rx_ev()
2338 arg->buf_len = ev_hdr->buf_len; in ath10k_wmi_op_pull_mgmt_rx_ev()
2339 arg->status = ev_hdr->status; in ath10k_wmi_op_pull_mgmt_rx_ev()
2340 arg->snr = ev_hdr->snr; in ath10k_wmi_op_pull_mgmt_rx_ev()
2341 arg->phy_mode = ev_hdr->phy_mode; in ath10k_wmi_op_pull_mgmt_rx_ev()
2342 arg->rate = ev_hdr->rate; in ath10k_wmi_op_pull_mgmt_rx_ev()
2344 msdu_len = __le32_to_cpu(arg->buf_len); in ath10k_wmi_op_pull_mgmt_rx_ev()
2345 if (skb->len < msdu_len) in ath10k_wmi_op_pull_mgmt_rx_ev()
2346 return -EPROTO; in ath10k_wmi_op_pull_mgmt_rx_ev()
2348 if (le32_to_cpu(arg->status) & WMI_RX_STATUS_EXT_INFO) { in ath10k_wmi_op_pull_mgmt_rx_ev()
2349 len = ALIGN(le32_to_cpu(arg->buf_len), 4); in ath10k_wmi_op_pull_mgmt_rx_ev()
2350 ext_info = (struct wmi_mgmt_rx_ext_info *)(skb->data + len); in ath10k_wmi_op_pull_mgmt_rx_ev()
2351 memcpy(&arg->ext_info, ext_info, in ath10k_wmi_op_pull_mgmt_rx_ev()
2373 ev = (struct wmi_10_4_mgmt_rx_event *)skb->data; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2374 ev_hdr = &ev->hdr; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2377 if (skb->len < pull_len) in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2378 return -EPROTO; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2381 arg->channel = ev_hdr->channel; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2382 arg->buf_len = ev_hdr->buf_len; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2383 arg->status = ev_hdr->status; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2384 arg->snr = ev_hdr->snr; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2385 arg->phy_mode = ev_hdr->phy_mode; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2386 arg->rate = ev_hdr->rate; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2388 msdu_len = __le32_to_cpu(arg->buf_len); in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2389 if (skb->len < msdu_len) in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2390 return -EPROTO; in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2392 if (le32_to_cpu(arg->status) & WMI_RX_STATUS_EXT_INFO) { in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2393 len = ALIGN(le32_to_cpu(arg->buf_len), 4); in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2394 ext_info = (struct wmi_mgmt_rx_ext_info *)(skb->data + len); in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2395 memcpy(&arg->ext_info, ext_info, in ath10k_wmi_10_4_op_pull_mgmt_rx_ev()
2408 if (!ieee80211_has_protected(hdr->frame_control)) in ath10k_wmi_rx_is_decrypted()
2415 if (ieee80211_is_auth(hdr->frame_control)) in ath10k_wmi_rx_is_decrypted()
2422 ar->hw_params.sw_decrypt_mcast_mgmt) in ath10k_wmi_rx_is_decrypted()
2432 struct ath10k_wmi *wmi = &ar->wmi; in wmi_process_mgmt_tx_comp()
2437 spin_lock_bh(&ar->data_lock); in wmi_process_mgmt_tx_comp()
2439 pkt_addr = idr_find(&wmi->mgmt_pending_tx, param->desc_id); in wmi_process_mgmt_tx_comp()
2442 param->desc_id); in wmi_process_mgmt_tx_comp()
2443 ret = -ENOENT; in wmi_process_mgmt_tx_comp()
2447 msdu = pkt_addr->vaddr; in wmi_process_mgmt_tx_comp()
2448 dma_unmap_single(ar->dev, pkt_addr->paddr, in wmi_process_mgmt_tx_comp()
2449 msdu->len, DMA_TO_DEVICE); in wmi_process_mgmt_tx_comp()
2453 if (param->status) { in wmi_process_mgmt_tx_comp()
2454 info->flags &= ~IEEE80211_TX_STAT_ACK; in wmi_process_mgmt_tx_comp()
2456 info->flags |= IEEE80211_TX_STAT_ACK; in wmi_process_mgmt_tx_comp()
2457 info->status.ack_signal = ATH10K_DEFAULT_NOISE_FLOOR + in wmi_process_mgmt_tx_comp()
2458 param->ack_rssi; in wmi_process_mgmt_tx_comp()
2459 info->status.flags |= IEEE80211_TX_STATUS_ACK_SIGNAL_VALID; in wmi_process_mgmt_tx_comp()
2462 ieee80211_tx_status_irqsafe(ar->hw, msdu); in wmi_process_mgmt_tx_comp()
2467 idr_remove(&wmi->mgmt_pending_tx, param->desc_id); in wmi_process_mgmt_tx_comp()
2468 spin_unlock_bh(&ar->data_lock); in wmi_process_mgmt_tx_comp()
2488 if (test_bit(WMI_SERVICE_TX_DATA_ACK_RSSI, ar->wmi.svc_map)) in ath10k_wmi_event_mgmt_tx_compl()
2518 if (test_bit(WMI_SERVICE_TX_DATA_ACK_RSSI, ar->wmi.svc_map)) in ath10k_wmi_event_mgmt_tx_bundle_compl()
2544 ath10k_warn(ar, "failed to parse mgmt rx event: %d\n", ret); in ath10k_wmi_event_mgmt_rx()
2558 "event mgmt rx status %08x\n", rx_status); in ath10k_wmi_event_mgmt_rx()
2560 if ((test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags)) || in ath10k_wmi_event_mgmt_rx()
2568 status->flag |= RX_FLAG_MMIC_ERROR; in ath10k_wmi_event_mgmt_rx()
2571 status->mactime = in ath10k_wmi_event_mgmt_rx()
2573 status->flag |= RX_FLAG_MACTIME_END; in ath10k_wmi_event_mgmt_rx()
2575 /* Hardware can Rx CCK rates on 5GHz. In that case phy_mode is set to in ath10k_wmi_event_mgmt_rx()
2577 * of mgmt rx. in ath10k_wmi_event_mgmt_rx()
2580 status->band = NL80211_BAND_2GHZ; in ath10k_wmi_event_mgmt_rx()
2582 status->band = NL80211_BAND_5GHZ; in ath10k_wmi_event_mgmt_rx()
2592 if (phy_mode == MODE_11B && status->band == NL80211_BAND_5GHZ) in ath10k_wmi_event_mgmt_rx()
2593 ath10k_dbg(ar, ATH10K_DBG_MGMT, "wmi mgmt rx 11b (CCK) on 5GHz\n"); in ath10k_wmi_event_mgmt_rx()
2595 sband = &ar->mac.sbands[status->band]; in ath10k_wmi_event_mgmt_rx()
2597 status->freq = ieee80211_channel_to_frequency(channel, status->band); in ath10k_wmi_event_mgmt_rx()
2598 status->signal = snr + ATH10K_DEFAULT_NOISE_FLOOR; in ath10k_wmi_event_mgmt_rx()
2600 BUILD_BUG_ON(ARRAY_SIZE(status->chain_signal) != ARRAY_SIZE(arg.rssi)); in ath10k_wmi_event_mgmt_rx()
2602 for (i = 0; i < ARRAY_SIZE(status->chain_signal); i++) { in ath10k_wmi_event_mgmt_rx()
2603 status->chains &= ~BIT(i); in ath10k_wmi_event_mgmt_rx()
2608 status->chain_signal[i] = ATH10K_DEFAULT_NOISE_FLOOR + rssi; in ath10k_wmi_event_mgmt_rx()
2609 status->chains |= BIT(i); in ath10k_wmi_event_mgmt_rx()
2613 status->rate_idx = ath10k_mac_bitrate_to_idx(sband, rate / 100); in ath10k_wmi_event_mgmt_rx()
2615 hdr = (struct ieee80211_hdr *)skb->data; in ath10k_wmi_event_mgmt_rx()
2616 fc = le16_to_cpu(hdr->frame_control); in ath10k_wmi_event_mgmt_rx()
2622 status->flag |= RX_FLAG_SKIP_MONITOR; in ath10k_wmi_event_mgmt_rx()
2627 status->flag |= RX_FLAG_DECRYPTED; in ath10k_wmi_event_mgmt_rx()
2629 if (!ieee80211_is_action(hdr->frame_control) && in ath10k_wmi_event_mgmt_rx()
2630 !ieee80211_is_deauth(hdr->frame_control) && in ath10k_wmi_event_mgmt_rx()
2631 !ieee80211_is_disassoc(hdr->frame_control)) { in ath10k_wmi_event_mgmt_rx()
2632 status->flag |= RX_FLAG_IV_STRIPPED | in ath10k_wmi_event_mgmt_rx()
2634 hdr->frame_control = __cpu_to_le16(fc & in ath10k_wmi_event_mgmt_rx()
2639 if (ieee80211_is_beacon(hdr->frame_control)) in ath10k_wmi_event_mgmt_rx()
2642 if (ieee80211_is_beacon(hdr->frame_control) || in ath10k_wmi_event_mgmt_rx()
2643 ieee80211_is_probe_resp(hdr->frame_control)) in ath10k_wmi_event_mgmt_rx()
2644 status->boottime_ns = ktime_get_boottime_ns(); in ath10k_wmi_event_mgmt_rx()
2647 "event mgmt rx skb %p len %d ftype %02x stype %02x\n", in ath10k_wmi_event_mgmt_rx()
2648 skb, skb->len, in ath10k_wmi_event_mgmt_rx()
2652 "event mgmt rx freq %d band %d snr %d, rate_idx %d\n", in ath10k_wmi_event_mgmt_rx()
2653 status->freq, status->band, status->signal, in ath10k_wmi_event_mgmt_rx()
2654 status->rate_idx); in ath10k_wmi_event_mgmt_rx()
2656 ieee80211_rx_ni(ar->hw, skb); in ath10k_wmi_event_mgmt_rx()
2667 sband = ar->hw->wiphy->bands[band]; in freq_to_idx()
2671 for (ch = 0; ch < sband->n_channels; ch++, idx++) in freq_to_idx()
2672 if (sband->channels[ch].center_freq == freq) in freq_to_idx()
2683 struct wmi_chan_info_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_ch_info_ev()
2685 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_ch_info_ev()
2686 return -EPROTO; in ath10k_wmi_op_pull_ch_info_ev()
2689 arg->err_code = ev->err_code; in ath10k_wmi_op_pull_ch_info_ev()
2690 arg->freq = ev->freq; in ath10k_wmi_op_pull_ch_info_ev()
2691 arg->cmd_flags = ev->cmd_flags; in ath10k_wmi_op_pull_ch_info_ev()
2692 arg->noise_floor = ev->noise_floor; in ath10k_wmi_op_pull_ch_info_ev()
2693 arg->rx_clear_count = ev->rx_clear_count; in ath10k_wmi_op_pull_ch_info_ev()
2694 arg->cycle_count = ev->cycle_count; in ath10k_wmi_op_pull_ch_info_ev()
2703 struct wmi_10_4_chan_info_event *ev = (void *)skb->data; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2705 if (skb->len < sizeof(*ev)) in ath10k_wmi_10_4_op_pull_ch_info_ev()
2706 return -EPROTO; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2709 arg->err_code = ev->err_code; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2710 arg->freq = ev->freq; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2711 arg->cmd_flags = ev->cmd_flags; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2712 arg->noise_floor = ev->noise_floor; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2713 arg->rx_clear_count = ev->rx_clear_count; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2714 arg->cycle_count = ev->cycle_count; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2715 arg->chan_tx_pwr_range = ev->chan_tx_pwr_range; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2716 arg->chan_tx_pwr_tp = ev->chan_tx_pwr_tp; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2717 arg->rx_frame_count = ev->rx_frame_count; in ath10k_wmi_10_4_op_pull_ch_info_ev()
2732 if (params->cmd_flags & WMI_CHAN_INFO_FLAG_COMPLETE) { in ath10k_wmi_event_chan_info_unpaired()
2737 idx = freq_to_idx(ar, params->freq); in ath10k_wmi_event_chan_info_unpaired()
2738 if (idx >= ARRAY_SIZE(ar->survey)) { in ath10k_wmi_event_chan_info_unpaired()
2740 params->freq, idx); in ath10k_wmi_event_chan_info_unpaired()
2744 survey = &ar->survey[idx]; in ath10k_wmi_event_chan_info_unpaired()
2746 if (!params->mac_clk_mhz) in ath10k_wmi_event_chan_info_unpaired()
2751 survey->noise = params->noise_floor; in ath10k_wmi_event_chan_info_unpaired()
2752 survey->time = (params->cycle_count / params->mac_clk_mhz) / 1000; in ath10k_wmi_event_chan_info_unpaired()
2753 survey->time_busy = (params->rx_clear_count / params->mac_clk_mhz) / 1000; in ath10k_wmi_event_chan_info_unpaired()
2754 survey->filled |= SURVEY_INFO_NOISE_DBM | SURVEY_INFO_TIME | in ath10k_wmi_event_chan_info_unpaired()
2768 idx = freq_to_idx(ar, params->freq); in ath10k_wmi_event_chan_info_paired()
2769 if (idx >= ARRAY_SIZE(ar->survey)) { in ath10k_wmi_event_chan_info_paired()
2771 params->freq, idx); in ath10k_wmi_event_chan_info_paired()
2775 if (params->cmd_flags & WMI_CHAN_INFO_FLAG_COMPLETE) { in ath10k_wmi_event_chan_info_paired()
2776 if (ar->ch_info_can_report_survey) { in ath10k_wmi_event_chan_info_paired()
2777 survey = &ar->survey[idx]; in ath10k_wmi_event_chan_info_paired()
2778 survey->noise = params->noise_floor; in ath10k_wmi_event_chan_info_paired()
2779 survey->filled = SURVEY_INFO_NOISE_DBM; in ath10k_wmi_event_chan_info_paired()
2783 params->cycle_count, in ath10k_wmi_event_chan_info_paired()
2784 params->rx_clear_count, in ath10k_wmi_event_chan_info_paired()
2785 ar->survey_last_cycle_count, in ath10k_wmi_event_chan_info_paired()
2786 ar->survey_last_rx_clear_count); in ath10k_wmi_event_chan_info_paired()
2789 ar->ch_info_can_report_survey = false; in ath10k_wmi_event_chan_info_paired()
2791 ar->ch_info_can_report_survey = true; in ath10k_wmi_event_chan_info_paired()
2794 if (!(params->cmd_flags & WMI_CHAN_INFO_FLAG_PRE_COMPLETE)) { in ath10k_wmi_event_chan_info_paired()
2795 ar->survey_last_rx_clear_count = params->rx_clear_count; in ath10k_wmi_event_chan_info_paired()
2796 ar->survey_last_cycle_count = params->cycle_count; in ath10k_wmi_event_chan_info_paired()
2826 spin_lock_bh(&ar->data_lock); in ath10k_wmi_event_chan_info()
2828 switch (ar->scan.state) { in ath10k_wmi_event_chan_info()
2839 ar->running_fw->fw_file.fw_features)) in ath10k_wmi_event_chan_info()
2845 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_event_chan_info()
2864 complete(&ar->wmi.barrier); in ath10k_wmi_event_echo()
2870 skb->len); in ath10k_wmi_event_debug_mesg()
2872 trace_ath10k_wmi_dbglog(ar, skb->data, skb->len); in ath10k_wmi_event_debug_mesg()
2880 dst->ch_noise_floor = __le32_to_cpu(src->chan_nf); in ath10k_wmi_pull_pdev_stats_base()
2881 dst->tx_frame_count = __le32_to_cpu(src->tx_frame_count); in ath10k_wmi_pull_pdev_stats_base()
2882 dst->rx_frame_count = __le32_to_cpu(src->rx_frame_count); in ath10k_wmi_pull_pdev_stats_base()
2883 dst->rx_clear_count = __le32_to_cpu(src->rx_clear_count); in ath10k_wmi_pull_pdev_stats_base()
2884 dst->cycle_count = __le32_to_cpu(src->cycle_count); in ath10k_wmi_pull_pdev_stats_base()
2885 dst->phy_err_count = __le32_to_cpu(src->phy_err_count); in ath10k_wmi_pull_pdev_stats_base()
2886 dst->chan_tx_power = __le32_to_cpu(src->chan_tx_pwr); in ath10k_wmi_pull_pdev_stats_base()
2892 dst->comp_queued = __le32_to_cpu(src->comp_queued); in ath10k_wmi_pull_pdev_stats_tx()
2893 dst->comp_delivered = __le32_to_cpu(src->comp_delivered); in ath10k_wmi_pull_pdev_stats_tx()
2894 dst->msdu_enqued = __le32_to_cpu(src->msdu_enqued); in ath10k_wmi_pull_pdev_stats_tx()
2895 dst->mpdu_enqued = __le32_to_cpu(src->mpdu_enqued); in ath10k_wmi_pull_pdev_stats_tx()
2896 dst->wmm_drop = __le32_to_cpu(src->wmm_drop); in ath10k_wmi_pull_pdev_stats_tx()
2897 dst->local_enqued = __le32_to_cpu(src->local_enqued); in ath10k_wmi_pull_pdev_stats_tx()
2898 dst->local_freed = __le32_to_cpu(src->local_freed); in ath10k_wmi_pull_pdev_stats_tx()
2899 dst->hw_queued = __le32_to_cpu(src->hw_queued); in ath10k_wmi_pull_pdev_stats_tx()
2900 dst->hw_reaped = __le32_to_cpu(src->hw_reaped); in ath10k_wmi_pull_pdev_stats_tx()
2901 dst->underrun = __le32_to_cpu(src->underrun); in ath10k_wmi_pull_pdev_stats_tx()
2902 dst->tx_abort = __le32_to_cpu(src->tx_abort); in ath10k_wmi_pull_pdev_stats_tx()
2903 dst->mpdus_requeued = __le32_to_cpu(src->mpdus_requeued); in ath10k_wmi_pull_pdev_stats_tx()
2904 dst->tx_ko = __le32_to_cpu(src->tx_ko); in ath10k_wmi_pull_pdev_stats_tx()
2905 dst->data_rc = __le32_to_cpu(src->data_rc); in ath10k_wmi_pull_pdev_stats_tx()
2906 dst->self_triggers = __le32_to_cpu(src->self_triggers); in ath10k_wmi_pull_pdev_stats_tx()
2907 dst->sw_retry_failure = __le32_to_cpu(src->sw_retry_failure); in ath10k_wmi_pull_pdev_stats_tx()
2908 dst->illgl_rate_phy_err = __le32_to_cpu(src->illgl_rate_phy_err); in ath10k_wmi_pull_pdev_stats_tx()
2909 dst->pdev_cont_xretry = __le32_to_cpu(src->pdev_cont_xretry); in ath10k_wmi_pull_pdev_stats_tx()
2910 dst->pdev_tx_timeout = __le32_to_cpu(src->pdev_tx_timeout); in ath10k_wmi_pull_pdev_stats_tx()
2911 dst->pdev_resets = __le32_to_cpu(src->pdev_resets); in ath10k_wmi_pull_pdev_stats_tx()
2912 dst->phy_underrun = __le32_to_cpu(src->phy_underrun); in ath10k_wmi_pull_pdev_stats_tx()
2913 dst->txop_ovf = __le32_to_cpu(src->txop_ovf); in ath10k_wmi_pull_pdev_stats_tx()
2920 dst->comp_queued = __le32_to_cpu(src->comp_queued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2921 dst->comp_delivered = __le32_to_cpu(src->comp_delivered); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2922 dst->msdu_enqued = __le32_to_cpu(src->msdu_enqued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2923 dst->mpdu_enqued = __le32_to_cpu(src->mpdu_enqued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2924 dst->wmm_drop = __le32_to_cpu(src->wmm_drop); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2925 dst->local_enqued = __le32_to_cpu(src->local_enqued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2926 dst->local_freed = __le32_to_cpu(src->local_freed); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2927 dst->hw_queued = __le32_to_cpu(src->hw_queued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2928 dst->hw_reaped = __le32_to_cpu(src->hw_reaped); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2929 dst->underrun = __le32_to_cpu(src->underrun); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2930 dst->tx_abort = __le32_to_cpu(src->tx_abort); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2931 dst->mpdus_requeued = __le32_to_cpu(src->mpdus_requeued); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2932 dst->tx_ko = __le32_to_cpu(src->tx_ko); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2933 dst->data_rc = __le32_to_cpu(src->data_rc); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2934 dst->self_triggers = __le32_to_cpu(src->self_triggers); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2935 dst->sw_retry_failure = __le32_to_cpu(src->sw_retry_failure); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2936 dst->illgl_rate_phy_err = __le32_to_cpu(src->illgl_rate_phy_err); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2937 dst->pdev_cont_xretry = __le32_to_cpu(src->pdev_cont_xretry); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2938 dst->pdev_tx_timeout = __le32_to_cpu(src->pdev_tx_timeout); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2939 dst->pdev_resets = __le32_to_cpu(src->pdev_resets); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2940 dst->phy_underrun = __le32_to_cpu(src->phy_underrun); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2941 dst->txop_ovf = __le32_to_cpu(src->txop_ovf); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2942 dst->hw_paused = __le32_to_cpu(src->hw_paused); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2943 dst->seq_posted = __le32_to_cpu(src->seq_posted); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2944 dst->seq_failed_queueing = in ath10k_wmi_10_4_pull_pdev_stats_tx()
2945 __le32_to_cpu(src->seq_failed_queueing); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2946 dst->seq_completed = __le32_to_cpu(src->seq_completed); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2947 dst->seq_restarted = __le32_to_cpu(src->seq_restarted); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2948 dst->mu_seq_posted = __le32_to_cpu(src->mu_seq_posted); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2949 dst->mpdus_sw_flush = __le32_to_cpu(src->mpdus_sw_flush); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2950 dst->mpdus_hw_filter = __le32_to_cpu(src->mpdus_hw_filter); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2951 dst->mpdus_truncated = __le32_to_cpu(src->mpdus_truncated); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2952 dst->mpdus_ack_failed = __le32_to_cpu(src->mpdus_ack_failed); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2953 dst->mpdus_hw_filter = __le32_to_cpu(src->mpdus_hw_filter); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2954 dst->mpdus_expired = __le32_to_cpu(src->mpdus_expired); in ath10k_wmi_10_4_pull_pdev_stats_tx()
2960 dst->mid_ppdu_route_change = __le32_to_cpu(src->mid_ppdu_route_change); in ath10k_wmi_pull_pdev_stats_rx()
2961 dst->status_rcvd = __le32_to_cpu(src->status_rcvd); in ath10k_wmi_pull_pdev_stats_rx()
2962 dst->r0_frags = __le32_to_cpu(src->r0_frags); in ath10k_wmi_pull_pdev_stats_rx()
2963 dst->r1_frags = __le32_to_cpu(src->r1_frags); in ath10k_wmi_pull_pdev_stats_rx()
2964 dst->r2_frags = __le32_to_cpu(src->r2_frags); in ath10k_wmi_pull_pdev_stats_rx()
2965 dst->r3_frags = __le32_to_cpu(src->r3_frags); in ath10k_wmi_pull_pdev_stats_rx()
2966 dst->htt_msdus = __le32_to_cpu(src->htt_msdus); in ath10k_wmi_pull_pdev_stats_rx()
2967 dst->htt_mpdus = __le32_to_cpu(src->htt_mpdus); in ath10k_wmi_pull_pdev_stats_rx()
2968 dst->loc_msdus = __le32_to_cpu(src->loc_msdus); in ath10k_wmi_pull_pdev_stats_rx()
2969 dst->loc_mpdus = __le32_to_cpu(src->loc_mpdus); in ath10k_wmi_pull_pdev_stats_rx()
2970 dst->oversize_amsdu = __le32_to_cpu(src->oversize_amsdu); in ath10k_wmi_pull_pdev_stats_rx()
2971 dst->phy_errs = __le32_to_cpu(src->phy_errs); in ath10k_wmi_pull_pdev_stats_rx()
2972 dst->phy_err_drop = __le32_to_cpu(src->phy_err_drop); in ath10k_wmi_pull_pdev_stats_rx()
2973 dst->mpdu_errs = __le32_to_cpu(src->mpdu_errs); in ath10k_wmi_pull_pdev_stats_rx()
2979 dst->ack_rx_bad = __le32_to_cpu(src->ack_rx_bad); in ath10k_wmi_pull_pdev_stats_extra()
2980 dst->rts_bad = __le32_to_cpu(src->rts_bad); in ath10k_wmi_pull_pdev_stats_extra()
2981 dst->rts_good = __le32_to_cpu(src->rts_good); in ath10k_wmi_pull_pdev_stats_extra()
2982 dst->fcs_bad = __le32_to_cpu(src->fcs_bad); in ath10k_wmi_pull_pdev_stats_extra()
2983 dst->no_beacons = __le32_to_cpu(src->no_beacons); in ath10k_wmi_pull_pdev_stats_extra()
2984 dst->mib_int_count = __le32_to_cpu(src->mib_int_count); in ath10k_wmi_pull_pdev_stats_extra()
2990 ether_addr_copy(dst->peer_macaddr, src->peer_macaddr.addr); in ath10k_wmi_pull_peer_stats()
2991 dst->peer_rssi = __le32_to_cpu(src->peer_rssi); in ath10k_wmi_pull_peer_stats()
2992 dst->peer_tx_rate = __le32_to_cpu(src->peer_tx_rate); in ath10k_wmi_pull_peer_stats()
2999 ether_addr_copy(dst->peer_macaddr, src->peer_macaddr.addr); in ath10k_wmi_10_4_pull_peer_stats()
3000 dst->peer_rssi = __le32_to_cpu(src->peer_rssi); in ath10k_wmi_10_4_pull_peer_stats()
3001 dst->peer_tx_rate = __le32_to_cpu(src->peer_tx_rate); in ath10k_wmi_10_4_pull_peer_stats()
3002 dst->peer_rx_rate = __le32_to_cpu(src->peer_rx_rate); in ath10k_wmi_10_4_pull_peer_stats()
3009 dst->vdev_id = __le32_to_cpu(src->vdev_id); in ath10k_wmi_10_4_pull_vdev_stats()
3010 dst->ppdu_aggr_cnt = __le32_to_cpu(src->ppdu_aggr_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
3011 dst->ppdu_noack = __le32_to_cpu(src->ppdu_noack); in ath10k_wmi_10_4_pull_vdev_stats()
3012 dst->mpdu_queued = __le32_to_cpu(src->mpdu_queued); in ath10k_wmi_10_4_pull_vdev_stats()
3013 dst->ppdu_nonaggr_cnt = __le32_to_cpu(src->ppdu_nonaggr_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
3014 dst->mpdu_sw_requeued = __le32_to_cpu(src->mpdu_sw_requeued); in ath10k_wmi_10_4_pull_vdev_stats()
3015 dst->mpdu_suc_retry = __le32_to_cpu(src->mpdu_suc_retry); in ath10k_wmi_10_4_pull_vdev_stats()
3016 dst->mpdu_suc_multitry = __le32_to_cpu(src->mpdu_suc_multitry); in ath10k_wmi_10_4_pull_vdev_stats()
3017 dst->mpdu_fail_retry = __le32_to_cpu(src->mpdu_fail_retry); in ath10k_wmi_10_4_pull_vdev_stats()
3018 dst->tx_ftm_suc = __le32_to_cpu(src->tx_ftm_suc); in ath10k_wmi_10_4_pull_vdev_stats()
3019 dst->tx_ftm_suc_retry = __le32_to_cpu(src->tx_ftm_suc_retry); in ath10k_wmi_10_4_pull_vdev_stats()
3020 dst->tx_ftm_fail = __le32_to_cpu(src->tx_ftm_fail); in ath10k_wmi_10_4_pull_vdev_stats()
3021 dst->rx_ftmr_cnt = __le32_to_cpu(src->rx_ftmr_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
3022 dst->rx_ftmr_dup_cnt = __le32_to_cpu(src->rx_ftmr_dup_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
3023 dst->rx_iftmr_cnt = __le32_to_cpu(src->rx_iftmr_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
3024 dst->rx_iftmr_dup_cnt = __le32_to_cpu(src->rx_iftmr_dup_cnt); in ath10k_wmi_10_4_pull_vdev_stats()
3031 const struct wmi_stats_event *ev = (void *)skb->data; in ath10k_wmi_main_op_pull_fw_stats()
3036 return -EPROTO; in ath10k_wmi_main_op_pull_fw_stats()
3038 num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats); in ath10k_wmi_main_op_pull_fw_stats()
3039 num_peer_stats = __le32_to_cpu(ev->num_peer_stats); in ath10k_wmi_main_op_pull_fw_stats()
3045 src = (void *)skb->data; in ath10k_wmi_main_op_pull_fw_stats()
3047 return -EPROTO; in ath10k_wmi_main_op_pull_fw_stats()
3053 ath10k_wmi_pull_pdev_stats_base(&src->base, dst); in ath10k_wmi_main_op_pull_fw_stats()
3054 ath10k_wmi_pull_pdev_stats_tx(&src->tx, dst); in ath10k_wmi_main_op_pull_fw_stats()
3055 ath10k_wmi_pull_pdev_stats_rx(&src->rx, dst); in ath10k_wmi_main_op_pull_fw_stats()
3057 list_add_tail(&dst->list, &stats->pdevs); in ath10k_wmi_main_op_pull_fw_stats()
3066 src = (void *)skb->data; in ath10k_wmi_main_op_pull_fw_stats()
3068 return -EPROTO; in ath10k_wmi_main_op_pull_fw_stats()
3075 list_add_tail(&dst->list, &stats->peers); in ath10k_wmi_main_op_pull_fw_stats()
3085 const struct wmi_stats_event *ev = (void *)skb->data; in ath10k_wmi_10x_op_pull_fw_stats()
3090 return -EPROTO; in ath10k_wmi_10x_op_pull_fw_stats()
3092 num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats); in ath10k_wmi_10x_op_pull_fw_stats()
3093 num_peer_stats = __le32_to_cpu(ev->num_peer_stats); in ath10k_wmi_10x_op_pull_fw_stats()
3099 src = (void *)skb->data; in ath10k_wmi_10x_op_pull_fw_stats()
3101 return -EPROTO; in ath10k_wmi_10x_op_pull_fw_stats()
3107 ath10k_wmi_pull_pdev_stats_base(&src->base, dst); in ath10k_wmi_10x_op_pull_fw_stats()
3108 ath10k_wmi_pull_pdev_stats_tx(&src->tx, dst); in ath10k_wmi_10x_op_pull_fw_stats()
3109 ath10k_wmi_pull_pdev_stats_rx(&src->rx, dst); in ath10k_wmi_10x_op_pull_fw_stats()
3110 ath10k_wmi_pull_pdev_stats_extra(&src->extra, dst); in ath10k_wmi_10x_op_pull_fw_stats()
3112 list_add_tail(&dst->list, &stats->pdevs); in ath10k_wmi_10x_op_pull_fw_stats()
3121 src = (void *)skb->data; in ath10k_wmi_10x_op_pull_fw_stats()
3123 return -EPROTO; in ath10k_wmi_10x_op_pull_fw_stats()
3129 ath10k_wmi_pull_peer_stats(&src->old, dst); in ath10k_wmi_10x_op_pull_fw_stats()
3131 dst->peer_rx_rate = __le32_to_cpu(src->peer_rx_rate); in ath10k_wmi_10x_op_pull_fw_stats()
3133 list_add_tail(&dst->list, &stats->peers); in ath10k_wmi_10x_op_pull_fw_stats()
3143 const struct wmi_10_2_stats_event *ev = (void *)skb->data; in ath10k_wmi_10_2_op_pull_fw_stats()
3150 return -EPROTO; in ath10k_wmi_10_2_op_pull_fw_stats()
3152 num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats); in ath10k_wmi_10_2_op_pull_fw_stats()
3153 num_pdev_ext_stats = __le32_to_cpu(ev->num_pdev_ext_stats); in ath10k_wmi_10_2_op_pull_fw_stats()
3154 num_peer_stats = __le32_to_cpu(ev->num_peer_stats); in ath10k_wmi_10_2_op_pull_fw_stats()
3160 src = (void *)skb->data; in ath10k_wmi_10_2_op_pull_fw_stats()
3162 return -EPROTO; in ath10k_wmi_10_2_op_pull_fw_stats()
3168 ath10k_wmi_pull_pdev_stats_base(&src->base, dst); in ath10k_wmi_10_2_op_pull_fw_stats()
3169 ath10k_wmi_pull_pdev_stats_tx(&src->tx, dst); in ath10k_wmi_10_2_op_pull_fw_stats()
3170 ath10k_wmi_pull_pdev_stats_rx(&src->rx, dst); in ath10k_wmi_10_2_op_pull_fw_stats()
3171 ath10k_wmi_pull_pdev_stats_extra(&src->extra, dst); in ath10k_wmi_10_2_op_pull_fw_stats()
3174 list_add_tail(&dst->list, &stats->pdevs); in ath10k_wmi_10_2_op_pull_fw_stats()
3180 src = (void *)skb->data; in ath10k_wmi_10_2_op_pull_fw_stats()
3182 return -EPROTO; in ath10k_wmi_10_2_op_pull_fw_stats()
3187 * required to parse following sub-structures properly. in ath10k_wmi_10_2_op_pull_fw_stats()
3197 src = (void *)skb->data; in ath10k_wmi_10_2_op_pull_fw_stats()
3199 return -EPROTO; in ath10k_wmi_10_2_op_pull_fw_stats()
3205 ath10k_wmi_pull_peer_stats(&src->old, dst); in ath10k_wmi_10_2_op_pull_fw_stats()
3207 dst->peer_rx_rate = __le32_to_cpu(src->peer_rx_rate); in ath10k_wmi_10_2_op_pull_fw_stats()
3210 list_add_tail(&dst->list, &stats->peers); in ath10k_wmi_10_2_op_pull_fw_stats()
3220 const struct wmi_10_2_stats_event *ev = (void *)skb->data; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3227 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3229 num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3230 num_pdev_ext_stats = __le32_to_cpu(ev->num_pdev_ext_stats); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3231 num_peer_stats = __le32_to_cpu(ev->num_peer_stats); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3237 src = (void *)skb->data; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3239 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3245 ath10k_wmi_pull_pdev_stats_base(&src->base, dst); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3246 ath10k_wmi_pull_pdev_stats_tx(&src->tx, dst); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3247 ath10k_wmi_pull_pdev_stats_rx(&src->rx, dst); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3248 ath10k_wmi_pull_pdev_stats_extra(&src->extra, dst); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3251 list_add_tail(&dst->list, &stats->pdevs); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3257 src = (void *)skb->data; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3259 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3264 * required to parse following sub-structures properly. in ath10k_wmi_10_2_4_op_pull_fw_stats()
3275 if (test_bit(WMI_SERVICE_PEER_STATS, ar->wmi.svc_map)) in ath10k_wmi_10_2_4_op_pull_fw_stats()
3280 src = (void *)skb->data; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3282 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_fw_stats()
3288 ath10k_wmi_pull_peer_stats(&src->common.old, dst); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3290 dst->peer_rx_rate = __le32_to_cpu(src->common.peer_rx_rate); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3293 dst->rx_duration = __le32_to_cpu(src->rx_duration); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3296 list_add_tail(&dst->list, &stats->peers); in ath10k_wmi_10_2_4_op_pull_fw_stats()
3306 const struct wmi_10_2_stats_event *ev = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3316 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3318 num_pdev_stats = __le32_to_cpu(ev->num_pdev_stats); in ath10k_wmi_10_4_op_pull_fw_stats()
3319 num_pdev_ext_stats = __le32_to_cpu(ev->num_pdev_ext_stats); in ath10k_wmi_10_4_op_pull_fw_stats()
3320 num_vdev_stats = __le32_to_cpu(ev->num_vdev_stats); in ath10k_wmi_10_4_op_pull_fw_stats()
3321 num_peer_stats = __le32_to_cpu(ev->num_peer_stats); in ath10k_wmi_10_4_op_pull_fw_stats()
3322 num_bcnflt_stats = __le32_to_cpu(ev->num_bcnflt_stats); in ath10k_wmi_10_4_op_pull_fw_stats()
3323 stats_id = __le32_to_cpu(ev->stats_id); in ath10k_wmi_10_4_op_pull_fw_stats()
3329 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3331 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3337 ath10k_wmi_pull_pdev_stats_base(&src->base, dst); in ath10k_wmi_10_4_op_pull_fw_stats()
3338 ath10k_wmi_10_4_pull_pdev_stats_tx(&src->tx, dst); in ath10k_wmi_10_4_op_pull_fw_stats()
3339 ath10k_wmi_pull_pdev_stats_rx(&src->rx, dst); in ath10k_wmi_10_4_op_pull_fw_stats()
3340 dst->rx_ovfl_errs = __le32_to_cpu(src->rx_ovfl_errs); in ath10k_wmi_10_4_op_pull_fw_stats()
3341 ath10k_wmi_pull_pdev_stats_extra(&src->extra, dst); in ath10k_wmi_10_4_op_pull_fw_stats()
3343 list_add_tail(&dst->list, &stats->pdevs); in ath10k_wmi_10_4_op_pull_fw_stats()
3349 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3351 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3356 * required to parse following sub-structures properly. in ath10k_wmi_10_4_op_pull_fw_stats()
3366 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3368 return -EPROTO; 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()
3384 list_add_tail(&dst->list, &stats->peers); in ath10k_wmi_10_4_op_pull_fw_stats()
3390 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3392 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3397 * required to parse following sub-structures properly. in ath10k_wmi_10_4_op_pull_fw_stats()
3402 stats->extended = true; in ath10k_wmi_10_4_op_pull_fw_stats()
3408 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3410 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3416 ether_addr_copy(dst->peer_macaddr, in ath10k_wmi_10_4_op_pull_fw_stats()
3417 src->peer_macaddr.addr); in ath10k_wmi_10_4_op_pull_fw_stats()
3418 dst->rx_duration = __le32_to_cpu(src->rx_duration); in ath10k_wmi_10_4_op_pull_fw_stats()
3419 list_add_tail(&dst->list, &stats->peers_extd); in ath10k_wmi_10_4_op_pull_fw_stats()
3428 src = (void *)skb->data; in ath10k_wmi_10_4_op_pull_fw_stats()
3430 return -EPROTO; in ath10k_wmi_10_4_op_pull_fw_stats()
3436 list_add_tail(&dst->list, &stats->vdevs); in ath10k_wmi_10_4_op_pull_fw_stats()
3453 struct wmi_vdev_start_response_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_vdev_start_ev()
3455 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_vdev_start_ev()
3456 return -EPROTO; in ath10k_wmi_op_pull_vdev_start_ev()
3459 arg->vdev_id = ev->vdev_id; in ath10k_wmi_op_pull_vdev_start_ev()
3460 arg->req_id = ev->req_id; in ath10k_wmi_op_pull_vdev_start_ev()
3461 arg->resp_type = ev->resp_type; in ath10k_wmi_op_pull_vdev_start_ev()
3462 arg->status = ev->status; in ath10k_wmi_op_pull_vdev_start_ev()
3475 ar->last_wmi_vdev_start_status = 0; in ath10k_wmi_event_vdev_start_resp()
3480 ar->last_wmi_vdev_start_status = ret; in ath10k_wmi_event_vdev_start_resp()
3486 ath10k_warn(ar, "vdev-start-response reports status error: %d (%s)\n", in ath10k_wmi_event_vdev_start_resp()
3488 "chan-invalid" : "unknown"); in ath10k_wmi_event_vdev_start_resp()
3492 ar->last_wmi_vdev_start_status = -EINVAL; in ath10k_wmi_event_vdev_start_resp()
3496 complete(&ar->vdev_setup_done); in ath10k_wmi_event_vdev_start_resp()
3502 complete(&ar->vdev_setup_done); in ath10k_wmi_event_vdev_stopped()
3509 struct wmi_peer_sta_kickout_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_peer_kick_ev()
3511 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_peer_kick_ev()
3512 return -EPROTO; in ath10k_wmi_op_pull_peer_kick_ev()
3515 arg->mac_addr = ev->peer_macaddr.addr; in ath10k_wmi_op_pull_peer_kick_ev()
3538 sta = ieee80211_find_sta_by_ifaddr(ar->hw, arg.mac_addr, NULL); in ath10k_wmi_event_peer_sta_kickout()
3559 * sleep transition from connected stations - these do not
3580 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)bcn->data; in ath10k_wmi_update_tim()
3590 tim_len = tim_info->tim_len ? __le32_to_cpu(tim_info->tim_len) : 1; in ath10k_wmi_update_tim()
3595 if (__le32_to_cpu(tim_info->tim_changed)) { in ath10k_wmi_update_tim()
3598 if (sizeof(arvif->u.ap.tim_bitmap) < tim_len) { in ath10k_wmi_update_tim()
3600 tim_len, sizeof(arvif->u.ap.tim_bitmap)); in ath10k_wmi_update_tim()
3601 tim_len = sizeof(arvif->u.ap.tim_bitmap); in ath10k_wmi_update_tim()
3605 t = tim_info->tim_bitmap[i / 4]; in ath10k_wmi_update_tim()
3607 arvif->u.ap.tim_bitmap[i] = (v >> ((i % 4) * 8)) & 0xFF; in ath10k_wmi_update_tim()
3613 arvif->u.ap.tim_len = 0; in ath10k_wmi_update_tim()
3615 if (arvif->u.ap.tim_bitmap[i]) in ath10k_wmi_update_tim()
3616 arvif->u.ap.tim_len = i; in ath10k_wmi_update_tim()
3618 arvif->u.ap.tim_len++; in ath10k_wmi_update_tim()
3621 ies = bcn->data; in ath10k_wmi_update_tim()
3622 ies += ieee80211_hdrlen(hdr->frame_control); in ath10k_wmi_update_tim()
3626 (u8 *)skb_tail_pointer(bcn) - ies); in ath10k_wmi_update_tim()
3628 if (arvif->vdev_type != WMI_VDEV_TYPE_IBSS) in ath10k_wmi_update_tim()
3635 pvm_len = ie_len - 3; /* exclude dtim count, dtim period, bmap ctl */ in ath10k_wmi_update_tim()
3637 if (pvm_len < arvif->u.ap.tim_len) { in ath10k_wmi_update_tim()
3638 int expand_size = tim_len - pvm_len; in ath10k_wmi_update_tim()
3639 int move_size = skb_tail_pointer(bcn) - (ie + 2 + ie_len); in ath10k_wmi_update_tim()
3658 tim->bitmap_ctrl = !!__le32_to_cpu(tim_info->tim_mcast); in ath10k_wmi_update_tim()
3659 memcpy(tim->virtual_map, arvif->u.ap.tim_bitmap, pvm_len); in ath10k_wmi_update_tim()
3661 if (tim->dtim_count == 0) { in ath10k_wmi_update_tim()
3662 ATH10K_SKB_CB(bcn)->flags |= ATH10K_SKB_F_DTIM_ZERO; in ath10k_wmi_update_tim()
3664 if (__le32_to_cpu(tim_info->tim_mcast) == 1) in ath10k_wmi_update_tim()
3665 ATH10K_SKB_CB(bcn)->flags |= ATH10K_SKB_F_DELIVER_CAB; in ath10k_wmi_update_tim()
3669 tim->dtim_count, tim->dtim_period, in ath10k_wmi_update_tim()
3670 tim->bitmap_ctrl, pvm_len); in ath10k_wmi_update_tim()
3677 if (!arvif->vif->p2p) in ath10k_wmi_update_noa()
3680 ath10k_dbg(ar, ATH10K_DBG_MGMT, "noa changed: %d\n", noa->changed); in ath10k_wmi_update_noa()
3682 if (noa->changed & WMI_P2P_NOA_CHANGED_BIT) in ath10k_wmi_update_noa()
3685 if (arvif->u.ap.noa_data) in ath10k_wmi_update_noa()
3686 if (!pskb_expand_head(bcn, 0, arvif->u.ap.noa_len, GFP_ATOMIC)) in ath10k_wmi_update_noa()
3687 skb_put_data(bcn, arvif->u.ap.noa_data, in ath10k_wmi_update_noa()
3688 arvif->u.ap.noa_len); in ath10k_wmi_update_noa()
3694 struct wmi_host_swba_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_swba_ev()
3698 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_swba_ev()
3699 return -EPROTO; in ath10k_wmi_op_pull_swba_ev()
3702 arg->vdev_map = ev->vdev_map; in ath10k_wmi_op_pull_swba_ev()
3704 for (i = 0, map = __le32_to_cpu(ev->vdev_map); map; map >>= 1) { in ath10k_wmi_op_pull_swba_ev()
3711 if (WARN_ON_ONCE(i == ARRAY_SIZE(arg->tim_info))) in ath10k_wmi_op_pull_swba_ev()
3714 if (__le32_to_cpu(ev->bcn_info[i].tim_info.tim_len) > in ath10k_wmi_op_pull_swba_ev()
3715 sizeof(ev->bcn_info[i].tim_info.tim_bitmap)) { in ath10k_wmi_op_pull_swba_ev()
3717 return -EPROTO; in ath10k_wmi_op_pull_swba_ev()
3720 arg->tim_info[i].tim_len = ev->bcn_info[i].tim_info.tim_len; in ath10k_wmi_op_pull_swba_ev()
3721 arg->tim_info[i].tim_mcast = ev->bcn_info[i].tim_info.tim_mcast; in ath10k_wmi_op_pull_swba_ev()
3722 arg->tim_info[i].tim_bitmap = in ath10k_wmi_op_pull_swba_ev()
3723 ev->bcn_info[i].tim_info.tim_bitmap; in ath10k_wmi_op_pull_swba_ev()
3724 arg->tim_info[i].tim_changed = in ath10k_wmi_op_pull_swba_ev()
3725 ev->bcn_info[i].tim_info.tim_changed; in ath10k_wmi_op_pull_swba_ev()
3726 arg->tim_info[i].tim_num_ps_pending = in ath10k_wmi_op_pull_swba_ev()
3727 ev->bcn_info[i].tim_info.tim_num_ps_pending; in ath10k_wmi_op_pull_swba_ev()
3729 arg->noa_info[i] = &ev->bcn_info[i].p2p_noa_info; in ath10k_wmi_op_pull_swba_ev()
3740 struct wmi_10_2_4_host_swba_event *ev = (void *)skb->data; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3744 if (skb->len < sizeof(*ev)) in ath10k_wmi_10_2_4_op_pull_swba_ev()
3745 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3748 arg->vdev_map = ev->vdev_map; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3750 for (i = 0, map = __le32_to_cpu(ev->vdev_map); map; map >>= 1) { in ath10k_wmi_10_2_4_op_pull_swba_ev()
3757 if (WARN_ON_ONCE(i == ARRAY_SIZE(arg->tim_info))) in ath10k_wmi_10_2_4_op_pull_swba_ev()
3760 if (__le32_to_cpu(ev->bcn_info[i].tim_info.tim_len) > in ath10k_wmi_10_2_4_op_pull_swba_ev()
3761 sizeof(ev->bcn_info[i].tim_info.tim_bitmap)) { in ath10k_wmi_10_2_4_op_pull_swba_ev()
3763 return -EPROTO; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3766 arg->tim_info[i].tim_len = ev->bcn_info[i].tim_info.tim_len; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3767 arg->tim_info[i].tim_mcast = ev->bcn_info[i].tim_info.tim_mcast; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3768 arg->tim_info[i].tim_bitmap = in ath10k_wmi_10_2_4_op_pull_swba_ev()
3769 ev->bcn_info[i].tim_info.tim_bitmap; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3770 arg->tim_info[i].tim_changed = in ath10k_wmi_10_2_4_op_pull_swba_ev()
3771 ev->bcn_info[i].tim_info.tim_changed; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3772 arg->tim_info[i].tim_num_ps_pending = in ath10k_wmi_10_2_4_op_pull_swba_ev()
3773 ev->bcn_info[i].tim_info.tim_num_ps_pending; in ath10k_wmi_10_2_4_op_pull_swba_ev()
3784 struct wmi_10_4_host_swba_event *ev = (void *)skb->data; in ath10k_wmi_10_4_op_pull_swba_ev()
3788 if (skb->len < sizeof(*ev)) in ath10k_wmi_10_4_op_pull_swba_ev()
3789 return -EPROTO; in ath10k_wmi_10_4_op_pull_swba_ev()
3792 arg->vdev_map = ev->vdev_map; in ath10k_wmi_10_4_op_pull_swba_ev()
3794 for (i = 0, map = __le32_to_cpu(ev->vdev_map); map; map >>= 1) { in ath10k_wmi_10_4_op_pull_swba_ev()
3801 if (WARN_ON_ONCE(i == ARRAY_SIZE(arg->tim_info))) in ath10k_wmi_10_4_op_pull_swba_ev()
3804 if (__le32_to_cpu(ev->bcn_info[i].tim_info.tim_len) > in ath10k_wmi_10_4_op_pull_swba_ev()
3805 sizeof(ev->bcn_info[i].tim_info.tim_bitmap)) { in ath10k_wmi_10_4_op_pull_swba_ev()
3807 return -EPROTO; in ath10k_wmi_10_4_op_pull_swba_ev()
3810 tim_len = __le32_to_cpu(ev->bcn_info[i].tim_info.tim_len); in ath10k_wmi_10_4_op_pull_swba_ev()
3813 tim_len -= 4; in ath10k_wmi_10_4_op_pull_swba_ev()
3814 arg->tim_info[i].tim_len = __cpu_to_le32(tim_len); in ath10k_wmi_10_4_op_pull_swba_ev()
3816 arg->tim_info[i].tim_len = 0; in ath10k_wmi_10_4_op_pull_swba_ev()
3819 arg->tim_info[i].tim_mcast = ev->bcn_info[i].tim_info.tim_mcast; in ath10k_wmi_10_4_op_pull_swba_ev()
3820 arg->tim_info[i].tim_bitmap = in ath10k_wmi_10_4_op_pull_swba_ev()
3821 ev->bcn_info[i].tim_info.tim_bitmap; in ath10k_wmi_10_4_op_pull_swba_ev()
3822 arg->tim_info[i].tim_changed = in ath10k_wmi_10_4_op_pull_swba_ev()
3823 ev->bcn_info[i].tim_info.tim_changed; in ath10k_wmi_10_4_op_pull_swba_ev()
3824 arg->tim_info[i].tim_num_ps_pending = in ath10k_wmi_10_4_op_pull_swba_ev()
3825 ev->bcn_info[i].tim_info.tim_num_ps_pending; in ath10k_wmi_10_4_op_pull_swba_ev()
3846 int i = -1; in ath10k_wmi_event_host_swba()
3882 __le32_to_cpu(tim_info->tim_len), in ath10k_wmi_event_host_swba()
3883 __le32_to_cpu(tim_info->tim_mcast), in ath10k_wmi_event_host_swba()
3884 __le32_to_cpu(tim_info->tim_changed), in ath10k_wmi_event_host_swba()
3885 __le32_to_cpu(tim_info->tim_num_ps_pending), in ath10k_wmi_event_host_swba()
3886 __le32_to_cpu(tim_info->tim_bitmap[3]), in ath10k_wmi_event_host_swba()
3887 __le32_to_cpu(tim_info->tim_bitmap[2]), in ath10k_wmi_event_host_swba()
3888 __le32_to_cpu(tim_info->tim_bitmap[1]), in ath10k_wmi_event_host_swba()
3889 __le32_to_cpu(tim_info->tim_bitmap[0])); in ath10k_wmi_event_host_swba()
3905 if (!arvif->is_up) in ath10k_wmi_event_host_swba()
3914 if (arvif->vif->bss_conf.csa_active && in ath10k_wmi_event_host_swba()
3915 ieee80211_beacon_cntdwn_is_complete(arvif->vif, 0)) { in ath10k_wmi_event_host_swba()
3916 ieee80211_csa_finish(arvif->vif, 0); in ath10k_wmi_event_host_swba()
3920 bcn = ieee80211_beacon_get(ar->hw, arvif->vif, 0); in ath10k_wmi_event_host_swba()
3926 ath10k_tx_h_seq_no(arvif->vif, bcn); in ath10k_wmi_event_host_swba()
3930 spin_lock_bh(&ar->data_lock); in ath10k_wmi_event_host_swba()
3932 if (arvif->beacon) { in ath10k_wmi_event_host_swba()
3933 switch (arvif->beacon_state) { in ath10k_wmi_event_host_swba()
3938 arvif->vdev_id); in ath10k_wmi_event_host_swba()
3942 arvif->vdev_id); in ath10k_wmi_event_host_swba()
3950 if (!arvif->beacon_buf) { in ath10k_wmi_event_host_swba()
3951 paddr = dma_map_single(arvif->ar->dev, bcn->data, in ath10k_wmi_event_host_swba()
3952 bcn->len, DMA_TO_DEVICE); in ath10k_wmi_event_host_swba()
3953 ret = dma_mapping_error(arvif->ar->dev, paddr); in ath10k_wmi_event_host_swba()
3961 ATH10K_SKB_CB(bcn)->paddr = paddr; in ath10k_wmi_event_host_swba()
3963 if (bcn->len > IEEE80211_MAX_FRAME_LEN) { in ath10k_wmi_event_host_swba()
3964 ath10k_warn(ar, "trimming beacon %d -> %d bytes!\n", in ath10k_wmi_event_host_swba()
3965 bcn->len, IEEE80211_MAX_FRAME_LEN); in ath10k_wmi_event_host_swba()
3968 memcpy(arvif->beacon_buf, bcn->data, bcn->len); in ath10k_wmi_event_host_swba()
3969 ATH10K_SKB_CB(bcn)->paddr = arvif->beacon_paddr; in ath10k_wmi_event_host_swba()
3972 arvif->beacon = bcn; in ath10k_wmi_event_host_swba()
3973 arvif->beacon_state = ATH10K_BEACON_SCHEDULED; in ath10k_wmi_event_host_swba()
3975 trace_ath10k_tx_hdr(ar, bcn->data, bcn->len); in ath10k_wmi_event_host_swba()
3976 trace_ath10k_tx_payload(ar, bcn->data, bcn->len); in ath10k_wmi_event_host_swba()
3979 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_event_host_swba()
3998 if (ar->dfs_block_radar_events) in ath10k_radar_detected()
4001 ieee80211_radar_detected(ar->hw, NULL); in ath10k_radar_detected()
4011 reinit_completion(&ar->wmi.radar_confirm); in ath10k_radar_confirmation_work()
4013 spin_lock_bh(&ar->data_lock); in ath10k_radar_confirmation_work()
4014 memcpy(&radar_info, &ar->last_radar_info, sizeof(radar_info)); in ath10k_radar_confirmation_work()
4015 spin_unlock_bh(&ar->data_lock); in ath10k_radar_confirmation_work()
4023 time_left = wait_for_completion_timeout(&ar->wmi.radar_confirm, in ath10k_radar_confirmation_work()
4046 spin_lock_bh(&ar->data_lock); in ath10k_radar_confirmation_work()
4047 if (ar->radar_conf_state != ATH10K_RADAR_CONFIRMATION_STOPPED) in ath10k_radar_confirmation_work()
4048 ar->radar_conf_state = ATH10K_RADAR_CONFIRMATION_IDLE; in ath10k_radar_confirmation_work()
4049 spin_unlock_bh(&ar->data_lock); in ath10k_radar_confirmation_work()
4065 reg0 = __le32_to_cpu(rr->reg0); in ath10k_dfs_radar_report()
4066 reg1 = __le32_to_cpu(rr->reg1); in ath10k_dfs_radar_report()
4086 if (!ar->dfs_detector) in ath10k_dfs_radar_report()
4089 spin_lock_bh(&ar->data_lock); in ath10k_dfs_radar_report()
4090 ch = ar->rx_channel; in ath10k_dfs_radar_report()
4094 ch = ar->tgt_oper_chan; in ath10k_dfs_radar_report()
4096 spin_unlock_bh(&ar->data_lock); in ath10k_dfs_radar_report()
4104 tsf32l = phyerr->tsf_timestamp; in ath10k_dfs_radar_report()
4109 rssi = phyerr->rssi_combined; in ath10k_dfs_radar_report()
4118 pe.freq = ch->center_freq; in ath10k_dfs_radar_report()
4128 if (!ar->dfs_detector->add_pulse(ar->dfs_detector, &pe, &rs)) { in ath10k_dfs_radar_report()
4134 if ((test_bit(WMI_SERVICE_HOST_DFS_CHECK_SUPPORT, ar->wmi.svc_map)) && in ath10k_dfs_radar_report()
4135 ar->dfs_detector->region == NL80211_DFS_FCC) { in ath10k_dfs_radar_report()
4140 spin_lock_bh(&ar->data_lock); in ath10k_dfs_radar_report()
4141 if (ar->radar_conf_state != ATH10K_RADAR_CONFIRMATION_IDLE) { in ath10k_dfs_radar_report()
4142 spin_unlock_bh(&ar->data_lock); in ath10k_dfs_radar_report()
4145 ar->radar_conf_state = ATH10K_RADAR_CONFIRMATION_INPROGRESS; in ath10k_dfs_radar_report()
4146 radar_info = &ar->last_radar_info; in ath10k_dfs_radar_report()
4148 radar_info->pri_min = rs.pri_min; in ath10k_dfs_radar_report()
4149 radar_info->pri_max = rs.pri_max; in ath10k_dfs_radar_report()
4150 radar_info->width_min = rs.width_min; in ath10k_dfs_radar_report()
4151 radar_info->width_max = rs.width_max; in ath10k_dfs_radar_report()
4153 radar_info->sidx_min = MS(reg0, RADAR_REPORT_REG0_PULSE_SIDX); in ath10k_dfs_radar_report()
4154 radar_info->sidx_max = MS(reg0, RADAR_REPORT_REG0_PULSE_SIDX); in ath10k_dfs_radar_report()
4158 radar_info->pri_min, radar_info->pri_max, in ath10k_dfs_radar_report()
4159 radar_info->width_min, radar_info->width_max, in ath10k_dfs_radar_report()
4160 radar_info->sidx_min, radar_info->sidx_max); in ath10k_dfs_radar_report()
4161 ieee80211_queue_work(ar->hw, &ar->radar_confirmation_work); in ath10k_dfs_radar_report()
4162 spin_unlock_bh(&ar->data_lock); in ath10k_dfs_radar_report()
4178 reg0 = __le32_to_cpu(fftr->reg0); in ath10k_dfs_fft_report()
4179 reg1 = __le32_to_cpu(fftr->reg1); in ath10k_dfs_fft_report()
4180 rssi = phyerr->rssi_combined; in ath10k_dfs_fft_report()
4202 return -EINVAL; in ath10k_dfs_fft_report()
4218 buf_len = phyerr->buf_len; in ath10k_wmi_event_dfs()
4221 phyerr->phy_err_code, phyerr->rssi_combined, in ath10k_wmi_event_dfs()
4222 phyerr->tsf_timestamp, tsf, buf_len); in ath10k_wmi_event_dfs()
4237 tlv = (struct phyerr_tlv *)&phyerr->buf[i]; in ath10k_wmi_event_dfs()
4238 tlv_len = __le16_to_cpu(tlv->len); in ath10k_wmi_event_dfs()
4239 tlv_buf = &phyerr->buf[i + sizeof(*tlv)]; in ath10k_wmi_event_dfs()
4242 tlv_len, tlv->tag, tlv->sig); in ath10k_wmi_event_dfs()
4244 switch (tlv->tag) { in ath10k_wmi_event_dfs()
4283 buf_len = phyerr->buf_len; in ath10k_wmi_event_spectral_scan()
4292 tlv = (struct phyerr_tlv *)&phyerr->buf[i]; in ath10k_wmi_event_spectral_scan()
4293 tlv_len = __le16_to_cpu(tlv->len); in ath10k_wmi_event_spectral_scan()
4294 tlv_buf = &phyerr->buf[i + sizeof(*tlv)]; in ath10k_wmi_event_spectral_scan()
4302 switch (tlv->tag) { in ath10k_wmi_event_spectral_scan()
4310 fftr_len = tlv_len - sizeof(*fftr); in ath10k_wmi_event_spectral_scan()
4331 struct wmi_phyerr_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_phyerr_ev_hdr()
4333 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_phyerr_ev_hdr()
4334 return -EPROTO; in ath10k_wmi_op_pull_phyerr_ev_hdr()
4336 arg->num_phyerrs = __le32_to_cpu(ev->num_phyerrs); in ath10k_wmi_op_pull_phyerr_ev_hdr()
4337 arg->tsf_l32 = __le32_to_cpu(ev->tsf_l32); in ath10k_wmi_op_pull_phyerr_ev_hdr()
4338 arg->tsf_u32 = __le32_to_cpu(ev->tsf_u32); in ath10k_wmi_op_pull_phyerr_ev_hdr()
4339 arg->buf_len = skb->len - sizeof(*ev); in ath10k_wmi_op_pull_phyerr_ev_hdr()
4340 arg->phyerrs = ev->phyerrs; in ath10k_wmi_op_pull_phyerr_ev_hdr()
4349 struct wmi_10_4_phyerr_event *ev = (void *)skb->data; in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4351 if (skb->len < sizeof(*ev)) in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4352 return -EPROTO; in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4355 arg->num_phyerrs = 1; in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4357 arg->tsf_l32 = __le32_to_cpu(ev->tsf_l32); in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4358 arg->tsf_u32 = __le32_to_cpu(ev->tsf_u32); in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4359 arg->buf_len = skb->len; in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4360 arg->phyerrs = skb->data; in ath10k_wmi_10_4_op_pull_phyerr_ev_hdr()
4376 return -EINVAL; in ath10k_wmi_op_pull_phyerr_ev()
4379 arg->tsf_timestamp = __le32_to_cpu(phyerr->tsf_timestamp); in ath10k_wmi_op_pull_phyerr_ev()
4380 arg->freq1 = __le16_to_cpu(phyerr->freq1); in ath10k_wmi_op_pull_phyerr_ev()
4381 arg->freq2 = __le16_to_cpu(phyerr->freq2); in ath10k_wmi_op_pull_phyerr_ev()
4382 arg->rssi_combined = phyerr->rssi_combined; in ath10k_wmi_op_pull_phyerr_ev()
4383 arg->chan_width_mhz = phyerr->chan_width_mhz; in ath10k_wmi_op_pull_phyerr_ev()
4384 arg->buf_len = __le32_to_cpu(phyerr->buf_len); in ath10k_wmi_op_pull_phyerr_ev()
4385 arg->buf = phyerr->buf; in ath10k_wmi_op_pull_phyerr_ev()
4386 arg->hdr_len = sizeof(*phyerr); in ath10k_wmi_op_pull_phyerr_ev()
4389 arg->nf_chains[i] = __le16_to_cpu(phyerr->nf_chains[i]); in ath10k_wmi_op_pull_phyerr_ev()
4391 switch (phyerr->phy_err_code) { in ath10k_wmi_op_pull_phyerr_ev()
4393 arg->phy_err_code = PHY_ERROR_SPECTRAL_SCAN; in ath10k_wmi_op_pull_phyerr_ev()
4396 arg->phy_err_code = PHY_ERROR_FALSE_RADAR_EXT; in ath10k_wmi_op_pull_phyerr_ev()
4399 arg->phy_err_code = PHY_ERROR_RADAR; in ath10k_wmi_op_pull_phyerr_ev()
4402 arg->phy_err_code = PHY_ERROR_UNKNOWN; in ath10k_wmi_op_pull_phyerr_ev()
4421 return -EINVAL; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4424 arg->tsf_timestamp = __le32_to_cpu(phyerr->tsf_timestamp); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4425 arg->freq1 = __le16_to_cpu(phyerr->freq1); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4426 arg->freq2 = __le16_to_cpu(phyerr->freq2); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4427 arg->rssi_combined = phyerr->rssi_combined; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4428 arg->chan_width_mhz = phyerr->chan_width_mhz; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4429 arg->buf_len = __le32_to_cpu(phyerr->buf_len); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4430 arg->buf = phyerr->buf; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4431 arg->hdr_len = sizeof(*phyerr); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4434 arg->nf_chains[i] = __le16_to_cpu(phyerr->nf_chains[i]); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4436 phy_err_mask = __le32_to_cpu(phyerr->phy_err_mask[0]); in ath10k_wmi_10_4_op_pull_phyerr_ev()
4439 arg->phy_err_code = PHY_ERROR_SPECTRAL_SCAN; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4441 arg->phy_err_code = PHY_ERROR_RADAR; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4443 arg->phy_err_code = PHY_ERROR_UNKNOWN; in ath10k_wmi_10_4_op_pull_phyerr_ev()
4487 left_len -= phyerr_arg.hdr_len; in ath10k_wmi_event_phyerr()
4496 left_len -= buf_len; in ath10k_wmi_event_phyerr()
4521 struct wmi_dfs_status_ev_arg *ev = (void *)skb->data; in ath10k_wmi_10_4_op_pull_dfs_status_ev()
4523 if (skb->len < sizeof(*ev)) in ath10k_wmi_10_4_op_pull_dfs_status_ev()
4524 return -EPROTO; in ath10k_wmi_10_4_op_pull_dfs_status_ev()
4526 arg->status = ev->status; in ath10k_wmi_10_4_op_pull_dfs_status_ev()
4555 complete(&ar->wmi.radar_confirm); in ath10k_wmi_event_dfs_status_check()
4609 for (i = 0; i < sizeof(buf) - 1; i++) { in ath10k_wmi_event_debug_print()
4610 if (i >= skb->len) in ath10k_wmi_event_debug_print()
4613 c = skb->data[i]; in ath10k_wmi_event_debug_print()
4624 if (i == sizeof(buf) - 1) in ath10k_wmi_event_debug_print()
4625 ath10k_warn(ar, "wmi debug print truncated: %d\n", skb->len); in ath10k_wmi_event_debug_print()
4628 if (skb->data[i - 1] == '\n') in ath10k_wmi_event_debug_print()
4629 i--; in ath10k_wmi_event_debug_print()
4669 complete(&ar->wow.wakeup_completed); in ath10k_wmi_event_wow_wakeup_host()
4695 ch = num_chains - 1; in ath10k_tpc_config_get_rate()
4697 tpc = min_t(u8, ev->rates_array[rate_idx], ev->max_reg_allow_pow[ch]); in ath10k_tpc_config_get_rate()
4699 if (__le32_to_cpu(ev->num_tx_chain) <= 1) in ath10k_tpc_config_get_rate()
4705 stm_idx = num_streams - 1; in ath10k_tpc_config_get_rate()
4712 ev->max_reg_allow_pow_agstbc[ch - 1][stm_idx]); in ath10k_tpc_config_get_rate()
4716 ev->max_reg_allow_pow_agtxbf[ch - 1][stm_idx]); in ath10k_tpc_config_get_rate()
4720 ev->max_reg_allow_pow_agcdd[ch - 1][stm_idx]); in ath10k_tpc_config_get_rate()
4742 flags = __le32_to_cpu(ev->flags); in ath10k_tpc_config_disp_tables()
4748 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_tpc_config_disp_tables()
4755 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_tpc_config_disp_tables()
4762 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_tpc_config_disp_tables()
4773 for (i = 0; i < tpc_stats->rate_max; i++) { in ath10k_tpc_config_disp_tables()
4779 for (j = 0; j < tpc_stats->num_tx_chain; j++) { in ath10k_tpc_config_disp_tables()
4786 tpc_stats->tpc_table[type].pream_idx[i] = pream_idx; in ath10k_tpc_config_disp_tables()
4787 tpc_stats->tpc_table[type].rate_code[i] = rate_code[i]; in ath10k_tpc_config_disp_tables()
4788 memcpy(tpc_stats->tpc_table[type].tpc_value[i], in ath10k_tpc_config_disp_tables()
4898 ev = (struct wmi_pdev_tpc_config_event *)skb->data; in ath10k_wmi_event_pdev_tpc_config()
4900 num_tx_chain = __le32_to_cpu(ev->num_tx_chain); in ath10k_wmi_event_pdev_tpc_config()
4908 rate_max = __le32_to_cpu(ev->rate_max); in ath10k_wmi_event_pdev_tpc_config()
4922 tpc_stats->chan_freq = __le32_to_cpu(ev->chan_freq); in ath10k_wmi_event_pdev_tpc_config()
4923 tpc_stats->phy_mode = __le32_to_cpu(ev->phy_mode); in ath10k_wmi_event_pdev_tpc_config()
4924 tpc_stats->ctl = __le32_to_cpu(ev->ctl); in ath10k_wmi_event_pdev_tpc_config()
4925 tpc_stats->reg_domain = __le32_to_cpu(ev->reg_domain); in ath10k_wmi_event_pdev_tpc_config()
4926 tpc_stats->twice_antenna_gain = a_sle32_to_cpu(ev->twice_antenna_gain); in ath10k_wmi_event_pdev_tpc_config()
4927 tpc_stats->twice_antenna_reduction = in ath10k_wmi_event_pdev_tpc_config()
4928 __le32_to_cpu(ev->twice_antenna_reduction); in ath10k_wmi_event_pdev_tpc_config()
4929 tpc_stats->power_limit = __le32_to_cpu(ev->power_limit); in ath10k_wmi_event_pdev_tpc_config()
4930 tpc_stats->twice_max_rd_power = __le32_to_cpu(ev->twice_max_rd_power); in ath10k_wmi_event_pdev_tpc_config()
4931 tpc_stats->num_tx_chain = num_tx_chain; in ath10k_wmi_event_pdev_tpc_config()
4932 tpc_stats->rate_max = rate_max; in ath10k_wmi_event_pdev_tpc_config()
4948 __le32_to_cpu(ev->chan_freq), in ath10k_wmi_event_pdev_tpc_config()
4949 __le32_to_cpu(ev->phy_mode), in ath10k_wmi_event_pdev_tpc_config()
4950 __le32_to_cpu(ev->ctl), in ath10k_wmi_event_pdev_tpc_config()
4951 __le32_to_cpu(ev->reg_domain), in ath10k_wmi_event_pdev_tpc_config()
4952 a_sle32_to_cpu(ev->twice_antenna_gain), in ath10k_wmi_event_pdev_tpc_config()
4953 __le32_to_cpu(ev->twice_antenna_reduction), in ath10k_wmi_event_pdev_tpc_config()
4954 __le32_to_cpu(ev->power_limit), in ath10k_wmi_event_pdev_tpc_config()
4955 __le32_to_cpu(ev->twice_max_rd_power) / 2, in ath10k_wmi_event_pdev_tpc_config()
4956 __le32_to_cpu(ev->num_tx_chain), in ath10k_wmi_event_pdev_tpc_config()
4957 __le32_to_cpu(ev->rate_max)); in ath10k_wmi_event_pdev_tpc_config()
4972 ch = num_chains - 1; in ath10k_wmi_tpc_final_get_rate()
4973 stm_idx = num_streams - 1; in ath10k_wmi_tpc_final_get_rate()
4974 pream = -1; in ath10k_wmi_tpc_final_get_rate()
4976 if (__le32_to_cpu(ev->chan_freq) <= 2483) { in ath10k_wmi_tpc_final_get_rate()
4996 pream = -1; in ath10k_wmi_tpc_final_get_rate()
5001 if (__le32_to_cpu(ev->chan_freq) >= 5180) { in ath10k_wmi_tpc_final_get_rate()
5021 pream = -1; in ath10k_wmi_tpc_final_get_rate()
5026 if (pream == -1) { in ath10k_wmi_tpc_final_get_rate()
5028 pream_idx, __le32_to_cpu(ev->chan_freq)); in ath10k_wmi_tpc_final_get_rate()
5034 tpc = min_t(u8, ev->rates_array[rate_idx], in ath10k_wmi_tpc_final_get_rate()
5035 ev->max_reg_allow_pow[ch]); in ath10k_wmi_tpc_final_get_rate()
5037 tpc = min_t(u8, min_t(u8, ev->rates_array[rate_idx], in ath10k_wmi_tpc_final_get_rate()
5038 ev->max_reg_allow_pow[ch]), in ath10k_wmi_tpc_final_get_rate()
5039 ev->ctl_power_table[0][pream][stm_idx]); in ath10k_wmi_tpc_final_get_rate()
5041 if (__le32_to_cpu(ev->num_tx_chain) <= 1) in ath10k_wmi_tpc_final_get_rate()
5052 pow_agstbc = ev->max_reg_allow_pow_agstbc[ch - 1][stm_idx]; in ath10k_wmi_tpc_final_get_rate()
5057 ev->ctl_power_table[0][pream][stm_idx]); in ath10k_wmi_tpc_final_get_rate()
5060 pow_agtxbf = ev->max_reg_allow_pow_agtxbf[ch - 1][stm_idx]; in ath10k_wmi_tpc_final_get_rate()
5065 ev->ctl_power_table[1][pream][stm_idx]); in ath10k_wmi_tpc_final_get_rate()
5068 pow_agcdd = ev->max_reg_allow_pow_agcdd[ch - 1][stm_idx]; in ath10k_wmi_tpc_final_get_rate()
5073 ev->ctl_power_table[0][pream][stm_idx]); in ath10k_wmi_tpc_final_get_rate()
5096 flags = __le32_to_cpu(ev->flags); in ath10k_wmi_tpc_stats_final_disp_tables()
5102 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_wmi_tpc_stats_final_disp_tables()
5109 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_wmi_tpc_stats_final_disp_tables()
5116 tpc_stats->flag[type] = ATH10K_TPC_TABLE_TYPE_FLAG; in ath10k_wmi_tpc_stats_final_disp_tables()
5127 for (i = 0; i < tpc_stats->rate_max; i++) { in ath10k_wmi_tpc_stats_final_disp_tables()
5133 for (j = 0; j < tpc_stats->num_tx_chain; j++) { in ath10k_wmi_tpc_stats_final_disp_tables()
5140 tpc_stats->tpc_table_final[type].pream_idx[i] = pream_idx; in ath10k_wmi_tpc_stats_final_disp_tables()
5141 tpc_stats->tpc_table_final[type].rate_code[i] = rate_code[i]; in ath10k_wmi_tpc_stats_final_disp_tables()
5142 memcpy(tpc_stats->tpc_table_final[type].tpc_value[i], in ath10k_wmi_tpc_stats_final_disp_tables()
5155 ev = (struct wmi_pdev_tpc_final_table_event *)skb->data; in ath10k_wmi_event_tpc_final_table()
5157 num_tx_chain = __le32_to_cpu(ev->num_tx_chain); in ath10k_wmi_event_tpc_final_table()
5164 rate_max = __le32_to_cpu(ev->rate_max); in ath10k_wmi_event_tpc_final_table()
5178 tpc_stats->chan_freq = __le32_to_cpu(ev->chan_freq); in ath10k_wmi_event_tpc_final_table()
5179 tpc_stats->phy_mode = __le32_to_cpu(ev->phy_mode); in ath10k_wmi_event_tpc_final_table()
5180 tpc_stats->ctl = __le32_to_cpu(ev->ctl); in ath10k_wmi_event_tpc_final_table()
5181 tpc_stats->reg_domain = __le32_to_cpu(ev->reg_domain); in ath10k_wmi_event_tpc_final_table()
5182 tpc_stats->twice_antenna_gain = a_sle32_to_cpu(ev->twice_antenna_gain); in ath10k_wmi_event_tpc_final_table()
5183 tpc_stats->twice_antenna_reduction = in ath10k_wmi_event_tpc_final_table()
5184 __le32_to_cpu(ev->twice_antenna_reduction); in ath10k_wmi_event_tpc_final_table()
5185 tpc_stats->power_limit = __le32_to_cpu(ev->power_limit); in ath10k_wmi_event_tpc_final_table()
5186 tpc_stats->twice_max_rd_power = __le32_to_cpu(ev->twice_max_rd_power); in ath10k_wmi_event_tpc_final_table()
5187 tpc_stats->num_tx_chain = num_tx_chain; in ath10k_wmi_event_tpc_final_table()
5188 tpc_stats->rate_max = rate_max; in ath10k_wmi_event_tpc_final_table()
5204 __le32_to_cpu(ev->chan_freq), in ath10k_wmi_event_tpc_final_table()
5205 __le32_to_cpu(ev->phy_mode), in ath10k_wmi_event_tpc_final_table()
5206 __le32_to_cpu(ev->ctl), in ath10k_wmi_event_tpc_final_table()
5207 __le32_to_cpu(ev->reg_domain), in ath10k_wmi_event_tpc_final_table()
5208 a_sle32_to_cpu(ev->twice_antenna_gain), in ath10k_wmi_event_tpc_final_table()
5209 __le32_to_cpu(ev->twice_antenna_reduction), in ath10k_wmi_event_tpc_final_table()
5210 __le32_to_cpu(ev->power_limit), in ath10k_wmi_event_tpc_final_table()
5211 __le32_to_cpu(ev->twice_max_rd_power) / 2, in ath10k_wmi_event_tpc_final_table()
5212 __le32_to_cpu(ev->num_tx_chain), in ath10k_wmi_event_tpc_final_table()
5213 __le32_to_cpu(ev->rate_max)); in ath10k_wmi_event_tpc_final_table()
5227 if (skb->len < sizeof(*ev)) { in ath10k_wmi_handle_tdls_peer_event()
5229 skb->len); in ath10k_wmi_handle_tdls_peer_event()
5233 ev = (struct wmi_tdls_peer_event *)skb->data; in ath10k_wmi_handle_tdls_peer_event()
5234 vdev_id = __le32_to_cpu(ev->vdev_id); in ath10k_wmi_handle_tdls_peer_event()
5235 peer_status = __le32_to_cpu(ev->peer_status); in ath10k_wmi_handle_tdls_peer_event()
5236 peer_reason = __le32_to_cpu(ev->peer_reason); in ath10k_wmi_handle_tdls_peer_event()
5238 spin_lock_bh(&ar->data_lock); in ath10k_wmi_handle_tdls_peer_event()
5239 peer = ath10k_peer_find(ar, vdev_id, ev->peer_macaddr.addr); in ath10k_wmi_handle_tdls_peer_event()
5240 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_handle_tdls_peer_event()
5244 ev->peer_macaddr.addr); in ath10k_wmi_handle_tdls_peer_event()
5268 ieee80211_tdls_oper_request(arvif->vif, ev->peer_macaddr.addr, in ath10k_wmi_handle_tdls_peer_event()
5274 ev->peer_macaddr.addr, peer_reason); in ath10k_wmi_handle_tdls_peer_event()
5292 lockdep_assert_held(&ar->data_lock); in ath10k_wmi_event_peer_sta_ps_state_chg()
5294 ev = (struct wmi_peer_sta_ps_state_chg_event *)skb->data; in ath10k_wmi_event_peer_sta_ps_state_chg()
5295 ether_addr_copy(peer_addr, ev->peer_macaddr.addr); in ath10k_wmi_event_peer_sta_ps_state_chg()
5299 sta = ieee80211_find_sta_by_ifaddr(ar->hw, peer_addr, NULL); in ath10k_wmi_event_peer_sta_ps_state_chg()
5307 arsta = (struct ath10k_sta *)sta->drv_priv; in ath10k_wmi_event_peer_sta_ps_state_chg()
5308 arsta->peer_ps_state = __le32_to_cpu(ev->peer_ps_state); in ath10k_wmi_event_peer_sta_ps_state_chg()
5365 int idx = ar->wmi.num_mem_chunks; in ath10k_wmi_alloc_chunk()
5369 vaddr = dma_alloc_coherent(ar->dev, pool_size, &paddr, GFP_KERNEL); in ath10k_wmi_alloc_chunk()
5372 return -ENOMEM; in ath10k_wmi_alloc_chunk()
5374 ar->wmi.mem_chunks[idx].vaddr = vaddr; in ath10k_wmi_alloc_chunk()
5375 ar->wmi.mem_chunks[idx].paddr = paddr; in ath10k_wmi_alloc_chunk()
5376 ar->wmi.mem_chunks[idx].len = pool_size; in ath10k_wmi_alloc_chunk()
5377 ar->wmi.mem_chunks[idx].req_id = req_id; in ath10k_wmi_alloc_chunk()
5378 ar->wmi.num_mem_chunks++; in ath10k_wmi_alloc_chunk()
5393 num_units -= ret; in ath10k_wmi_alloc_host_mem()
5409 if (ar->wmi.num_mem_chunks != num_mem_reqs) in ath10k_wmi_is_host_mem_allocated()
5413 req_id = __le32_to_cpu(mem_reqs[i]->req_id); in ath10k_wmi_is_host_mem_allocated()
5414 num_units = __le32_to_cpu(mem_reqs[i]->num_units); in ath10k_wmi_is_host_mem_allocated()
5415 unit_size = __le32_to_cpu(mem_reqs[i]->unit_size); in ath10k_wmi_is_host_mem_allocated()
5416 num_unit_info = __le32_to_cpu(mem_reqs[i]->num_unit_info); in ath10k_wmi_is_host_mem_allocated()
5419 if (ar->num_active_peers) in ath10k_wmi_is_host_mem_allocated()
5420 num_units = ar->num_active_peers + 1; in ath10k_wmi_is_host_mem_allocated()
5422 num_units = ar->max_num_peers + 1; in ath10k_wmi_is_host_mem_allocated()
5424 num_units = ar->max_num_peers + 1; in ath10k_wmi_is_host_mem_allocated()
5426 num_units = ar->max_num_vdevs + 1; in ath10k_wmi_is_host_mem_allocated()
5430 for (j = 0; j < ar->wmi.num_mem_chunks; j++) { in ath10k_wmi_is_host_mem_allocated()
5431 if (ar->wmi.mem_chunks[j].req_id == req_id) { in ath10k_wmi_is_host_mem_allocated()
5433 if (ar->wmi.mem_chunks[j].len == pool_size) { in ath10k_wmi_is_host_mem_allocated()
5453 if (skb->len < sizeof(*ev)) in ath10k_wmi_main_op_pull_svc_rdy_ev()
5454 return -EPROTO; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5456 ev = (void *)skb->data; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5458 arg->min_tx_power = ev->hw_min_tx_power; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5459 arg->max_tx_power = ev->hw_max_tx_power; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5460 arg->ht_cap = ev->ht_cap_info; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5461 arg->vht_cap = ev->vht_cap_info; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5462 arg->vht_supp_mcs = ev->vht_supp_mcs; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5463 arg->sw_ver0 = ev->sw_version; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5464 arg->sw_ver1 = ev->sw_version_1; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5465 arg->phy_capab = ev->phy_capability; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5466 arg->num_rf_chains = ev->num_rf_chains; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5467 arg->eeprom_rd = ev->hal_reg_capabilities.eeprom_rd; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5468 arg->low_2ghz_chan = ev->hal_reg_capabilities.low_2ghz_chan; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5469 arg->high_2ghz_chan = ev->hal_reg_capabilities.high_2ghz_chan; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5470 arg->low_5ghz_chan = ev->hal_reg_capabilities.low_5ghz_chan; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5471 arg->high_5ghz_chan = ev->hal_reg_capabilities.high_5ghz_chan; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5472 arg->num_mem_reqs = ev->num_mem_reqs; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5473 arg->service_map = ev->wmi_service_bitmap; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5474 arg->service_map_len = sizeof(ev->wmi_service_bitmap); in ath10k_wmi_main_op_pull_svc_rdy_ev()
5476 n = min_t(size_t, __le32_to_cpu(arg->num_mem_reqs), in ath10k_wmi_main_op_pull_svc_rdy_ev()
5477 ARRAY_SIZE(arg->mem_reqs)); in ath10k_wmi_main_op_pull_svc_rdy_ev()
5479 arg->mem_reqs[i] = &ev->mem_reqs[i]; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5481 if (skb->len < in ath10k_wmi_main_op_pull_svc_rdy_ev()
5482 __le32_to_cpu(arg->num_mem_reqs) * sizeof(arg->mem_reqs[0])) in ath10k_wmi_main_op_pull_svc_rdy_ev()
5483 return -EPROTO; in ath10k_wmi_main_op_pull_svc_rdy_ev()
5495 if (skb->len < sizeof(*ev)) in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5496 return -EPROTO; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5498 ev = (void *)skb->data; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5500 arg->min_tx_power = ev->hw_min_tx_power; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5501 arg->max_tx_power = ev->hw_max_tx_power; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5502 arg->ht_cap = ev->ht_cap_info; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5503 arg->vht_cap = ev->vht_cap_info; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5504 arg->vht_supp_mcs = ev->vht_supp_mcs; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5505 arg->sw_ver0 = ev->sw_version; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5506 arg->phy_capab = ev->phy_capability; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5507 arg->num_rf_chains = ev->num_rf_chains; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5508 arg->eeprom_rd = ev->hal_reg_capabilities.eeprom_rd; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5509 arg->low_2ghz_chan = ev->hal_reg_capabilities.low_2ghz_chan; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5510 arg->high_2ghz_chan = ev->hal_reg_capabilities.high_2ghz_chan; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5511 arg->low_5ghz_chan = ev->hal_reg_capabilities.low_5ghz_chan; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5512 arg->high_5ghz_chan = ev->hal_reg_capabilities.high_5ghz_chan; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5513 arg->num_mem_reqs = ev->num_mem_reqs; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5514 arg->service_map = ev->wmi_service_bitmap; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5515 arg->service_map_len = sizeof(ev->wmi_service_bitmap); in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5517 /* Deliberately skipping ev->sys_cap_info as WMI and WMI-TLV have in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5520 * WMI interface (only from WMI-TLV) safest it to skip it. in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5523 n = min_t(size_t, __le32_to_cpu(arg->num_mem_reqs), in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5524 ARRAY_SIZE(arg->mem_reqs)); in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5526 arg->mem_reqs[i] = &ev->mem_reqs[i]; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5528 if (skb->len < in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5529 __le32_to_cpu(arg->num_mem_reqs) * sizeof(arg->mem_reqs[0])) in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5530 return -EPROTO; in ath10k_wmi_10x_op_pull_svc_rdy_ev()
5538 struct sk_buff *skb = ar->svc_rdy_skb; in ath10k_wmi_event_service_ready_work()
5555 ath10k_wmi_map_svc(ar, arg.service_map, ar->wmi.svc_map, in ath10k_wmi_event_service_ready_work()
5558 ar->hw_min_tx_power = __le32_to_cpu(arg.min_tx_power); in ath10k_wmi_event_service_ready_work()
5559 ar->hw_max_tx_power = __le32_to_cpu(arg.max_tx_power); in ath10k_wmi_event_service_ready_work()
5560 ar->ht_cap_info = __le32_to_cpu(arg.ht_cap); in ath10k_wmi_event_service_ready_work()
5561 ar->vht_cap_info = __le32_to_cpu(arg.vht_cap); in ath10k_wmi_event_service_ready_work()
5562 ar->vht_supp_mcs = __le32_to_cpu(arg.vht_supp_mcs); in ath10k_wmi_event_service_ready_work()
5563 ar->fw_version_major = in ath10k_wmi_event_service_ready_work()
5565 ar->fw_version_minor = (__le32_to_cpu(arg.sw_ver0) & 0x00ffffff); in ath10k_wmi_event_service_ready_work()
5566 ar->fw_version_release = in ath10k_wmi_event_service_ready_work()
5568 ar->fw_version_build = (__le32_to_cpu(arg.sw_ver1) & 0x0000ffff); in ath10k_wmi_event_service_ready_work()
5569 ar->phy_capability = __le32_to_cpu(arg.phy_capab); in ath10k_wmi_event_service_ready_work()
5570 ar->num_rf_chains = __le32_to_cpu(arg.num_rf_chains); in ath10k_wmi_event_service_ready_work()
5571 ar->hw_eeprom_rd = __le32_to_cpu(arg.eeprom_rd); in ath10k_wmi_event_service_ready_work()
5572 ar->low_2ghz_chan = __le32_to_cpu(arg.low_2ghz_chan); in ath10k_wmi_event_service_ready_work()
5573 ar->high_2ghz_chan = __le32_to_cpu(arg.high_2ghz_chan); in ath10k_wmi_event_service_ready_work()
5574 ar->low_5ghz_chan = __le32_to_cpu(arg.low_5ghz_chan); in ath10k_wmi_event_service_ready_work()
5575 ar->high_5ghz_chan = __le32_to_cpu(arg.high_5ghz_chan); in ath10k_wmi_event_service_ready_work()
5576 ar->sys_cap_info = __le32_to_cpu(arg.sys_cap_info); in ath10k_wmi_event_service_ready_work()
5581 ar->sys_cap_info); in ath10k_wmi_event_service_ready_work()
5583 if (ar->num_rf_chains > ar->max_spatial_stream) { in ath10k_wmi_event_service_ready_work()
5585 ar->num_rf_chains, ar->max_spatial_stream); in ath10k_wmi_event_service_ready_work()
5586 ar->num_rf_chains = ar->max_spatial_stream; in ath10k_wmi_event_service_ready_work()
5589 if (!ar->cfg_tx_chainmask) { in ath10k_wmi_event_service_ready_work()
5590 ar->cfg_tx_chainmask = (1 << ar->num_rf_chains) - 1; in ath10k_wmi_event_service_ready_work()
5591 ar->cfg_rx_chainmask = (1 << ar->num_rf_chains) - 1; in ath10k_wmi_event_service_ready_work()
5594 if (strlen(ar->hw->wiphy->fw_version) == 0) { in ath10k_wmi_event_service_ready_work()
5595 snprintf(ar->hw->wiphy->fw_version, in ath10k_wmi_event_service_ready_work()
5596 sizeof(ar->hw->wiphy->fw_version), in ath10k_wmi_event_service_ready_work()
5598 ar->fw_version_major, in ath10k_wmi_event_service_ready_work()
5599 ar->fw_version_minor, in ath10k_wmi_event_service_ready_work()
5600 ar->fw_version_release, in ath10k_wmi_event_service_ready_work()
5601 ar->fw_version_build); in ath10k_wmi_event_service_ready_work()
5611 if (test_bit(WMI_SERVICE_PEER_CACHING, ar->wmi.svc_map)) { in ath10k_wmi_event_service_ready_work()
5613 ar->running_fw->fw_file.fw_features)) in ath10k_wmi_event_service_ready_work()
5614 ar->num_active_peers = TARGET_10_4_QCACHE_ACTIVE_PEERS_PFC + in ath10k_wmi_event_service_ready_work()
5615 ar->max_num_vdevs; in ath10k_wmi_event_service_ready_work()
5617 ar->num_active_peers = TARGET_10_4_QCACHE_ACTIVE_PEERS + in ath10k_wmi_event_service_ready_work()
5618 ar->max_num_vdevs; in ath10k_wmi_event_service_ready_work()
5620 ar->max_num_peers = TARGET_10_4_NUM_QCACHE_PEERS_MAX + in ath10k_wmi_event_service_ready_work()
5621 ar->max_num_vdevs; in ath10k_wmi_event_service_ready_work()
5622 ar->num_tids = ar->num_active_peers * 2; in ath10k_wmi_event_service_ready_work()
5623 ar->max_num_stations = TARGET_10_4_NUM_QCACHE_PEERS_MAX; in ath10k_wmi_event_service_ready_work()
5643 req_id = __le32_to_cpu(arg.mem_reqs[i]->req_id); in ath10k_wmi_event_service_ready_work()
5644 num_units = __le32_to_cpu(arg.mem_reqs[i]->num_units); in ath10k_wmi_event_service_ready_work()
5645 unit_size = __le32_to_cpu(arg.mem_reqs[i]->unit_size); in ath10k_wmi_event_service_ready_work()
5646 num_unit_info = __le32_to_cpu(arg.mem_reqs[i]->num_unit_info); in ath10k_wmi_event_service_ready_work()
5649 if (ar->num_active_peers) in ath10k_wmi_event_service_ready_work()
5650 num_units = ar->num_active_peers + 1; in ath10k_wmi_event_service_ready_work()
5652 num_units = ar->max_num_peers + 1; in ath10k_wmi_event_service_ready_work()
5659 num_units = ar->max_num_peers + 1; in ath10k_wmi_event_service_ready_work()
5661 num_units = ar->max_num_vdevs + 1; in ath10k_wmi_event_service_ready_work()
5667 __le32_to_cpu(arg.mem_reqs[i]->num_units), in ath10k_wmi_event_service_ready_work()
5699 ar->svc_rdy_skb = NULL; in ath10k_wmi_event_service_ready_work()
5700 complete(&ar->wmi.service_ready); in ath10k_wmi_event_service_ready_work()
5705 ar->svc_rdy_skb = skb; in ath10k_wmi_event_service_ready()
5706 queue_work(ar->workqueue_aux, &ar->svc_rdy_work); in ath10k_wmi_event_service_ready()
5712 struct wmi_ready_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_rdy_ev()
5714 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_rdy_ev()
5715 return -EPROTO; in ath10k_wmi_op_pull_rdy_ev()
5718 arg->sw_version = ev->sw_version; in ath10k_wmi_op_pull_rdy_ev()
5719 arg->abi_version = ev->abi_version; in ath10k_wmi_op_pull_rdy_ev()
5720 arg->status = ev->status; in ath10k_wmi_op_pull_rdy_ev()
5721 arg->mac_addr = ev->mac_addr.addr; in ath10k_wmi_op_pull_rdy_ev()
5729 struct wmi_roam_ev *ev = (void *)skb->data; in ath10k_wmi_op_pull_roam_ev()
5731 if (skb->len < sizeof(*ev)) in ath10k_wmi_op_pull_roam_ev()
5732 return -EPROTO; in ath10k_wmi_op_pull_roam_ev()
5735 arg->vdev_id = ev->vdev_id; in ath10k_wmi_op_pull_roam_ev()
5736 arg->reason = ev->reason; in ath10k_wmi_op_pull_roam_ev()
5745 struct wmi_echo_event *ev = (void *)skb->data; in ath10k_wmi_op_pull_echo_ev()
5747 arg->value = ev->value; in ath10k_wmi_op_pull_echo_ev()
5770 if (is_zero_ether_addr(ar->mac_addr)) in ath10k_wmi_event_ready()
5771 ether_addr_copy(ar->mac_addr, arg.mac_addr); in ath10k_wmi_event_ready()
5772 complete(&ar->wmi.unified_ready); in ath10k_wmi_event_ready()
5792 ath10k_wmi_map_svc_ext(ar, arg.service_map_ext, ar->wmi.svc_map, in ath10k_wmi_event_service_available()
5800 ev = (struct wmi_pdev_temperature_event *)skb->data; in ath10k_wmi_event_temperature()
5801 if (WARN_ON(skb->len < sizeof(*ev))) in ath10k_wmi_event_temperature()
5802 return -EPROTO; in ath10k_wmi_event_temperature()
5804 ath10k_thermal_event_temperature(ar, __le32_to_cpu(ev->temperature)); in ath10k_wmi_event_temperature()
5813 u64 busy, total, tx, rx, rx_bss; in ath10k_wmi_event_pdev_bss_chan_info() local
5815 u32 cc_freq_hz = ar->hw_params.channel_counters_freq_hz; in ath10k_wmi_event_pdev_bss_chan_info()
5818 ev = (struct wmi_pdev_bss_chan_info_event *)skb->data; in ath10k_wmi_event_pdev_bss_chan_info()
5819 if (WARN_ON(skb->len < sizeof(*ev))) in ath10k_wmi_event_pdev_bss_chan_info()
5820 return -EPROTO; in ath10k_wmi_event_pdev_bss_chan_info()
5822 freq = __le32_to_cpu(ev->freq); in ath10k_wmi_event_pdev_bss_chan_info()
5823 noise_floor = __le32_to_cpu(ev->noise_floor); in ath10k_wmi_event_pdev_bss_chan_info()
5824 busy = __le64_to_cpu(ev->cycle_busy); in ath10k_wmi_event_pdev_bss_chan_info()
5825 total = __le64_to_cpu(ev->cycle_total); in ath10k_wmi_event_pdev_bss_chan_info()
5826 tx = __le64_to_cpu(ev->cycle_tx); in ath10k_wmi_event_pdev_bss_chan_info()
5827 rx = __le64_to_cpu(ev->cycle_rx); in ath10k_wmi_event_pdev_bss_chan_info()
5828 rx_bss = __le64_to_cpu(ev->cycle_rx_bss); in ath10k_wmi_event_pdev_bss_chan_info()
5831 …"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()
5832 freq, noise_floor, busy, total, tx, rx, rx_bss); in ath10k_wmi_event_pdev_bss_chan_info()
5834 spin_lock_bh(&ar->data_lock); in ath10k_wmi_event_pdev_bss_chan_info()
5836 if (idx >= ARRAY_SIZE(ar->survey)) { in ath10k_wmi_event_pdev_bss_chan_info()
5842 survey = &ar->survey[idx]; in ath10k_wmi_event_pdev_bss_chan_info()
5844 survey->noise = noise_floor; in ath10k_wmi_event_pdev_bss_chan_info()
5845 survey->time = div_u64(total, cc_freq_hz); in ath10k_wmi_event_pdev_bss_chan_info()
5846 survey->time_busy = div_u64(busy, cc_freq_hz); in ath10k_wmi_event_pdev_bss_chan_info()
5847 survey->time_rx = div_u64(rx_bss, cc_freq_hz); in ath10k_wmi_event_pdev_bss_chan_info()
5848 survey->time_tx = div_u64(tx, cc_freq_hz); in ath10k_wmi_event_pdev_bss_chan_info()
5849 survey->filled |= (SURVEY_INFO_NOISE_DBM | in ath10k_wmi_event_pdev_bss_chan_info()
5855 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_event_pdev_bss_chan_info()
5856 complete(&ar->bss_survey_done); in ath10k_wmi_event_pdev_bss_chan_info()
5862 if (ar->hw_params.hw_ops->set_coverage_class) { in ath10k_wmi_queue_set_coverage_class_work()
5863 spin_lock_bh(&ar->data_lock); in ath10k_wmi_queue_set_coverage_class_work()
5868 * coverage class has a non-zero value. in ath10k_wmi_queue_set_coverage_class_work()
5870 if (ar->fw_coverage.coverage_class) in ath10k_wmi_queue_set_coverage_class_work()
5871 queue_work(ar->workqueue, &ar->set_coverage_class_work); in ath10k_wmi_queue_set_coverage_class_work()
5873 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_queue_set_coverage_class_work()
5882 cmd_hdr = (struct wmi_cmd_hdr *)skb->data; in ath10k_wmi_op_rx()
5883 id = MS(__le32_to_cpu(cmd_hdr->cmd_id), WMI_CMD_HDR_CMD_ID); in ath10k_wmi_op_rx()
5888 trace_ath10k_wmi_event(ar, id, skb->data, skb->len); in ath10k_wmi_op_rx()
6010 cmd_hdr = (struct wmi_cmd_hdr *)skb->data; in ath10k_wmi_10_1_op_rx()
6011 id = MS(__le32_to_cpu(cmd_hdr->cmd_id), WMI_CMD_HDR_CMD_ID); in ath10k_wmi_10_1_op_rx()
6016 trace_ath10k_wmi_event(ar, id, skb->data, skb->len); in ath10k_wmi_10_1_op_rx()
6141 cmd_hdr = (struct wmi_cmd_hdr *)skb->data; in ath10k_wmi_10_2_op_rx()
6142 id = MS(__le32_to_cpu(cmd_hdr->cmd_id), WMI_CMD_HDR_CMD_ID); in ath10k_wmi_10_2_op_rx()
6147 trace_ath10k_wmi_event(ar, id, skb->data, skb->len); in ath10k_wmi_10_2_op_rx()
6290 cmd_hdr = (struct wmi_cmd_hdr *)skb->data; in ath10k_wmi_10_4_op_rx()
6291 id = MS(__le32_to_cpu(cmd_hdr->cmd_id), WMI_CMD_HDR_CMD_ID); in ath10k_wmi_10_4_op_rx()
6296 trace_ath10k_wmi_event(ar, id, skb->data, skb->len); in ath10k_wmi_10_4_op_rx()
6410 ath10k_warn(ar, "failed to process wmi rx: %d\n", ret); in ath10k_wmi_process_rx()
6419 memset(&ar->wmi.svc_map, 0, sizeof(ar->wmi.svc_map)); in ath10k_wmi_connect()
6432 status = ath10k_htc_connect_service(&ar->htc, &conn_req, &conn_resp); in ath10k_wmi_connect()
6439 ar->wmi.eid = conn_resp.eid; in ath10k_wmi_connect()
6452 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_set_base_macaddr()
6454 cmd = (struct wmi_pdev_set_base_macaddr_cmd *)skb->data; in ath10k_wmi_op_gen_pdev_set_base_macaddr()
6455 ether_addr_copy(cmd->mac_addr.addr, macaddr); in ath10k_wmi_op_gen_pdev_set_base_macaddr()
6472 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_set_rd()
6474 cmd = (struct wmi_pdev_set_regdomain_cmd *)skb->data; in ath10k_wmi_op_gen_pdev_set_rd()
6475 cmd->reg_domain = __cpu_to_le32(rd); in ath10k_wmi_op_gen_pdev_set_rd()
6476 cmd->reg_domain_2G = __cpu_to_le32(rd2g); in ath10k_wmi_op_gen_pdev_set_rd()
6477 cmd->reg_domain_5G = __cpu_to_le32(rd5g); in ath10k_wmi_op_gen_pdev_set_rd()
6478 cmd->conformance_test_limit_2G = __cpu_to_le32(ctl2g); in ath10k_wmi_op_gen_pdev_set_rd()
6479 cmd->conformance_test_limit_5G = __cpu_to_le32(ctl5g); in ath10k_wmi_op_gen_pdev_set_rd()
6497 return ERR_PTR(-ENOMEM); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6499 cmd = (struct wmi_pdev_set_regdomain_cmd_10x *)skb->data; in ath10k_wmi_10x_op_gen_pdev_set_rd()
6500 cmd->reg_domain = __cpu_to_le32(rd); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6501 cmd->reg_domain_2G = __cpu_to_le32(rd2g); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6502 cmd->reg_domain_5G = __cpu_to_le32(rd5g); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6503 cmd->conformance_test_limit_2G = __cpu_to_le32(ctl2g); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6504 cmd->conformance_test_limit_5G = __cpu_to_le32(ctl5g); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6505 cmd->dfs_domain = __cpu_to_le32(dfs_reg); in ath10k_wmi_10x_op_gen_pdev_set_rd()
6521 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_suspend()
6523 cmd = (struct wmi_pdev_suspend_cmd *)skb->data; in ath10k_wmi_op_gen_pdev_suspend()
6524 cmd->suspend_opt = __cpu_to_le32(suspend_opt); in ath10k_wmi_op_gen_pdev_suspend()
6536 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_resume()
6550 return ERR_PTR(-EOPNOTSUPP); in ath10k_wmi_op_gen_pdev_set_param()
6555 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_set_param()
6557 cmd = (struct wmi_pdev_set_param_cmd *)skb->data; in ath10k_wmi_op_gen_pdev_set_param()
6558 cmd->param_id = __cpu_to_le32(id); in ath10k_wmi_op_gen_pdev_set_param()
6559 cmd->param_value = __cpu_to_le32(value); in ath10k_wmi_op_gen_pdev_set_param()
6572 chunks->count = __cpu_to_le32(ar->wmi.num_mem_chunks); in ath10k_wmi_put_host_mem_chunks()
6574 for (i = 0; i < ar->wmi.num_mem_chunks; i++) { in ath10k_wmi_put_host_mem_chunks()
6575 chunk = &chunks->items[i]; in ath10k_wmi_put_host_mem_chunks()
6576 chunk->ptr = __cpu_to_le32(ar->wmi.mem_chunks[i].paddr); in ath10k_wmi_put_host_mem_chunks()
6577 chunk->size = __cpu_to_le32(ar->wmi.mem_chunks[i].len); in ath10k_wmi_put_host_mem_chunks()
6578 chunk->req_id = __cpu_to_le32(ar->wmi.mem_chunks[i].req_id); in ath10k_wmi_put_host_mem_chunks()
6583 ar->wmi.mem_chunks[i].len, in ath10k_wmi_put_host_mem_chunks()
6584 (unsigned long long)ar->wmi.mem_chunks[i].paddr); in ath10k_wmi_put_host_mem_chunks()
6611 config.rx_decap_mode = __cpu_to_le32(ar->wmi.rx_decap_mode); in ath10k_wmi_op_gen_init()
6646 ar->wmi.num_mem_chunks)); in ath10k_wmi_op_gen_init()
6648 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_init()
6650 cmd = (struct wmi_init_cmd *)buf->data; in ath10k_wmi_op_gen_init()
6652 memcpy(&cmd->resource_config, &config, sizeof(config)); in ath10k_wmi_op_gen_init()
6653 ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks); in ath10k_wmi_op_gen_init()
6677 config.rx_decap_mode = __cpu_to_le32(ar->wmi.rx_decap_mode); in ath10k_wmi_10_1_op_gen_init()
6709 ar->wmi.num_mem_chunks)); in ath10k_wmi_10_1_op_gen_init()
6711 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_1_op_gen_init()
6713 cmd = (struct wmi_init_cmd_10x *)buf->data; in ath10k_wmi_10_1_op_gen_init()
6715 memcpy(&cmd->resource_config, &config, sizeof(config)); in ath10k_wmi_10_1_op_gen_init()
6716 ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks); in ath10k_wmi_10_1_op_gen_init()
6747 config.rx_decap_mode = __cpu_to_le32(ar->wmi.rx_decap_mode); in ath10k_wmi_10_2_op_gen_init()
6780 ar->wmi.num_mem_chunks)); in ath10k_wmi_10_2_op_gen_init()
6782 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_op_gen_init()
6784 cmd = (struct wmi_init_cmd_10_2 *)buf->data; in ath10k_wmi_10_2_op_gen_init()
6788 if (test_bit(ATH10K_FLAG_BTCOEX, &ar->dev_flags) && in ath10k_wmi_10_2_op_gen_init()
6789 test_bit(WMI_SERVICE_COEX_GPIO, ar->wmi.svc_map)) in ath10k_wmi_10_2_op_gen_init()
6795 if (test_bit(WMI_SERVICE_BSS_CHANNEL_INFO_64, ar->wmi.svc_map)) in ath10k_wmi_10_2_op_gen_init()
6798 cmd->resource_config.feature_mask = __cpu_to_le32(features); in ath10k_wmi_10_2_op_gen_init()
6800 memcpy(&cmd->resource_config.common, &config, sizeof(config)); in ath10k_wmi_10_2_op_gen_init()
6801 ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks); in ath10k_wmi_10_2_op_gen_init()
6813 config.num_vdevs = __cpu_to_le32(ar->max_num_vdevs); in ath10k_wmi_10_4_op_gen_init()
6814 config.num_peers = __cpu_to_le32(ar->max_num_peers); in ath10k_wmi_10_4_op_gen_init()
6815 config.num_active_peers = __cpu_to_le32(ar->num_active_peers); in ath10k_wmi_10_4_op_gen_init()
6816 config.num_tids = __cpu_to_le32(ar->num_tids); in ath10k_wmi_10_4_op_gen_init()
6823 config.tx_chain_mask = __cpu_to_le32(ar->hw_params.tx_chain_mask); in ath10k_wmi_10_4_op_gen_init()
6824 config.rx_chain_mask = __cpu_to_le32(ar->hw_params.rx_chain_mask); in ath10k_wmi_10_4_op_gen_init()
6831 config.rx_decap_mode = __cpu_to_le32(ar->wmi.rx_decap_mode); in ath10k_wmi_10_4_op_gen_init()
6855 config.num_msdu_desc = __cpu_to_le32(ar->htt.max_num_pending_tx); in ath10k_wmi_10_4_op_gen_init()
6874 ar->wmi.num_mem_chunks)); in ath10k_wmi_10_4_op_gen_init()
6876 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_op_gen_init()
6878 cmd = (struct wmi_init_cmd_10_4 *)buf->data; in ath10k_wmi_10_4_op_gen_init()
6879 memcpy(&cmd->resource_config, &config, sizeof(config)); in ath10k_wmi_10_4_op_gen_init()
6880 ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks); in ath10k_wmi_10_4_op_gen_init()
6888 if (arg->ie_len > WLAN_SCAN_PARAMS_MAX_IE_LEN) in ath10k_wmi_start_scan_verify()
6889 return -EINVAL; in ath10k_wmi_start_scan_verify()
6890 if (arg->n_channels > ARRAY_SIZE(arg->channels)) in ath10k_wmi_start_scan_verify()
6891 return -EINVAL; in ath10k_wmi_start_scan_verify()
6892 if (arg->n_ssids > WLAN_SCAN_PARAMS_MAX_SSID) in ath10k_wmi_start_scan_verify()
6893 return -EINVAL; in ath10k_wmi_start_scan_verify()
6894 if (arg->n_bssids > WLAN_SCAN_PARAMS_MAX_BSSID) in ath10k_wmi_start_scan_verify()
6895 return -EINVAL; in ath10k_wmi_start_scan_verify()
6905 if (arg->ie_len) { in ath10k_wmi_start_scan_tlvs_len()
6907 len += roundup(arg->ie_len, 4); in ath10k_wmi_start_scan_tlvs_len()
6910 if (arg->n_channels) { in ath10k_wmi_start_scan_tlvs_len()
6912 len += sizeof(__le32) * arg->n_channels; in ath10k_wmi_start_scan_tlvs_len()
6915 if (arg->n_ssids) { in ath10k_wmi_start_scan_tlvs_len()
6917 len += sizeof(struct wmi_ssid) * arg->n_ssids; in ath10k_wmi_start_scan_tlvs_len()
6920 if (arg->n_bssids) { in ath10k_wmi_start_scan_tlvs_len()
6922 len += sizeof(struct wmi_mac_addr) * arg->n_bssids; in ath10k_wmi_start_scan_tlvs_len()
6935 scan_id |= arg->scan_id; in ath10k_wmi_put_start_scan_common()
6938 scan_req_id |= arg->scan_req_id; in ath10k_wmi_put_start_scan_common()
6940 cmn->scan_id = __cpu_to_le32(scan_id); in ath10k_wmi_put_start_scan_common()
6941 cmn->scan_req_id = __cpu_to_le32(scan_req_id); in ath10k_wmi_put_start_scan_common()
6942 cmn->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_put_start_scan_common()
6943 cmn->scan_priority = __cpu_to_le32(arg->scan_priority); in ath10k_wmi_put_start_scan_common()
6944 cmn->notify_scan_events = __cpu_to_le32(arg->notify_scan_events); in ath10k_wmi_put_start_scan_common()
6945 cmn->dwell_time_active = __cpu_to_le32(arg->dwell_time_active); in ath10k_wmi_put_start_scan_common()
6946 cmn->dwell_time_passive = __cpu_to_le32(arg->dwell_time_passive); in ath10k_wmi_put_start_scan_common()
6947 cmn->min_rest_time = __cpu_to_le32(arg->min_rest_time); in ath10k_wmi_put_start_scan_common()
6948 cmn->max_rest_time = __cpu_to_le32(arg->max_rest_time); in ath10k_wmi_put_start_scan_common()
6949 cmn->repeat_probe_time = __cpu_to_le32(arg->repeat_probe_time); in ath10k_wmi_put_start_scan_common()
6950 cmn->probe_spacing_time = __cpu_to_le32(arg->probe_spacing_time); in ath10k_wmi_put_start_scan_common()
6951 cmn->idle_time = __cpu_to_le32(arg->idle_time); in ath10k_wmi_put_start_scan_common()
6952 cmn->max_scan_time = __cpu_to_le32(arg->max_scan_time); in ath10k_wmi_put_start_scan_common()
6953 cmn->probe_delay = __cpu_to_le32(arg->probe_delay); in ath10k_wmi_put_start_scan_common()
6954 cmn->scan_ctrl_flags = __cpu_to_le32(arg->scan_ctrl_flags); in ath10k_wmi_put_start_scan_common()
6968 if (arg->n_channels) { in ath10k_wmi_put_start_scan_tlvs()
6970 channels->tag = __cpu_to_le32(WMI_CHAN_LIST_TAG); in ath10k_wmi_put_start_scan_tlvs()
6971 channels->num_chan = __cpu_to_le32(arg->n_channels); in ath10k_wmi_put_start_scan_tlvs()
6973 for (i = 0; i < arg->n_channels; i++) in ath10k_wmi_put_start_scan_tlvs()
6974 channels->channel_list[i].freq = in ath10k_wmi_put_start_scan_tlvs()
6975 __cpu_to_le16(arg->channels[i]); in ath10k_wmi_put_start_scan_tlvs()
6978 ptr += sizeof(__le32) * arg->n_channels; in ath10k_wmi_put_start_scan_tlvs()
6981 if (arg->n_ssids) { in ath10k_wmi_put_start_scan_tlvs()
6983 ssids->tag = __cpu_to_le32(WMI_SSID_LIST_TAG); in ath10k_wmi_put_start_scan_tlvs()
6984 ssids->num_ssids = __cpu_to_le32(arg->n_ssids); in ath10k_wmi_put_start_scan_tlvs()
6986 for (i = 0; i < arg->n_ssids; i++) { in ath10k_wmi_put_start_scan_tlvs()
6987 ssids->ssids[i].ssid_len = in ath10k_wmi_put_start_scan_tlvs()
6988 __cpu_to_le32(arg->ssids[i].len); in ath10k_wmi_put_start_scan_tlvs()
6989 memcpy(&ssids->ssids[i].ssid, in ath10k_wmi_put_start_scan_tlvs()
6990 arg->ssids[i].ssid, in ath10k_wmi_put_start_scan_tlvs()
6991 arg->ssids[i].len); in ath10k_wmi_put_start_scan_tlvs()
6995 ptr += sizeof(struct wmi_ssid) * arg->n_ssids; in ath10k_wmi_put_start_scan_tlvs()
6998 if (arg->n_bssids) { in ath10k_wmi_put_start_scan_tlvs()
7000 bssids->tag = __cpu_to_le32(WMI_BSSID_LIST_TAG); in ath10k_wmi_put_start_scan_tlvs()
7001 bssids->num_bssid = __cpu_to_le32(arg->n_bssids); in ath10k_wmi_put_start_scan_tlvs()
7003 for (i = 0; i < arg->n_bssids; i++) in ath10k_wmi_put_start_scan_tlvs()
7004 ether_addr_copy(bssids->bssid_list[i].addr, in ath10k_wmi_put_start_scan_tlvs()
7005 arg->bssids[i].bssid); in ath10k_wmi_put_start_scan_tlvs()
7008 ptr += sizeof(struct wmi_mac_addr) * arg->n_bssids; in ath10k_wmi_put_start_scan_tlvs()
7011 if (arg->ie_len) { in ath10k_wmi_put_start_scan_tlvs()
7013 ie->tag = __cpu_to_le32(WMI_IE_TAG); in ath10k_wmi_put_start_scan_tlvs()
7014 ie->ie_len = __cpu_to_le32(arg->ie_len); in ath10k_wmi_put_start_scan_tlvs()
7015 memcpy(ie->ie_data, arg->ie, arg->ie_len); in ath10k_wmi_put_start_scan_tlvs()
7018 ptr += roundup(arg->ie_len, 4); in ath10k_wmi_put_start_scan_tlvs()
7038 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_start_scan()
7040 cmd = (struct wmi_start_scan_cmd *)skb->data; in ath10k_wmi_op_gen_start_scan()
7042 ath10k_wmi_put_start_scan_common(&cmd->common, arg); in ath10k_wmi_op_gen_start_scan()
7043 ath10k_wmi_put_start_scan_tlvs(cmd->tlvs, arg); in ath10k_wmi_op_gen_start_scan()
7045 cmd->burst_duration_ms = __cpu_to_le32(0); in ath10k_wmi_op_gen_start_scan()
7067 return ERR_PTR(-ENOMEM); in ath10k_wmi_10x_op_gen_start_scan()
7069 cmd = (struct wmi_10x_start_scan_cmd *)skb->data; in ath10k_wmi_10x_op_gen_start_scan()
7071 ath10k_wmi_put_start_scan_common(&cmd->common, arg); in ath10k_wmi_10x_op_gen_start_scan()
7072 ath10k_wmi_put_start_scan_tlvs(cmd->tlvs, arg); in ath10k_wmi_10x_op_gen_start_scan()
7082 arg->scan_req_id = 1; in ath10k_wmi_start_scan_init()
7083 arg->scan_priority = WMI_SCAN_PRIORITY_LOW; in ath10k_wmi_start_scan_init()
7084 arg->dwell_time_active = 50; in ath10k_wmi_start_scan_init()
7085 arg->dwell_time_passive = 150; in ath10k_wmi_start_scan_init()
7086 arg->min_rest_time = 50; in ath10k_wmi_start_scan_init()
7087 arg->max_rest_time = 500; in ath10k_wmi_start_scan_init()
7088 arg->repeat_probe_time = 0; in ath10k_wmi_start_scan_init()
7089 arg->probe_spacing_time = 0; in ath10k_wmi_start_scan_init()
7090 arg->idle_time = 0; in ath10k_wmi_start_scan_init()
7091 arg->max_scan_time = 20000; in ath10k_wmi_start_scan_init()
7092 arg->probe_delay = 5; in ath10k_wmi_start_scan_init()
7093 arg->notify_scan_events = WMI_SCAN_EVENT_STARTED in ath10k_wmi_start_scan_init()
7099 arg->scan_ctrl_flags |= WMI_SCAN_CHAN_STAT_EVENT; in ath10k_wmi_start_scan_init()
7100 arg->n_bssids = 1; in ath10k_wmi_start_scan_init()
7101 arg->bssids[0].bssid = "\xFF\xFF\xFF\xFF\xFF\xFF"; in ath10k_wmi_start_scan_init()
7113 if (arg->req_id > 0xFFF) in ath10k_wmi_op_gen_stop_scan()
7114 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_stop_scan()
7115 if (arg->req_type == WMI_SCAN_STOP_ONE && arg->u.scan_id > 0xFFF) in ath10k_wmi_op_gen_stop_scan()
7116 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_stop_scan()
7120 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_stop_scan()
7122 scan_id = arg->u.scan_id; in ath10k_wmi_op_gen_stop_scan()
7125 req_id = arg->req_id; in ath10k_wmi_op_gen_stop_scan()
7128 cmd = (struct wmi_stop_scan_cmd *)skb->data; in ath10k_wmi_op_gen_stop_scan()
7129 cmd->req_type = __cpu_to_le32(arg->req_type); in ath10k_wmi_op_gen_stop_scan()
7130 cmd->vdev_id = __cpu_to_le32(arg->u.vdev_id); in ath10k_wmi_op_gen_stop_scan()
7131 cmd->scan_id = __cpu_to_le32(scan_id); in ath10k_wmi_op_gen_stop_scan()
7132 cmd->scan_req_id = __cpu_to_le32(req_id); in ath10k_wmi_op_gen_stop_scan()
7136 arg->req_id, arg->req_type, arg->u.scan_id); in ath10k_wmi_op_gen_stop_scan()
7151 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_create()
7153 cmd = (struct wmi_vdev_create_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_create()
7154 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_create()
7155 cmd->vdev_type = __cpu_to_le32(type); in ath10k_wmi_op_gen_vdev_create()
7156 cmd->vdev_subtype = __cpu_to_le32(subtype); in ath10k_wmi_op_gen_vdev_create()
7157 ether_addr_copy(cmd->vdev_macaddr.addr, macaddr); in ath10k_wmi_op_gen_vdev_create()
7173 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_delete()
7175 cmd = (struct wmi_vdev_delete_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_delete()
7176 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_delete()
7193 if (WARN_ON(arg->hidden_ssid && !arg->ssid)) in ath10k_wmi_op_gen_vdev_start()
7194 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_vdev_start()
7195 if (WARN_ON(arg->ssid_len > sizeof(cmd->ssid.ssid))) in ath10k_wmi_op_gen_vdev_start()
7196 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_vdev_start()
7205 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_start()
7207 if (arg->hidden_ssid) in ath10k_wmi_op_gen_vdev_start()
7209 if (arg->pmf_enabled) in ath10k_wmi_op_gen_vdev_start()
7212 cmd = (struct wmi_vdev_start_request_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_start()
7213 cmd->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_op_gen_vdev_start()
7214 cmd->disable_hw_ack = __cpu_to_le32(arg->disable_hw_ack); in ath10k_wmi_op_gen_vdev_start()
7215 cmd->beacon_interval = __cpu_to_le32(arg->bcn_intval); in ath10k_wmi_op_gen_vdev_start()
7216 cmd->dtim_period = __cpu_to_le32(arg->dtim_period); in ath10k_wmi_op_gen_vdev_start()
7217 cmd->flags = __cpu_to_le32(flags); in ath10k_wmi_op_gen_vdev_start()
7218 cmd->bcn_tx_rate = __cpu_to_le32(arg->bcn_tx_rate); in ath10k_wmi_op_gen_vdev_start()
7219 cmd->bcn_tx_power = __cpu_to_le32(arg->bcn_tx_power); in ath10k_wmi_op_gen_vdev_start()
7221 if (arg->ssid) { in ath10k_wmi_op_gen_vdev_start()
7222 cmd->ssid.ssid_len = __cpu_to_le32(arg->ssid_len); in ath10k_wmi_op_gen_vdev_start()
7223 memcpy(cmd->ssid.ssid, arg->ssid, arg->ssid_len); in ath10k_wmi_op_gen_vdev_start()
7226 ath10k_wmi_put_wmi_channel(ar, &cmd->chan, &arg->channel); in ath10k_wmi_op_gen_vdev_start()
7230 cmdname, arg->vdev_id, in ath10k_wmi_op_gen_vdev_start()
7231 flags, arg->channel.freq, arg->channel.mode, in ath10k_wmi_op_gen_vdev_start()
7232 cmd->chan.flags, arg->channel.max_power); in ath10k_wmi_op_gen_vdev_start()
7245 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_stop()
7247 cmd = (struct wmi_vdev_stop_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_stop()
7248 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_stop()
7263 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_up()
7265 cmd = (struct wmi_vdev_up_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_up()
7266 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_up()
7267 cmd->vdev_assoc_id = __cpu_to_le32(aid); in ath10k_wmi_op_gen_vdev_up()
7268 ether_addr_copy(cmd->vdev_bssid.addr, bssid); in ath10k_wmi_op_gen_vdev_up()
7284 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_down()
7286 cmd = (struct wmi_vdev_down_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_down()
7287 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_down()
7305 return ERR_PTR(-EOPNOTSUPP); in ath10k_wmi_op_gen_vdev_set_param()
7310 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_set_param()
7312 cmd = (struct wmi_vdev_set_param_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_set_param()
7313 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_set_param()
7314 cmd->param_id = __cpu_to_le32(param_id); in ath10k_wmi_op_gen_vdev_set_param()
7315 cmd->param_value = __cpu_to_le32(param_value); in ath10k_wmi_op_gen_vdev_set_param()
7330 if (arg->key_cipher == WMI_CIPHER_NONE && arg->key_data != NULL) in ath10k_wmi_op_gen_vdev_install_key()
7331 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_vdev_install_key()
7332 if (arg->key_cipher != WMI_CIPHER_NONE && arg->key_data == NULL) in ath10k_wmi_op_gen_vdev_install_key()
7333 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_vdev_install_key()
7335 skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd) + arg->key_len); in ath10k_wmi_op_gen_vdev_install_key()
7337 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_install_key()
7339 cmd = (struct wmi_vdev_install_key_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_install_key()
7340 cmd->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_op_gen_vdev_install_key()
7341 cmd->key_idx = __cpu_to_le32(arg->key_idx); in ath10k_wmi_op_gen_vdev_install_key()
7342 cmd->key_flags = __cpu_to_le32(arg->key_flags); in ath10k_wmi_op_gen_vdev_install_key()
7343 cmd->key_cipher = __cpu_to_le32(arg->key_cipher); in ath10k_wmi_op_gen_vdev_install_key()
7344 cmd->key_len = __cpu_to_le32(arg->key_len); in ath10k_wmi_op_gen_vdev_install_key()
7345 cmd->key_txmic_len = __cpu_to_le32(arg->key_txmic_len); in ath10k_wmi_op_gen_vdev_install_key()
7346 cmd->key_rxmic_len = __cpu_to_le32(arg->key_rxmic_len); in ath10k_wmi_op_gen_vdev_install_key()
7348 if (arg->macaddr) in ath10k_wmi_op_gen_vdev_install_key()
7349 ether_addr_copy(cmd->peer_macaddr.addr, arg->macaddr); in ath10k_wmi_op_gen_vdev_install_key()
7350 if (arg->key_data) in ath10k_wmi_op_gen_vdev_install_key()
7351 memcpy(cmd->key_data, arg->key_data, arg->key_len); in ath10k_wmi_op_gen_vdev_install_key()
7355 arg->key_idx, arg->key_cipher, arg->key_len); in ath10k_wmi_op_gen_vdev_install_key()
7368 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_spectral_conf()
7370 cmd = (struct wmi_vdev_spectral_conf_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_spectral_conf()
7371 cmd->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_op_gen_vdev_spectral_conf()
7372 cmd->scan_count = __cpu_to_le32(arg->scan_count); in ath10k_wmi_op_gen_vdev_spectral_conf()
7373 cmd->scan_period = __cpu_to_le32(arg->scan_period); in ath10k_wmi_op_gen_vdev_spectral_conf()
7374 cmd->scan_priority = __cpu_to_le32(arg->scan_priority); in ath10k_wmi_op_gen_vdev_spectral_conf()
7375 cmd->scan_fft_size = __cpu_to_le32(arg->scan_fft_size); in ath10k_wmi_op_gen_vdev_spectral_conf()
7376 cmd->scan_gc_ena = __cpu_to_le32(arg->scan_gc_ena); in ath10k_wmi_op_gen_vdev_spectral_conf()
7377 cmd->scan_restart_ena = __cpu_to_le32(arg->scan_restart_ena); in ath10k_wmi_op_gen_vdev_spectral_conf()
7378 cmd->scan_noise_floor_ref = __cpu_to_le32(arg->scan_noise_floor_ref); in ath10k_wmi_op_gen_vdev_spectral_conf()
7379 cmd->scan_init_delay = __cpu_to_le32(arg->scan_init_delay); in ath10k_wmi_op_gen_vdev_spectral_conf()
7380 cmd->scan_nb_tone_thr = __cpu_to_le32(arg->scan_nb_tone_thr); in ath10k_wmi_op_gen_vdev_spectral_conf()
7381 cmd->scan_str_bin_thr = __cpu_to_le32(arg->scan_str_bin_thr); in ath10k_wmi_op_gen_vdev_spectral_conf()
7382 cmd->scan_wb_rpt_mode = __cpu_to_le32(arg->scan_wb_rpt_mode); in ath10k_wmi_op_gen_vdev_spectral_conf()
7383 cmd->scan_rssi_rpt_mode = __cpu_to_le32(arg->scan_rssi_rpt_mode); in ath10k_wmi_op_gen_vdev_spectral_conf()
7384 cmd->scan_rssi_thr = __cpu_to_le32(arg->scan_rssi_thr); in ath10k_wmi_op_gen_vdev_spectral_conf()
7385 cmd->scan_pwr_format = __cpu_to_le32(arg->scan_pwr_format); in ath10k_wmi_op_gen_vdev_spectral_conf()
7386 cmd->scan_rpt_mode = __cpu_to_le32(arg->scan_rpt_mode); in ath10k_wmi_op_gen_vdev_spectral_conf()
7387 cmd->scan_bin_scale = __cpu_to_le32(arg->scan_bin_scale); in ath10k_wmi_op_gen_vdev_spectral_conf()
7388 cmd->scan_dbm_adj = __cpu_to_le32(arg->scan_dbm_adj); in ath10k_wmi_op_gen_vdev_spectral_conf()
7389 cmd->scan_chn_mask = __cpu_to_le32(arg->scan_chn_mask); in ath10k_wmi_op_gen_vdev_spectral_conf()
7403 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_vdev_spectral_enable()
7405 cmd = (struct wmi_vdev_spectral_enable_cmd *)skb->data; in ath10k_wmi_op_gen_vdev_spectral_enable()
7406 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_vdev_spectral_enable()
7407 cmd->trigger_cmd = __cpu_to_le32(trigger); in ath10k_wmi_op_gen_vdev_spectral_enable()
7408 cmd->enable_cmd = __cpu_to_le32(enable); in ath10k_wmi_op_gen_vdev_spectral_enable()
7423 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_peer_create()
7425 cmd = (struct wmi_peer_create_cmd *)skb->data; in ath10k_wmi_op_gen_peer_create()
7426 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_peer_create()
7427 ether_addr_copy(cmd->peer_macaddr.addr, peer_addr); in ath10k_wmi_op_gen_peer_create()
7428 cmd->peer_type = __cpu_to_le32(peer_type); in ath10k_wmi_op_gen_peer_create()
7445 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_peer_delete()
7447 cmd = (struct wmi_peer_delete_cmd *)skb->data; in ath10k_wmi_op_gen_peer_delete()
7448 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_peer_delete()
7449 ether_addr_copy(cmd->peer_macaddr.addr, peer_addr); in ath10k_wmi_op_gen_peer_delete()
7466 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_peer_flush()
7468 cmd = (struct wmi_peer_flush_tids_cmd *)skb->data; in ath10k_wmi_op_gen_peer_flush()
7469 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_peer_flush()
7470 cmd->peer_tid_bitmap = __cpu_to_le32(tid_bitmap); in ath10k_wmi_op_gen_peer_flush()
7471 ether_addr_copy(cmd->peer_macaddr.addr, peer_addr); in ath10k_wmi_op_gen_peer_flush()
7490 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_peer_set_param()
7492 cmd = (struct wmi_peer_set_param_cmd *)skb->data; in ath10k_wmi_op_gen_peer_set_param()
7493 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_peer_set_param()
7494 cmd->param_id = __cpu_to_le32(param_id); in ath10k_wmi_op_gen_peer_set_param()
7495 cmd->param_value = __cpu_to_le32(param_value); in ath10k_wmi_op_gen_peer_set_param()
7496 ether_addr_copy(cmd->peer_macaddr.addr, peer_addr); in ath10k_wmi_op_gen_peer_set_param()
7513 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_gpio_config()
7515 cmd = (struct wmi_gpio_config_cmd *)skb->data; in ath10k_wmi_op_gen_gpio_config()
7516 cmd->pull_type = __cpu_to_le32(pull_type); in ath10k_wmi_op_gen_gpio_config()
7517 cmd->gpio_num = __cpu_to_le32(gpio_num); in ath10k_wmi_op_gen_gpio_config()
7518 cmd->input = __cpu_to_le32(input); in ath10k_wmi_op_gen_gpio_config()
7519 cmd->intr_mode = __cpu_to_le32(intr_mode); in ath10k_wmi_op_gen_gpio_config()
7535 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_gpio_output()
7537 cmd = (struct wmi_gpio_output_cmd *)skb->data; in ath10k_wmi_op_gen_gpio_output()
7538 cmd->gpio_num = __cpu_to_le32(gpio_num); in ath10k_wmi_op_gen_gpio_output()
7539 cmd->set = __cpu_to_le32(set); in ath10k_wmi_op_gen_gpio_output()
7556 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_set_psmode()
7558 cmd = (struct wmi_sta_powersave_mode_cmd *)skb->data; in ath10k_wmi_op_gen_set_psmode()
7559 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_set_psmode()
7560 cmd->sta_ps_mode = __cpu_to_le32(psmode); in ath10k_wmi_op_gen_set_psmode()
7578 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_set_sta_ps()
7580 cmd = (struct wmi_sta_powersave_param_cmd *)skb->data; in ath10k_wmi_op_gen_set_sta_ps()
7581 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_set_sta_ps()
7582 cmd->param_id = __cpu_to_le32(param_id); in ath10k_wmi_op_gen_set_sta_ps()
7583 cmd->param_value = __cpu_to_le32(value); in ath10k_wmi_op_gen_set_sta_ps()
7599 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_set_ap_ps()
7603 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_set_ap_ps()
7605 cmd = (struct wmi_ap_ps_peer_cmd *)skb->data; in ath10k_wmi_op_gen_set_ap_ps()
7606 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_set_ap_ps()
7607 cmd->param_id = __cpu_to_le32(param_id); in ath10k_wmi_op_gen_set_ap_ps()
7608 cmd->param_value = __cpu_to_le32(value); in ath10k_wmi_op_gen_set_ap_ps()
7609 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath10k_wmi_op_gen_set_ap_ps()
7627 skb = ath10k_wmi_alloc_skb(ar, struct_size(cmd, chan_info, arg->n_channels)); in ath10k_wmi_op_gen_scan_chan_list()
7629 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_scan_chan_list()
7631 cmd = (struct wmi_scan_chan_list_cmd *)skb->data; in ath10k_wmi_op_gen_scan_chan_list()
7632 cmd->num_scan_chans = __cpu_to_le32(arg->n_channels); in ath10k_wmi_op_gen_scan_chan_list()
7634 for (i = 0; i < arg->n_channels; i++) { in ath10k_wmi_op_gen_scan_chan_list()
7635 ch = &arg->channels[i]; in ath10k_wmi_op_gen_scan_chan_list()
7636 ci = &cmd->chan_info[i]; in ath10k_wmi_op_gen_scan_chan_list()
7650 cmd->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_peer_assoc_fill()
7651 cmd->peer_new_assoc = __cpu_to_le32(arg->peer_reassoc ? 0 : 1); in ath10k_wmi_peer_assoc_fill()
7652 cmd->peer_associd = __cpu_to_le32(arg->peer_aid); in ath10k_wmi_peer_assoc_fill()
7653 cmd->peer_flags = __cpu_to_le32(arg->peer_flags); in ath10k_wmi_peer_assoc_fill()
7654 cmd->peer_caps = __cpu_to_le32(arg->peer_caps); in ath10k_wmi_peer_assoc_fill()
7655 cmd->peer_listen_intval = __cpu_to_le32(arg->peer_listen_intval); in ath10k_wmi_peer_assoc_fill()
7656 cmd->peer_ht_caps = __cpu_to_le32(arg->peer_ht_caps); in ath10k_wmi_peer_assoc_fill()
7657 cmd->peer_max_mpdu = __cpu_to_le32(arg->peer_max_mpdu); in ath10k_wmi_peer_assoc_fill()
7658 cmd->peer_mpdu_density = __cpu_to_le32(arg->peer_mpdu_density); in ath10k_wmi_peer_assoc_fill()
7659 cmd->peer_rate_caps = __cpu_to_le32(arg->peer_rate_caps); in ath10k_wmi_peer_assoc_fill()
7660 cmd->peer_nss = __cpu_to_le32(arg->peer_num_spatial_streams); in ath10k_wmi_peer_assoc_fill()
7661 cmd->peer_vht_caps = __cpu_to_le32(arg->peer_vht_caps); in ath10k_wmi_peer_assoc_fill()
7662 cmd->peer_phymode = __cpu_to_le32(arg->peer_phymode); in ath10k_wmi_peer_assoc_fill()
7664 ether_addr_copy(cmd->peer_macaddr.addr, arg->addr); in ath10k_wmi_peer_assoc_fill()
7666 cmd->peer_legacy_rates.num_rates = in ath10k_wmi_peer_assoc_fill()
7667 __cpu_to_le32(arg->peer_legacy_rates.num_rates); in ath10k_wmi_peer_assoc_fill()
7668 memcpy(cmd->peer_legacy_rates.rates, arg->peer_legacy_rates.rates, in ath10k_wmi_peer_assoc_fill()
7669 arg->peer_legacy_rates.num_rates); in ath10k_wmi_peer_assoc_fill()
7671 cmd->peer_ht_rates.num_rates = in ath10k_wmi_peer_assoc_fill()
7672 __cpu_to_le32(arg->peer_ht_rates.num_rates); in ath10k_wmi_peer_assoc_fill()
7673 memcpy(cmd->peer_ht_rates.rates, arg->peer_ht_rates.rates, in ath10k_wmi_peer_assoc_fill()
7674 arg->peer_ht_rates.num_rates); in ath10k_wmi_peer_assoc_fill()
7676 cmd->peer_vht_rates.rx_max_rate = in ath10k_wmi_peer_assoc_fill()
7677 __cpu_to_le32(arg->peer_vht_rates.rx_max_rate); in ath10k_wmi_peer_assoc_fill()
7678 cmd->peer_vht_rates.rx_mcs_set = in ath10k_wmi_peer_assoc_fill()
7679 __cpu_to_le32(arg->peer_vht_rates.rx_mcs_set); in ath10k_wmi_peer_assoc_fill()
7680 cmd->peer_vht_rates.tx_max_rate = in ath10k_wmi_peer_assoc_fill()
7681 __cpu_to_le32(arg->peer_vht_rates.tx_max_rate); in ath10k_wmi_peer_assoc_fill()
7682 cmd->peer_vht_rates.tx_mcs_set = in ath10k_wmi_peer_assoc_fill()
7683 __cpu_to_le32(arg->peer_vht_rates.tx_mcs_set); in ath10k_wmi_peer_assoc_fill()
7693 memset(cmd->peer_ht_info, 0, sizeof(cmd->peer_ht_info)); in ath10k_wmi_peer_assoc_fill_main()
7719 cmd->info0 = __cpu_to_le32(info0); in ath10k_wmi_peer_assoc_fill_10_2()
7729 cmd->peer_bw_rxnss_override = in ath10k_wmi_peer_assoc_fill_10_4()
7730 __cpu_to_le32(arg->peer_bw_rxnss_override); in ath10k_wmi_peer_assoc_fill_10_4()
7736 if (arg->peer_mpdu_density > 16) in ath10k_wmi_peer_assoc_check_arg()
7737 return -EINVAL; in ath10k_wmi_peer_assoc_check_arg()
7738 if (arg->peer_legacy_rates.num_rates > MAX_SUPPORTED_RATES) in ath10k_wmi_peer_assoc_check_arg()
7739 return -EINVAL; in ath10k_wmi_peer_assoc_check_arg()
7740 if (arg->peer_ht_rates.num_rates > MAX_SUPPORTED_RATES) in ath10k_wmi_peer_assoc_check_arg()
7741 return -EINVAL; in ath10k_wmi_peer_assoc_check_arg()
7760 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_peer_assoc()
7762 ath10k_wmi_peer_assoc_fill_main(ar, skb->data, arg); in ath10k_wmi_op_gen_peer_assoc()
7766 arg->vdev_id, arg->addr, in ath10k_wmi_op_gen_peer_assoc()
7767 arg->peer_reassoc ? "reassociate" : "new"); in ath10k_wmi_op_gen_peer_assoc()
7785 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_1_op_gen_peer_assoc()
7787 ath10k_wmi_peer_assoc_fill_10_1(ar, skb->data, arg); in ath10k_wmi_10_1_op_gen_peer_assoc()
7791 arg->vdev_id, arg->addr, in ath10k_wmi_10_1_op_gen_peer_assoc()
7792 arg->peer_reassoc ? "reassociate" : "new"); in ath10k_wmi_10_1_op_gen_peer_assoc()
7810 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_op_gen_peer_assoc()
7812 ath10k_wmi_peer_assoc_fill_10_2(ar, skb->data, arg); in ath10k_wmi_10_2_op_gen_peer_assoc()
7816 arg->vdev_id, arg->addr, in ath10k_wmi_10_2_op_gen_peer_assoc()
7817 arg->peer_reassoc ? "reassociate" : "new"); in ath10k_wmi_10_2_op_gen_peer_assoc()
7835 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_op_gen_peer_assoc()
7837 ath10k_wmi_peer_assoc_fill_10_4(ar, skb->data, arg); in ath10k_wmi_10_4_op_gen_peer_assoc()
7841 arg->vdev_id, arg->addr, in ath10k_wmi_10_4_op_gen_peer_assoc()
7842 arg->peer_reassoc ? "reassociate" : "new"); in ath10k_wmi_10_4_op_gen_peer_assoc()
7853 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_op_gen_pdev_get_temperature()
7868 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_op_gen_pdev_bss_chan_info()
7870 cmd = (struct wmi_pdev_chan_info_req_cmd *)skb->data; in ath10k_wmi_10_2_op_gen_pdev_bss_chan_info()
7871 cmd->type = __cpu_to_le32(type); in ath10k_wmi_10_2_op_gen_pdev_bss_chan_info()
7892 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_beacon_dma()
7895 fc = le16_to_cpu(hdr->frame_control); in ath10k_wmi_op_gen_beacon_dma()
7897 cmd = (struct wmi_bcn_tx_ref_cmd *)skb->data; in ath10k_wmi_op_gen_beacon_dma()
7898 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_beacon_dma()
7899 cmd->data_len = __cpu_to_le32(bcn_len); in ath10k_wmi_op_gen_beacon_dma()
7900 cmd->data_ptr = __cpu_to_le32(bcn_paddr); in ath10k_wmi_op_gen_beacon_dma()
7901 cmd->msdu_id = 0; in ath10k_wmi_op_gen_beacon_dma()
7902 cmd->frame_control = __cpu_to_le32(fc); in ath10k_wmi_op_gen_beacon_dma()
7903 cmd->flags = 0; in ath10k_wmi_op_gen_beacon_dma()
7904 cmd->antenna_mask = __cpu_to_le32(WMI_BCN_TX_REF_DEF_ANTENNA); in ath10k_wmi_op_gen_beacon_dma()
7907 cmd->flags |= __cpu_to_le32(WMI_BCN_TX_REF_FLAG_DTIM_ZERO); in ath10k_wmi_op_gen_beacon_dma()
7910 cmd->flags |= __cpu_to_le32(WMI_BCN_TX_REF_FLAG_DELIVER_CAB); in ath10k_wmi_op_gen_beacon_dma()
7918 params->cwmin = __cpu_to_le32(arg->cwmin); in ath10k_wmi_set_wmm_param()
7919 params->cwmax = __cpu_to_le32(arg->cwmax); in ath10k_wmi_set_wmm_param()
7920 params->aifs = __cpu_to_le32(arg->aifs); in ath10k_wmi_set_wmm_param()
7921 params->txop = __cpu_to_le32(arg->txop); in ath10k_wmi_set_wmm_param()
7922 params->acm = __cpu_to_le32(arg->acm); in ath10k_wmi_set_wmm_param()
7923 params->no_ack = __cpu_to_le32(arg->no_ack); in ath10k_wmi_set_wmm_param()
7935 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_set_wmm()
7937 cmd = (struct wmi_pdev_set_wmm_params *)skb->data; in ath10k_wmi_op_gen_pdev_set_wmm()
7938 ath10k_wmi_set_wmm_param(&cmd->ac_be, &arg->ac_be); in ath10k_wmi_op_gen_pdev_set_wmm()
7939 ath10k_wmi_set_wmm_param(&cmd->ac_bk, &arg->ac_bk); in ath10k_wmi_op_gen_pdev_set_wmm()
7940 ath10k_wmi_set_wmm_param(&cmd->ac_vi, &arg->ac_vi); in ath10k_wmi_op_gen_pdev_set_wmm()
7941 ath10k_wmi_set_wmm_param(&cmd->ac_vo, &arg->ac_vo); in ath10k_wmi_op_gen_pdev_set_wmm()
7955 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_request_stats()
7957 cmd = (struct wmi_request_stats_cmd *)skb->data; in ath10k_wmi_op_gen_request_stats()
7958 cmd->stats_id = __cpu_to_le32(stats_mask); in ath10k_wmi_op_gen_request_stats()
7974 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_force_fw_hang()
7976 cmd = (struct wmi_force_fw_hang_cmd *)skb->data; in ath10k_wmi_op_gen_force_fw_hang()
7977 cmd->type = __cpu_to_le32(type); in ath10k_wmi_op_gen_force_fw_hang()
7978 cmd->delay_ms = __cpu_to_le32(delay_ms); in ath10k_wmi_op_gen_force_fw_hang()
7995 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_dbglog_cfg()
7997 cmd = (struct wmi_dbglog_cfg_cmd *)skb->data; in ath10k_wmi_op_gen_dbglog_cfg()
8009 cmd->module_enable = __cpu_to_le32(module_enable); in ath10k_wmi_op_gen_dbglog_cfg()
8010 cmd->module_valid = __cpu_to_le32(~0); in ath10k_wmi_op_gen_dbglog_cfg()
8011 cmd->config_enable = __cpu_to_le32(cfg); in ath10k_wmi_op_gen_dbglog_cfg()
8012 cmd->config_valid = __cpu_to_le32(ATH10K_DBGLOG_CFG_LOG_LVL_MASK); in ath10k_wmi_op_gen_dbglog_cfg()
8016 __le32_to_cpu(cmd->module_enable), in ath10k_wmi_op_gen_dbglog_cfg()
8017 __le32_to_cpu(cmd->module_valid), in ath10k_wmi_op_gen_dbglog_cfg()
8018 __le32_to_cpu(cmd->config_enable), in ath10k_wmi_op_gen_dbglog_cfg()
8019 __le32_to_cpu(cmd->config_valid)); in ath10k_wmi_op_gen_dbglog_cfg()
8033 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
8035 cmd = (struct wmi_10_4_dbglog_cfg_cmd *)skb->data; in ath10k_wmi_10_4_op_gen_dbglog_cfg()
8047 cmd->module_enable = __cpu_to_le64(module_enable); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
8048 cmd->module_valid = __cpu_to_le64(~0); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
8049 cmd->config_enable = __cpu_to_le32(cfg); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
8050 cmd->config_valid = __cpu_to_le32(ATH10K_DBGLOG_CFG_LOG_LVL_MASK); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
8054 __le64_to_cpu(cmd->module_enable), in ath10k_wmi_10_4_op_gen_dbglog_cfg()
8055 __le64_to_cpu(cmd->module_valid), in ath10k_wmi_10_4_op_gen_dbglog_cfg()
8056 __le32_to_cpu(cmd->config_enable), in ath10k_wmi_10_4_op_gen_dbglog_cfg()
8057 __le32_to_cpu(cmd->config_valid)); in ath10k_wmi_10_4_op_gen_dbglog_cfg()
8069 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pktlog_enable()
8073 cmd = (struct wmi_pdev_pktlog_enable_cmd *)skb->data; in ath10k_wmi_op_gen_pktlog_enable()
8074 cmd->ev_bitmap = __cpu_to_le32(ev_bitmap); in ath10k_wmi_op_gen_pktlog_enable()
8088 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pktlog_disable()
8104 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8106 cmd = (struct wmi_pdev_set_quiet_cmd *)skb->data; in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8107 cmd->period = __cpu_to_le32(period); in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8108 cmd->duration = __cpu_to_le32(duration); in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8109 cmd->next_start = __cpu_to_le32(next_offset); in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8110 cmd->enabled = __cpu_to_le32(enabled); in ath10k_wmi_op_gen_pdev_set_quiet_mode()
8126 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_addba_clear_resp()
8130 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_addba_clear_resp()
8132 cmd = (struct wmi_addba_clear_resp_cmd *)skb->data; in ath10k_wmi_op_gen_addba_clear_resp()
8133 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_addba_clear_resp()
8134 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath10k_wmi_op_gen_addba_clear_resp()
8150 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_addba_send()
8154 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_addba_send()
8156 cmd = (struct wmi_addba_send_cmd *)skb->data; in ath10k_wmi_op_gen_addba_send()
8157 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_addba_send()
8158 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath10k_wmi_op_gen_addba_send()
8159 cmd->tid = __cpu_to_le32(tid); in ath10k_wmi_op_gen_addba_send()
8160 cmd->buffersize = __cpu_to_le32(buf_size); in ath10k_wmi_op_gen_addba_send()
8176 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_addba_set_resp()
8180 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_addba_set_resp()
8182 cmd = (struct wmi_addba_setresponse_cmd *)skb->data; in ath10k_wmi_op_gen_addba_set_resp()
8183 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_addba_set_resp()
8184 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath10k_wmi_op_gen_addba_set_resp()
8185 cmd->tid = __cpu_to_le32(tid); in ath10k_wmi_op_gen_addba_set_resp()
8186 cmd->statuscode = __cpu_to_le32(status); in ath10k_wmi_op_gen_addba_set_resp()
8202 return ERR_PTR(-EINVAL); in ath10k_wmi_op_gen_delba_send()
8206 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_delba_send()
8208 cmd = (struct wmi_delba_send_cmd *)skb->data; in ath10k_wmi_op_gen_delba_send()
8209 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_op_gen_delba_send()
8210 ether_addr_copy(cmd->peer_macaddr.addr, mac); in ath10k_wmi_op_gen_delba_send()
8211 cmd->tid = __cpu_to_le32(tid); in ath10k_wmi_op_gen_delba_send()
8212 cmd->initiator = __cpu_to_le32(initiator); in ath10k_wmi_op_gen_delba_send()
8213 cmd->reasoncode = __cpu_to_le32(reason); in ath10k_wmi_op_gen_delba_send()
8229 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config()
8231 cmd = (struct wmi_pdev_get_tpc_config_cmd *)skb->data; in ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config()
8232 cmd->param = __cpu_to_le32(param); in ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config()
8246 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_fw_pdev_base_stats_fill()
8247 len += scnprintf(buf + len, buf_len - len, "%30s\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8249 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8252 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8253 "Channel noise floor", pdev->ch_noise_floor); in ath10k_wmi_fw_pdev_base_stats_fill()
8254 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8255 "Channel TX power", pdev->chan_tx_power); in ath10k_wmi_fw_pdev_base_stats_fill()
8256 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8257 "TX frame count", pdev->tx_frame_count); in ath10k_wmi_fw_pdev_base_stats_fill()
8258 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8259 "RX frame count", pdev->rx_frame_count); in ath10k_wmi_fw_pdev_base_stats_fill()
8260 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8261 "RX clear count", pdev->rx_clear_count); in ath10k_wmi_fw_pdev_base_stats_fill()
8262 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8263 "Cycle count", pdev->cycle_count); in ath10k_wmi_fw_pdev_base_stats_fill()
8264 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_base_stats_fill()
8265 "PHY error count", pdev->phy_err_count); in ath10k_wmi_fw_pdev_base_stats_fill()
8277 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_extra_stats_fill()
8278 "RTS bad count", pdev->rts_bad); in ath10k_wmi_fw_pdev_extra_stats_fill()
8279 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_extra_stats_fill()
8280 "RTS good count", pdev->rts_good); in ath10k_wmi_fw_pdev_extra_stats_fill()
8281 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_extra_stats_fill()
8282 "FCS bad count", pdev->fcs_bad); in ath10k_wmi_fw_pdev_extra_stats_fill()
8283 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_extra_stats_fill()
8284 "No beacon count", pdev->no_beacons); in ath10k_wmi_fw_pdev_extra_stats_fill()
8285 len += scnprintf(buf + len, buf_len - len, "%30s %10u\n", in ath10k_wmi_fw_pdev_extra_stats_fill()
8286 "MIB int count", pdev->mib_int_count); in ath10k_wmi_fw_pdev_extra_stats_fill()
8288 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_fw_pdev_extra_stats_fill()
8299 len += scnprintf(buf + len, buf_len - len, "\n%30s\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8301 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8304 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8305 "HTT cookies queued", pdev->comp_queued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8306 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8307 "HTT cookies disp.", pdev->comp_delivered); in ath10k_wmi_fw_pdev_tx_stats_fill()
8308 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8309 "MSDU queued", pdev->msdu_enqued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8310 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8311 "MPDU queued", pdev->mpdu_enqued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8312 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8313 "MSDUs dropped", pdev->wmm_drop); in ath10k_wmi_fw_pdev_tx_stats_fill()
8314 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8315 "Local enqued", pdev->local_enqued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8316 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8317 "Local freed", pdev->local_freed); in ath10k_wmi_fw_pdev_tx_stats_fill()
8318 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8319 "HW queued", pdev->hw_queued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8320 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8321 "PPDUs reaped", pdev->hw_reaped); in ath10k_wmi_fw_pdev_tx_stats_fill()
8322 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8323 "Num underruns", pdev->underrun); in ath10k_wmi_fw_pdev_tx_stats_fill()
8324 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8325 "PPDUs cleaned", pdev->tx_abort); in ath10k_wmi_fw_pdev_tx_stats_fill()
8326 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8327 "MPDUs requeued", pdev->mpdus_requeued); in ath10k_wmi_fw_pdev_tx_stats_fill()
8328 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8329 "Excessive retries", pdev->tx_ko); in ath10k_wmi_fw_pdev_tx_stats_fill()
8330 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8331 "HW rate", pdev->data_rc); in ath10k_wmi_fw_pdev_tx_stats_fill()
8332 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8333 "Sched self triggers", pdev->self_triggers); in ath10k_wmi_fw_pdev_tx_stats_fill()
8334 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8336 pdev->sw_retry_failure); in ath10k_wmi_fw_pdev_tx_stats_fill()
8337 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8339 pdev->illgl_rate_phy_err); in ath10k_wmi_fw_pdev_tx_stats_fill()
8340 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8341 "Pdev continuous xretry", pdev->pdev_cont_xretry); in ath10k_wmi_fw_pdev_tx_stats_fill()
8342 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8343 "TX timeout", pdev->pdev_tx_timeout); in ath10k_wmi_fw_pdev_tx_stats_fill()
8344 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8345 "PDEV resets", pdev->pdev_resets); in ath10k_wmi_fw_pdev_tx_stats_fill()
8346 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8347 "PHY underrun", pdev->phy_underrun); in ath10k_wmi_fw_pdev_tx_stats_fill()
8348 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_tx_stats_fill()
8349 "MPDU is more than txop limit", pdev->txop_ovf); in ath10k_wmi_fw_pdev_tx_stats_fill()
8360 len += scnprintf(buf + len, buf_len - len, "\n%30s\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8361 "ath10k PDEV RX stats"); in ath10k_wmi_fw_pdev_rx_stats_fill()
8362 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8365 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8367 pdev->mid_ppdu_route_change); in ath10k_wmi_fw_pdev_rx_stats_fill()
8368 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8369 "Tot. number of statuses", pdev->status_rcvd); in ath10k_wmi_fw_pdev_rx_stats_fill()
8370 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8371 "Extra frags on rings 0", pdev->r0_frags); in ath10k_wmi_fw_pdev_rx_stats_fill()
8372 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8373 "Extra frags on rings 1", pdev->r1_frags); in ath10k_wmi_fw_pdev_rx_stats_fill()
8374 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8375 "Extra frags on rings 2", pdev->r2_frags); in ath10k_wmi_fw_pdev_rx_stats_fill()
8376 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8377 "Extra frags on rings 3", pdev->r3_frags); in ath10k_wmi_fw_pdev_rx_stats_fill()
8378 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8379 "MSDUs delivered to HTT", pdev->htt_msdus); in ath10k_wmi_fw_pdev_rx_stats_fill()
8380 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8381 "MPDUs delivered to HTT", pdev->htt_mpdus); in ath10k_wmi_fw_pdev_rx_stats_fill()
8382 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8383 "MSDUs delivered to stack", pdev->loc_msdus); in ath10k_wmi_fw_pdev_rx_stats_fill()
8384 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8385 "MPDUs delivered to stack", pdev->loc_mpdus); in ath10k_wmi_fw_pdev_rx_stats_fill()
8386 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8387 "Oversized AMSDUs", pdev->oversize_amsdu); in ath10k_wmi_fw_pdev_rx_stats_fill()
8388 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8389 "PHY errors", pdev->phy_errs); in ath10k_wmi_fw_pdev_rx_stats_fill()
8390 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8391 "PHY errors drops", pdev->phy_err_drop); in ath10k_wmi_fw_pdev_rx_stats_fill()
8392 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_fw_pdev_rx_stats_fill()
8393 "MPDU errors (FCS, MIC, ENC)", pdev->mpdu_errs); in ath10k_wmi_fw_pdev_rx_stats_fill()
8405 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8406 "vdev id", vdev->vdev_id); in ath10k_wmi_fw_vdev_stats_fill()
8407 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8408 "beacon snr", vdev->beacon_snr); in ath10k_wmi_fw_vdev_stats_fill()
8409 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8410 "data snr", vdev->data_snr); in ath10k_wmi_fw_vdev_stats_fill()
8411 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8412 "num rx frames", vdev->num_rx_frames); in ath10k_wmi_fw_vdev_stats_fill()
8413 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8414 "num rts fail", vdev->num_rts_fail); in ath10k_wmi_fw_vdev_stats_fill()
8415 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8416 "num rts success", vdev->num_rts_success); in ath10k_wmi_fw_vdev_stats_fill()
8417 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8418 "num rx err", vdev->num_rx_err); in ath10k_wmi_fw_vdev_stats_fill()
8419 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8420 "num rx discard", vdev->num_rx_discard); in ath10k_wmi_fw_vdev_stats_fill()
8421 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_fill()
8422 "num tx not acked", vdev->num_tx_not_acked); in ath10k_wmi_fw_vdev_stats_fill()
8424 for (i = 0 ; i < ARRAY_SIZE(vdev->num_tx_frames); i++) in ath10k_wmi_fw_vdev_stats_fill()
8425 len += scnprintf(buf + len, buf_len - len, in ath10k_wmi_fw_vdev_stats_fill()
8428 vdev->num_tx_frames[i]); in ath10k_wmi_fw_vdev_stats_fill()
8430 for (i = 0 ; i < ARRAY_SIZE(vdev->num_tx_frames_retries); i++) in ath10k_wmi_fw_vdev_stats_fill()
8431 len += scnprintf(buf + len, buf_len - len, in ath10k_wmi_fw_vdev_stats_fill()
8434 vdev->num_tx_frames_retries[i]); in ath10k_wmi_fw_vdev_stats_fill()
8436 for (i = 0 ; i < ARRAY_SIZE(vdev->num_tx_frames_failures); i++) in ath10k_wmi_fw_vdev_stats_fill()
8437 len += scnprintf(buf + len, buf_len - len, in ath10k_wmi_fw_vdev_stats_fill()
8440 vdev->num_tx_frames_failures[i]); in ath10k_wmi_fw_vdev_stats_fill()
8442 for (i = 0 ; i < ARRAY_SIZE(vdev->tx_rate_history); i++) in ath10k_wmi_fw_vdev_stats_fill()
8443 len += scnprintf(buf + len, buf_len - len, in ath10k_wmi_fw_vdev_stats_fill()
8446 vdev->tx_rate_history[i]); in ath10k_wmi_fw_vdev_stats_fill()
8448 for (i = 0 ; i < ARRAY_SIZE(vdev->beacon_rssi_history); i++) in ath10k_wmi_fw_vdev_stats_fill()
8449 len += scnprintf(buf + len, buf_len - len, in ath10k_wmi_fw_vdev_stats_fill()
8452 vdev->beacon_rssi_history[i]); in ath10k_wmi_fw_vdev_stats_fill()
8454 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_fw_vdev_stats_fill()
8465 len += scnprintf(buf + len, buf_len - len, "%30s %pM\n", in ath10k_wmi_fw_peer_stats_fill()
8466 "Peer MAC address", peer->peer_macaddr); in ath10k_wmi_fw_peer_stats_fill()
8467 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_peer_stats_fill()
8468 "Peer RSSI", peer->peer_rssi); in ath10k_wmi_fw_peer_stats_fill()
8469 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_peer_stats_fill()
8470 "Peer TX rate", peer->peer_tx_rate); in ath10k_wmi_fw_peer_stats_fill()
8471 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_peer_stats_fill()
8472 "Peer RX rate", peer->peer_rx_rate); in ath10k_wmi_fw_peer_stats_fill()
8474 len += scnprintf(buf + len, buf_len - len, "%30s %llu\n", in ath10k_wmi_fw_peer_stats_fill()
8475 "Peer RX duration", peer->rx_duration); in ath10k_wmi_fw_peer_stats_fill()
8477 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_fw_peer_stats_fill()
8488 len += scnprintf(buf + len, buf_len - len, "%30s %pM\n", in ath10k_wmi_fw_extd_peer_stats_fill()
8489 "Peer MAC address", peer->peer_macaddr); in ath10k_wmi_fw_extd_peer_stats_fill()
8490 len += scnprintf(buf + len, buf_len - len, "%30s %llu\n", in ath10k_wmi_fw_extd_peer_stats_fill()
8491 "Peer RX duration", peer->rx_duration); in ath10k_wmi_fw_extd_peer_stats_fill()
8506 spin_lock_bh(&ar->data_lock); in ath10k_wmi_main_op_fw_stats_fill()
8508 pdev = list_first_entry_or_null(&fw_stats->pdevs, in ath10k_wmi_main_op_fw_stats_fill()
8515 num_peers = list_count_nodes(&fw_stats->peers); in ath10k_wmi_main_op_fw_stats_fill()
8516 num_vdevs = list_count_nodes(&fw_stats->vdevs); in ath10k_wmi_main_op_fw_stats_fill()
8522 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_main_op_fw_stats_fill()
8523 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_main_op_fw_stats_fill()
8525 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_main_op_fw_stats_fill()
8528 list_for_each_entry(vdev, &fw_stats->vdevs, list) { in ath10k_wmi_main_op_fw_stats_fill()
8532 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_main_op_fw_stats_fill()
8533 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_main_op_fw_stats_fill()
8535 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_main_op_fw_stats_fill()
8538 list_for_each_entry(peer, &fw_stats->peers, list) { in ath10k_wmi_main_op_fw_stats_fill()
8540 fw_stats->extended); in ath10k_wmi_main_op_fw_stats_fill()
8544 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_main_op_fw_stats_fill()
8547 buf[len - 1] = 0; in ath10k_wmi_main_op_fw_stats_fill()
8564 spin_lock_bh(&ar->data_lock); in ath10k_wmi_10x_op_fw_stats_fill()
8566 pdev = list_first_entry_or_null(&fw_stats->pdevs, in ath10k_wmi_10x_op_fw_stats_fill()
8573 num_peers = list_count_nodes(&fw_stats->peers); in ath10k_wmi_10x_op_fw_stats_fill()
8574 num_vdevs = list_count_nodes(&fw_stats->vdevs); in ath10k_wmi_10x_op_fw_stats_fill()
8581 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_10x_op_fw_stats_fill()
8582 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_10x_op_fw_stats_fill()
8584 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_10x_op_fw_stats_fill()
8587 list_for_each_entry(vdev, &fw_stats->vdevs, list) { in ath10k_wmi_10x_op_fw_stats_fill()
8591 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_10x_op_fw_stats_fill()
8592 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_10x_op_fw_stats_fill()
8594 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_10x_op_fw_stats_fill()
8597 list_for_each_entry(peer, &fw_stats->peers, list) { in ath10k_wmi_10x_op_fw_stats_fill()
8599 fw_stats->extended); in ath10k_wmi_10x_op_fw_stats_fill()
8603 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_10x_op_fw_stats_fill()
8606 buf[len - 1] = 0; in ath10k_wmi_10x_op_fw_stats_fill()
8620 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_pdev_enable_adaptive_cca()
8622 cmd = (struct wmi_pdev_set_adaptive_cca_params *)skb->data; in ath10k_wmi_op_gen_pdev_enable_adaptive_cca()
8623 cmd->enable = __cpu_to_le32(enable); in ath10k_wmi_op_gen_pdev_enable_adaptive_cca()
8624 cmd->cca_detect_level = __cpu_to_le32(detect_level); in ath10k_wmi_op_gen_pdev_enable_adaptive_cca()
8625 cmd->cca_detect_margin = __cpu_to_le32(detect_margin); in ath10k_wmi_op_gen_pdev_enable_adaptive_cca()
8641 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8642 "vdev id", vdev->vdev_id); in ath10k_wmi_fw_vdev_stats_extd_fill()
8643 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8644 "ppdu aggr count", vdev->ppdu_aggr_cnt); in ath10k_wmi_fw_vdev_stats_extd_fill()
8645 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8646 "ppdu noack", vdev->ppdu_noack); in ath10k_wmi_fw_vdev_stats_extd_fill()
8647 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8648 "mpdu queued", vdev->mpdu_queued); in ath10k_wmi_fw_vdev_stats_extd_fill()
8649 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8650 "ppdu nonaggr count", vdev->ppdu_nonaggr_cnt); in ath10k_wmi_fw_vdev_stats_extd_fill()
8651 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8652 "mpdu sw requeued", vdev->mpdu_sw_requeued); in ath10k_wmi_fw_vdev_stats_extd_fill()
8653 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8654 "mpdu success retry", vdev->mpdu_suc_retry); in ath10k_wmi_fw_vdev_stats_extd_fill()
8655 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8656 "mpdu success multitry", vdev->mpdu_suc_multitry); in ath10k_wmi_fw_vdev_stats_extd_fill()
8657 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8658 "mpdu fail retry", vdev->mpdu_fail_retry); in ath10k_wmi_fw_vdev_stats_extd_fill()
8659 val = vdev->tx_ftm_suc; in ath10k_wmi_fw_vdev_stats_extd_fill()
8661 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8664 val = vdev->tx_ftm_suc_retry; in ath10k_wmi_fw_vdev_stats_extd_fill()
8666 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8669 val = vdev->tx_ftm_fail; in ath10k_wmi_fw_vdev_stats_extd_fill()
8671 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8674 val = vdev->rx_ftmr_cnt; in ath10k_wmi_fw_vdev_stats_extd_fill()
8676 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8677 "rx ftm request count", in ath10k_wmi_fw_vdev_stats_extd_fill()
8679 val = vdev->rx_ftmr_dup_cnt; in ath10k_wmi_fw_vdev_stats_extd_fill()
8681 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8682 "rx ftm request dup count", in ath10k_wmi_fw_vdev_stats_extd_fill()
8684 val = vdev->rx_iftmr_cnt; in ath10k_wmi_fw_vdev_stats_extd_fill()
8686 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8687 "rx initial ftm req count", in ath10k_wmi_fw_vdev_stats_extd_fill()
8689 val = vdev->rx_iftmr_dup_cnt; in ath10k_wmi_fw_vdev_stats_extd_fill()
8691 len += scnprintf(buf + len, buf_len - len, "%30s %u\n", in ath10k_wmi_fw_vdev_stats_extd_fill()
8692 "rx initial ftm req dup cnt", in ath10k_wmi_fw_vdev_stats_extd_fill()
8694 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_fw_vdev_stats_extd_fill()
8712 spin_lock_bh(&ar->data_lock); in ath10k_wmi_10_4_op_fw_stats_fill()
8714 pdev = list_first_entry_or_null(&fw_stats->pdevs, in ath10k_wmi_10_4_op_fw_stats_fill()
8721 num_peers = list_count_nodes(&fw_stats->peers); in ath10k_wmi_10_4_op_fw_stats_fill()
8722 num_vdevs = list_count_nodes(&fw_stats->vdevs); in ath10k_wmi_10_4_op_fw_stats_fill()
8728 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8729 "HW paused", pdev->hw_paused); in ath10k_wmi_10_4_op_fw_stats_fill()
8730 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8731 "Seqs posted", pdev->seq_posted); in ath10k_wmi_10_4_op_fw_stats_fill()
8732 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8733 "Seqs failed queueing", pdev->seq_failed_queueing); in ath10k_wmi_10_4_op_fw_stats_fill()
8734 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8735 "Seqs completed", pdev->seq_completed); in ath10k_wmi_10_4_op_fw_stats_fill()
8736 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8737 "Seqs restarted", pdev->seq_restarted); in ath10k_wmi_10_4_op_fw_stats_fill()
8738 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8739 "MU Seqs posted", pdev->mu_seq_posted); in ath10k_wmi_10_4_op_fw_stats_fill()
8740 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8741 "MPDUs SW flushed", pdev->mpdus_sw_flush); in ath10k_wmi_10_4_op_fw_stats_fill()
8742 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8743 "MPDUs HW filtered", pdev->mpdus_hw_filter); in ath10k_wmi_10_4_op_fw_stats_fill()
8744 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8745 "MPDUs truncated", pdev->mpdus_truncated); in ath10k_wmi_10_4_op_fw_stats_fill()
8746 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8747 "MPDUs receive no ACK", pdev->mpdus_ack_failed); in ath10k_wmi_10_4_op_fw_stats_fill()
8748 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8749 "MPDUs expired", pdev->mpdus_expired); in ath10k_wmi_10_4_op_fw_stats_fill()
8752 len += scnprintf(buf + len, buf_len - len, "%30s %10d\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8753 "Num Rx Overflow errors", pdev->rx_ovfl_errs); in ath10k_wmi_10_4_op_fw_stats_fill()
8755 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_10_4_op_fw_stats_fill()
8756 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8758 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8760 list_for_each_entry(vdev, &fw_stats->vdevs, list) { in ath10k_wmi_10_4_op_fw_stats_fill()
8764 len += scnprintf(buf + len, buf_len - len, "\n"); in ath10k_wmi_10_4_op_fw_stats_fill()
8765 len += scnprintf(buf + len, buf_len - len, "%30s (%zu)\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8767 len += scnprintf(buf + len, buf_len - len, "%30s\n\n", in ath10k_wmi_10_4_op_fw_stats_fill()
8770 list_for_each_entry(peer, &fw_stats->peers, list) { in ath10k_wmi_10_4_op_fw_stats_fill()
8772 fw_stats->extended); in ath10k_wmi_10_4_op_fw_stats_fill()
8775 if (fw_stats->extended) { in ath10k_wmi_10_4_op_fw_stats_fill()
8776 list_for_each_entry(extd_peer, &fw_stats->peers_extd, list) { in ath10k_wmi_10_4_op_fw_stats_fill()
8783 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_10_4_op_fw_stats_fill()
8786 buf[len - 1] = 0; in ath10k_wmi_10_4_op_fw_stats_fill()
8807 return -EOPNOTSUPP; in ath10k_wmi_op_get_vdev_subtype()
8809 return -EOPNOTSUPP; in ath10k_wmi_op_get_vdev_subtype()
8829 return -EOPNOTSUPP; in ath10k_wmi_10_2_4_op_get_vdev_subtype()
8831 return -EOPNOTSUPP; in ath10k_wmi_10_2_4_op_get_vdev_subtype()
8853 return -EOPNOTSUPP; in ath10k_wmi_10_4_op_get_vdev_subtype()
8867 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_ext_resource_config()
8869 if (test_bit(WMI_SERVICE_TDLS_UAPSD_SLEEP_STA, ar->wmi.svc_map)) in ath10k_wmi_10_4_ext_resource_config()
8872 cmd = (struct wmi_ext_resource_config_10_4_cmd *)skb->data; in ath10k_wmi_10_4_ext_resource_config()
8873 cmd->host_platform_config = __cpu_to_le32(type); in ath10k_wmi_10_4_ext_resource_config()
8874 cmd->fw_feature_bitmap = __cpu_to_le32(fw_feature_bitmap); in ath10k_wmi_10_4_ext_resource_config()
8875 cmd->wlan_gpio_priority = __cpu_to_le32(ar->coex_gpio_pin); in ath10k_wmi_10_4_ext_resource_config()
8876 cmd->coex_version = __cpu_to_le32(WMI_NO_COEX_VERSION_SUPPORT); in ath10k_wmi_10_4_ext_resource_config()
8877 cmd->coex_gpio_pin1 = __cpu_to_le32(-1); in ath10k_wmi_10_4_ext_resource_config()
8878 cmd->coex_gpio_pin2 = __cpu_to_le32(-1); in ath10k_wmi_10_4_ext_resource_config()
8879 cmd->coex_gpio_pin3 = __cpu_to_le32(-1); in ath10k_wmi_10_4_ext_resource_config()
8880 cmd->num_tdls_vdevs = __cpu_to_le32(TARGET_10_4_NUM_TDLS_VDEVS); in ath10k_wmi_10_4_ext_resource_config()
8881 cmd->num_tdls_conn_table_entries = __cpu_to_le32(20); in ath10k_wmi_10_4_ext_resource_config()
8882 cmd->max_tdls_concurrent_sleep_sta = __cpu_to_le32(num_tdls_sleep_sta); in ath10k_wmi_10_4_ext_resource_config()
8883 cmd->max_tdls_concurrent_buffer_sta = in ath10k_wmi_10_4_ext_resource_config()
8902 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8904 if (test_bit(WMI_SERVICE_TDLS_EXPLICIT_MODE_ONLY, ar->wmi.svc_map) && in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8908 if (test_bit(WMI_SERVICE_TDLS_UAPSD_BUFFER_STA, ar->wmi.svc_map)) in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8911 cmd = (struct wmi_10_4_tdls_set_state_cmd *)skb->data; in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8912 cmd->vdev_id = __cpu_to_le32(vdev_id); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8913 cmd->state = __cpu_to_le32(state); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8914 cmd->notification_interval_ms = __cpu_to_le32(5000); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8915 cmd->tx_discovery_threshold = __cpu_to_le32(100); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8916 cmd->tx_teardown_threshold = __cpu_to_le32(5); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8917 cmd->rssi_teardown_threshold = __cpu_to_le32(-75); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8918 cmd->rssi_delta = __cpu_to_le32(-20); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8919 cmd->tdls_options = __cpu_to_le32(options); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8920 cmd->tdls_peer_traffic_ind_window = __cpu_to_le32(2); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8921 cmd->tdls_peer_traffic_response_timeout_ms = __cpu_to_le32(5000); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8922 cmd->tdls_puapsd_mask = __cpu_to_le32(0xf); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8923 cmd->tdls_puapsd_inactivity_time_ms = __cpu_to_le32(0); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8924 cmd->tdls_puapsd_rx_frame_threshold = __cpu_to_le32(10); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8925 cmd->teardown_notification_ms = __cpu_to_le32(10); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8926 cmd->tdls_peer_kickout_threshold = __cpu_to_le32(96); in ath10k_wmi_10_4_gen_update_fw_tdls_state()
8933 static u32 ath10k_wmi_prepare_peer_qos(u8 uapsd_queues, u8 sp) in ath10k_wmi_prepare_peer_qos() argument
8946 peer_qos |= SM(sp, WMI_TDLS_PEER_SP); in ath10k_wmi_prepare_peer_qos()
8959 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_op_gen_pdev_get_tpc_table_cmdid()
8961 cmd = (struct wmi_pdev_get_tpc_table_cmd *)skb->data; in ath10k_wmi_10_4_op_gen_pdev_get_tpc_table_cmdid()
8962 cmd->param = __cpu_to_le32(param); in ath10k_wmi_10_4_op_gen_pdev_get_tpc_table_cmdid()
8984 chan_len = cap->peer_chan_len ? (cap->peer_chan_len - 1) : 0; in ath10k_wmi_10_4_gen_tdls_peer_update()
8990 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_gen_tdls_peer_update()
8992 cmd = (struct wmi_10_4_tdls_peer_update_cmd *)skb->data; in ath10k_wmi_10_4_gen_tdls_peer_update()
8993 cmd->vdev_id = __cpu_to_le32(arg->vdev_id); in ath10k_wmi_10_4_gen_tdls_peer_update()
8994 ether_addr_copy(cmd->peer_macaddr.addr, arg->addr); in ath10k_wmi_10_4_gen_tdls_peer_update()
8995 cmd->peer_state = __cpu_to_le32(arg->peer_state); in ath10k_wmi_10_4_gen_tdls_peer_update()
8997 peer_qos = ath10k_wmi_prepare_peer_qos(cap->peer_uapsd_queues, in ath10k_wmi_10_4_gen_tdls_peer_update()
8998 cap->peer_max_sp); in ath10k_wmi_10_4_gen_tdls_peer_update()
9000 peer_cap = &cmd->peer_capab; in ath10k_wmi_10_4_gen_tdls_peer_update()
9001 peer_cap->peer_qos = __cpu_to_le32(peer_qos); in ath10k_wmi_10_4_gen_tdls_peer_update()
9002 peer_cap->buff_sta_support = __cpu_to_le32(cap->buff_sta_support); in ath10k_wmi_10_4_gen_tdls_peer_update()
9003 peer_cap->off_chan_support = __cpu_to_le32(cap->off_chan_support); in ath10k_wmi_10_4_gen_tdls_peer_update()
9004 peer_cap->peer_curr_operclass = __cpu_to_le32(cap->peer_curr_operclass); in ath10k_wmi_10_4_gen_tdls_peer_update()
9005 peer_cap->self_curr_operclass = __cpu_to_le32(cap->self_curr_operclass); in ath10k_wmi_10_4_gen_tdls_peer_update()
9006 peer_cap->peer_chan_len = __cpu_to_le32(cap->peer_chan_len); in ath10k_wmi_10_4_gen_tdls_peer_update()
9007 peer_cap->peer_operclass_len = __cpu_to_le32(cap->peer_operclass_len); in ath10k_wmi_10_4_gen_tdls_peer_update()
9010 peer_cap->peer_operclass[i] = cap->peer_operclass[i]; in ath10k_wmi_10_4_gen_tdls_peer_update()
9012 peer_cap->is_peer_responder = __cpu_to_le32(cap->is_peer_responder); in ath10k_wmi_10_4_gen_tdls_peer_update()
9013 peer_cap->pref_offchan_num = __cpu_to_le32(cap->pref_offchan_num); in ath10k_wmi_10_4_gen_tdls_peer_update()
9014 peer_cap->pref_offchan_bw = __cpu_to_le32(cap->pref_offchan_bw); in ath10k_wmi_10_4_gen_tdls_peer_update()
9016 for (i = 0; i < cap->peer_chan_len; i++) { in ath10k_wmi_10_4_gen_tdls_peer_update()
9017 chan = (struct wmi_channel *)&peer_cap->peer_chan_list[i]; in ath10k_wmi_10_4_gen_tdls_peer_update()
9023 arg->vdev_id, arg->peer_state, cap->peer_chan_len); in ath10k_wmi_10_4_gen_tdls_peer_update()
9036 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_gen_radar_found()
9038 cmd = (struct wmi_radar_found_info *)skb->data; in ath10k_wmi_10_4_gen_radar_found()
9039 cmd->pri_min = __cpu_to_le32(arg->pri_min); in ath10k_wmi_10_4_gen_radar_found()
9040 cmd->pri_max = __cpu_to_le32(arg->pri_max); in ath10k_wmi_10_4_gen_radar_found()
9041 cmd->width_min = __cpu_to_le32(arg->width_min); in ath10k_wmi_10_4_gen_radar_found()
9042 cmd->width_max = __cpu_to_le32(arg->width_max); in ath10k_wmi_10_4_gen_radar_found()
9043 cmd->sidx_min = __cpu_to_le32(arg->sidx_min); in ath10k_wmi_10_4_gen_radar_found()
9044 cmd->sidx_max = __cpu_to_le32(arg->sidx_max); in ath10k_wmi_10_4_gen_radar_found()
9048 arg->pri_min, arg->pri_max, arg->width_min, in ath10k_wmi_10_4_gen_radar_found()
9049 arg->width_max, arg->sidx_min, arg->sidx_max); in ath10k_wmi_10_4_gen_radar_found()
9062 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9064 memset(skb->data, 0, sizeof(*cmd)); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9066 cmd = (struct wmi_peer_per_tid_cfg_cmd *)skb->data; in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9067 cmd->vdev_id = cpu_to_le32(arg->vdev_id); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9068 ether_addr_copy(cmd->peer_macaddr.addr, arg->peer_macaddr.addr); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9069 cmd->tid = cpu_to_le32(arg->tid); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9070 cmd->ack_policy = cpu_to_le32(arg->ack_policy); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9071 cmd->aggr_control = cpu_to_le32(arg->aggr_control); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9072 cmd->rate_control = cpu_to_le32(arg->rate_ctrl); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9073 cmd->retry_count = cpu_to_le32(arg->retry_count); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9074 cmd->rcode_flags = cpu_to_le32(arg->rcode_flags); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9075 cmd->ext_tid_cfg_bitmap = cpu_to_le32(arg->ext_tid_cfg_bitmap); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9076 cmd->rtscts_ctrl = cpu_to_le32(arg->rtscts_ctrl); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9080 arg->tid, arg->vdev_id, arg->ack_policy, arg->aggr_control, in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9081 arg->rate_ctrl, arg->rcode_flags, arg->retry_count, in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9082 arg->rtscts_ctrl, arg->ext_tid_cfg_bitmap, arg->peer_macaddr.addr); in ath10k_wmi_10_4_gen_per_peer_per_tid_cfg()
9094 return ERR_PTR(-ENOMEM); in ath10k_wmi_op_gen_echo()
9096 cmd = (struct wmi_echo_cmd *)skb->data; in ath10k_wmi_op_gen_echo()
9097 cmd->value = cpu_to_le32(value); in ath10k_wmi_op_gen_echo()
9110 spin_lock_bh(&ar->data_lock); in ath10k_wmi_barrier()
9111 reinit_completion(&ar->wmi.barrier); in ath10k_wmi_barrier()
9112 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_barrier()
9120 time_left = wait_for_completion_timeout(&ar->wmi.barrier, in ath10k_wmi_barrier()
9123 return -ETIMEDOUT; in ath10k_wmi_barrier()
9137 return ERR_PTR(-ENOMEM); in ath10k_wmi_10_2_4_op_gen_bb_timing()
9139 cmd = (struct wmi_pdev_bb_timing_cfg_cmd *)skb->data; in ath10k_wmi_10_2_4_op_gen_bb_timing()
9140 cmd->bb_tx_timing = __cpu_to_le32(arg->bb_tx_timing); in ath10k_wmi_10_2_4_op_gen_bb_timing()
9141 cmd->bb_xpa_timing = __cpu_to_le32(arg->bb_xpa_timing); in ath10k_wmi_10_2_4_op_gen_bb_timing()
9145 arg->bb_tx_timing, arg->bb_xpa_timing); in ath10k_wmi_10_2_4_op_gen_bb_timing()
9150 .rx = ath10k_wmi_op_rx,
9222 .rx = ath10k_wmi_10_1_op_rx,
9294 .rx = ath10k_wmi_10_2_op_rx,
9364 .rx = ath10k_wmi_10_2_op_rx,
9440 .rx = ath10k_wmi_10_4_op_rx,
9520 switch (ar->running_fw->fw_file.wmi_op_version) { in ath10k_wmi_attach()
9522 ar->wmi.ops = &wmi_10_4_ops; in ath10k_wmi_attach()
9523 ar->wmi.cmd = &wmi_10_4_cmd_map; in ath10k_wmi_attach()
9524 ar->wmi.vdev_param = &wmi_10_4_vdev_param_map; in ath10k_wmi_attach()
9525 ar->wmi.pdev_param = &wmi_10_4_pdev_param_map; in ath10k_wmi_attach()
9526 ar->wmi.peer_param = &wmi_peer_param_map; in ath10k_wmi_attach()
9527 ar->wmi.peer_flags = &wmi_10_2_peer_flags_map; in ath10k_wmi_attach()
9528 ar->wmi_key_cipher = wmi_key_cipher_suites; in ath10k_wmi_attach()
9531 ar->wmi.cmd = &wmi_10_2_4_cmd_map; in ath10k_wmi_attach()
9532 ar->wmi.ops = &wmi_10_2_4_ops; in ath10k_wmi_attach()
9533 ar->wmi.vdev_param = &wmi_10_2_4_vdev_param_map; in ath10k_wmi_attach()
9534 ar->wmi.pdev_param = &wmi_10_2_4_pdev_param_map; in ath10k_wmi_attach()
9535 ar->wmi.peer_param = &wmi_peer_param_map; in ath10k_wmi_attach()
9536 ar->wmi.peer_flags = &wmi_10_2_peer_flags_map; in ath10k_wmi_attach()
9537 ar->wmi_key_cipher = wmi_key_cipher_suites; in ath10k_wmi_attach()
9540 ar->wmi.cmd = &wmi_10_2_cmd_map; in ath10k_wmi_attach()
9541 ar->wmi.ops = &wmi_10_2_ops; in ath10k_wmi_attach()
9542 ar->wmi.vdev_param = &wmi_10x_vdev_param_map; in ath10k_wmi_attach()
9543 ar->wmi.pdev_param = &wmi_10x_pdev_param_map; in ath10k_wmi_attach()
9544 ar->wmi.peer_param = &wmi_peer_param_map; in ath10k_wmi_attach()
9545 ar->wmi.peer_flags = &wmi_10_2_peer_flags_map; in ath10k_wmi_attach()
9546 ar->wmi_key_cipher = wmi_key_cipher_suites; in ath10k_wmi_attach()
9549 ar->wmi.cmd = &wmi_10x_cmd_map; in ath10k_wmi_attach()
9550 ar->wmi.ops = &wmi_10_1_ops; in ath10k_wmi_attach()
9551 ar->wmi.vdev_param = &wmi_10x_vdev_param_map; in ath10k_wmi_attach()
9552 ar->wmi.pdev_param = &wmi_10x_pdev_param_map; in ath10k_wmi_attach()
9553 ar->wmi.peer_param = &wmi_peer_param_map; in ath10k_wmi_attach()
9554 ar->wmi.peer_flags = &wmi_10x_peer_flags_map; in ath10k_wmi_attach()
9555 ar->wmi_key_cipher = wmi_key_cipher_suites; in ath10k_wmi_attach()
9558 ar->wmi.cmd = &wmi_cmd_map; in ath10k_wmi_attach()
9559 ar->wmi.ops = &wmi_ops; in ath10k_wmi_attach()
9560 ar->wmi.vdev_param = &wmi_vdev_param_map; in ath10k_wmi_attach()
9561 ar->wmi.pdev_param = &wmi_pdev_param_map; in ath10k_wmi_attach()
9562 ar->wmi.peer_param = &wmi_peer_param_map; in ath10k_wmi_attach()
9563 ar->wmi.peer_flags = &wmi_peer_flags_map; in ath10k_wmi_attach()
9564 ar->wmi_key_cipher = wmi_key_cipher_suites; in ath10k_wmi_attach()
9568 ar->wmi_key_cipher = wmi_tlv_key_cipher_suites; in ath10k_wmi_attach()
9573 ar->running_fw->fw_file.wmi_op_version); in ath10k_wmi_attach()
9574 return -EINVAL; in ath10k_wmi_attach()
9577 init_completion(&ar->wmi.service_ready); in ath10k_wmi_attach()
9578 init_completion(&ar->wmi.unified_ready); in ath10k_wmi_attach()
9579 init_completion(&ar->wmi.barrier); in ath10k_wmi_attach()
9580 init_completion(&ar->wmi.radar_confirm); in ath10k_wmi_attach()
9582 INIT_WORK(&ar->svc_rdy_work, ath10k_wmi_event_service_ready_work); in ath10k_wmi_attach()
9583 INIT_WORK(&ar->radar_confirmation_work, in ath10k_wmi_attach()
9587 ar->running_fw->fw_file.fw_features)) { in ath10k_wmi_attach()
9588 idr_init(&ar->wmi.mgmt_pending_tx); in ath10k_wmi_attach()
9599 for (i = 0; i < ar->wmi.num_mem_chunks; i++) { in ath10k_wmi_free_host_mem()
9600 dma_free_coherent(ar->dev, in ath10k_wmi_free_host_mem()
9601 ar->wmi.mem_chunks[i].len, in ath10k_wmi_free_host_mem()
9602 ar->wmi.mem_chunks[i].vaddr, in ath10k_wmi_free_host_mem()
9603 ar->wmi.mem_chunks[i].paddr); in ath10k_wmi_free_host_mem()
9606 ar->wmi.num_mem_chunks = 0; in ath10k_wmi_free_host_mem()
9619 msdu = pkt_addr->vaddr; in ath10k_wmi_mgmt_tx_clean_up_pending()
9620 dma_unmap_single(ar->dev, pkt_addr->paddr, in ath10k_wmi_mgmt_tx_clean_up_pending()
9621 msdu->len, DMA_TO_DEVICE); in ath10k_wmi_mgmt_tx_clean_up_pending()
9622 ieee80211_free_txskb(ar->hw, msdu); in ath10k_wmi_mgmt_tx_clean_up_pending()
9631 ar->running_fw->fw_file.fw_features)) { in ath10k_wmi_detach()
9632 spin_lock_bh(&ar->data_lock); in ath10k_wmi_detach()
9633 idr_for_each(&ar->wmi.mgmt_pending_tx, in ath10k_wmi_detach()
9635 idr_destroy(&ar->wmi.mgmt_pending_tx); in ath10k_wmi_detach()
9636 spin_unlock_bh(&ar->data_lock); in ath10k_wmi_detach()
9639 cancel_work_sync(&ar->svc_rdy_work); in ath10k_wmi_detach()
9640 dev_kfree_skb(ar->svc_rdy_skb); in ath10k_wmi_detach()