blob: 2f29d178244786950041d0a66338984ccb604d1c [file] [log] [blame]
Naveen Rawatc3226ef2016-12-15 12:44:14 -08001/*
Nachiket Kukade2fb1fdb2019-01-08 15:35:27 +05302 * Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
Naveen Rawatc3226ef2016-12-15 12:44:14 -08003 *
4 * Permission to use, copy, modify, and/or distribute this software for
5 * any purpose with or without fee is hereby granted, provided that the
6 * above copyright notice and this permission notice appear in all
7 * copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16 * PERFORMANCE OF THIS SOFTWARE.
17 */
18
19/**
Naveen Rawat398c8df2017-03-30 20:20:14 -070020 * DOC: contains declaration of common utility APIs and private structs to be
21 * used in NAN modules
Naveen Rawatc3226ef2016-12-15 12:44:14 -080022 */
23
Nachiket Kukade2fb1fdb2019-01-08 15:35:27 +053024#ifdef WLAN_FEATURE_NAN
Naveen Rawat398c8df2017-03-30 20:20:14 -070025#ifndef _WLAN_NAN_MAIN_I_H_
26#define _WLAN_NAN_MAIN_I_H_
Naveen Rawatc3226ef2016-12-15 12:44:14 -080027
Naveen Rawat4fa5c8f2017-03-21 15:12:22 -070028#include "qdf_types.h"
29#include "qdf_status.h"
30#include "nan_public_structs.h"
31#include "wlan_objmgr_cmn.h"
32
33struct wlan_objmgr_vdev;
34struct wlan_objmgr_psoc;
35struct scheduler_msg;
36
Nirav Shah7a54fa22018-06-23 14:43:23 +053037#define nan_alert(params...) \
38 QDF_TRACE_FATAL(QDF_MODULE_ID_NAN, params)
39#define nan_err(params...) \
40 QDF_TRACE_ERROR(QDF_MODULE_ID_NAN, params)
41#define nan_warn(params...) \
42 QDF_TRACE_WARN(QDF_MODULE_ID_NAN, params)
43#define nan_notice(params...) \
44 QDF_TRACE_INFO(QDF_MODULE_ID_NAN, params)
45#define nan_info(params...) \
46 QDF_TRACE_INFO(QDF_MODULE_ID_NAN, params)
47#define nan_debug(params...) \
48 QDF_TRACE_DEBUG(QDF_MODULE_ID_NAN, params)
Naveen Rawat4fa5c8f2017-03-21 15:12:22 -070049
Nirav Shahf92db6b2018-07-24 16:33:11 +053050#define nan_nofl_alert(params...) \
51 QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_NAN, params)
52#define nan_nofl_err(params...) \
53 QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_NAN, params)
54#define nan_nofl_warn(params...) \
55 QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_NAN, params)
56#define nan_nofl_info(params...) \
57 QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_NAN, params)
58#define nan_nofl_debug(params...) \
59 QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_NAN, params)
60
Naveen Rawat4fa5c8f2017-03-21 15:12:22 -070061#ifndef MAX_PEERS
62#define MAX_PEERS 32
63#endif
64
65/**
Nachiket Kukaded5a76832018-11-02 21:09:00 +053066 * enum nan_disc_state - NAN Discovery states
67 * @NAN_DISC_DISABLED: NAN Discovery is disabled
68 * @NAN_DISC_ENABLE_IN_PROGRESS: NAN Discovery enable is in progress
69 * @NAN_DISC_ENABLED: NAN Discovery is enabled
70 * @NAN_DISC_DISABLE_IN_PROGRESS: NAN Discovery disable is in progress
71 */
72enum nan_disc_state {
73 NAN_DISC_DISABLED,
74 NAN_DISC_ENABLE_IN_PROGRESS,
75 NAN_DISC_ENABLED,
76 NAN_DISC_DISABLE_IN_PROGRESS,
77};
78
79/**
Manikandan Mohan3df22702018-08-02 18:04:16 -070080 * struct nan_cfg_params - NAN INI config params
81 * @enable: NAN feature enable
82 * @dp_enable: NAN Datapath feature enable
Manikandan Mohan3df22702018-08-02 18:04:16 -070083 * @ndi_mac_randomize: Randomize NAN datapath interface MAC
84 */
85struct nan_cfg_params {
Manikandan Mohan3df22702018-08-02 18:04:16 -070086 bool enable;
Manikandan Mohan3df22702018-08-02 18:04:16 -070087 bool dp_enable;
Manikandan Mohan3df22702018-08-02 18:04:16 -070088 bool ndi_mac_randomize;
Manikandan Mohan3df22702018-08-02 18:04:16 -070089};
90
91/**
Naveen Rawat4fa5c8f2017-03-21 15:12:22 -070092 * struct nan_psoc_priv_obj - nan private psoc obj
93 * @lock: lock to be acquired before reading or writing to object
94 * @cb_obj: struct contaning callback pointers
Nachiket Kukade85aa3782018-11-02 20:12:34 +053095 * @cfg_param: NAN Config parameters in INI
96 * @nan_caps: NAN Target capabilities
Nachiket Kukaded5a76832018-11-02 21:09:00 +053097 * @tx_ops: Tx ops registered with Target IF interface
98 * @rx_ops: Rx ops registered with Target IF interface
99 * @disc_state: Present NAN Discovery state
Nachiket Kukade089b9832018-12-12 16:38:17 +0530100 * @nan_social_channel: NAN Social channel for discovery
101 * @nan_disc_mac_id: MAC id used for NAN Discovery
102 * @is_explicit_disable: Flag to indicate that NAN is being explicitly
103 * disabled by driver
104 * @disable_context: Explicit disable context
Naveen Rawat4fa5c8f2017-03-21 15:12:22 -0700105 */
106struct nan_psoc_priv_obj {
107 qdf_spinlock_t lock;
108 struct nan_callbacks cb_obj;
Manikandan Mohan3df22702018-08-02 18:04:16 -0700109 struct nan_cfg_params cfg_param;
Nachiket Kukade85aa3782018-11-02 20:12:34 +0530110 struct nan_tgt_caps nan_caps;
Nachiket Kukade63bb63d2018-11-21 14:42:14 +0530111 struct wlan_nan_tx_ops tx_ops;
112 struct wlan_nan_rx_ops rx_ops;
Nachiket Kukaded5a76832018-11-02 21:09:00 +0530113 enum nan_disc_state disc_state;
Nachiket Kukade089b9832018-12-12 16:38:17 +0530114 uint8_t nan_social_channel;
115 uint8_t nan_disc_mac_id;
116 bool is_explicit_disable;
117 void *disable_context;
Naveen Rawat4fa5c8f2017-03-21 15:12:22 -0700118};
119
120/**
121 * struct nan_vdev_priv_obj - nan private vdev obj
122 * @lock: lock to be acquired before reading or writing to object
123 * @state: Current state of NDP
124 * @active_ndp_sessions: active ndp sessions per adapter
125 * @active_ndp_peers: number of active ndp peers
126 * @ndp_create_transaction_id: transaction id for create req
127 * @ndp_delete_transaction_id: transaction id for delete req
128 * @ndi_delete_rsp_reason: reason code for ndi_delete rsp
129 * @ndi_delete_rsp_status: status for ndi_delete rsp
130 */
131struct nan_vdev_priv_obj {
132 qdf_spinlock_t lock;
133 enum nan_datapath_state state;
134 /* idx in following array should follow conn_info.peerMacAddress */
135 uint32_t active_ndp_sessions[MAX_PEERS];
136 uint32_t active_ndp_peers;
137 uint16_t ndp_create_transaction_id;
138 uint16_t ndp_delete_transaction_id;
139 uint32_t ndi_delete_rsp_reason;
140 uint32_t ndi_delete_rsp_status;
141};
142
Naveen Rawate1004992017-03-25 18:54:14 -0700143/**
Naveen Rawatcdf30a62017-04-02 18:25:54 -0700144 * nan_release_cmd: frees resources for NAN command.
145 * @in_req: pointer to msg buffer to be freed
146 * @req_type: type of request
147 *
148 * Return: None
149 */
150void nan_release_cmd(void *in_req, uint32_t req_type);
151
152/**
153 * nan_scheduled_msg_handler: callback pointer to be called when scheduler
154 * starts executing enqueued NAN command.
155 * @msg: pointer to msg
156 *
157 * Return: status of operation
158 */
159QDF_STATUS nan_scheduled_msg_handler(struct scheduler_msg *msg);
160
Nachiket Kukaded5a76832018-11-02 21:09:00 +0530161/**
162 * nan_discovery_flush_callback: callback to flush the NAN scheduler msg
163 * @msg: pointer to msg
164 *
165 * Return: None
166 */
167void nan_discovery_flush_callback(struct scheduler_msg *msg);
168
169/**
170 * nan_discovery_scheduled_handler: callback pointer to be called when scheduler
171 * starts executing enqueued NAN command.
172 * @msg: pointer to msg
173 *
174 * Return: status of operation
175 */
176QDF_STATUS nan_discovery_scheduled_handler(struct scheduler_msg *msg);
177
Naveen Rawat94b75282017-04-05 17:26:18 -0700178/*
Nachiket Kukade4f89e9e2018-11-08 18:10:11 +0530179 * nan_discovery_event_handler: function to process NAN events from firmware
180 * @msg: message received from Target IF
181 *
182 * Return: status of operation
183 */
184QDF_STATUS nan_discovery_event_handler(struct scheduler_msg *msg);
185
186/*
187 * nan_datapath_event_handler: function to process NDP events from firmware
188 * @msg: message received from Target IF
Naveen Rawat94b75282017-04-05 17:26:18 -0700189 *
190 * Return: status of operation
191 */
Nachiket Kukaded5a76832018-11-02 21:09:00 +0530192QDF_STATUS nan_datapath_event_handler(struct scheduler_msg *msg);
193
194/*
195 * nan_set_discovery_state: Attempts to set NAN Discovery state as the given one
196 * @psoc: PSOC object
197 * @new_state: Attempting to this NAN discovery state
198 *
199 * Return: status of operation
200 */
201QDF_STATUS nan_set_discovery_state(struct wlan_objmgr_psoc *psoc,
202 enum nan_disc_state new_state);
203
204/*
205 * nan_discovery_pre_enable: Takes steps before sending NAN Enable to Firmware
206 * @psoc: PSOC object
207 * @nan_social_channel: Primary social channel for NAN Discovery
208 *
209 * Return: status of operation
210 */
211QDF_STATUS nan_discovery_pre_enable(struct wlan_objmgr_psoc *psoc,
212 uint8_t nan_social_channel);
213
214/*
215 * nan_get_discovery_state: Returns the current NAN Discovery state
216 * @psoc: PSOC object
217 *
218 * Return: Current NAN Discovery state
219 */
220enum nan_disc_state nan_get_discovery_state(struct wlan_objmgr_psoc *psoc);
Naveen Rawat94b75282017-04-05 17:26:18 -0700221
Nachiket Kukade089b9832018-12-12 16:38:17 +0530222/*
223 * nan_is_enable_allowed: Queries whether NAN Discovery is allowed
224 * @psoc: PSOC object
225 * @nan_chan: Possible primary social channel for NAN Discovery
226 *
227 * Return: True if NAN Enable is allowed on given channel, False otherwise
228 */
229bool nan_is_enable_allowed(struct wlan_objmgr_psoc *psoc, uint8_t nan_chan);
230
231/*
232 * nan_get_connection_info: Gets connection info of the NAN Discovery interface
233 * @psoc: PSOC object
234 * @chan: NAN Social channel to be returned
235 * @mac_if: MAC ID associated with NAN Discovery
236 *
237 * Return: QDF_STATUS
238 */
239QDF_STATUS
240nan_get_connection_info(struct wlan_objmgr_psoc *psoc, uint8_t *chan,
241 uint8_t *mac_id);
242
Nachiket Kukade63bb63d2018-11-21 14:42:14 +0530243#endif /* _WLAN_NAN_MAIN_I_H_ */
Nachiket Kukade2fb1fdb2019-01-08 15:35:27 +0530244#endif /* WLAN_FEATURE_NAN */