blob: eea9c8bde47bf174983508f5e8e374ce01d82c57 [file] [log] [blame]
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001/*
Paul Zhange79e7db2017-01-04 16:37:05 +08002 * Copyright (c) 2012-2017 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"
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080032#include "ani_global.h"
33#include "a_types.h"
Govind Singh5b486202016-06-09 18:29:42 +053034#include "osapi_linux.h"
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080035#include "wmi_unified.h"
36#ifdef NOT_YET
37#include "htc_api.h"
38#endif
39#include "lim_global.h"
Krunal Soni0193b6f2016-08-15 15:53:43 -070040#include "cds_concurrency.h"
41#include "cds_utils.h"
Krunal Sonid32c6bc2016-10-18 18:00:21 -070042#include "scheduler_api.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
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080050 * @GEN_PARAM_CRASH_INJECT: inject crash
Rajeev Kumarf4390fa2016-12-22 13:17:33 -080051 * @GEN_PARAM_MODULATED_DTIM: moduled dtim
52 * @GEN_PARAM_CAPTURE_TSF: read tsf
53 * @GEN_PARAM_RESET_TSF_GPIO: reset tsf gpio
54 * @GEN_VDEV_ROAM_SYNCH_DELAY: roam sync delay
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080055 */
56typedef enum {
57 GEN_VDEV_PARAM_AMPDU = 0x1,
58 GEN_VDEV_PARAM_AMSDU,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080059 GEN_PARAM_CRASH_INJECT,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080060 GEN_PARAM_MODULATED_DTIM,
Manikandan Mohandcc21ba2016-03-15 14:31:56 -070061 GEN_PARAM_CAPTURE_TSF,
62 GEN_PARAM_RESET_TSF_GPIO,
Varun Reddy Yeturu5ab47462016-05-08 18:08:11 -070063 GEN_VDEV_ROAM_SYNCH_DELAY,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080064} GEN_PARAM;
65
Krunal Soni0193b6f2016-08-15 15:53:43 -070066/**
67 * struct wma_caps_per_phy - various caps per phy
68 * @ht_2g: entire HT cap for 2G band in terms of 32 bit flag
69 * @ht_5g: entire HT cap for 5G band in terms of 32 bit flag
70 * @vht_2g: entire VHT cap for 2G band in terms of 32 bit flag
71 * @vht_5g: entire VHT cap for 5G band in terms of 32 bit flag
72 * @he_2g: entire HE cap for 2G band in terms of 32 bit flag
73 * @he_5g: entire HE cap for 5G band in terms of 32 bit flag
74 */
75struct wma_caps_per_phy {
76 uint32_t ht_2g;
77 uint32_t ht_5g;
78 uint32_t vht_2g;
79 uint32_t vht_5g;
80 uint32_t he_2g;
81 uint32_t he_5g;
82};
83
84
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080085#define VDEV_CMD 1
86#define PDEV_CMD 2
87#define GEN_CMD 3
88#define DBG_CMD 4
89#define PPS_CMD 5
90#define QPOWER_CMD 6
91#define GTX_CMD 7
92
93typedef void (*wma_peer_authorized_fp) (uint32_t vdev_id);
94
95
Anurag Chouhanfb54ab02016-02-18 18:00:46 +053096QDF_STATUS wma_pre_start(void *cds_context);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080097
Rajeev Kumarb60abe42017-01-21 15:39:31 -080098QDF_STATUS wma_mc_process_msg(void *cds_context, struct scheduler_msg *msg);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -080099
Krunal Sonid32c6bc2016-10-18 18:00:21 -0700100QDF_STATUS wma_mc_process_handler(struct scheduler_msg *msg);
Krunal Sonid32c6bc2016-10-18 18:00:21 -0700101
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530102QDF_STATUS wma_start(void *cds_context);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800103
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530104QDF_STATUS wma_stop(void *cds_context, uint8_t reason);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800105
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530106QDF_STATUS wma_close(void *cds_context);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800107
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530108QDF_STATUS wma_wmi_service_close(void *cds_context);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800109
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530110QDF_STATUS wma_wmi_work_close(void *cds_context);
Xun Luoa858a472015-11-10 08:24:45 -0800111
Govind Singhd76a5b02016-03-08 15:12:14 +0530112int wma_rx_ready_event(void *handle, uint8_t *ev, uint32_t len);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800113
Govind Singhd76a5b02016-03-08 15:12:14 +0530114int wma_rx_service_ready_event(void *handle, uint8_t *ev, uint32_t len);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800115
Govind Singhd76a5b02016-03-08 15:12:14 +0530116int wma_rx_service_ready_ext_event(void *handle, uint8_t *ev, uint32_t len);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800117
118void wma_setneedshutdown(void *cds_context);
119
120bool wma_needshutdown(void *cds_context);
121
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530122QDF_STATUS wma_wait_for_ready_event(WMA_HANDLE handle);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800123
124uint8_t wma_map_channel(uint8_t mapChannel);
125
126int wma_cli_get_command(int vdev_id, int param_id, int vpdev);
127int wma_cli_set_command(int vdev_id, int param_id, int sval, int vpdev);
128int wma_cli_set2_command(int vdev_id, int param_id, int sval1,
129 int sval2, int vpdev);
130
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530131QDF_STATUS wma_set_htconfig(uint8_t vdev_id, uint16_t ht_capab, int value);
132QDF_STATUS wma_set_reg_domain(void *clientCtxt, v_REGDOMAIN_t regId);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800133
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530134QDF_STATUS wma_get_wcnss_software_version(void *p_cds_gctx,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800135 uint8_t *pVersion,
136 uint32_t versionBufferSize);
Dustin Brown54096432017-02-23 13:00:44 -0800137
138int wma_runtime_suspend(struct wow_enable_params wow_params);
Houston Hoffmana76591b2015-11-10 16:52:05 -0800139int wma_runtime_resume(void);
Dustin Brown54096432017-02-23 13:00:44 -0800140
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800141bool wma_check_scan_in_progress(WMA_HANDLE handle);
142void wma_set_peer_authorized_cb(void *wma_ctx, wma_peer_authorized_fp auth_cb);
Govind Singhd76a5b02016-03-08 15:12:14 +0530143QDF_STATUS wma_set_peer_param(void *wma_ctx, uint8_t *peer_addr,
144 uint32_t param_id,
145 uint32_t param_value, uint32_t vdev_id);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800146#ifdef NOT_YET
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530147QDF_STATUS wma_update_channel_list(WMA_HANDLE handle, void *scan_chan_info);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800148#endif
149
150uint8_t *wma_get_vdev_address_by_vdev_id(uint8_t vdev_id);
151struct wma_txrx_node *wma_get_interface_by_vdev_id(uint8_t vdev_id);
152bool wma_is_vdev_up(uint8_t vdev_id);
153
154void *wma_get_beacon_buffer_by_vdev_id(uint8_t vdev_id, uint32_t *buffer_size);
155
Krishna Kumaar Natarajand0bbb3c2017-03-13 17:04:58 -0700156bool wma_get_fw_wlan_feat_caps(enum cap_bitmap feature);
157void wma_set_fw_wlan_feat_caps(enum cap_bitmap feature);
Rajeev Kumarfeb96382017-01-22 19:42:09 -0800158tSirRetStatus wma_post_ctrl_msg(tpAniSirGlobal pMac,
159 struct scheduler_msg *pMsg);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800160
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800161void wma_register_wow_wakeup_events(WMA_HANDLE handle, uint8_t vdev_id,
162 uint8_t vdev_type, uint8_t sub_type);
163void wma_register_wow_default_patterns(WMA_HANDLE handle, uint8_t vdev_id);
164int8_t wma_get_hw_mode_idx_from_dbs_hw_list(enum hw_mode_ss_config mac0_ss,
165 enum hw_mode_bandwidth mac0_bw,
166 enum hw_mode_ss_config mac1_ss,
167 enum hw_mode_bandwidth mac1_bw,
168 enum hw_mode_dbs_capab dbs,
Nitesh Shah5b7bae02016-09-28 18:58:33 +0530169 enum hw_mode_agile_dfs_capab dfs,
170 enum hw_mode_sbs_capab sbs);
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530171QDF_STATUS wma_get_hw_mode_from_idx(uint32_t idx,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800172 struct sir_hw_mode_params *hw_mode);
173int8_t wma_get_num_dbs_hw_modes(void);
174bool wma_is_hw_dbs_capable(void);
Aravind Narasimhan5b7c2cd2016-12-08 21:04:26 -0800175bool wma_is_hw_sbs_capable(void);
176bool wma_is_hw_dbs_2x2_capable(void);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800177int8_t wma_get_mac_id_of_vdev(uint32_t vdev_id);
178void wma_update_intf_hw_mode_params(uint32_t vdev_id, uint32_t mac_id,
179 uint32_t cfgd_hw_mode_index);
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530180QDF_STATUS wma_get_old_and_new_hw_index(uint32_t *old_hw_mode_index,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800181 uint32_t *new_hw_mode_index);
182void wma_set_dbs_capability_ut(uint32_t dbs);
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530183QDF_STATUS wma_get_dbs_hw_modes(bool *one_by_one_dbs, bool *two_by_two_dbs);
184QDF_STATUS wma_get_current_hw_mode(struct sir_hw_mode_params *hw_mode);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800185bool wma_is_dbs_enable(void);
Nitesh Shaha3dfea32017-02-09 19:18:57 +0530186enum cds_hw_mode_change
187wma_get_cds_hw_mode_change_from_hw_mode_index(uint32_t hw_mode_index);
188
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530189QDF_STATUS wma_get_updated_scan_config(uint32_t *scan_config,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800190 bool dbs_scan,
191 bool dbs_plus_agile_scan,
192 bool single_mac_scan_with_dfs);
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530193QDF_STATUS wma_get_updated_fw_mode_config(uint32_t *fw_mode_config,
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800194 bool dbs,
195 bool agile_dfs);
196bool wma_get_dbs_scan_config(void);
197bool wma_get_dbs_plus_agile_scan_config(void);
198bool wma_get_single_mac_scan_with_dfs_config(void);
199bool wma_get_dbs_config(void);
200bool wma_get_agile_dfs_config(void);
201bool wma_is_dual_mac_disabled_in_ini(void);
202bool wma_get_prev_dbs_config(void);
203bool wma_get_prev_agile_dfs_config(void);
204bool wma_get_prev_dbs_scan_config(void);
205bool wma_get_prev_dbs_plus_agile_scan_config(void);
206bool wma_get_prev_single_mac_scan_with_dfs_config(void);
Krunal Soni0193b6f2016-08-15 15:53:43 -0700207QDF_STATUS wma_get_caps_for_phyidx_hwmode(struct wma_caps_per_phy *caps_per_phy,
208 enum hw_mode_dbs_capab hw_mode, enum cds_band_type band);
209bool wma_is_rx_ldpc_supported_for_channel(uint32_t channel);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800210
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800211#if defined(FEATURE_LRO)
Dhanashri Atre09828f12016-11-13 10:36:58 -0800212int wma_lro_init(struct cdp_lro_hash_config *lro_config);
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800213#endif
214bool wma_is_scan_simultaneous_capable(void);
Ryan Hsu3c8f79f2015-12-02 16:45:09 -0800215
Gupta, Kapil4cb1d7d2016-04-16 18:16:25 -0700216QDF_STATUS wma_remove_beacon_filter(WMA_HANDLE wma,
217 struct beacon_filter_param *filter_params);
218
219QDF_STATUS wma_add_beacon_filter(WMA_HANDLE wma,
220 struct beacon_filter_param *filter_params);
Gupta, Kapil96c7f2f2016-04-25 19:13:41 +0530221QDF_STATUS wma_send_adapt_dwelltime_params(WMA_HANDLE handle,
222 struct adaptive_dwelltime_params *dwelltime_params);
Ryan Hsu3c8f79f2015-12-02 16:45:09 -0800223#ifdef FEATURE_GREEN_AP
224void wma_setup_egap_support(struct wma_tgt_cfg *tgt_cfg, WMA_HANDLE handle);
225void wma_register_egap_event_handle(WMA_HANDLE handle);
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530226QDF_STATUS wma_send_egap_conf_params(WMA_HANDLE handle,
Ryan Hsu3c8f79f2015-12-02 16:45:09 -0800227 struct egap_conf_params *egap_params);
228#else
229static inline void wma_setup_egap_support(struct wma_tgt_cfg *tgt_cfg,
230 WMA_HANDLE handle) {}
231static inline void wma_register_egap_event_handle(WMA_HANDLE handle) {}
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530232static inline QDF_STATUS wma_send_egap_conf_params(WMA_HANDLE handle,
Ryan Hsu3c8f79f2015-12-02 16:45:09 -0800233 struct egap_conf_params *egap_params)
234{
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530235 return QDF_STATUS_E_NOSUPPORT;
Ryan Hsu3c8f79f2015-12-02 16:45:09 -0800236}
237#endif
Anurag Chouhanfb54ab02016-02-18 18:00:46 +0530238QDF_STATUS wma_set_tx_power_scale(uint8_t vdev_id, int value);
239QDF_STATUS wma_set_tx_power_scale_decr_db(uint8_t vdev_id, int value);
Naveen Rawat0fc3f692016-06-22 14:30:54 -0700240
241#ifdef WLAN_FEATURE_NAN_DATAPATH
242QDF_STATUS wma_register_ndp_cb(QDF_STATUS (*pe_ndp_event_handler)
243 (tpAniSirGlobal mac_ctx,
Rajeev Kumarb60abe42017-01-21 15:39:31 -0800244 struct scheduler_msg *msg));
Naveen Rawat0fc3f692016-06-22 14:30:54 -0700245#else
246static inline QDF_STATUS wma_register_ndp_cb(QDF_STATUS (*pe_ndp_event_handler)
247 (tpAniSirGlobal mac_ctx,
Rajeev Kumarb60abe42017-01-21 15:39:31 -0800248 struct scheduler_msg *msg))
Naveen Rawat0fc3f692016-06-22 14:30:54 -0700249{
250 return QDF_STATUS_SUCCESS;
251}
252#endif
253
Peng Xu8fdaa492016-06-22 10:20:47 -0700254bool wma_is_p2p_lo_capable(void);
255QDF_STATUS wma_p2p_lo_start(struct sir_p2p_lo_start *params);
256QDF_STATUS wma_p2p_lo_stop(u_int32_t vdev_id);
Padma, Santhosh Kumar5e33beb2016-08-08 19:07:06 +0530257QDF_STATUS wma_get_wakelock_stats(struct sir_wake_lock_stats *wake_lock_stats);
Naveen Rawat8cc23b02016-07-14 12:22:56 -0700258void wma_process_pdev_hw_mode_trans_ind(void *wma,
259 wmi_pdev_hw_mode_transition_event_fixed_param *fixed_param,
260 wmi_pdev_set_hw_mode_response_vdev_mac_entry *vdev_mac_entry,
261 struct sir_hw_mode_trans_ind *hw_mode_trans_ind);
Padma, Santhosh Kumar72e7aec2016-10-12 17:23:44 +0530262
263#ifdef WLAN_FEATURE_DISA
Padma, Santhosh Kumard7cc0792016-06-28 18:54:12 +0530264QDF_STATUS wma_encrypt_decrypt_msg(WMA_HANDLE wma,
265 struct encrypt_decrypt_req_params *encrypt_decrypt_params);
Padma, Santhosh Kumar72e7aec2016-10-12 17:23:44 +0530266#else
267static inline QDF_STATUS wma_encrypt_decrypt_msg(WMA_HANDLE wma,
268 struct encrypt_decrypt_req_params *encrypt_decrypt_params)
269{
270 return 0;
271}
272#endif
Agrawal Ashishb2d1a452016-05-05 12:23:58 +0530273
274/**
275 * wma_set_cts2self_for_p2p_go() - set CTS2SELF command for P2P GO.
276 * @wma_handle: pointer to wma handle.
277 * @cts2self_for_p2p_go: value needs to set to firmware.
278 *
279 * At the time of driver startup, inform about ini parma to FW that
280 * if legacy client connects to P2P GO, stop using NOA for P2P GO.
281 *
282 * Return: QDF_STATUS.
283 */
284QDF_STATUS wma_set_cts2self_for_p2p_go(void *wma_handle,
285 uint32_t cts2self_for_p2p_go);
Padma, Santhosh Kumara7119672016-08-16 16:05:14 +0530286QDF_STATUS wma_set_tx_rx_aggregation_size
287 (struct sir_set_tx_rx_aggregation_size *tx_rx_aggregation_size);
Kabilan Kannan3c0a7352016-12-02 18:49:38 -0800288/**
289 * wma_set_sar_limit() - set sar limits in the target
290 * @handle: wma handle
291 * @sar_limit_cmd_params: sar limit cmd params
292 *
293 * This function sends WMI command to set SAR limits.
294 *
295 * Return: QDF_STATUS enumeration
296 */
297QDF_STATUS wma_set_sar_limit(WMA_HANDLE handle,
298 struct sar_limit_cmd_params *sar_limit_params);
Dustin Brown10a7b712016-10-07 10:31:16 -0700299/**
300 * wma_set_qpower_config() - update qpower config in wma
301 * @vdev_id: the Id of the vdev to configure
302 * @qpower: new qpower value
303 *
304 * Return: QDF_STATUS_SUCCESS on success, error number otherwise
305 */
306QDF_STATUS wma_set_qpower_config(uint8_t vdev_id, uint8_t qpower);
Krishna Kumaar Natarajan0103ef82017-02-17 18:15:56 -0800307
Prakash Dhavali7090c5f2015-11-02 17:55:19 -0800308#endif