2 * Copyright (c) 2005-2011 Atheros Communications Inc.
3 * Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
5 * Permission to use, copy, modify, and/or distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
25 void (*rx
)(struct ath10k
*ar
, struct sk_buff
*skb
);
26 void (*map_svc
)(const __le32
*in
, unsigned long *out
, size_t len
);
28 int (*pull_scan
)(struct ath10k
*ar
, struct sk_buff
*skb
,
29 struct wmi_scan_ev_arg
*arg
);
30 int (*pull_mgmt_rx
)(struct ath10k
*ar
, struct sk_buff
*skb
,
31 struct wmi_mgmt_rx_ev_arg
*arg
);
32 int (*pull_ch_info
)(struct ath10k
*ar
, struct sk_buff
*skb
,
33 struct wmi_ch_info_ev_arg
*arg
);
34 int (*pull_vdev_start
)(struct ath10k
*ar
, struct sk_buff
*skb
,
35 struct wmi_vdev_start_ev_arg
*arg
);
36 int (*pull_peer_kick
)(struct ath10k
*ar
, struct sk_buff
*skb
,
37 struct wmi_peer_kick_ev_arg
*arg
);
38 int (*pull_swba
)(struct ath10k
*ar
, struct sk_buff
*skb
,
39 struct wmi_swba_ev_arg
*arg
);
40 int (*pull_phyerr_hdr
)(struct ath10k
*ar
, struct sk_buff
*skb
,
41 struct wmi_phyerr_hdr_arg
*arg
);
42 int (*pull_phyerr
)(struct ath10k
*ar
, const void *phyerr_buf
,
43 int left_len
, struct wmi_phyerr_ev_arg
*arg
);
44 int (*pull_svc_rdy
)(struct ath10k
*ar
, struct sk_buff
*skb
,
45 struct wmi_svc_rdy_ev_arg
*arg
);
46 int (*pull_rdy
)(struct ath10k
*ar
, struct sk_buff
*skb
,
47 struct wmi_rdy_ev_arg
*arg
);
48 int (*pull_fw_stats
)(struct ath10k
*ar
, struct sk_buff
*skb
,
49 struct ath10k_fw_stats
*stats
);
50 int (*pull_roam_ev
)(struct ath10k
*ar
, struct sk_buff
*skb
,
51 struct wmi_roam_ev_arg
*arg
);
52 int (*pull_wow_event
)(struct ath10k
*ar
, struct sk_buff
*skb
,
53 struct wmi_wow_ev_arg
*arg
);
54 int (*pull_echo_ev
)(struct ath10k
*ar
, struct sk_buff
*skb
,
55 struct wmi_echo_ev_arg
*arg
);
56 enum wmi_txbf_conf (*get_txbf_conf_scheme
)(struct ath10k
*ar
);
58 struct sk_buff
*(*gen_pdev_suspend
)(struct ath10k
*ar
, u32 suspend_opt
);
59 struct sk_buff
*(*gen_pdev_resume
)(struct ath10k
*ar
);
60 struct sk_buff
*(*gen_pdev_set_rd
)(struct ath10k
*ar
, u16 rd
, u16 rd2g
,
61 u16 rd5g
, u16 ctl2g
, u16 ctl5g
,
62 enum wmi_dfs_region dfs_reg
);
63 struct sk_buff
*(*gen_pdev_set_param
)(struct ath10k
*ar
, u32 id
,
65 struct sk_buff
*(*gen_init
)(struct ath10k
*ar
);
66 struct sk_buff
*(*gen_start_scan
)(struct ath10k
*ar
,
67 const struct wmi_start_scan_arg
*arg
);
68 struct sk_buff
*(*gen_stop_scan
)(struct ath10k
*ar
,
69 const struct wmi_stop_scan_arg
*arg
);
70 struct sk_buff
*(*gen_vdev_create
)(struct ath10k
*ar
, u32 vdev_id
,
71 enum wmi_vdev_type type
,
72 enum wmi_vdev_subtype subtype
,
73 const u8 macaddr
[ETH_ALEN
]);
74 struct sk_buff
*(*gen_vdev_delete
)(struct ath10k
*ar
, u32 vdev_id
);
75 struct sk_buff
*(*gen_vdev_start
)(struct ath10k
*ar
,
76 const struct wmi_vdev_start_request_arg
*arg
,
78 struct sk_buff
*(*gen_vdev_stop
)(struct ath10k
*ar
, u32 vdev_id
);
79 struct sk_buff
*(*gen_vdev_up
)(struct ath10k
*ar
, u32 vdev_id
, u32 aid
,
81 struct sk_buff
*(*gen_vdev_down
)(struct ath10k
*ar
, u32 vdev_id
);
82 struct sk_buff
*(*gen_vdev_set_param
)(struct ath10k
*ar
, u32 vdev_id
,
83 u32 param_id
, u32 param_value
);
84 struct sk_buff
*(*gen_vdev_install_key
)(struct ath10k
*ar
,
85 const struct wmi_vdev_install_key_arg
*arg
);
86 struct sk_buff
*(*gen_vdev_spectral_conf
)(struct ath10k
*ar
,
87 const struct wmi_vdev_spectral_conf_arg
*arg
);
88 struct sk_buff
*(*gen_vdev_spectral_enable
)(struct ath10k
*ar
, u32 vdev_id
,
89 u32 trigger
, u32 enable
);
90 struct sk_buff
*(*gen_vdev_wmm_conf
)(struct ath10k
*ar
, u32 vdev_id
,
91 const struct wmi_wmm_params_all_arg
*arg
);
92 struct sk_buff
*(*gen_peer_create
)(struct ath10k
*ar
, u32 vdev_id
,
93 const u8 peer_addr
[ETH_ALEN
],
94 enum wmi_peer_type peer_type
);
95 struct sk_buff
*(*gen_peer_delete
)(struct ath10k
*ar
, u32 vdev_id
,
96 const u8 peer_addr
[ETH_ALEN
]);
97 struct sk_buff
*(*gen_peer_flush
)(struct ath10k
*ar
, u32 vdev_id
,
98 const u8 peer_addr
[ETH_ALEN
],
100 struct sk_buff
*(*gen_peer_set_param
)(struct ath10k
*ar
, u32 vdev_id
,
102 enum wmi_peer_param param_id
,
104 struct sk_buff
*(*gen_peer_assoc
)(struct ath10k
*ar
,
105 const struct wmi_peer_assoc_complete_arg
*arg
);
106 struct sk_buff
*(*gen_set_psmode
)(struct ath10k
*ar
, u32 vdev_id
,
107 enum wmi_sta_ps_mode psmode
);
108 struct sk_buff
*(*gen_set_sta_ps
)(struct ath10k
*ar
, u32 vdev_id
,
109 enum wmi_sta_powersave_param param_id
,
111 struct sk_buff
*(*gen_set_ap_ps
)(struct ath10k
*ar
, u32 vdev_id
,
113 enum wmi_ap_ps_peer_param param_id
,
115 struct sk_buff
*(*gen_scan_chan_list
)(struct ath10k
*ar
,
116 const struct wmi_scan_chan_list_arg
*arg
);
117 struct sk_buff
*(*gen_beacon_dma
)(struct ath10k
*ar
, u32 vdev_id
,
118 const void *bcn
, size_t bcn_len
,
119 u32 bcn_paddr
, bool dtim_zero
,
121 struct sk_buff
*(*gen_pdev_set_wmm
)(struct ath10k
*ar
,
122 const struct wmi_wmm_params_all_arg
*arg
);
123 struct sk_buff
*(*gen_request_stats
)(struct ath10k
*ar
, u32 stats_mask
);
124 struct sk_buff
*(*gen_force_fw_hang
)(struct ath10k
*ar
,
125 enum wmi_force_fw_hang_type type
,
127 struct sk_buff
*(*gen_mgmt_tx
)(struct ath10k
*ar
, struct sk_buff
*skb
);
128 struct sk_buff
*(*gen_dbglog_cfg
)(struct ath10k
*ar
, u64 module_enable
,
130 struct sk_buff
*(*gen_pktlog_enable
)(struct ath10k
*ar
, u32 filter
);
131 struct sk_buff
*(*gen_pktlog_disable
)(struct ath10k
*ar
);
132 struct sk_buff
*(*gen_pdev_set_quiet_mode
)(struct ath10k
*ar
,
133 u32 period
, u32 duration
,
136 struct sk_buff
*(*gen_pdev_get_temperature
)(struct ath10k
*ar
);
137 struct sk_buff
*(*gen_addba_clear_resp
)(struct ath10k
*ar
, u32 vdev_id
,
139 struct sk_buff
*(*gen_addba_send
)(struct ath10k
*ar
, u32 vdev_id
,
140 const u8
*mac
, u32 tid
, u32 buf_size
);
141 struct sk_buff
*(*gen_addba_set_resp
)(struct ath10k
*ar
, u32 vdev_id
,
142 const u8
*mac
, u32 tid
,
144 struct sk_buff
*(*gen_delba_send
)(struct ath10k
*ar
, u32 vdev_id
,
145 const u8
*mac
, u32 tid
, u32 initiator
,
147 struct sk_buff
*(*gen_bcn_tmpl
)(struct ath10k
*ar
, u32 vdev_id
,
148 u32 tim_ie_offset
, struct sk_buff
*bcn
,
149 u32 prb_caps
, u32 prb_erp
,
150 void *prb_ies
, size_t prb_ies_len
);
151 struct sk_buff
*(*gen_prb_tmpl
)(struct ath10k
*ar
, u32 vdev_id
,
152 struct sk_buff
*bcn
);
153 struct sk_buff
*(*gen_p2p_go_bcn_ie
)(struct ath10k
*ar
, u32 vdev_id
,
155 struct sk_buff
*(*gen_vdev_sta_uapsd
)(struct ath10k
*ar
, u32 vdev_id
,
156 const u8 peer_addr
[ETH_ALEN
],
157 const struct wmi_sta_uapsd_auto_trig_arg
*args
,
159 struct sk_buff
*(*gen_sta_keepalive
)(struct ath10k
*ar
,
160 const struct wmi_sta_keepalive_arg
*arg
);
161 struct sk_buff
*(*gen_wow_enable
)(struct ath10k
*ar
);
162 struct sk_buff
*(*gen_wow_add_wakeup_event
)(struct ath10k
*ar
, u32 vdev_id
,
163 enum wmi_wow_wakeup_event event
,
165 struct sk_buff
*(*gen_wow_host_wakeup_ind
)(struct ath10k
*ar
);
166 struct sk_buff
*(*gen_wow_add_pattern
)(struct ath10k
*ar
, u32 vdev_id
,
172 struct sk_buff
*(*gen_wow_del_pattern
)(struct ath10k
*ar
, u32 vdev_id
,
174 struct sk_buff
*(*gen_update_fw_tdls_state
)(struct ath10k
*ar
,
176 enum wmi_tdls_state state
);
177 struct sk_buff
*(*gen_tdls_peer_update
)(struct ath10k
*ar
,
178 const struct wmi_tdls_peer_update_cmd_arg
*arg
,
179 const struct wmi_tdls_peer_capab_arg
*cap
,
180 const struct wmi_channel_arg
*chan
);
181 struct sk_buff
*(*gen_adaptive_qcs
)(struct ath10k
*ar
, bool enable
);
182 struct sk_buff
*(*gen_pdev_get_tpc_config
)(struct ath10k
*ar
,
184 void (*fw_stats_fill
)(struct ath10k
*ar
,
185 struct ath10k_fw_stats
*fw_stats
,
187 struct sk_buff
*(*gen_pdev_enable_adaptive_cca
)(struct ath10k
*ar
,
191 struct sk_buff
*(*ext_resource_config
)(struct ath10k
*ar
,
192 enum wmi_host_platform_type type
,
193 u32 fw_feature_bitmap
);
194 int (*get_vdev_subtype
)(struct ath10k
*ar
,
195 enum wmi_vdev_subtype subtype
);
196 struct sk_buff
*(*gen_pdev_bss_chan_info_req
)
198 enum wmi_bss_survey_req_type type
);
199 struct sk_buff
*(*gen_echo
)(struct ath10k
*ar
, u32 value
);
202 int ath10k_wmi_cmd_send(struct ath10k
*ar
, struct sk_buff
*skb
, u32 cmd_id
);
205 ath10k_wmi_rx(struct ath10k
*ar
, struct sk_buff
*skb
)
207 if (WARN_ON_ONCE(!ar
->wmi
.ops
->rx
))
210 ar
->wmi
.ops
->rx(ar
, skb
);
215 ath10k_wmi_map_svc(struct ath10k
*ar
, const __le32
*in
, unsigned long *out
,
218 if (!ar
->wmi
.ops
->map_svc
)
221 ar
->wmi
.ops
->map_svc(in
, out
, len
);
226 ath10k_wmi_pull_scan(struct ath10k
*ar
, struct sk_buff
*skb
,
227 struct wmi_scan_ev_arg
*arg
)
229 if (!ar
->wmi
.ops
->pull_scan
)
232 return ar
->wmi
.ops
->pull_scan(ar
, skb
, arg
);
236 ath10k_wmi_pull_mgmt_rx(struct ath10k
*ar
, struct sk_buff
*skb
,
237 struct wmi_mgmt_rx_ev_arg
*arg
)
239 if (!ar
->wmi
.ops
->pull_mgmt_rx
)
242 return ar
->wmi
.ops
->pull_mgmt_rx(ar
, skb
, arg
);
246 ath10k_wmi_pull_ch_info(struct ath10k
*ar
, struct sk_buff
*skb
,
247 struct wmi_ch_info_ev_arg
*arg
)
249 if (!ar
->wmi
.ops
->pull_ch_info
)
252 return ar
->wmi
.ops
->pull_ch_info(ar
, skb
, arg
);
256 ath10k_wmi_pull_vdev_start(struct ath10k
*ar
, struct sk_buff
*skb
,
257 struct wmi_vdev_start_ev_arg
*arg
)
259 if (!ar
->wmi
.ops
->pull_vdev_start
)
262 return ar
->wmi
.ops
->pull_vdev_start(ar
, skb
, arg
);
266 ath10k_wmi_pull_peer_kick(struct ath10k
*ar
, struct sk_buff
*skb
,
267 struct wmi_peer_kick_ev_arg
*arg
)
269 if (!ar
->wmi
.ops
->pull_peer_kick
)
272 return ar
->wmi
.ops
->pull_peer_kick(ar
, skb
, arg
);
276 ath10k_wmi_pull_swba(struct ath10k
*ar
, struct sk_buff
*skb
,
277 struct wmi_swba_ev_arg
*arg
)
279 if (!ar
->wmi
.ops
->pull_swba
)
282 return ar
->wmi
.ops
->pull_swba(ar
, skb
, arg
);
286 ath10k_wmi_pull_phyerr_hdr(struct ath10k
*ar
, struct sk_buff
*skb
,
287 struct wmi_phyerr_hdr_arg
*arg
)
289 if (!ar
->wmi
.ops
->pull_phyerr_hdr
)
292 return ar
->wmi
.ops
->pull_phyerr_hdr(ar
, skb
, arg
);
296 ath10k_wmi_pull_phyerr(struct ath10k
*ar
, const void *phyerr_buf
,
297 int left_len
, struct wmi_phyerr_ev_arg
*arg
)
299 if (!ar
->wmi
.ops
->pull_phyerr
)
302 return ar
->wmi
.ops
->pull_phyerr(ar
, phyerr_buf
, left_len
, arg
);
306 ath10k_wmi_pull_svc_rdy(struct ath10k
*ar
, struct sk_buff
*skb
,
307 struct wmi_svc_rdy_ev_arg
*arg
)
309 if (!ar
->wmi
.ops
->pull_svc_rdy
)
312 return ar
->wmi
.ops
->pull_svc_rdy(ar
, skb
, arg
);
316 ath10k_wmi_pull_rdy(struct ath10k
*ar
, struct sk_buff
*skb
,
317 struct wmi_rdy_ev_arg
*arg
)
319 if (!ar
->wmi
.ops
->pull_rdy
)
322 return ar
->wmi
.ops
->pull_rdy(ar
, skb
, arg
);
326 ath10k_wmi_pull_fw_stats(struct ath10k
*ar
, struct sk_buff
*skb
,
327 struct ath10k_fw_stats
*stats
)
329 if (!ar
->wmi
.ops
->pull_fw_stats
)
332 return ar
->wmi
.ops
->pull_fw_stats(ar
, skb
, stats
);
336 ath10k_wmi_pull_roam_ev(struct ath10k
*ar
, struct sk_buff
*skb
,
337 struct wmi_roam_ev_arg
*arg
)
339 if (!ar
->wmi
.ops
->pull_roam_ev
)
342 return ar
->wmi
.ops
->pull_roam_ev(ar
, skb
, arg
);
346 ath10k_wmi_pull_wow_event(struct ath10k
*ar
, struct sk_buff
*skb
,
347 struct wmi_wow_ev_arg
*arg
)
349 if (!ar
->wmi
.ops
->pull_wow_event
)
352 return ar
->wmi
.ops
->pull_wow_event(ar
, skb
, arg
);
356 ath10k_wmi_pull_echo_ev(struct ath10k
*ar
, struct sk_buff
*skb
,
357 struct wmi_echo_ev_arg
*arg
)
359 if (!ar
->wmi
.ops
->pull_echo_ev
)
362 return ar
->wmi
.ops
->pull_echo_ev(ar
, skb
, arg
);
365 static inline enum wmi_txbf_conf
366 ath10k_wmi_get_txbf_conf_scheme(struct ath10k
*ar
)
368 if (!ar
->wmi
.ops
->get_txbf_conf_scheme
)
369 return WMI_TXBF_CONF_UNSUPPORTED
;
371 return ar
->wmi
.ops
->get_txbf_conf_scheme(ar
);
375 ath10k_wmi_mgmt_tx(struct ath10k
*ar
, struct sk_buff
*msdu
)
377 struct ieee80211_tx_info
*info
= IEEE80211_SKB_CB(msdu
);
382 if (!ar
->wmi
.ops
->gen_mgmt_tx
)
385 skb
= ar
->wmi
.ops
->gen_mgmt_tx(ar
, msdu
);
389 if (test_bit(ATH10K_FW_FEATURE_MGMT_TX_BY_REF
,
390 ar
->running_fw
->fw_file
.fw_features
))
391 mgmt_tx_cmdid
= ar
->wmi
.cmd
->mgmt_tx_send_cmdid
;
393 mgmt_tx_cmdid
= ar
->wmi
.cmd
->mgmt_tx_cmdid
;
395 ret
= ath10k_wmi_cmd_send(ar
, skb
, mgmt_tx_cmdid
);
399 /* FIXME There's no ACK event for Management Tx. This probably
400 * shouldn't be called here either.
402 info
->flags
|= IEEE80211_TX_STAT_ACK
;
403 ieee80211_tx_status_irqsafe(ar
->hw
, msdu
);
409 ath10k_wmi_pdev_set_regdomain(struct ath10k
*ar
, u16 rd
, u16 rd2g
, u16 rd5g
,
410 u16 ctl2g
, u16 ctl5g
,
411 enum wmi_dfs_region dfs_reg
)
415 if (!ar
->wmi
.ops
->gen_pdev_set_rd
)
418 skb
= ar
->wmi
.ops
->gen_pdev_set_rd(ar
, rd
, rd2g
, rd5g
, ctl2g
, ctl5g
,
423 return ath10k_wmi_cmd_send(ar
, skb
,
424 ar
->wmi
.cmd
->pdev_set_regdomain_cmdid
);
428 ath10k_wmi_pdev_suspend_target(struct ath10k
*ar
, u32 suspend_opt
)
432 if (!ar
->wmi
.ops
->gen_pdev_suspend
)
435 skb
= ar
->wmi
.ops
->gen_pdev_suspend(ar
, suspend_opt
);
439 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->pdev_suspend_cmdid
);
443 ath10k_wmi_pdev_resume_target(struct ath10k
*ar
)
447 if (!ar
->wmi
.ops
->gen_pdev_resume
)
450 skb
= ar
->wmi
.ops
->gen_pdev_resume(ar
);
454 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->pdev_resume_cmdid
);
458 ath10k_wmi_pdev_set_param(struct ath10k
*ar
, u32 id
, u32 value
)
462 if (!ar
->wmi
.ops
->gen_pdev_set_param
)
465 skb
= ar
->wmi
.ops
->gen_pdev_set_param(ar
, id
, value
);
469 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->pdev_set_param_cmdid
);
473 ath10k_wmi_cmd_init(struct ath10k
*ar
)
477 if (!ar
->wmi
.ops
->gen_init
)
480 skb
= ar
->wmi
.ops
->gen_init(ar
);
484 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->init_cmdid
);
488 ath10k_wmi_start_scan(struct ath10k
*ar
,
489 const struct wmi_start_scan_arg
*arg
)
493 if (!ar
->wmi
.ops
->gen_start_scan
)
496 skb
= ar
->wmi
.ops
->gen_start_scan(ar
, arg
);
500 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->start_scan_cmdid
);
504 ath10k_wmi_stop_scan(struct ath10k
*ar
, const struct wmi_stop_scan_arg
*arg
)
508 if (!ar
->wmi
.ops
->gen_stop_scan
)
511 skb
= ar
->wmi
.ops
->gen_stop_scan(ar
, arg
);
515 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->stop_scan_cmdid
);
519 ath10k_wmi_vdev_create(struct ath10k
*ar
, u32 vdev_id
,
520 enum wmi_vdev_type type
,
521 enum wmi_vdev_subtype subtype
,
522 const u8 macaddr
[ETH_ALEN
])
526 if (!ar
->wmi
.ops
->gen_vdev_create
)
529 skb
= ar
->wmi
.ops
->gen_vdev_create(ar
, vdev_id
, type
, subtype
, macaddr
);
533 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->vdev_create_cmdid
);
537 ath10k_wmi_vdev_delete(struct ath10k
*ar
, u32 vdev_id
)
541 if (!ar
->wmi
.ops
->gen_vdev_delete
)
544 skb
= ar
->wmi
.ops
->gen_vdev_delete(ar
, vdev_id
);
548 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->vdev_delete_cmdid
);
552 ath10k_wmi_vdev_start(struct ath10k
*ar
,
553 const struct wmi_vdev_start_request_arg
*arg
)
557 if (!ar
->wmi
.ops
->gen_vdev_start
)
560 skb
= ar
->wmi
.ops
->gen_vdev_start(ar
, arg
, false);
564 return ath10k_wmi_cmd_send(ar
, skb
,
565 ar
->wmi
.cmd
->vdev_start_request_cmdid
);
569 ath10k_wmi_vdev_restart(struct ath10k
*ar
,
570 const struct wmi_vdev_start_request_arg
*arg
)
574 if (!ar
->wmi
.ops
->gen_vdev_start
)
577 skb
= ar
->wmi
.ops
->gen_vdev_start(ar
, arg
, true);
581 return ath10k_wmi_cmd_send(ar
, skb
,
582 ar
->wmi
.cmd
->vdev_restart_request_cmdid
);
586 ath10k_wmi_vdev_stop(struct ath10k
*ar
, u32 vdev_id
)
590 if (!ar
->wmi
.ops
->gen_vdev_stop
)
593 skb
= ar
->wmi
.ops
->gen_vdev_stop(ar
, vdev_id
);
597 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->vdev_stop_cmdid
);
601 ath10k_wmi_vdev_up(struct ath10k
*ar
, u32 vdev_id
, u32 aid
, const u8
*bssid
)
605 if (!ar
->wmi
.ops
->gen_vdev_up
)
608 skb
= ar
->wmi
.ops
->gen_vdev_up(ar
, vdev_id
, aid
, bssid
);
612 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->vdev_up_cmdid
);
616 ath10k_wmi_vdev_down(struct ath10k
*ar
, u32 vdev_id
)
620 if (!ar
->wmi
.ops
->gen_vdev_down
)
623 skb
= ar
->wmi
.ops
->gen_vdev_down(ar
, vdev_id
);
627 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->vdev_down_cmdid
);
631 ath10k_wmi_vdev_set_param(struct ath10k
*ar
, u32 vdev_id
, u32 param_id
,
636 if (!ar
->wmi
.ops
->gen_vdev_set_param
)
639 skb
= ar
->wmi
.ops
->gen_vdev_set_param(ar
, vdev_id
, param_id
,
644 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->vdev_set_param_cmdid
);
648 ath10k_wmi_vdev_install_key(struct ath10k
*ar
,
649 const struct wmi_vdev_install_key_arg
*arg
)
653 if (!ar
->wmi
.ops
->gen_vdev_install_key
)
656 skb
= ar
->wmi
.ops
->gen_vdev_install_key(ar
, arg
);
660 return ath10k_wmi_cmd_send(ar
, skb
,
661 ar
->wmi
.cmd
->vdev_install_key_cmdid
);
665 ath10k_wmi_vdev_spectral_conf(struct ath10k
*ar
,
666 const struct wmi_vdev_spectral_conf_arg
*arg
)
671 if (!ar
->wmi
.ops
->gen_vdev_spectral_conf
)
674 skb
= ar
->wmi
.ops
->gen_vdev_spectral_conf(ar
, arg
);
678 cmd_id
= ar
->wmi
.cmd
->vdev_spectral_scan_configure_cmdid
;
679 return ath10k_wmi_cmd_send(ar
, skb
, cmd_id
);
683 ath10k_wmi_vdev_spectral_enable(struct ath10k
*ar
, u32 vdev_id
, u32 trigger
,
689 if (!ar
->wmi
.ops
->gen_vdev_spectral_enable
)
692 skb
= ar
->wmi
.ops
->gen_vdev_spectral_enable(ar
, vdev_id
, trigger
,
697 cmd_id
= ar
->wmi
.cmd
->vdev_spectral_scan_enable_cmdid
;
698 return ath10k_wmi_cmd_send(ar
, skb
, cmd_id
);
702 ath10k_wmi_vdev_sta_uapsd(struct ath10k
*ar
, u32 vdev_id
,
703 const u8 peer_addr
[ETH_ALEN
],
704 const struct wmi_sta_uapsd_auto_trig_arg
*args
,
710 if (!ar
->wmi
.ops
->gen_vdev_sta_uapsd
)
713 skb
= ar
->wmi
.ops
->gen_vdev_sta_uapsd(ar
, vdev_id
, peer_addr
, args
,
718 cmd_id
= ar
->wmi
.cmd
->sta_uapsd_auto_trig_cmdid
;
719 return ath10k_wmi_cmd_send(ar
, skb
, cmd_id
);
723 ath10k_wmi_vdev_wmm_conf(struct ath10k
*ar
, u32 vdev_id
,
724 const struct wmi_wmm_params_all_arg
*arg
)
729 skb
= ar
->wmi
.ops
->gen_vdev_wmm_conf(ar
, vdev_id
, arg
);
733 cmd_id
= ar
->wmi
.cmd
->vdev_set_wmm_params_cmdid
;
734 return ath10k_wmi_cmd_send(ar
, skb
, cmd_id
);
738 ath10k_wmi_peer_create(struct ath10k
*ar
, u32 vdev_id
,
739 const u8 peer_addr
[ETH_ALEN
],
740 enum wmi_peer_type peer_type
)
744 if (!ar
->wmi
.ops
->gen_peer_create
)
747 skb
= ar
->wmi
.ops
->gen_peer_create(ar
, vdev_id
, peer_addr
, peer_type
);
751 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->peer_create_cmdid
);
755 ath10k_wmi_peer_delete(struct ath10k
*ar
, u32 vdev_id
,
756 const u8 peer_addr
[ETH_ALEN
])
760 if (!ar
->wmi
.ops
->gen_peer_delete
)
763 skb
= ar
->wmi
.ops
->gen_peer_delete(ar
, vdev_id
, peer_addr
);
767 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->peer_delete_cmdid
);
771 ath10k_wmi_peer_flush(struct ath10k
*ar
, u32 vdev_id
,
772 const u8 peer_addr
[ETH_ALEN
], u32 tid_bitmap
)
776 if (!ar
->wmi
.ops
->gen_peer_flush
)
779 skb
= ar
->wmi
.ops
->gen_peer_flush(ar
, vdev_id
, peer_addr
, tid_bitmap
);
783 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->peer_flush_tids_cmdid
);
787 ath10k_wmi_peer_set_param(struct ath10k
*ar
, u32 vdev_id
, const u8
*peer_addr
,
788 enum wmi_peer_param param_id
, u32 param_value
)
792 if (!ar
->wmi
.ops
->gen_peer_set_param
)
795 skb
= ar
->wmi
.ops
->gen_peer_set_param(ar
, vdev_id
, peer_addr
, param_id
,
800 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->peer_set_param_cmdid
);
804 ath10k_wmi_set_psmode(struct ath10k
*ar
, u32 vdev_id
,
805 enum wmi_sta_ps_mode psmode
)
809 if (!ar
->wmi
.ops
->gen_set_psmode
)
812 skb
= ar
->wmi
.ops
->gen_set_psmode(ar
, vdev_id
, psmode
);
816 return ath10k_wmi_cmd_send(ar
, skb
,
817 ar
->wmi
.cmd
->sta_powersave_mode_cmdid
);
821 ath10k_wmi_set_sta_ps_param(struct ath10k
*ar
, u32 vdev_id
,
822 enum wmi_sta_powersave_param param_id
, u32 value
)
826 if (!ar
->wmi
.ops
->gen_set_sta_ps
)
829 skb
= ar
->wmi
.ops
->gen_set_sta_ps(ar
, vdev_id
, param_id
, value
);
833 return ath10k_wmi_cmd_send(ar
, skb
,
834 ar
->wmi
.cmd
->sta_powersave_param_cmdid
);
838 ath10k_wmi_set_ap_ps_param(struct ath10k
*ar
, u32 vdev_id
, const u8
*mac
,
839 enum wmi_ap_ps_peer_param param_id
, u32 value
)
843 if (!ar
->wmi
.ops
->gen_set_ap_ps
)
846 skb
= ar
->wmi
.ops
->gen_set_ap_ps(ar
, vdev_id
, mac
, param_id
, value
);
850 return ath10k_wmi_cmd_send(ar
, skb
,
851 ar
->wmi
.cmd
->ap_ps_peer_param_cmdid
);
855 ath10k_wmi_scan_chan_list(struct ath10k
*ar
,
856 const struct wmi_scan_chan_list_arg
*arg
)
860 if (!ar
->wmi
.ops
->gen_scan_chan_list
)
863 skb
= ar
->wmi
.ops
->gen_scan_chan_list(ar
, arg
);
867 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->scan_chan_list_cmdid
);
871 ath10k_wmi_peer_assoc(struct ath10k
*ar
,
872 const struct wmi_peer_assoc_complete_arg
*arg
)
876 if (!ar
->wmi
.ops
->gen_peer_assoc
)
879 skb
= ar
->wmi
.ops
->gen_peer_assoc(ar
, arg
);
883 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->peer_assoc_cmdid
);
887 ath10k_wmi_beacon_send_ref_nowait(struct ath10k
*ar
, u32 vdev_id
,
888 const void *bcn
, size_t bcn_len
,
889 u32 bcn_paddr
, bool dtim_zero
,
895 if (!ar
->wmi
.ops
->gen_beacon_dma
)
898 skb
= ar
->wmi
.ops
->gen_beacon_dma(ar
, vdev_id
, bcn
, bcn_len
, bcn_paddr
,
899 dtim_zero
, deliver_cab
);
903 ret
= ath10k_wmi_cmd_send_nowait(ar
, skb
,
904 ar
->wmi
.cmd
->pdev_send_bcn_cmdid
);
914 ath10k_wmi_pdev_set_wmm_params(struct ath10k
*ar
,
915 const struct wmi_wmm_params_all_arg
*arg
)
919 if (!ar
->wmi
.ops
->gen_pdev_set_wmm
)
922 skb
= ar
->wmi
.ops
->gen_pdev_set_wmm(ar
, arg
);
926 return ath10k_wmi_cmd_send(ar
, skb
,
927 ar
->wmi
.cmd
->pdev_set_wmm_params_cmdid
);
931 ath10k_wmi_request_stats(struct ath10k
*ar
, u32 stats_mask
)
935 if (!ar
->wmi
.ops
->gen_request_stats
)
938 skb
= ar
->wmi
.ops
->gen_request_stats(ar
, stats_mask
);
942 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->request_stats_cmdid
);
946 ath10k_wmi_force_fw_hang(struct ath10k
*ar
,
947 enum wmi_force_fw_hang_type type
, u32 delay_ms
)
951 if (!ar
->wmi
.ops
->gen_force_fw_hang
)
954 skb
= ar
->wmi
.ops
->gen_force_fw_hang(ar
, type
, delay_ms
);
958 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->force_fw_hang_cmdid
);
962 ath10k_wmi_dbglog_cfg(struct ath10k
*ar
, u64 module_enable
, u32 log_level
)
966 if (!ar
->wmi
.ops
->gen_dbglog_cfg
)
969 skb
= ar
->wmi
.ops
->gen_dbglog_cfg(ar
, module_enable
, log_level
);
973 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->dbglog_cfg_cmdid
);
977 ath10k_wmi_pdev_pktlog_enable(struct ath10k
*ar
, u32 filter
)
981 if (!ar
->wmi
.ops
->gen_pktlog_enable
)
984 skb
= ar
->wmi
.ops
->gen_pktlog_enable(ar
, filter
);
988 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->pdev_pktlog_enable_cmdid
);
992 ath10k_wmi_pdev_pktlog_disable(struct ath10k
*ar
)
996 if (!ar
->wmi
.ops
->gen_pktlog_disable
)
999 skb
= ar
->wmi
.ops
->gen_pktlog_disable(ar
);
1001 return PTR_ERR(skb
);
1003 return ath10k_wmi_cmd_send(ar
, skb
,
1004 ar
->wmi
.cmd
->pdev_pktlog_disable_cmdid
);
1008 ath10k_wmi_pdev_set_quiet_mode(struct ath10k
*ar
, u32 period
, u32 duration
,
1009 u32 next_offset
, u32 enabled
)
1011 struct sk_buff
*skb
;
1013 if (!ar
->wmi
.ops
->gen_pdev_set_quiet_mode
)
1016 skb
= ar
->wmi
.ops
->gen_pdev_set_quiet_mode(ar
, period
, duration
,
1017 next_offset
, enabled
);
1019 return PTR_ERR(skb
);
1021 return ath10k_wmi_cmd_send(ar
, skb
,
1022 ar
->wmi
.cmd
->pdev_set_quiet_mode_cmdid
);
1026 ath10k_wmi_pdev_get_temperature(struct ath10k
*ar
)
1028 struct sk_buff
*skb
;
1030 if (!ar
->wmi
.ops
->gen_pdev_get_temperature
)
1033 skb
= ar
->wmi
.ops
->gen_pdev_get_temperature(ar
);
1035 return PTR_ERR(skb
);
1037 return ath10k_wmi_cmd_send(ar
, skb
,
1038 ar
->wmi
.cmd
->pdev_get_temperature_cmdid
);
1042 ath10k_wmi_addba_clear_resp(struct ath10k
*ar
, u32 vdev_id
, const u8
*mac
)
1044 struct sk_buff
*skb
;
1046 if (!ar
->wmi
.ops
->gen_addba_clear_resp
)
1049 skb
= ar
->wmi
.ops
->gen_addba_clear_resp(ar
, vdev_id
, mac
);
1051 return PTR_ERR(skb
);
1053 return ath10k_wmi_cmd_send(ar
, skb
,
1054 ar
->wmi
.cmd
->addba_clear_resp_cmdid
);
1058 ath10k_wmi_addba_send(struct ath10k
*ar
, u32 vdev_id
, const u8
*mac
,
1059 u32 tid
, u32 buf_size
)
1061 struct sk_buff
*skb
;
1063 if (!ar
->wmi
.ops
->gen_addba_send
)
1066 skb
= ar
->wmi
.ops
->gen_addba_send(ar
, vdev_id
, mac
, tid
, buf_size
);
1068 return PTR_ERR(skb
);
1070 return ath10k_wmi_cmd_send(ar
, skb
,
1071 ar
->wmi
.cmd
->addba_send_cmdid
);
1075 ath10k_wmi_addba_set_resp(struct ath10k
*ar
, u32 vdev_id
, const u8
*mac
,
1076 u32 tid
, u32 status
)
1078 struct sk_buff
*skb
;
1080 if (!ar
->wmi
.ops
->gen_addba_set_resp
)
1083 skb
= ar
->wmi
.ops
->gen_addba_set_resp(ar
, vdev_id
, mac
, tid
, status
);
1085 return PTR_ERR(skb
);
1087 return ath10k_wmi_cmd_send(ar
, skb
,
1088 ar
->wmi
.cmd
->addba_set_resp_cmdid
);
1092 ath10k_wmi_delba_send(struct ath10k
*ar
, u32 vdev_id
, const u8
*mac
,
1093 u32 tid
, u32 initiator
, u32 reason
)
1095 struct sk_buff
*skb
;
1097 if (!ar
->wmi
.ops
->gen_delba_send
)
1100 skb
= ar
->wmi
.ops
->gen_delba_send(ar
, vdev_id
, mac
, tid
, initiator
,
1103 return PTR_ERR(skb
);
1105 return ath10k_wmi_cmd_send(ar
, skb
,
1106 ar
->wmi
.cmd
->delba_send_cmdid
);
1110 ath10k_wmi_bcn_tmpl(struct ath10k
*ar
, u32 vdev_id
, u32 tim_ie_offset
,
1111 struct sk_buff
*bcn
, u32 prb_caps
, u32 prb_erp
,
1112 void *prb_ies
, size_t prb_ies_len
)
1114 struct sk_buff
*skb
;
1116 if (!ar
->wmi
.ops
->gen_bcn_tmpl
)
1119 skb
= ar
->wmi
.ops
->gen_bcn_tmpl(ar
, vdev_id
, tim_ie_offset
, bcn
,
1120 prb_caps
, prb_erp
, prb_ies
,
1123 return PTR_ERR(skb
);
1125 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->bcn_tmpl_cmdid
);
1129 ath10k_wmi_prb_tmpl(struct ath10k
*ar
, u32 vdev_id
, struct sk_buff
*prb
)
1131 struct sk_buff
*skb
;
1133 if (!ar
->wmi
.ops
->gen_prb_tmpl
)
1136 skb
= ar
->wmi
.ops
->gen_prb_tmpl(ar
, vdev_id
, prb
);
1138 return PTR_ERR(skb
);
1140 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->prb_tmpl_cmdid
);
1144 ath10k_wmi_p2p_go_bcn_ie(struct ath10k
*ar
, u32 vdev_id
, const u8
*p2p_ie
)
1146 struct sk_buff
*skb
;
1148 if (!ar
->wmi
.ops
->gen_p2p_go_bcn_ie
)
1151 skb
= ar
->wmi
.ops
->gen_p2p_go_bcn_ie(ar
, vdev_id
, p2p_ie
);
1153 return PTR_ERR(skb
);
1155 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->p2p_go_set_beacon_ie
);
1159 ath10k_wmi_sta_keepalive(struct ath10k
*ar
,
1160 const struct wmi_sta_keepalive_arg
*arg
)
1162 struct sk_buff
*skb
;
1165 if (!ar
->wmi
.ops
->gen_sta_keepalive
)
1168 skb
= ar
->wmi
.ops
->gen_sta_keepalive(ar
, arg
);
1170 return PTR_ERR(skb
);
1172 cmd_id
= ar
->wmi
.cmd
->sta_keepalive_cmd
;
1173 return ath10k_wmi_cmd_send(ar
, skb
, cmd_id
);
1177 ath10k_wmi_wow_enable(struct ath10k
*ar
)
1179 struct sk_buff
*skb
;
1182 if (!ar
->wmi
.ops
->gen_wow_enable
)
1185 skb
= ar
->wmi
.ops
->gen_wow_enable(ar
);
1187 return PTR_ERR(skb
);
1189 cmd_id
= ar
->wmi
.cmd
->wow_enable_cmdid
;
1190 return ath10k_wmi_cmd_send(ar
, skb
, cmd_id
);
1194 ath10k_wmi_wow_add_wakeup_event(struct ath10k
*ar
, u32 vdev_id
,
1195 enum wmi_wow_wakeup_event event
,
1198 struct sk_buff
*skb
;
1201 if (!ar
->wmi
.ops
->gen_wow_add_wakeup_event
)
1204 skb
= ar
->wmi
.ops
->gen_wow_add_wakeup_event(ar
, vdev_id
, event
, enable
);
1206 return PTR_ERR(skb
);
1208 cmd_id
= ar
->wmi
.cmd
->wow_enable_disable_wake_event_cmdid
;
1209 return ath10k_wmi_cmd_send(ar
, skb
, cmd_id
);
1213 ath10k_wmi_wow_host_wakeup_ind(struct ath10k
*ar
)
1215 struct sk_buff
*skb
;
1218 if (!ar
->wmi
.ops
->gen_wow_host_wakeup_ind
)
1221 skb
= ar
->wmi
.ops
->gen_wow_host_wakeup_ind(ar
);
1223 return PTR_ERR(skb
);
1225 cmd_id
= ar
->wmi
.cmd
->wow_hostwakeup_from_sleep_cmdid
;
1226 return ath10k_wmi_cmd_send(ar
, skb
, cmd_id
);
1230 ath10k_wmi_wow_add_pattern(struct ath10k
*ar
, u32 vdev_id
, u32 pattern_id
,
1231 const u8
*pattern
, const u8
*mask
,
1232 int pattern_len
, int pattern_offset
)
1234 struct sk_buff
*skb
;
1237 if (!ar
->wmi
.ops
->gen_wow_add_pattern
)
1240 skb
= ar
->wmi
.ops
->gen_wow_add_pattern(ar
, vdev_id
, pattern_id
,
1241 pattern
, mask
, pattern_len
,
1244 return PTR_ERR(skb
);
1246 cmd_id
= ar
->wmi
.cmd
->wow_add_wake_pattern_cmdid
;
1247 return ath10k_wmi_cmd_send(ar
, skb
, cmd_id
);
1251 ath10k_wmi_wow_del_pattern(struct ath10k
*ar
, u32 vdev_id
, u32 pattern_id
)
1253 struct sk_buff
*skb
;
1256 if (!ar
->wmi
.ops
->gen_wow_del_pattern
)
1259 skb
= ar
->wmi
.ops
->gen_wow_del_pattern(ar
, vdev_id
, pattern_id
);
1261 return PTR_ERR(skb
);
1263 cmd_id
= ar
->wmi
.cmd
->wow_del_wake_pattern_cmdid
;
1264 return ath10k_wmi_cmd_send(ar
, skb
, cmd_id
);
1268 ath10k_wmi_update_fw_tdls_state(struct ath10k
*ar
, u32 vdev_id
,
1269 enum wmi_tdls_state state
)
1271 struct sk_buff
*skb
;
1273 if (!ar
->wmi
.ops
->gen_update_fw_tdls_state
)
1276 skb
= ar
->wmi
.ops
->gen_update_fw_tdls_state(ar
, vdev_id
, state
);
1278 return PTR_ERR(skb
);
1280 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->tdls_set_state_cmdid
);
1284 ath10k_wmi_tdls_peer_update(struct ath10k
*ar
,
1285 const struct wmi_tdls_peer_update_cmd_arg
*arg
,
1286 const struct wmi_tdls_peer_capab_arg
*cap
,
1287 const struct wmi_channel_arg
*chan
)
1289 struct sk_buff
*skb
;
1291 if (!ar
->wmi
.ops
->gen_tdls_peer_update
)
1294 skb
= ar
->wmi
.ops
->gen_tdls_peer_update(ar
, arg
, cap
, chan
);
1296 return PTR_ERR(skb
);
1298 return ath10k_wmi_cmd_send(ar
, skb
,
1299 ar
->wmi
.cmd
->tdls_peer_update_cmdid
);
1303 ath10k_wmi_adaptive_qcs(struct ath10k
*ar
, bool enable
)
1305 struct sk_buff
*skb
;
1307 if (!ar
->wmi
.ops
->gen_adaptive_qcs
)
1310 skb
= ar
->wmi
.ops
->gen_adaptive_qcs(ar
, enable
);
1312 return PTR_ERR(skb
);
1314 return ath10k_wmi_cmd_send(ar
, skb
, ar
->wmi
.cmd
->adaptive_qcs_cmdid
);
1318 ath10k_wmi_pdev_get_tpc_config(struct ath10k
*ar
, u32 param
)
1320 struct sk_buff
*skb
;
1322 if (!ar
->wmi
.ops
->gen_pdev_get_tpc_config
)
1325 skb
= ar
->wmi
.ops
->gen_pdev_get_tpc_config(ar
, param
);
1328 return PTR_ERR(skb
);
1330 return ath10k_wmi_cmd_send(ar
, skb
,
1331 ar
->wmi
.cmd
->pdev_get_tpc_config_cmdid
);
1335 ath10k_wmi_fw_stats_fill(struct ath10k
*ar
, struct ath10k_fw_stats
*fw_stats
,
1338 if (!ar
->wmi
.ops
->fw_stats_fill
)
1341 ar
->wmi
.ops
->fw_stats_fill(ar
, fw_stats
, buf
);
1346 ath10k_wmi_pdev_enable_adaptive_cca(struct ath10k
*ar
, u8 enable
,
1347 u32 detect_level
, u32 detect_margin
)
1349 struct sk_buff
*skb
;
1351 if (!ar
->wmi
.ops
->gen_pdev_enable_adaptive_cca
)
1354 skb
= ar
->wmi
.ops
->gen_pdev_enable_adaptive_cca(ar
, enable
,
1359 return PTR_ERR(skb
);
1361 return ath10k_wmi_cmd_send(ar
, skb
,
1362 ar
->wmi
.cmd
->pdev_enable_adaptive_cca_cmdid
);
1366 ath10k_wmi_ext_resource_config(struct ath10k
*ar
,
1367 enum wmi_host_platform_type type
,
1368 u32 fw_feature_bitmap
)
1370 struct sk_buff
*skb
;
1372 if (!ar
->wmi
.ops
->ext_resource_config
)
1375 skb
= ar
->wmi
.ops
->ext_resource_config(ar
, type
,
1379 return PTR_ERR(skb
);
1381 return ath10k_wmi_cmd_send(ar
, skb
,
1382 ar
->wmi
.cmd
->ext_resource_cfg_cmdid
);
1386 ath10k_wmi_get_vdev_subtype(struct ath10k
*ar
, enum wmi_vdev_subtype subtype
)
1388 if (!ar
->wmi
.ops
->get_vdev_subtype
)
1391 return ar
->wmi
.ops
->get_vdev_subtype(ar
, subtype
);
1395 ath10k_wmi_pdev_bss_chan_info_request(struct ath10k
*ar
,
1396 enum wmi_bss_survey_req_type type
)
1398 struct ath10k_wmi
*wmi
= &ar
->wmi
;
1399 struct sk_buff
*skb
;
1401 if (!wmi
->ops
->gen_pdev_bss_chan_info_req
)
1404 skb
= wmi
->ops
->gen_pdev_bss_chan_info_req(ar
, type
);
1406 return PTR_ERR(skb
);
1408 return ath10k_wmi_cmd_send(ar
, skb
,
1409 wmi
->cmd
->pdev_bss_chan_info_request_cmdid
);
1413 ath10k_wmi_echo(struct ath10k
*ar
, u32 value
)
1415 struct ath10k_wmi
*wmi
= &ar
->wmi
;
1416 struct sk_buff
*skb
;
1418 if (!wmi
->ops
->gen_echo
)
1421 skb
= wmi
->ops
->gen_echo(ar
, value
);
1423 return PTR_ERR(skb
);
1425 return ath10k_wmi_cmd_send(ar
, skb
, wmi
->cmd
->echo_cmdid
);