1d7579d12SMichal Kazior /* 2d7579d12SMichal Kazior * Copyright (c) 2005-2011 Atheros Communications Inc. 3d7579d12SMichal Kazior * Copyright (c) 2011-2014 Qualcomm Atheros, Inc. 4d7579d12SMichal Kazior * 5d7579d12SMichal Kazior * Permission to use, copy, modify, and/or distribute this software for any 6d7579d12SMichal Kazior * purpose with or without fee is hereby granted, provided that the above 7d7579d12SMichal Kazior * copyright notice and this permission notice appear in all copies. 8d7579d12SMichal Kazior * 9d7579d12SMichal Kazior * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10d7579d12SMichal Kazior * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11d7579d12SMichal Kazior * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12d7579d12SMichal Kazior * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13d7579d12SMichal Kazior * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14d7579d12SMichal Kazior * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15d7579d12SMichal Kazior * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16d7579d12SMichal Kazior */ 17d7579d12SMichal Kazior 18d7579d12SMichal Kazior #ifndef _WMI_OPS_H_ 19d7579d12SMichal Kazior #define _WMI_OPS_H_ 20d7579d12SMichal Kazior 21d7579d12SMichal Kazior struct ath10k; 22d7579d12SMichal Kazior struct sk_buff; 23d7579d12SMichal Kazior 24d7579d12SMichal Kazior struct wmi_ops { 25d7579d12SMichal Kazior void (*rx)(struct ath10k *ar, struct sk_buff *skb); 26d7579d12SMichal Kazior void (*map_svc)(const __le32 *in, unsigned long *out, size_t len); 27d7579d12SMichal Kazior 28d7579d12SMichal Kazior int (*pull_scan)(struct ath10k *ar, struct sk_buff *skb, 29d7579d12SMichal Kazior struct wmi_scan_ev_arg *arg); 30d7579d12SMichal Kazior int (*pull_mgmt_rx)(struct ath10k *ar, struct sk_buff *skb, 31d7579d12SMichal Kazior struct wmi_mgmt_rx_ev_arg *arg); 32d7579d12SMichal Kazior int (*pull_ch_info)(struct ath10k *ar, struct sk_buff *skb, 33d7579d12SMichal Kazior struct wmi_ch_info_ev_arg *arg); 34d7579d12SMichal Kazior int (*pull_vdev_start)(struct ath10k *ar, struct sk_buff *skb, 35d7579d12SMichal Kazior struct wmi_vdev_start_ev_arg *arg); 36d7579d12SMichal Kazior int (*pull_peer_kick)(struct ath10k *ar, struct sk_buff *skb, 37d7579d12SMichal Kazior struct wmi_peer_kick_ev_arg *arg); 38d7579d12SMichal Kazior int (*pull_swba)(struct ath10k *ar, struct sk_buff *skb, 39d7579d12SMichal Kazior struct wmi_swba_ev_arg *arg); 40d7579d12SMichal Kazior int (*pull_phyerr)(struct ath10k *ar, struct sk_buff *skb, 41d7579d12SMichal Kazior struct wmi_phyerr_ev_arg *arg); 42d7579d12SMichal Kazior int (*pull_svc_rdy)(struct ath10k *ar, struct sk_buff *skb, 43d7579d12SMichal Kazior struct wmi_svc_rdy_ev_arg *arg); 44d7579d12SMichal Kazior int (*pull_rdy)(struct ath10k *ar, struct sk_buff *skb, 45d7579d12SMichal Kazior struct wmi_rdy_ev_arg *arg); 46d7579d12SMichal Kazior int (*pull_fw_stats)(struct ath10k *ar, struct sk_buff *skb, 47d7579d12SMichal Kazior struct ath10k_fw_stats *stats); 48c1a4654aSMichal Kazior int (*pull_roam_ev)(struct ath10k *ar, struct sk_buff *skb, 49c1a4654aSMichal Kazior struct wmi_roam_ev_arg *arg); 50d7579d12SMichal Kazior 51d7579d12SMichal Kazior struct sk_buff *(*gen_pdev_suspend)(struct ath10k *ar, u32 suspend_opt); 52d7579d12SMichal Kazior struct sk_buff *(*gen_pdev_resume)(struct ath10k *ar); 53d7579d12SMichal Kazior struct sk_buff *(*gen_pdev_set_rd)(struct ath10k *ar, u16 rd, u16 rd2g, 54d7579d12SMichal Kazior u16 rd5g, u16 ctl2g, u16 ctl5g, 55d7579d12SMichal Kazior enum wmi_dfs_region dfs_reg); 56d7579d12SMichal Kazior struct sk_buff *(*gen_pdev_set_param)(struct ath10k *ar, u32 id, 57d7579d12SMichal Kazior u32 value); 58d7579d12SMichal Kazior struct sk_buff *(*gen_init)(struct ath10k *ar); 59d7579d12SMichal Kazior struct sk_buff *(*gen_start_scan)(struct ath10k *ar, 60d7579d12SMichal Kazior const struct wmi_start_scan_arg *arg); 61d7579d12SMichal Kazior struct sk_buff *(*gen_stop_scan)(struct ath10k *ar, 62d7579d12SMichal Kazior const struct wmi_stop_scan_arg *arg); 63d7579d12SMichal Kazior struct sk_buff *(*gen_vdev_create)(struct ath10k *ar, u32 vdev_id, 64d7579d12SMichal Kazior enum wmi_vdev_type type, 65d7579d12SMichal Kazior enum wmi_vdev_subtype subtype, 66d7579d12SMichal Kazior const u8 macaddr[ETH_ALEN]); 67d7579d12SMichal Kazior struct sk_buff *(*gen_vdev_delete)(struct ath10k *ar, u32 vdev_id); 68d7579d12SMichal Kazior struct sk_buff *(*gen_vdev_start)(struct ath10k *ar, 69d7579d12SMichal Kazior const struct wmi_vdev_start_request_arg *arg, 70d7579d12SMichal Kazior bool restart); 71d7579d12SMichal Kazior struct sk_buff *(*gen_vdev_stop)(struct ath10k *ar, u32 vdev_id); 72d7579d12SMichal Kazior struct sk_buff *(*gen_vdev_up)(struct ath10k *ar, u32 vdev_id, u32 aid, 73d7579d12SMichal Kazior const u8 *bssid); 74d7579d12SMichal Kazior struct sk_buff *(*gen_vdev_down)(struct ath10k *ar, u32 vdev_id); 75d7579d12SMichal Kazior struct sk_buff *(*gen_vdev_set_param)(struct ath10k *ar, u32 vdev_id, 76d7579d12SMichal Kazior u32 param_id, u32 param_value); 77d7579d12SMichal Kazior struct sk_buff *(*gen_vdev_install_key)(struct ath10k *ar, 78d7579d12SMichal Kazior const struct wmi_vdev_install_key_arg *arg); 79d7579d12SMichal Kazior struct sk_buff *(*gen_vdev_spectral_conf)(struct ath10k *ar, 80d7579d12SMichal Kazior const struct wmi_vdev_spectral_conf_arg *arg); 81d7579d12SMichal Kazior struct sk_buff *(*gen_vdev_spectral_enable)(struct ath10k *ar, u32 vdev_id, 82d7579d12SMichal Kazior u32 trigger, u32 enable); 836d492fe2SMichal Kazior struct sk_buff *(*gen_vdev_wmm_conf)(struct ath10k *ar, u32 vdev_id, 846d492fe2SMichal Kazior const struct wmi_wmm_params_all_arg *arg); 85d7579d12SMichal Kazior struct sk_buff *(*gen_peer_create)(struct ath10k *ar, u32 vdev_id, 86d7579d12SMichal Kazior const u8 peer_addr[ETH_ALEN]); 87d7579d12SMichal Kazior struct sk_buff *(*gen_peer_delete)(struct ath10k *ar, u32 vdev_id, 88d7579d12SMichal Kazior const u8 peer_addr[ETH_ALEN]); 89d7579d12SMichal Kazior struct sk_buff *(*gen_peer_flush)(struct ath10k *ar, u32 vdev_id, 90d7579d12SMichal Kazior const u8 peer_addr[ETH_ALEN], 91d7579d12SMichal Kazior u32 tid_bitmap); 92d7579d12SMichal Kazior struct sk_buff *(*gen_peer_set_param)(struct ath10k *ar, u32 vdev_id, 93d7579d12SMichal Kazior const u8 *peer_addr, 94d7579d12SMichal Kazior enum wmi_peer_param param_id, 95d7579d12SMichal Kazior u32 param_value); 96d7579d12SMichal Kazior struct sk_buff *(*gen_peer_assoc)(struct ath10k *ar, 97d7579d12SMichal Kazior const struct wmi_peer_assoc_complete_arg *arg); 98d7579d12SMichal Kazior struct sk_buff *(*gen_set_psmode)(struct ath10k *ar, u32 vdev_id, 99d7579d12SMichal Kazior enum wmi_sta_ps_mode psmode); 100d7579d12SMichal Kazior struct sk_buff *(*gen_set_sta_ps)(struct ath10k *ar, u32 vdev_id, 101d7579d12SMichal Kazior enum wmi_sta_powersave_param param_id, 102d7579d12SMichal Kazior u32 value); 103d7579d12SMichal Kazior struct sk_buff *(*gen_set_ap_ps)(struct ath10k *ar, u32 vdev_id, 104d7579d12SMichal Kazior const u8 *mac, 105d7579d12SMichal Kazior enum wmi_ap_ps_peer_param param_id, 106d7579d12SMichal Kazior u32 value); 107d7579d12SMichal Kazior struct sk_buff *(*gen_scan_chan_list)(struct ath10k *ar, 108d7579d12SMichal Kazior const struct wmi_scan_chan_list_arg *arg); 1099ad50182SMichal Kazior struct sk_buff *(*gen_beacon_dma)(struct ath10k *ar, u32 vdev_id, 1109ad50182SMichal Kazior const void *bcn, size_t bcn_len, 1119ad50182SMichal Kazior u32 bcn_paddr, bool dtim_zero, 1129ad50182SMichal Kazior bool deliver_cab); 113d7579d12SMichal Kazior struct sk_buff *(*gen_pdev_set_wmm)(struct ath10k *ar, 1145e752e42SMichal Kazior const struct wmi_wmm_params_all_arg *arg); 115de23d3efSMichal Kazior struct sk_buff *(*gen_request_stats)(struct ath10k *ar, u32 stats_mask); 116d7579d12SMichal Kazior struct sk_buff *(*gen_force_fw_hang)(struct ath10k *ar, 117d7579d12SMichal Kazior enum wmi_force_fw_hang_type type, 118d7579d12SMichal Kazior u32 delay_ms); 119d7579d12SMichal Kazior struct sk_buff *(*gen_mgmt_tx)(struct ath10k *ar, struct sk_buff *skb); 120467210a6SSenthilKumar Jegadeesan struct sk_buff *(*gen_dbglog_cfg)(struct ath10k *ar, u32 module_enable, 121467210a6SSenthilKumar Jegadeesan u32 log_level); 122d7579d12SMichal Kazior struct sk_buff *(*gen_pktlog_enable)(struct ath10k *ar, u32 filter); 123d7579d12SMichal Kazior struct sk_buff *(*gen_pktlog_disable)(struct ath10k *ar); 124ffdd738dSRajkumar Manoharan struct sk_buff *(*gen_pdev_set_quiet_mode)(struct ath10k *ar, 125ffdd738dSRajkumar Manoharan u32 period, u32 duration, 126ffdd738dSRajkumar Manoharan u32 next_offset, 127ffdd738dSRajkumar Manoharan u32 enabled); 128a57a6a27SRajkumar Manoharan struct sk_buff *(*gen_pdev_get_temperature)(struct ath10k *ar); 129dc8ab278SRajkumar Manoharan struct sk_buff *(*gen_addba_clear_resp)(struct ath10k *ar, u32 vdev_id, 130dc8ab278SRajkumar Manoharan const u8 *mac); 13165c0893dSRajkumar Manoharan struct sk_buff *(*gen_addba_send)(struct ath10k *ar, u32 vdev_id, 13265c0893dSRajkumar Manoharan const u8 *mac, u32 tid, u32 buf_size); 13311597413SRajkumar Manoharan struct sk_buff *(*gen_addba_set_resp)(struct ath10k *ar, u32 vdev_id, 13411597413SRajkumar Manoharan const u8 *mac, u32 tid, 13511597413SRajkumar Manoharan u32 status); 13650abef85SRajkumar Manoharan struct sk_buff *(*gen_delba_send)(struct ath10k *ar, u32 vdev_id, 13750abef85SRajkumar Manoharan const u8 *mac, u32 tid, u32 initiator, 13850abef85SRajkumar Manoharan u32 reason); 139be9ce9d8SMichal Kazior struct sk_buff *(*gen_bcn_tmpl)(struct ath10k *ar, u32 vdev_id, 140be9ce9d8SMichal Kazior u32 tim_ie_offset, struct sk_buff *bcn, 141be9ce9d8SMichal Kazior u32 prb_caps, u32 prb_erp, 142be9ce9d8SMichal Kazior void *prb_ies, size_t prb_ies_len); 1434c4955feSMichal Kazior struct sk_buff *(*gen_prb_tmpl)(struct ath10k *ar, u32 vdev_id, 1444c4955feSMichal Kazior struct sk_buff *bcn); 145369242b4SMichal Kazior struct sk_buff *(*gen_p2p_go_bcn_ie)(struct ath10k *ar, u32 vdev_id, 146369242b4SMichal Kazior const u8 *p2p_ie); 1470c7e477cSJanusz Dziedzic struct sk_buff *(*gen_vdev_sta_uapsd)(struct ath10k *ar, u32 vdev_id, 1480c7e477cSJanusz Dziedzic const u8 peer_addr[ETH_ALEN], 1490c7e477cSJanusz Dziedzic const struct wmi_sta_uapsd_auto_trig_arg *args, 1500c7e477cSJanusz Dziedzic u32 num_ac); 1516e8b188bSJanusz Dziedzic struct sk_buff *(*gen_sta_keepalive)(struct ath10k *ar, 1526e8b188bSJanusz Dziedzic const struct wmi_sta_keepalive_arg *arg); 153d7579d12SMichal Kazior }; 154d7579d12SMichal Kazior 155d7579d12SMichal Kazior int ath10k_wmi_cmd_send(struct ath10k *ar, struct sk_buff *skb, u32 cmd_id); 156d7579d12SMichal Kazior 157d7579d12SMichal Kazior static inline int 158d7579d12SMichal Kazior ath10k_wmi_rx(struct ath10k *ar, struct sk_buff *skb) 159d7579d12SMichal Kazior { 160d7579d12SMichal Kazior if (WARN_ON_ONCE(!ar->wmi.ops->rx)) 161d7579d12SMichal Kazior return -EOPNOTSUPP; 162d7579d12SMichal Kazior 163d7579d12SMichal Kazior ar->wmi.ops->rx(ar, skb); 164d7579d12SMichal Kazior return 0; 165d7579d12SMichal Kazior } 166d7579d12SMichal Kazior 167d7579d12SMichal Kazior static inline int 168d7579d12SMichal Kazior ath10k_wmi_map_svc(struct ath10k *ar, const __le32 *in, unsigned long *out, 169d7579d12SMichal Kazior size_t len) 170d7579d12SMichal Kazior { 171d7579d12SMichal Kazior if (!ar->wmi.ops->map_svc) 172d7579d12SMichal Kazior return -EOPNOTSUPP; 173d7579d12SMichal Kazior 174d7579d12SMichal Kazior ar->wmi.ops->map_svc(in, out, len); 175d7579d12SMichal Kazior return 0; 176d7579d12SMichal Kazior } 177d7579d12SMichal Kazior 178d7579d12SMichal Kazior static inline int 179d7579d12SMichal Kazior ath10k_wmi_pull_scan(struct ath10k *ar, struct sk_buff *skb, 180d7579d12SMichal Kazior struct wmi_scan_ev_arg *arg) 181d7579d12SMichal Kazior { 182d7579d12SMichal Kazior if (!ar->wmi.ops->pull_scan) 183d7579d12SMichal Kazior return -EOPNOTSUPP; 184d7579d12SMichal Kazior 185d7579d12SMichal Kazior return ar->wmi.ops->pull_scan(ar, skb, arg); 186d7579d12SMichal Kazior } 187d7579d12SMichal Kazior 188d7579d12SMichal Kazior static inline int 189d7579d12SMichal Kazior ath10k_wmi_pull_mgmt_rx(struct ath10k *ar, struct sk_buff *skb, 190d7579d12SMichal Kazior struct wmi_mgmt_rx_ev_arg *arg) 191d7579d12SMichal Kazior { 192d7579d12SMichal Kazior if (!ar->wmi.ops->pull_mgmt_rx) 193d7579d12SMichal Kazior return -EOPNOTSUPP; 194d7579d12SMichal Kazior 195d7579d12SMichal Kazior return ar->wmi.ops->pull_mgmt_rx(ar, skb, arg); 196d7579d12SMichal Kazior } 197d7579d12SMichal Kazior 198d7579d12SMichal Kazior static inline int 199d7579d12SMichal Kazior ath10k_wmi_pull_ch_info(struct ath10k *ar, struct sk_buff *skb, 200d7579d12SMichal Kazior struct wmi_ch_info_ev_arg *arg) 201d7579d12SMichal Kazior { 202d7579d12SMichal Kazior if (!ar->wmi.ops->pull_ch_info) 203d7579d12SMichal Kazior return -EOPNOTSUPP; 204d7579d12SMichal Kazior 205d7579d12SMichal Kazior return ar->wmi.ops->pull_ch_info(ar, skb, arg); 206d7579d12SMichal Kazior } 207d7579d12SMichal Kazior 208d7579d12SMichal Kazior static inline int 209d7579d12SMichal Kazior ath10k_wmi_pull_vdev_start(struct ath10k *ar, struct sk_buff *skb, 210d7579d12SMichal Kazior struct wmi_vdev_start_ev_arg *arg) 211d7579d12SMichal Kazior { 212d7579d12SMichal Kazior if (!ar->wmi.ops->pull_vdev_start) 213d7579d12SMichal Kazior return -EOPNOTSUPP; 214d7579d12SMichal Kazior 215d7579d12SMichal Kazior return ar->wmi.ops->pull_vdev_start(ar, skb, arg); 216d7579d12SMichal Kazior } 217d7579d12SMichal Kazior 218d7579d12SMichal Kazior static inline int 219d7579d12SMichal Kazior ath10k_wmi_pull_peer_kick(struct ath10k *ar, struct sk_buff *skb, 220d7579d12SMichal Kazior struct wmi_peer_kick_ev_arg *arg) 221d7579d12SMichal Kazior { 222d7579d12SMichal Kazior if (!ar->wmi.ops->pull_peer_kick) 223d7579d12SMichal Kazior return -EOPNOTSUPP; 224d7579d12SMichal Kazior 225d7579d12SMichal Kazior return ar->wmi.ops->pull_peer_kick(ar, skb, arg); 226d7579d12SMichal Kazior } 227d7579d12SMichal Kazior 228d7579d12SMichal Kazior static inline int 229d7579d12SMichal Kazior ath10k_wmi_pull_swba(struct ath10k *ar, struct sk_buff *skb, 230d7579d12SMichal Kazior struct wmi_swba_ev_arg *arg) 231d7579d12SMichal Kazior { 232d7579d12SMichal Kazior if (!ar->wmi.ops->pull_swba) 233d7579d12SMichal Kazior return -EOPNOTSUPP; 234d7579d12SMichal Kazior 235d7579d12SMichal Kazior return ar->wmi.ops->pull_swba(ar, skb, arg); 236d7579d12SMichal Kazior } 237d7579d12SMichal Kazior 238d7579d12SMichal Kazior static inline int 239d7579d12SMichal Kazior ath10k_wmi_pull_phyerr(struct ath10k *ar, struct sk_buff *skb, 240d7579d12SMichal Kazior struct wmi_phyerr_ev_arg *arg) 241d7579d12SMichal Kazior { 242d7579d12SMichal Kazior if (!ar->wmi.ops->pull_phyerr) 243d7579d12SMichal Kazior return -EOPNOTSUPP; 244d7579d12SMichal Kazior 245d7579d12SMichal Kazior return ar->wmi.ops->pull_phyerr(ar, skb, arg); 246d7579d12SMichal Kazior } 247d7579d12SMichal Kazior 248d7579d12SMichal Kazior static inline int 249d7579d12SMichal Kazior ath10k_wmi_pull_svc_rdy(struct ath10k *ar, struct sk_buff *skb, 250d7579d12SMichal Kazior struct wmi_svc_rdy_ev_arg *arg) 251d7579d12SMichal Kazior { 252d7579d12SMichal Kazior if (!ar->wmi.ops->pull_svc_rdy) 253d7579d12SMichal Kazior return -EOPNOTSUPP; 254d7579d12SMichal Kazior 255d7579d12SMichal Kazior return ar->wmi.ops->pull_svc_rdy(ar, skb, arg); 256d7579d12SMichal Kazior } 257d7579d12SMichal Kazior 258d7579d12SMichal Kazior static inline int 259d7579d12SMichal Kazior ath10k_wmi_pull_rdy(struct ath10k *ar, struct sk_buff *skb, 260d7579d12SMichal Kazior struct wmi_rdy_ev_arg *arg) 261d7579d12SMichal Kazior { 262d7579d12SMichal Kazior if (!ar->wmi.ops->pull_rdy) 263d7579d12SMichal Kazior return -EOPNOTSUPP; 264d7579d12SMichal Kazior 265d7579d12SMichal Kazior return ar->wmi.ops->pull_rdy(ar, skb, arg); 266d7579d12SMichal Kazior } 267d7579d12SMichal Kazior 268d7579d12SMichal Kazior static inline int 269d7579d12SMichal Kazior ath10k_wmi_pull_fw_stats(struct ath10k *ar, struct sk_buff *skb, 270d7579d12SMichal Kazior struct ath10k_fw_stats *stats) 271d7579d12SMichal Kazior { 272d7579d12SMichal Kazior if (!ar->wmi.ops->pull_fw_stats) 273d7579d12SMichal Kazior return -EOPNOTSUPP; 274d7579d12SMichal Kazior 275d7579d12SMichal Kazior return ar->wmi.ops->pull_fw_stats(ar, skb, stats); 276d7579d12SMichal Kazior } 277d7579d12SMichal Kazior 278d7579d12SMichal Kazior static inline int 279c1a4654aSMichal Kazior ath10k_wmi_pull_roam_ev(struct ath10k *ar, struct sk_buff *skb, 280c1a4654aSMichal Kazior struct wmi_roam_ev_arg *arg) 281c1a4654aSMichal Kazior { 282c1a4654aSMichal Kazior if (!ar->wmi.ops->pull_roam_ev) 283c1a4654aSMichal Kazior return -EOPNOTSUPP; 284c1a4654aSMichal Kazior 285c1a4654aSMichal Kazior return ar->wmi.ops->pull_roam_ev(ar, skb, arg); 286c1a4654aSMichal Kazior } 287c1a4654aSMichal Kazior 288c1a4654aSMichal Kazior static inline int 289d7579d12SMichal Kazior ath10k_wmi_mgmt_tx(struct ath10k *ar, struct sk_buff *msdu) 290d7579d12SMichal Kazior { 291d7579d12SMichal Kazior struct ieee80211_tx_info *info = IEEE80211_SKB_CB(msdu); 292d7579d12SMichal Kazior struct sk_buff *skb; 293d7579d12SMichal Kazior int ret; 294d7579d12SMichal Kazior 295d7579d12SMichal Kazior if (!ar->wmi.ops->gen_mgmt_tx) 296d7579d12SMichal Kazior return -EOPNOTSUPP; 297d7579d12SMichal Kazior 298d7579d12SMichal Kazior skb = ar->wmi.ops->gen_mgmt_tx(ar, msdu); 299d7579d12SMichal Kazior if (IS_ERR(skb)) 300d7579d12SMichal Kazior return PTR_ERR(skb); 301d7579d12SMichal Kazior 302d7579d12SMichal Kazior ret = ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->mgmt_tx_cmdid); 303d7579d12SMichal Kazior if (ret) 304d7579d12SMichal Kazior return ret; 305d7579d12SMichal Kazior 306d7579d12SMichal Kazior /* FIXME There's no ACK event for Management Tx. This probably 307d7579d12SMichal Kazior * shouldn't be called here either. */ 308d7579d12SMichal Kazior info->flags |= IEEE80211_TX_STAT_ACK; 309d7579d12SMichal Kazior ieee80211_tx_status_irqsafe(ar->hw, msdu); 310d7579d12SMichal Kazior 311d7579d12SMichal Kazior return 0; 312d7579d12SMichal Kazior } 313d7579d12SMichal Kazior 314d7579d12SMichal Kazior static inline int 315d7579d12SMichal Kazior ath10k_wmi_pdev_set_regdomain(struct ath10k *ar, u16 rd, u16 rd2g, u16 rd5g, 316d7579d12SMichal Kazior u16 ctl2g, u16 ctl5g, 317d7579d12SMichal Kazior enum wmi_dfs_region dfs_reg) 318d7579d12SMichal Kazior { 319d7579d12SMichal Kazior struct sk_buff *skb; 320d7579d12SMichal Kazior 321d7579d12SMichal Kazior if (!ar->wmi.ops->gen_pdev_set_rd) 322d7579d12SMichal Kazior return -EOPNOTSUPP; 323d7579d12SMichal Kazior 324d7579d12SMichal Kazior skb = ar->wmi.ops->gen_pdev_set_rd(ar, rd, rd2g, rd5g, ctl2g, ctl5g, 325d7579d12SMichal Kazior dfs_reg); 326d7579d12SMichal Kazior if (IS_ERR(skb)) 327d7579d12SMichal Kazior return PTR_ERR(skb); 328d7579d12SMichal Kazior 329d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, 330d7579d12SMichal Kazior ar->wmi.cmd->pdev_set_regdomain_cmdid); 331d7579d12SMichal Kazior } 332d7579d12SMichal Kazior 333d7579d12SMichal Kazior static inline int 334d7579d12SMichal Kazior ath10k_wmi_pdev_suspend_target(struct ath10k *ar, u32 suspend_opt) 335d7579d12SMichal Kazior { 336d7579d12SMichal Kazior struct sk_buff *skb; 337d7579d12SMichal Kazior 338d7579d12SMichal Kazior if (!ar->wmi.ops->gen_pdev_suspend) 339d7579d12SMichal Kazior return -EOPNOTSUPP; 340d7579d12SMichal Kazior 341d7579d12SMichal Kazior skb = ar->wmi.ops->gen_pdev_suspend(ar, suspend_opt); 342d7579d12SMichal Kazior if (IS_ERR(skb)) 343d7579d12SMichal Kazior return PTR_ERR(skb); 344d7579d12SMichal Kazior 345d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->pdev_suspend_cmdid); 346d7579d12SMichal Kazior } 347d7579d12SMichal Kazior 348d7579d12SMichal Kazior static inline int 349d7579d12SMichal Kazior ath10k_wmi_pdev_resume_target(struct ath10k *ar) 350d7579d12SMichal Kazior { 351d7579d12SMichal Kazior struct sk_buff *skb; 352d7579d12SMichal Kazior 353d7579d12SMichal Kazior if (!ar->wmi.ops->gen_pdev_resume) 354d7579d12SMichal Kazior return -EOPNOTSUPP; 355d7579d12SMichal Kazior 356d7579d12SMichal Kazior skb = ar->wmi.ops->gen_pdev_resume(ar); 357d7579d12SMichal Kazior if (IS_ERR(skb)) 358d7579d12SMichal Kazior return PTR_ERR(skb); 359d7579d12SMichal Kazior 360d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->pdev_resume_cmdid); 361d7579d12SMichal Kazior } 362d7579d12SMichal Kazior 363d7579d12SMichal Kazior static inline int 364d7579d12SMichal Kazior ath10k_wmi_pdev_set_param(struct ath10k *ar, u32 id, u32 value) 365d7579d12SMichal Kazior { 366d7579d12SMichal Kazior struct sk_buff *skb; 367d7579d12SMichal Kazior 368d7579d12SMichal Kazior if (!ar->wmi.ops->gen_pdev_set_param) 369d7579d12SMichal Kazior return -EOPNOTSUPP; 370d7579d12SMichal Kazior 371d7579d12SMichal Kazior skb = ar->wmi.ops->gen_pdev_set_param(ar, id, value); 372d7579d12SMichal Kazior if (IS_ERR(skb)) 373d7579d12SMichal Kazior return PTR_ERR(skb); 374d7579d12SMichal Kazior 375d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->pdev_set_param_cmdid); 376d7579d12SMichal Kazior } 377d7579d12SMichal Kazior 378d7579d12SMichal Kazior static inline int 379d7579d12SMichal Kazior ath10k_wmi_cmd_init(struct ath10k *ar) 380d7579d12SMichal Kazior { 381d7579d12SMichal Kazior struct sk_buff *skb; 382d7579d12SMichal Kazior 383d7579d12SMichal Kazior if (!ar->wmi.ops->gen_init) 384d7579d12SMichal Kazior return -EOPNOTSUPP; 385d7579d12SMichal Kazior 386d7579d12SMichal Kazior skb = ar->wmi.ops->gen_init(ar); 387d7579d12SMichal Kazior if (IS_ERR(skb)) 388d7579d12SMichal Kazior return PTR_ERR(skb); 389d7579d12SMichal Kazior 390d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->init_cmdid); 391d7579d12SMichal Kazior } 392d7579d12SMichal Kazior 393d7579d12SMichal Kazior static inline int 394d7579d12SMichal Kazior ath10k_wmi_start_scan(struct ath10k *ar, 395d7579d12SMichal Kazior const struct wmi_start_scan_arg *arg) 396d7579d12SMichal Kazior { 397d7579d12SMichal Kazior struct sk_buff *skb; 398d7579d12SMichal Kazior 399d7579d12SMichal Kazior if (!ar->wmi.ops->gen_start_scan) 400d7579d12SMichal Kazior return -EOPNOTSUPP; 401d7579d12SMichal Kazior 402d7579d12SMichal Kazior skb = ar->wmi.ops->gen_start_scan(ar, arg); 403d7579d12SMichal Kazior if (IS_ERR(skb)) 404d7579d12SMichal Kazior return PTR_ERR(skb); 405d7579d12SMichal Kazior 406d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->start_scan_cmdid); 407d7579d12SMichal Kazior } 408d7579d12SMichal Kazior 409d7579d12SMichal Kazior static inline int 410d7579d12SMichal Kazior ath10k_wmi_stop_scan(struct ath10k *ar, const struct wmi_stop_scan_arg *arg) 411d7579d12SMichal Kazior { 412d7579d12SMichal Kazior struct sk_buff *skb; 413d7579d12SMichal Kazior 414d7579d12SMichal Kazior if (!ar->wmi.ops->gen_stop_scan) 415d7579d12SMichal Kazior return -EOPNOTSUPP; 416d7579d12SMichal Kazior 417d7579d12SMichal Kazior skb = ar->wmi.ops->gen_stop_scan(ar, arg); 418d7579d12SMichal Kazior if (IS_ERR(skb)) 419d7579d12SMichal Kazior return PTR_ERR(skb); 420d7579d12SMichal Kazior 421d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->stop_scan_cmdid); 422d7579d12SMichal Kazior } 423d7579d12SMichal Kazior 424d7579d12SMichal Kazior static inline int 425d7579d12SMichal Kazior ath10k_wmi_vdev_create(struct ath10k *ar, u32 vdev_id, 426d7579d12SMichal Kazior enum wmi_vdev_type type, 427d7579d12SMichal Kazior enum wmi_vdev_subtype subtype, 428d7579d12SMichal Kazior const u8 macaddr[ETH_ALEN]) 429d7579d12SMichal Kazior { 430d7579d12SMichal Kazior struct sk_buff *skb; 431d7579d12SMichal Kazior 432d7579d12SMichal Kazior if (!ar->wmi.ops->gen_vdev_create) 433d7579d12SMichal Kazior return -EOPNOTSUPP; 434d7579d12SMichal Kazior 435d7579d12SMichal Kazior skb = ar->wmi.ops->gen_vdev_create(ar, vdev_id, type, subtype, macaddr); 436d7579d12SMichal Kazior if (IS_ERR(skb)) 437d7579d12SMichal Kazior return PTR_ERR(skb); 438d7579d12SMichal Kazior 439d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_create_cmdid); 440d7579d12SMichal Kazior } 441d7579d12SMichal Kazior 442d7579d12SMichal Kazior static inline int 443d7579d12SMichal Kazior ath10k_wmi_vdev_delete(struct ath10k *ar, u32 vdev_id) 444d7579d12SMichal Kazior { 445d7579d12SMichal Kazior struct sk_buff *skb; 446d7579d12SMichal Kazior 447d7579d12SMichal Kazior if (!ar->wmi.ops->gen_vdev_delete) 448d7579d12SMichal Kazior return -EOPNOTSUPP; 449d7579d12SMichal Kazior 450d7579d12SMichal Kazior skb = ar->wmi.ops->gen_vdev_delete(ar, vdev_id); 451d7579d12SMichal Kazior if (IS_ERR(skb)) 452d7579d12SMichal Kazior return PTR_ERR(skb); 453d7579d12SMichal Kazior 454d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_delete_cmdid); 455d7579d12SMichal Kazior } 456d7579d12SMichal Kazior 457d7579d12SMichal Kazior static inline int 458d7579d12SMichal Kazior ath10k_wmi_vdev_start(struct ath10k *ar, 459d7579d12SMichal Kazior const struct wmi_vdev_start_request_arg *arg) 460d7579d12SMichal Kazior { 461d7579d12SMichal Kazior struct sk_buff *skb; 462d7579d12SMichal Kazior 463d7579d12SMichal Kazior if (!ar->wmi.ops->gen_vdev_start) 464d7579d12SMichal Kazior return -EOPNOTSUPP; 465d7579d12SMichal Kazior 466d7579d12SMichal Kazior skb = ar->wmi.ops->gen_vdev_start(ar, arg, false); 467d7579d12SMichal Kazior if (IS_ERR(skb)) 468d7579d12SMichal Kazior return PTR_ERR(skb); 469d7579d12SMichal Kazior 470d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, 471d7579d12SMichal Kazior ar->wmi.cmd->vdev_start_request_cmdid); 472d7579d12SMichal Kazior } 473d7579d12SMichal Kazior 474d7579d12SMichal Kazior static inline int 475d7579d12SMichal Kazior ath10k_wmi_vdev_restart(struct ath10k *ar, 476d7579d12SMichal Kazior const struct wmi_vdev_start_request_arg *arg) 477d7579d12SMichal Kazior { 478d7579d12SMichal Kazior struct sk_buff *skb; 479d7579d12SMichal Kazior 480d7579d12SMichal Kazior if (!ar->wmi.ops->gen_vdev_start) 481d7579d12SMichal Kazior return -EOPNOTSUPP; 482d7579d12SMichal Kazior 483d7579d12SMichal Kazior skb = ar->wmi.ops->gen_vdev_start(ar, arg, true); 484d7579d12SMichal Kazior if (IS_ERR(skb)) 485d7579d12SMichal Kazior return PTR_ERR(skb); 486d7579d12SMichal Kazior 487d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, 488d7579d12SMichal Kazior ar->wmi.cmd->vdev_restart_request_cmdid); 489d7579d12SMichal Kazior } 490d7579d12SMichal Kazior 491d7579d12SMichal Kazior static inline int 492d7579d12SMichal Kazior ath10k_wmi_vdev_stop(struct ath10k *ar, u32 vdev_id) 493d7579d12SMichal Kazior { 494d7579d12SMichal Kazior struct sk_buff *skb; 495d7579d12SMichal Kazior 496d7579d12SMichal Kazior if (!ar->wmi.ops->gen_vdev_stop) 497d7579d12SMichal Kazior return -EOPNOTSUPP; 498d7579d12SMichal Kazior 499d7579d12SMichal Kazior skb = ar->wmi.ops->gen_vdev_stop(ar, vdev_id); 500d7579d12SMichal Kazior if (IS_ERR(skb)) 501d7579d12SMichal Kazior return PTR_ERR(skb); 502d7579d12SMichal Kazior 503d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_stop_cmdid); 504d7579d12SMichal Kazior } 505d7579d12SMichal Kazior 506d7579d12SMichal Kazior static inline int 507d7579d12SMichal Kazior ath10k_wmi_vdev_up(struct ath10k *ar, u32 vdev_id, u32 aid, const u8 *bssid) 508d7579d12SMichal Kazior { 509d7579d12SMichal Kazior struct sk_buff *skb; 510d7579d12SMichal Kazior 511d7579d12SMichal Kazior if (!ar->wmi.ops->gen_vdev_up) 512d7579d12SMichal Kazior return -EOPNOTSUPP; 513d7579d12SMichal Kazior 514d7579d12SMichal Kazior skb = ar->wmi.ops->gen_vdev_up(ar, vdev_id, aid, bssid); 515d7579d12SMichal Kazior if (IS_ERR(skb)) 516d7579d12SMichal Kazior return PTR_ERR(skb); 517d7579d12SMichal Kazior 518d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_up_cmdid); 519d7579d12SMichal Kazior } 520d7579d12SMichal Kazior 521d7579d12SMichal Kazior static inline int 522d7579d12SMichal Kazior ath10k_wmi_vdev_down(struct ath10k *ar, u32 vdev_id) 523d7579d12SMichal Kazior { 524d7579d12SMichal Kazior struct sk_buff *skb; 525d7579d12SMichal Kazior 526d7579d12SMichal Kazior if (!ar->wmi.ops->gen_vdev_down) 527d7579d12SMichal Kazior return -EOPNOTSUPP; 528d7579d12SMichal Kazior 529d7579d12SMichal Kazior skb = ar->wmi.ops->gen_vdev_down(ar, vdev_id); 530d7579d12SMichal Kazior if (IS_ERR(skb)) 531d7579d12SMichal Kazior return PTR_ERR(skb); 532d7579d12SMichal Kazior 533d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_down_cmdid); 534d7579d12SMichal Kazior } 535d7579d12SMichal Kazior 536d7579d12SMichal Kazior static inline int 537d7579d12SMichal Kazior ath10k_wmi_vdev_set_param(struct ath10k *ar, u32 vdev_id, u32 param_id, 538d7579d12SMichal Kazior u32 param_value) 539d7579d12SMichal Kazior { 540d7579d12SMichal Kazior struct sk_buff *skb; 541d7579d12SMichal Kazior 542d7579d12SMichal Kazior if (!ar->wmi.ops->gen_vdev_set_param) 543d7579d12SMichal Kazior return -EOPNOTSUPP; 544d7579d12SMichal Kazior 545d7579d12SMichal Kazior skb = ar->wmi.ops->gen_vdev_set_param(ar, vdev_id, param_id, 546d7579d12SMichal Kazior param_value); 547d7579d12SMichal Kazior if (IS_ERR(skb)) 548d7579d12SMichal Kazior return PTR_ERR(skb); 549d7579d12SMichal Kazior 550d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_set_param_cmdid); 551d7579d12SMichal Kazior } 552d7579d12SMichal Kazior 553d7579d12SMichal Kazior static inline int 554d7579d12SMichal Kazior ath10k_wmi_vdev_install_key(struct ath10k *ar, 555d7579d12SMichal Kazior const struct wmi_vdev_install_key_arg *arg) 556d7579d12SMichal Kazior { 557d7579d12SMichal Kazior struct sk_buff *skb; 558d7579d12SMichal Kazior 559d7579d12SMichal Kazior if (!ar->wmi.ops->gen_vdev_install_key) 560d7579d12SMichal Kazior return -EOPNOTSUPP; 561d7579d12SMichal Kazior 562d7579d12SMichal Kazior skb = ar->wmi.ops->gen_vdev_install_key(ar, arg); 563d7579d12SMichal Kazior if (IS_ERR(skb)) 564d7579d12SMichal Kazior return PTR_ERR(skb); 565d7579d12SMichal Kazior 566d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, 567d7579d12SMichal Kazior ar->wmi.cmd->vdev_install_key_cmdid); 568d7579d12SMichal Kazior } 569d7579d12SMichal Kazior 570d7579d12SMichal Kazior static inline int 571d7579d12SMichal Kazior ath10k_wmi_vdev_spectral_conf(struct ath10k *ar, 572d7579d12SMichal Kazior const struct wmi_vdev_spectral_conf_arg *arg) 573d7579d12SMichal Kazior { 574d7579d12SMichal Kazior struct sk_buff *skb; 575d7579d12SMichal Kazior u32 cmd_id; 576d7579d12SMichal Kazior 577d7579d12SMichal Kazior skb = ar->wmi.ops->gen_vdev_spectral_conf(ar, arg); 578d7579d12SMichal Kazior if (IS_ERR(skb)) 579d7579d12SMichal Kazior return PTR_ERR(skb); 580d7579d12SMichal Kazior 581d7579d12SMichal Kazior cmd_id = ar->wmi.cmd->vdev_spectral_scan_configure_cmdid; 582d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, cmd_id); 583d7579d12SMichal Kazior } 584d7579d12SMichal Kazior 585d7579d12SMichal Kazior static inline int 586d7579d12SMichal Kazior ath10k_wmi_vdev_spectral_enable(struct ath10k *ar, u32 vdev_id, u32 trigger, 587d7579d12SMichal Kazior u32 enable) 588d7579d12SMichal Kazior { 589d7579d12SMichal Kazior struct sk_buff *skb; 590d7579d12SMichal Kazior u32 cmd_id; 591d7579d12SMichal Kazior 592d7579d12SMichal Kazior skb = ar->wmi.ops->gen_vdev_spectral_enable(ar, vdev_id, trigger, 593d7579d12SMichal Kazior enable); 594d7579d12SMichal Kazior if (IS_ERR(skb)) 595d7579d12SMichal Kazior return PTR_ERR(skb); 596d7579d12SMichal Kazior 597d7579d12SMichal Kazior cmd_id = ar->wmi.cmd->vdev_spectral_scan_enable_cmdid; 598d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, cmd_id); 599d7579d12SMichal Kazior } 600d7579d12SMichal Kazior 601d7579d12SMichal Kazior static inline int 6020c7e477cSJanusz Dziedzic ath10k_wmi_vdev_sta_uapsd(struct ath10k *ar, u32 vdev_id, 6030c7e477cSJanusz Dziedzic const u8 peer_addr[ETH_ALEN], 6040c7e477cSJanusz Dziedzic const struct wmi_sta_uapsd_auto_trig_arg *args, 6050c7e477cSJanusz Dziedzic u32 num_ac) 6060c7e477cSJanusz Dziedzic { 6070c7e477cSJanusz Dziedzic struct sk_buff *skb; 6080c7e477cSJanusz Dziedzic u32 cmd_id; 6090c7e477cSJanusz Dziedzic 6100c7e477cSJanusz Dziedzic if (!ar->wmi.ops->gen_vdev_sta_uapsd) 6110c7e477cSJanusz Dziedzic return -EOPNOTSUPP; 6120c7e477cSJanusz Dziedzic 6130c7e477cSJanusz Dziedzic skb = ar->wmi.ops->gen_vdev_sta_uapsd(ar, vdev_id, peer_addr, args, 6140c7e477cSJanusz Dziedzic num_ac); 6150c7e477cSJanusz Dziedzic if (IS_ERR(skb)) 6160c7e477cSJanusz Dziedzic return PTR_ERR(skb); 6170c7e477cSJanusz Dziedzic 6180c7e477cSJanusz Dziedzic cmd_id = ar->wmi.cmd->sta_uapsd_auto_trig_cmdid; 6190c7e477cSJanusz Dziedzic return ath10k_wmi_cmd_send(ar, skb, cmd_id); 6200c7e477cSJanusz Dziedzic } 6210c7e477cSJanusz Dziedzic 6220c7e477cSJanusz Dziedzic static inline int 6236d492fe2SMichal Kazior ath10k_wmi_vdev_wmm_conf(struct ath10k *ar, u32 vdev_id, 6246d492fe2SMichal Kazior const struct wmi_wmm_params_all_arg *arg) 6256d492fe2SMichal Kazior { 6266d492fe2SMichal Kazior struct sk_buff *skb; 6276d492fe2SMichal Kazior u32 cmd_id; 6286d492fe2SMichal Kazior 6296d492fe2SMichal Kazior skb = ar->wmi.ops->gen_vdev_wmm_conf(ar, vdev_id, arg); 6306d492fe2SMichal Kazior if (IS_ERR(skb)) 6316d492fe2SMichal Kazior return PTR_ERR(skb); 6326d492fe2SMichal Kazior 6336d492fe2SMichal Kazior cmd_id = ar->wmi.cmd->vdev_set_wmm_params_cmdid; 6346d492fe2SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, cmd_id); 6356d492fe2SMichal Kazior } 6366d492fe2SMichal Kazior 6376d492fe2SMichal Kazior static inline int 638d7579d12SMichal Kazior ath10k_wmi_peer_create(struct ath10k *ar, u32 vdev_id, 639d7579d12SMichal Kazior const u8 peer_addr[ETH_ALEN]) 640d7579d12SMichal Kazior { 641d7579d12SMichal Kazior struct sk_buff *skb; 642d7579d12SMichal Kazior 643d7579d12SMichal Kazior if (!ar->wmi.ops->gen_peer_create) 644d7579d12SMichal Kazior return -EOPNOTSUPP; 645d7579d12SMichal Kazior 646d7579d12SMichal Kazior skb = ar->wmi.ops->gen_peer_create(ar, vdev_id, peer_addr); 647d7579d12SMichal Kazior if (IS_ERR(skb)) 648d7579d12SMichal Kazior return PTR_ERR(skb); 649d7579d12SMichal Kazior 650d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->peer_create_cmdid); 651d7579d12SMichal Kazior } 652d7579d12SMichal Kazior 653d7579d12SMichal Kazior static inline int 654d7579d12SMichal Kazior ath10k_wmi_peer_delete(struct ath10k *ar, u32 vdev_id, 655d7579d12SMichal Kazior const u8 peer_addr[ETH_ALEN]) 656d7579d12SMichal Kazior { 657d7579d12SMichal Kazior struct sk_buff *skb; 658d7579d12SMichal Kazior 659d7579d12SMichal Kazior if (!ar->wmi.ops->gen_peer_delete) 660d7579d12SMichal Kazior return -EOPNOTSUPP; 661d7579d12SMichal Kazior 662d7579d12SMichal Kazior skb = ar->wmi.ops->gen_peer_delete(ar, vdev_id, peer_addr); 663d7579d12SMichal Kazior if (IS_ERR(skb)) 664d7579d12SMichal Kazior return PTR_ERR(skb); 665d7579d12SMichal Kazior 666d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->peer_delete_cmdid); 667d7579d12SMichal Kazior } 668d7579d12SMichal Kazior 669d7579d12SMichal Kazior static inline int 670d7579d12SMichal Kazior ath10k_wmi_peer_flush(struct ath10k *ar, u32 vdev_id, 671d7579d12SMichal Kazior const u8 peer_addr[ETH_ALEN], u32 tid_bitmap) 672d7579d12SMichal Kazior { 673d7579d12SMichal Kazior struct sk_buff *skb; 674d7579d12SMichal Kazior 675d7579d12SMichal Kazior if (!ar->wmi.ops->gen_peer_flush) 676d7579d12SMichal Kazior return -EOPNOTSUPP; 677d7579d12SMichal Kazior 678d7579d12SMichal Kazior skb = ar->wmi.ops->gen_peer_flush(ar, vdev_id, peer_addr, tid_bitmap); 679d7579d12SMichal Kazior if (IS_ERR(skb)) 680d7579d12SMichal Kazior return PTR_ERR(skb); 681d7579d12SMichal Kazior 682d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->peer_flush_tids_cmdid); 683d7579d12SMichal Kazior } 684d7579d12SMichal Kazior 685d7579d12SMichal Kazior static inline int 686d7579d12SMichal Kazior ath10k_wmi_peer_set_param(struct ath10k *ar, u32 vdev_id, const u8 *peer_addr, 687d7579d12SMichal Kazior enum wmi_peer_param param_id, u32 param_value) 688d7579d12SMichal Kazior { 689d7579d12SMichal Kazior struct sk_buff *skb; 690d7579d12SMichal Kazior 691d7579d12SMichal Kazior if (!ar->wmi.ops->gen_peer_set_param) 692d7579d12SMichal Kazior return -EOPNOTSUPP; 693d7579d12SMichal Kazior 694d7579d12SMichal Kazior skb = ar->wmi.ops->gen_peer_set_param(ar, vdev_id, peer_addr, param_id, 695d7579d12SMichal Kazior param_value); 696d7579d12SMichal Kazior if (IS_ERR(skb)) 697d7579d12SMichal Kazior return PTR_ERR(skb); 698d7579d12SMichal Kazior 699d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->peer_set_param_cmdid); 700d7579d12SMichal Kazior } 701d7579d12SMichal Kazior 702d7579d12SMichal Kazior static inline int 703d7579d12SMichal Kazior ath10k_wmi_set_psmode(struct ath10k *ar, u32 vdev_id, 704d7579d12SMichal Kazior enum wmi_sta_ps_mode psmode) 705d7579d12SMichal Kazior { 706d7579d12SMichal Kazior struct sk_buff *skb; 707d7579d12SMichal Kazior 708d7579d12SMichal Kazior if (!ar->wmi.ops->gen_set_psmode) 709d7579d12SMichal Kazior return -EOPNOTSUPP; 710d7579d12SMichal Kazior 711d7579d12SMichal Kazior skb = ar->wmi.ops->gen_set_psmode(ar, vdev_id, psmode); 712d7579d12SMichal Kazior if (IS_ERR(skb)) 713d7579d12SMichal Kazior return PTR_ERR(skb); 714d7579d12SMichal Kazior 715d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, 716d7579d12SMichal Kazior ar->wmi.cmd->sta_powersave_mode_cmdid); 717d7579d12SMichal Kazior } 718d7579d12SMichal Kazior 719d7579d12SMichal Kazior static inline int 720d7579d12SMichal Kazior ath10k_wmi_set_sta_ps_param(struct ath10k *ar, u32 vdev_id, 721d7579d12SMichal Kazior enum wmi_sta_powersave_param param_id, u32 value) 722d7579d12SMichal Kazior { 723d7579d12SMichal Kazior struct sk_buff *skb; 724d7579d12SMichal Kazior 725d7579d12SMichal Kazior if (!ar->wmi.ops->gen_set_sta_ps) 726d7579d12SMichal Kazior return -EOPNOTSUPP; 727d7579d12SMichal Kazior 728d7579d12SMichal Kazior skb = ar->wmi.ops->gen_set_sta_ps(ar, vdev_id, param_id, value); 729d7579d12SMichal Kazior if (IS_ERR(skb)) 730d7579d12SMichal Kazior return PTR_ERR(skb); 731d7579d12SMichal Kazior 732d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, 733d7579d12SMichal Kazior ar->wmi.cmd->sta_powersave_param_cmdid); 734d7579d12SMichal Kazior } 735d7579d12SMichal Kazior 736d7579d12SMichal Kazior static inline int 737d7579d12SMichal Kazior ath10k_wmi_set_ap_ps_param(struct ath10k *ar, u32 vdev_id, const u8 *mac, 738d7579d12SMichal Kazior enum wmi_ap_ps_peer_param param_id, u32 value) 739d7579d12SMichal Kazior { 740d7579d12SMichal Kazior struct sk_buff *skb; 741d7579d12SMichal Kazior 742d7579d12SMichal Kazior if (!ar->wmi.ops->gen_set_ap_ps) 743d7579d12SMichal Kazior return -EOPNOTSUPP; 744d7579d12SMichal Kazior 745d7579d12SMichal Kazior skb = ar->wmi.ops->gen_set_ap_ps(ar, vdev_id, mac, param_id, value); 746d7579d12SMichal Kazior if (IS_ERR(skb)) 747d7579d12SMichal Kazior return PTR_ERR(skb); 748d7579d12SMichal Kazior 749d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, 750d7579d12SMichal Kazior ar->wmi.cmd->ap_ps_peer_param_cmdid); 751d7579d12SMichal Kazior } 752d7579d12SMichal Kazior 753d7579d12SMichal Kazior static inline int 754d7579d12SMichal Kazior ath10k_wmi_scan_chan_list(struct ath10k *ar, 755d7579d12SMichal Kazior const struct wmi_scan_chan_list_arg *arg) 756d7579d12SMichal Kazior { 757d7579d12SMichal Kazior struct sk_buff *skb; 758d7579d12SMichal Kazior 759d7579d12SMichal Kazior if (!ar->wmi.ops->gen_scan_chan_list) 760d7579d12SMichal Kazior return -EOPNOTSUPP; 761d7579d12SMichal Kazior 762d7579d12SMichal Kazior skb = ar->wmi.ops->gen_scan_chan_list(ar, arg); 763d7579d12SMichal Kazior if (IS_ERR(skb)) 764d7579d12SMichal Kazior return PTR_ERR(skb); 765d7579d12SMichal Kazior 766d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->scan_chan_list_cmdid); 767d7579d12SMichal Kazior } 768d7579d12SMichal Kazior 769d7579d12SMichal Kazior static inline int 770d7579d12SMichal Kazior ath10k_wmi_peer_assoc(struct ath10k *ar, 771d7579d12SMichal Kazior const struct wmi_peer_assoc_complete_arg *arg) 772d7579d12SMichal Kazior { 773d7579d12SMichal Kazior struct sk_buff *skb; 774d7579d12SMichal Kazior 775d7579d12SMichal Kazior if (!ar->wmi.ops->gen_peer_assoc) 776d7579d12SMichal Kazior return -EOPNOTSUPP; 777d7579d12SMichal Kazior 778d7579d12SMichal Kazior skb = ar->wmi.ops->gen_peer_assoc(ar, arg); 779d7579d12SMichal Kazior if (IS_ERR(skb)) 780d7579d12SMichal Kazior return PTR_ERR(skb); 781d7579d12SMichal Kazior 782d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->peer_assoc_cmdid); 783d7579d12SMichal Kazior } 784d7579d12SMichal Kazior 785d7579d12SMichal Kazior static inline int 7869ad50182SMichal Kazior ath10k_wmi_beacon_send_ref_nowait(struct ath10k *ar, u32 vdev_id, 7879ad50182SMichal Kazior const void *bcn, size_t bcn_len, 7889ad50182SMichal Kazior u32 bcn_paddr, bool dtim_zero, 7899ad50182SMichal Kazior bool deliver_cab) 790d7579d12SMichal Kazior { 791d7579d12SMichal Kazior struct sk_buff *skb; 792d7579d12SMichal Kazior int ret; 793d7579d12SMichal Kazior 794d7579d12SMichal Kazior if (!ar->wmi.ops->gen_beacon_dma) 795d7579d12SMichal Kazior return -EOPNOTSUPP; 796d7579d12SMichal Kazior 7979ad50182SMichal Kazior skb = ar->wmi.ops->gen_beacon_dma(ar, vdev_id, bcn, bcn_len, bcn_paddr, 7989ad50182SMichal Kazior dtim_zero, deliver_cab); 799d7579d12SMichal Kazior if (IS_ERR(skb)) 800d7579d12SMichal Kazior return PTR_ERR(skb); 801d7579d12SMichal Kazior 802d7579d12SMichal Kazior ret = ath10k_wmi_cmd_send_nowait(ar, skb, 803d7579d12SMichal Kazior ar->wmi.cmd->pdev_send_bcn_cmdid); 804d7579d12SMichal Kazior if (ret) { 805d7579d12SMichal Kazior dev_kfree_skb(skb); 806d7579d12SMichal Kazior return ret; 807d7579d12SMichal Kazior } 808d7579d12SMichal Kazior 809d7579d12SMichal Kazior return 0; 810d7579d12SMichal Kazior } 811d7579d12SMichal Kazior 812d7579d12SMichal Kazior static inline int 813d7579d12SMichal Kazior ath10k_wmi_pdev_set_wmm_params(struct ath10k *ar, 8145e752e42SMichal Kazior const struct wmi_wmm_params_all_arg *arg) 815d7579d12SMichal Kazior { 816d7579d12SMichal Kazior struct sk_buff *skb; 817d7579d12SMichal Kazior 818d7579d12SMichal Kazior if (!ar->wmi.ops->gen_pdev_set_wmm) 819d7579d12SMichal Kazior return -EOPNOTSUPP; 820d7579d12SMichal Kazior 821d7579d12SMichal Kazior skb = ar->wmi.ops->gen_pdev_set_wmm(ar, arg); 822d7579d12SMichal Kazior if (IS_ERR(skb)) 823d7579d12SMichal Kazior return PTR_ERR(skb); 824d7579d12SMichal Kazior 825d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, 826d7579d12SMichal Kazior ar->wmi.cmd->pdev_set_wmm_params_cmdid); 827d7579d12SMichal Kazior } 828d7579d12SMichal Kazior 829d7579d12SMichal Kazior static inline int 830de23d3efSMichal Kazior ath10k_wmi_request_stats(struct ath10k *ar, u32 stats_mask) 831d7579d12SMichal Kazior { 832d7579d12SMichal Kazior struct sk_buff *skb; 833d7579d12SMichal Kazior 834d7579d12SMichal Kazior if (!ar->wmi.ops->gen_request_stats) 835d7579d12SMichal Kazior return -EOPNOTSUPP; 836d7579d12SMichal Kazior 837de23d3efSMichal Kazior skb = ar->wmi.ops->gen_request_stats(ar, stats_mask); 838d7579d12SMichal Kazior if (IS_ERR(skb)) 839d7579d12SMichal Kazior return PTR_ERR(skb); 840d7579d12SMichal Kazior 841d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->request_stats_cmdid); 842d7579d12SMichal Kazior } 843d7579d12SMichal Kazior 844d7579d12SMichal Kazior static inline int 845d7579d12SMichal Kazior ath10k_wmi_force_fw_hang(struct ath10k *ar, 846d7579d12SMichal Kazior enum wmi_force_fw_hang_type type, u32 delay_ms) 847d7579d12SMichal Kazior { 848d7579d12SMichal Kazior struct sk_buff *skb; 849d7579d12SMichal Kazior 850d7579d12SMichal Kazior if (!ar->wmi.ops->gen_force_fw_hang) 851d7579d12SMichal Kazior return -EOPNOTSUPP; 852d7579d12SMichal Kazior 853d7579d12SMichal Kazior skb = ar->wmi.ops->gen_force_fw_hang(ar, type, delay_ms); 854d7579d12SMichal Kazior if (IS_ERR(skb)) 855d7579d12SMichal Kazior return PTR_ERR(skb); 856d7579d12SMichal Kazior 857d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->force_fw_hang_cmdid); 858d7579d12SMichal Kazior } 859d7579d12SMichal Kazior 860d7579d12SMichal Kazior static inline int 861467210a6SSenthilKumar Jegadeesan ath10k_wmi_dbglog_cfg(struct ath10k *ar, u32 module_enable, u32 log_level) 862d7579d12SMichal Kazior { 863d7579d12SMichal Kazior struct sk_buff *skb; 864d7579d12SMichal Kazior 865d7579d12SMichal Kazior if (!ar->wmi.ops->gen_dbglog_cfg) 866d7579d12SMichal Kazior return -EOPNOTSUPP; 867d7579d12SMichal Kazior 868467210a6SSenthilKumar Jegadeesan skb = ar->wmi.ops->gen_dbglog_cfg(ar, module_enable, log_level); 869d7579d12SMichal Kazior if (IS_ERR(skb)) 870d7579d12SMichal Kazior return PTR_ERR(skb); 871d7579d12SMichal Kazior 872d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->dbglog_cfg_cmdid); 873d7579d12SMichal Kazior } 874d7579d12SMichal Kazior 875d7579d12SMichal Kazior static inline int 876d7579d12SMichal Kazior ath10k_wmi_pdev_pktlog_enable(struct ath10k *ar, u32 filter) 877d7579d12SMichal Kazior { 878d7579d12SMichal Kazior struct sk_buff *skb; 879d7579d12SMichal Kazior 880d7579d12SMichal Kazior if (!ar->wmi.ops->gen_pktlog_enable) 881d7579d12SMichal Kazior return -EOPNOTSUPP; 882d7579d12SMichal Kazior 883d7579d12SMichal Kazior skb = ar->wmi.ops->gen_pktlog_enable(ar, filter); 884d7579d12SMichal Kazior if (IS_ERR(skb)) 885d7579d12SMichal Kazior return PTR_ERR(skb); 886d7579d12SMichal Kazior 887d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->pdev_pktlog_enable_cmdid); 888d7579d12SMichal Kazior } 889d7579d12SMichal Kazior 890d7579d12SMichal Kazior static inline int 891d7579d12SMichal Kazior ath10k_wmi_pdev_pktlog_disable(struct ath10k *ar) 892d7579d12SMichal Kazior { 893d7579d12SMichal Kazior struct sk_buff *skb; 894d7579d12SMichal Kazior 895d7579d12SMichal Kazior if (!ar->wmi.ops->gen_pktlog_disable) 896d7579d12SMichal Kazior return -EOPNOTSUPP; 897d7579d12SMichal Kazior 898d7579d12SMichal Kazior skb = ar->wmi.ops->gen_pktlog_disable(ar); 899d7579d12SMichal Kazior if (IS_ERR(skb)) 900d7579d12SMichal Kazior return PTR_ERR(skb); 901d7579d12SMichal Kazior 902d7579d12SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, 903d7579d12SMichal Kazior ar->wmi.cmd->pdev_pktlog_disable_cmdid); 904d7579d12SMichal Kazior } 905d7579d12SMichal Kazior 906ffdd738dSRajkumar Manoharan static inline int 907ffdd738dSRajkumar Manoharan ath10k_wmi_pdev_set_quiet_mode(struct ath10k *ar, u32 period, u32 duration, 908ffdd738dSRajkumar Manoharan u32 next_offset, u32 enabled) 909ffdd738dSRajkumar Manoharan { 910ffdd738dSRajkumar Manoharan struct sk_buff *skb; 911ffdd738dSRajkumar Manoharan 912ffdd738dSRajkumar Manoharan if (!ar->wmi.ops->gen_pdev_set_quiet_mode) 913ffdd738dSRajkumar Manoharan return -EOPNOTSUPP; 914ffdd738dSRajkumar Manoharan 915ffdd738dSRajkumar Manoharan skb = ar->wmi.ops->gen_pdev_set_quiet_mode(ar, period, duration, 916ffdd738dSRajkumar Manoharan next_offset, enabled); 917ffdd738dSRajkumar Manoharan if (IS_ERR(skb)) 918ffdd738dSRajkumar Manoharan return PTR_ERR(skb); 919ffdd738dSRajkumar Manoharan 920ffdd738dSRajkumar Manoharan return ath10k_wmi_cmd_send(ar, skb, 921ffdd738dSRajkumar Manoharan ar->wmi.cmd->pdev_set_quiet_mode_cmdid); 922ffdd738dSRajkumar Manoharan } 923ffdd738dSRajkumar Manoharan 924a57a6a27SRajkumar Manoharan static inline int 925a57a6a27SRajkumar Manoharan ath10k_wmi_pdev_get_temperature(struct ath10k *ar) 926a57a6a27SRajkumar Manoharan { 927a57a6a27SRajkumar Manoharan struct sk_buff *skb; 928a57a6a27SRajkumar Manoharan 929a57a6a27SRajkumar Manoharan if (!ar->wmi.ops->gen_pdev_get_temperature) 930a57a6a27SRajkumar Manoharan return -EOPNOTSUPP; 931a57a6a27SRajkumar Manoharan 932a57a6a27SRajkumar Manoharan skb = ar->wmi.ops->gen_pdev_get_temperature(ar); 933a57a6a27SRajkumar Manoharan if (IS_ERR(skb)) 934a57a6a27SRajkumar Manoharan return PTR_ERR(skb); 935a57a6a27SRajkumar Manoharan 936a57a6a27SRajkumar Manoharan return ath10k_wmi_cmd_send(ar, skb, 937a57a6a27SRajkumar Manoharan ar->wmi.cmd->pdev_get_temperature_cmdid); 938a57a6a27SRajkumar Manoharan } 939a57a6a27SRajkumar Manoharan 940dc8ab278SRajkumar Manoharan static inline int 941dc8ab278SRajkumar Manoharan ath10k_wmi_addba_clear_resp(struct ath10k *ar, u32 vdev_id, const u8 *mac) 942dc8ab278SRajkumar Manoharan { 943dc8ab278SRajkumar Manoharan struct sk_buff *skb; 944dc8ab278SRajkumar Manoharan 945dc8ab278SRajkumar Manoharan if (!ar->wmi.ops->gen_addba_clear_resp) 946dc8ab278SRajkumar Manoharan return -EOPNOTSUPP; 947dc8ab278SRajkumar Manoharan 948dc8ab278SRajkumar Manoharan skb = ar->wmi.ops->gen_addba_clear_resp(ar, vdev_id, mac); 949dc8ab278SRajkumar Manoharan if (IS_ERR(skb)) 950dc8ab278SRajkumar Manoharan return PTR_ERR(skb); 951dc8ab278SRajkumar Manoharan 952dc8ab278SRajkumar Manoharan return ath10k_wmi_cmd_send(ar, skb, 953dc8ab278SRajkumar Manoharan ar->wmi.cmd->addba_clear_resp_cmdid); 954dc8ab278SRajkumar Manoharan } 955dc8ab278SRajkumar Manoharan 95665c0893dSRajkumar Manoharan static inline int 95765c0893dSRajkumar Manoharan ath10k_wmi_addba_send(struct ath10k *ar, u32 vdev_id, const u8 *mac, 95865c0893dSRajkumar Manoharan u32 tid, u32 buf_size) 95965c0893dSRajkumar Manoharan { 96065c0893dSRajkumar Manoharan struct sk_buff *skb; 96165c0893dSRajkumar Manoharan 96265c0893dSRajkumar Manoharan if (!ar->wmi.ops->gen_addba_send) 96365c0893dSRajkumar Manoharan return -EOPNOTSUPP; 96465c0893dSRajkumar Manoharan 96565c0893dSRajkumar Manoharan skb = ar->wmi.ops->gen_addba_send(ar, vdev_id, mac, tid, buf_size); 96665c0893dSRajkumar Manoharan if (IS_ERR(skb)) 96765c0893dSRajkumar Manoharan return PTR_ERR(skb); 96865c0893dSRajkumar Manoharan 96965c0893dSRajkumar Manoharan return ath10k_wmi_cmd_send(ar, skb, 97065c0893dSRajkumar Manoharan ar->wmi.cmd->addba_send_cmdid); 97165c0893dSRajkumar Manoharan } 97265c0893dSRajkumar Manoharan 97311597413SRajkumar Manoharan static inline int 97411597413SRajkumar Manoharan ath10k_wmi_addba_set_resp(struct ath10k *ar, u32 vdev_id, const u8 *mac, 97511597413SRajkumar Manoharan u32 tid, u32 status) 97611597413SRajkumar Manoharan { 97711597413SRajkumar Manoharan struct sk_buff *skb; 97811597413SRajkumar Manoharan 97911597413SRajkumar Manoharan if (!ar->wmi.ops->gen_addba_set_resp) 98011597413SRajkumar Manoharan return -EOPNOTSUPP; 98111597413SRajkumar Manoharan 98211597413SRajkumar Manoharan skb = ar->wmi.ops->gen_addba_set_resp(ar, vdev_id, mac, tid, status); 98311597413SRajkumar Manoharan if (IS_ERR(skb)) 98411597413SRajkumar Manoharan return PTR_ERR(skb); 98511597413SRajkumar Manoharan 98611597413SRajkumar Manoharan return ath10k_wmi_cmd_send(ar, skb, 98711597413SRajkumar Manoharan ar->wmi.cmd->addba_set_resp_cmdid); 98811597413SRajkumar Manoharan } 98911597413SRajkumar Manoharan 99050abef85SRajkumar Manoharan static inline int 99150abef85SRajkumar Manoharan ath10k_wmi_delba_send(struct ath10k *ar, u32 vdev_id, const u8 *mac, 99250abef85SRajkumar Manoharan u32 tid, u32 initiator, u32 reason) 99350abef85SRajkumar Manoharan { 99450abef85SRajkumar Manoharan struct sk_buff *skb; 99550abef85SRajkumar Manoharan 99650abef85SRajkumar Manoharan if (!ar->wmi.ops->gen_delba_send) 99750abef85SRajkumar Manoharan return -EOPNOTSUPP; 99850abef85SRajkumar Manoharan 99950abef85SRajkumar Manoharan skb = ar->wmi.ops->gen_delba_send(ar, vdev_id, mac, tid, initiator, 100050abef85SRajkumar Manoharan reason); 100150abef85SRajkumar Manoharan if (IS_ERR(skb)) 100250abef85SRajkumar Manoharan return PTR_ERR(skb); 100350abef85SRajkumar Manoharan 100450abef85SRajkumar Manoharan return ath10k_wmi_cmd_send(ar, skb, 100550abef85SRajkumar Manoharan ar->wmi.cmd->delba_send_cmdid); 100650abef85SRajkumar Manoharan } 100750abef85SRajkumar Manoharan 1008be9ce9d8SMichal Kazior static inline int 1009be9ce9d8SMichal Kazior ath10k_wmi_bcn_tmpl(struct ath10k *ar, u32 vdev_id, u32 tim_ie_offset, 1010be9ce9d8SMichal Kazior struct sk_buff *bcn, u32 prb_caps, u32 prb_erp, 1011be9ce9d8SMichal Kazior void *prb_ies, size_t prb_ies_len) 1012be9ce9d8SMichal Kazior { 1013be9ce9d8SMichal Kazior struct sk_buff *skb; 1014be9ce9d8SMichal Kazior 1015be9ce9d8SMichal Kazior if (!ar->wmi.ops->gen_bcn_tmpl) 1016be9ce9d8SMichal Kazior return -EOPNOTSUPP; 1017be9ce9d8SMichal Kazior 1018be9ce9d8SMichal Kazior skb = ar->wmi.ops->gen_bcn_tmpl(ar, vdev_id, tim_ie_offset, bcn, 1019be9ce9d8SMichal Kazior prb_caps, prb_erp, prb_ies, 1020be9ce9d8SMichal Kazior prb_ies_len); 1021be9ce9d8SMichal Kazior if (IS_ERR(skb)) 1022be9ce9d8SMichal Kazior return PTR_ERR(skb); 1023be9ce9d8SMichal Kazior 1024be9ce9d8SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->bcn_tmpl_cmdid); 1025be9ce9d8SMichal Kazior } 1026be9ce9d8SMichal Kazior 10274c4955feSMichal Kazior static inline int 10284c4955feSMichal Kazior ath10k_wmi_prb_tmpl(struct ath10k *ar, u32 vdev_id, struct sk_buff *prb) 10294c4955feSMichal Kazior { 10304c4955feSMichal Kazior struct sk_buff *skb; 10314c4955feSMichal Kazior 10324c4955feSMichal Kazior if (!ar->wmi.ops->gen_prb_tmpl) 10334c4955feSMichal Kazior return -EOPNOTSUPP; 10344c4955feSMichal Kazior 10354c4955feSMichal Kazior skb = ar->wmi.ops->gen_prb_tmpl(ar, vdev_id, prb); 10364c4955feSMichal Kazior if (IS_ERR(skb)) 10374c4955feSMichal Kazior return PTR_ERR(skb); 10384c4955feSMichal Kazior 10394c4955feSMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->prb_tmpl_cmdid); 10404c4955feSMichal Kazior } 10414c4955feSMichal Kazior 1042369242b4SMichal Kazior static inline int 1043369242b4SMichal Kazior ath10k_wmi_p2p_go_bcn_ie(struct ath10k *ar, u32 vdev_id, const u8 *p2p_ie) 1044369242b4SMichal Kazior { 1045369242b4SMichal Kazior struct sk_buff *skb; 1046369242b4SMichal Kazior 1047369242b4SMichal Kazior if (!ar->wmi.ops->gen_p2p_go_bcn_ie) 1048369242b4SMichal Kazior return -EOPNOTSUPP; 1049369242b4SMichal Kazior 1050369242b4SMichal Kazior skb = ar->wmi.ops->gen_p2p_go_bcn_ie(ar, vdev_id, p2p_ie); 1051369242b4SMichal Kazior if (IS_ERR(skb)) 1052369242b4SMichal Kazior return PTR_ERR(skb); 1053369242b4SMichal Kazior 1054369242b4SMichal Kazior return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->p2p_go_set_beacon_ie); 1055369242b4SMichal Kazior } 1056369242b4SMichal Kazior 10576e8b188bSJanusz Dziedzic static inline int 10586e8b188bSJanusz Dziedzic ath10k_wmi_sta_keepalive(struct ath10k *ar, 10596e8b188bSJanusz Dziedzic const struct wmi_sta_keepalive_arg *arg) 10606e8b188bSJanusz Dziedzic { 10616e8b188bSJanusz Dziedzic struct sk_buff *skb; 10626e8b188bSJanusz Dziedzic u32 cmd_id; 10636e8b188bSJanusz Dziedzic 10646e8b188bSJanusz Dziedzic if (!ar->wmi.ops->gen_sta_keepalive) 10656e8b188bSJanusz Dziedzic return -EOPNOTSUPP; 10666e8b188bSJanusz Dziedzic 10676e8b188bSJanusz Dziedzic skb = ar->wmi.ops->gen_sta_keepalive(ar, arg); 10686e8b188bSJanusz Dziedzic if (IS_ERR(skb)) 10696e8b188bSJanusz Dziedzic return PTR_ERR(skb); 10706e8b188bSJanusz Dziedzic 10716e8b188bSJanusz Dziedzic cmd_id = ar->wmi.cmd->sta_keepalive_cmd; 10726e8b188bSJanusz Dziedzic return ath10k_wmi_cmd_send(ar, skb, cmd_id); 10736e8b188bSJanusz Dziedzic } 10746e8b188bSJanusz Dziedzic 1075d7579d12SMichal Kazior #endif 1076