1f0553ca9SKalle Valo /* SPDX-License-Identifier: ISC */
2d7579d12SMichal Kazior /*
3d7579d12SMichal Kazior  * Copyright (c) 2005-2011 Atheros Communications Inc.
48b1083d6SKalle Valo  * Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
538a1390eSRakesh Pillai  * Copyright (c) 2018, The Linux Foundation. All rights reserved.
6d7579d12SMichal Kazior  */
7d7579d12SMichal Kazior 
8d7579d12SMichal Kazior #ifndef _WMI_OPS_H_
9d7579d12SMichal Kazior #define _WMI_OPS_H_
10d7579d12SMichal Kazior 
11d7579d12SMichal Kazior struct ath10k;
12d7579d12SMichal Kazior struct sk_buff;
13d7579d12SMichal Kazior 
14d7579d12SMichal Kazior struct wmi_ops {
15d7579d12SMichal Kazior 	void (*rx)(struct ath10k *ar, struct sk_buff *skb);
16d7579d12SMichal Kazior 	void (*map_svc)(const __le32 *in, unsigned long *out, size_t len);
17cea19a6cSCarl Huang 	void (*map_svc_ext)(const __le32 *in, unsigned long *out, size_t len);
18d7579d12SMichal Kazior 
19d7579d12SMichal Kazior 	int (*pull_scan)(struct ath10k *ar, struct sk_buff *skb,
20d7579d12SMichal Kazior 			 struct wmi_scan_ev_arg *arg);
21d7579d12SMichal Kazior 	int (*pull_mgmt_rx)(struct ath10k *ar, struct sk_buff *skb,
22d7579d12SMichal Kazior 			    struct wmi_mgmt_rx_ev_arg *arg);
23dc405152SRakesh Pillai 	int (*pull_mgmt_tx_compl)(struct ath10k *ar, struct sk_buff *skb,
24dc405152SRakesh Pillai 				  struct wmi_tlv_mgmt_tx_compl_ev_arg *arg);
25cc123facSRakesh Pillai 	int (*pull_mgmt_tx_bundle_compl)(
26cc123facSRakesh Pillai 				struct ath10k *ar, struct sk_buff *skb,
27cc123facSRakesh Pillai 				struct wmi_tlv_mgmt_tx_bundle_compl_ev_arg *arg);
28d7579d12SMichal Kazior 	int (*pull_ch_info)(struct ath10k *ar, struct sk_buff *skb,
29d7579d12SMichal Kazior 			    struct wmi_ch_info_ev_arg *arg);
30d7579d12SMichal Kazior 	int (*pull_vdev_start)(struct ath10k *ar, struct sk_buff *skb,
31d7579d12SMichal Kazior 			       struct wmi_vdev_start_ev_arg *arg);
32d7579d12SMichal Kazior 	int (*pull_peer_kick)(struct ath10k *ar, struct sk_buff *skb,
33d7579d12SMichal Kazior 			      struct wmi_peer_kick_ev_arg *arg);
34d7579d12SMichal Kazior 	int (*pull_swba)(struct ath10k *ar, struct sk_buff *skb,
35d7579d12SMichal Kazior 			 struct wmi_swba_ev_arg *arg);
36991adf71SRaja Mani 	int (*pull_phyerr_hdr)(struct ath10k *ar, struct sk_buff *skb,
37991adf71SRaja Mani 			       struct wmi_phyerr_hdr_arg *arg);
38991adf71SRaja Mani 	int (*pull_phyerr)(struct ath10k *ar, const void *phyerr_buf,
39991adf71SRaja Mani 			   int left_len, struct wmi_phyerr_ev_arg *arg);
40d7579d12SMichal Kazior 	int (*pull_svc_rdy)(struct ath10k *ar, struct sk_buff *skb,
41d7579d12SMichal Kazior 			    struct wmi_svc_rdy_ev_arg *arg);
42d7579d12SMichal Kazior 	int (*pull_rdy)(struct ath10k *ar, struct sk_buff *skb,
43d7579d12SMichal Kazior 			struct wmi_rdy_ev_arg *arg);
44d7579d12SMichal Kazior 	int (*pull_fw_stats)(struct ath10k *ar, struct sk_buff *skb,
45d7579d12SMichal Kazior 			     struct ath10k_fw_stats *stats);
46c1a4654aSMichal Kazior 	int (*pull_roam_ev)(struct ath10k *ar, struct sk_buff *skb,
47c1a4654aSMichal Kazior 			    struct wmi_roam_ev_arg *arg);
48f5431e87SJanusz Dziedzic 	int (*pull_wow_event)(struct ath10k *ar, struct sk_buff *skb,
49f5431e87SJanusz Dziedzic 			      struct wmi_wow_ev_arg *arg);
5084d4911bSMichal Kazior 	int (*pull_echo_ev)(struct ath10k *ar, struct sk_buff *skb,
5184d4911bSMichal Kazior 			    struct wmi_echo_ev_arg *arg);
526f6eb1bcSSriram R 	int (*pull_dfs_status_ev)(struct ath10k *ar, struct sk_buff *skb,
536f6eb1bcSSriram R 				  struct wmi_dfs_status_ev_arg *arg);
54cea19a6cSCarl Huang 	int (*pull_svc_avail)(struct ath10k *ar, struct sk_buff *skb,
55cea19a6cSCarl Huang 			      struct wmi_svc_avail_ev_arg *arg);
56cea19a6cSCarl Huang 
5708e75ea8SVivek Natarajan 	enum wmi_txbf_conf (*get_txbf_conf_scheme)(struct ath10k *ar);
58d7579d12SMichal Kazior 
59d7579d12SMichal Kazior 	struct sk_buff *(*gen_pdev_suspend)(struct ath10k *ar, u32 suspend_opt);
60d7579d12SMichal Kazior 	struct sk_buff *(*gen_pdev_resume)(struct ath10k *ar);
6105e7ba24SChristian Lamparter 	struct sk_buff *(*gen_pdev_set_base_macaddr)(struct ath10k *ar,
6205e7ba24SChristian Lamparter 						     const u8 macaddr[ETH_ALEN]);
63d7579d12SMichal Kazior 	struct sk_buff *(*gen_pdev_set_rd)(struct ath10k *ar, u16 rd, u16 rd2g,
64d7579d12SMichal Kazior 					   u16 rd5g, u16 ctl2g, u16 ctl5g,
65d7579d12SMichal Kazior 					   enum wmi_dfs_region dfs_reg);
66d7579d12SMichal Kazior 	struct sk_buff *(*gen_pdev_set_param)(struct ath10k *ar, u32 id,
67d7579d12SMichal Kazior 					      u32 value);
68d7579d12SMichal Kazior 	struct sk_buff *(*gen_init)(struct ath10k *ar);
69d7579d12SMichal Kazior 	struct sk_buff *(*gen_start_scan)(struct ath10k *ar,
70d7579d12SMichal Kazior 					  const struct wmi_start_scan_arg *arg);
71d7579d12SMichal Kazior 	struct sk_buff *(*gen_stop_scan)(struct ath10k *ar,
72d7579d12SMichal Kazior 					 const struct wmi_stop_scan_arg *arg);
73d7579d12SMichal Kazior 	struct sk_buff *(*gen_vdev_create)(struct ath10k *ar, u32 vdev_id,
74d7579d12SMichal Kazior 					   enum wmi_vdev_type type,
75d7579d12SMichal Kazior 					   enum wmi_vdev_subtype subtype,
76d7579d12SMichal Kazior 					   const u8 macaddr[ETH_ALEN]);
77d7579d12SMichal Kazior 	struct sk_buff *(*gen_vdev_delete)(struct ath10k *ar, u32 vdev_id);
78d7579d12SMichal Kazior 	struct sk_buff *(*gen_vdev_start)(struct ath10k *ar,
79d7579d12SMichal Kazior 					  const struct wmi_vdev_start_request_arg *arg,
80d7579d12SMichal Kazior 					  bool restart);
81d7579d12SMichal Kazior 	struct sk_buff *(*gen_vdev_stop)(struct ath10k *ar, u32 vdev_id);
82d7579d12SMichal Kazior 	struct sk_buff *(*gen_vdev_up)(struct ath10k *ar, u32 vdev_id, u32 aid,
83d7579d12SMichal Kazior 				       const u8 *bssid);
84d7579d12SMichal Kazior 	struct sk_buff *(*gen_vdev_down)(struct ath10k *ar, u32 vdev_id);
85d7579d12SMichal Kazior 	struct sk_buff *(*gen_vdev_set_param)(struct ath10k *ar, u32 vdev_id,
86d7579d12SMichal Kazior 					      u32 param_id, u32 param_value);
87d7579d12SMichal Kazior 	struct sk_buff *(*gen_vdev_install_key)(struct ath10k *ar,
88d7579d12SMichal Kazior 						const struct wmi_vdev_install_key_arg *arg);
89d7579d12SMichal Kazior 	struct sk_buff *(*gen_vdev_spectral_conf)(struct ath10k *ar,
90d7579d12SMichal Kazior 						  const struct wmi_vdev_spectral_conf_arg *arg);
91d7579d12SMichal Kazior 	struct sk_buff *(*gen_vdev_spectral_enable)(struct ath10k *ar, u32 vdev_id,
92d7579d12SMichal Kazior 						    u32 trigger, u32 enable);
936d492fe2SMichal Kazior 	struct sk_buff *(*gen_vdev_wmm_conf)(struct ath10k *ar, u32 vdev_id,
946d492fe2SMichal Kazior 					     const struct wmi_wmm_params_all_arg *arg);
95d7579d12SMichal Kazior 	struct sk_buff *(*gen_peer_create)(struct ath10k *ar, u32 vdev_id,
967390ed34SMarek Puzyniak 					   const u8 peer_addr[ETH_ALEN],
977390ed34SMarek Puzyniak 					   enum wmi_peer_type peer_type);
98d7579d12SMichal Kazior 	struct sk_buff *(*gen_peer_delete)(struct ath10k *ar, u32 vdev_id,
99d7579d12SMichal Kazior 					   const u8 peer_addr[ETH_ALEN]);
100d7579d12SMichal Kazior 	struct sk_buff *(*gen_peer_flush)(struct ath10k *ar, u32 vdev_id,
101d7579d12SMichal Kazior 					  const u8 peer_addr[ETH_ALEN],
102d7579d12SMichal Kazior 					  u32 tid_bitmap);
103d7579d12SMichal Kazior 	struct sk_buff *(*gen_peer_set_param)(struct ath10k *ar, u32 vdev_id,
104d7579d12SMichal Kazior 					      const u8 *peer_addr,
105d7579d12SMichal Kazior 					      enum wmi_peer_param param_id,
106d7579d12SMichal Kazior 					      u32 param_value);
107d7579d12SMichal Kazior 	struct sk_buff *(*gen_peer_assoc)(struct ath10k *ar,
108d7579d12SMichal Kazior 					  const struct wmi_peer_assoc_complete_arg *arg);
109d7579d12SMichal Kazior 	struct sk_buff *(*gen_set_psmode)(struct ath10k *ar, u32 vdev_id,
110d7579d12SMichal Kazior 					  enum wmi_sta_ps_mode psmode);
111d7579d12SMichal Kazior 	struct sk_buff *(*gen_set_sta_ps)(struct ath10k *ar, u32 vdev_id,
112d7579d12SMichal Kazior 					  enum wmi_sta_powersave_param param_id,
113d7579d12SMichal Kazior 					  u32 value);
114d7579d12SMichal Kazior 	struct sk_buff *(*gen_set_ap_ps)(struct ath10k *ar, u32 vdev_id,
115d7579d12SMichal Kazior 					 const u8 *mac,
116d7579d12SMichal Kazior 					 enum wmi_ap_ps_peer_param param_id,
117d7579d12SMichal Kazior 					 u32 value);
118d7579d12SMichal Kazior 	struct sk_buff *(*gen_scan_chan_list)(struct ath10k *ar,
119d7579d12SMichal Kazior 					      const struct wmi_scan_chan_list_arg *arg);
12060e1d0fbSCarl Huang 	struct sk_buff *(*gen_scan_prob_req_oui)(struct ath10k *ar,
12160e1d0fbSCarl Huang 						 u32 prob_req_oui);
1229ad50182SMichal Kazior 	struct sk_buff *(*gen_beacon_dma)(struct ath10k *ar, u32 vdev_id,
1239ad50182SMichal Kazior 					  const void *bcn, size_t bcn_len,
1249ad50182SMichal Kazior 					  u32 bcn_paddr, bool dtim_zero,
1259ad50182SMichal Kazior 					  bool deliver_cab);
126d7579d12SMichal Kazior 	struct sk_buff *(*gen_pdev_set_wmm)(struct ath10k *ar,
1275e752e42SMichal Kazior 					    const struct wmi_wmm_params_all_arg *arg);
128de23d3efSMichal Kazior 	struct sk_buff *(*gen_request_stats)(struct ath10k *ar, u32 stats_mask);
1290f7cb268SWen Gong 	struct sk_buff *(*gen_request_peer_stats_info)(struct ath10k *ar,
1300f7cb268SWen Gong 						       u32 vdev_id,
1310f7cb268SWen Gong 						       enum
1320f7cb268SWen Gong 						       wmi_peer_stats_info_request_type
1330f7cb268SWen Gong 						       type,
1340f7cb268SWen Gong 						       u8 *addr,
1350f7cb268SWen Gong 						       u32 reset);
136d7579d12SMichal Kazior 	struct sk_buff *(*gen_force_fw_hang)(struct ath10k *ar,
137d7579d12SMichal Kazior 					     enum wmi_force_fw_hang_type type,
138d7579d12SMichal Kazior 					     u32 delay_ms);
139d7579d12SMichal Kazior 	struct sk_buff *(*gen_mgmt_tx)(struct ath10k *ar, struct sk_buff *skb);
14038a1390eSRakesh Pillai 	struct sk_buff *(*gen_mgmt_tx_send)(struct ath10k *ar,
14138a1390eSRakesh Pillai 					    struct sk_buff *skb,
14238a1390eSRakesh Pillai 					    dma_addr_t paddr);
143c730c477SRakesh Pillai 	int (*cleanup_mgmt_tx_send)(struct ath10k *ar, struct sk_buff *msdu);
144afcbc82cSMaharaja Kennadyrajan 	struct sk_buff *(*gen_dbglog_cfg)(struct ath10k *ar, u64 module_enable,
145467210a6SSenthilKumar Jegadeesan 					  u32 log_level);
146d7579d12SMichal Kazior 	struct sk_buff *(*gen_pktlog_enable)(struct ath10k *ar, u32 filter);
147d7579d12SMichal Kazior 	struct sk_buff *(*gen_pktlog_disable)(struct ath10k *ar);
148ffdd738dSRajkumar Manoharan 	struct sk_buff *(*gen_pdev_set_quiet_mode)(struct ath10k *ar,
149ffdd738dSRajkumar Manoharan 						   u32 period, u32 duration,
150ffdd738dSRajkumar Manoharan 						   u32 next_offset,
151ffdd738dSRajkumar Manoharan 						   u32 enabled);
152a57a6a27SRajkumar Manoharan 	struct sk_buff *(*gen_pdev_get_temperature)(struct ath10k *ar);
153dc8ab278SRajkumar Manoharan 	struct sk_buff *(*gen_addba_clear_resp)(struct ath10k *ar, u32 vdev_id,
154dc8ab278SRajkumar Manoharan 						const u8 *mac);
15565c0893dSRajkumar Manoharan 	struct sk_buff *(*gen_addba_send)(struct ath10k *ar, u32 vdev_id,
15665c0893dSRajkumar Manoharan 					  const u8 *mac, u32 tid, u32 buf_size);
15711597413SRajkumar Manoharan 	struct sk_buff *(*gen_addba_set_resp)(struct ath10k *ar, u32 vdev_id,
15811597413SRajkumar Manoharan 					      const u8 *mac, u32 tid,
15911597413SRajkumar Manoharan 					      u32 status);
16050abef85SRajkumar Manoharan 	struct sk_buff *(*gen_delba_send)(struct ath10k *ar, u32 vdev_id,
16150abef85SRajkumar Manoharan 					  const u8 *mac, u32 tid, u32 initiator,
16250abef85SRajkumar Manoharan 					  u32 reason);
163be9ce9d8SMichal Kazior 	struct sk_buff *(*gen_bcn_tmpl)(struct ath10k *ar, u32 vdev_id,
164be9ce9d8SMichal Kazior 					u32 tim_ie_offset, struct sk_buff *bcn,
165be9ce9d8SMichal Kazior 					u32 prb_caps, u32 prb_erp,
166be9ce9d8SMichal Kazior 					void *prb_ies, size_t prb_ies_len);
1674c4955feSMichal Kazior 	struct sk_buff *(*gen_prb_tmpl)(struct ath10k *ar, u32 vdev_id,
1684c4955feSMichal Kazior 					struct sk_buff *bcn);
169369242b4SMichal Kazior 	struct sk_buff *(*gen_p2p_go_bcn_ie)(struct ath10k *ar, u32 vdev_id,
170369242b4SMichal Kazior 					     const u8 *p2p_ie);
1710c7e477cSJanusz Dziedzic 	struct sk_buff *(*gen_vdev_sta_uapsd)(struct ath10k *ar, u32 vdev_id,
1720c7e477cSJanusz Dziedzic 					      const u8 peer_addr[ETH_ALEN],
1730c7e477cSJanusz Dziedzic 					      const struct wmi_sta_uapsd_auto_trig_arg *args,
1740c7e477cSJanusz Dziedzic 					      u32 num_ac);
1756e8b188bSJanusz Dziedzic 	struct sk_buff *(*gen_sta_keepalive)(struct ath10k *ar,
1766e8b188bSJanusz Dziedzic 					     const struct wmi_sta_keepalive_arg *arg);
177f5431e87SJanusz Dziedzic 	struct sk_buff *(*gen_wow_enable)(struct ath10k *ar);
178f5431e87SJanusz Dziedzic 	struct sk_buff *(*gen_wow_add_wakeup_event)(struct ath10k *ar, u32 vdev_id,
179f5431e87SJanusz Dziedzic 						    enum wmi_wow_wakeup_event event,
180f5431e87SJanusz Dziedzic 						    u32 enable);
181f5431e87SJanusz Dziedzic 	struct sk_buff *(*gen_wow_host_wakeup_ind)(struct ath10k *ar);
182d4976104SJanusz Dziedzic 	struct sk_buff *(*gen_wow_add_pattern)(struct ath10k *ar, u32 vdev_id,
183d4976104SJanusz Dziedzic 					       u32 pattern_id,
184d4976104SJanusz Dziedzic 					       const u8 *pattern,
185d4976104SJanusz Dziedzic 					       const u8 *mask,
186d4976104SJanusz Dziedzic 					       int pattern_len,
187d4976104SJanusz Dziedzic 					       int pattern_offset);
188d4976104SJanusz Dziedzic 	struct sk_buff *(*gen_wow_del_pattern)(struct ath10k *ar, u32 vdev_id,
189d4976104SJanusz Dziedzic 					       u32 pattern_id);
190ad45c888SMarek Puzyniak 	struct sk_buff *(*gen_update_fw_tdls_state)(struct ath10k *ar,
191ad45c888SMarek Puzyniak 						    u32 vdev_id,
192ad45c888SMarek Puzyniak 						    enum wmi_tdls_state state);
193ad45c888SMarek Puzyniak 	struct sk_buff *(*gen_tdls_peer_update)(struct ath10k *ar,
194ad45c888SMarek Puzyniak 						const struct wmi_tdls_peer_update_cmd_arg *arg,
195ad45c888SMarek Puzyniak 						const struct wmi_tdls_peer_capab_arg *cap,
196ad45c888SMarek Puzyniak 						const struct wmi_channel_arg *chan);
1976f6eb1bcSSriram R 	struct sk_buff *(*gen_radar_found)
1986f6eb1bcSSriram R 			(struct ath10k *ar,
1996f6eb1bcSSriram R 			 const struct ath10k_radar_found_info *arg);
2005b272e30SMichal Kazior 	struct sk_buff *(*gen_adaptive_qcs)(struct ath10k *ar, bool enable);
20129542666SMaharaja Kennadyrajan 	struct sk_buff *(*gen_pdev_get_tpc_config)(struct ath10k *ar,
20229542666SMaharaja Kennadyrajan 						   u32 param);
203bc6f9ae6SManikanta Pubbisetty 	void (*fw_stats_fill)(struct ath10k *ar,
204bc6f9ae6SManikanta Pubbisetty 			      struct ath10k_fw_stats *fw_stats,
205bc6f9ae6SManikanta Pubbisetty 			      char *buf);
20662f77f09SMaharaja 	struct sk_buff *(*gen_pdev_enable_adaptive_cca)(struct ath10k *ar,
20762f77f09SMaharaja 							u8 enable,
20862f77f09SMaharaja 							u32 detect_level,
20962f77f09SMaharaja 							u32 detect_margin);
21047771902SRaja Mani 	struct sk_buff *(*ext_resource_config)(struct ath10k *ar,
21147771902SRaja Mani 					       enum wmi_host_platform_type type,
21247771902SRaja Mani 					       u32 fw_feature_bitmap);
2136e4de1a4SPeter Oh 	int (*get_vdev_subtype)(struct ath10k *ar,
2146e4de1a4SPeter Oh 				enum wmi_vdev_subtype subtype);
215ce834e28SWen Gong 	struct sk_buff *(*gen_wow_config_pno)(struct ath10k *ar,
216ce834e28SWen Gong 					      u32 vdev_id,
217ce834e28SWen Gong 					      struct wmi_pno_scan_req *pno_scan);
2188a0b459eSRajkumar Manoharan 	struct sk_buff *(*gen_pdev_bss_chan_info_req)
2198a0b459eSRajkumar Manoharan 					(struct ath10k *ar,
2208a0b459eSRajkumar Manoharan 					 enum wmi_bss_survey_req_type type);
221e25854f2SMichal Kazior 	struct sk_buff *(*gen_echo)(struct ath10k *ar, u32 value);
222bc64d052SMaharaja Kennadyrajan 	struct sk_buff *(*gen_pdev_get_tpc_table_cmdid)(struct ath10k *ar,
223bc64d052SMaharaja Kennadyrajan 							u32 param);
22484758d4dSBhagavathi Perumal S 	struct sk_buff *(*gen_bb_timing)
22584758d4dSBhagavathi Perumal S 			(struct ath10k *ar,
22684758d4dSBhagavathi Perumal S 			 const struct wmi_bb_timing_cfg_arg *arg);
2275d582be0STamizh Chelvam 	struct sk_buff *(*gen_per_peer_per_tid_cfg)(struct ath10k *ar,
2285d582be0STamizh Chelvam 						    const struct wmi_per_peer_per_tid_cfg_arg *arg);
229bc64d052SMaharaja Kennadyrajan 
230d7579d12SMichal Kazior };
231d7579d12SMichal Kazior 
232d7579d12SMichal Kazior int ath10k_wmi_cmd_send(struct ath10k *ar, struct sk_buff *skb, u32 cmd_id);
233d7579d12SMichal Kazior 
234d7579d12SMichal Kazior static inline int
ath10k_wmi_rx(struct ath10k * ar,struct sk_buff * skb)235d7579d12SMichal Kazior ath10k_wmi_rx(struct ath10k *ar, struct sk_buff *skb)
236d7579d12SMichal Kazior {
237d7579d12SMichal Kazior 	if (WARN_ON_ONCE(!ar->wmi.ops->rx))
238d7579d12SMichal Kazior 		return -EOPNOTSUPP;
239d7579d12SMichal Kazior 
240d7579d12SMichal Kazior 	ar->wmi.ops->rx(ar, skb);
241d7579d12SMichal Kazior 	return 0;
242d7579d12SMichal Kazior }
243d7579d12SMichal Kazior 
244d7579d12SMichal Kazior static inline int
ath10k_wmi_map_svc(struct ath10k * ar,const __le32 * in,unsigned long * out,size_t len)245d7579d12SMichal Kazior ath10k_wmi_map_svc(struct ath10k *ar, const __le32 *in, unsigned long *out,
246d7579d12SMichal Kazior 		   size_t len)
247d7579d12SMichal Kazior {
248d7579d12SMichal Kazior 	if (!ar->wmi.ops->map_svc)
249d7579d12SMichal Kazior 		return -EOPNOTSUPP;
250d7579d12SMichal Kazior 
251d7579d12SMichal Kazior 	ar->wmi.ops->map_svc(in, out, len);
252d7579d12SMichal Kazior 	return 0;
253d7579d12SMichal Kazior }
254d7579d12SMichal Kazior 
255d7579d12SMichal Kazior static inline int
ath10k_wmi_map_svc_ext(struct ath10k * ar,const __le32 * in,unsigned long * out,size_t len)256cea19a6cSCarl Huang ath10k_wmi_map_svc_ext(struct ath10k *ar, const __le32 *in, unsigned long *out,
257cea19a6cSCarl Huang 		       size_t len)
258cea19a6cSCarl Huang {
259cea19a6cSCarl Huang 	if (!ar->wmi.ops->map_svc_ext)
260cea19a6cSCarl Huang 		return -EOPNOTSUPP;
261cea19a6cSCarl Huang 
262cea19a6cSCarl Huang 	ar->wmi.ops->map_svc_ext(in, out, len);
263cea19a6cSCarl Huang 	return 0;
264cea19a6cSCarl Huang }
265cea19a6cSCarl Huang 
266cea19a6cSCarl Huang static inline int
ath10k_wmi_pull_scan(struct ath10k * ar,struct sk_buff * skb,struct wmi_scan_ev_arg * arg)267d7579d12SMichal Kazior ath10k_wmi_pull_scan(struct ath10k *ar, struct sk_buff *skb,
268d7579d12SMichal Kazior 		     struct wmi_scan_ev_arg *arg)
269d7579d12SMichal Kazior {
270d7579d12SMichal Kazior 	if (!ar->wmi.ops->pull_scan)
271d7579d12SMichal Kazior 		return -EOPNOTSUPP;
272d7579d12SMichal Kazior 
273d7579d12SMichal Kazior 	return ar->wmi.ops->pull_scan(ar, skb, arg);
274d7579d12SMichal Kazior }
275d7579d12SMichal Kazior 
276d7579d12SMichal Kazior static inline int
ath10k_wmi_pull_mgmt_tx_compl(struct ath10k * ar,struct sk_buff * skb,struct wmi_tlv_mgmt_tx_compl_ev_arg * arg)277dc405152SRakesh Pillai ath10k_wmi_pull_mgmt_tx_compl(struct ath10k *ar, struct sk_buff *skb,
278dc405152SRakesh Pillai 			      struct wmi_tlv_mgmt_tx_compl_ev_arg *arg)
279dc405152SRakesh Pillai {
280dc405152SRakesh Pillai 	if (!ar->wmi.ops->pull_mgmt_tx_compl)
281dc405152SRakesh Pillai 		return -EOPNOTSUPP;
282dc405152SRakesh Pillai 
283dc405152SRakesh Pillai 	return ar->wmi.ops->pull_mgmt_tx_compl(ar, skb, arg);
284dc405152SRakesh Pillai }
285dc405152SRakesh Pillai 
286dc405152SRakesh Pillai static inline int
ath10k_wmi_pull_mgmt_tx_bundle_compl(struct ath10k * ar,struct sk_buff * skb,struct wmi_tlv_mgmt_tx_bundle_compl_ev_arg * arg)287cc123facSRakesh Pillai ath10k_wmi_pull_mgmt_tx_bundle_compl(struct ath10k *ar, struct sk_buff *skb,
288cc123facSRakesh Pillai 				     struct wmi_tlv_mgmt_tx_bundle_compl_ev_arg *arg)
289cc123facSRakesh Pillai {
290cc123facSRakesh Pillai 	if (!ar->wmi.ops->pull_mgmt_tx_bundle_compl)
291cc123facSRakesh Pillai 		return -EOPNOTSUPP;
292cc123facSRakesh Pillai 
293cc123facSRakesh Pillai 	return ar->wmi.ops->pull_mgmt_tx_bundle_compl(ar, skb, arg);
294cc123facSRakesh Pillai }
295cc123facSRakesh Pillai 
296cc123facSRakesh Pillai static inline int
ath10k_wmi_pull_mgmt_rx(struct ath10k * ar,struct sk_buff * skb,struct wmi_mgmt_rx_ev_arg * arg)297d7579d12SMichal Kazior ath10k_wmi_pull_mgmt_rx(struct ath10k *ar, struct sk_buff *skb,
298d7579d12SMichal Kazior 			struct wmi_mgmt_rx_ev_arg *arg)
299d7579d12SMichal Kazior {
300d7579d12SMichal Kazior 	if (!ar->wmi.ops->pull_mgmt_rx)
301d7579d12SMichal Kazior 		return -EOPNOTSUPP;
302d7579d12SMichal Kazior 
303d7579d12SMichal Kazior 	return ar->wmi.ops->pull_mgmt_rx(ar, skb, arg);
304d7579d12SMichal Kazior }
305d7579d12SMichal Kazior 
306d7579d12SMichal Kazior static inline int
ath10k_wmi_pull_ch_info(struct ath10k * ar,struct sk_buff * skb,struct wmi_ch_info_ev_arg * arg)307d7579d12SMichal Kazior ath10k_wmi_pull_ch_info(struct ath10k *ar, struct sk_buff *skb,
308d7579d12SMichal Kazior 			struct wmi_ch_info_ev_arg *arg)
309d7579d12SMichal Kazior {
310d7579d12SMichal Kazior 	if (!ar->wmi.ops->pull_ch_info)
311d7579d12SMichal Kazior 		return -EOPNOTSUPP;
312d7579d12SMichal Kazior 
313d7579d12SMichal Kazior 	return ar->wmi.ops->pull_ch_info(ar, skb, arg);
314d7579d12SMichal Kazior }
315d7579d12SMichal Kazior 
316d7579d12SMichal Kazior static inline int
ath10k_wmi_pull_vdev_start(struct ath10k * ar,struct sk_buff * skb,struct wmi_vdev_start_ev_arg * arg)317d7579d12SMichal Kazior ath10k_wmi_pull_vdev_start(struct ath10k *ar, struct sk_buff *skb,
318d7579d12SMichal Kazior 			   struct wmi_vdev_start_ev_arg *arg)
319d7579d12SMichal Kazior {
320d7579d12SMichal Kazior 	if (!ar->wmi.ops->pull_vdev_start)
321d7579d12SMichal Kazior 		return -EOPNOTSUPP;
322d7579d12SMichal Kazior 
323d7579d12SMichal Kazior 	return ar->wmi.ops->pull_vdev_start(ar, skb, arg);
324d7579d12SMichal Kazior }
325d7579d12SMichal Kazior 
326d7579d12SMichal Kazior static inline int
ath10k_wmi_pull_peer_kick(struct ath10k * ar,struct sk_buff * skb,struct wmi_peer_kick_ev_arg * arg)327d7579d12SMichal Kazior ath10k_wmi_pull_peer_kick(struct ath10k *ar, struct sk_buff *skb,
328d7579d12SMichal Kazior 			  struct wmi_peer_kick_ev_arg *arg)
329d7579d12SMichal Kazior {
330d7579d12SMichal Kazior 	if (!ar->wmi.ops->pull_peer_kick)
331d7579d12SMichal Kazior 		return -EOPNOTSUPP;
332d7579d12SMichal Kazior 
333d7579d12SMichal Kazior 	return ar->wmi.ops->pull_peer_kick(ar, skb, arg);
334d7579d12SMichal Kazior }
335d7579d12SMichal Kazior 
336d7579d12SMichal Kazior static inline int
ath10k_wmi_pull_swba(struct ath10k * ar,struct sk_buff * skb,struct wmi_swba_ev_arg * arg)337d7579d12SMichal Kazior ath10k_wmi_pull_swba(struct ath10k *ar, struct sk_buff *skb,
338d7579d12SMichal Kazior 		     struct wmi_swba_ev_arg *arg)
339d7579d12SMichal Kazior {
340d7579d12SMichal Kazior 	if (!ar->wmi.ops->pull_swba)
341d7579d12SMichal Kazior 		return -EOPNOTSUPP;
342d7579d12SMichal Kazior 
343d7579d12SMichal Kazior 	return ar->wmi.ops->pull_swba(ar, skb, arg);
344d7579d12SMichal Kazior }
345d7579d12SMichal Kazior 
346d7579d12SMichal Kazior static inline int
ath10k_wmi_pull_phyerr_hdr(struct ath10k * ar,struct sk_buff * skb,struct wmi_phyerr_hdr_arg * arg)347991adf71SRaja Mani ath10k_wmi_pull_phyerr_hdr(struct ath10k *ar, struct sk_buff *skb,
348991adf71SRaja Mani 			   struct wmi_phyerr_hdr_arg *arg)
349991adf71SRaja Mani {
350991adf71SRaja Mani 	if (!ar->wmi.ops->pull_phyerr_hdr)
351991adf71SRaja Mani 		return -EOPNOTSUPP;
352991adf71SRaja Mani 
353991adf71SRaja Mani 	return ar->wmi.ops->pull_phyerr_hdr(ar, skb, arg);
354991adf71SRaja Mani }
355991adf71SRaja Mani 
356991adf71SRaja Mani static inline int
ath10k_wmi_pull_phyerr(struct ath10k * ar,const void * phyerr_buf,int left_len,struct wmi_phyerr_ev_arg * arg)357991adf71SRaja Mani ath10k_wmi_pull_phyerr(struct ath10k *ar, const void *phyerr_buf,
358991adf71SRaja Mani 		       int left_len, struct wmi_phyerr_ev_arg *arg)
359d7579d12SMichal Kazior {
360d7579d12SMichal Kazior 	if (!ar->wmi.ops->pull_phyerr)
361d7579d12SMichal Kazior 		return -EOPNOTSUPP;
362d7579d12SMichal Kazior 
363991adf71SRaja Mani 	return ar->wmi.ops->pull_phyerr(ar, phyerr_buf, left_len, arg);
364d7579d12SMichal Kazior }
365d7579d12SMichal Kazior 
366d7579d12SMichal Kazior static inline int
ath10k_wmi_pull_svc_rdy(struct ath10k * ar,struct sk_buff * skb,struct wmi_svc_rdy_ev_arg * arg)367d7579d12SMichal Kazior ath10k_wmi_pull_svc_rdy(struct ath10k *ar, struct sk_buff *skb,
368d7579d12SMichal Kazior 			struct wmi_svc_rdy_ev_arg *arg)
369d7579d12SMichal Kazior {
370d7579d12SMichal Kazior 	if (!ar->wmi.ops->pull_svc_rdy)
371d7579d12SMichal Kazior 		return -EOPNOTSUPP;
372d7579d12SMichal Kazior 
373d7579d12SMichal Kazior 	return ar->wmi.ops->pull_svc_rdy(ar, skb, arg);
374d7579d12SMichal Kazior }
375d7579d12SMichal Kazior 
376d7579d12SMichal Kazior static inline int
ath10k_wmi_pull_rdy(struct ath10k * ar,struct sk_buff * skb,struct wmi_rdy_ev_arg * arg)377d7579d12SMichal Kazior ath10k_wmi_pull_rdy(struct ath10k *ar, struct sk_buff *skb,
378d7579d12SMichal Kazior 		    struct wmi_rdy_ev_arg *arg)
379d7579d12SMichal Kazior {
380d7579d12SMichal Kazior 	if (!ar->wmi.ops->pull_rdy)
381d7579d12SMichal Kazior 		return -EOPNOTSUPP;
382d7579d12SMichal Kazior 
383d7579d12SMichal Kazior 	return ar->wmi.ops->pull_rdy(ar, skb, arg);
384d7579d12SMichal Kazior }
385d7579d12SMichal Kazior 
386d7579d12SMichal Kazior static inline int
ath10k_wmi_pull_svc_avail(struct ath10k * ar,struct sk_buff * skb,struct wmi_svc_avail_ev_arg * arg)387cea19a6cSCarl Huang ath10k_wmi_pull_svc_avail(struct ath10k *ar, struct sk_buff *skb,
388cea19a6cSCarl Huang 			  struct wmi_svc_avail_ev_arg *arg)
389cea19a6cSCarl Huang {
390cea19a6cSCarl Huang 	if (!ar->wmi.ops->pull_svc_avail)
391cea19a6cSCarl Huang 		return -EOPNOTSUPP;
392cea19a6cSCarl Huang 	return ar->wmi.ops->pull_svc_avail(ar, skb, arg);
393cea19a6cSCarl Huang }
394cea19a6cSCarl Huang 
395cea19a6cSCarl Huang static inline int
ath10k_wmi_pull_fw_stats(struct ath10k * ar,struct sk_buff * skb,struct ath10k_fw_stats * stats)396d7579d12SMichal Kazior ath10k_wmi_pull_fw_stats(struct ath10k *ar, struct sk_buff *skb,
397d7579d12SMichal Kazior 			 struct ath10k_fw_stats *stats)
398d7579d12SMichal Kazior {
399d7579d12SMichal Kazior 	if (!ar->wmi.ops->pull_fw_stats)
400d7579d12SMichal Kazior 		return -EOPNOTSUPP;
401d7579d12SMichal Kazior 
402d7579d12SMichal Kazior 	return ar->wmi.ops->pull_fw_stats(ar, skb, stats);
403d7579d12SMichal Kazior }
404d7579d12SMichal Kazior 
405d7579d12SMichal Kazior static inline int
ath10k_wmi_pull_roam_ev(struct ath10k * ar,struct sk_buff * skb,struct wmi_roam_ev_arg * arg)406c1a4654aSMichal Kazior ath10k_wmi_pull_roam_ev(struct ath10k *ar, struct sk_buff *skb,
407c1a4654aSMichal Kazior 			struct wmi_roam_ev_arg *arg)
408c1a4654aSMichal Kazior {
409c1a4654aSMichal Kazior 	if (!ar->wmi.ops->pull_roam_ev)
410c1a4654aSMichal Kazior 		return -EOPNOTSUPP;
411c1a4654aSMichal Kazior 
412c1a4654aSMichal Kazior 	return ar->wmi.ops->pull_roam_ev(ar, skb, arg);
413c1a4654aSMichal Kazior }
414c1a4654aSMichal Kazior 
415c1a4654aSMichal Kazior static inline int
ath10k_wmi_pull_wow_event(struct ath10k * ar,struct sk_buff * skb,struct wmi_wow_ev_arg * arg)416f5431e87SJanusz Dziedzic ath10k_wmi_pull_wow_event(struct ath10k *ar, struct sk_buff *skb,
417f5431e87SJanusz Dziedzic 			  struct wmi_wow_ev_arg *arg)
418f5431e87SJanusz Dziedzic {
419f5431e87SJanusz Dziedzic 	if (!ar->wmi.ops->pull_wow_event)
420f5431e87SJanusz Dziedzic 		return -EOPNOTSUPP;
421f5431e87SJanusz Dziedzic 
422f5431e87SJanusz Dziedzic 	return ar->wmi.ops->pull_wow_event(ar, skb, arg);
423f5431e87SJanusz Dziedzic }
424f5431e87SJanusz Dziedzic 
42584d4911bSMichal Kazior static inline int
ath10k_wmi_pull_echo_ev(struct ath10k * ar,struct sk_buff * skb,struct wmi_echo_ev_arg * arg)42684d4911bSMichal Kazior ath10k_wmi_pull_echo_ev(struct ath10k *ar, struct sk_buff *skb,
42784d4911bSMichal Kazior 			struct wmi_echo_ev_arg *arg)
42884d4911bSMichal Kazior {
42984d4911bSMichal Kazior 	if (!ar->wmi.ops->pull_echo_ev)
43084d4911bSMichal Kazior 		return -EOPNOTSUPP;
43184d4911bSMichal Kazior 
43284d4911bSMichal Kazior 	return ar->wmi.ops->pull_echo_ev(ar, skb, arg);
43384d4911bSMichal Kazior }
43484d4911bSMichal Kazior 
4356f6eb1bcSSriram R static inline int
ath10k_wmi_pull_dfs_status(struct ath10k * ar,struct sk_buff * skb,struct wmi_dfs_status_ev_arg * arg)4366f6eb1bcSSriram R ath10k_wmi_pull_dfs_status(struct ath10k *ar, struct sk_buff *skb,
4376f6eb1bcSSriram R 			   struct wmi_dfs_status_ev_arg *arg)
4386f6eb1bcSSriram R {
4396f6eb1bcSSriram R 	if (!ar->wmi.ops->pull_dfs_status_ev)
4406f6eb1bcSSriram R 		return -EOPNOTSUPP;
4416f6eb1bcSSriram R 
4426f6eb1bcSSriram R 	return ar->wmi.ops->pull_dfs_status_ev(ar, skb, arg);
4436f6eb1bcSSriram R }
4446f6eb1bcSSriram R 
44508e75ea8SVivek Natarajan static inline enum wmi_txbf_conf
ath10k_wmi_get_txbf_conf_scheme(struct ath10k * ar)44608e75ea8SVivek Natarajan ath10k_wmi_get_txbf_conf_scheme(struct ath10k *ar)
44708e75ea8SVivek Natarajan {
44808e75ea8SVivek Natarajan 	if (!ar->wmi.ops->get_txbf_conf_scheme)
44908e75ea8SVivek Natarajan 		return WMI_TXBF_CONF_UNSUPPORTED;
45008e75ea8SVivek Natarajan 
45108e75ea8SVivek Natarajan 	return ar->wmi.ops->get_txbf_conf_scheme(ar);
45208e75ea8SVivek Natarajan }
45308e75ea8SVivek Natarajan 
454f5431e87SJanusz Dziedzic static inline int
ath10k_wmi_cleanup_mgmt_tx_send(struct ath10k * ar,struct sk_buff * msdu)455c730c477SRakesh Pillai ath10k_wmi_cleanup_mgmt_tx_send(struct ath10k *ar, struct sk_buff *msdu)
456c730c477SRakesh Pillai {
457c730c477SRakesh Pillai 	if (!ar->wmi.ops->cleanup_mgmt_tx_send)
458c730c477SRakesh Pillai 		return -EOPNOTSUPP;
459c730c477SRakesh Pillai 
460c730c477SRakesh Pillai 	return ar->wmi.ops->cleanup_mgmt_tx_send(ar, msdu);
461c730c477SRakesh Pillai }
462c730c477SRakesh Pillai 
463c730c477SRakesh Pillai static inline int
ath10k_wmi_mgmt_tx_send(struct ath10k * ar,struct sk_buff * msdu,dma_addr_t paddr)46438a1390eSRakesh Pillai ath10k_wmi_mgmt_tx_send(struct ath10k *ar, struct sk_buff *msdu,
46538a1390eSRakesh Pillai 			dma_addr_t paddr)
46638a1390eSRakesh Pillai {
46738a1390eSRakesh Pillai 	struct sk_buff *skb;
46838a1390eSRakesh Pillai 	int ret;
46938a1390eSRakesh Pillai 
47038a1390eSRakesh Pillai 	if (!ar->wmi.ops->gen_mgmt_tx_send)
47138a1390eSRakesh Pillai 		return -EOPNOTSUPP;
47238a1390eSRakesh Pillai 
47338a1390eSRakesh Pillai 	skb = ar->wmi.ops->gen_mgmt_tx_send(ar, msdu, paddr);
47438a1390eSRakesh Pillai 	if (IS_ERR(skb))
47538a1390eSRakesh Pillai 		return PTR_ERR(skb);
47638a1390eSRakesh Pillai 
47738a1390eSRakesh Pillai 	ret = ath10k_wmi_cmd_send(ar, skb,
47838a1390eSRakesh Pillai 				  ar->wmi.cmd->mgmt_tx_send_cmdid);
47938a1390eSRakesh Pillai 	if (ret)
48038a1390eSRakesh Pillai 		return ret;
48138a1390eSRakesh Pillai 
48238a1390eSRakesh Pillai 	return 0;
48338a1390eSRakesh Pillai }
48438a1390eSRakesh Pillai 
48538a1390eSRakesh Pillai static inline int
ath10k_wmi_mgmt_tx(struct ath10k * ar,struct sk_buff * msdu)486d7579d12SMichal Kazior ath10k_wmi_mgmt_tx(struct ath10k *ar, struct sk_buff *msdu)
487d7579d12SMichal Kazior {
488d7579d12SMichal Kazior 	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(msdu);
489d7579d12SMichal Kazior 	struct sk_buff *skb;
490d7579d12SMichal Kazior 	int ret;
491d7579d12SMichal Kazior 
492d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_mgmt_tx)
493d7579d12SMichal Kazior 		return -EOPNOTSUPP;
494d7579d12SMichal Kazior 
495d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_mgmt_tx(ar, msdu);
496d7579d12SMichal Kazior 	if (IS_ERR(skb))
497d7579d12SMichal Kazior 		return PTR_ERR(skb);
498d7579d12SMichal Kazior 
49938a1390eSRakesh Pillai 	ret = ath10k_wmi_cmd_send(ar, skb,
50038a1390eSRakesh Pillai 				  ar->wmi.cmd->mgmt_tx_cmdid);
501d7579d12SMichal Kazior 	if (ret)
502d7579d12SMichal Kazior 		return ret;
503d7579d12SMichal Kazior 
504d7579d12SMichal Kazior 	/* FIXME There's no ACK event for Management Tx. This probably
50537ff1b0dSMarcin Rokicki 	 * shouldn't be called here either.
50637ff1b0dSMarcin Rokicki 	 */
507d7579d12SMichal Kazior 	info->flags |= IEEE80211_TX_STAT_ACK;
508d7579d12SMichal Kazior 	ieee80211_tx_status_irqsafe(ar->hw, msdu);
509d7579d12SMichal Kazior 
510d7579d12SMichal Kazior 	return 0;
511d7579d12SMichal Kazior }
512d7579d12SMichal Kazior 
513d7579d12SMichal Kazior static inline int
ath10k_wmi_pdev_set_regdomain(struct ath10k * ar,u16 rd,u16 rd2g,u16 rd5g,u16 ctl2g,u16 ctl5g,enum wmi_dfs_region dfs_reg)514d7579d12SMichal Kazior ath10k_wmi_pdev_set_regdomain(struct ath10k *ar, u16 rd, u16 rd2g, u16 rd5g,
515d7579d12SMichal Kazior 			      u16 ctl2g, u16 ctl5g,
516d7579d12SMichal Kazior 			      enum wmi_dfs_region dfs_reg)
517d7579d12SMichal Kazior {
518d7579d12SMichal Kazior 	struct sk_buff *skb;
519d7579d12SMichal Kazior 
520d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_pdev_set_rd)
521d7579d12SMichal Kazior 		return -EOPNOTSUPP;
522d7579d12SMichal Kazior 
523d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_pdev_set_rd(ar, rd, rd2g, rd5g, ctl2g, ctl5g,
524d7579d12SMichal Kazior 					   dfs_reg);
525d7579d12SMichal Kazior 	if (IS_ERR(skb))
526d7579d12SMichal Kazior 		return PTR_ERR(skb);
527d7579d12SMichal Kazior 
528d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb,
529d7579d12SMichal Kazior 				   ar->wmi.cmd->pdev_set_regdomain_cmdid);
530d7579d12SMichal Kazior }
531d7579d12SMichal Kazior 
532d7579d12SMichal Kazior static inline int
ath10k_wmi_pdev_set_base_macaddr(struct ath10k * ar,const u8 macaddr[ETH_ALEN])53305e7ba24SChristian Lamparter ath10k_wmi_pdev_set_base_macaddr(struct ath10k *ar, const u8 macaddr[ETH_ALEN])
53405e7ba24SChristian Lamparter {
53505e7ba24SChristian Lamparter 	struct sk_buff *skb;
53605e7ba24SChristian Lamparter 
53705e7ba24SChristian Lamparter 	if (!ar->wmi.ops->gen_pdev_set_base_macaddr)
53805e7ba24SChristian Lamparter 		return -EOPNOTSUPP;
53905e7ba24SChristian Lamparter 
54005e7ba24SChristian Lamparter 	skb = ar->wmi.ops->gen_pdev_set_base_macaddr(ar, macaddr);
54105e7ba24SChristian Lamparter 	if (IS_ERR(skb))
54205e7ba24SChristian Lamparter 		return PTR_ERR(skb);
54305e7ba24SChristian Lamparter 
54405e7ba24SChristian Lamparter 	return ath10k_wmi_cmd_send(ar, skb,
54505e7ba24SChristian Lamparter 				   ar->wmi.cmd->pdev_set_base_macaddr_cmdid);
54605e7ba24SChristian Lamparter }
54705e7ba24SChristian Lamparter 
54805e7ba24SChristian Lamparter static inline int
ath10k_wmi_pdev_suspend_target(struct ath10k * ar,u32 suspend_opt)549d7579d12SMichal Kazior ath10k_wmi_pdev_suspend_target(struct ath10k *ar, u32 suspend_opt)
550d7579d12SMichal Kazior {
551d7579d12SMichal Kazior 	struct sk_buff *skb;
552d7579d12SMichal Kazior 
553d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_pdev_suspend)
554d7579d12SMichal Kazior 		return -EOPNOTSUPP;
555d7579d12SMichal Kazior 
556d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_pdev_suspend(ar, suspend_opt);
557d7579d12SMichal Kazior 	if (IS_ERR(skb))
558d7579d12SMichal Kazior 		return PTR_ERR(skb);
559d7579d12SMichal Kazior 
560d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->pdev_suspend_cmdid);
561d7579d12SMichal Kazior }
562d7579d12SMichal Kazior 
563d7579d12SMichal Kazior static inline int
ath10k_wmi_pdev_resume_target(struct ath10k * ar)564d7579d12SMichal Kazior ath10k_wmi_pdev_resume_target(struct ath10k *ar)
565d7579d12SMichal Kazior {
566d7579d12SMichal Kazior 	struct sk_buff *skb;
567d7579d12SMichal Kazior 
568d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_pdev_resume)
569d7579d12SMichal Kazior 		return -EOPNOTSUPP;
570d7579d12SMichal Kazior 
571d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_pdev_resume(ar);
572d7579d12SMichal Kazior 	if (IS_ERR(skb))
573d7579d12SMichal Kazior 		return PTR_ERR(skb);
574d7579d12SMichal Kazior 
575d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->pdev_resume_cmdid);
576d7579d12SMichal Kazior }
577d7579d12SMichal Kazior 
578d7579d12SMichal Kazior static inline int
ath10k_wmi_pdev_set_param(struct ath10k * ar,u32 id,u32 value)579d7579d12SMichal Kazior ath10k_wmi_pdev_set_param(struct ath10k *ar, u32 id, u32 value)
580d7579d12SMichal Kazior {
581d7579d12SMichal Kazior 	struct sk_buff *skb;
582d7579d12SMichal Kazior 
583d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_pdev_set_param)
584d7579d12SMichal Kazior 		return -EOPNOTSUPP;
585d7579d12SMichal Kazior 
586d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_pdev_set_param(ar, id, value);
587d7579d12SMichal Kazior 	if (IS_ERR(skb))
588d7579d12SMichal Kazior 		return PTR_ERR(skb);
589d7579d12SMichal Kazior 
590d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->pdev_set_param_cmdid);
591d7579d12SMichal Kazior }
592d7579d12SMichal Kazior 
593d7579d12SMichal Kazior static inline int
ath10k_wmi_cmd_init(struct ath10k * ar)594d7579d12SMichal Kazior ath10k_wmi_cmd_init(struct ath10k *ar)
595d7579d12SMichal Kazior {
596d7579d12SMichal Kazior 	struct sk_buff *skb;
597d7579d12SMichal Kazior 
598d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_init)
599d7579d12SMichal Kazior 		return -EOPNOTSUPP;
600d7579d12SMichal Kazior 
601d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_init(ar);
602d7579d12SMichal Kazior 	if (IS_ERR(skb))
603d7579d12SMichal Kazior 		return PTR_ERR(skb);
604d7579d12SMichal Kazior 
605d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->init_cmdid);
606d7579d12SMichal Kazior }
607d7579d12SMichal Kazior 
608d7579d12SMichal Kazior static inline int
ath10k_wmi_start_scan(struct ath10k * ar,const struct wmi_start_scan_arg * arg)609d7579d12SMichal Kazior ath10k_wmi_start_scan(struct ath10k *ar,
610d7579d12SMichal Kazior 		      const struct wmi_start_scan_arg *arg)
611d7579d12SMichal Kazior {
612d7579d12SMichal Kazior 	struct sk_buff *skb;
613d7579d12SMichal Kazior 
614d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_start_scan)
615d7579d12SMichal Kazior 		return -EOPNOTSUPP;
616d7579d12SMichal Kazior 
617d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_start_scan(ar, arg);
618d7579d12SMichal Kazior 	if (IS_ERR(skb))
619d7579d12SMichal Kazior 		return PTR_ERR(skb);
620d7579d12SMichal Kazior 
621d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->start_scan_cmdid);
622d7579d12SMichal Kazior }
623d7579d12SMichal Kazior 
624d7579d12SMichal Kazior static inline int
ath10k_wmi_stop_scan(struct ath10k * ar,const struct wmi_stop_scan_arg * arg)625d7579d12SMichal Kazior ath10k_wmi_stop_scan(struct ath10k *ar, const struct wmi_stop_scan_arg *arg)
626d7579d12SMichal Kazior {
627d7579d12SMichal Kazior 	struct sk_buff *skb;
628d7579d12SMichal Kazior 
629d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_stop_scan)
630d7579d12SMichal Kazior 		return -EOPNOTSUPP;
631d7579d12SMichal Kazior 
632d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_stop_scan(ar, arg);
633d7579d12SMichal Kazior 	if (IS_ERR(skb))
634d7579d12SMichal Kazior 		return PTR_ERR(skb);
635d7579d12SMichal Kazior 
636d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->stop_scan_cmdid);
637d7579d12SMichal Kazior }
638d7579d12SMichal Kazior 
639d7579d12SMichal Kazior static inline int
ath10k_wmi_vdev_create(struct ath10k * ar,u32 vdev_id,enum wmi_vdev_type type,enum wmi_vdev_subtype subtype,const u8 macaddr[ETH_ALEN])640d7579d12SMichal Kazior ath10k_wmi_vdev_create(struct ath10k *ar, u32 vdev_id,
641d7579d12SMichal Kazior 		       enum wmi_vdev_type type,
642d7579d12SMichal Kazior 		       enum wmi_vdev_subtype subtype,
643d7579d12SMichal Kazior 		       const u8 macaddr[ETH_ALEN])
644d7579d12SMichal Kazior {
645d7579d12SMichal Kazior 	struct sk_buff *skb;
646d7579d12SMichal Kazior 
647d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_vdev_create)
648d7579d12SMichal Kazior 		return -EOPNOTSUPP;
649d7579d12SMichal Kazior 
650d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_create(ar, vdev_id, type, subtype, macaddr);
651d7579d12SMichal Kazior 	if (IS_ERR(skb))
652d7579d12SMichal Kazior 		return PTR_ERR(skb);
653d7579d12SMichal Kazior 
654d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_create_cmdid);
655d7579d12SMichal Kazior }
656d7579d12SMichal Kazior 
657d7579d12SMichal Kazior static inline int
ath10k_wmi_vdev_delete(struct ath10k * ar,u32 vdev_id)658d7579d12SMichal Kazior ath10k_wmi_vdev_delete(struct ath10k *ar, u32 vdev_id)
659d7579d12SMichal Kazior {
660d7579d12SMichal Kazior 	struct sk_buff *skb;
661d7579d12SMichal Kazior 
662d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_vdev_delete)
663d7579d12SMichal Kazior 		return -EOPNOTSUPP;
664d7579d12SMichal Kazior 
665d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_delete(ar, vdev_id);
666d7579d12SMichal Kazior 	if (IS_ERR(skb))
667d7579d12SMichal Kazior 		return PTR_ERR(skb);
668d7579d12SMichal Kazior 
669d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_delete_cmdid);
670d7579d12SMichal Kazior }
671d7579d12SMichal Kazior 
672d7579d12SMichal Kazior static inline int
ath10k_wmi_vdev_start(struct ath10k * ar,const struct wmi_vdev_start_request_arg * arg)673d7579d12SMichal Kazior ath10k_wmi_vdev_start(struct ath10k *ar,
674d7579d12SMichal Kazior 		      const struct wmi_vdev_start_request_arg *arg)
675d7579d12SMichal Kazior {
676d7579d12SMichal Kazior 	struct sk_buff *skb;
677d7579d12SMichal Kazior 
678d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_vdev_start)
679d7579d12SMichal Kazior 		return -EOPNOTSUPP;
680d7579d12SMichal Kazior 
681d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_start(ar, arg, false);
682d7579d12SMichal Kazior 	if (IS_ERR(skb))
683d7579d12SMichal Kazior 		return PTR_ERR(skb);
684d7579d12SMichal Kazior 
685d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb,
686d7579d12SMichal Kazior 				   ar->wmi.cmd->vdev_start_request_cmdid);
687d7579d12SMichal Kazior }
688d7579d12SMichal Kazior 
689d7579d12SMichal Kazior static inline int
ath10k_wmi_vdev_restart(struct ath10k * ar,const struct wmi_vdev_start_request_arg * arg)690d7579d12SMichal Kazior ath10k_wmi_vdev_restart(struct ath10k *ar,
691d7579d12SMichal Kazior 			const struct wmi_vdev_start_request_arg *arg)
692d7579d12SMichal Kazior {
693d7579d12SMichal Kazior 	struct sk_buff *skb;
694d7579d12SMichal Kazior 
695d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_vdev_start)
696d7579d12SMichal Kazior 		return -EOPNOTSUPP;
697d7579d12SMichal Kazior 
698d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_start(ar, arg, true);
699d7579d12SMichal Kazior 	if (IS_ERR(skb))
700d7579d12SMichal Kazior 		return PTR_ERR(skb);
701d7579d12SMichal Kazior 
702d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb,
703d7579d12SMichal Kazior 				   ar->wmi.cmd->vdev_restart_request_cmdid);
704d7579d12SMichal Kazior }
705d7579d12SMichal Kazior 
706d7579d12SMichal Kazior static inline int
ath10k_wmi_vdev_stop(struct ath10k * ar,u32 vdev_id)707d7579d12SMichal Kazior ath10k_wmi_vdev_stop(struct ath10k *ar, u32 vdev_id)
708d7579d12SMichal Kazior {
709d7579d12SMichal Kazior 	struct sk_buff *skb;
710d7579d12SMichal Kazior 
711d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_vdev_stop)
712d7579d12SMichal Kazior 		return -EOPNOTSUPP;
713d7579d12SMichal Kazior 
714d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_stop(ar, vdev_id);
715d7579d12SMichal Kazior 	if (IS_ERR(skb))
716d7579d12SMichal Kazior 		return PTR_ERR(skb);
717d7579d12SMichal Kazior 
718d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_stop_cmdid);
719d7579d12SMichal Kazior }
720d7579d12SMichal Kazior 
721d7579d12SMichal Kazior static inline int
ath10k_wmi_vdev_up(struct ath10k * ar,u32 vdev_id,u32 aid,const u8 * bssid)722d7579d12SMichal Kazior ath10k_wmi_vdev_up(struct ath10k *ar, u32 vdev_id, u32 aid, const u8 *bssid)
723d7579d12SMichal Kazior {
724d7579d12SMichal Kazior 	struct sk_buff *skb;
725d7579d12SMichal Kazior 
726d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_vdev_up)
727d7579d12SMichal Kazior 		return -EOPNOTSUPP;
728d7579d12SMichal Kazior 
729d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_up(ar, vdev_id, aid, bssid);
730d7579d12SMichal Kazior 	if (IS_ERR(skb))
731d7579d12SMichal Kazior 		return PTR_ERR(skb);
732d7579d12SMichal Kazior 
733d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_up_cmdid);
734d7579d12SMichal Kazior }
735d7579d12SMichal Kazior 
736d7579d12SMichal Kazior static inline int
ath10k_wmi_vdev_down(struct ath10k * ar,u32 vdev_id)737d7579d12SMichal Kazior ath10k_wmi_vdev_down(struct ath10k *ar, u32 vdev_id)
738d7579d12SMichal Kazior {
739d7579d12SMichal Kazior 	struct sk_buff *skb;
740d7579d12SMichal Kazior 
741d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_vdev_down)
742d7579d12SMichal Kazior 		return -EOPNOTSUPP;
743d7579d12SMichal Kazior 
744d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_down(ar, vdev_id);
745d7579d12SMichal Kazior 	if (IS_ERR(skb))
746d7579d12SMichal Kazior 		return PTR_ERR(skb);
747d7579d12SMichal Kazior 
748d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_down_cmdid);
749d7579d12SMichal Kazior }
750d7579d12SMichal Kazior 
751d7579d12SMichal Kazior static inline int
ath10k_wmi_vdev_set_param(struct ath10k * ar,u32 vdev_id,u32 param_id,u32 param_value)752d7579d12SMichal Kazior ath10k_wmi_vdev_set_param(struct ath10k *ar, u32 vdev_id, u32 param_id,
753d7579d12SMichal Kazior 			  u32 param_value)
754d7579d12SMichal Kazior {
755d7579d12SMichal Kazior 	struct sk_buff *skb;
756d7579d12SMichal Kazior 
757d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_vdev_set_param)
758d7579d12SMichal Kazior 		return -EOPNOTSUPP;
759d7579d12SMichal Kazior 
760d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_set_param(ar, vdev_id, param_id,
761d7579d12SMichal Kazior 					      param_value);
762d7579d12SMichal Kazior 	if (IS_ERR(skb))
763d7579d12SMichal Kazior 		return PTR_ERR(skb);
764d7579d12SMichal Kazior 
765d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_set_param_cmdid);
766d7579d12SMichal Kazior }
767d7579d12SMichal Kazior 
768d7579d12SMichal Kazior static inline int
ath10k_wmi_vdev_install_key(struct ath10k * ar,const struct wmi_vdev_install_key_arg * arg)769d7579d12SMichal Kazior ath10k_wmi_vdev_install_key(struct ath10k *ar,
770d7579d12SMichal Kazior 			    const struct wmi_vdev_install_key_arg *arg)
771d7579d12SMichal Kazior {
772d7579d12SMichal Kazior 	struct sk_buff *skb;
773d7579d12SMichal Kazior 
774d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_vdev_install_key)
775d7579d12SMichal Kazior 		return -EOPNOTSUPP;
776d7579d12SMichal Kazior 
777d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_install_key(ar, arg);
778d7579d12SMichal Kazior 	if (IS_ERR(skb))
779d7579d12SMichal Kazior 		return PTR_ERR(skb);
780d7579d12SMichal Kazior 
781d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb,
782d7579d12SMichal Kazior 				   ar->wmi.cmd->vdev_install_key_cmdid);
783d7579d12SMichal Kazior }
784d7579d12SMichal Kazior 
785d7579d12SMichal Kazior static inline int
ath10k_wmi_vdev_spectral_conf(struct ath10k * ar,const struct wmi_vdev_spectral_conf_arg * arg)786d7579d12SMichal Kazior ath10k_wmi_vdev_spectral_conf(struct ath10k *ar,
787d7579d12SMichal Kazior 			      const struct wmi_vdev_spectral_conf_arg *arg)
788d7579d12SMichal Kazior {
789d7579d12SMichal Kazior 	struct sk_buff *skb;
790d7579d12SMichal Kazior 	u32 cmd_id;
791d7579d12SMichal Kazior 
79218ae68ffSMichal Kazior 	if (!ar->wmi.ops->gen_vdev_spectral_conf)
79318ae68ffSMichal Kazior 		return -EOPNOTSUPP;
79418ae68ffSMichal Kazior 
795d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_spectral_conf(ar, arg);
796d7579d12SMichal Kazior 	if (IS_ERR(skb))
797d7579d12SMichal Kazior 		return PTR_ERR(skb);
798d7579d12SMichal Kazior 
799d7579d12SMichal Kazior 	cmd_id = ar->wmi.cmd->vdev_spectral_scan_configure_cmdid;
800d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, cmd_id);
801d7579d12SMichal Kazior }
802d7579d12SMichal Kazior 
803d7579d12SMichal Kazior static inline int
ath10k_wmi_vdev_spectral_enable(struct ath10k * ar,u32 vdev_id,u32 trigger,u32 enable)804d7579d12SMichal Kazior ath10k_wmi_vdev_spectral_enable(struct ath10k *ar, u32 vdev_id, u32 trigger,
805d7579d12SMichal Kazior 				u32 enable)
806d7579d12SMichal Kazior {
807d7579d12SMichal Kazior 	struct sk_buff *skb;
808d7579d12SMichal Kazior 	u32 cmd_id;
809d7579d12SMichal Kazior 
81018ae68ffSMichal Kazior 	if (!ar->wmi.ops->gen_vdev_spectral_enable)
81118ae68ffSMichal Kazior 		return -EOPNOTSUPP;
81218ae68ffSMichal Kazior 
813d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_spectral_enable(ar, vdev_id, trigger,
814d7579d12SMichal Kazior 						    enable);
815d7579d12SMichal Kazior 	if (IS_ERR(skb))
816d7579d12SMichal Kazior 		return PTR_ERR(skb);
817d7579d12SMichal Kazior 
818d7579d12SMichal Kazior 	cmd_id = ar->wmi.cmd->vdev_spectral_scan_enable_cmdid;
819d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, cmd_id);
820d7579d12SMichal Kazior }
821d7579d12SMichal Kazior 
822d7579d12SMichal Kazior static inline int
ath10k_wmi_vdev_sta_uapsd(struct ath10k * ar,u32 vdev_id,const u8 peer_addr[ETH_ALEN],const struct wmi_sta_uapsd_auto_trig_arg * args,u32 num_ac)8230c7e477cSJanusz Dziedzic ath10k_wmi_vdev_sta_uapsd(struct ath10k *ar, u32 vdev_id,
8240c7e477cSJanusz Dziedzic 			  const u8 peer_addr[ETH_ALEN],
8250c7e477cSJanusz Dziedzic 			  const struct wmi_sta_uapsd_auto_trig_arg *args,
8260c7e477cSJanusz Dziedzic 			  u32 num_ac)
8270c7e477cSJanusz Dziedzic {
8280c7e477cSJanusz Dziedzic 	struct sk_buff *skb;
8290c7e477cSJanusz Dziedzic 	u32 cmd_id;
8300c7e477cSJanusz Dziedzic 
8310c7e477cSJanusz Dziedzic 	if (!ar->wmi.ops->gen_vdev_sta_uapsd)
8320c7e477cSJanusz Dziedzic 		return -EOPNOTSUPP;
8330c7e477cSJanusz Dziedzic 
8340c7e477cSJanusz Dziedzic 	skb = ar->wmi.ops->gen_vdev_sta_uapsd(ar, vdev_id, peer_addr, args,
8350c7e477cSJanusz Dziedzic 					      num_ac);
8360c7e477cSJanusz Dziedzic 	if (IS_ERR(skb))
8370c7e477cSJanusz Dziedzic 		return PTR_ERR(skb);
8380c7e477cSJanusz Dziedzic 
8390c7e477cSJanusz Dziedzic 	cmd_id = ar->wmi.cmd->sta_uapsd_auto_trig_cmdid;
8400c7e477cSJanusz Dziedzic 	return ath10k_wmi_cmd_send(ar, skb, cmd_id);
8410c7e477cSJanusz Dziedzic }
8420c7e477cSJanusz Dziedzic 
8430c7e477cSJanusz Dziedzic static inline int
ath10k_wmi_vdev_wmm_conf(struct ath10k * ar,u32 vdev_id,const struct wmi_wmm_params_all_arg * arg)8446d492fe2SMichal Kazior ath10k_wmi_vdev_wmm_conf(struct ath10k *ar, u32 vdev_id,
8456d492fe2SMichal Kazior 			 const struct wmi_wmm_params_all_arg *arg)
8466d492fe2SMichal Kazior {
8476d492fe2SMichal Kazior 	struct sk_buff *skb;
8486d492fe2SMichal Kazior 	u32 cmd_id;
8496d492fe2SMichal Kazior 
8506d492fe2SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_wmm_conf(ar, vdev_id, arg);
8516d492fe2SMichal Kazior 	if (IS_ERR(skb))
8526d492fe2SMichal Kazior 		return PTR_ERR(skb);
8536d492fe2SMichal Kazior 
8546d492fe2SMichal Kazior 	cmd_id = ar->wmi.cmd->vdev_set_wmm_params_cmdid;
8556d492fe2SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, cmd_id);
8566d492fe2SMichal Kazior }
8576d492fe2SMichal Kazior 
8586d492fe2SMichal Kazior static inline int
ath10k_wmi_peer_create(struct ath10k * ar,u32 vdev_id,const u8 peer_addr[ETH_ALEN],enum wmi_peer_type peer_type)859d7579d12SMichal Kazior ath10k_wmi_peer_create(struct ath10k *ar, u32 vdev_id,
8607390ed34SMarek Puzyniak 		       const u8 peer_addr[ETH_ALEN],
8617390ed34SMarek Puzyniak 		       enum wmi_peer_type peer_type)
862d7579d12SMichal Kazior {
863d7579d12SMichal Kazior 	struct sk_buff *skb;
864d7579d12SMichal Kazior 
865d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_peer_create)
866d7579d12SMichal Kazior 		return -EOPNOTSUPP;
867d7579d12SMichal Kazior 
8687390ed34SMarek Puzyniak 	skb = ar->wmi.ops->gen_peer_create(ar, vdev_id, peer_addr, peer_type);
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->peer_create_cmdid);
873d7579d12SMichal Kazior }
874d7579d12SMichal Kazior 
875d7579d12SMichal Kazior static inline int
ath10k_wmi_peer_delete(struct ath10k * ar,u32 vdev_id,const u8 peer_addr[ETH_ALEN])876d7579d12SMichal Kazior ath10k_wmi_peer_delete(struct ath10k *ar, u32 vdev_id,
877d7579d12SMichal Kazior 		       const u8 peer_addr[ETH_ALEN])
878d7579d12SMichal Kazior {
879d7579d12SMichal Kazior 	struct sk_buff *skb;
880d7579d12SMichal Kazior 
881d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_peer_delete)
882d7579d12SMichal Kazior 		return -EOPNOTSUPP;
883d7579d12SMichal Kazior 
884d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_peer_delete(ar, vdev_id, peer_addr);
885d7579d12SMichal Kazior 	if (IS_ERR(skb))
886d7579d12SMichal Kazior 		return PTR_ERR(skb);
887d7579d12SMichal Kazior 
888d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->peer_delete_cmdid);
889d7579d12SMichal Kazior }
890d7579d12SMichal Kazior 
891d7579d12SMichal Kazior static inline int
ath10k_wmi_peer_flush(struct ath10k * ar,u32 vdev_id,const u8 peer_addr[ETH_ALEN],u32 tid_bitmap)892d7579d12SMichal Kazior ath10k_wmi_peer_flush(struct ath10k *ar, u32 vdev_id,
893d7579d12SMichal Kazior 		      const u8 peer_addr[ETH_ALEN], u32 tid_bitmap)
894d7579d12SMichal Kazior {
895d7579d12SMichal Kazior 	struct sk_buff *skb;
896d7579d12SMichal Kazior 
897d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_peer_flush)
898d7579d12SMichal Kazior 		return -EOPNOTSUPP;
899d7579d12SMichal Kazior 
900d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_peer_flush(ar, vdev_id, peer_addr, tid_bitmap);
901d7579d12SMichal Kazior 	if (IS_ERR(skb))
902d7579d12SMichal Kazior 		return PTR_ERR(skb);
903d7579d12SMichal Kazior 
904d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->peer_flush_tids_cmdid);
905d7579d12SMichal Kazior }
906d7579d12SMichal Kazior 
907d7579d12SMichal Kazior static inline int
ath10k_wmi_peer_set_param(struct ath10k * ar,u32 vdev_id,const u8 * peer_addr,enum wmi_peer_param param_id,u32 param_value)908d7579d12SMichal Kazior ath10k_wmi_peer_set_param(struct ath10k *ar, u32 vdev_id, const u8 *peer_addr,
909d7579d12SMichal Kazior 			  enum wmi_peer_param param_id, u32 param_value)
910d7579d12SMichal Kazior {
911d7579d12SMichal Kazior 	struct sk_buff *skb;
912d7579d12SMichal Kazior 
913d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_peer_set_param)
914d7579d12SMichal Kazior 		return -EOPNOTSUPP;
915d7579d12SMichal Kazior 
916d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_peer_set_param(ar, vdev_id, peer_addr, param_id,
917d7579d12SMichal Kazior 					      param_value);
918d7579d12SMichal Kazior 	if (IS_ERR(skb))
919d7579d12SMichal Kazior 		return PTR_ERR(skb);
920d7579d12SMichal Kazior 
921d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->peer_set_param_cmdid);
922d7579d12SMichal Kazior }
923d7579d12SMichal Kazior 
924d7579d12SMichal Kazior static inline int
ath10k_wmi_set_psmode(struct ath10k * ar,u32 vdev_id,enum wmi_sta_ps_mode psmode)925d7579d12SMichal Kazior ath10k_wmi_set_psmode(struct ath10k *ar, u32 vdev_id,
926d7579d12SMichal Kazior 		      enum wmi_sta_ps_mode psmode)
927d7579d12SMichal Kazior {
928d7579d12SMichal Kazior 	struct sk_buff *skb;
929d7579d12SMichal Kazior 
930d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_set_psmode)
931d7579d12SMichal Kazior 		return -EOPNOTSUPP;
932d7579d12SMichal Kazior 
933d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_set_psmode(ar, vdev_id, psmode);
934d7579d12SMichal Kazior 	if (IS_ERR(skb))
935d7579d12SMichal Kazior 		return PTR_ERR(skb);
936d7579d12SMichal Kazior 
937d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb,
938d7579d12SMichal Kazior 				   ar->wmi.cmd->sta_powersave_mode_cmdid);
939d7579d12SMichal Kazior }
940d7579d12SMichal Kazior 
941d7579d12SMichal Kazior static inline int
ath10k_wmi_set_sta_ps_param(struct ath10k * ar,u32 vdev_id,enum wmi_sta_powersave_param param_id,u32 value)942d7579d12SMichal Kazior ath10k_wmi_set_sta_ps_param(struct ath10k *ar, u32 vdev_id,
943d7579d12SMichal Kazior 			    enum wmi_sta_powersave_param param_id, u32 value)
944d7579d12SMichal Kazior {
945d7579d12SMichal Kazior 	struct sk_buff *skb;
946d7579d12SMichal Kazior 
947d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_set_sta_ps)
948d7579d12SMichal Kazior 		return -EOPNOTSUPP;
949d7579d12SMichal Kazior 
950d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_set_sta_ps(ar, vdev_id, param_id, value);
951d7579d12SMichal Kazior 	if (IS_ERR(skb))
952d7579d12SMichal Kazior 		return PTR_ERR(skb);
953d7579d12SMichal Kazior 
954d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb,
955d7579d12SMichal Kazior 				   ar->wmi.cmd->sta_powersave_param_cmdid);
956d7579d12SMichal Kazior }
957d7579d12SMichal Kazior 
958d7579d12SMichal Kazior static inline int
ath10k_wmi_set_ap_ps_param(struct ath10k * ar,u32 vdev_id,const u8 * mac,enum wmi_ap_ps_peer_param param_id,u32 value)959d7579d12SMichal Kazior ath10k_wmi_set_ap_ps_param(struct ath10k *ar, u32 vdev_id, const u8 *mac,
960d7579d12SMichal Kazior 			   enum wmi_ap_ps_peer_param param_id, u32 value)
961d7579d12SMichal Kazior {
962d7579d12SMichal Kazior 	struct sk_buff *skb;
963d7579d12SMichal Kazior 
964d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_set_ap_ps)
965d7579d12SMichal Kazior 		return -EOPNOTSUPP;
966d7579d12SMichal Kazior 
967d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_set_ap_ps(ar, vdev_id, mac, param_id, value);
968d7579d12SMichal Kazior 	if (IS_ERR(skb))
969d7579d12SMichal Kazior 		return PTR_ERR(skb);
970d7579d12SMichal Kazior 
971d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb,
972d7579d12SMichal Kazior 				   ar->wmi.cmd->ap_ps_peer_param_cmdid);
973d7579d12SMichal Kazior }
974d7579d12SMichal Kazior 
975d7579d12SMichal Kazior static inline int
ath10k_wmi_scan_chan_list(struct ath10k * ar,const struct wmi_scan_chan_list_arg * arg)976d7579d12SMichal Kazior ath10k_wmi_scan_chan_list(struct ath10k *ar,
977d7579d12SMichal Kazior 			  const struct wmi_scan_chan_list_arg *arg)
978d7579d12SMichal Kazior {
979d7579d12SMichal Kazior 	struct sk_buff *skb;
980d7579d12SMichal Kazior 
981d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_scan_chan_list)
982d7579d12SMichal Kazior 		return -EOPNOTSUPP;
983d7579d12SMichal Kazior 
984d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_scan_chan_list(ar, arg);
985d7579d12SMichal Kazior 	if (IS_ERR(skb))
986d7579d12SMichal Kazior 		return PTR_ERR(skb);
987d7579d12SMichal Kazior 
988d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->scan_chan_list_cmdid);
989d7579d12SMichal Kazior }
990d7579d12SMichal Kazior 
991d7579d12SMichal Kazior static inline int
ath10k_wmi_scan_prob_req_oui(struct ath10k * ar,const u8 mac_addr[ETH_ALEN])99260e1d0fbSCarl Huang ath10k_wmi_scan_prob_req_oui(struct ath10k *ar, const u8 mac_addr[ETH_ALEN])
99360e1d0fbSCarl Huang {
99460e1d0fbSCarl Huang 	struct sk_buff *skb;
99560e1d0fbSCarl Huang 	u32 prob_req_oui;
99660e1d0fbSCarl Huang 
99760e1d0fbSCarl Huang 	prob_req_oui = (((u32)mac_addr[0]) << 16) |
99860e1d0fbSCarl Huang 		       (((u32)mac_addr[1]) << 8) | mac_addr[2];
99960e1d0fbSCarl Huang 
100060e1d0fbSCarl Huang 	if (!ar->wmi.ops->gen_scan_prob_req_oui)
100160e1d0fbSCarl Huang 		return -EOPNOTSUPP;
100260e1d0fbSCarl Huang 
100360e1d0fbSCarl Huang 	skb = ar->wmi.ops->gen_scan_prob_req_oui(ar, prob_req_oui);
100460e1d0fbSCarl Huang 	if (IS_ERR(skb))
100560e1d0fbSCarl Huang 		return PTR_ERR(skb);
100660e1d0fbSCarl Huang 
100760e1d0fbSCarl Huang 	return ath10k_wmi_cmd_send(ar, skb,
100860e1d0fbSCarl Huang 			ar->wmi.cmd->scan_prob_req_oui_cmdid);
100960e1d0fbSCarl Huang }
101060e1d0fbSCarl Huang 
101160e1d0fbSCarl Huang static inline int
ath10k_wmi_peer_assoc(struct ath10k * ar,const struct wmi_peer_assoc_complete_arg * arg)1012d7579d12SMichal Kazior ath10k_wmi_peer_assoc(struct ath10k *ar,
1013d7579d12SMichal Kazior 		      const struct wmi_peer_assoc_complete_arg *arg)
1014d7579d12SMichal Kazior {
1015d7579d12SMichal Kazior 	struct sk_buff *skb;
1016d7579d12SMichal Kazior 
1017d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_peer_assoc)
1018d7579d12SMichal Kazior 		return -EOPNOTSUPP;
1019d7579d12SMichal Kazior 
1020d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_peer_assoc(ar, arg);
1021d7579d12SMichal Kazior 	if (IS_ERR(skb))
1022d7579d12SMichal Kazior 		return PTR_ERR(skb);
1023d7579d12SMichal Kazior 
1024d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->peer_assoc_cmdid);
1025d7579d12SMichal Kazior }
1026d7579d12SMichal Kazior 
1027d7579d12SMichal Kazior static inline int
ath10k_wmi_beacon_send_ref_nowait(struct ath10k * ar,u32 vdev_id,const void * bcn,size_t bcn_len,u32 bcn_paddr,bool dtim_zero,bool deliver_cab)10289ad50182SMichal Kazior ath10k_wmi_beacon_send_ref_nowait(struct ath10k *ar, u32 vdev_id,
10299ad50182SMichal Kazior 				  const void *bcn, size_t bcn_len,
10309ad50182SMichal Kazior 				  u32 bcn_paddr, bool dtim_zero,
10319ad50182SMichal Kazior 				  bool deliver_cab)
1032d7579d12SMichal Kazior {
1033d7579d12SMichal Kazior 	struct sk_buff *skb;
1034d7579d12SMichal Kazior 	int ret;
1035d7579d12SMichal Kazior 
1036d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_beacon_dma)
1037d7579d12SMichal Kazior 		return -EOPNOTSUPP;
1038d7579d12SMichal Kazior 
10399ad50182SMichal Kazior 	skb = ar->wmi.ops->gen_beacon_dma(ar, vdev_id, bcn, bcn_len, bcn_paddr,
10409ad50182SMichal Kazior 					  dtim_zero, deliver_cab);
1041d7579d12SMichal Kazior 	if (IS_ERR(skb))
1042d7579d12SMichal Kazior 		return PTR_ERR(skb);
1043d7579d12SMichal Kazior 
1044d7579d12SMichal Kazior 	ret = ath10k_wmi_cmd_send_nowait(ar, skb,
1045d7579d12SMichal Kazior 					 ar->wmi.cmd->pdev_send_bcn_cmdid);
1046d7579d12SMichal Kazior 	if (ret) {
1047d7579d12SMichal Kazior 		dev_kfree_skb(skb);
1048d7579d12SMichal Kazior 		return ret;
1049d7579d12SMichal Kazior 	}
1050d7579d12SMichal Kazior 
1051d7579d12SMichal Kazior 	return 0;
1052d7579d12SMichal Kazior }
1053d7579d12SMichal Kazior 
1054d7579d12SMichal Kazior static inline int
ath10k_wmi_pdev_set_wmm_params(struct ath10k * ar,const struct wmi_wmm_params_all_arg * arg)1055d7579d12SMichal Kazior ath10k_wmi_pdev_set_wmm_params(struct ath10k *ar,
10565e752e42SMichal Kazior 			       const struct wmi_wmm_params_all_arg *arg)
1057d7579d12SMichal Kazior {
1058d7579d12SMichal Kazior 	struct sk_buff *skb;
1059d7579d12SMichal Kazior 
1060d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_pdev_set_wmm)
1061d7579d12SMichal Kazior 		return -EOPNOTSUPP;
1062d7579d12SMichal Kazior 
1063d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_pdev_set_wmm(ar, arg);
1064d7579d12SMichal Kazior 	if (IS_ERR(skb))
1065d7579d12SMichal Kazior 		return PTR_ERR(skb);
1066d7579d12SMichal Kazior 
1067d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb,
1068d7579d12SMichal Kazior 				   ar->wmi.cmd->pdev_set_wmm_params_cmdid);
1069d7579d12SMichal Kazior }
1070d7579d12SMichal Kazior 
1071d7579d12SMichal Kazior static inline int
ath10k_wmi_request_stats(struct ath10k * ar,u32 stats_mask)1072de23d3efSMichal Kazior ath10k_wmi_request_stats(struct ath10k *ar, u32 stats_mask)
1073d7579d12SMichal Kazior {
1074d7579d12SMichal Kazior 	struct sk_buff *skb;
1075d7579d12SMichal Kazior 
1076d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_request_stats)
1077d7579d12SMichal Kazior 		return -EOPNOTSUPP;
1078d7579d12SMichal Kazior 
1079de23d3efSMichal Kazior 	skb = ar->wmi.ops->gen_request_stats(ar, stats_mask);
1080d7579d12SMichal Kazior 	if (IS_ERR(skb))
1081d7579d12SMichal Kazior 		return PTR_ERR(skb);
1082d7579d12SMichal Kazior 
1083d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->request_stats_cmdid);
1084d7579d12SMichal Kazior }
1085d7579d12SMichal Kazior 
1086d7579d12SMichal Kazior static inline int
ath10k_wmi_request_peer_stats_info(struct ath10k * ar,u32 vdev_id,enum wmi_peer_stats_info_request_type type,u8 * addr,u32 reset)10870f7cb268SWen Gong ath10k_wmi_request_peer_stats_info(struct ath10k *ar,
10880f7cb268SWen Gong 				   u32 vdev_id,
10890f7cb268SWen Gong 				   enum wmi_peer_stats_info_request_type type,
10900f7cb268SWen Gong 				   u8 *addr,
10910f7cb268SWen Gong 				   u32 reset)
10920f7cb268SWen Gong {
10930f7cb268SWen Gong 	struct sk_buff *skb;
10940f7cb268SWen Gong 
10950f7cb268SWen Gong 	if (!ar->wmi.ops->gen_request_peer_stats_info)
10960f7cb268SWen Gong 		return -EOPNOTSUPP;
10970f7cb268SWen Gong 
10980f7cb268SWen Gong 	skb = ar->wmi.ops->gen_request_peer_stats_info(ar,
10990f7cb268SWen Gong 						       vdev_id,
11000f7cb268SWen Gong 						       type,
11010f7cb268SWen Gong 						       addr,
11020f7cb268SWen Gong 						       reset);
11030f7cb268SWen Gong 	if (IS_ERR(skb))
11040f7cb268SWen Gong 		return PTR_ERR(skb);
11050f7cb268SWen Gong 
11060f7cb268SWen Gong 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->request_peer_stats_info_cmdid);
11070f7cb268SWen Gong }
11080f7cb268SWen Gong 
11090f7cb268SWen Gong static inline int
ath10k_wmi_force_fw_hang(struct ath10k * ar,enum wmi_force_fw_hang_type type,u32 delay_ms)1110d7579d12SMichal Kazior ath10k_wmi_force_fw_hang(struct ath10k *ar,
1111d7579d12SMichal Kazior 			 enum wmi_force_fw_hang_type type, u32 delay_ms)
1112d7579d12SMichal Kazior {
1113d7579d12SMichal Kazior 	struct sk_buff *skb;
1114d7579d12SMichal Kazior 
1115d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_force_fw_hang)
1116d7579d12SMichal Kazior 		return -EOPNOTSUPP;
1117d7579d12SMichal Kazior 
1118d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_force_fw_hang(ar, type, delay_ms);
1119d7579d12SMichal Kazior 	if (IS_ERR(skb))
1120d7579d12SMichal Kazior 		return PTR_ERR(skb);
1121d7579d12SMichal Kazior 
1122d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->force_fw_hang_cmdid);
1123d7579d12SMichal Kazior }
1124d7579d12SMichal Kazior 
1125d7579d12SMichal Kazior static inline int
ath10k_wmi_dbglog_cfg(struct ath10k * ar,u64 module_enable,u32 log_level)1126afcbc82cSMaharaja Kennadyrajan ath10k_wmi_dbglog_cfg(struct ath10k *ar, u64 module_enable, u32 log_level)
1127d7579d12SMichal Kazior {
1128d7579d12SMichal Kazior 	struct sk_buff *skb;
1129d7579d12SMichal Kazior 
1130d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_dbglog_cfg)
1131d7579d12SMichal Kazior 		return -EOPNOTSUPP;
1132d7579d12SMichal Kazior 
1133467210a6SSenthilKumar Jegadeesan 	skb = ar->wmi.ops->gen_dbglog_cfg(ar, module_enable, log_level);
1134d7579d12SMichal Kazior 	if (IS_ERR(skb))
1135d7579d12SMichal Kazior 		return PTR_ERR(skb);
1136d7579d12SMichal Kazior 
1137d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->dbglog_cfg_cmdid);
1138d7579d12SMichal Kazior }
1139d7579d12SMichal Kazior 
1140d7579d12SMichal Kazior static inline int
ath10k_wmi_pdev_pktlog_enable(struct ath10k * ar,u32 filter)1141d7579d12SMichal Kazior ath10k_wmi_pdev_pktlog_enable(struct ath10k *ar, u32 filter)
1142d7579d12SMichal Kazior {
1143d7579d12SMichal Kazior 	struct sk_buff *skb;
1144d7579d12SMichal Kazior 
1145d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_pktlog_enable)
1146d7579d12SMichal Kazior 		return -EOPNOTSUPP;
1147d7579d12SMichal Kazior 
1148d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_pktlog_enable(ar, filter);
1149d7579d12SMichal Kazior 	if (IS_ERR(skb))
1150d7579d12SMichal Kazior 		return PTR_ERR(skb);
1151d7579d12SMichal Kazior 
1152d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->pdev_pktlog_enable_cmdid);
1153d7579d12SMichal Kazior }
1154d7579d12SMichal Kazior 
1155d7579d12SMichal Kazior static inline int
ath10k_wmi_pdev_pktlog_disable(struct ath10k * ar)1156d7579d12SMichal Kazior ath10k_wmi_pdev_pktlog_disable(struct ath10k *ar)
1157d7579d12SMichal Kazior {
1158d7579d12SMichal Kazior 	struct sk_buff *skb;
1159d7579d12SMichal Kazior 
1160d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_pktlog_disable)
1161d7579d12SMichal Kazior 		return -EOPNOTSUPP;
1162d7579d12SMichal Kazior 
1163d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_pktlog_disable(ar);
1164d7579d12SMichal Kazior 	if (IS_ERR(skb))
1165d7579d12SMichal Kazior 		return PTR_ERR(skb);
1166d7579d12SMichal Kazior 
1167d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb,
1168d7579d12SMichal Kazior 				   ar->wmi.cmd->pdev_pktlog_disable_cmdid);
1169d7579d12SMichal Kazior }
1170d7579d12SMichal Kazior 
1171ffdd738dSRajkumar Manoharan static inline int
ath10k_wmi_pdev_set_quiet_mode(struct ath10k * ar,u32 period,u32 duration,u32 next_offset,u32 enabled)1172ffdd738dSRajkumar Manoharan ath10k_wmi_pdev_set_quiet_mode(struct ath10k *ar, u32 period, u32 duration,
1173ffdd738dSRajkumar Manoharan 			       u32 next_offset, u32 enabled)
1174ffdd738dSRajkumar Manoharan {
1175ffdd738dSRajkumar Manoharan 	struct sk_buff *skb;
1176ffdd738dSRajkumar Manoharan 
1177ffdd738dSRajkumar Manoharan 	if (!ar->wmi.ops->gen_pdev_set_quiet_mode)
1178ffdd738dSRajkumar Manoharan 		return -EOPNOTSUPP;
1179ffdd738dSRajkumar Manoharan 
1180ffdd738dSRajkumar Manoharan 	skb = ar->wmi.ops->gen_pdev_set_quiet_mode(ar, period, duration,
1181ffdd738dSRajkumar Manoharan 						   next_offset, enabled);
1182ffdd738dSRajkumar Manoharan 	if (IS_ERR(skb))
1183ffdd738dSRajkumar Manoharan 		return PTR_ERR(skb);
1184ffdd738dSRajkumar Manoharan 
1185ffdd738dSRajkumar Manoharan 	return ath10k_wmi_cmd_send(ar, skb,
1186ffdd738dSRajkumar Manoharan 				   ar->wmi.cmd->pdev_set_quiet_mode_cmdid);
1187ffdd738dSRajkumar Manoharan }
1188ffdd738dSRajkumar Manoharan 
1189a57a6a27SRajkumar Manoharan static inline int
ath10k_wmi_pdev_get_temperature(struct ath10k * ar)1190a57a6a27SRajkumar Manoharan ath10k_wmi_pdev_get_temperature(struct ath10k *ar)
1191a57a6a27SRajkumar Manoharan {
1192a57a6a27SRajkumar Manoharan 	struct sk_buff *skb;
1193a57a6a27SRajkumar Manoharan 
1194a57a6a27SRajkumar Manoharan 	if (!ar->wmi.ops->gen_pdev_get_temperature)
1195a57a6a27SRajkumar Manoharan 		return -EOPNOTSUPP;
1196a57a6a27SRajkumar Manoharan 
1197a57a6a27SRajkumar Manoharan 	skb = ar->wmi.ops->gen_pdev_get_temperature(ar);
1198a57a6a27SRajkumar Manoharan 	if (IS_ERR(skb))
1199a57a6a27SRajkumar Manoharan 		return PTR_ERR(skb);
1200a57a6a27SRajkumar Manoharan 
1201a57a6a27SRajkumar Manoharan 	return ath10k_wmi_cmd_send(ar, skb,
1202a57a6a27SRajkumar Manoharan 				   ar->wmi.cmd->pdev_get_temperature_cmdid);
1203a57a6a27SRajkumar Manoharan }
1204a57a6a27SRajkumar Manoharan 
1205dc8ab278SRajkumar Manoharan static inline int
ath10k_wmi_addba_clear_resp(struct ath10k * ar,u32 vdev_id,const u8 * mac)1206dc8ab278SRajkumar Manoharan ath10k_wmi_addba_clear_resp(struct ath10k *ar, u32 vdev_id, const u8 *mac)
1207dc8ab278SRajkumar Manoharan {
1208dc8ab278SRajkumar Manoharan 	struct sk_buff *skb;
1209dc8ab278SRajkumar Manoharan 
1210dc8ab278SRajkumar Manoharan 	if (!ar->wmi.ops->gen_addba_clear_resp)
1211dc8ab278SRajkumar Manoharan 		return -EOPNOTSUPP;
1212dc8ab278SRajkumar Manoharan 
1213dc8ab278SRajkumar Manoharan 	skb = ar->wmi.ops->gen_addba_clear_resp(ar, vdev_id, mac);
1214dc8ab278SRajkumar Manoharan 	if (IS_ERR(skb))
1215dc8ab278SRajkumar Manoharan 		return PTR_ERR(skb);
1216dc8ab278SRajkumar Manoharan 
1217dc8ab278SRajkumar Manoharan 	return ath10k_wmi_cmd_send(ar, skb,
1218dc8ab278SRajkumar Manoharan 				   ar->wmi.cmd->addba_clear_resp_cmdid);
1219dc8ab278SRajkumar Manoharan }
1220dc8ab278SRajkumar Manoharan 
122165c0893dSRajkumar Manoharan static inline int
ath10k_wmi_addba_send(struct ath10k * ar,u32 vdev_id,const u8 * mac,u32 tid,u32 buf_size)122265c0893dSRajkumar Manoharan ath10k_wmi_addba_send(struct ath10k *ar, u32 vdev_id, const u8 *mac,
122365c0893dSRajkumar Manoharan 		      u32 tid, u32 buf_size)
122465c0893dSRajkumar Manoharan {
122565c0893dSRajkumar Manoharan 	struct sk_buff *skb;
122665c0893dSRajkumar Manoharan 
122765c0893dSRajkumar Manoharan 	if (!ar->wmi.ops->gen_addba_send)
122865c0893dSRajkumar Manoharan 		return -EOPNOTSUPP;
122965c0893dSRajkumar Manoharan 
123065c0893dSRajkumar Manoharan 	skb = ar->wmi.ops->gen_addba_send(ar, vdev_id, mac, tid, buf_size);
123165c0893dSRajkumar Manoharan 	if (IS_ERR(skb))
123265c0893dSRajkumar Manoharan 		return PTR_ERR(skb);
123365c0893dSRajkumar Manoharan 
123465c0893dSRajkumar Manoharan 	return ath10k_wmi_cmd_send(ar, skb,
123565c0893dSRajkumar Manoharan 				   ar->wmi.cmd->addba_send_cmdid);
123665c0893dSRajkumar Manoharan }
123765c0893dSRajkumar Manoharan 
123811597413SRajkumar Manoharan static inline int
ath10k_wmi_addba_set_resp(struct ath10k * ar,u32 vdev_id,const u8 * mac,u32 tid,u32 status)123911597413SRajkumar Manoharan ath10k_wmi_addba_set_resp(struct ath10k *ar, u32 vdev_id, const u8 *mac,
124011597413SRajkumar Manoharan 			  u32 tid, u32 status)
124111597413SRajkumar Manoharan {
124211597413SRajkumar Manoharan 	struct sk_buff *skb;
124311597413SRajkumar Manoharan 
124411597413SRajkumar Manoharan 	if (!ar->wmi.ops->gen_addba_set_resp)
124511597413SRajkumar Manoharan 		return -EOPNOTSUPP;
124611597413SRajkumar Manoharan 
124711597413SRajkumar Manoharan 	skb = ar->wmi.ops->gen_addba_set_resp(ar, vdev_id, mac, tid, status);
124811597413SRajkumar Manoharan 	if (IS_ERR(skb))
124911597413SRajkumar Manoharan 		return PTR_ERR(skb);
125011597413SRajkumar Manoharan 
125111597413SRajkumar Manoharan 	return ath10k_wmi_cmd_send(ar, skb,
125211597413SRajkumar Manoharan 				   ar->wmi.cmd->addba_set_resp_cmdid);
125311597413SRajkumar Manoharan }
125411597413SRajkumar Manoharan 
125550abef85SRajkumar Manoharan static inline int
ath10k_wmi_delba_send(struct ath10k * ar,u32 vdev_id,const u8 * mac,u32 tid,u32 initiator,u32 reason)125650abef85SRajkumar Manoharan ath10k_wmi_delba_send(struct ath10k *ar, u32 vdev_id, const u8 *mac,
125750abef85SRajkumar Manoharan 		      u32 tid, u32 initiator, u32 reason)
125850abef85SRajkumar Manoharan {
125950abef85SRajkumar Manoharan 	struct sk_buff *skb;
126050abef85SRajkumar Manoharan 
126150abef85SRajkumar Manoharan 	if (!ar->wmi.ops->gen_delba_send)
126250abef85SRajkumar Manoharan 		return -EOPNOTSUPP;
126350abef85SRajkumar Manoharan 
126450abef85SRajkumar Manoharan 	skb = ar->wmi.ops->gen_delba_send(ar, vdev_id, mac, tid, initiator,
126550abef85SRajkumar Manoharan 					  reason);
126650abef85SRajkumar Manoharan 	if (IS_ERR(skb))
126750abef85SRajkumar Manoharan 		return PTR_ERR(skb);
126850abef85SRajkumar Manoharan 
126950abef85SRajkumar Manoharan 	return ath10k_wmi_cmd_send(ar, skb,
127050abef85SRajkumar Manoharan 				   ar->wmi.cmd->delba_send_cmdid);
127150abef85SRajkumar Manoharan }
127250abef85SRajkumar Manoharan 
1273be9ce9d8SMichal Kazior static inline int
ath10k_wmi_bcn_tmpl(struct ath10k * ar,u32 vdev_id,u32 tim_ie_offset,struct sk_buff * bcn,u32 prb_caps,u32 prb_erp,void * prb_ies,size_t prb_ies_len)1274be9ce9d8SMichal Kazior ath10k_wmi_bcn_tmpl(struct ath10k *ar, u32 vdev_id, u32 tim_ie_offset,
1275be9ce9d8SMichal Kazior 		    struct sk_buff *bcn, u32 prb_caps, u32 prb_erp,
1276be9ce9d8SMichal Kazior 		    void *prb_ies, size_t prb_ies_len)
1277be9ce9d8SMichal Kazior {
1278be9ce9d8SMichal Kazior 	struct sk_buff *skb;
1279be9ce9d8SMichal Kazior 
1280be9ce9d8SMichal Kazior 	if (!ar->wmi.ops->gen_bcn_tmpl)
1281be9ce9d8SMichal Kazior 		return -EOPNOTSUPP;
1282be9ce9d8SMichal Kazior 
1283be9ce9d8SMichal Kazior 	skb = ar->wmi.ops->gen_bcn_tmpl(ar, vdev_id, tim_ie_offset, bcn,
1284be9ce9d8SMichal Kazior 					prb_caps, prb_erp, prb_ies,
1285be9ce9d8SMichal Kazior 					prb_ies_len);
1286be9ce9d8SMichal Kazior 	if (IS_ERR(skb))
1287be9ce9d8SMichal Kazior 		return PTR_ERR(skb);
1288be9ce9d8SMichal Kazior 
1289be9ce9d8SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->bcn_tmpl_cmdid);
1290be9ce9d8SMichal Kazior }
1291be9ce9d8SMichal Kazior 
12924c4955feSMichal Kazior static inline int
ath10k_wmi_prb_tmpl(struct ath10k * ar,u32 vdev_id,struct sk_buff * prb)12934c4955feSMichal Kazior ath10k_wmi_prb_tmpl(struct ath10k *ar, u32 vdev_id, struct sk_buff *prb)
12944c4955feSMichal Kazior {
12954c4955feSMichal Kazior 	struct sk_buff *skb;
12964c4955feSMichal Kazior 
12974c4955feSMichal Kazior 	if (!ar->wmi.ops->gen_prb_tmpl)
12984c4955feSMichal Kazior 		return -EOPNOTSUPP;
12994c4955feSMichal Kazior 
13004c4955feSMichal Kazior 	skb = ar->wmi.ops->gen_prb_tmpl(ar, vdev_id, prb);
13014c4955feSMichal Kazior 	if (IS_ERR(skb))
13024c4955feSMichal Kazior 		return PTR_ERR(skb);
13034c4955feSMichal Kazior 
13044c4955feSMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->prb_tmpl_cmdid);
13054c4955feSMichal Kazior }
13064c4955feSMichal Kazior 
1307369242b4SMichal Kazior static inline int
ath10k_wmi_p2p_go_bcn_ie(struct ath10k * ar,u32 vdev_id,const u8 * p2p_ie)1308369242b4SMichal Kazior ath10k_wmi_p2p_go_bcn_ie(struct ath10k *ar, u32 vdev_id, const u8 *p2p_ie)
1309369242b4SMichal Kazior {
1310369242b4SMichal Kazior 	struct sk_buff *skb;
1311369242b4SMichal Kazior 
1312369242b4SMichal Kazior 	if (!ar->wmi.ops->gen_p2p_go_bcn_ie)
1313369242b4SMichal Kazior 		return -EOPNOTSUPP;
1314369242b4SMichal Kazior 
1315369242b4SMichal Kazior 	skb = ar->wmi.ops->gen_p2p_go_bcn_ie(ar, vdev_id, p2p_ie);
1316369242b4SMichal Kazior 	if (IS_ERR(skb))
1317369242b4SMichal Kazior 		return PTR_ERR(skb);
1318369242b4SMichal Kazior 
1319369242b4SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->p2p_go_set_beacon_ie);
1320369242b4SMichal Kazior }
1321369242b4SMichal Kazior 
13226e8b188bSJanusz Dziedzic static inline int
ath10k_wmi_sta_keepalive(struct ath10k * ar,const struct wmi_sta_keepalive_arg * arg)13236e8b188bSJanusz Dziedzic ath10k_wmi_sta_keepalive(struct ath10k *ar,
13246e8b188bSJanusz Dziedzic 			 const struct wmi_sta_keepalive_arg *arg)
13256e8b188bSJanusz Dziedzic {
13266e8b188bSJanusz Dziedzic 	struct sk_buff *skb;
13276e8b188bSJanusz Dziedzic 	u32 cmd_id;
13286e8b188bSJanusz Dziedzic 
13296e8b188bSJanusz Dziedzic 	if (!ar->wmi.ops->gen_sta_keepalive)
13306e8b188bSJanusz Dziedzic 		return -EOPNOTSUPP;
13316e8b188bSJanusz Dziedzic 
13326e8b188bSJanusz Dziedzic 	skb = ar->wmi.ops->gen_sta_keepalive(ar, arg);
13336e8b188bSJanusz Dziedzic 	if (IS_ERR(skb))
13346e8b188bSJanusz Dziedzic 		return PTR_ERR(skb);
13356e8b188bSJanusz Dziedzic 
13366e8b188bSJanusz Dziedzic 	cmd_id = ar->wmi.cmd->sta_keepalive_cmd;
13376e8b188bSJanusz Dziedzic 	return ath10k_wmi_cmd_send(ar, skb, cmd_id);
13386e8b188bSJanusz Dziedzic }
13396e8b188bSJanusz Dziedzic 
1340f5431e87SJanusz Dziedzic static inline int
ath10k_wmi_wow_enable(struct ath10k * ar)1341f5431e87SJanusz Dziedzic ath10k_wmi_wow_enable(struct ath10k *ar)
1342f5431e87SJanusz Dziedzic {
1343f5431e87SJanusz Dziedzic 	struct sk_buff *skb;
1344f5431e87SJanusz Dziedzic 	u32 cmd_id;
1345f5431e87SJanusz Dziedzic 
1346f5431e87SJanusz Dziedzic 	if (!ar->wmi.ops->gen_wow_enable)
1347f5431e87SJanusz Dziedzic 		return -EOPNOTSUPP;
1348f5431e87SJanusz Dziedzic 
1349f5431e87SJanusz Dziedzic 	skb = ar->wmi.ops->gen_wow_enable(ar);
1350f5431e87SJanusz Dziedzic 	if (IS_ERR(skb))
1351f5431e87SJanusz Dziedzic 		return PTR_ERR(skb);
1352f5431e87SJanusz Dziedzic 
1353f5431e87SJanusz Dziedzic 	cmd_id = ar->wmi.cmd->wow_enable_cmdid;
1354f5431e87SJanusz Dziedzic 	return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1355f5431e87SJanusz Dziedzic }
1356f5431e87SJanusz Dziedzic 
1357f5431e87SJanusz Dziedzic static inline int
ath10k_wmi_wow_add_wakeup_event(struct ath10k * ar,u32 vdev_id,enum wmi_wow_wakeup_event event,u32 enable)1358f5431e87SJanusz Dziedzic ath10k_wmi_wow_add_wakeup_event(struct ath10k *ar, u32 vdev_id,
1359f5431e87SJanusz Dziedzic 				enum wmi_wow_wakeup_event event,
1360f5431e87SJanusz Dziedzic 				u32 enable)
1361f5431e87SJanusz Dziedzic {
1362f5431e87SJanusz Dziedzic 	struct sk_buff *skb;
1363f5431e87SJanusz Dziedzic 	u32 cmd_id;
1364f5431e87SJanusz Dziedzic 
1365f5431e87SJanusz Dziedzic 	if (!ar->wmi.ops->gen_wow_add_wakeup_event)
1366f5431e87SJanusz Dziedzic 		return -EOPNOTSUPP;
1367f5431e87SJanusz Dziedzic 
1368f5431e87SJanusz Dziedzic 	skb = ar->wmi.ops->gen_wow_add_wakeup_event(ar, vdev_id, event, enable);
1369f5431e87SJanusz Dziedzic 	if (IS_ERR(skb))
1370f5431e87SJanusz Dziedzic 		return PTR_ERR(skb);
1371f5431e87SJanusz Dziedzic 
1372f5431e87SJanusz Dziedzic 	cmd_id = ar->wmi.cmd->wow_enable_disable_wake_event_cmdid;
1373f5431e87SJanusz Dziedzic 	return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1374f5431e87SJanusz Dziedzic }
1375f5431e87SJanusz Dziedzic 
1376f5431e87SJanusz Dziedzic static inline int
ath10k_wmi_wow_host_wakeup_ind(struct ath10k * ar)1377f5431e87SJanusz Dziedzic ath10k_wmi_wow_host_wakeup_ind(struct ath10k *ar)
1378f5431e87SJanusz Dziedzic {
1379f5431e87SJanusz Dziedzic 	struct sk_buff *skb;
1380f5431e87SJanusz Dziedzic 	u32 cmd_id;
1381f5431e87SJanusz Dziedzic 
1382f5431e87SJanusz Dziedzic 	if (!ar->wmi.ops->gen_wow_host_wakeup_ind)
1383f5431e87SJanusz Dziedzic 		return -EOPNOTSUPP;
1384f5431e87SJanusz Dziedzic 
1385f5431e87SJanusz Dziedzic 	skb = ar->wmi.ops->gen_wow_host_wakeup_ind(ar);
1386f5431e87SJanusz Dziedzic 	if (IS_ERR(skb))
1387f5431e87SJanusz Dziedzic 		return PTR_ERR(skb);
1388f5431e87SJanusz Dziedzic 
1389f5431e87SJanusz Dziedzic 	cmd_id = ar->wmi.cmd->wow_hostwakeup_from_sleep_cmdid;
1390f5431e87SJanusz Dziedzic 	return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1391f5431e87SJanusz Dziedzic }
1392f5431e87SJanusz Dziedzic 
1393d4976104SJanusz Dziedzic static inline int
ath10k_wmi_wow_add_pattern(struct ath10k * ar,u32 vdev_id,u32 pattern_id,const u8 * pattern,const u8 * mask,int pattern_len,int pattern_offset)1394d4976104SJanusz Dziedzic ath10k_wmi_wow_add_pattern(struct ath10k *ar, u32 vdev_id, u32 pattern_id,
1395d4976104SJanusz Dziedzic 			   const u8 *pattern, const u8 *mask,
1396d4976104SJanusz Dziedzic 			   int pattern_len, int pattern_offset)
1397d4976104SJanusz Dziedzic {
1398d4976104SJanusz Dziedzic 	struct sk_buff *skb;
1399d4976104SJanusz Dziedzic 	u32 cmd_id;
1400d4976104SJanusz Dziedzic 
1401d4976104SJanusz Dziedzic 	if (!ar->wmi.ops->gen_wow_add_pattern)
1402d4976104SJanusz Dziedzic 		return -EOPNOTSUPP;
1403d4976104SJanusz Dziedzic 
1404d4976104SJanusz Dziedzic 	skb = ar->wmi.ops->gen_wow_add_pattern(ar, vdev_id, pattern_id,
1405d4976104SJanusz Dziedzic 					       pattern, mask, pattern_len,
1406d4976104SJanusz Dziedzic 					       pattern_offset);
1407d4976104SJanusz Dziedzic 	if (IS_ERR(skb))
1408d4976104SJanusz Dziedzic 		return PTR_ERR(skb);
1409d4976104SJanusz Dziedzic 
1410d4976104SJanusz Dziedzic 	cmd_id = ar->wmi.cmd->wow_add_wake_pattern_cmdid;
1411d4976104SJanusz Dziedzic 	return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1412d4976104SJanusz Dziedzic }
1413d4976104SJanusz Dziedzic 
1414d4976104SJanusz Dziedzic static inline int
ath10k_wmi_wow_del_pattern(struct ath10k * ar,u32 vdev_id,u32 pattern_id)1415d4976104SJanusz Dziedzic ath10k_wmi_wow_del_pattern(struct ath10k *ar, u32 vdev_id, u32 pattern_id)
1416d4976104SJanusz Dziedzic {
1417d4976104SJanusz Dziedzic 	struct sk_buff *skb;
1418d4976104SJanusz Dziedzic 	u32 cmd_id;
1419d4976104SJanusz Dziedzic 
1420d4976104SJanusz Dziedzic 	if (!ar->wmi.ops->gen_wow_del_pattern)
1421d4976104SJanusz Dziedzic 		return -EOPNOTSUPP;
1422d4976104SJanusz Dziedzic 
1423d4976104SJanusz Dziedzic 	skb = ar->wmi.ops->gen_wow_del_pattern(ar, vdev_id, pattern_id);
1424d4976104SJanusz Dziedzic 	if (IS_ERR(skb))
1425d4976104SJanusz Dziedzic 		return PTR_ERR(skb);
1426d4976104SJanusz Dziedzic 
1427d4976104SJanusz Dziedzic 	cmd_id = ar->wmi.cmd->wow_del_wake_pattern_cmdid;
1428d4976104SJanusz Dziedzic 	return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1429d4976104SJanusz Dziedzic }
1430ad45c888SMarek Puzyniak 
1431ad45c888SMarek Puzyniak static inline int
ath10k_wmi_wow_config_pno(struct ath10k * ar,u32 vdev_id,struct wmi_pno_scan_req * pno_scan)1432ce834e28SWen Gong ath10k_wmi_wow_config_pno(struct ath10k *ar, u32 vdev_id,
1433ce834e28SWen Gong 			  struct wmi_pno_scan_req  *pno_scan)
1434ce834e28SWen Gong {
1435ce834e28SWen Gong 	struct sk_buff *skb;
1436ce834e28SWen Gong 	u32 cmd_id;
1437ce834e28SWen Gong 
1438ce834e28SWen Gong 	if (!ar->wmi.ops->gen_wow_config_pno)
1439ce834e28SWen Gong 		return -EOPNOTSUPP;
1440ce834e28SWen Gong 
1441ce834e28SWen Gong 	skb = ar->wmi.ops->gen_wow_config_pno(ar, vdev_id, pno_scan);
1442ce834e28SWen Gong 	if (IS_ERR(skb))
1443ce834e28SWen Gong 		return PTR_ERR(skb);
1444ce834e28SWen Gong 
1445ce834e28SWen Gong 	cmd_id = ar->wmi.cmd->network_list_offload_config_cmdid;
1446ce834e28SWen Gong 	return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1447ce834e28SWen Gong }
1448ce834e28SWen Gong 
1449ce834e28SWen Gong static inline int
ath10k_wmi_update_fw_tdls_state(struct ath10k * ar,u32 vdev_id,enum wmi_tdls_state state)1450ad45c888SMarek Puzyniak ath10k_wmi_update_fw_tdls_state(struct ath10k *ar, u32 vdev_id,
1451ad45c888SMarek Puzyniak 				enum wmi_tdls_state state)
1452ad45c888SMarek Puzyniak {
1453ad45c888SMarek Puzyniak 	struct sk_buff *skb;
1454ad45c888SMarek Puzyniak 
1455ad45c888SMarek Puzyniak 	if (!ar->wmi.ops->gen_update_fw_tdls_state)
1456ad45c888SMarek Puzyniak 		return -EOPNOTSUPP;
1457ad45c888SMarek Puzyniak 
1458ad45c888SMarek Puzyniak 	skb = ar->wmi.ops->gen_update_fw_tdls_state(ar, vdev_id, state);
1459ad45c888SMarek Puzyniak 	if (IS_ERR(skb))
1460ad45c888SMarek Puzyniak 		return PTR_ERR(skb);
1461ad45c888SMarek Puzyniak 
1462ad45c888SMarek Puzyniak 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->tdls_set_state_cmdid);
1463ad45c888SMarek Puzyniak }
1464ad45c888SMarek Puzyniak 
1465ad45c888SMarek Puzyniak static inline int
ath10k_wmi_tdls_peer_update(struct ath10k * ar,const struct wmi_tdls_peer_update_cmd_arg * arg,const struct wmi_tdls_peer_capab_arg * cap,const struct wmi_channel_arg * chan)1466ad45c888SMarek Puzyniak ath10k_wmi_tdls_peer_update(struct ath10k *ar,
1467ad45c888SMarek Puzyniak 			    const struct wmi_tdls_peer_update_cmd_arg *arg,
1468ad45c888SMarek Puzyniak 			    const struct wmi_tdls_peer_capab_arg *cap,
1469ad45c888SMarek Puzyniak 			    const struct wmi_channel_arg *chan)
1470ad45c888SMarek Puzyniak {
1471ad45c888SMarek Puzyniak 	struct sk_buff *skb;
1472ad45c888SMarek Puzyniak 
1473ad45c888SMarek Puzyniak 	if (!ar->wmi.ops->gen_tdls_peer_update)
1474ad45c888SMarek Puzyniak 		return -EOPNOTSUPP;
1475ad45c888SMarek Puzyniak 
1476ad45c888SMarek Puzyniak 	skb = ar->wmi.ops->gen_tdls_peer_update(ar, arg, cap, chan);
1477ad45c888SMarek Puzyniak 	if (IS_ERR(skb))
1478ad45c888SMarek Puzyniak 		return PTR_ERR(skb);
1479ad45c888SMarek Puzyniak 
1480ad45c888SMarek Puzyniak 	return ath10k_wmi_cmd_send(ar, skb,
1481ad45c888SMarek Puzyniak 				   ar->wmi.cmd->tdls_peer_update_cmdid);
1482ad45c888SMarek Puzyniak }
1483ad45c888SMarek Puzyniak 
14845b272e30SMichal Kazior static inline int
ath10k_wmi_adaptive_qcs(struct ath10k * ar,bool enable)14855b272e30SMichal Kazior ath10k_wmi_adaptive_qcs(struct ath10k *ar, bool enable)
14865b272e30SMichal Kazior {
14875b272e30SMichal Kazior 	struct sk_buff *skb;
14885b272e30SMichal Kazior 
14895b272e30SMichal Kazior 	if (!ar->wmi.ops->gen_adaptive_qcs)
14905b272e30SMichal Kazior 		return -EOPNOTSUPP;
14915b272e30SMichal Kazior 
14925b272e30SMichal Kazior 	skb = ar->wmi.ops->gen_adaptive_qcs(ar, enable);
14935b272e30SMichal Kazior 	if (IS_ERR(skb))
14945b272e30SMichal Kazior 		return PTR_ERR(skb);
14955b272e30SMichal Kazior 
14965b272e30SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->adaptive_qcs_cmdid);
14975b272e30SMichal Kazior }
14985b272e30SMichal Kazior 
149929542666SMaharaja Kennadyrajan static inline int
ath10k_wmi_pdev_get_tpc_config(struct ath10k * ar,u32 param)150029542666SMaharaja Kennadyrajan ath10k_wmi_pdev_get_tpc_config(struct ath10k *ar, u32 param)
150129542666SMaharaja Kennadyrajan {
150229542666SMaharaja Kennadyrajan 	struct sk_buff *skb;
150329542666SMaharaja Kennadyrajan 
150429542666SMaharaja Kennadyrajan 	if (!ar->wmi.ops->gen_pdev_get_tpc_config)
150529542666SMaharaja Kennadyrajan 		return -EOPNOTSUPP;
150629542666SMaharaja Kennadyrajan 
150729542666SMaharaja Kennadyrajan 	skb = ar->wmi.ops->gen_pdev_get_tpc_config(ar, param);
150829542666SMaharaja Kennadyrajan 
150929542666SMaharaja Kennadyrajan 	if (IS_ERR(skb))
151029542666SMaharaja Kennadyrajan 		return PTR_ERR(skb);
151129542666SMaharaja Kennadyrajan 
151229542666SMaharaja Kennadyrajan 	return ath10k_wmi_cmd_send(ar, skb,
151329542666SMaharaja Kennadyrajan 				   ar->wmi.cmd->pdev_get_tpc_config_cmdid);
151429542666SMaharaja Kennadyrajan }
151529542666SMaharaja Kennadyrajan 
1516bc6f9ae6SManikanta Pubbisetty static inline int
ath10k_wmi_fw_stats_fill(struct ath10k * ar,struct ath10k_fw_stats * fw_stats,char * buf)1517bc6f9ae6SManikanta Pubbisetty ath10k_wmi_fw_stats_fill(struct ath10k *ar, struct ath10k_fw_stats *fw_stats,
1518bc6f9ae6SManikanta Pubbisetty 			 char *buf)
1519bc6f9ae6SManikanta Pubbisetty {
1520bc6f9ae6SManikanta Pubbisetty 	if (!ar->wmi.ops->fw_stats_fill)
1521bc6f9ae6SManikanta Pubbisetty 		return -EOPNOTSUPP;
1522bc6f9ae6SManikanta Pubbisetty 
1523bc6f9ae6SManikanta Pubbisetty 	ar->wmi.ops->fw_stats_fill(ar, fw_stats, buf);
1524bc6f9ae6SManikanta Pubbisetty 	return 0;
1525bc6f9ae6SManikanta Pubbisetty }
152662f77f09SMaharaja 
152762f77f09SMaharaja static inline int
ath10k_wmi_pdev_enable_adaptive_cca(struct ath10k * ar,u8 enable,u32 detect_level,u32 detect_margin)152862f77f09SMaharaja ath10k_wmi_pdev_enable_adaptive_cca(struct ath10k *ar, u8 enable,
152962f77f09SMaharaja 				    u32 detect_level, u32 detect_margin)
153062f77f09SMaharaja {
153162f77f09SMaharaja 	struct sk_buff *skb;
153262f77f09SMaharaja 
153362f77f09SMaharaja 	if (!ar->wmi.ops->gen_pdev_enable_adaptive_cca)
153462f77f09SMaharaja 		return -EOPNOTSUPP;
153562f77f09SMaharaja 
153662f77f09SMaharaja 	skb = ar->wmi.ops->gen_pdev_enable_adaptive_cca(ar, enable,
153762f77f09SMaharaja 							detect_level,
153862f77f09SMaharaja 							detect_margin);
153962f77f09SMaharaja 
154062f77f09SMaharaja 	if (IS_ERR(skb))
154162f77f09SMaharaja 		return PTR_ERR(skb);
154262f77f09SMaharaja 
154362f77f09SMaharaja 	return ath10k_wmi_cmd_send(ar, skb,
154462f77f09SMaharaja 				   ar->wmi.cmd->pdev_enable_adaptive_cca_cmdid);
154562f77f09SMaharaja }
154662f77f09SMaharaja 
15476e4de1a4SPeter Oh static inline int
ath10k_wmi_ext_resource_config(struct ath10k * ar,enum wmi_host_platform_type type,u32 fw_feature_bitmap)154847771902SRaja Mani ath10k_wmi_ext_resource_config(struct ath10k *ar,
154947771902SRaja Mani 			       enum wmi_host_platform_type type,
155047771902SRaja Mani 			       u32 fw_feature_bitmap)
155147771902SRaja Mani {
155247771902SRaja Mani 	struct sk_buff *skb;
155347771902SRaja Mani 
155447771902SRaja Mani 	if (!ar->wmi.ops->ext_resource_config)
155547771902SRaja Mani 		return -EOPNOTSUPP;
155647771902SRaja Mani 
155747771902SRaja Mani 	skb = ar->wmi.ops->ext_resource_config(ar, type,
155847771902SRaja Mani 					       fw_feature_bitmap);
155947771902SRaja Mani 
156047771902SRaja Mani 	if (IS_ERR(skb))
156147771902SRaja Mani 		return PTR_ERR(skb);
156247771902SRaja Mani 
156347771902SRaja Mani 	return ath10k_wmi_cmd_send(ar, skb,
156447771902SRaja Mani 				   ar->wmi.cmd->ext_resource_cfg_cmdid);
156547771902SRaja Mani }
156647771902SRaja Mani 
156747771902SRaja Mani static inline int
ath10k_wmi_get_vdev_subtype(struct ath10k * ar,enum wmi_vdev_subtype subtype)15686e4de1a4SPeter Oh ath10k_wmi_get_vdev_subtype(struct ath10k *ar, enum wmi_vdev_subtype subtype)
15696e4de1a4SPeter Oh {
15706e4de1a4SPeter Oh 	if (!ar->wmi.ops->get_vdev_subtype)
15716e4de1a4SPeter Oh 		return -EOPNOTSUPP;
15726e4de1a4SPeter Oh 
15736e4de1a4SPeter Oh 	return ar->wmi.ops->get_vdev_subtype(ar, subtype);
15746e4de1a4SPeter Oh }
15756e4de1a4SPeter Oh 
15768a0b459eSRajkumar Manoharan static inline int
ath10k_wmi_pdev_bss_chan_info_request(struct ath10k * ar,enum wmi_bss_survey_req_type type)15778a0b459eSRajkumar Manoharan ath10k_wmi_pdev_bss_chan_info_request(struct ath10k *ar,
15788a0b459eSRajkumar Manoharan 				      enum wmi_bss_survey_req_type type)
15798a0b459eSRajkumar Manoharan {
15808a0b459eSRajkumar Manoharan 	struct ath10k_wmi *wmi = &ar->wmi;
15818a0b459eSRajkumar Manoharan 	struct sk_buff *skb;
15828a0b459eSRajkumar Manoharan 
15838a0b459eSRajkumar Manoharan 	if (!wmi->ops->gen_pdev_bss_chan_info_req)
15848a0b459eSRajkumar Manoharan 		return -EOPNOTSUPP;
15858a0b459eSRajkumar Manoharan 
15868a0b459eSRajkumar Manoharan 	skb = wmi->ops->gen_pdev_bss_chan_info_req(ar, type);
15878a0b459eSRajkumar Manoharan 	if (IS_ERR(skb))
15888a0b459eSRajkumar Manoharan 		return PTR_ERR(skb);
15898a0b459eSRajkumar Manoharan 
15908a0b459eSRajkumar Manoharan 	return ath10k_wmi_cmd_send(ar, skb,
15918a0b459eSRajkumar Manoharan 				   wmi->cmd->pdev_bss_chan_info_request_cmdid);
15928a0b459eSRajkumar Manoharan }
15938a0b459eSRajkumar Manoharan 
1594e25854f2SMichal Kazior static inline int
ath10k_wmi_echo(struct ath10k * ar,u32 value)1595e25854f2SMichal Kazior ath10k_wmi_echo(struct ath10k *ar, u32 value)
1596e25854f2SMichal Kazior {
1597e25854f2SMichal Kazior 	struct ath10k_wmi *wmi = &ar->wmi;
1598e25854f2SMichal Kazior 	struct sk_buff *skb;
1599e25854f2SMichal Kazior 
1600e25854f2SMichal Kazior 	if (!wmi->ops->gen_echo)
1601e25854f2SMichal Kazior 		return -EOPNOTSUPP;
1602e25854f2SMichal Kazior 
1603e25854f2SMichal Kazior 	skb = wmi->ops->gen_echo(ar, value);
1604e25854f2SMichal Kazior 	if (IS_ERR(skb))
1605e25854f2SMichal Kazior 		return PTR_ERR(skb);
1606e25854f2SMichal Kazior 
1607e25854f2SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, wmi->cmd->echo_cmdid);
1608e25854f2SMichal Kazior }
1609e25854f2SMichal Kazior 
1610bc64d052SMaharaja Kennadyrajan static inline int
ath10k_wmi_pdev_get_tpc_table_cmdid(struct ath10k * ar,u32 param)1611bc64d052SMaharaja Kennadyrajan ath10k_wmi_pdev_get_tpc_table_cmdid(struct ath10k *ar, u32 param)
1612bc64d052SMaharaja Kennadyrajan {
1613bc64d052SMaharaja Kennadyrajan 	struct sk_buff *skb;
1614bc64d052SMaharaja Kennadyrajan 
1615bc64d052SMaharaja Kennadyrajan 	if (!ar->wmi.ops->gen_pdev_get_tpc_table_cmdid)
1616bc64d052SMaharaja Kennadyrajan 		return -EOPNOTSUPP;
1617bc64d052SMaharaja Kennadyrajan 
1618bc64d052SMaharaja Kennadyrajan 	skb = ar->wmi.ops->gen_pdev_get_tpc_table_cmdid(ar, param);
1619bc64d052SMaharaja Kennadyrajan 
1620bc64d052SMaharaja Kennadyrajan 	if (IS_ERR(skb))
1621bc64d052SMaharaja Kennadyrajan 		return PTR_ERR(skb);
1622bc64d052SMaharaja Kennadyrajan 
1623bc64d052SMaharaja Kennadyrajan 	return ath10k_wmi_cmd_send(ar, skb,
1624bc64d052SMaharaja Kennadyrajan 				   ar->wmi.cmd->pdev_get_tpc_table_cmdid);
1625bc64d052SMaharaja Kennadyrajan }
1626bc64d052SMaharaja Kennadyrajan 
16276f6eb1bcSSriram R static inline int
ath10k_wmi_report_radar_found(struct ath10k * ar,const struct ath10k_radar_found_info * arg)16286f6eb1bcSSriram R ath10k_wmi_report_radar_found(struct ath10k *ar,
16296f6eb1bcSSriram R 			      const struct ath10k_radar_found_info *arg)
16306f6eb1bcSSriram R {
16316f6eb1bcSSriram R 	struct sk_buff *skb;
16326f6eb1bcSSriram R 
16336f6eb1bcSSriram R 	if (!ar->wmi.ops->gen_radar_found)
16346f6eb1bcSSriram R 		return -EOPNOTSUPP;
16356f6eb1bcSSriram R 
16366f6eb1bcSSriram R 	skb = ar->wmi.ops->gen_radar_found(ar, arg);
16376f6eb1bcSSriram R 	if (IS_ERR(skb))
16386f6eb1bcSSriram R 		return PTR_ERR(skb);
16396f6eb1bcSSriram R 
16406f6eb1bcSSriram R 	return ath10k_wmi_cmd_send(ar, skb,
16416f6eb1bcSSriram R 				   ar->wmi.cmd->radar_found_cmdid);
16426f6eb1bcSSriram R }
16436f6eb1bcSSriram R 
164484758d4dSBhagavathi Perumal S static inline int
ath10k_wmi_pdev_bb_timing(struct ath10k * ar,const struct wmi_bb_timing_cfg_arg * arg)164584758d4dSBhagavathi Perumal S ath10k_wmi_pdev_bb_timing(struct ath10k *ar,
164684758d4dSBhagavathi Perumal S 			  const struct wmi_bb_timing_cfg_arg *arg)
164784758d4dSBhagavathi Perumal S {
164884758d4dSBhagavathi Perumal S 	struct sk_buff *skb;
164984758d4dSBhagavathi Perumal S 
165084758d4dSBhagavathi Perumal S 	if (!ar->wmi.ops->gen_bb_timing)
165184758d4dSBhagavathi Perumal S 		return -EOPNOTSUPP;
165284758d4dSBhagavathi Perumal S 
165384758d4dSBhagavathi Perumal S 	skb = ar->wmi.ops->gen_bb_timing(ar, arg);
165484758d4dSBhagavathi Perumal S 
165584758d4dSBhagavathi Perumal S 	if (IS_ERR(skb))
165684758d4dSBhagavathi Perumal S 		return PTR_ERR(skb);
165784758d4dSBhagavathi Perumal S 
165884758d4dSBhagavathi Perumal S 	return ath10k_wmi_cmd_send(ar, skb,
165984758d4dSBhagavathi Perumal S 				   ar->wmi.cmd->set_bb_timing_cmdid);
166084758d4dSBhagavathi Perumal S }
16615d582be0STamizh Chelvam 
16625d582be0STamizh Chelvam static inline int
ath10k_wmi_set_per_peer_per_tid_cfg(struct ath10k * ar,const struct wmi_per_peer_per_tid_cfg_arg * arg)16635d582be0STamizh Chelvam ath10k_wmi_set_per_peer_per_tid_cfg(struct ath10k *ar,
16645d582be0STamizh Chelvam 				    const struct wmi_per_peer_per_tid_cfg_arg *arg)
16655d582be0STamizh Chelvam {
16665d582be0STamizh Chelvam 	struct sk_buff *skb;
16675d582be0STamizh Chelvam 
16685d582be0STamizh Chelvam 	if (!ar->wmi.ops->gen_per_peer_per_tid_cfg)
16695d582be0STamizh Chelvam 		return -EOPNOTSUPP;
16705d582be0STamizh Chelvam 
16715d582be0STamizh Chelvam 	skb = ar->wmi.ops->gen_per_peer_per_tid_cfg(ar, arg);
16725d582be0STamizh Chelvam 	if (IS_ERR(skb))
16735d582be0STamizh Chelvam 		return PTR_ERR(skb);
16745d582be0STamizh Chelvam 
16755d582be0STamizh Chelvam 	return ath10k_wmi_cmd_send(ar, skb,
16765d582be0STamizh Chelvam 				   ar->wmi.cmd->per_peer_per_tid_config_cmdid);
16775d582be0STamizh Chelvam }
1678d7579d12SMichal Kazior #endif
1679