blob: 890622b424e2d98d0de5b93c6b031041869da1a2 [file] [log] [blame]
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001/*
Houston Hoffmana76591b2015-11-10 16:52:05 -08002 * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved.
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08003 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
23 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
26 */
27
28#ifndef WMA_API_H
29#define WMA_API_H
30
31#include "osdep.h"
32#include "cds_mq.h"
33#include "ani_global.h"
34#include "a_types.h"
Govind Singh5b486202016-06-09 18:29:42 +053035#include "osapi_linux.h"
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080036#include "wmi_unified.h"
37#ifdef NOT_YET
38#include "htc_api.h"
39#endif
40#include "lim_global.h"
Krunal Soni0193b6f2016-08-15 15:53:43 -070041#include "cds_concurrency.h"
42#include "cds_utils.h"
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080043
44typedef void *WMA_HANDLE;
45
46/**
47 * enum GEN_PARAM - general parameters
48 * @GEN_VDEV_PARAM_AMPDU: Set ampdu size
49 * @GEN_VDEV_PARAM_AMSDU: Set amsdu size
50 * @GEN_PARAM_DUMP_AGC_START: dump agc start
51 * @GEN_PARAM_DUMP_AGC: dump agc
52 * @GEN_PARAM_DUMP_CHANINFO_START: dump channel info start
53 * @GEN_PARAM_DUMP_CHANINFO: dump channel info
54 * @GEN_PARAM_CRASH_INJECT: inject crash
55 * @GEN_PARAM_DUMP_PCIE_ACCESS_LOG: dump pcie access log
56 * @GEN_PARAM_TX_CHAIN_MASK_CCK: cck tx chain mask
57 */
58typedef enum {
59 GEN_VDEV_PARAM_AMPDU = 0x1,
60 GEN_VDEV_PARAM_AMSDU,
61 GEN_PARAM_DUMP_AGC_START,
62 GEN_PARAM_DUMP_AGC,
63 GEN_PARAM_DUMP_CHANINFO_START,
64 GEN_PARAM_DUMP_CHANINFO,
65 GEN_PARAM_DUMP_WATCHDOG,
66 GEN_PARAM_CRASH_INJECT,
67#ifdef CONFIG_ATH_PCIE_ACCESS_DEBUG
68 GEN_PARAM_DUMP_PCIE_ACCESS_LOG,
69#endif
70 GEN_PARAM_MODULATED_DTIM,
Manikandan Mohandcc21ba2016-03-15 14:31:56 -070071 GEN_PARAM_CAPTURE_TSF,
72 GEN_PARAM_RESET_TSF_GPIO,
Varun Reddy Yeturu5ab47462016-05-08 18:08:11 -070073 GEN_VDEV_ROAM_SYNCH_DELAY,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080074} GEN_PARAM;
75
Krunal Soni0193b6f2016-08-15 15:53:43 -070076/**
77 * struct wma_caps_per_phy - various caps per phy
78 * @ht_2g: entire HT cap for 2G band in terms of 32 bit flag
79 * @ht_5g: entire HT cap for 5G band in terms of 32 bit flag
80 * @vht_2g: entire VHT cap for 2G band in terms of 32 bit flag
81 * @vht_5g: entire VHT cap for 5G band in terms of 32 bit flag
82 * @he_2g: entire HE cap for 2G band in terms of 32 bit flag
83 * @he_5g: entire HE cap for 5G band in terms of 32 bit flag
84 */
85struct wma_caps_per_phy {
86 uint32_t ht_2g;
87 uint32_t ht_5g;
88 uint32_t vht_2g;
89 uint32_t vht_5g;
90 uint32_t he_2g;
91 uint32_t he_5g;
92};
93
94
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080095#define VDEV_CMD 1
96#define PDEV_CMD 2
97#define GEN_CMD 3
98#define DBG_CMD 4
99#define PPS_CMD 5
100#define QPOWER_CMD 6
101#define GTX_CMD 7
102
103typedef void (*wma_peer_authorized_fp) (uint32_t vdev_id);
104
105
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530106QDF_STATUS wma_pre_start(void *cds_context);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800107
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530108QDF_STATUS wma_mc_process_msg(void *cds_context, cds_msg_t *msg);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800109
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530110QDF_STATUS wma_start(void *cds_context);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800111
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530112QDF_STATUS wma_stop(void *cds_context, uint8_t reason);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800113
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530114QDF_STATUS wma_close(void *cds_context);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800115
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530116QDF_STATUS wma_wmi_service_close(void *cds_context);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800117
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530118QDF_STATUS wma_wmi_work_close(void *cds_context);
Xun Luoa858a472015-11-10 08:24:45 -0800119
Govind Singhd76a5b02016-03-08 15:12:14 +0530120int wma_rx_ready_event(void *handle, uint8_t *ev, uint32_t len);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800121
Govind Singhd76a5b02016-03-08 15:12:14 +0530122int wma_rx_service_ready_event(void *handle, uint8_t *ev, uint32_t len);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800123
Govind Singhd76a5b02016-03-08 15:12:14 +0530124int wma_rx_service_ready_ext_event(void *handle, uint8_t *ev, uint32_t len);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800125
126void wma_setneedshutdown(void *cds_context);
127
128bool wma_needshutdown(void *cds_context);
129
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530130QDF_STATUS wma_wait_for_ready_event(WMA_HANDLE handle);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800131
132uint8_t wma_map_channel(uint8_t mapChannel);
133
134int wma_cli_get_command(int vdev_id, int param_id, int vpdev);
135int wma_cli_set_command(int vdev_id, int param_id, int sval, int vpdev);
136int wma_cli_set2_command(int vdev_id, int param_id, int sval1,
137 int sval2, int vpdev);
138
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530139QDF_STATUS wma_set_htconfig(uint8_t vdev_id, uint16_t ht_capab, int value);
140QDF_STATUS wma_set_reg_domain(void *clientCtxt, v_REGDOMAIN_t regId);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800141
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530142QDF_STATUS wma_get_wcnss_software_version(void *p_cds_gctx,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800143 uint8_t *pVersion,
144 uint32_t versionBufferSize);
Houston Hoffmana76591b2015-11-10 16:52:05 -0800145int wma_runtime_suspend(void);
146int wma_runtime_resume(void);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800147int wma_bus_suspend(void);
Rajeev Kumar4c426622016-08-25 14:51:42 -0700148int wma_is_target_wake_up_received(void);
Rajeev Kumar99805a72016-08-29 13:53:52 -0700149int wma_clear_target_wake_up(void);
Govind Singhd76a5b02016-03-08 15:12:14 +0530150QDF_STATUS wma_suspend_target(WMA_HANDLE handle, int disable_target_intr);
Houston Hoffmana769ed32016-04-14 17:02:51 -0700151void wma_target_suspend_acknowledge(void *context, bool wow_nack);
Rajeev Kumar4c426622016-08-25 14:51:42 -0700152void wma_handle_initial_wake_up(void);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800153int wma_bus_resume(void);
Govind Singhd76a5b02016-03-08 15:12:14 +0530154QDF_STATUS wma_resume_target(WMA_HANDLE handle);
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530155QDF_STATUS wma_disable_wow_in_fw(WMA_HANDLE handle);
156QDF_STATUS wma_disable_d0wow_in_fw(WMA_HANDLE handle);
Houston Hoffmana76591b2015-11-10 16:52:05 -0800157bool wma_is_wow_mode_selected(WMA_HANDLE handle);
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530158QDF_STATUS wma_enable_wow_in_fw(WMA_HANDLE handle);
159QDF_STATUS wma_enable_d0wow_in_fw(WMA_HANDLE handle);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800160bool wma_check_scan_in_progress(WMA_HANDLE handle);
161void wma_set_peer_authorized_cb(void *wma_ctx, wma_peer_authorized_fp auth_cb);
Govind Singhd76a5b02016-03-08 15:12:14 +0530162QDF_STATUS wma_set_peer_param(void *wma_ctx, uint8_t *peer_addr,
163 uint32_t param_id,
164 uint32_t param_value, uint32_t vdev_id);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800165#ifdef NOT_YET
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530166QDF_STATUS wma_update_channel_list(WMA_HANDLE handle, void *scan_chan_info);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800167#endif
168
169uint8_t *wma_get_vdev_address_by_vdev_id(uint8_t vdev_id);
170struct wma_txrx_node *wma_get_interface_by_vdev_id(uint8_t vdev_id);
171bool wma_is_vdev_up(uint8_t vdev_id);
172
173void *wma_get_beacon_buffer_by_vdev_id(uint8_t vdev_id, uint32_t *buffer_size);
174
175uint8_t wma_get_fw_wlan_feat_caps(uint8_t featEnumValue);
176tSirRetStatus wma_post_ctrl_msg(tpAniSirGlobal pMac, tSirMsgQ *pMsg);
177
178void wma_enable_disable_wakeup_event(WMA_HANDLE handle,
179 uint32_t vdev_id,
180 uint32_t bitmap,
181 bool enable);
182void wma_register_wow_wakeup_events(WMA_HANDLE handle, uint8_t vdev_id,
183 uint8_t vdev_type, uint8_t sub_type);
184void wma_register_wow_default_patterns(WMA_HANDLE handle, uint8_t vdev_id);
185int8_t wma_get_hw_mode_idx_from_dbs_hw_list(enum hw_mode_ss_config mac0_ss,
186 enum hw_mode_bandwidth mac0_bw,
187 enum hw_mode_ss_config mac1_ss,
188 enum hw_mode_bandwidth mac1_bw,
189 enum hw_mode_dbs_capab dbs,
Nitesh Shah5b7bae02016-09-28 18:58:33 +0530190 enum hw_mode_agile_dfs_capab dfs,
191 enum hw_mode_sbs_capab sbs);
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530192QDF_STATUS wma_get_hw_mode_from_idx(uint32_t idx,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800193 struct sir_hw_mode_params *hw_mode);
194int8_t wma_get_num_dbs_hw_modes(void);
195bool wma_is_hw_dbs_capable(void);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800196int8_t wma_get_mac_id_of_vdev(uint32_t vdev_id);
197void wma_update_intf_hw_mode_params(uint32_t vdev_id, uint32_t mac_id,
198 uint32_t cfgd_hw_mode_index);
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530199QDF_STATUS wma_get_old_and_new_hw_index(uint32_t *old_hw_mode_index,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800200 uint32_t *new_hw_mode_index);
201void wma_set_dbs_capability_ut(uint32_t dbs);
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530202QDF_STATUS wma_get_dbs_hw_modes(bool *one_by_one_dbs, bool *two_by_two_dbs);
203QDF_STATUS wma_get_current_hw_mode(struct sir_hw_mode_params *hw_mode);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800204bool wma_is_dbs_enable(void);
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530205QDF_STATUS wma_get_updated_scan_config(uint32_t *scan_config,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800206 bool dbs_scan,
207 bool dbs_plus_agile_scan,
208 bool single_mac_scan_with_dfs);
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530209QDF_STATUS wma_get_updated_fw_mode_config(uint32_t *fw_mode_config,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800210 bool dbs,
211 bool agile_dfs);
212bool wma_get_dbs_scan_config(void);
213bool wma_get_dbs_plus_agile_scan_config(void);
214bool wma_get_single_mac_scan_with_dfs_config(void);
215bool wma_get_dbs_config(void);
216bool wma_get_agile_dfs_config(void);
217bool wma_is_dual_mac_disabled_in_ini(void);
218bool wma_get_prev_dbs_config(void);
219bool wma_get_prev_agile_dfs_config(void);
220bool wma_get_prev_dbs_scan_config(void);
221bool wma_get_prev_dbs_plus_agile_scan_config(void);
222bool wma_get_prev_single_mac_scan_with_dfs_config(void);
Krunal Soni0193b6f2016-08-15 15:53:43 -0700223QDF_STATUS wma_get_caps_for_phyidx_hwmode(struct wma_caps_per_phy *caps_per_phy,
224 enum hw_mode_dbs_capab hw_mode, enum cds_band_type band);
225bool wma_is_rx_ldpc_supported_for_channel(uint32_t channel);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800226
227#define LRO_IPV4_SEED_ARR_SZ 5
228#define LRO_IPV6_SEED_ARR_SZ 11
229
230/**
231 * struct wma_lro_init_cmd_t - set LRO init parameters
232 * @lro_enable: indicates whether lro is enabled
233 * @tcp_flag: If the TCP flags from the packet do not match
234 * the values in this field after masking with TCP flags mask
235 * below, packet is not LRO eligible
236 * @tcp_flag_mask: field for comparing the TCP values provided
237 * above with the TCP flags field in the received packet
238 * @toeplitz_hash_ipv4: contains seed needed to compute the flow id
239 * 5-tuple toeplitz hash for ipv4 packets
240 * @toeplitz_hash_ipv6: contains seed needed to compute the flow id
241 * 5-tuple toeplitz hash for ipv6 packets
242 */
243struct wma_lro_config_cmd_t {
244 uint32_t lro_enable;
245 uint32_t tcp_flag:9,
246 tcp_flag_mask:9;
247 uint32_t toeplitz_hash_ipv4[LRO_IPV4_SEED_ARR_SZ];
248 uint32_t toeplitz_hash_ipv6[LRO_IPV6_SEED_ARR_SZ];
249};
250
251#if defined(FEATURE_LRO)
252int wma_lro_init(struct wma_lro_config_cmd_t *lro_config);
253#endif
254bool wma_is_scan_simultaneous_capable(void);
Ryan Hsu3c8f79f2015-12-02 16:45:09 -0800255
Gupta, Kapil4cb1d7d2016-04-16 18:16:25 -0700256QDF_STATUS wma_remove_beacon_filter(WMA_HANDLE wma,
257 struct beacon_filter_param *filter_params);
258
259QDF_STATUS wma_add_beacon_filter(WMA_HANDLE wma,
260 struct beacon_filter_param *filter_params);
Gupta, Kapil96c7f2f2016-04-25 19:13:41 +0530261QDF_STATUS wma_send_adapt_dwelltime_params(WMA_HANDLE handle,
262 struct adaptive_dwelltime_params *dwelltime_params);
Ryan Hsu3c8f79f2015-12-02 16:45:09 -0800263#ifdef FEATURE_GREEN_AP
264void wma_setup_egap_support(struct wma_tgt_cfg *tgt_cfg, WMA_HANDLE handle);
265void wma_register_egap_event_handle(WMA_HANDLE handle);
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530266QDF_STATUS wma_send_egap_conf_params(WMA_HANDLE handle,
Ryan Hsu3c8f79f2015-12-02 16:45:09 -0800267 struct egap_conf_params *egap_params);
268#else
269static inline void wma_setup_egap_support(struct wma_tgt_cfg *tgt_cfg,
270 WMA_HANDLE handle) {}
271static inline void wma_register_egap_event_handle(WMA_HANDLE handle) {}
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530272static inline QDF_STATUS wma_send_egap_conf_params(WMA_HANDLE handle,
Ryan Hsu3c8f79f2015-12-02 16:45:09 -0800273 struct egap_conf_params *egap_params)
274{
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530275 return QDF_STATUS_E_NOSUPPORT;
Ryan Hsu3c8f79f2015-12-02 16:45:09 -0800276}
277#endif
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530278QDF_STATUS wma_set_tx_power_scale(uint8_t vdev_id, int value);
279QDF_STATUS wma_set_tx_power_scale_decr_db(uint8_t vdev_id, int value);
Naveen Rawat0fc3f692016-06-22 14:30:54 -0700280
281#ifdef WLAN_FEATURE_NAN_DATAPATH
282QDF_STATUS wma_register_ndp_cb(QDF_STATUS (*pe_ndp_event_handler)
283 (tpAniSirGlobal mac_ctx,
Deepak Dhamdhere0f076bd2016-06-02 11:29:21 -0700284 cds_msg_t *msg));
Naveen Rawat0fc3f692016-06-22 14:30:54 -0700285#else
286static inline QDF_STATUS wma_register_ndp_cb(QDF_STATUS (*pe_ndp_event_handler)
287 (tpAniSirGlobal mac_ctx,
Deepak Dhamdhere0f076bd2016-06-02 11:29:21 -0700288 cds_msg_t *msg))
Naveen Rawat0fc3f692016-06-22 14:30:54 -0700289{
290 return QDF_STATUS_SUCCESS;
291}
292#endif
293
Peng Xu8fdaa492016-06-22 10:20:47 -0700294bool wma_is_p2p_lo_capable(void);
295QDF_STATUS wma_p2p_lo_start(struct sir_p2p_lo_start *params);
296QDF_STATUS wma_p2p_lo_stop(u_int32_t vdev_id);
Padma, Santhosh Kumar5e33beb2016-08-08 19:07:06 +0530297QDF_STATUS wma_get_wakelock_stats(struct sir_wake_lock_stats *wake_lock_stats);
Naveen Rawat8cc23b02016-07-14 12:22:56 -0700298void wma_process_pdev_hw_mode_trans_ind(void *wma,
299 wmi_pdev_hw_mode_transition_event_fixed_param *fixed_param,
300 wmi_pdev_set_hw_mode_response_vdev_mac_entry *vdev_mac_entry,
301 struct sir_hw_mode_trans_ind *hw_mode_trans_ind);
Kapil Gupta6213c012016-09-02 19:39:09 +0530302QDF_STATUS wma_set_powersave_config(uint8_t val);
Padma, Santhosh Kumard7cc0792016-06-28 18:54:12 +0530303QDF_STATUS wma_encrypt_decrypt_msg(WMA_HANDLE wma,
304 struct encrypt_decrypt_req_params *encrypt_decrypt_params);
Agrawal Ashishb2d1a452016-05-05 12:23:58 +0530305
306/**
307 * wma_set_cts2self_for_p2p_go() - set CTS2SELF command for P2P GO.
308 * @wma_handle: pointer to wma handle.
309 * @cts2self_for_p2p_go: value needs to set to firmware.
310 *
311 * At the time of driver startup, inform about ini parma to FW that
312 * if legacy client connects to P2P GO, stop using NOA for P2P GO.
313 *
314 * Return: QDF_STATUS.
315 */
316QDF_STATUS wma_set_cts2self_for_p2p_go(void *wma_handle,
317 uint32_t cts2self_for_p2p_go);
Padma, Santhosh Kumara7119672016-08-16 16:05:14 +0530318QDF_STATUS wma_set_tx_rx_aggregation_size
319 (struct sir_set_tx_rx_aggregation_size *tx_rx_aggregation_size);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800320#endif