root/drivers/net/wireless/ath/ath10k/wmi-ops.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. ath10k_wmi_rx
  2. ath10k_wmi_map_svc
  3. ath10k_wmi_map_svc_ext
  4. ath10k_wmi_pull_scan
  5. ath10k_wmi_pull_mgmt_tx_compl
  6. ath10k_wmi_pull_mgmt_tx_bundle_compl
  7. ath10k_wmi_pull_mgmt_rx
  8. ath10k_wmi_pull_ch_info
  9. ath10k_wmi_pull_vdev_start
  10. ath10k_wmi_pull_peer_kick
  11. ath10k_wmi_pull_swba
  12. ath10k_wmi_pull_phyerr_hdr
  13. ath10k_wmi_pull_phyerr
  14. ath10k_wmi_pull_svc_rdy
  15. ath10k_wmi_pull_rdy
  16. ath10k_wmi_pull_svc_avail
  17. ath10k_wmi_pull_fw_stats
  18. ath10k_wmi_pull_roam_ev
  19. ath10k_wmi_pull_wow_event
  20. ath10k_wmi_pull_echo_ev
  21. ath10k_wmi_pull_dfs_status
  22. ath10k_wmi_get_txbf_conf_scheme
  23. ath10k_wmi_mgmt_tx_send
  24. ath10k_wmi_mgmt_tx
  25. ath10k_wmi_pdev_set_regdomain
  26. ath10k_wmi_pdev_set_base_macaddr
  27. ath10k_wmi_pdev_suspend_target
  28. ath10k_wmi_pdev_resume_target
  29. ath10k_wmi_pdev_set_param
  30. ath10k_wmi_cmd_init
  31. ath10k_wmi_start_scan
  32. ath10k_wmi_stop_scan
  33. ath10k_wmi_vdev_create
  34. ath10k_wmi_vdev_delete
  35. ath10k_wmi_vdev_start
  36. ath10k_wmi_vdev_restart
  37. ath10k_wmi_vdev_stop
  38. ath10k_wmi_vdev_up
  39. ath10k_wmi_vdev_down
  40. ath10k_wmi_vdev_set_param
  41. ath10k_wmi_vdev_install_key
  42. ath10k_wmi_vdev_spectral_conf
  43. ath10k_wmi_vdev_spectral_enable
  44. ath10k_wmi_vdev_sta_uapsd
  45. ath10k_wmi_vdev_wmm_conf
  46. ath10k_wmi_peer_create
  47. ath10k_wmi_peer_delete
  48. ath10k_wmi_peer_flush
  49. ath10k_wmi_peer_set_param
  50. ath10k_wmi_set_psmode
  51. ath10k_wmi_set_sta_ps_param
  52. ath10k_wmi_set_ap_ps_param
  53. ath10k_wmi_scan_chan_list
  54. ath10k_wmi_scan_prob_req_oui
  55. ath10k_wmi_peer_assoc
  56. ath10k_wmi_beacon_send_ref_nowait
  57. ath10k_wmi_pdev_set_wmm_params
  58. ath10k_wmi_request_stats
  59. ath10k_wmi_force_fw_hang
  60. ath10k_wmi_dbglog_cfg
  61. ath10k_wmi_pdev_pktlog_enable
  62. ath10k_wmi_pdev_pktlog_disable
  63. ath10k_wmi_pdev_set_quiet_mode
  64. ath10k_wmi_pdev_get_temperature
  65. ath10k_wmi_addba_clear_resp
  66. ath10k_wmi_addba_send
  67. ath10k_wmi_addba_set_resp
  68. ath10k_wmi_delba_send
  69. ath10k_wmi_bcn_tmpl
  70. ath10k_wmi_prb_tmpl
  71. ath10k_wmi_p2p_go_bcn_ie
  72. ath10k_wmi_sta_keepalive
  73. ath10k_wmi_wow_enable
  74. ath10k_wmi_wow_add_wakeup_event
  75. ath10k_wmi_wow_host_wakeup_ind
  76. ath10k_wmi_wow_add_pattern
  77. ath10k_wmi_wow_del_pattern
  78. ath10k_wmi_wow_config_pno
  79. ath10k_wmi_update_fw_tdls_state
  80. ath10k_wmi_tdls_peer_update
  81. ath10k_wmi_adaptive_qcs
  82. ath10k_wmi_pdev_get_tpc_config
  83. ath10k_wmi_fw_stats_fill
  84. ath10k_wmi_pdev_enable_adaptive_cca
  85. ath10k_wmi_ext_resource_config
  86. ath10k_wmi_get_vdev_subtype
  87. ath10k_wmi_pdev_bss_chan_info_request
  88. ath10k_wmi_echo
  89. ath10k_wmi_pdev_get_tpc_table_cmdid
  90. ath10k_wmi_report_radar_found
  91. ath10k_wmi_pdev_bb_timing

   1 /* SPDX-License-Identifier: ISC */
   2 /*
   3  * Copyright (c) 2005-2011 Atheros Communications Inc.
   4  * Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
   5  * Copyright (c) 2018, The Linux Foundation. All rights reserved.
   6  */
   7 
   8 #ifndef _WMI_OPS_H_
   9 #define _WMI_OPS_H_
  10 
  11 struct ath10k;
  12 struct sk_buff;
  13 
  14 struct wmi_ops {
  15         void (*rx)(struct ath10k *ar, struct sk_buff *skb);
  16         void (*map_svc)(const __le32 *in, unsigned long *out, size_t len);
  17         void (*map_svc_ext)(const __le32 *in, unsigned long *out, size_t len);
  18 
  19         int (*pull_scan)(struct ath10k *ar, struct sk_buff *skb,
  20                          struct wmi_scan_ev_arg *arg);
  21         int (*pull_mgmt_rx)(struct ath10k *ar, struct sk_buff *skb,
  22                             struct wmi_mgmt_rx_ev_arg *arg);
  23         int (*pull_mgmt_tx_compl)(struct ath10k *ar, struct sk_buff *skb,
  24                                   struct wmi_tlv_mgmt_tx_compl_ev_arg *arg);
  25         int (*pull_mgmt_tx_bundle_compl)(
  26                                 struct ath10k *ar, struct sk_buff *skb,
  27                                 struct wmi_tlv_mgmt_tx_bundle_compl_ev_arg *arg);
  28         int (*pull_ch_info)(struct ath10k *ar, struct sk_buff *skb,
  29                             struct wmi_ch_info_ev_arg *arg);
  30         int (*pull_vdev_start)(struct ath10k *ar, struct sk_buff *skb,
  31                                struct wmi_vdev_start_ev_arg *arg);
  32         int (*pull_peer_kick)(struct ath10k *ar, struct sk_buff *skb,
  33                               struct wmi_peer_kick_ev_arg *arg);
  34         int (*pull_swba)(struct ath10k *ar, struct sk_buff *skb,
  35                          struct wmi_swba_ev_arg *arg);
  36         int (*pull_phyerr_hdr)(struct ath10k *ar, struct sk_buff *skb,
  37                                struct wmi_phyerr_hdr_arg *arg);
  38         int (*pull_phyerr)(struct ath10k *ar, const void *phyerr_buf,
  39                            int left_len, struct wmi_phyerr_ev_arg *arg);
  40         int (*pull_svc_rdy)(struct ath10k *ar, struct sk_buff *skb,
  41                             struct wmi_svc_rdy_ev_arg *arg);
  42         int (*pull_rdy)(struct ath10k *ar, struct sk_buff *skb,
  43                         struct wmi_rdy_ev_arg *arg);
  44         int (*pull_fw_stats)(struct ath10k *ar, struct sk_buff *skb,
  45                              struct ath10k_fw_stats *stats);
  46         int (*pull_roam_ev)(struct ath10k *ar, struct sk_buff *skb,
  47                             struct wmi_roam_ev_arg *arg);
  48         int (*pull_wow_event)(struct ath10k *ar, struct sk_buff *skb,
  49                               struct wmi_wow_ev_arg *arg);
  50         int (*pull_echo_ev)(struct ath10k *ar, struct sk_buff *skb,
  51                             struct wmi_echo_ev_arg *arg);
  52         int (*pull_dfs_status_ev)(struct ath10k *ar, struct sk_buff *skb,
  53                                   struct wmi_dfs_status_ev_arg *arg);
  54         int (*pull_svc_avail)(struct ath10k *ar, struct sk_buff *skb,
  55                               struct wmi_svc_avail_ev_arg *arg);
  56 
  57         enum wmi_txbf_conf (*get_txbf_conf_scheme)(struct ath10k *ar);
  58 
  59         struct sk_buff *(*gen_pdev_suspend)(struct ath10k *ar, u32 suspend_opt);
  60         struct sk_buff *(*gen_pdev_resume)(struct ath10k *ar);
  61         struct sk_buff *(*gen_pdev_set_base_macaddr)(struct ath10k *ar,
  62                                                      const u8 macaddr[ETH_ALEN]);
  63         struct sk_buff *(*gen_pdev_set_rd)(struct ath10k *ar, u16 rd, u16 rd2g,
  64                                            u16 rd5g, u16 ctl2g, u16 ctl5g,
  65                                            enum wmi_dfs_region dfs_reg);
  66         struct sk_buff *(*gen_pdev_set_param)(struct ath10k *ar, u32 id,
  67                                               u32 value);
  68         struct sk_buff *(*gen_init)(struct ath10k *ar);
  69         struct sk_buff *(*gen_start_scan)(struct ath10k *ar,
  70                                           const struct wmi_start_scan_arg *arg);
  71         struct sk_buff *(*gen_stop_scan)(struct ath10k *ar,
  72                                          const struct wmi_stop_scan_arg *arg);
  73         struct sk_buff *(*gen_vdev_create)(struct ath10k *ar, u32 vdev_id,
  74                                            enum wmi_vdev_type type,
  75                                            enum wmi_vdev_subtype subtype,
  76                                            const u8 macaddr[ETH_ALEN]);
  77         struct sk_buff *(*gen_vdev_delete)(struct ath10k *ar, u32 vdev_id);
  78         struct sk_buff *(*gen_vdev_start)(struct ath10k *ar,
  79                                           const struct wmi_vdev_start_request_arg *arg,
  80                                           bool restart);
  81         struct sk_buff *(*gen_vdev_stop)(struct ath10k *ar, u32 vdev_id);
  82         struct sk_buff *(*gen_vdev_up)(struct ath10k *ar, u32 vdev_id, u32 aid,
  83                                        const u8 *bssid);
  84         struct sk_buff *(*gen_vdev_down)(struct ath10k *ar, u32 vdev_id);
  85         struct sk_buff *(*gen_vdev_set_param)(struct ath10k *ar, u32 vdev_id,
  86                                               u32 param_id, u32 param_value);
  87         struct sk_buff *(*gen_vdev_install_key)(struct ath10k *ar,
  88                                                 const struct wmi_vdev_install_key_arg *arg);
  89         struct sk_buff *(*gen_vdev_spectral_conf)(struct ath10k *ar,
  90                                                   const struct wmi_vdev_spectral_conf_arg *arg);
  91         struct sk_buff *(*gen_vdev_spectral_enable)(struct ath10k *ar, u32 vdev_id,
  92                                                     u32 trigger, u32 enable);
  93         struct sk_buff *(*gen_vdev_wmm_conf)(struct ath10k *ar, u32 vdev_id,
  94                                              const struct wmi_wmm_params_all_arg *arg);
  95         struct sk_buff *(*gen_peer_create)(struct ath10k *ar, u32 vdev_id,
  96                                            const u8 peer_addr[ETH_ALEN],
  97                                            enum wmi_peer_type peer_type);
  98         struct sk_buff *(*gen_peer_delete)(struct ath10k *ar, u32 vdev_id,
  99                                            const u8 peer_addr[ETH_ALEN]);
 100         struct sk_buff *(*gen_peer_flush)(struct ath10k *ar, u32 vdev_id,
 101                                           const u8 peer_addr[ETH_ALEN],
 102                                           u32 tid_bitmap);
 103         struct sk_buff *(*gen_peer_set_param)(struct ath10k *ar, u32 vdev_id,
 104                                               const u8 *peer_addr,
 105                                               enum wmi_peer_param param_id,
 106                                               u32 param_value);
 107         struct sk_buff *(*gen_peer_assoc)(struct ath10k *ar,
 108                                           const struct wmi_peer_assoc_complete_arg *arg);
 109         struct sk_buff *(*gen_set_psmode)(struct ath10k *ar, u32 vdev_id,
 110                                           enum wmi_sta_ps_mode psmode);
 111         struct sk_buff *(*gen_set_sta_ps)(struct ath10k *ar, u32 vdev_id,
 112                                           enum wmi_sta_powersave_param param_id,
 113                                           u32 value);
 114         struct sk_buff *(*gen_set_ap_ps)(struct ath10k *ar, u32 vdev_id,
 115                                          const u8 *mac,
 116                                          enum wmi_ap_ps_peer_param param_id,
 117                                          u32 value);
 118         struct sk_buff *(*gen_scan_chan_list)(struct ath10k *ar,
 119                                               const struct wmi_scan_chan_list_arg *arg);
 120         struct sk_buff *(*gen_scan_prob_req_oui)(struct ath10k *ar,
 121                                                  u32 prob_req_oui);
 122         struct sk_buff *(*gen_beacon_dma)(struct ath10k *ar, u32 vdev_id,
 123                                           const void *bcn, size_t bcn_len,
 124                                           u32 bcn_paddr, bool dtim_zero,
 125                                           bool deliver_cab);
 126         struct sk_buff *(*gen_pdev_set_wmm)(struct ath10k *ar,
 127                                             const struct wmi_wmm_params_all_arg *arg);
 128         struct sk_buff *(*gen_request_stats)(struct ath10k *ar, u32 stats_mask);
 129         struct sk_buff *(*gen_force_fw_hang)(struct ath10k *ar,
 130                                              enum wmi_force_fw_hang_type type,
 131                                              u32 delay_ms);
 132         struct sk_buff *(*gen_mgmt_tx)(struct ath10k *ar, struct sk_buff *skb);
 133         struct sk_buff *(*gen_mgmt_tx_send)(struct ath10k *ar,
 134                                             struct sk_buff *skb,
 135                                             dma_addr_t paddr);
 136         struct sk_buff *(*gen_dbglog_cfg)(struct ath10k *ar, u64 module_enable,
 137                                           u32 log_level);
 138         struct sk_buff *(*gen_pktlog_enable)(struct ath10k *ar, u32 filter);
 139         struct sk_buff *(*gen_pktlog_disable)(struct ath10k *ar);
 140         struct sk_buff *(*gen_pdev_set_quiet_mode)(struct ath10k *ar,
 141                                                    u32 period, u32 duration,
 142                                                    u32 next_offset,
 143                                                    u32 enabled);
 144         struct sk_buff *(*gen_pdev_get_temperature)(struct ath10k *ar);
 145         struct sk_buff *(*gen_addba_clear_resp)(struct ath10k *ar, u32 vdev_id,
 146                                                 const u8 *mac);
 147         struct sk_buff *(*gen_addba_send)(struct ath10k *ar, u32 vdev_id,
 148                                           const u8 *mac, u32 tid, u32 buf_size);
 149         struct sk_buff *(*gen_addba_set_resp)(struct ath10k *ar, u32 vdev_id,
 150                                               const u8 *mac, u32 tid,
 151                                               u32 status);
 152         struct sk_buff *(*gen_delba_send)(struct ath10k *ar, u32 vdev_id,
 153                                           const u8 *mac, u32 tid, u32 initiator,
 154                                           u32 reason);
 155         struct sk_buff *(*gen_bcn_tmpl)(struct ath10k *ar, u32 vdev_id,
 156                                         u32 tim_ie_offset, struct sk_buff *bcn,
 157                                         u32 prb_caps, u32 prb_erp,
 158                                         void *prb_ies, size_t prb_ies_len);
 159         struct sk_buff *(*gen_prb_tmpl)(struct ath10k *ar, u32 vdev_id,
 160                                         struct sk_buff *bcn);
 161         struct sk_buff *(*gen_p2p_go_bcn_ie)(struct ath10k *ar, u32 vdev_id,
 162                                              const u8 *p2p_ie);
 163         struct sk_buff *(*gen_vdev_sta_uapsd)(struct ath10k *ar, u32 vdev_id,
 164                                               const u8 peer_addr[ETH_ALEN],
 165                                               const struct wmi_sta_uapsd_auto_trig_arg *args,
 166                                               u32 num_ac);
 167         struct sk_buff *(*gen_sta_keepalive)(struct ath10k *ar,
 168                                              const struct wmi_sta_keepalive_arg *arg);
 169         struct sk_buff *(*gen_wow_enable)(struct ath10k *ar);
 170         struct sk_buff *(*gen_wow_add_wakeup_event)(struct ath10k *ar, u32 vdev_id,
 171                                                     enum wmi_wow_wakeup_event event,
 172                                                     u32 enable);
 173         struct sk_buff *(*gen_wow_host_wakeup_ind)(struct ath10k *ar);
 174         struct sk_buff *(*gen_wow_add_pattern)(struct ath10k *ar, u32 vdev_id,
 175                                                u32 pattern_id,
 176                                                const u8 *pattern,
 177                                                const u8 *mask,
 178                                                int pattern_len,
 179                                                int pattern_offset);
 180         struct sk_buff *(*gen_wow_del_pattern)(struct ath10k *ar, u32 vdev_id,
 181                                                u32 pattern_id);
 182         struct sk_buff *(*gen_update_fw_tdls_state)(struct ath10k *ar,
 183                                                     u32 vdev_id,
 184                                                     enum wmi_tdls_state state);
 185         struct sk_buff *(*gen_tdls_peer_update)(struct ath10k *ar,
 186                                                 const struct wmi_tdls_peer_update_cmd_arg *arg,
 187                                                 const struct wmi_tdls_peer_capab_arg *cap,
 188                                                 const struct wmi_channel_arg *chan);
 189         struct sk_buff *(*gen_radar_found)
 190                         (struct ath10k *ar,
 191                          const struct ath10k_radar_found_info *arg);
 192         struct sk_buff *(*gen_adaptive_qcs)(struct ath10k *ar, bool enable);
 193         struct sk_buff *(*gen_pdev_get_tpc_config)(struct ath10k *ar,
 194                                                    u32 param);
 195         void (*fw_stats_fill)(struct ath10k *ar,
 196                               struct ath10k_fw_stats *fw_stats,
 197                               char *buf);
 198         struct sk_buff *(*gen_pdev_enable_adaptive_cca)(struct ath10k *ar,
 199                                                         u8 enable,
 200                                                         u32 detect_level,
 201                                                         u32 detect_margin);
 202         struct sk_buff *(*ext_resource_config)(struct ath10k *ar,
 203                                                enum wmi_host_platform_type type,
 204                                                u32 fw_feature_bitmap);
 205         int (*get_vdev_subtype)(struct ath10k *ar,
 206                                 enum wmi_vdev_subtype subtype);
 207         struct sk_buff *(*gen_wow_config_pno)(struct ath10k *ar,
 208                                               u32 vdev_id,
 209                                               struct wmi_pno_scan_req *pno_scan);
 210         struct sk_buff *(*gen_pdev_bss_chan_info_req)
 211                                         (struct ath10k *ar,
 212                                          enum wmi_bss_survey_req_type type);
 213         struct sk_buff *(*gen_echo)(struct ath10k *ar, u32 value);
 214         struct sk_buff *(*gen_pdev_get_tpc_table_cmdid)(struct ath10k *ar,
 215                                                         u32 param);
 216         struct sk_buff *(*gen_bb_timing)
 217                         (struct ath10k *ar,
 218                          const struct wmi_bb_timing_cfg_arg *arg);
 219 
 220 };
 221 
 222 int ath10k_wmi_cmd_send(struct ath10k *ar, struct sk_buff *skb, u32 cmd_id);
 223 
 224 static inline int
 225 ath10k_wmi_rx(struct ath10k *ar, struct sk_buff *skb)
 226 {
 227         if (WARN_ON_ONCE(!ar->wmi.ops->rx))
 228                 return -EOPNOTSUPP;
 229 
 230         ar->wmi.ops->rx(ar, skb);
 231         return 0;
 232 }
 233 
 234 static inline int
 235 ath10k_wmi_map_svc(struct ath10k *ar, const __le32 *in, unsigned long *out,
 236                    size_t len)
 237 {
 238         if (!ar->wmi.ops->map_svc)
 239                 return -EOPNOTSUPP;
 240 
 241         ar->wmi.ops->map_svc(in, out, len);
 242         return 0;
 243 }
 244 
 245 static inline int
 246 ath10k_wmi_map_svc_ext(struct ath10k *ar, const __le32 *in, unsigned long *out,
 247                        size_t len)
 248 {
 249         if (!ar->wmi.ops->map_svc_ext)
 250                 return -EOPNOTSUPP;
 251 
 252         ar->wmi.ops->map_svc_ext(in, out, len);
 253         return 0;
 254 }
 255 
 256 static inline int
 257 ath10k_wmi_pull_scan(struct ath10k *ar, struct sk_buff *skb,
 258                      struct wmi_scan_ev_arg *arg)
 259 {
 260         if (!ar->wmi.ops->pull_scan)
 261                 return -EOPNOTSUPP;
 262 
 263         return ar->wmi.ops->pull_scan(ar, skb, arg);
 264 }
 265 
 266 static inline int
 267 ath10k_wmi_pull_mgmt_tx_compl(struct ath10k *ar, struct sk_buff *skb,
 268                               struct wmi_tlv_mgmt_tx_compl_ev_arg *arg)
 269 {
 270         if (!ar->wmi.ops->pull_mgmt_tx_compl)
 271                 return -EOPNOTSUPP;
 272 
 273         return ar->wmi.ops->pull_mgmt_tx_compl(ar, skb, arg);
 274 }
 275 
 276 static inline int
 277 ath10k_wmi_pull_mgmt_tx_bundle_compl(struct ath10k *ar, struct sk_buff *skb,
 278                                      struct wmi_tlv_mgmt_tx_bundle_compl_ev_arg *arg)
 279 {
 280         if (!ar->wmi.ops->pull_mgmt_tx_bundle_compl)
 281                 return -EOPNOTSUPP;
 282 
 283         return ar->wmi.ops->pull_mgmt_tx_bundle_compl(ar, skb, arg);
 284 }
 285 
 286 static inline int
 287 ath10k_wmi_pull_mgmt_rx(struct ath10k *ar, struct sk_buff *skb,
 288                         struct wmi_mgmt_rx_ev_arg *arg)
 289 {
 290         if (!ar->wmi.ops->pull_mgmt_rx)
 291                 return -EOPNOTSUPP;
 292 
 293         return ar->wmi.ops->pull_mgmt_rx(ar, skb, arg);
 294 }
 295 
 296 static inline int
 297 ath10k_wmi_pull_ch_info(struct ath10k *ar, struct sk_buff *skb,
 298                         struct wmi_ch_info_ev_arg *arg)
 299 {
 300         if (!ar->wmi.ops->pull_ch_info)
 301                 return -EOPNOTSUPP;
 302 
 303         return ar->wmi.ops->pull_ch_info(ar, skb, arg);
 304 }
 305 
 306 static inline int
 307 ath10k_wmi_pull_vdev_start(struct ath10k *ar, struct sk_buff *skb,
 308                            struct wmi_vdev_start_ev_arg *arg)
 309 {
 310         if (!ar->wmi.ops->pull_vdev_start)
 311                 return -EOPNOTSUPP;
 312 
 313         return ar->wmi.ops->pull_vdev_start(ar, skb, arg);
 314 }
 315 
 316 static inline int
 317 ath10k_wmi_pull_peer_kick(struct ath10k *ar, struct sk_buff *skb,
 318                           struct wmi_peer_kick_ev_arg *arg)
 319 {
 320         if (!ar->wmi.ops->pull_peer_kick)
 321                 return -EOPNOTSUPP;
 322 
 323         return ar->wmi.ops->pull_peer_kick(ar, skb, arg);
 324 }
 325 
 326 static inline int
 327 ath10k_wmi_pull_swba(struct ath10k *ar, struct sk_buff *skb,
 328                      struct wmi_swba_ev_arg *arg)
 329 {
 330         if (!ar->wmi.ops->pull_swba)
 331                 return -EOPNOTSUPP;
 332 
 333         return ar->wmi.ops->pull_swba(ar, skb, arg);
 334 }
 335 
 336 static inline int
 337 ath10k_wmi_pull_phyerr_hdr(struct ath10k *ar, struct sk_buff *skb,
 338                            struct wmi_phyerr_hdr_arg *arg)
 339 {
 340         if (!ar->wmi.ops->pull_phyerr_hdr)
 341                 return -EOPNOTSUPP;
 342 
 343         return ar->wmi.ops->pull_phyerr_hdr(ar, skb, arg);
 344 }
 345 
 346 static inline int
 347 ath10k_wmi_pull_phyerr(struct ath10k *ar, const void *phyerr_buf,
 348                        int left_len, struct wmi_phyerr_ev_arg *arg)
 349 {
 350         if (!ar->wmi.ops->pull_phyerr)
 351                 return -EOPNOTSUPP;
 352 
 353         return ar->wmi.ops->pull_phyerr(ar, phyerr_buf, left_len, arg);
 354 }
 355 
 356 static inline int
 357 ath10k_wmi_pull_svc_rdy(struct ath10k *ar, struct sk_buff *skb,
 358                         struct wmi_svc_rdy_ev_arg *arg)
 359 {
 360         if (!ar->wmi.ops->pull_svc_rdy)
 361                 return -EOPNOTSUPP;
 362 
 363         return ar->wmi.ops->pull_svc_rdy(ar, skb, arg);
 364 }
 365 
 366 static inline int
 367 ath10k_wmi_pull_rdy(struct ath10k *ar, struct sk_buff *skb,
 368                     struct wmi_rdy_ev_arg *arg)
 369 {
 370         if (!ar->wmi.ops->pull_rdy)
 371                 return -EOPNOTSUPP;
 372 
 373         return ar->wmi.ops->pull_rdy(ar, skb, arg);
 374 }
 375 
 376 static inline int
 377 ath10k_wmi_pull_svc_avail(struct ath10k *ar, struct sk_buff *skb,
 378                           struct wmi_svc_avail_ev_arg *arg)
 379 {
 380         if (!ar->wmi.ops->pull_svc_avail)
 381                 return -EOPNOTSUPP;
 382         return ar->wmi.ops->pull_svc_avail(ar, skb, arg);
 383 }
 384 
 385 static inline int
 386 ath10k_wmi_pull_fw_stats(struct ath10k *ar, struct sk_buff *skb,
 387                          struct ath10k_fw_stats *stats)
 388 {
 389         if (!ar->wmi.ops->pull_fw_stats)
 390                 return -EOPNOTSUPP;
 391 
 392         return ar->wmi.ops->pull_fw_stats(ar, skb, stats);
 393 }
 394 
 395 static inline int
 396 ath10k_wmi_pull_roam_ev(struct ath10k *ar, struct sk_buff *skb,
 397                         struct wmi_roam_ev_arg *arg)
 398 {
 399         if (!ar->wmi.ops->pull_roam_ev)
 400                 return -EOPNOTSUPP;
 401 
 402         return ar->wmi.ops->pull_roam_ev(ar, skb, arg);
 403 }
 404 
 405 static inline int
 406 ath10k_wmi_pull_wow_event(struct ath10k *ar, struct sk_buff *skb,
 407                           struct wmi_wow_ev_arg *arg)
 408 {
 409         if (!ar->wmi.ops->pull_wow_event)
 410                 return -EOPNOTSUPP;
 411 
 412         return ar->wmi.ops->pull_wow_event(ar, skb, arg);
 413 }
 414 
 415 static inline int
 416 ath10k_wmi_pull_echo_ev(struct ath10k *ar, struct sk_buff *skb,
 417                         struct wmi_echo_ev_arg *arg)
 418 {
 419         if (!ar->wmi.ops->pull_echo_ev)
 420                 return -EOPNOTSUPP;
 421 
 422         return ar->wmi.ops->pull_echo_ev(ar, skb, arg);
 423 }
 424 
 425 static inline int
 426 ath10k_wmi_pull_dfs_status(struct ath10k *ar, struct sk_buff *skb,
 427                            struct wmi_dfs_status_ev_arg *arg)
 428 {
 429         if (!ar->wmi.ops->pull_dfs_status_ev)
 430                 return -EOPNOTSUPP;
 431 
 432         return ar->wmi.ops->pull_dfs_status_ev(ar, skb, arg);
 433 }
 434 
 435 static inline enum wmi_txbf_conf
 436 ath10k_wmi_get_txbf_conf_scheme(struct ath10k *ar)
 437 {
 438         if (!ar->wmi.ops->get_txbf_conf_scheme)
 439                 return WMI_TXBF_CONF_UNSUPPORTED;
 440 
 441         return ar->wmi.ops->get_txbf_conf_scheme(ar);
 442 }
 443 
 444 static inline int
 445 ath10k_wmi_mgmt_tx_send(struct ath10k *ar, struct sk_buff *msdu,
 446                         dma_addr_t paddr)
 447 {
 448         struct sk_buff *skb;
 449         int ret;
 450 
 451         if (!ar->wmi.ops->gen_mgmt_tx_send)
 452                 return -EOPNOTSUPP;
 453 
 454         skb = ar->wmi.ops->gen_mgmt_tx_send(ar, msdu, paddr);
 455         if (IS_ERR(skb))
 456                 return PTR_ERR(skb);
 457 
 458         ret = ath10k_wmi_cmd_send(ar, skb,
 459                                   ar->wmi.cmd->mgmt_tx_send_cmdid);
 460         if (ret)
 461                 return ret;
 462 
 463         return 0;
 464 }
 465 
 466 static inline int
 467 ath10k_wmi_mgmt_tx(struct ath10k *ar, struct sk_buff *msdu)
 468 {
 469         struct ieee80211_tx_info *info = IEEE80211_SKB_CB(msdu);
 470         struct sk_buff *skb;
 471         int ret;
 472 
 473         if (!ar->wmi.ops->gen_mgmt_tx)
 474                 return -EOPNOTSUPP;
 475 
 476         skb = ar->wmi.ops->gen_mgmt_tx(ar, msdu);
 477         if (IS_ERR(skb))
 478                 return PTR_ERR(skb);
 479 
 480         ret = ath10k_wmi_cmd_send(ar, skb,
 481                                   ar->wmi.cmd->mgmt_tx_cmdid);
 482         if (ret)
 483                 return ret;
 484 
 485         /* FIXME There's no ACK event for Management Tx. This probably
 486          * shouldn't be called here either.
 487          */
 488         info->flags |= IEEE80211_TX_STAT_ACK;
 489         ieee80211_tx_status_irqsafe(ar->hw, msdu);
 490 
 491         return 0;
 492 }
 493 
 494 static inline int
 495 ath10k_wmi_pdev_set_regdomain(struct ath10k *ar, u16 rd, u16 rd2g, u16 rd5g,
 496                               u16 ctl2g, u16 ctl5g,
 497                               enum wmi_dfs_region dfs_reg)
 498 {
 499         struct sk_buff *skb;
 500 
 501         if (!ar->wmi.ops->gen_pdev_set_rd)
 502                 return -EOPNOTSUPP;
 503 
 504         skb = ar->wmi.ops->gen_pdev_set_rd(ar, rd, rd2g, rd5g, ctl2g, ctl5g,
 505                                            dfs_reg);
 506         if (IS_ERR(skb))
 507                 return PTR_ERR(skb);
 508 
 509         return ath10k_wmi_cmd_send(ar, skb,
 510                                    ar->wmi.cmd->pdev_set_regdomain_cmdid);
 511 }
 512 
 513 static inline int
 514 ath10k_wmi_pdev_set_base_macaddr(struct ath10k *ar, const u8 macaddr[ETH_ALEN])
 515 {
 516         struct sk_buff *skb;
 517 
 518         if (!ar->wmi.ops->gen_pdev_set_base_macaddr)
 519                 return -EOPNOTSUPP;
 520 
 521         skb = ar->wmi.ops->gen_pdev_set_base_macaddr(ar, macaddr);
 522         if (IS_ERR(skb))
 523                 return PTR_ERR(skb);
 524 
 525         return ath10k_wmi_cmd_send(ar, skb,
 526                                    ar->wmi.cmd->pdev_set_base_macaddr_cmdid);
 527 }
 528 
 529 static inline int
 530 ath10k_wmi_pdev_suspend_target(struct ath10k *ar, u32 suspend_opt)
 531 {
 532         struct sk_buff *skb;
 533 
 534         if (!ar->wmi.ops->gen_pdev_suspend)
 535                 return -EOPNOTSUPP;
 536 
 537         skb = ar->wmi.ops->gen_pdev_suspend(ar, suspend_opt);
 538         if (IS_ERR(skb))
 539                 return PTR_ERR(skb);
 540 
 541         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->pdev_suspend_cmdid);
 542 }
 543 
 544 static inline int
 545 ath10k_wmi_pdev_resume_target(struct ath10k *ar)
 546 {
 547         struct sk_buff *skb;
 548 
 549         if (!ar->wmi.ops->gen_pdev_resume)
 550                 return -EOPNOTSUPP;
 551 
 552         skb = ar->wmi.ops->gen_pdev_resume(ar);
 553         if (IS_ERR(skb))
 554                 return PTR_ERR(skb);
 555 
 556         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->pdev_resume_cmdid);
 557 }
 558 
 559 static inline int
 560 ath10k_wmi_pdev_set_param(struct ath10k *ar, u32 id, u32 value)
 561 {
 562         struct sk_buff *skb;
 563 
 564         if (!ar->wmi.ops->gen_pdev_set_param)
 565                 return -EOPNOTSUPP;
 566 
 567         skb = ar->wmi.ops->gen_pdev_set_param(ar, id, value);
 568         if (IS_ERR(skb))
 569                 return PTR_ERR(skb);
 570 
 571         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->pdev_set_param_cmdid);
 572 }
 573 
 574 static inline int
 575 ath10k_wmi_cmd_init(struct ath10k *ar)
 576 {
 577         struct sk_buff *skb;
 578 
 579         if (!ar->wmi.ops->gen_init)
 580                 return -EOPNOTSUPP;
 581 
 582         skb = ar->wmi.ops->gen_init(ar);
 583         if (IS_ERR(skb))
 584                 return PTR_ERR(skb);
 585 
 586         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->init_cmdid);
 587 }
 588 
 589 static inline int
 590 ath10k_wmi_start_scan(struct ath10k *ar,
 591                       const struct wmi_start_scan_arg *arg)
 592 {
 593         struct sk_buff *skb;
 594 
 595         if (!ar->wmi.ops->gen_start_scan)
 596                 return -EOPNOTSUPP;
 597 
 598         skb = ar->wmi.ops->gen_start_scan(ar, arg);
 599         if (IS_ERR(skb))
 600                 return PTR_ERR(skb);
 601 
 602         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->start_scan_cmdid);
 603 }
 604 
 605 static inline int
 606 ath10k_wmi_stop_scan(struct ath10k *ar, const struct wmi_stop_scan_arg *arg)
 607 {
 608         struct sk_buff *skb;
 609 
 610         if (!ar->wmi.ops->gen_stop_scan)
 611                 return -EOPNOTSUPP;
 612 
 613         skb = ar->wmi.ops->gen_stop_scan(ar, arg);
 614         if (IS_ERR(skb))
 615                 return PTR_ERR(skb);
 616 
 617         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->stop_scan_cmdid);
 618 }
 619 
 620 static inline int
 621 ath10k_wmi_vdev_create(struct ath10k *ar, u32 vdev_id,
 622                        enum wmi_vdev_type type,
 623                        enum wmi_vdev_subtype subtype,
 624                        const u8 macaddr[ETH_ALEN])
 625 {
 626         struct sk_buff *skb;
 627 
 628         if (!ar->wmi.ops->gen_vdev_create)
 629                 return -EOPNOTSUPP;
 630 
 631         skb = ar->wmi.ops->gen_vdev_create(ar, vdev_id, type, subtype, macaddr);
 632         if (IS_ERR(skb))
 633                 return PTR_ERR(skb);
 634 
 635         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_create_cmdid);
 636 }
 637 
 638 static inline int
 639 ath10k_wmi_vdev_delete(struct ath10k *ar, u32 vdev_id)
 640 {
 641         struct sk_buff *skb;
 642 
 643         if (!ar->wmi.ops->gen_vdev_delete)
 644                 return -EOPNOTSUPP;
 645 
 646         skb = ar->wmi.ops->gen_vdev_delete(ar, vdev_id);
 647         if (IS_ERR(skb))
 648                 return PTR_ERR(skb);
 649 
 650         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_delete_cmdid);
 651 }
 652 
 653 static inline int
 654 ath10k_wmi_vdev_start(struct ath10k *ar,
 655                       const struct wmi_vdev_start_request_arg *arg)
 656 {
 657         struct sk_buff *skb;
 658 
 659         if (!ar->wmi.ops->gen_vdev_start)
 660                 return -EOPNOTSUPP;
 661 
 662         skb = ar->wmi.ops->gen_vdev_start(ar, arg, false);
 663         if (IS_ERR(skb))
 664                 return PTR_ERR(skb);
 665 
 666         return ath10k_wmi_cmd_send(ar, skb,
 667                                    ar->wmi.cmd->vdev_start_request_cmdid);
 668 }
 669 
 670 static inline int
 671 ath10k_wmi_vdev_restart(struct ath10k *ar,
 672                         const struct wmi_vdev_start_request_arg *arg)
 673 {
 674         struct sk_buff *skb;
 675 
 676         if (!ar->wmi.ops->gen_vdev_start)
 677                 return -EOPNOTSUPP;
 678 
 679         skb = ar->wmi.ops->gen_vdev_start(ar, arg, true);
 680         if (IS_ERR(skb))
 681                 return PTR_ERR(skb);
 682 
 683         return ath10k_wmi_cmd_send(ar, skb,
 684                                    ar->wmi.cmd->vdev_restart_request_cmdid);
 685 }
 686 
 687 static inline int
 688 ath10k_wmi_vdev_stop(struct ath10k *ar, u32 vdev_id)
 689 {
 690         struct sk_buff *skb;
 691 
 692         if (!ar->wmi.ops->gen_vdev_stop)
 693                 return -EOPNOTSUPP;
 694 
 695         skb = ar->wmi.ops->gen_vdev_stop(ar, vdev_id);
 696         if (IS_ERR(skb))
 697                 return PTR_ERR(skb);
 698 
 699         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_stop_cmdid);
 700 }
 701 
 702 static inline int
 703 ath10k_wmi_vdev_up(struct ath10k *ar, u32 vdev_id, u32 aid, const u8 *bssid)
 704 {
 705         struct sk_buff *skb;
 706 
 707         if (!ar->wmi.ops->gen_vdev_up)
 708                 return -EOPNOTSUPP;
 709 
 710         skb = ar->wmi.ops->gen_vdev_up(ar, vdev_id, aid, bssid);
 711         if (IS_ERR(skb))
 712                 return PTR_ERR(skb);
 713 
 714         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_up_cmdid);
 715 }
 716 
 717 static inline int
 718 ath10k_wmi_vdev_down(struct ath10k *ar, u32 vdev_id)
 719 {
 720         struct sk_buff *skb;
 721 
 722         if (!ar->wmi.ops->gen_vdev_down)
 723                 return -EOPNOTSUPP;
 724 
 725         skb = ar->wmi.ops->gen_vdev_down(ar, vdev_id);
 726         if (IS_ERR(skb))
 727                 return PTR_ERR(skb);
 728 
 729         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_down_cmdid);
 730 }
 731 
 732 static inline int
 733 ath10k_wmi_vdev_set_param(struct ath10k *ar, u32 vdev_id, u32 param_id,
 734                           u32 param_value)
 735 {
 736         struct sk_buff *skb;
 737 
 738         if (!ar->wmi.ops->gen_vdev_set_param)
 739                 return -EOPNOTSUPP;
 740 
 741         skb = ar->wmi.ops->gen_vdev_set_param(ar, vdev_id, param_id,
 742                                               param_value);
 743         if (IS_ERR(skb))
 744                 return PTR_ERR(skb);
 745 
 746         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_set_param_cmdid);
 747 }
 748 
 749 static inline int
 750 ath10k_wmi_vdev_install_key(struct ath10k *ar,
 751                             const struct wmi_vdev_install_key_arg *arg)
 752 {
 753         struct sk_buff *skb;
 754 
 755         if (!ar->wmi.ops->gen_vdev_install_key)
 756                 return -EOPNOTSUPP;
 757 
 758         skb = ar->wmi.ops->gen_vdev_install_key(ar, arg);
 759         if (IS_ERR(skb))
 760                 return PTR_ERR(skb);
 761 
 762         return ath10k_wmi_cmd_send(ar, skb,
 763                                    ar->wmi.cmd->vdev_install_key_cmdid);
 764 }
 765 
 766 static inline int
 767 ath10k_wmi_vdev_spectral_conf(struct ath10k *ar,
 768                               const struct wmi_vdev_spectral_conf_arg *arg)
 769 {
 770         struct sk_buff *skb;
 771         u32 cmd_id;
 772 
 773         if (!ar->wmi.ops->gen_vdev_spectral_conf)
 774                 return -EOPNOTSUPP;
 775 
 776         skb = ar->wmi.ops->gen_vdev_spectral_conf(ar, arg);
 777         if (IS_ERR(skb))
 778                 return PTR_ERR(skb);
 779 
 780         cmd_id = ar->wmi.cmd->vdev_spectral_scan_configure_cmdid;
 781         return ath10k_wmi_cmd_send(ar, skb, cmd_id);
 782 }
 783 
 784 static inline int
 785 ath10k_wmi_vdev_spectral_enable(struct ath10k *ar, u32 vdev_id, u32 trigger,
 786                                 u32 enable)
 787 {
 788         struct sk_buff *skb;
 789         u32 cmd_id;
 790 
 791         if (!ar->wmi.ops->gen_vdev_spectral_enable)
 792                 return -EOPNOTSUPP;
 793 
 794         skb = ar->wmi.ops->gen_vdev_spectral_enable(ar, vdev_id, trigger,
 795                                                     enable);
 796         if (IS_ERR(skb))
 797                 return PTR_ERR(skb);
 798 
 799         cmd_id = ar->wmi.cmd->vdev_spectral_scan_enable_cmdid;
 800         return ath10k_wmi_cmd_send(ar, skb, cmd_id);
 801 }
 802 
 803 static inline int
 804 ath10k_wmi_vdev_sta_uapsd(struct ath10k *ar, u32 vdev_id,
 805                           const u8 peer_addr[ETH_ALEN],
 806                           const struct wmi_sta_uapsd_auto_trig_arg *args,
 807                           u32 num_ac)
 808 {
 809         struct sk_buff *skb;
 810         u32 cmd_id;
 811 
 812         if (!ar->wmi.ops->gen_vdev_sta_uapsd)
 813                 return -EOPNOTSUPP;
 814 
 815         skb = ar->wmi.ops->gen_vdev_sta_uapsd(ar, vdev_id, peer_addr, args,
 816                                               num_ac);
 817         if (IS_ERR(skb))
 818                 return PTR_ERR(skb);
 819 
 820         cmd_id = ar->wmi.cmd->sta_uapsd_auto_trig_cmdid;
 821         return ath10k_wmi_cmd_send(ar, skb, cmd_id);
 822 }
 823 
 824 static inline int
 825 ath10k_wmi_vdev_wmm_conf(struct ath10k *ar, u32 vdev_id,
 826                          const struct wmi_wmm_params_all_arg *arg)
 827 {
 828         struct sk_buff *skb;
 829         u32 cmd_id;
 830 
 831         skb = ar->wmi.ops->gen_vdev_wmm_conf(ar, vdev_id, arg);
 832         if (IS_ERR(skb))
 833                 return PTR_ERR(skb);
 834 
 835         cmd_id = ar->wmi.cmd->vdev_set_wmm_params_cmdid;
 836         return ath10k_wmi_cmd_send(ar, skb, cmd_id);
 837 }
 838 
 839 static inline int
 840 ath10k_wmi_peer_create(struct ath10k *ar, u32 vdev_id,
 841                        const u8 peer_addr[ETH_ALEN],
 842                        enum wmi_peer_type peer_type)
 843 {
 844         struct sk_buff *skb;
 845 
 846         if (!ar->wmi.ops->gen_peer_create)
 847                 return -EOPNOTSUPP;
 848 
 849         skb = ar->wmi.ops->gen_peer_create(ar, vdev_id, peer_addr, peer_type);
 850         if (IS_ERR(skb))
 851                 return PTR_ERR(skb);
 852 
 853         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->peer_create_cmdid);
 854 }
 855 
 856 static inline int
 857 ath10k_wmi_peer_delete(struct ath10k *ar, u32 vdev_id,
 858                        const u8 peer_addr[ETH_ALEN])
 859 {
 860         struct sk_buff *skb;
 861 
 862         if (!ar->wmi.ops->gen_peer_delete)
 863                 return -EOPNOTSUPP;
 864 
 865         skb = ar->wmi.ops->gen_peer_delete(ar, vdev_id, peer_addr);
 866         if (IS_ERR(skb))
 867                 return PTR_ERR(skb);
 868 
 869         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->peer_delete_cmdid);
 870 }
 871 
 872 static inline int
 873 ath10k_wmi_peer_flush(struct ath10k *ar, u32 vdev_id,
 874                       const u8 peer_addr[ETH_ALEN], u32 tid_bitmap)
 875 {
 876         struct sk_buff *skb;
 877 
 878         if (!ar->wmi.ops->gen_peer_flush)
 879                 return -EOPNOTSUPP;
 880 
 881         skb = ar->wmi.ops->gen_peer_flush(ar, vdev_id, peer_addr, tid_bitmap);
 882         if (IS_ERR(skb))
 883                 return PTR_ERR(skb);
 884 
 885         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->peer_flush_tids_cmdid);
 886 }
 887 
 888 static inline int
 889 ath10k_wmi_peer_set_param(struct ath10k *ar, u32 vdev_id, const u8 *peer_addr,
 890                           enum wmi_peer_param param_id, u32 param_value)
 891 {
 892         struct sk_buff *skb;
 893 
 894         if (!ar->wmi.ops->gen_peer_set_param)
 895                 return -EOPNOTSUPP;
 896 
 897         skb = ar->wmi.ops->gen_peer_set_param(ar, vdev_id, peer_addr, param_id,
 898                                               param_value);
 899         if (IS_ERR(skb))
 900                 return PTR_ERR(skb);
 901 
 902         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->peer_set_param_cmdid);
 903 }
 904 
 905 static inline int
 906 ath10k_wmi_set_psmode(struct ath10k *ar, u32 vdev_id,
 907                       enum wmi_sta_ps_mode psmode)
 908 {
 909         struct sk_buff *skb;
 910 
 911         if (!ar->wmi.ops->gen_set_psmode)
 912                 return -EOPNOTSUPP;
 913 
 914         skb = ar->wmi.ops->gen_set_psmode(ar, vdev_id, psmode);
 915         if (IS_ERR(skb))
 916                 return PTR_ERR(skb);
 917 
 918         return ath10k_wmi_cmd_send(ar, skb,
 919                                    ar->wmi.cmd->sta_powersave_mode_cmdid);
 920 }
 921 
 922 static inline int
 923 ath10k_wmi_set_sta_ps_param(struct ath10k *ar, u32 vdev_id,
 924                             enum wmi_sta_powersave_param param_id, u32 value)
 925 {
 926         struct sk_buff *skb;
 927 
 928         if (!ar->wmi.ops->gen_set_sta_ps)
 929                 return -EOPNOTSUPP;
 930 
 931         skb = ar->wmi.ops->gen_set_sta_ps(ar, vdev_id, param_id, value);
 932         if (IS_ERR(skb))
 933                 return PTR_ERR(skb);
 934 
 935         return ath10k_wmi_cmd_send(ar, skb,
 936                                    ar->wmi.cmd->sta_powersave_param_cmdid);
 937 }
 938 
 939 static inline int
 940 ath10k_wmi_set_ap_ps_param(struct ath10k *ar, u32 vdev_id, const u8 *mac,
 941                            enum wmi_ap_ps_peer_param param_id, u32 value)
 942 {
 943         struct sk_buff *skb;
 944 
 945         if (!ar->wmi.ops->gen_set_ap_ps)
 946                 return -EOPNOTSUPP;
 947 
 948         skb = ar->wmi.ops->gen_set_ap_ps(ar, vdev_id, mac, param_id, value);
 949         if (IS_ERR(skb))
 950                 return PTR_ERR(skb);
 951 
 952         return ath10k_wmi_cmd_send(ar, skb,
 953                                    ar->wmi.cmd->ap_ps_peer_param_cmdid);
 954 }
 955 
 956 static inline int
 957 ath10k_wmi_scan_chan_list(struct ath10k *ar,
 958                           const struct wmi_scan_chan_list_arg *arg)
 959 {
 960         struct sk_buff *skb;
 961 
 962         if (!ar->wmi.ops->gen_scan_chan_list)
 963                 return -EOPNOTSUPP;
 964 
 965         skb = ar->wmi.ops->gen_scan_chan_list(ar, arg);
 966         if (IS_ERR(skb))
 967                 return PTR_ERR(skb);
 968 
 969         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->scan_chan_list_cmdid);
 970 }
 971 
 972 static inline int
 973 ath10k_wmi_scan_prob_req_oui(struct ath10k *ar, const u8 mac_addr[ETH_ALEN])
 974 {
 975         struct sk_buff *skb;
 976         u32 prob_req_oui;
 977 
 978         prob_req_oui = (((u32)mac_addr[0]) << 16) |
 979                        (((u32)mac_addr[1]) << 8) | mac_addr[2];
 980 
 981         if (!ar->wmi.ops->gen_scan_prob_req_oui)
 982                 return -EOPNOTSUPP;
 983 
 984         skb = ar->wmi.ops->gen_scan_prob_req_oui(ar, prob_req_oui);
 985         if (IS_ERR(skb))
 986                 return PTR_ERR(skb);
 987 
 988         return ath10k_wmi_cmd_send(ar, skb,
 989                         ar->wmi.cmd->scan_prob_req_oui_cmdid);
 990 }
 991 
 992 static inline int
 993 ath10k_wmi_peer_assoc(struct ath10k *ar,
 994                       const struct wmi_peer_assoc_complete_arg *arg)
 995 {
 996         struct sk_buff *skb;
 997 
 998         if (!ar->wmi.ops->gen_peer_assoc)
 999                 return -EOPNOTSUPP;
1000 
1001         skb = ar->wmi.ops->gen_peer_assoc(ar, arg);
1002         if (IS_ERR(skb))
1003                 return PTR_ERR(skb);
1004 
1005         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->peer_assoc_cmdid);
1006 }
1007 
1008 static inline int
1009 ath10k_wmi_beacon_send_ref_nowait(struct ath10k *ar, u32 vdev_id,
1010                                   const void *bcn, size_t bcn_len,
1011                                   u32 bcn_paddr, bool dtim_zero,
1012                                   bool deliver_cab)
1013 {
1014         struct sk_buff *skb;
1015         int ret;
1016 
1017         if (!ar->wmi.ops->gen_beacon_dma)
1018                 return -EOPNOTSUPP;
1019 
1020         skb = ar->wmi.ops->gen_beacon_dma(ar, vdev_id, bcn, bcn_len, bcn_paddr,
1021                                           dtim_zero, deliver_cab);
1022         if (IS_ERR(skb))
1023                 return PTR_ERR(skb);
1024 
1025         ret = ath10k_wmi_cmd_send_nowait(ar, skb,
1026                                          ar->wmi.cmd->pdev_send_bcn_cmdid);
1027         if (ret) {
1028                 dev_kfree_skb(skb);
1029                 return ret;
1030         }
1031 
1032         return 0;
1033 }
1034 
1035 static inline int
1036 ath10k_wmi_pdev_set_wmm_params(struct ath10k *ar,
1037                                const struct wmi_wmm_params_all_arg *arg)
1038 {
1039         struct sk_buff *skb;
1040 
1041         if (!ar->wmi.ops->gen_pdev_set_wmm)
1042                 return -EOPNOTSUPP;
1043 
1044         skb = ar->wmi.ops->gen_pdev_set_wmm(ar, arg);
1045         if (IS_ERR(skb))
1046                 return PTR_ERR(skb);
1047 
1048         return ath10k_wmi_cmd_send(ar, skb,
1049                                    ar->wmi.cmd->pdev_set_wmm_params_cmdid);
1050 }
1051 
1052 static inline int
1053 ath10k_wmi_request_stats(struct ath10k *ar, u32 stats_mask)
1054 {
1055         struct sk_buff *skb;
1056 
1057         if (!ar->wmi.ops->gen_request_stats)
1058                 return -EOPNOTSUPP;
1059 
1060         skb = ar->wmi.ops->gen_request_stats(ar, stats_mask);
1061         if (IS_ERR(skb))
1062                 return PTR_ERR(skb);
1063 
1064         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->request_stats_cmdid);
1065 }
1066 
1067 static inline int
1068 ath10k_wmi_force_fw_hang(struct ath10k *ar,
1069                          enum wmi_force_fw_hang_type type, u32 delay_ms)
1070 {
1071         struct sk_buff *skb;
1072 
1073         if (!ar->wmi.ops->gen_force_fw_hang)
1074                 return -EOPNOTSUPP;
1075 
1076         skb = ar->wmi.ops->gen_force_fw_hang(ar, type, delay_ms);
1077         if (IS_ERR(skb))
1078                 return PTR_ERR(skb);
1079 
1080         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->force_fw_hang_cmdid);
1081 }
1082 
1083 static inline int
1084 ath10k_wmi_dbglog_cfg(struct ath10k *ar, u64 module_enable, u32 log_level)
1085 {
1086         struct sk_buff *skb;
1087 
1088         if (!ar->wmi.ops->gen_dbglog_cfg)
1089                 return -EOPNOTSUPP;
1090 
1091         skb = ar->wmi.ops->gen_dbglog_cfg(ar, module_enable, log_level);
1092         if (IS_ERR(skb))
1093                 return PTR_ERR(skb);
1094 
1095         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->dbglog_cfg_cmdid);
1096 }
1097 
1098 static inline int
1099 ath10k_wmi_pdev_pktlog_enable(struct ath10k *ar, u32 filter)
1100 {
1101         struct sk_buff *skb;
1102 
1103         if (!ar->wmi.ops->gen_pktlog_enable)
1104                 return -EOPNOTSUPP;
1105 
1106         skb = ar->wmi.ops->gen_pktlog_enable(ar, filter);
1107         if (IS_ERR(skb))
1108                 return PTR_ERR(skb);
1109 
1110         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->pdev_pktlog_enable_cmdid);
1111 }
1112 
1113 static inline int
1114 ath10k_wmi_pdev_pktlog_disable(struct ath10k *ar)
1115 {
1116         struct sk_buff *skb;
1117 
1118         if (!ar->wmi.ops->gen_pktlog_disable)
1119                 return -EOPNOTSUPP;
1120 
1121         skb = ar->wmi.ops->gen_pktlog_disable(ar);
1122         if (IS_ERR(skb))
1123                 return PTR_ERR(skb);
1124 
1125         return ath10k_wmi_cmd_send(ar, skb,
1126                                    ar->wmi.cmd->pdev_pktlog_disable_cmdid);
1127 }
1128 
1129 static inline int
1130 ath10k_wmi_pdev_set_quiet_mode(struct ath10k *ar, u32 period, u32 duration,
1131                                u32 next_offset, u32 enabled)
1132 {
1133         struct sk_buff *skb;
1134 
1135         if (!ar->wmi.ops->gen_pdev_set_quiet_mode)
1136                 return -EOPNOTSUPP;
1137 
1138         skb = ar->wmi.ops->gen_pdev_set_quiet_mode(ar, period, duration,
1139                                                    next_offset, enabled);
1140         if (IS_ERR(skb))
1141                 return PTR_ERR(skb);
1142 
1143         return ath10k_wmi_cmd_send(ar, skb,
1144                                    ar->wmi.cmd->pdev_set_quiet_mode_cmdid);
1145 }
1146 
1147 static inline int
1148 ath10k_wmi_pdev_get_temperature(struct ath10k *ar)
1149 {
1150         struct sk_buff *skb;
1151 
1152         if (!ar->wmi.ops->gen_pdev_get_temperature)
1153                 return -EOPNOTSUPP;
1154 
1155         skb = ar->wmi.ops->gen_pdev_get_temperature(ar);
1156         if (IS_ERR(skb))
1157                 return PTR_ERR(skb);
1158 
1159         return ath10k_wmi_cmd_send(ar, skb,
1160                                    ar->wmi.cmd->pdev_get_temperature_cmdid);
1161 }
1162 
1163 static inline int
1164 ath10k_wmi_addba_clear_resp(struct ath10k *ar, u32 vdev_id, const u8 *mac)
1165 {
1166         struct sk_buff *skb;
1167 
1168         if (!ar->wmi.ops->gen_addba_clear_resp)
1169                 return -EOPNOTSUPP;
1170 
1171         skb = ar->wmi.ops->gen_addba_clear_resp(ar, vdev_id, mac);
1172         if (IS_ERR(skb))
1173                 return PTR_ERR(skb);
1174 
1175         return ath10k_wmi_cmd_send(ar, skb,
1176                                    ar->wmi.cmd->addba_clear_resp_cmdid);
1177 }
1178 
1179 static inline int
1180 ath10k_wmi_addba_send(struct ath10k *ar, u32 vdev_id, const u8 *mac,
1181                       u32 tid, u32 buf_size)
1182 {
1183         struct sk_buff *skb;
1184 
1185         if (!ar->wmi.ops->gen_addba_send)
1186                 return -EOPNOTSUPP;
1187 
1188         skb = ar->wmi.ops->gen_addba_send(ar, vdev_id, mac, tid, buf_size);
1189         if (IS_ERR(skb))
1190                 return PTR_ERR(skb);
1191 
1192         return ath10k_wmi_cmd_send(ar, skb,
1193                                    ar->wmi.cmd->addba_send_cmdid);
1194 }
1195 
1196 static inline int
1197 ath10k_wmi_addba_set_resp(struct ath10k *ar, u32 vdev_id, const u8 *mac,
1198                           u32 tid, u32 status)
1199 {
1200         struct sk_buff *skb;
1201 
1202         if (!ar->wmi.ops->gen_addba_set_resp)
1203                 return -EOPNOTSUPP;
1204 
1205         skb = ar->wmi.ops->gen_addba_set_resp(ar, vdev_id, mac, tid, status);
1206         if (IS_ERR(skb))
1207                 return PTR_ERR(skb);
1208 
1209         return ath10k_wmi_cmd_send(ar, skb,
1210                                    ar->wmi.cmd->addba_set_resp_cmdid);
1211 }
1212 
1213 static inline int
1214 ath10k_wmi_delba_send(struct ath10k *ar, u32 vdev_id, const u8 *mac,
1215                       u32 tid, u32 initiator, u32 reason)
1216 {
1217         struct sk_buff *skb;
1218 
1219         if (!ar->wmi.ops->gen_delba_send)
1220                 return -EOPNOTSUPP;
1221 
1222         skb = ar->wmi.ops->gen_delba_send(ar, vdev_id, mac, tid, initiator,
1223                                           reason);
1224         if (IS_ERR(skb))
1225                 return PTR_ERR(skb);
1226 
1227         return ath10k_wmi_cmd_send(ar, skb,
1228                                    ar->wmi.cmd->delba_send_cmdid);
1229 }
1230 
1231 static inline int
1232 ath10k_wmi_bcn_tmpl(struct ath10k *ar, u32 vdev_id, u32 tim_ie_offset,
1233                     struct sk_buff *bcn, u32 prb_caps, u32 prb_erp,
1234                     void *prb_ies, size_t prb_ies_len)
1235 {
1236         struct sk_buff *skb;
1237 
1238         if (!ar->wmi.ops->gen_bcn_tmpl)
1239                 return -EOPNOTSUPP;
1240 
1241         skb = ar->wmi.ops->gen_bcn_tmpl(ar, vdev_id, tim_ie_offset, bcn,
1242                                         prb_caps, prb_erp, prb_ies,
1243                                         prb_ies_len);
1244         if (IS_ERR(skb))
1245                 return PTR_ERR(skb);
1246 
1247         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->bcn_tmpl_cmdid);
1248 }
1249 
1250 static inline int
1251 ath10k_wmi_prb_tmpl(struct ath10k *ar, u32 vdev_id, struct sk_buff *prb)
1252 {
1253         struct sk_buff *skb;
1254 
1255         if (!ar->wmi.ops->gen_prb_tmpl)
1256                 return -EOPNOTSUPP;
1257 
1258         skb = ar->wmi.ops->gen_prb_tmpl(ar, vdev_id, prb);
1259         if (IS_ERR(skb))
1260                 return PTR_ERR(skb);
1261 
1262         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->prb_tmpl_cmdid);
1263 }
1264 
1265 static inline int
1266 ath10k_wmi_p2p_go_bcn_ie(struct ath10k *ar, u32 vdev_id, const u8 *p2p_ie)
1267 {
1268         struct sk_buff *skb;
1269 
1270         if (!ar->wmi.ops->gen_p2p_go_bcn_ie)
1271                 return -EOPNOTSUPP;
1272 
1273         skb = ar->wmi.ops->gen_p2p_go_bcn_ie(ar, vdev_id, p2p_ie);
1274         if (IS_ERR(skb))
1275                 return PTR_ERR(skb);
1276 
1277         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->p2p_go_set_beacon_ie);
1278 }
1279 
1280 static inline int
1281 ath10k_wmi_sta_keepalive(struct ath10k *ar,
1282                          const struct wmi_sta_keepalive_arg *arg)
1283 {
1284         struct sk_buff *skb;
1285         u32 cmd_id;
1286 
1287         if (!ar->wmi.ops->gen_sta_keepalive)
1288                 return -EOPNOTSUPP;
1289 
1290         skb = ar->wmi.ops->gen_sta_keepalive(ar, arg);
1291         if (IS_ERR(skb))
1292                 return PTR_ERR(skb);
1293 
1294         cmd_id = ar->wmi.cmd->sta_keepalive_cmd;
1295         return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1296 }
1297 
1298 static inline int
1299 ath10k_wmi_wow_enable(struct ath10k *ar)
1300 {
1301         struct sk_buff *skb;
1302         u32 cmd_id;
1303 
1304         if (!ar->wmi.ops->gen_wow_enable)
1305                 return -EOPNOTSUPP;
1306 
1307         skb = ar->wmi.ops->gen_wow_enable(ar);
1308         if (IS_ERR(skb))
1309                 return PTR_ERR(skb);
1310 
1311         cmd_id = ar->wmi.cmd->wow_enable_cmdid;
1312         return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1313 }
1314 
1315 static inline int
1316 ath10k_wmi_wow_add_wakeup_event(struct ath10k *ar, u32 vdev_id,
1317                                 enum wmi_wow_wakeup_event event,
1318                                 u32 enable)
1319 {
1320         struct sk_buff *skb;
1321         u32 cmd_id;
1322 
1323         if (!ar->wmi.ops->gen_wow_add_wakeup_event)
1324                 return -EOPNOTSUPP;
1325 
1326         skb = ar->wmi.ops->gen_wow_add_wakeup_event(ar, vdev_id, event, enable);
1327         if (IS_ERR(skb))
1328                 return PTR_ERR(skb);
1329 
1330         cmd_id = ar->wmi.cmd->wow_enable_disable_wake_event_cmdid;
1331         return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1332 }
1333 
1334 static inline int
1335 ath10k_wmi_wow_host_wakeup_ind(struct ath10k *ar)
1336 {
1337         struct sk_buff *skb;
1338         u32 cmd_id;
1339 
1340         if (!ar->wmi.ops->gen_wow_host_wakeup_ind)
1341                 return -EOPNOTSUPP;
1342 
1343         skb = ar->wmi.ops->gen_wow_host_wakeup_ind(ar);
1344         if (IS_ERR(skb))
1345                 return PTR_ERR(skb);
1346 
1347         cmd_id = ar->wmi.cmd->wow_hostwakeup_from_sleep_cmdid;
1348         return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1349 }
1350 
1351 static inline int
1352 ath10k_wmi_wow_add_pattern(struct ath10k *ar, u32 vdev_id, u32 pattern_id,
1353                            const u8 *pattern, const u8 *mask,
1354                            int pattern_len, int pattern_offset)
1355 {
1356         struct sk_buff *skb;
1357         u32 cmd_id;
1358 
1359         if (!ar->wmi.ops->gen_wow_add_pattern)
1360                 return -EOPNOTSUPP;
1361 
1362         skb = ar->wmi.ops->gen_wow_add_pattern(ar, vdev_id, pattern_id,
1363                                                pattern, mask, pattern_len,
1364                                                pattern_offset);
1365         if (IS_ERR(skb))
1366                 return PTR_ERR(skb);
1367 
1368         cmd_id = ar->wmi.cmd->wow_add_wake_pattern_cmdid;
1369         return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1370 }
1371 
1372 static inline int
1373 ath10k_wmi_wow_del_pattern(struct ath10k *ar, u32 vdev_id, u32 pattern_id)
1374 {
1375         struct sk_buff *skb;
1376         u32 cmd_id;
1377 
1378         if (!ar->wmi.ops->gen_wow_del_pattern)
1379                 return -EOPNOTSUPP;
1380 
1381         skb = ar->wmi.ops->gen_wow_del_pattern(ar, vdev_id, pattern_id);
1382         if (IS_ERR(skb))
1383                 return PTR_ERR(skb);
1384 
1385         cmd_id = ar->wmi.cmd->wow_del_wake_pattern_cmdid;
1386         return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1387 }
1388 
1389 static inline int
1390 ath10k_wmi_wow_config_pno(struct ath10k *ar, u32 vdev_id,
1391                           struct wmi_pno_scan_req  *pno_scan)
1392 {
1393         struct sk_buff *skb;
1394         u32 cmd_id;
1395 
1396         if (!ar->wmi.ops->gen_wow_config_pno)
1397                 return -EOPNOTSUPP;
1398 
1399         skb = ar->wmi.ops->gen_wow_config_pno(ar, vdev_id, pno_scan);
1400         if (IS_ERR(skb))
1401                 return PTR_ERR(skb);
1402 
1403         cmd_id = ar->wmi.cmd->network_list_offload_config_cmdid;
1404         return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1405 }
1406 
1407 static inline int
1408 ath10k_wmi_update_fw_tdls_state(struct ath10k *ar, u32 vdev_id,
1409                                 enum wmi_tdls_state state)
1410 {
1411         struct sk_buff *skb;
1412 
1413         if (!ar->wmi.ops->gen_update_fw_tdls_state)
1414                 return -EOPNOTSUPP;
1415 
1416         skb = ar->wmi.ops->gen_update_fw_tdls_state(ar, vdev_id, state);
1417         if (IS_ERR(skb))
1418                 return PTR_ERR(skb);
1419 
1420         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->tdls_set_state_cmdid);
1421 }
1422 
1423 static inline int
1424 ath10k_wmi_tdls_peer_update(struct ath10k *ar,
1425                             const struct wmi_tdls_peer_update_cmd_arg *arg,
1426                             const struct wmi_tdls_peer_capab_arg *cap,
1427                             const struct wmi_channel_arg *chan)
1428 {
1429         struct sk_buff *skb;
1430 
1431         if (!ar->wmi.ops->gen_tdls_peer_update)
1432                 return -EOPNOTSUPP;
1433 
1434         skb = ar->wmi.ops->gen_tdls_peer_update(ar, arg, cap, chan);
1435         if (IS_ERR(skb))
1436                 return PTR_ERR(skb);
1437 
1438         return ath10k_wmi_cmd_send(ar, skb,
1439                                    ar->wmi.cmd->tdls_peer_update_cmdid);
1440 }
1441 
1442 static inline int
1443 ath10k_wmi_adaptive_qcs(struct ath10k *ar, bool enable)
1444 {
1445         struct sk_buff *skb;
1446 
1447         if (!ar->wmi.ops->gen_adaptive_qcs)
1448                 return -EOPNOTSUPP;
1449 
1450         skb = ar->wmi.ops->gen_adaptive_qcs(ar, enable);
1451         if (IS_ERR(skb))
1452                 return PTR_ERR(skb);
1453 
1454         return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->adaptive_qcs_cmdid);
1455 }
1456 
1457 static inline int
1458 ath10k_wmi_pdev_get_tpc_config(struct ath10k *ar, u32 param)
1459 {
1460         struct sk_buff *skb;
1461 
1462         if (!ar->wmi.ops->gen_pdev_get_tpc_config)
1463                 return -EOPNOTSUPP;
1464 
1465         skb = ar->wmi.ops->gen_pdev_get_tpc_config(ar, param);
1466 
1467         if (IS_ERR(skb))
1468                 return PTR_ERR(skb);
1469 
1470         return ath10k_wmi_cmd_send(ar, skb,
1471                                    ar->wmi.cmd->pdev_get_tpc_config_cmdid);
1472 }
1473 
1474 static inline int
1475 ath10k_wmi_fw_stats_fill(struct ath10k *ar, struct ath10k_fw_stats *fw_stats,
1476                          char *buf)
1477 {
1478         if (!ar->wmi.ops->fw_stats_fill)
1479                 return -EOPNOTSUPP;
1480 
1481         ar->wmi.ops->fw_stats_fill(ar, fw_stats, buf);
1482         return 0;
1483 }
1484 
1485 static inline int
1486 ath10k_wmi_pdev_enable_adaptive_cca(struct ath10k *ar, u8 enable,
1487                                     u32 detect_level, u32 detect_margin)
1488 {
1489         struct sk_buff *skb;
1490 
1491         if (!ar->wmi.ops->gen_pdev_enable_adaptive_cca)
1492                 return -EOPNOTSUPP;
1493 
1494         skb = ar->wmi.ops->gen_pdev_enable_adaptive_cca(ar, enable,
1495                                                         detect_level,
1496                                                         detect_margin);
1497 
1498         if (IS_ERR(skb))
1499                 return PTR_ERR(skb);
1500 
1501         return ath10k_wmi_cmd_send(ar, skb,
1502                                    ar->wmi.cmd->pdev_enable_adaptive_cca_cmdid);
1503 }
1504 
1505 static inline int
1506 ath10k_wmi_ext_resource_config(struct ath10k *ar,
1507                                enum wmi_host_platform_type type,
1508                                u32 fw_feature_bitmap)
1509 {
1510         struct sk_buff *skb;
1511 
1512         if (!ar->wmi.ops->ext_resource_config)
1513                 return -EOPNOTSUPP;
1514 
1515         skb = ar->wmi.ops->ext_resource_config(ar, type,
1516                                                fw_feature_bitmap);
1517 
1518         if (IS_ERR(skb))
1519                 return PTR_ERR(skb);
1520 
1521         return ath10k_wmi_cmd_send(ar, skb,
1522                                    ar->wmi.cmd->ext_resource_cfg_cmdid);
1523 }
1524 
1525 static inline int
1526 ath10k_wmi_get_vdev_subtype(struct ath10k *ar, enum wmi_vdev_subtype subtype)
1527 {
1528         if (!ar->wmi.ops->get_vdev_subtype)
1529                 return -EOPNOTSUPP;
1530 
1531         return ar->wmi.ops->get_vdev_subtype(ar, subtype);
1532 }
1533 
1534 static inline int
1535 ath10k_wmi_pdev_bss_chan_info_request(struct ath10k *ar,
1536                                       enum wmi_bss_survey_req_type type)
1537 {
1538         struct ath10k_wmi *wmi = &ar->wmi;
1539         struct sk_buff *skb;
1540 
1541         if (!wmi->ops->gen_pdev_bss_chan_info_req)
1542                 return -EOPNOTSUPP;
1543 
1544         skb = wmi->ops->gen_pdev_bss_chan_info_req(ar, type);
1545         if (IS_ERR(skb))
1546                 return PTR_ERR(skb);
1547 
1548         return ath10k_wmi_cmd_send(ar, skb,
1549                                    wmi->cmd->pdev_bss_chan_info_request_cmdid);
1550 }
1551 
1552 static inline int
1553 ath10k_wmi_echo(struct ath10k *ar, u32 value)
1554 {
1555         struct ath10k_wmi *wmi = &ar->wmi;
1556         struct sk_buff *skb;
1557 
1558         if (!wmi->ops->gen_echo)
1559                 return -EOPNOTSUPP;
1560 
1561         skb = wmi->ops->gen_echo(ar, value);
1562         if (IS_ERR(skb))
1563                 return PTR_ERR(skb);
1564 
1565         return ath10k_wmi_cmd_send(ar, skb, wmi->cmd->echo_cmdid);
1566 }
1567 
1568 static inline int
1569 ath10k_wmi_pdev_get_tpc_table_cmdid(struct ath10k *ar, u32 param)
1570 {
1571         struct sk_buff *skb;
1572 
1573         if (!ar->wmi.ops->gen_pdev_get_tpc_table_cmdid)
1574                 return -EOPNOTSUPP;
1575 
1576         skb = ar->wmi.ops->gen_pdev_get_tpc_table_cmdid(ar, param);
1577 
1578         if (IS_ERR(skb))
1579                 return PTR_ERR(skb);
1580 
1581         return ath10k_wmi_cmd_send(ar, skb,
1582                                    ar->wmi.cmd->pdev_get_tpc_table_cmdid);
1583 }
1584 
1585 static inline int
1586 ath10k_wmi_report_radar_found(struct ath10k *ar,
1587                               const struct ath10k_radar_found_info *arg)
1588 {
1589         struct sk_buff *skb;
1590 
1591         if (!ar->wmi.ops->gen_radar_found)
1592                 return -EOPNOTSUPP;
1593 
1594         skb = ar->wmi.ops->gen_radar_found(ar, arg);
1595         if (IS_ERR(skb))
1596                 return PTR_ERR(skb);
1597 
1598         return ath10k_wmi_cmd_send(ar, skb,
1599                                    ar->wmi.cmd->radar_found_cmdid);
1600 }
1601 
1602 static inline int
1603 ath10k_wmi_pdev_bb_timing(struct ath10k *ar,
1604                           const struct wmi_bb_timing_cfg_arg *arg)
1605 {
1606         struct sk_buff *skb;
1607 
1608         if (!ar->wmi.ops->gen_bb_timing)
1609                 return -EOPNOTSUPP;
1610 
1611         skb = ar->wmi.ops->gen_bb_timing(ar, arg);
1612 
1613         if (IS_ERR(skb))
1614                 return PTR_ERR(skb);
1615 
1616         return ath10k_wmi_cmd_send(ar, skb,
1617                                    ar->wmi.cmd->set_bb_timing_cmdid);
1618 }
1619 #endif

/* [<][>][^][v][top][bottom][index][help] */