xref: /linux/drivers/net/wireless/ath/ath10k/wmi-ops.h (revision a1ff5a7d78a036d6c2178ee5acd6ba4946243800)
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);
229*8e1debd8SSebastian Gottschall 	struct sk_buff *(*gen_gpio_config)(struct ath10k *ar, u32 gpio_num,
230*8e1debd8SSebastian Gottschall 					   u32 input, u32 pull_type, u32 intr_mode);
231bc64d052SMaharaja Kennadyrajan 
232*8e1debd8SSebastian Gottschall 	struct sk_buff *(*gen_gpio_output)(struct ath10k *ar, u32 gpio_num, u32 set);
233d7579d12SMichal Kazior };
234d7579d12SMichal Kazior 
235d7579d12SMichal Kazior int ath10k_wmi_cmd_send(struct ath10k *ar, struct sk_buff *skb, u32 cmd_id);
236d7579d12SMichal Kazior 
237d7579d12SMichal Kazior static inline int
ath10k_wmi_rx(struct ath10k * ar,struct sk_buff * skb)238d7579d12SMichal Kazior ath10k_wmi_rx(struct ath10k *ar, struct sk_buff *skb)
239d7579d12SMichal Kazior {
240d7579d12SMichal Kazior 	if (WARN_ON_ONCE(!ar->wmi.ops->rx))
241d7579d12SMichal Kazior 		return -EOPNOTSUPP;
242d7579d12SMichal Kazior 
243d7579d12SMichal Kazior 	ar->wmi.ops->rx(ar, skb);
244d7579d12SMichal Kazior 	return 0;
245d7579d12SMichal Kazior }
246d7579d12SMichal Kazior 
247d7579d12SMichal Kazior static inline int
ath10k_wmi_map_svc(struct ath10k * ar,const __le32 * in,unsigned long * out,size_t len)248d7579d12SMichal Kazior ath10k_wmi_map_svc(struct ath10k *ar, const __le32 *in, unsigned long *out,
249d7579d12SMichal Kazior 		   size_t len)
250d7579d12SMichal Kazior {
251d7579d12SMichal Kazior 	if (!ar->wmi.ops->map_svc)
252d7579d12SMichal Kazior 		return -EOPNOTSUPP;
253d7579d12SMichal Kazior 
254d7579d12SMichal Kazior 	ar->wmi.ops->map_svc(in, out, len);
255d7579d12SMichal Kazior 	return 0;
256d7579d12SMichal Kazior }
257d7579d12SMichal Kazior 
258d7579d12SMichal Kazior static inline int
ath10k_wmi_map_svc_ext(struct ath10k * ar,const __le32 * in,unsigned long * out,size_t len)259cea19a6cSCarl Huang ath10k_wmi_map_svc_ext(struct ath10k *ar, const __le32 *in, unsigned long *out,
260cea19a6cSCarl Huang 		       size_t len)
261cea19a6cSCarl Huang {
262cea19a6cSCarl Huang 	if (!ar->wmi.ops->map_svc_ext)
263cea19a6cSCarl Huang 		return -EOPNOTSUPP;
264cea19a6cSCarl Huang 
265cea19a6cSCarl Huang 	ar->wmi.ops->map_svc_ext(in, out, len);
266cea19a6cSCarl Huang 	return 0;
267cea19a6cSCarl Huang }
268cea19a6cSCarl Huang 
269cea19a6cSCarl Huang static inline int
ath10k_wmi_pull_scan(struct ath10k * ar,struct sk_buff * skb,struct wmi_scan_ev_arg * arg)270d7579d12SMichal Kazior ath10k_wmi_pull_scan(struct ath10k *ar, struct sk_buff *skb,
271d7579d12SMichal Kazior 		     struct wmi_scan_ev_arg *arg)
272d7579d12SMichal Kazior {
273d7579d12SMichal Kazior 	if (!ar->wmi.ops->pull_scan)
274d7579d12SMichal Kazior 		return -EOPNOTSUPP;
275d7579d12SMichal Kazior 
276d7579d12SMichal Kazior 	return ar->wmi.ops->pull_scan(ar, skb, arg);
277d7579d12SMichal Kazior }
278d7579d12SMichal Kazior 
279d7579d12SMichal 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)280dc405152SRakesh Pillai ath10k_wmi_pull_mgmt_tx_compl(struct ath10k *ar, struct sk_buff *skb,
281dc405152SRakesh Pillai 			      struct wmi_tlv_mgmt_tx_compl_ev_arg *arg)
282dc405152SRakesh Pillai {
283dc405152SRakesh Pillai 	if (!ar->wmi.ops->pull_mgmt_tx_compl)
284dc405152SRakesh Pillai 		return -EOPNOTSUPP;
285dc405152SRakesh Pillai 
286dc405152SRakesh Pillai 	return ar->wmi.ops->pull_mgmt_tx_compl(ar, skb, arg);
287dc405152SRakesh Pillai }
288dc405152SRakesh Pillai 
289dc405152SRakesh 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)290cc123facSRakesh Pillai ath10k_wmi_pull_mgmt_tx_bundle_compl(struct ath10k *ar, struct sk_buff *skb,
291cc123facSRakesh Pillai 				     struct wmi_tlv_mgmt_tx_bundle_compl_ev_arg *arg)
292cc123facSRakesh Pillai {
293cc123facSRakesh Pillai 	if (!ar->wmi.ops->pull_mgmt_tx_bundle_compl)
294cc123facSRakesh Pillai 		return -EOPNOTSUPP;
295cc123facSRakesh Pillai 
296cc123facSRakesh Pillai 	return ar->wmi.ops->pull_mgmt_tx_bundle_compl(ar, skb, arg);
297cc123facSRakesh Pillai }
298cc123facSRakesh Pillai 
299cc123facSRakesh Pillai static inline int
ath10k_wmi_pull_mgmt_rx(struct ath10k * ar,struct sk_buff * skb,struct wmi_mgmt_rx_ev_arg * arg)300d7579d12SMichal Kazior ath10k_wmi_pull_mgmt_rx(struct ath10k *ar, struct sk_buff *skb,
301d7579d12SMichal Kazior 			struct wmi_mgmt_rx_ev_arg *arg)
302d7579d12SMichal Kazior {
303d7579d12SMichal Kazior 	if (!ar->wmi.ops->pull_mgmt_rx)
304d7579d12SMichal Kazior 		return -EOPNOTSUPP;
305d7579d12SMichal Kazior 
306d7579d12SMichal Kazior 	return ar->wmi.ops->pull_mgmt_rx(ar, skb, arg);
307d7579d12SMichal Kazior }
308d7579d12SMichal Kazior 
309d7579d12SMichal Kazior static inline int
ath10k_wmi_pull_ch_info(struct ath10k * ar,struct sk_buff * skb,struct wmi_ch_info_ev_arg * arg)310d7579d12SMichal Kazior ath10k_wmi_pull_ch_info(struct ath10k *ar, struct sk_buff *skb,
311d7579d12SMichal Kazior 			struct wmi_ch_info_ev_arg *arg)
312d7579d12SMichal Kazior {
313d7579d12SMichal Kazior 	if (!ar->wmi.ops->pull_ch_info)
314d7579d12SMichal Kazior 		return -EOPNOTSUPP;
315d7579d12SMichal Kazior 
316d7579d12SMichal Kazior 	return ar->wmi.ops->pull_ch_info(ar, skb, arg);
317d7579d12SMichal Kazior }
318d7579d12SMichal Kazior 
319d7579d12SMichal Kazior static inline int
ath10k_wmi_pull_vdev_start(struct ath10k * ar,struct sk_buff * skb,struct wmi_vdev_start_ev_arg * arg)320d7579d12SMichal Kazior ath10k_wmi_pull_vdev_start(struct ath10k *ar, struct sk_buff *skb,
321d7579d12SMichal Kazior 			   struct wmi_vdev_start_ev_arg *arg)
322d7579d12SMichal Kazior {
323d7579d12SMichal Kazior 	if (!ar->wmi.ops->pull_vdev_start)
324d7579d12SMichal Kazior 		return -EOPNOTSUPP;
325d7579d12SMichal Kazior 
326d7579d12SMichal Kazior 	return ar->wmi.ops->pull_vdev_start(ar, skb, arg);
327d7579d12SMichal Kazior }
328d7579d12SMichal Kazior 
329d7579d12SMichal Kazior static inline int
ath10k_wmi_pull_peer_kick(struct ath10k * ar,struct sk_buff * skb,struct wmi_peer_kick_ev_arg * arg)330d7579d12SMichal Kazior ath10k_wmi_pull_peer_kick(struct ath10k *ar, struct sk_buff *skb,
331d7579d12SMichal Kazior 			  struct wmi_peer_kick_ev_arg *arg)
332d7579d12SMichal Kazior {
333d7579d12SMichal Kazior 	if (!ar->wmi.ops->pull_peer_kick)
334d7579d12SMichal Kazior 		return -EOPNOTSUPP;
335d7579d12SMichal Kazior 
336d7579d12SMichal Kazior 	return ar->wmi.ops->pull_peer_kick(ar, skb, arg);
337d7579d12SMichal Kazior }
338d7579d12SMichal Kazior 
339d7579d12SMichal Kazior static inline int
ath10k_wmi_pull_swba(struct ath10k * ar,struct sk_buff * skb,struct wmi_swba_ev_arg * arg)340d7579d12SMichal Kazior ath10k_wmi_pull_swba(struct ath10k *ar, struct sk_buff *skb,
341d7579d12SMichal Kazior 		     struct wmi_swba_ev_arg *arg)
342d7579d12SMichal Kazior {
343d7579d12SMichal Kazior 	if (!ar->wmi.ops->pull_swba)
344d7579d12SMichal Kazior 		return -EOPNOTSUPP;
345d7579d12SMichal Kazior 
346d7579d12SMichal Kazior 	return ar->wmi.ops->pull_swba(ar, skb, arg);
347d7579d12SMichal Kazior }
348d7579d12SMichal Kazior 
349d7579d12SMichal Kazior static inline int
ath10k_wmi_pull_phyerr_hdr(struct ath10k * ar,struct sk_buff * skb,struct wmi_phyerr_hdr_arg * arg)350991adf71SRaja Mani ath10k_wmi_pull_phyerr_hdr(struct ath10k *ar, struct sk_buff *skb,
351991adf71SRaja Mani 			   struct wmi_phyerr_hdr_arg *arg)
352991adf71SRaja Mani {
353991adf71SRaja Mani 	if (!ar->wmi.ops->pull_phyerr_hdr)
354991adf71SRaja Mani 		return -EOPNOTSUPP;
355991adf71SRaja Mani 
356991adf71SRaja Mani 	return ar->wmi.ops->pull_phyerr_hdr(ar, skb, arg);
357991adf71SRaja Mani }
358991adf71SRaja Mani 
359991adf71SRaja Mani static inline int
ath10k_wmi_pull_phyerr(struct ath10k * ar,const void * phyerr_buf,int left_len,struct wmi_phyerr_ev_arg * arg)360991adf71SRaja Mani ath10k_wmi_pull_phyerr(struct ath10k *ar, const void *phyerr_buf,
361991adf71SRaja Mani 		       int left_len, struct wmi_phyerr_ev_arg *arg)
362d7579d12SMichal Kazior {
363d7579d12SMichal Kazior 	if (!ar->wmi.ops->pull_phyerr)
364d7579d12SMichal Kazior 		return -EOPNOTSUPP;
365d7579d12SMichal Kazior 
366991adf71SRaja Mani 	return ar->wmi.ops->pull_phyerr(ar, phyerr_buf, left_len, arg);
367d7579d12SMichal Kazior }
368d7579d12SMichal Kazior 
369d7579d12SMichal Kazior static inline int
ath10k_wmi_pull_svc_rdy(struct ath10k * ar,struct sk_buff * skb,struct wmi_svc_rdy_ev_arg * arg)370d7579d12SMichal Kazior ath10k_wmi_pull_svc_rdy(struct ath10k *ar, struct sk_buff *skb,
371d7579d12SMichal Kazior 			struct wmi_svc_rdy_ev_arg *arg)
372d7579d12SMichal Kazior {
373d7579d12SMichal Kazior 	if (!ar->wmi.ops->pull_svc_rdy)
374d7579d12SMichal Kazior 		return -EOPNOTSUPP;
375d7579d12SMichal Kazior 
376d7579d12SMichal Kazior 	return ar->wmi.ops->pull_svc_rdy(ar, skb, arg);
377d7579d12SMichal Kazior }
378d7579d12SMichal Kazior 
379d7579d12SMichal Kazior static inline int
ath10k_wmi_pull_rdy(struct ath10k * ar,struct sk_buff * skb,struct wmi_rdy_ev_arg * arg)380d7579d12SMichal Kazior ath10k_wmi_pull_rdy(struct ath10k *ar, struct sk_buff *skb,
381d7579d12SMichal Kazior 		    struct wmi_rdy_ev_arg *arg)
382d7579d12SMichal Kazior {
383d7579d12SMichal Kazior 	if (!ar->wmi.ops->pull_rdy)
384d7579d12SMichal Kazior 		return -EOPNOTSUPP;
385d7579d12SMichal Kazior 
386d7579d12SMichal Kazior 	return ar->wmi.ops->pull_rdy(ar, skb, arg);
387d7579d12SMichal Kazior }
388d7579d12SMichal Kazior 
389d7579d12SMichal Kazior static inline int
ath10k_wmi_pull_svc_avail(struct ath10k * ar,struct sk_buff * skb,struct wmi_svc_avail_ev_arg * arg)390cea19a6cSCarl Huang ath10k_wmi_pull_svc_avail(struct ath10k *ar, struct sk_buff *skb,
391cea19a6cSCarl Huang 			  struct wmi_svc_avail_ev_arg *arg)
392cea19a6cSCarl Huang {
393cea19a6cSCarl Huang 	if (!ar->wmi.ops->pull_svc_avail)
394cea19a6cSCarl Huang 		return -EOPNOTSUPP;
395cea19a6cSCarl Huang 	return ar->wmi.ops->pull_svc_avail(ar, skb, arg);
396cea19a6cSCarl Huang }
397cea19a6cSCarl Huang 
398cea19a6cSCarl Huang static inline int
ath10k_wmi_pull_fw_stats(struct ath10k * ar,struct sk_buff * skb,struct ath10k_fw_stats * stats)399d7579d12SMichal Kazior ath10k_wmi_pull_fw_stats(struct ath10k *ar, struct sk_buff *skb,
400d7579d12SMichal Kazior 			 struct ath10k_fw_stats *stats)
401d7579d12SMichal Kazior {
402d7579d12SMichal Kazior 	if (!ar->wmi.ops->pull_fw_stats)
403d7579d12SMichal Kazior 		return -EOPNOTSUPP;
404d7579d12SMichal Kazior 
405d7579d12SMichal Kazior 	return ar->wmi.ops->pull_fw_stats(ar, skb, stats);
406d7579d12SMichal Kazior }
407d7579d12SMichal Kazior 
408d7579d12SMichal Kazior static inline int
ath10k_wmi_pull_roam_ev(struct ath10k * ar,struct sk_buff * skb,struct wmi_roam_ev_arg * arg)409c1a4654aSMichal Kazior ath10k_wmi_pull_roam_ev(struct ath10k *ar, struct sk_buff *skb,
410c1a4654aSMichal Kazior 			struct wmi_roam_ev_arg *arg)
411c1a4654aSMichal Kazior {
412c1a4654aSMichal Kazior 	if (!ar->wmi.ops->pull_roam_ev)
413c1a4654aSMichal Kazior 		return -EOPNOTSUPP;
414c1a4654aSMichal Kazior 
415c1a4654aSMichal Kazior 	return ar->wmi.ops->pull_roam_ev(ar, skb, arg);
416c1a4654aSMichal Kazior }
417c1a4654aSMichal Kazior 
418c1a4654aSMichal Kazior static inline int
ath10k_wmi_pull_wow_event(struct ath10k * ar,struct sk_buff * skb,struct wmi_wow_ev_arg * arg)419f5431e87SJanusz Dziedzic ath10k_wmi_pull_wow_event(struct ath10k *ar, struct sk_buff *skb,
420f5431e87SJanusz Dziedzic 			  struct wmi_wow_ev_arg *arg)
421f5431e87SJanusz Dziedzic {
422f5431e87SJanusz Dziedzic 	if (!ar->wmi.ops->pull_wow_event)
423f5431e87SJanusz Dziedzic 		return -EOPNOTSUPP;
424f5431e87SJanusz Dziedzic 
425f5431e87SJanusz Dziedzic 	return ar->wmi.ops->pull_wow_event(ar, skb, arg);
426f5431e87SJanusz Dziedzic }
427f5431e87SJanusz Dziedzic 
42884d4911bSMichal Kazior static inline int
ath10k_wmi_pull_echo_ev(struct ath10k * ar,struct sk_buff * skb,struct wmi_echo_ev_arg * arg)42984d4911bSMichal Kazior ath10k_wmi_pull_echo_ev(struct ath10k *ar, struct sk_buff *skb,
43084d4911bSMichal Kazior 			struct wmi_echo_ev_arg *arg)
43184d4911bSMichal Kazior {
43284d4911bSMichal Kazior 	if (!ar->wmi.ops->pull_echo_ev)
43384d4911bSMichal Kazior 		return -EOPNOTSUPP;
43484d4911bSMichal Kazior 
43584d4911bSMichal Kazior 	return ar->wmi.ops->pull_echo_ev(ar, skb, arg);
43684d4911bSMichal Kazior }
43784d4911bSMichal Kazior 
4386f6eb1bcSSriram R static inline int
ath10k_wmi_pull_dfs_status(struct ath10k * ar,struct sk_buff * skb,struct wmi_dfs_status_ev_arg * arg)4396f6eb1bcSSriram R ath10k_wmi_pull_dfs_status(struct ath10k *ar, struct sk_buff *skb,
4406f6eb1bcSSriram R 			   struct wmi_dfs_status_ev_arg *arg)
4416f6eb1bcSSriram R {
4426f6eb1bcSSriram R 	if (!ar->wmi.ops->pull_dfs_status_ev)
4436f6eb1bcSSriram R 		return -EOPNOTSUPP;
4446f6eb1bcSSriram R 
4456f6eb1bcSSriram R 	return ar->wmi.ops->pull_dfs_status_ev(ar, skb, arg);
4466f6eb1bcSSriram R }
4476f6eb1bcSSriram R 
44808e75ea8SVivek Natarajan static inline enum wmi_txbf_conf
ath10k_wmi_get_txbf_conf_scheme(struct ath10k * ar)44908e75ea8SVivek Natarajan ath10k_wmi_get_txbf_conf_scheme(struct ath10k *ar)
45008e75ea8SVivek Natarajan {
45108e75ea8SVivek Natarajan 	if (!ar->wmi.ops->get_txbf_conf_scheme)
45208e75ea8SVivek Natarajan 		return WMI_TXBF_CONF_UNSUPPORTED;
45308e75ea8SVivek Natarajan 
45408e75ea8SVivek Natarajan 	return ar->wmi.ops->get_txbf_conf_scheme(ar);
45508e75ea8SVivek Natarajan }
45608e75ea8SVivek Natarajan 
457f5431e87SJanusz Dziedzic static inline int
ath10k_wmi_cleanup_mgmt_tx_send(struct ath10k * ar,struct sk_buff * msdu)458c730c477SRakesh Pillai ath10k_wmi_cleanup_mgmt_tx_send(struct ath10k *ar, struct sk_buff *msdu)
459c730c477SRakesh Pillai {
460c730c477SRakesh Pillai 	if (!ar->wmi.ops->cleanup_mgmt_tx_send)
461c730c477SRakesh Pillai 		return -EOPNOTSUPP;
462c730c477SRakesh Pillai 
463c730c477SRakesh Pillai 	return ar->wmi.ops->cleanup_mgmt_tx_send(ar, msdu);
464c730c477SRakesh Pillai }
465c730c477SRakesh Pillai 
466c730c477SRakesh Pillai static inline int
ath10k_wmi_mgmt_tx_send(struct ath10k * ar,struct sk_buff * msdu,dma_addr_t paddr)46738a1390eSRakesh Pillai ath10k_wmi_mgmt_tx_send(struct ath10k *ar, struct sk_buff *msdu,
46838a1390eSRakesh Pillai 			dma_addr_t paddr)
46938a1390eSRakesh Pillai {
47038a1390eSRakesh Pillai 	struct sk_buff *skb;
47138a1390eSRakesh Pillai 	int ret;
47238a1390eSRakesh Pillai 
47338a1390eSRakesh Pillai 	if (!ar->wmi.ops->gen_mgmt_tx_send)
47438a1390eSRakesh Pillai 		return -EOPNOTSUPP;
47538a1390eSRakesh Pillai 
47638a1390eSRakesh Pillai 	skb = ar->wmi.ops->gen_mgmt_tx_send(ar, msdu, paddr);
47738a1390eSRakesh Pillai 	if (IS_ERR(skb))
47838a1390eSRakesh Pillai 		return PTR_ERR(skb);
47938a1390eSRakesh Pillai 
48038a1390eSRakesh Pillai 	ret = ath10k_wmi_cmd_send(ar, skb,
48138a1390eSRakesh Pillai 				  ar->wmi.cmd->mgmt_tx_send_cmdid);
48238a1390eSRakesh Pillai 	if (ret)
48338a1390eSRakesh Pillai 		return ret;
48438a1390eSRakesh Pillai 
48538a1390eSRakesh Pillai 	return 0;
48638a1390eSRakesh Pillai }
48738a1390eSRakesh Pillai 
48838a1390eSRakesh Pillai static inline int
ath10k_wmi_mgmt_tx(struct ath10k * ar,struct sk_buff * msdu)489d7579d12SMichal Kazior ath10k_wmi_mgmt_tx(struct ath10k *ar, struct sk_buff *msdu)
490d7579d12SMichal Kazior {
491d7579d12SMichal Kazior 	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(msdu);
492d7579d12SMichal Kazior 	struct sk_buff *skb;
493d7579d12SMichal Kazior 	int ret;
494d7579d12SMichal Kazior 
495d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_mgmt_tx)
496d7579d12SMichal Kazior 		return -EOPNOTSUPP;
497d7579d12SMichal Kazior 
498d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_mgmt_tx(ar, msdu);
499d7579d12SMichal Kazior 	if (IS_ERR(skb))
500d7579d12SMichal Kazior 		return PTR_ERR(skb);
501d7579d12SMichal Kazior 
50238a1390eSRakesh Pillai 	ret = ath10k_wmi_cmd_send(ar, skb,
50338a1390eSRakesh Pillai 				  ar->wmi.cmd->mgmt_tx_cmdid);
504d7579d12SMichal Kazior 	if (ret)
505d7579d12SMichal Kazior 		return ret;
506d7579d12SMichal Kazior 
507d7579d12SMichal Kazior 	/* FIXME There's no ACK event for Management Tx. This probably
50837ff1b0dSMarcin Rokicki 	 * shouldn't be called here either.
50937ff1b0dSMarcin Rokicki 	 */
510d7579d12SMichal Kazior 	info->flags |= IEEE80211_TX_STAT_ACK;
511d7579d12SMichal Kazior 	ieee80211_tx_status_irqsafe(ar->hw, msdu);
512d7579d12SMichal Kazior 
513d7579d12SMichal Kazior 	return 0;
514d7579d12SMichal Kazior }
515d7579d12SMichal Kazior 
516d7579d12SMichal 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)517d7579d12SMichal Kazior ath10k_wmi_pdev_set_regdomain(struct ath10k *ar, u16 rd, u16 rd2g, u16 rd5g,
518d7579d12SMichal Kazior 			      u16 ctl2g, u16 ctl5g,
519d7579d12SMichal Kazior 			      enum wmi_dfs_region dfs_reg)
520d7579d12SMichal Kazior {
521d7579d12SMichal Kazior 	struct sk_buff *skb;
522d7579d12SMichal Kazior 
523d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_pdev_set_rd)
524d7579d12SMichal Kazior 		return -EOPNOTSUPP;
525d7579d12SMichal Kazior 
526d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_pdev_set_rd(ar, rd, rd2g, rd5g, ctl2g, ctl5g,
527d7579d12SMichal Kazior 					   dfs_reg);
528d7579d12SMichal Kazior 	if (IS_ERR(skb))
529d7579d12SMichal Kazior 		return PTR_ERR(skb);
530d7579d12SMichal Kazior 
531d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb,
532d7579d12SMichal Kazior 				   ar->wmi.cmd->pdev_set_regdomain_cmdid);
533d7579d12SMichal Kazior }
534d7579d12SMichal Kazior 
535d7579d12SMichal Kazior static inline int
ath10k_wmi_pdev_set_base_macaddr(struct ath10k * ar,const u8 macaddr[ETH_ALEN])53605e7ba24SChristian Lamparter ath10k_wmi_pdev_set_base_macaddr(struct ath10k *ar, const u8 macaddr[ETH_ALEN])
53705e7ba24SChristian Lamparter {
53805e7ba24SChristian Lamparter 	struct sk_buff *skb;
53905e7ba24SChristian Lamparter 
54005e7ba24SChristian Lamparter 	if (!ar->wmi.ops->gen_pdev_set_base_macaddr)
54105e7ba24SChristian Lamparter 		return -EOPNOTSUPP;
54205e7ba24SChristian Lamparter 
54305e7ba24SChristian Lamparter 	skb = ar->wmi.ops->gen_pdev_set_base_macaddr(ar, macaddr);
54405e7ba24SChristian Lamparter 	if (IS_ERR(skb))
54505e7ba24SChristian Lamparter 		return PTR_ERR(skb);
54605e7ba24SChristian Lamparter 
54705e7ba24SChristian Lamparter 	return ath10k_wmi_cmd_send(ar, skb,
54805e7ba24SChristian Lamparter 				   ar->wmi.cmd->pdev_set_base_macaddr_cmdid);
54905e7ba24SChristian Lamparter }
55005e7ba24SChristian Lamparter 
55105e7ba24SChristian Lamparter static inline int
ath10k_wmi_pdev_suspend_target(struct ath10k * ar,u32 suspend_opt)552d7579d12SMichal Kazior ath10k_wmi_pdev_suspend_target(struct ath10k *ar, u32 suspend_opt)
553d7579d12SMichal Kazior {
554d7579d12SMichal Kazior 	struct sk_buff *skb;
555d7579d12SMichal Kazior 
556d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_pdev_suspend)
557d7579d12SMichal Kazior 		return -EOPNOTSUPP;
558d7579d12SMichal Kazior 
559d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_pdev_suspend(ar, suspend_opt);
560d7579d12SMichal Kazior 	if (IS_ERR(skb))
561d7579d12SMichal Kazior 		return PTR_ERR(skb);
562d7579d12SMichal Kazior 
563d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->pdev_suspend_cmdid);
564d7579d12SMichal Kazior }
565d7579d12SMichal Kazior 
566d7579d12SMichal Kazior static inline int
ath10k_wmi_pdev_resume_target(struct ath10k * ar)567d7579d12SMichal Kazior ath10k_wmi_pdev_resume_target(struct ath10k *ar)
568d7579d12SMichal Kazior {
569d7579d12SMichal Kazior 	struct sk_buff *skb;
570d7579d12SMichal Kazior 
571d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_pdev_resume)
572d7579d12SMichal Kazior 		return -EOPNOTSUPP;
573d7579d12SMichal Kazior 
574d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_pdev_resume(ar);
575d7579d12SMichal Kazior 	if (IS_ERR(skb))
576d7579d12SMichal Kazior 		return PTR_ERR(skb);
577d7579d12SMichal Kazior 
578d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->pdev_resume_cmdid);
579d7579d12SMichal Kazior }
580d7579d12SMichal Kazior 
581d7579d12SMichal Kazior static inline int
ath10k_wmi_pdev_set_param(struct ath10k * ar,u32 id,u32 value)582d7579d12SMichal Kazior ath10k_wmi_pdev_set_param(struct ath10k *ar, u32 id, u32 value)
583d7579d12SMichal Kazior {
584d7579d12SMichal Kazior 	struct sk_buff *skb;
585d7579d12SMichal Kazior 
586d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_pdev_set_param)
587d7579d12SMichal Kazior 		return -EOPNOTSUPP;
588d7579d12SMichal Kazior 
589d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_pdev_set_param(ar, id, value);
590d7579d12SMichal Kazior 	if (IS_ERR(skb))
591d7579d12SMichal Kazior 		return PTR_ERR(skb);
592d7579d12SMichal Kazior 
593d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->pdev_set_param_cmdid);
594d7579d12SMichal Kazior }
595d7579d12SMichal Kazior 
596d7579d12SMichal Kazior static inline int
ath10k_wmi_cmd_init(struct ath10k * ar)597d7579d12SMichal Kazior ath10k_wmi_cmd_init(struct ath10k *ar)
598d7579d12SMichal Kazior {
599d7579d12SMichal Kazior 	struct sk_buff *skb;
600d7579d12SMichal Kazior 
601d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_init)
602d7579d12SMichal Kazior 		return -EOPNOTSUPP;
603d7579d12SMichal Kazior 
604d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_init(ar);
605d7579d12SMichal Kazior 	if (IS_ERR(skb))
606d7579d12SMichal Kazior 		return PTR_ERR(skb);
607d7579d12SMichal Kazior 
608d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->init_cmdid);
609d7579d12SMichal Kazior }
610d7579d12SMichal Kazior 
611d7579d12SMichal Kazior static inline int
ath10k_wmi_start_scan(struct ath10k * ar,const struct wmi_start_scan_arg * arg)612d7579d12SMichal Kazior ath10k_wmi_start_scan(struct ath10k *ar,
613d7579d12SMichal Kazior 		      const struct wmi_start_scan_arg *arg)
614d7579d12SMichal Kazior {
615d7579d12SMichal Kazior 	struct sk_buff *skb;
616d7579d12SMichal Kazior 
617d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_start_scan)
618d7579d12SMichal Kazior 		return -EOPNOTSUPP;
619d7579d12SMichal Kazior 
620d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_start_scan(ar, arg);
621d7579d12SMichal Kazior 	if (IS_ERR(skb))
622d7579d12SMichal Kazior 		return PTR_ERR(skb);
623d7579d12SMichal Kazior 
624d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->start_scan_cmdid);
625d7579d12SMichal Kazior }
626d7579d12SMichal Kazior 
627d7579d12SMichal Kazior static inline int
ath10k_wmi_stop_scan(struct ath10k * ar,const struct wmi_stop_scan_arg * arg)628d7579d12SMichal Kazior ath10k_wmi_stop_scan(struct ath10k *ar, const struct wmi_stop_scan_arg *arg)
629d7579d12SMichal Kazior {
630d7579d12SMichal Kazior 	struct sk_buff *skb;
631d7579d12SMichal Kazior 
632d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_stop_scan)
633d7579d12SMichal Kazior 		return -EOPNOTSUPP;
634d7579d12SMichal Kazior 
635d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_stop_scan(ar, arg);
636d7579d12SMichal Kazior 	if (IS_ERR(skb))
637d7579d12SMichal Kazior 		return PTR_ERR(skb);
638d7579d12SMichal Kazior 
639d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->stop_scan_cmdid);
640d7579d12SMichal Kazior }
641d7579d12SMichal Kazior 
642d7579d12SMichal 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])643d7579d12SMichal Kazior ath10k_wmi_vdev_create(struct ath10k *ar, u32 vdev_id,
644d7579d12SMichal Kazior 		       enum wmi_vdev_type type,
645d7579d12SMichal Kazior 		       enum wmi_vdev_subtype subtype,
646d7579d12SMichal Kazior 		       const u8 macaddr[ETH_ALEN])
647d7579d12SMichal Kazior {
648d7579d12SMichal Kazior 	struct sk_buff *skb;
649d7579d12SMichal Kazior 
650d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_vdev_create)
651d7579d12SMichal Kazior 		return -EOPNOTSUPP;
652d7579d12SMichal Kazior 
653d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_create(ar, vdev_id, type, subtype, macaddr);
654d7579d12SMichal Kazior 	if (IS_ERR(skb))
655d7579d12SMichal Kazior 		return PTR_ERR(skb);
656d7579d12SMichal Kazior 
657d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_create_cmdid);
658d7579d12SMichal Kazior }
659d7579d12SMichal Kazior 
660d7579d12SMichal Kazior static inline int
ath10k_wmi_vdev_delete(struct ath10k * ar,u32 vdev_id)661d7579d12SMichal Kazior ath10k_wmi_vdev_delete(struct ath10k *ar, u32 vdev_id)
662d7579d12SMichal Kazior {
663d7579d12SMichal Kazior 	struct sk_buff *skb;
664d7579d12SMichal Kazior 
665d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_vdev_delete)
666d7579d12SMichal Kazior 		return -EOPNOTSUPP;
667d7579d12SMichal Kazior 
668d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_delete(ar, vdev_id);
669d7579d12SMichal Kazior 	if (IS_ERR(skb))
670d7579d12SMichal Kazior 		return PTR_ERR(skb);
671d7579d12SMichal Kazior 
672d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_delete_cmdid);
673d7579d12SMichal Kazior }
674d7579d12SMichal Kazior 
675d7579d12SMichal Kazior static inline int
ath10k_wmi_vdev_start(struct ath10k * ar,const struct wmi_vdev_start_request_arg * arg)676d7579d12SMichal Kazior ath10k_wmi_vdev_start(struct ath10k *ar,
677d7579d12SMichal Kazior 		      const struct wmi_vdev_start_request_arg *arg)
678d7579d12SMichal Kazior {
679d7579d12SMichal Kazior 	struct sk_buff *skb;
680d7579d12SMichal Kazior 
681d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_vdev_start)
682d7579d12SMichal Kazior 		return -EOPNOTSUPP;
683d7579d12SMichal Kazior 
684d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_start(ar, arg, false);
685d7579d12SMichal Kazior 	if (IS_ERR(skb))
686d7579d12SMichal Kazior 		return PTR_ERR(skb);
687d7579d12SMichal Kazior 
688d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb,
689d7579d12SMichal Kazior 				   ar->wmi.cmd->vdev_start_request_cmdid);
690d7579d12SMichal Kazior }
691d7579d12SMichal Kazior 
692d7579d12SMichal Kazior static inline int
ath10k_wmi_vdev_restart(struct ath10k * ar,const struct wmi_vdev_start_request_arg * arg)693d7579d12SMichal Kazior ath10k_wmi_vdev_restart(struct ath10k *ar,
694d7579d12SMichal Kazior 			const struct wmi_vdev_start_request_arg *arg)
695d7579d12SMichal Kazior {
696d7579d12SMichal Kazior 	struct sk_buff *skb;
697d7579d12SMichal Kazior 
698d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_vdev_start)
699d7579d12SMichal Kazior 		return -EOPNOTSUPP;
700d7579d12SMichal Kazior 
701d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_start(ar, arg, true);
702d7579d12SMichal Kazior 	if (IS_ERR(skb))
703d7579d12SMichal Kazior 		return PTR_ERR(skb);
704d7579d12SMichal Kazior 
705d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb,
706d7579d12SMichal Kazior 				   ar->wmi.cmd->vdev_restart_request_cmdid);
707d7579d12SMichal Kazior }
708d7579d12SMichal Kazior 
709d7579d12SMichal Kazior static inline int
ath10k_wmi_vdev_stop(struct ath10k * ar,u32 vdev_id)710d7579d12SMichal Kazior ath10k_wmi_vdev_stop(struct ath10k *ar, u32 vdev_id)
711d7579d12SMichal Kazior {
712d7579d12SMichal Kazior 	struct sk_buff *skb;
713d7579d12SMichal Kazior 
714d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_vdev_stop)
715d7579d12SMichal Kazior 		return -EOPNOTSUPP;
716d7579d12SMichal Kazior 
717d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_stop(ar, vdev_id);
718d7579d12SMichal Kazior 	if (IS_ERR(skb))
719d7579d12SMichal Kazior 		return PTR_ERR(skb);
720d7579d12SMichal Kazior 
721d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_stop_cmdid);
722d7579d12SMichal Kazior }
723d7579d12SMichal Kazior 
724d7579d12SMichal Kazior static inline int
ath10k_wmi_vdev_up(struct ath10k * ar,u32 vdev_id,u32 aid,const u8 * bssid)725d7579d12SMichal Kazior ath10k_wmi_vdev_up(struct ath10k *ar, u32 vdev_id, u32 aid, const u8 *bssid)
726d7579d12SMichal Kazior {
727d7579d12SMichal Kazior 	struct sk_buff *skb;
728d7579d12SMichal Kazior 
729d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_vdev_up)
730d7579d12SMichal Kazior 		return -EOPNOTSUPP;
731d7579d12SMichal Kazior 
732d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_up(ar, vdev_id, aid, bssid);
733d7579d12SMichal Kazior 	if (IS_ERR(skb))
734d7579d12SMichal Kazior 		return PTR_ERR(skb);
735d7579d12SMichal Kazior 
736d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_up_cmdid);
737d7579d12SMichal Kazior }
738d7579d12SMichal Kazior 
739d7579d12SMichal Kazior static inline int
ath10k_wmi_vdev_down(struct ath10k * ar,u32 vdev_id)740d7579d12SMichal Kazior ath10k_wmi_vdev_down(struct ath10k *ar, u32 vdev_id)
741d7579d12SMichal Kazior {
742d7579d12SMichal Kazior 	struct sk_buff *skb;
743d7579d12SMichal Kazior 
744d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_vdev_down)
745d7579d12SMichal Kazior 		return -EOPNOTSUPP;
746d7579d12SMichal Kazior 
747d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_down(ar, vdev_id);
748d7579d12SMichal Kazior 	if (IS_ERR(skb))
749d7579d12SMichal Kazior 		return PTR_ERR(skb);
750d7579d12SMichal Kazior 
751d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_down_cmdid);
752d7579d12SMichal Kazior }
753d7579d12SMichal Kazior 
754d7579d12SMichal Kazior static inline int
ath10k_wmi_vdev_set_param(struct ath10k * ar,u32 vdev_id,u32 param_id,u32 param_value)755d7579d12SMichal Kazior ath10k_wmi_vdev_set_param(struct ath10k *ar, u32 vdev_id, u32 param_id,
756d7579d12SMichal Kazior 			  u32 param_value)
757d7579d12SMichal Kazior {
758d7579d12SMichal Kazior 	struct sk_buff *skb;
759d7579d12SMichal Kazior 
760d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_vdev_set_param)
761d7579d12SMichal Kazior 		return -EOPNOTSUPP;
762d7579d12SMichal Kazior 
763d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_set_param(ar, vdev_id, param_id,
764d7579d12SMichal Kazior 					      param_value);
765d7579d12SMichal Kazior 	if (IS_ERR(skb))
766d7579d12SMichal Kazior 		return PTR_ERR(skb);
767d7579d12SMichal Kazior 
768d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->vdev_set_param_cmdid);
769d7579d12SMichal Kazior }
770d7579d12SMichal Kazior 
771d7579d12SMichal Kazior static inline int
ath10k_wmi_vdev_install_key(struct ath10k * ar,const struct wmi_vdev_install_key_arg * arg)772d7579d12SMichal Kazior ath10k_wmi_vdev_install_key(struct ath10k *ar,
773d7579d12SMichal Kazior 			    const struct wmi_vdev_install_key_arg *arg)
774d7579d12SMichal Kazior {
775d7579d12SMichal Kazior 	struct sk_buff *skb;
776d7579d12SMichal Kazior 
777d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_vdev_install_key)
778d7579d12SMichal Kazior 		return -EOPNOTSUPP;
779d7579d12SMichal Kazior 
780d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_install_key(ar, arg);
781d7579d12SMichal Kazior 	if (IS_ERR(skb))
782d7579d12SMichal Kazior 		return PTR_ERR(skb);
783d7579d12SMichal Kazior 
784d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb,
785d7579d12SMichal Kazior 				   ar->wmi.cmd->vdev_install_key_cmdid);
786d7579d12SMichal Kazior }
787d7579d12SMichal Kazior 
788d7579d12SMichal Kazior static inline int
ath10k_wmi_vdev_spectral_conf(struct ath10k * ar,const struct wmi_vdev_spectral_conf_arg * arg)789d7579d12SMichal Kazior ath10k_wmi_vdev_spectral_conf(struct ath10k *ar,
790d7579d12SMichal Kazior 			      const struct wmi_vdev_spectral_conf_arg *arg)
791d7579d12SMichal Kazior {
792d7579d12SMichal Kazior 	struct sk_buff *skb;
793d7579d12SMichal Kazior 	u32 cmd_id;
794d7579d12SMichal Kazior 
79518ae68ffSMichal Kazior 	if (!ar->wmi.ops->gen_vdev_spectral_conf)
79618ae68ffSMichal Kazior 		return -EOPNOTSUPP;
79718ae68ffSMichal Kazior 
798d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_spectral_conf(ar, arg);
799d7579d12SMichal Kazior 	if (IS_ERR(skb))
800d7579d12SMichal Kazior 		return PTR_ERR(skb);
801d7579d12SMichal Kazior 
802d7579d12SMichal Kazior 	cmd_id = ar->wmi.cmd->vdev_spectral_scan_configure_cmdid;
803d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, cmd_id);
804d7579d12SMichal Kazior }
805d7579d12SMichal Kazior 
806d7579d12SMichal Kazior static inline int
ath10k_wmi_vdev_spectral_enable(struct ath10k * ar,u32 vdev_id,u32 trigger,u32 enable)807d7579d12SMichal Kazior ath10k_wmi_vdev_spectral_enable(struct ath10k *ar, u32 vdev_id, u32 trigger,
808d7579d12SMichal Kazior 				u32 enable)
809d7579d12SMichal Kazior {
810d7579d12SMichal Kazior 	struct sk_buff *skb;
811d7579d12SMichal Kazior 	u32 cmd_id;
812d7579d12SMichal Kazior 
81318ae68ffSMichal Kazior 	if (!ar->wmi.ops->gen_vdev_spectral_enable)
81418ae68ffSMichal Kazior 		return -EOPNOTSUPP;
81518ae68ffSMichal Kazior 
816d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_spectral_enable(ar, vdev_id, trigger,
817d7579d12SMichal Kazior 						    enable);
818d7579d12SMichal Kazior 	if (IS_ERR(skb))
819d7579d12SMichal Kazior 		return PTR_ERR(skb);
820d7579d12SMichal Kazior 
821d7579d12SMichal Kazior 	cmd_id = ar->wmi.cmd->vdev_spectral_scan_enable_cmdid;
822d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, cmd_id);
823d7579d12SMichal Kazior }
824d7579d12SMichal Kazior 
825d7579d12SMichal 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)8260c7e477cSJanusz Dziedzic ath10k_wmi_vdev_sta_uapsd(struct ath10k *ar, u32 vdev_id,
8270c7e477cSJanusz Dziedzic 			  const u8 peer_addr[ETH_ALEN],
8280c7e477cSJanusz Dziedzic 			  const struct wmi_sta_uapsd_auto_trig_arg *args,
8290c7e477cSJanusz Dziedzic 			  u32 num_ac)
8300c7e477cSJanusz Dziedzic {
8310c7e477cSJanusz Dziedzic 	struct sk_buff *skb;
8320c7e477cSJanusz Dziedzic 	u32 cmd_id;
8330c7e477cSJanusz Dziedzic 
8340c7e477cSJanusz Dziedzic 	if (!ar->wmi.ops->gen_vdev_sta_uapsd)
8350c7e477cSJanusz Dziedzic 		return -EOPNOTSUPP;
8360c7e477cSJanusz Dziedzic 
8370c7e477cSJanusz Dziedzic 	skb = ar->wmi.ops->gen_vdev_sta_uapsd(ar, vdev_id, peer_addr, args,
8380c7e477cSJanusz Dziedzic 					      num_ac);
8390c7e477cSJanusz Dziedzic 	if (IS_ERR(skb))
8400c7e477cSJanusz Dziedzic 		return PTR_ERR(skb);
8410c7e477cSJanusz Dziedzic 
8420c7e477cSJanusz Dziedzic 	cmd_id = ar->wmi.cmd->sta_uapsd_auto_trig_cmdid;
8430c7e477cSJanusz Dziedzic 	return ath10k_wmi_cmd_send(ar, skb, cmd_id);
8440c7e477cSJanusz Dziedzic }
8450c7e477cSJanusz Dziedzic 
8460c7e477cSJanusz Dziedzic static inline int
ath10k_wmi_vdev_wmm_conf(struct ath10k * ar,u32 vdev_id,const struct wmi_wmm_params_all_arg * arg)8476d492fe2SMichal Kazior ath10k_wmi_vdev_wmm_conf(struct ath10k *ar, u32 vdev_id,
8486d492fe2SMichal Kazior 			 const struct wmi_wmm_params_all_arg *arg)
8496d492fe2SMichal Kazior {
8506d492fe2SMichal Kazior 	struct sk_buff *skb;
8516d492fe2SMichal Kazior 	u32 cmd_id;
8526d492fe2SMichal Kazior 
8536d492fe2SMichal Kazior 	skb = ar->wmi.ops->gen_vdev_wmm_conf(ar, vdev_id, arg);
8546d492fe2SMichal Kazior 	if (IS_ERR(skb))
8556d492fe2SMichal Kazior 		return PTR_ERR(skb);
8566d492fe2SMichal Kazior 
8576d492fe2SMichal Kazior 	cmd_id = ar->wmi.cmd->vdev_set_wmm_params_cmdid;
8586d492fe2SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, cmd_id);
8596d492fe2SMichal Kazior }
8606d492fe2SMichal Kazior 
8616d492fe2SMichal 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)862d7579d12SMichal Kazior ath10k_wmi_peer_create(struct ath10k *ar, u32 vdev_id,
8637390ed34SMarek Puzyniak 		       const u8 peer_addr[ETH_ALEN],
8647390ed34SMarek Puzyniak 		       enum wmi_peer_type peer_type)
865d7579d12SMichal Kazior {
866d7579d12SMichal Kazior 	struct sk_buff *skb;
867d7579d12SMichal Kazior 
868d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_peer_create)
869d7579d12SMichal Kazior 		return -EOPNOTSUPP;
870d7579d12SMichal Kazior 
8717390ed34SMarek Puzyniak 	skb = ar->wmi.ops->gen_peer_create(ar, vdev_id, peer_addr, peer_type);
872d7579d12SMichal Kazior 	if (IS_ERR(skb))
873d7579d12SMichal Kazior 		return PTR_ERR(skb);
874d7579d12SMichal Kazior 
875d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->peer_create_cmdid);
876d7579d12SMichal Kazior }
877d7579d12SMichal Kazior 
878d7579d12SMichal Kazior static inline int
ath10k_wmi_peer_delete(struct ath10k * ar,u32 vdev_id,const u8 peer_addr[ETH_ALEN])879d7579d12SMichal Kazior ath10k_wmi_peer_delete(struct ath10k *ar, u32 vdev_id,
880d7579d12SMichal Kazior 		       const u8 peer_addr[ETH_ALEN])
881d7579d12SMichal Kazior {
882d7579d12SMichal Kazior 	struct sk_buff *skb;
883d7579d12SMichal Kazior 
884d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_peer_delete)
885d7579d12SMichal Kazior 		return -EOPNOTSUPP;
886d7579d12SMichal Kazior 
887d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_peer_delete(ar, vdev_id, peer_addr);
888d7579d12SMichal Kazior 	if (IS_ERR(skb))
889d7579d12SMichal Kazior 		return PTR_ERR(skb);
890d7579d12SMichal Kazior 
891d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->peer_delete_cmdid);
892d7579d12SMichal Kazior }
893d7579d12SMichal Kazior 
894d7579d12SMichal Kazior static inline int
ath10k_wmi_peer_flush(struct ath10k * ar,u32 vdev_id,const u8 peer_addr[ETH_ALEN],u32 tid_bitmap)895d7579d12SMichal Kazior ath10k_wmi_peer_flush(struct ath10k *ar, u32 vdev_id,
896d7579d12SMichal Kazior 		      const u8 peer_addr[ETH_ALEN], u32 tid_bitmap)
897d7579d12SMichal Kazior {
898d7579d12SMichal Kazior 	struct sk_buff *skb;
899d7579d12SMichal Kazior 
900d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_peer_flush)
901d7579d12SMichal Kazior 		return -EOPNOTSUPP;
902d7579d12SMichal Kazior 
903d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_peer_flush(ar, vdev_id, peer_addr, tid_bitmap);
904d7579d12SMichal Kazior 	if (IS_ERR(skb))
905d7579d12SMichal Kazior 		return PTR_ERR(skb);
906d7579d12SMichal Kazior 
907d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->peer_flush_tids_cmdid);
908d7579d12SMichal Kazior }
909d7579d12SMichal Kazior 
910d7579d12SMichal 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)911d7579d12SMichal Kazior ath10k_wmi_peer_set_param(struct ath10k *ar, u32 vdev_id, const u8 *peer_addr,
912d7579d12SMichal Kazior 			  enum wmi_peer_param param_id, u32 param_value)
913d7579d12SMichal Kazior {
914d7579d12SMichal Kazior 	struct sk_buff *skb;
915d7579d12SMichal Kazior 
916d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_peer_set_param)
917d7579d12SMichal Kazior 		return -EOPNOTSUPP;
918d7579d12SMichal Kazior 
919d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_peer_set_param(ar, vdev_id, peer_addr, param_id,
920d7579d12SMichal Kazior 					      param_value);
921d7579d12SMichal Kazior 	if (IS_ERR(skb))
922d7579d12SMichal Kazior 		return PTR_ERR(skb);
923d7579d12SMichal Kazior 
924d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->peer_set_param_cmdid);
925d7579d12SMichal Kazior }
926d7579d12SMichal Kazior 
927d7579d12SMichal Kazior static inline int
ath10k_wmi_set_psmode(struct ath10k * ar,u32 vdev_id,enum wmi_sta_ps_mode psmode)928d7579d12SMichal Kazior ath10k_wmi_set_psmode(struct ath10k *ar, u32 vdev_id,
929d7579d12SMichal Kazior 		      enum wmi_sta_ps_mode psmode)
930d7579d12SMichal Kazior {
931d7579d12SMichal Kazior 	struct sk_buff *skb;
932d7579d12SMichal Kazior 
933d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_set_psmode)
934d7579d12SMichal Kazior 		return -EOPNOTSUPP;
935d7579d12SMichal Kazior 
936d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_set_psmode(ar, vdev_id, psmode);
937d7579d12SMichal Kazior 	if (IS_ERR(skb))
938d7579d12SMichal Kazior 		return PTR_ERR(skb);
939d7579d12SMichal Kazior 
940d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb,
941d7579d12SMichal Kazior 				   ar->wmi.cmd->sta_powersave_mode_cmdid);
942d7579d12SMichal Kazior }
943d7579d12SMichal Kazior 
944d7579d12SMichal 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)945d7579d12SMichal Kazior ath10k_wmi_set_sta_ps_param(struct ath10k *ar, u32 vdev_id,
946d7579d12SMichal Kazior 			    enum wmi_sta_powersave_param param_id, u32 value)
947d7579d12SMichal Kazior {
948d7579d12SMichal Kazior 	struct sk_buff *skb;
949d7579d12SMichal Kazior 
950d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_set_sta_ps)
951d7579d12SMichal Kazior 		return -EOPNOTSUPP;
952d7579d12SMichal Kazior 
953d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_set_sta_ps(ar, vdev_id, param_id, value);
954d7579d12SMichal Kazior 	if (IS_ERR(skb))
955d7579d12SMichal Kazior 		return PTR_ERR(skb);
956d7579d12SMichal Kazior 
957d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb,
958d7579d12SMichal Kazior 				   ar->wmi.cmd->sta_powersave_param_cmdid);
959d7579d12SMichal Kazior }
960d7579d12SMichal Kazior 
961d7579d12SMichal 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)962d7579d12SMichal Kazior ath10k_wmi_set_ap_ps_param(struct ath10k *ar, u32 vdev_id, const u8 *mac,
963d7579d12SMichal Kazior 			   enum wmi_ap_ps_peer_param param_id, u32 value)
964d7579d12SMichal Kazior {
965d7579d12SMichal Kazior 	struct sk_buff *skb;
966d7579d12SMichal Kazior 
967d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_set_ap_ps)
968d7579d12SMichal Kazior 		return -EOPNOTSUPP;
969d7579d12SMichal Kazior 
970d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_set_ap_ps(ar, vdev_id, mac, param_id, value);
971d7579d12SMichal Kazior 	if (IS_ERR(skb))
972d7579d12SMichal Kazior 		return PTR_ERR(skb);
973d7579d12SMichal Kazior 
974d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb,
975d7579d12SMichal Kazior 				   ar->wmi.cmd->ap_ps_peer_param_cmdid);
976d7579d12SMichal Kazior }
977d7579d12SMichal Kazior 
978d7579d12SMichal Kazior static inline int
ath10k_wmi_scan_chan_list(struct ath10k * ar,const struct wmi_scan_chan_list_arg * arg)979d7579d12SMichal Kazior ath10k_wmi_scan_chan_list(struct ath10k *ar,
980d7579d12SMichal Kazior 			  const struct wmi_scan_chan_list_arg *arg)
981d7579d12SMichal Kazior {
982d7579d12SMichal Kazior 	struct sk_buff *skb;
983d7579d12SMichal Kazior 
984d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_scan_chan_list)
985d7579d12SMichal Kazior 		return -EOPNOTSUPP;
986d7579d12SMichal Kazior 
987d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_scan_chan_list(ar, arg);
988d7579d12SMichal Kazior 	if (IS_ERR(skb))
989d7579d12SMichal Kazior 		return PTR_ERR(skb);
990d7579d12SMichal Kazior 
991d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->scan_chan_list_cmdid);
992d7579d12SMichal Kazior }
993d7579d12SMichal Kazior 
994d7579d12SMichal Kazior static inline int
ath10k_wmi_scan_prob_req_oui(struct ath10k * ar,const u8 mac_addr[ETH_ALEN])99560e1d0fbSCarl Huang ath10k_wmi_scan_prob_req_oui(struct ath10k *ar, const u8 mac_addr[ETH_ALEN])
99660e1d0fbSCarl Huang {
99760e1d0fbSCarl Huang 	struct sk_buff *skb;
99860e1d0fbSCarl Huang 	u32 prob_req_oui;
99960e1d0fbSCarl Huang 
100060e1d0fbSCarl Huang 	prob_req_oui = (((u32)mac_addr[0]) << 16) |
100160e1d0fbSCarl Huang 		       (((u32)mac_addr[1]) << 8) | mac_addr[2];
100260e1d0fbSCarl Huang 
100360e1d0fbSCarl Huang 	if (!ar->wmi.ops->gen_scan_prob_req_oui)
100460e1d0fbSCarl Huang 		return -EOPNOTSUPP;
100560e1d0fbSCarl Huang 
100660e1d0fbSCarl Huang 	skb = ar->wmi.ops->gen_scan_prob_req_oui(ar, prob_req_oui);
100760e1d0fbSCarl Huang 	if (IS_ERR(skb))
100860e1d0fbSCarl Huang 		return PTR_ERR(skb);
100960e1d0fbSCarl Huang 
101060e1d0fbSCarl Huang 	return ath10k_wmi_cmd_send(ar, skb,
101160e1d0fbSCarl Huang 			ar->wmi.cmd->scan_prob_req_oui_cmdid);
101260e1d0fbSCarl Huang }
101360e1d0fbSCarl Huang 
101460e1d0fbSCarl Huang static inline int
ath10k_wmi_peer_assoc(struct ath10k * ar,const struct wmi_peer_assoc_complete_arg * arg)1015d7579d12SMichal Kazior ath10k_wmi_peer_assoc(struct ath10k *ar,
1016d7579d12SMichal Kazior 		      const struct wmi_peer_assoc_complete_arg *arg)
1017d7579d12SMichal Kazior {
1018d7579d12SMichal Kazior 	struct sk_buff *skb;
1019d7579d12SMichal Kazior 
1020d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_peer_assoc)
1021d7579d12SMichal Kazior 		return -EOPNOTSUPP;
1022d7579d12SMichal Kazior 
1023d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_peer_assoc(ar, arg);
1024d7579d12SMichal Kazior 	if (IS_ERR(skb))
1025d7579d12SMichal Kazior 		return PTR_ERR(skb);
1026d7579d12SMichal Kazior 
1027d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->peer_assoc_cmdid);
1028d7579d12SMichal Kazior }
1029d7579d12SMichal Kazior 
1030d7579d12SMichal 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)10319ad50182SMichal Kazior ath10k_wmi_beacon_send_ref_nowait(struct ath10k *ar, u32 vdev_id,
10329ad50182SMichal Kazior 				  const void *bcn, size_t bcn_len,
10339ad50182SMichal Kazior 				  u32 bcn_paddr, bool dtim_zero,
10349ad50182SMichal Kazior 				  bool deliver_cab)
1035d7579d12SMichal Kazior {
1036d7579d12SMichal Kazior 	struct sk_buff *skb;
1037d7579d12SMichal Kazior 	int ret;
1038d7579d12SMichal Kazior 
1039d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_beacon_dma)
1040d7579d12SMichal Kazior 		return -EOPNOTSUPP;
1041d7579d12SMichal Kazior 
10429ad50182SMichal Kazior 	skb = ar->wmi.ops->gen_beacon_dma(ar, vdev_id, bcn, bcn_len, bcn_paddr,
10439ad50182SMichal Kazior 					  dtim_zero, deliver_cab);
1044d7579d12SMichal Kazior 	if (IS_ERR(skb))
1045d7579d12SMichal Kazior 		return PTR_ERR(skb);
1046d7579d12SMichal Kazior 
1047d7579d12SMichal Kazior 	ret = ath10k_wmi_cmd_send_nowait(ar, skb,
1048d7579d12SMichal Kazior 					 ar->wmi.cmd->pdev_send_bcn_cmdid);
1049d7579d12SMichal Kazior 	if (ret) {
1050d7579d12SMichal Kazior 		dev_kfree_skb(skb);
1051d7579d12SMichal Kazior 		return ret;
1052d7579d12SMichal Kazior 	}
1053d7579d12SMichal Kazior 
1054d7579d12SMichal Kazior 	return 0;
1055d7579d12SMichal Kazior }
1056d7579d12SMichal Kazior 
1057d7579d12SMichal Kazior static inline int
ath10k_wmi_pdev_set_wmm_params(struct ath10k * ar,const struct wmi_wmm_params_all_arg * arg)1058d7579d12SMichal Kazior ath10k_wmi_pdev_set_wmm_params(struct ath10k *ar,
10595e752e42SMichal Kazior 			       const struct wmi_wmm_params_all_arg *arg)
1060d7579d12SMichal Kazior {
1061d7579d12SMichal Kazior 	struct sk_buff *skb;
1062d7579d12SMichal Kazior 
1063d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_pdev_set_wmm)
1064d7579d12SMichal Kazior 		return -EOPNOTSUPP;
1065d7579d12SMichal Kazior 
1066d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_pdev_set_wmm(ar, arg);
1067d7579d12SMichal Kazior 	if (IS_ERR(skb))
1068d7579d12SMichal Kazior 		return PTR_ERR(skb);
1069d7579d12SMichal Kazior 
1070d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb,
1071d7579d12SMichal Kazior 				   ar->wmi.cmd->pdev_set_wmm_params_cmdid);
1072d7579d12SMichal Kazior }
1073d7579d12SMichal Kazior 
1074d7579d12SMichal Kazior static inline int
ath10k_wmi_request_stats(struct ath10k * ar,u32 stats_mask)1075de23d3efSMichal Kazior ath10k_wmi_request_stats(struct ath10k *ar, u32 stats_mask)
1076d7579d12SMichal Kazior {
1077d7579d12SMichal Kazior 	struct sk_buff *skb;
1078d7579d12SMichal Kazior 
1079d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_request_stats)
1080d7579d12SMichal Kazior 		return -EOPNOTSUPP;
1081d7579d12SMichal Kazior 
1082de23d3efSMichal Kazior 	skb = ar->wmi.ops->gen_request_stats(ar, stats_mask);
1083d7579d12SMichal Kazior 	if (IS_ERR(skb))
1084d7579d12SMichal Kazior 		return PTR_ERR(skb);
1085d7579d12SMichal Kazior 
1086d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->request_stats_cmdid);
1087d7579d12SMichal Kazior }
1088d7579d12SMichal Kazior 
1089d7579d12SMichal 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)10900f7cb268SWen Gong ath10k_wmi_request_peer_stats_info(struct ath10k *ar,
10910f7cb268SWen Gong 				   u32 vdev_id,
10920f7cb268SWen Gong 				   enum wmi_peer_stats_info_request_type type,
10930f7cb268SWen Gong 				   u8 *addr,
10940f7cb268SWen Gong 				   u32 reset)
10950f7cb268SWen Gong {
10960f7cb268SWen Gong 	struct sk_buff *skb;
10970f7cb268SWen Gong 
10980f7cb268SWen Gong 	if (!ar->wmi.ops->gen_request_peer_stats_info)
10990f7cb268SWen Gong 		return -EOPNOTSUPP;
11000f7cb268SWen Gong 
11010f7cb268SWen Gong 	skb = ar->wmi.ops->gen_request_peer_stats_info(ar,
11020f7cb268SWen Gong 						       vdev_id,
11030f7cb268SWen Gong 						       type,
11040f7cb268SWen Gong 						       addr,
11050f7cb268SWen Gong 						       reset);
11060f7cb268SWen Gong 	if (IS_ERR(skb))
11070f7cb268SWen Gong 		return PTR_ERR(skb);
11080f7cb268SWen Gong 
11090f7cb268SWen Gong 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->request_peer_stats_info_cmdid);
11100f7cb268SWen Gong }
11110f7cb268SWen Gong 
11120f7cb268SWen Gong static inline int
ath10k_wmi_force_fw_hang(struct ath10k * ar,enum wmi_force_fw_hang_type type,u32 delay_ms)1113d7579d12SMichal Kazior ath10k_wmi_force_fw_hang(struct ath10k *ar,
1114d7579d12SMichal Kazior 			 enum wmi_force_fw_hang_type type, u32 delay_ms)
1115d7579d12SMichal Kazior {
1116d7579d12SMichal Kazior 	struct sk_buff *skb;
1117d7579d12SMichal Kazior 
1118d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_force_fw_hang)
1119d7579d12SMichal Kazior 		return -EOPNOTSUPP;
1120d7579d12SMichal Kazior 
1121d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_force_fw_hang(ar, type, delay_ms);
1122d7579d12SMichal Kazior 	if (IS_ERR(skb))
1123d7579d12SMichal Kazior 		return PTR_ERR(skb);
1124d7579d12SMichal Kazior 
1125d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->force_fw_hang_cmdid);
1126d7579d12SMichal Kazior }
1127d7579d12SMichal Kazior 
ath10k_wmi_gpio_config(struct ath10k * ar,u32 gpio_num,u32 input,u32 pull_type,u32 intr_mode)1128*8e1debd8SSebastian Gottschall static inline int ath10k_wmi_gpio_config(struct ath10k *ar, u32 gpio_num,
1129*8e1debd8SSebastian Gottschall 					 u32 input, u32 pull_type, u32 intr_mode)
1130*8e1debd8SSebastian Gottschall {
1131*8e1debd8SSebastian Gottschall 	struct sk_buff *skb;
1132*8e1debd8SSebastian Gottschall 
1133*8e1debd8SSebastian Gottschall 	if (!ar->wmi.ops->gen_gpio_config)
1134*8e1debd8SSebastian Gottschall 		return -EOPNOTSUPP;
1135*8e1debd8SSebastian Gottschall 
1136*8e1debd8SSebastian Gottschall 	skb = ar->wmi.ops->gen_gpio_config(ar, gpio_num, input, pull_type, intr_mode);
1137*8e1debd8SSebastian Gottschall 	if (IS_ERR(skb))
1138*8e1debd8SSebastian Gottschall 		return PTR_ERR(skb);
1139*8e1debd8SSebastian Gottschall 
1140*8e1debd8SSebastian Gottschall 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->gpio_config_cmdid);
1141*8e1debd8SSebastian Gottschall }
1142*8e1debd8SSebastian Gottschall 
ath10k_wmi_gpio_output(struct ath10k * ar,u32 gpio_num,u32 set)1143*8e1debd8SSebastian Gottschall static inline int ath10k_wmi_gpio_output(struct ath10k *ar, u32 gpio_num, u32 set)
1144*8e1debd8SSebastian Gottschall {
1145*8e1debd8SSebastian Gottschall 	struct sk_buff *skb;
1146*8e1debd8SSebastian Gottschall 
1147*8e1debd8SSebastian Gottschall 	if (!ar->wmi.ops->gen_gpio_config)
1148*8e1debd8SSebastian Gottschall 		return -EOPNOTSUPP;
1149*8e1debd8SSebastian Gottschall 
1150*8e1debd8SSebastian Gottschall 	skb = ar->wmi.ops->gen_gpio_output(ar, gpio_num, set);
1151*8e1debd8SSebastian Gottschall 	if (IS_ERR(skb))
1152*8e1debd8SSebastian Gottschall 		return PTR_ERR(skb);
1153*8e1debd8SSebastian Gottschall 
1154*8e1debd8SSebastian Gottschall 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->gpio_output_cmdid);
1155*8e1debd8SSebastian Gottschall }
1156*8e1debd8SSebastian Gottschall 
1157d7579d12SMichal Kazior static inline int
ath10k_wmi_dbglog_cfg(struct ath10k * ar,u64 module_enable,u32 log_level)1158afcbc82cSMaharaja Kennadyrajan ath10k_wmi_dbglog_cfg(struct ath10k *ar, u64 module_enable, u32 log_level)
1159d7579d12SMichal Kazior {
1160d7579d12SMichal Kazior 	struct sk_buff *skb;
1161d7579d12SMichal Kazior 
1162d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_dbglog_cfg)
1163d7579d12SMichal Kazior 		return -EOPNOTSUPP;
1164d7579d12SMichal Kazior 
1165467210a6SSenthilKumar Jegadeesan 	skb = ar->wmi.ops->gen_dbglog_cfg(ar, module_enable, log_level);
1166d7579d12SMichal Kazior 	if (IS_ERR(skb))
1167d7579d12SMichal Kazior 		return PTR_ERR(skb);
1168d7579d12SMichal Kazior 
1169d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->dbglog_cfg_cmdid);
1170d7579d12SMichal Kazior }
1171d7579d12SMichal Kazior 
1172d7579d12SMichal Kazior static inline int
ath10k_wmi_pdev_pktlog_enable(struct ath10k * ar,u32 filter)1173d7579d12SMichal Kazior ath10k_wmi_pdev_pktlog_enable(struct ath10k *ar, u32 filter)
1174d7579d12SMichal Kazior {
1175d7579d12SMichal Kazior 	struct sk_buff *skb;
1176d7579d12SMichal Kazior 
1177d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_pktlog_enable)
1178d7579d12SMichal Kazior 		return -EOPNOTSUPP;
1179d7579d12SMichal Kazior 
1180d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_pktlog_enable(ar, filter);
1181d7579d12SMichal Kazior 	if (IS_ERR(skb))
1182d7579d12SMichal Kazior 		return PTR_ERR(skb);
1183d7579d12SMichal Kazior 
1184d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->pdev_pktlog_enable_cmdid);
1185d7579d12SMichal Kazior }
1186d7579d12SMichal Kazior 
1187d7579d12SMichal Kazior static inline int
ath10k_wmi_pdev_pktlog_disable(struct ath10k * ar)1188d7579d12SMichal Kazior ath10k_wmi_pdev_pktlog_disable(struct ath10k *ar)
1189d7579d12SMichal Kazior {
1190d7579d12SMichal Kazior 	struct sk_buff *skb;
1191d7579d12SMichal Kazior 
1192d7579d12SMichal Kazior 	if (!ar->wmi.ops->gen_pktlog_disable)
1193d7579d12SMichal Kazior 		return -EOPNOTSUPP;
1194d7579d12SMichal Kazior 
1195d7579d12SMichal Kazior 	skb = ar->wmi.ops->gen_pktlog_disable(ar);
1196d7579d12SMichal Kazior 	if (IS_ERR(skb))
1197d7579d12SMichal Kazior 		return PTR_ERR(skb);
1198d7579d12SMichal Kazior 
1199d7579d12SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb,
1200d7579d12SMichal Kazior 				   ar->wmi.cmd->pdev_pktlog_disable_cmdid);
1201d7579d12SMichal Kazior }
1202d7579d12SMichal Kazior 
1203ffdd738dSRajkumar Manoharan static inline int
ath10k_wmi_pdev_set_quiet_mode(struct ath10k * ar,u32 period,u32 duration,u32 next_offset,u32 enabled)1204ffdd738dSRajkumar Manoharan ath10k_wmi_pdev_set_quiet_mode(struct ath10k *ar, u32 period, u32 duration,
1205ffdd738dSRajkumar Manoharan 			       u32 next_offset, u32 enabled)
1206ffdd738dSRajkumar Manoharan {
1207ffdd738dSRajkumar Manoharan 	struct sk_buff *skb;
1208ffdd738dSRajkumar Manoharan 
1209ffdd738dSRajkumar Manoharan 	if (!ar->wmi.ops->gen_pdev_set_quiet_mode)
1210ffdd738dSRajkumar Manoharan 		return -EOPNOTSUPP;
1211ffdd738dSRajkumar Manoharan 
1212ffdd738dSRajkumar Manoharan 	skb = ar->wmi.ops->gen_pdev_set_quiet_mode(ar, period, duration,
1213ffdd738dSRajkumar Manoharan 						   next_offset, enabled);
1214ffdd738dSRajkumar Manoharan 	if (IS_ERR(skb))
1215ffdd738dSRajkumar Manoharan 		return PTR_ERR(skb);
1216ffdd738dSRajkumar Manoharan 
1217ffdd738dSRajkumar Manoharan 	return ath10k_wmi_cmd_send(ar, skb,
1218ffdd738dSRajkumar Manoharan 				   ar->wmi.cmd->pdev_set_quiet_mode_cmdid);
1219ffdd738dSRajkumar Manoharan }
1220ffdd738dSRajkumar Manoharan 
1221a57a6a27SRajkumar Manoharan static inline int
ath10k_wmi_pdev_get_temperature(struct ath10k * ar)1222a57a6a27SRajkumar Manoharan ath10k_wmi_pdev_get_temperature(struct ath10k *ar)
1223a57a6a27SRajkumar Manoharan {
1224a57a6a27SRajkumar Manoharan 	struct sk_buff *skb;
1225a57a6a27SRajkumar Manoharan 
1226a57a6a27SRajkumar Manoharan 	if (!ar->wmi.ops->gen_pdev_get_temperature)
1227a57a6a27SRajkumar Manoharan 		return -EOPNOTSUPP;
1228a57a6a27SRajkumar Manoharan 
1229a57a6a27SRajkumar Manoharan 	skb = ar->wmi.ops->gen_pdev_get_temperature(ar);
1230a57a6a27SRajkumar Manoharan 	if (IS_ERR(skb))
1231a57a6a27SRajkumar Manoharan 		return PTR_ERR(skb);
1232a57a6a27SRajkumar Manoharan 
1233a57a6a27SRajkumar Manoharan 	return ath10k_wmi_cmd_send(ar, skb,
1234a57a6a27SRajkumar Manoharan 				   ar->wmi.cmd->pdev_get_temperature_cmdid);
1235a57a6a27SRajkumar Manoharan }
1236a57a6a27SRajkumar Manoharan 
1237dc8ab278SRajkumar Manoharan static inline int
ath10k_wmi_addba_clear_resp(struct ath10k * ar,u32 vdev_id,const u8 * mac)1238dc8ab278SRajkumar Manoharan ath10k_wmi_addba_clear_resp(struct ath10k *ar, u32 vdev_id, const u8 *mac)
1239dc8ab278SRajkumar Manoharan {
1240dc8ab278SRajkumar Manoharan 	struct sk_buff *skb;
1241dc8ab278SRajkumar Manoharan 
1242dc8ab278SRajkumar Manoharan 	if (!ar->wmi.ops->gen_addba_clear_resp)
1243dc8ab278SRajkumar Manoharan 		return -EOPNOTSUPP;
1244dc8ab278SRajkumar Manoharan 
1245dc8ab278SRajkumar Manoharan 	skb = ar->wmi.ops->gen_addba_clear_resp(ar, vdev_id, mac);
1246dc8ab278SRajkumar Manoharan 	if (IS_ERR(skb))
1247dc8ab278SRajkumar Manoharan 		return PTR_ERR(skb);
1248dc8ab278SRajkumar Manoharan 
1249dc8ab278SRajkumar Manoharan 	return ath10k_wmi_cmd_send(ar, skb,
1250dc8ab278SRajkumar Manoharan 				   ar->wmi.cmd->addba_clear_resp_cmdid);
1251dc8ab278SRajkumar Manoharan }
1252dc8ab278SRajkumar Manoharan 
125365c0893dSRajkumar Manoharan static inline int
ath10k_wmi_addba_send(struct ath10k * ar,u32 vdev_id,const u8 * mac,u32 tid,u32 buf_size)125465c0893dSRajkumar Manoharan ath10k_wmi_addba_send(struct ath10k *ar, u32 vdev_id, const u8 *mac,
125565c0893dSRajkumar Manoharan 		      u32 tid, u32 buf_size)
125665c0893dSRajkumar Manoharan {
125765c0893dSRajkumar Manoharan 	struct sk_buff *skb;
125865c0893dSRajkumar Manoharan 
125965c0893dSRajkumar Manoharan 	if (!ar->wmi.ops->gen_addba_send)
126065c0893dSRajkumar Manoharan 		return -EOPNOTSUPP;
126165c0893dSRajkumar Manoharan 
126265c0893dSRajkumar Manoharan 	skb = ar->wmi.ops->gen_addba_send(ar, vdev_id, mac, tid, buf_size);
126365c0893dSRajkumar Manoharan 	if (IS_ERR(skb))
126465c0893dSRajkumar Manoharan 		return PTR_ERR(skb);
126565c0893dSRajkumar Manoharan 
126665c0893dSRajkumar Manoharan 	return ath10k_wmi_cmd_send(ar, skb,
126765c0893dSRajkumar Manoharan 				   ar->wmi.cmd->addba_send_cmdid);
126865c0893dSRajkumar Manoharan }
126965c0893dSRajkumar Manoharan 
127011597413SRajkumar Manoharan static inline int
ath10k_wmi_addba_set_resp(struct ath10k * ar,u32 vdev_id,const u8 * mac,u32 tid,u32 status)127111597413SRajkumar Manoharan ath10k_wmi_addba_set_resp(struct ath10k *ar, u32 vdev_id, const u8 *mac,
127211597413SRajkumar Manoharan 			  u32 tid, u32 status)
127311597413SRajkumar Manoharan {
127411597413SRajkumar Manoharan 	struct sk_buff *skb;
127511597413SRajkumar Manoharan 
127611597413SRajkumar Manoharan 	if (!ar->wmi.ops->gen_addba_set_resp)
127711597413SRajkumar Manoharan 		return -EOPNOTSUPP;
127811597413SRajkumar Manoharan 
127911597413SRajkumar Manoharan 	skb = ar->wmi.ops->gen_addba_set_resp(ar, vdev_id, mac, tid, status);
128011597413SRajkumar Manoharan 	if (IS_ERR(skb))
128111597413SRajkumar Manoharan 		return PTR_ERR(skb);
128211597413SRajkumar Manoharan 
128311597413SRajkumar Manoharan 	return ath10k_wmi_cmd_send(ar, skb,
128411597413SRajkumar Manoharan 				   ar->wmi.cmd->addba_set_resp_cmdid);
128511597413SRajkumar Manoharan }
128611597413SRajkumar Manoharan 
128750abef85SRajkumar Manoharan static inline int
ath10k_wmi_delba_send(struct ath10k * ar,u32 vdev_id,const u8 * mac,u32 tid,u32 initiator,u32 reason)128850abef85SRajkumar Manoharan ath10k_wmi_delba_send(struct ath10k *ar, u32 vdev_id, const u8 *mac,
128950abef85SRajkumar Manoharan 		      u32 tid, u32 initiator, u32 reason)
129050abef85SRajkumar Manoharan {
129150abef85SRajkumar Manoharan 	struct sk_buff *skb;
129250abef85SRajkumar Manoharan 
129350abef85SRajkumar Manoharan 	if (!ar->wmi.ops->gen_delba_send)
129450abef85SRajkumar Manoharan 		return -EOPNOTSUPP;
129550abef85SRajkumar Manoharan 
129650abef85SRajkumar Manoharan 	skb = ar->wmi.ops->gen_delba_send(ar, vdev_id, mac, tid, initiator,
129750abef85SRajkumar Manoharan 					  reason);
129850abef85SRajkumar Manoharan 	if (IS_ERR(skb))
129950abef85SRajkumar Manoharan 		return PTR_ERR(skb);
130050abef85SRajkumar Manoharan 
130150abef85SRajkumar Manoharan 	return ath10k_wmi_cmd_send(ar, skb,
130250abef85SRajkumar Manoharan 				   ar->wmi.cmd->delba_send_cmdid);
130350abef85SRajkumar Manoharan }
130450abef85SRajkumar Manoharan 
1305be9ce9d8SMichal 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)1306be9ce9d8SMichal Kazior ath10k_wmi_bcn_tmpl(struct ath10k *ar, u32 vdev_id, u32 tim_ie_offset,
1307be9ce9d8SMichal Kazior 		    struct sk_buff *bcn, u32 prb_caps, u32 prb_erp,
1308be9ce9d8SMichal Kazior 		    void *prb_ies, size_t prb_ies_len)
1309be9ce9d8SMichal Kazior {
1310be9ce9d8SMichal Kazior 	struct sk_buff *skb;
1311be9ce9d8SMichal Kazior 
1312be9ce9d8SMichal Kazior 	if (!ar->wmi.ops->gen_bcn_tmpl)
1313be9ce9d8SMichal Kazior 		return -EOPNOTSUPP;
1314be9ce9d8SMichal Kazior 
1315be9ce9d8SMichal Kazior 	skb = ar->wmi.ops->gen_bcn_tmpl(ar, vdev_id, tim_ie_offset, bcn,
1316be9ce9d8SMichal Kazior 					prb_caps, prb_erp, prb_ies,
1317be9ce9d8SMichal Kazior 					prb_ies_len);
1318be9ce9d8SMichal Kazior 	if (IS_ERR(skb))
1319be9ce9d8SMichal Kazior 		return PTR_ERR(skb);
1320be9ce9d8SMichal Kazior 
1321be9ce9d8SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->bcn_tmpl_cmdid);
1322be9ce9d8SMichal Kazior }
1323be9ce9d8SMichal Kazior 
13244c4955feSMichal Kazior static inline int
ath10k_wmi_prb_tmpl(struct ath10k * ar,u32 vdev_id,struct sk_buff * prb)13254c4955feSMichal Kazior ath10k_wmi_prb_tmpl(struct ath10k *ar, u32 vdev_id, struct sk_buff *prb)
13264c4955feSMichal Kazior {
13274c4955feSMichal Kazior 	struct sk_buff *skb;
13284c4955feSMichal Kazior 
13294c4955feSMichal Kazior 	if (!ar->wmi.ops->gen_prb_tmpl)
13304c4955feSMichal Kazior 		return -EOPNOTSUPP;
13314c4955feSMichal Kazior 
13324c4955feSMichal Kazior 	skb = ar->wmi.ops->gen_prb_tmpl(ar, vdev_id, prb);
13334c4955feSMichal Kazior 	if (IS_ERR(skb))
13344c4955feSMichal Kazior 		return PTR_ERR(skb);
13354c4955feSMichal Kazior 
13364c4955feSMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->prb_tmpl_cmdid);
13374c4955feSMichal Kazior }
13384c4955feSMichal Kazior 
1339369242b4SMichal Kazior static inline int
ath10k_wmi_p2p_go_bcn_ie(struct ath10k * ar,u32 vdev_id,const u8 * p2p_ie)1340369242b4SMichal Kazior ath10k_wmi_p2p_go_bcn_ie(struct ath10k *ar, u32 vdev_id, const u8 *p2p_ie)
1341369242b4SMichal Kazior {
1342369242b4SMichal Kazior 	struct sk_buff *skb;
1343369242b4SMichal Kazior 
1344369242b4SMichal Kazior 	if (!ar->wmi.ops->gen_p2p_go_bcn_ie)
1345369242b4SMichal Kazior 		return -EOPNOTSUPP;
1346369242b4SMichal Kazior 
1347369242b4SMichal Kazior 	skb = ar->wmi.ops->gen_p2p_go_bcn_ie(ar, vdev_id, p2p_ie);
1348369242b4SMichal Kazior 	if (IS_ERR(skb))
1349369242b4SMichal Kazior 		return PTR_ERR(skb);
1350369242b4SMichal Kazior 
1351369242b4SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->p2p_go_set_beacon_ie);
1352369242b4SMichal Kazior }
1353369242b4SMichal Kazior 
13546e8b188bSJanusz Dziedzic static inline int
ath10k_wmi_sta_keepalive(struct ath10k * ar,const struct wmi_sta_keepalive_arg * arg)13556e8b188bSJanusz Dziedzic ath10k_wmi_sta_keepalive(struct ath10k *ar,
13566e8b188bSJanusz Dziedzic 			 const struct wmi_sta_keepalive_arg *arg)
13576e8b188bSJanusz Dziedzic {
13586e8b188bSJanusz Dziedzic 	struct sk_buff *skb;
13596e8b188bSJanusz Dziedzic 	u32 cmd_id;
13606e8b188bSJanusz Dziedzic 
13616e8b188bSJanusz Dziedzic 	if (!ar->wmi.ops->gen_sta_keepalive)
13626e8b188bSJanusz Dziedzic 		return -EOPNOTSUPP;
13636e8b188bSJanusz Dziedzic 
13646e8b188bSJanusz Dziedzic 	skb = ar->wmi.ops->gen_sta_keepalive(ar, arg);
13656e8b188bSJanusz Dziedzic 	if (IS_ERR(skb))
13666e8b188bSJanusz Dziedzic 		return PTR_ERR(skb);
13676e8b188bSJanusz Dziedzic 
13686e8b188bSJanusz Dziedzic 	cmd_id = ar->wmi.cmd->sta_keepalive_cmd;
13696e8b188bSJanusz Dziedzic 	return ath10k_wmi_cmd_send(ar, skb, cmd_id);
13706e8b188bSJanusz Dziedzic }
13716e8b188bSJanusz Dziedzic 
1372f5431e87SJanusz Dziedzic static inline int
ath10k_wmi_wow_enable(struct ath10k * ar)1373f5431e87SJanusz Dziedzic ath10k_wmi_wow_enable(struct ath10k *ar)
1374f5431e87SJanusz Dziedzic {
1375f5431e87SJanusz Dziedzic 	struct sk_buff *skb;
1376f5431e87SJanusz Dziedzic 	u32 cmd_id;
1377f5431e87SJanusz Dziedzic 
1378f5431e87SJanusz Dziedzic 	if (!ar->wmi.ops->gen_wow_enable)
1379f5431e87SJanusz Dziedzic 		return -EOPNOTSUPP;
1380f5431e87SJanusz Dziedzic 
1381f5431e87SJanusz Dziedzic 	skb = ar->wmi.ops->gen_wow_enable(ar);
1382f5431e87SJanusz Dziedzic 	if (IS_ERR(skb))
1383f5431e87SJanusz Dziedzic 		return PTR_ERR(skb);
1384f5431e87SJanusz Dziedzic 
1385f5431e87SJanusz Dziedzic 	cmd_id = ar->wmi.cmd->wow_enable_cmdid;
1386f5431e87SJanusz Dziedzic 	return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1387f5431e87SJanusz Dziedzic }
1388f5431e87SJanusz Dziedzic 
1389f5431e87SJanusz Dziedzic static inline int
ath10k_wmi_wow_add_wakeup_event(struct ath10k * ar,u32 vdev_id,enum wmi_wow_wakeup_event event,u32 enable)1390f5431e87SJanusz Dziedzic ath10k_wmi_wow_add_wakeup_event(struct ath10k *ar, u32 vdev_id,
1391f5431e87SJanusz Dziedzic 				enum wmi_wow_wakeup_event event,
1392f5431e87SJanusz Dziedzic 				u32 enable)
1393f5431e87SJanusz Dziedzic {
1394f5431e87SJanusz Dziedzic 	struct sk_buff *skb;
1395f5431e87SJanusz Dziedzic 	u32 cmd_id;
1396f5431e87SJanusz Dziedzic 
1397f5431e87SJanusz Dziedzic 	if (!ar->wmi.ops->gen_wow_add_wakeup_event)
1398f5431e87SJanusz Dziedzic 		return -EOPNOTSUPP;
1399f5431e87SJanusz Dziedzic 
1400f5431e87SJanusz Dziedzic 	skb = ar->wmi.ops->gen_wow_add_wakeup_event(ar, vdev_id, event, enable);
1401f5431e87SJanusz Dziedzic 	if (IS_ERR(skb))
1402f5431e87SJanusz Dziedzic 		return PTR_ERR(skb);
1403f5431e87SJanusz Dziedzic 
1404f5431e87SJanusz Dziedzic 	cmd_id = ar->wmi.cmd->wow_enable_disable_wake_event_cmdid;
1405f5431e87SJanusz Dziedzic 	return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1406f5431e87SJanusz Dziedzic }
1407f5431e87SJanusz Dziedzic 
1408f5431e87SJanusz Dziedzic static inline int
ath10k_wmi_wow_host_wakeup_ind(struct ath10k * ar)1409f5431e87SJanusz Dziedzic ath10k_wmi_wow_host_wakeup_ind(struct ath10k *ar)
1410f5431e87SJanusz Dziedzic {
1411f5431e87SJanusz Dziedzic 	struct sk_buff *skb;
1412f5431e87SJanusz Dziedzic 	u32 cmd_id;
1413f5431e87SJanusz Dziedzic 
1414f5431e87SJanusz Dziedzic 	if (!ar->wmi.ops->gen_wow_host_wakeup_ind)
1415f5431e87SJanusz Dziedzic 		return -EOPNOTSUPP;
1416f5431e87SJanusz Dziedzic 
1417f5431e87SJanusz Dziedzic 	skb = ar->wmi.ops->gen_wow_host_wakeup_ind(ar);
1418f5431e87SJanusz Dziedzic 	if (IS_ERR(skb))
1419f5431e87SJanusz Dziedzic 		return PTR_ERR(skb);
1420f5431e87SJanusz Dziedzic 
1421f5431e87SJanusz Dziedzic 	cmd_id = ar->wmi.cmd->wow_hostwakeup_from_sleep_cmdid;
1422f5431e87SJanusz Dziedzic 	return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1423f5431e87SJanusz Dziedzic }
1424f5431e87SJanusz Dziedzic 
1425d4976104SJanusz 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)1426d4976104SJanusz Dziedzic ath10k_wmi_wow_add_pattern(struct ath10k *ar, u32 vdev_id, u32 pattern_id,
1427d4976104SJanusz Dziedzic 			   const u8 *pattern, const u8 *mask,
1428d4976104SJanusz Dziedzic 			   int pattern_len, int pattern_offset)
1429d4976104SJanusz Dziedzic {
1430d4976104SJanusz Dziedzic 	struct sk_buff *skb;
1431d4976104SJanusz Dziedzic 	u32 cmd_id;
1432d4976104SJanusz Dziedzic 
1433d4976104SJanusz Dziedzic 	if (!ar->wmi.ops->gen_wow_add_pattern)
1434d4976104SJanusz Dziedzic 		return -EOPNOTSUPP;
1435d4976104SJanusz Dziedzic 
1436d4976104SJanusz Dziedzic 	skb = ar->wmi.ops->gen_wow_add_pattern(ar, vdev_id, pattern_id,
1437d4976104SJanusz Dziedzic 					       pattern, mask, pattern_len,
1438d4976104SJanusz Dziedzic 					       pattern_offset);
1439d4976104SJanusz Dziedzic 	if (IS_ERR(skb))
1440d4976104SJanusz Dziedzic 		return PTR_ERR(skb);
1441d4976104SJanusz Dziedzic 
1442d4976104SJanusz Dziedzic 	cmd_id = ar->wmi.cmd->wow_add_wake_pattern_cmdid;
1443d4976104SJanusz Dziedzic 	return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1444d4976104SJanusz Dziedzic }
1445d4976104SJanusz Dziedzic 
1446d4976104SJanusz Dziedzic static inline int
ath10k_wmi_wow_del_pattern(struct ath10k * ar,u32 vdev_id,u32 pattern_id)1447d4976104SJanusz Dziedzic ath10k_wmi_wow_del_pattern(struct ath10k *ar, u32 vdev_id, u32 pattern_id)
1448d4976104SJanusz Dziedzic {
1449d4976104SJanusz Dziedzic 	struct sk_buff *skb;
1450d4976104SJanusz Dziedzic 	u32 cmd_id;
1451d4976104SJanusz Dziedzic 
1452d4976104SJanusz Dziedzic 	if (!ar->wmi.ops->gen_wow_del_pattern)
1453d4976104SJanusz Dziedzic 		return -EOPNOTSUPP;
1454d4976104SJanusz Dziedzic 
1455d4976104SJanusz Dziedzic 	skb = ar->wmi.ops->gen_wow_del_pattern(ar, vdev_id, pattern_id);
1456d4976104SJanusz Dziedzic 	if (IS_ERR(skb))
1457d4976104SJanusz Dziedzic 		return PTR_ERR(skb);
1458d4976104SJanusz Dziedzic 
1459d4976104SJanusz Dziedzic 	cmd_id = ar->wmi.cmd->wow_del_wake_pattern_cmdid;
1460d4976104SJanusz Dziedzic 	return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1461d4976104SJanusz Dziedzic }
1462ad45c888SMarek Puzyniak 
1463ad45c888SMarek Puzyniak static inline int
ath10k_wmi_wow_config_pno(struct ath10k * ar,u32 vdev_id,struct wmi_pno_scan_req * pno_scan)1464ce834e28SWen Gong ath10k_wmi_wow_config_pno(struct ath10k *ar, u32 vdev_id,
1465ce834e28SWen Gong 			  struct wmi_pno_scan_req  *pno_scan)
1466ce834e28SWen Gong {
1467ce834e28SWen Gong 	struct sk_buff *skb;
1468ce834e28SWen Gong 	u32 cmd_id;
1469ce834e28SWen Gong 
1470ce834e28SWen Gong 	if (!ar->wmi.ops->gen_wow_config_pno)
1471ce834e28SWen Gong 		return -EOPNOTSUPP;
1472ce834e28SWen Gong 
1473ce834e28SWen Gong 	skb = ar->wmi.ops->gen_wow_config_pno(ar, vdev_id, pno_scan);
1474ce834e28SWen Gong 	if (IS_ERR(skb))
1475ce834e28SWen Gong 		return PTR_ERR(skb);
1476ce834e28SWen Gong 
1477ce834e28SWen Gong 	cmd_id = ar->wmi.cmd->network_list_offload_config_cmdid;
1478ce834e28SWen Gong 	return ath10k_wmi_cmd_send(ar, skb, cmd_id);
1479ce834e28SWen Gong }
1480ce834e28SWen Gong 
1481ce834e28SWen Gong static inline int
ath10k_wmi_update_fw_tdls_state(struct ath10k * ar,u32 vdev_id,enum wmi_tdls_state state)1482ad45c888SMarek Puzyniak ath10k_wmi_update_fw_tdls_state(struct ath10k *ar, u32 vdev_id,
1483ad45c888SMarek Puzyniak 				enum wmi_tdls_state state)
1484ad45c888SMarek Puzyniak {
1485ad45c888SMarek Puzyniak 	struct sk_buff *skb;
1486ad45c888SMarek Puzyniak 
1487ad45c888SMarek Puzyniak 	if (!ar->wmi.ops->gen_update_fw_tdls_state)
1488ad45c888SMarek Puzyniak 		return -EOPNOTSUPP;
1489ad45c888SMarek Puzyniak 
1490ad45c888SMarek Puzyniak 	skb = ar->wmi.ops->gen_update_fw_tdls_state(ar, vdev_id, state);
1491ad45c888SMarek Puzyniak 	if (IS_ERR(skb))
1492ad45c888SMarek Puzyniak 		return PTR_ERR(skb);
1493ad45c888SMarek Puzyniak 
1494ad45c888SMarek Puzyniak 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->tdls_set_state_cmdid);
1495ad45c888SMarek Puzyniak }
1496ad45c888SMarek Puzyniak 
1497ad45c888SMarek 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)1498ad45c888SMarek Puzyniak ath10k_wmi_tdls_peer_update(struct ath10k *ar,
1499ad45c888SMarek Puzyniak 			    const struct wmi_tdls_peer_update_cmd_arg *arg,
1500ad45c888SMarek Puzyniak 			    const struct wmi_tdls_peer_capab_arg *cap,
1501ad45c888SMarek Puzyniak 			    const struct wmi_channel_arg *chan)
1502ad45c888SMarek Puzyniak {
1503ad45c888SMarek Puzyniak 	struct sk_buff *skb;
1504ad45c888SMarek Puzyniak 
1505ad45c888SMarek Puzyniak 	if (!ar->wmi.ops->gen_tdls_peer_update)
1506ad45c888SMarek Puzyniak 		return -EOPNOTSUPP;
1507ad45c888SMarek Puzyniak 
1508ad45c888SMarek Puzyniak 	skb = ar->wmi.ops->gen_tdls_peer_update(ar, arg, cap, chan);
1509ad45c888SMarek Puzyniak 	if (IS_ERR(skb))
1510ad45c888SMarek Puzyniak 		return PTR_ERR(skb);
1511ad45c888SMarek Puzyniak 
1512ad45c888SMarek Puzyniak 	return ath10k_wmi_cmd_send(ar, skb,
1513ad45c888SMarek Puzyniak 				   ar->wmi.cmd->tdls_peer_update_cmdid);
1514ad45c888SMarek Puzyniak }
1515ad45c888SMarek Puzyniak 
15165b272e30SMichal Kazior static inline int
ath10k_wmi_adaptive_qcs(struct ath10k * ar,bool enable)15175b272e30SMichal Kazior ath10k_wmi_adaptive_qcs(struct ath10k *ar, bool enable)
15185b272e30SMichal Kazior {
15195b272e30SMichal Kazior 	struct sk_buff *skb;
15205b272e30SMichal Kazior 
15215b272e30SMichal Kazior 	if (!ar->wmi.ops->gen_adaptive_qcs)
15225b272e30SMichal Kazior 		return -EOPNOTSUPP;
15235b272e30SMichal Kazior 
15245b272e30SMichal Kazior 	skb = ar->wmi.ops->gen_adaptive_qcs(ar, enable);
15255b272e30SMichal Kazior 	if (IS_ERR(skb))
15265b272e30SMichal Kazior 		return PTR_ERR(skb);
15275b272e30SMichal Kazior 
15285b272e30SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->adaptive_qcs_cmdid);
15295b272e30SMichal Kazior }
15305b272e30SMichal Kazior 
153129542666SMaharaja Kennadyrajan static inline int
ath10k_wmi_pdev_get_tpc_config(struct ath10k * ar,u32 param)153229542666SMaharaja Kennadyrajan ath10k_wmi_pdev_get_tpc_config(struct ath10k *ar, u32 param)
153329542666SMaharaja Kennadyrajan {
153429542666SMaharaja Kennadyrajan 	struct sk_buff *skb;
153529542666SMaharaja Kennadyrajan 
153629542666SMaharaja Kennadyrajan 	if (!ar->wmi.ops->gen_pdev_get_tpc_config)
153729542666SMaharaja Kennadyrajan 		return -EOPNOTSUPP;
153829542666SMaharaja Kennadyrajan 
153929542666SMaharaja Kennadyrajan 	skb = ar->wmi.ops->gen_pdev_get_tpc_config(ar, param);
154029542666SMaharaja Kennadyrajan 
154129542666SMaharaja Kennadyrajan 	if (IS_ERR(skb))
154229542666SMaharaja Kennadyrajan 		return PTR_ERR(skb);
154329542666SMaharaja Kennadyrajan 
154429542666SMaharaja Kennadyrajan 	return ath10k_wmi_cmd_send(ar, skb,
154529542666SMaharaja Kennadyrajan 				   ar->wmi.cmd->pdev_get_tpc_config_cmdid);
154629542666SMaharaja Kennadyrajan }
154729542666SMaharaja Kennadyrajan 
1548bc6f9ae6SManikanta Pubbisetty static inline int
ath10k_wmi_fw_stats_fill(struct ath10k * ar,struct ath10k_fw_stats * fw_stats,char * buf)1549bc6f9ae6SManikanta Pubbisetty ath10k_wmi_fw_stats_fill(struct ath10k *ar, struct ath10k_fw_stats *fw_stats,
1550bc6f9ae6SManikanta Pubbisetty 			 char *buf)
1551bc6f9ae6SManikanta Pubbisetty {
1552bc6f9ae6SManikanta Pubbisetty 	if (!ar->wmi.ops->fw_stats_fill)
1553bc6f9ae6SManikanta Pubbisetty 		return -EOPNOTSUPP;
1554bc6f9ae6SManikanta Pubbisetty 
1555bc6f9ae6SManikanta Pubbisetty 	ar->wmi.ops->fw_stats_fill(ar, fw_stats, buf);
1556bc6f9ae6SManikanta Pubbisetty 	return 0;
1557bc6f9ae6SManikanta Pubbisetty }
155862f77f09SMaharaja 
155962f77f09SMaharaja static inline int
ath10k_wmi_pdev_enable_adaptive_cca(struct ath10k * ar,u8 enable,u32 detect_level,u32 detect_margin)156062f77f09SMaharaja ath10k_wmi_pdev_enable_adaptive_cca(struct ath10k *ar, u8 enable,
156162f77f09SMaharaja 				    u32 detect_level, u32 detect_margin)
156262f77f09SMaharaja {
156362f77f09SMaharaja 	struct sk_buff *skb;
156462f77f09SMaharaja 
156562f77f09SMaharaja 	if (!ar->wmi.ops->gen_pdev_enable_adaptive_cca)
156662f77f09SMaharaja 		return -EOPNOTSUPP;
156762f77f09SMaharaja 
156862f77f09SMaharaja 	skb = ar->wmi.ops->gen_pdev_enable_adaptive_cca(ar, enable,
156962f77f09SMaharaja 							detect_level,
157062f77f09SMaharaja 							detect_margin);
157162f77f09SMaharaja 
157262f77f09SMaharaja 	if (IS_ERR(skb))
157362f77f09SMaharaja 		return PTR_ERR(skb);
157462f77f09SMaharaja 
157562f77f09SMaharaja 	return ath10k_wmi_cmd_send(ar, skb,
157662f77f09SMaharaja 				   ar->wmi.cmd->pdev_enable_adaptive_cca_cmdid);
157762f77f09SMaharaja }
157862f77f09SMaharaja 
15796e4de1a4SPeter Oh static inline int
ath10k_wmi_ext_resource_config(struct ath10k * ar,enum wmi_host_platform_type type,u32 fw_feature_bitmap)158047771902SRaja Mani ath10k_wmi_ext_resource_config(struct ath10k *ar,
158147771902SRaja Mani 			       enum wmi_host_platform_type type,
158247771902SRaja Mani 			       u32 fw_feature_bitmap)
158347771902SRaja Mani {
158447771902SRaja Mani 	struct sk_buff *skb;
158547771902SRaja Mani 
158647771902SRaja Mani 	if (!ar->wmi.ops->ext_resource_config)
158747771902SRaja Mani 		return -EOPNOTSUPP;
158847771902SRaja Mani 
158947771902SRaja Mani 	skb = ar->wmi.ops->ext_resource_config(ar, type,
159047771902SRaja Mani 					       fw_feature_bitmap);
159147771902SRaja Mani 
159247771902SRaja Mani 	if (IS_ERR(skb))
159347771902SRaja Mani 		return PTR_ERR(skb);
159447771902SRaja Mani 
159547771902SRaja Mani 	return ath10k_wmi_cmd_send(ar, skb,
159647771902SRaja Mani 				   ar->wmi.cmd->ext_resource_cfg_cmdid);
159747771902SRaja Mani }
159847771902SRaja Mani 
159947771902SRaja Mani static inline int
ath10k_wmi_get_vdev_subtype(struct ath10k * ar,enum wmi_vdev_subtype subtype)16006e4de1a4SPeter Oh ath10k_wmi_get_vdev_subtype(struct ath10k *ar, enum wmi_vdev_subtype subtype)
16016e4de1a4SPeter Oh {
16026e4de1a4SPeter Oh 	if (!ar->wmi.ops->get_vdev_subtype)
16036e4de1a4SPeter Oh 		return -EOPNOTSUPP;
16046e4de1a4SPeter Oh 
16056e4de1a4SPeter Oh 	return ar->wmi.ops->get_vdev_subtype(ar, subtype);
16066e4de1a4SPeter Oh }
16076e4de1a4SPeter Oh 
16088a0b459eSRajkumar Manoharan static inline int
ath10k_wmi_pdev_bss_chan_info_request(struct ath10k * ar,enum wmi_bss_survey_req_type type)16098a0b459eSRajkumar Manoharan ath10k_wmi_pdev_bss_chan_info_request(struct ath10k *ar,
16108a0b459eSRajkumar Manoharan 				      enum wmi_bss_survey_req_type type)
16118a0b459eSRajkumar Manoharan {
16128a0b459eSRajkumar Manoharan 	struct ath10k_wmi *wmi = &ar->wmi;
16138a0b459eSRajkumar Manoharan 	struct sk_buff *skb;
16148a0b459eSRajkumar Manoharan 
16158a0b459eSRajkumar Manoharan 	if (!wmi->ops->gen_pdev_bss_chan_info_req)
16168a0b459eSRajkumar Manoharan 		return -EOPNOTSUPP;
16178a0b459eSRajkumar Manoharan 
16188a0b459eSRajkumar Manoharan 	skb = wmi->ops->gen_pdev_bss_chan_info_req(ar, type);
16198a0b459eSRajkumar Manoharan 	if (IS_ERR(skb))
16208a0b459eSRajkumar Manoharan 		return PTR_ERR(skb);
16218a0b459eSRajkumar Manoharan 
16228a0b459eSRajkumar Manoharan 	return ath10k_wmi_cmd_send(ar, skb,
16238a0b459eSRajkumar Manoharan 				   wmi->cmd->pdev_bss_chan_info_request_cmdid);
16248a0b459eSRajkumar Manoharan }
16258a0b459eSRajkumar Manoharan 
1626e25854f2SMichal Kazior static inline int
ath10k_wmi_echo(struct ath10k * ar,u32 value)1627e25854f2SMichal Kazior ath10k_wmi_echo(struct ath10k *ar, u32 value)
1628e25854f2SMichal Kazior {
1629e25854f2SMichal Kazior 	struct ath10k_wmi *wmi = &ar->wmi;
1630e25854f2SMichal Kazior 	struct sk_buff *skb;
1631e25854f2SMichal Kazior 
1632e25854f2SMichal Kazior 	if (!wmi->ops->gen_echo)
1633e25854f2SMichal Kazior 		return -EOPNOTSUPP;
1634e25854f2SMichal Kazior 
1635e25854f2SMichal Kazior 	skb = wmi->ops->gen_echo(ar, value);
1636e25854f2SMichal Kazior 	if (IS_ERR(skb))
1637e25854f2SMichal Kazior 		return PTR_ERR(skb);
1638e25854f2SMichal Kazior 
1639e25854f2SMichal Kazior 	return ath10k_wmi_cmd_send(ar, skb, wmi->cmd->echo_cmdid);
1640e25854f2SMichal Kazior }
1641e25854f2SMichal Kazior 
1642bc64d052SMaharaja Kennadyrajan static inline int
ath10k_wmi_pdev_get_tpc_table_cmdid(struct ath10k * ar,u32 param)1643bc64d052SMaharaja Kennadyrajan ath10k_wmi_pdev_get_tpc_table_cmdid(struct ath10k *ar, u32 param)
1644bc64d052SMaharaja Kennadyrajan {
1645bc64d052SMaharaja Kennadyrajan 	struct sk_buff *skb;
1646bc64d052SMaharaja Kennadyrajan 
1647bc64d052SMaharaja Kennadyrajan 	if (!ar->wmi.ops->gen_pdev_get_tpc_table_cmdid)
1648bc64d052SMaharaja Kennadyrajan 		return -EOPNOTSUPP;
1649bc64d052SMaharaja Kennadyrajan 
1650bc64d052SMaharaja Kennadyrajan 	skb = ar->wmi.ops->gen_pdev_get_tpc_table_cmdid(ar, param);
1651bc64d052SMaharaja Kennadyrajan 
1652bc64d052SMaharaja Kennadyrajan 	if (IS_ERR(skb))
1653bc64d052SMaharaja Kennadyrajan 		return PTR_ERR(skb);
1654bc64d052SMaharaja Kennadyrajan 
1655bc64d052SMaharaja Kennadyrajan 	return ath10k_wmi_cmd_send(ar, skb,
1656bc64d052SMaharaja Kennadyrajan 				   ar->wmi.cmd->pdev_get_tpc_table_cmdid);
1657bc64d052SMaharaja Kennadyrajan }
1658bc64d052SMaharaja Kennadyrajan 
16596f6eb1bcSSriram R static inline int
ath10k_wmi_report_radar_found(struct ath10k * ar,const struct ath10k_radar_found_info * arg)16606f6eb1bcSSriram R ath10k_wmi_report_radar_found(struct ath10k *ar,
16616f6eb1bcSSriram R 			      const struct ath10k_radar_found_info *arg)
16626f6eb1bcSSriram R {
16636f6eb1bcSSriram R 	struct sk_buff *skb;
16646f6eb1bcSSriram R 
16656f6eb1bcSSriram R 	if (!ar->wmi.ops->gen_radar_found)
16666f6eb1bcSSriram R 		return -EOPNOTSUPP;
16676f6eb1bcSSriram R 
16686f6eb1bcSSriram R 	skb = ar->wmi.ops->gen_radar_found(ar, arg);
16696f6eb1bcSSriram R 	if (IS_ERR(skb))
16706f6eb1bcSSriram R 		return PTR_ERR(skb);
16716f6eb1bcSSriram R 
16726f6eb1bcSSriram R 	return ath10k_wmi_cmd_send(ar, skb,
16736f6eb1bcSSriram R 				   ar->wmi.cmd->radar_found_cmdid);
16746f6eb1bcSSriram R }
16756f6eb1bcSSriram R 
167684758d4dSBhagavathi Perumal S static inline int
ath10k_wmi_pdev_bb_timing(struct ath10k * ar,const struct wmi_bb_timing_cfg_arg * arg)167784758d4dSBhagavathi Perumal S ath10k_wmi_pdev_bb_timing(struct ath10k *ar,
167884758d4dSBhagavathi Perumal S 			  const struct wmi_bb_timing_cfg_arg *arg)
167984758d4dSBhagavathi Perumal S {
168084758d4dSBhagavathi Perumal S 	struct sk_buff *skb;
168184758d4dSBhagavathi Perumal S 
168284758d4dSBhagavathi Perumal S 	if (!ar->wmi.ops->gen_bb_timing)
168384758d4dSBhagavathi Perumal S 		return -EOPNOTSUPP;
168484758d4dSBhagavathi Perumal S 
168584758d4dSBhagavathi Perumal S 	skb = ar->wmi.ops->gen_bb_timing(ar, arg);
168684758d4dSBhagavathi Perumal S 
168784758d4dSBhagavathi Perumal S 	if (IS_ERR(skb))
168884758d4dSBhagavathi Perumal S 		return PTR_ERR(skb);
168984758d4dSBhagavathi Perumal S 
169084758d4dSBhagavathi Perumal S 	return ath10k_wmi_cmd_send(ar, skb,
169184758d4dSBhagavathi Perumal S 				   ar->wmi.cmd->set_bb_timing_cmdid);
169284758d4dSBhagavathi Perumal S }
16935d582be0STamizh Chelvam 
16945d582be0STamizh 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)16955d582be0STamizh Chelvam ath10k_wmi_set_per_peer_per_tid_cfg(struct ath10k *ar,
16965d582be0STamizh Chelvam 				    const struct wmi_per_peer_per_tid_cfg_arg *arg)
16975d582be0STamizh Chelvam {
16985d582be0STamizh Chelvam 	struct sk_buff *skb;
16995d582be0STamizh Chelvam 
17005d582be0STamizh Chelvam 	if (!ar->wmi.ops->gen_per_peer_per_tid_cfg)
17015d582be0STamizh Chelvam 		return -EOPNOTSUPP;
17025d582be0STamizh Chelvam 
17035d582be0STamizh Chelvam 	skb = ar->wmi.ops->gen_per_peer_per_tid_cfg(ar, arg);
17045d582be0STamizh Chelvam 	if (IS_ERR(skb))
17055d582be0STamizh Chelvam 		return PTR_ERR(skb);
17065d582be0STamizh Chelvam 
17075d582be0STamizh Chelvam 	return ath10k_wmi_cmd_send(ar, skb,
17085d582be0STamizh Chelvam 				   ar->wmi.cmd->per_peer_per_tid_config_cmdid);
17095d582be0STamizh Chelvam }
1710d7579d12SMichal Kazior #endif
1711