• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Neighbor Awareness Networking
4  *
5  * Copyright (C) 1999-2019, Broadcom.
6  *
7  *      Unless you and Broadcom execute a separate written software license
8  * agreement governing use of this software, this software is licensed to you
9  * under the terms of the GNU General Public License version 2 (the "GPL"),
10  * available at http://www.broadcom.com/licenses/GPLv2.php, with the
11  * following added to such license:
12  *
13  *      As a special exception, the copyright holders of this software give you
14  * permission to link this software with independent modules, and to copy and
15  * distribute the resulting executable under terms of your choice, provided that
16  * you also meet, for each linked independent module, the terms and conditions of
17  * the license of that module.  An independent module is a module which is not
18  * derived from this software.  The special exception does not apply to any
19  * modifications of the software.
20  *
21  *      Notwithstanding the above, under no circumstances may you combine this
22  * software in any way with any other Broadcom software provided under a license
23  * other than the GPL, without Broadcom's express prior written consent.
24  *
25  *
26  * <<Broadcom-WL-IPTag/Open:>>
27  *
28  * $Id: wl_cfgnan.h 825970 2019-06-18 05:28:31Z $
29  */
30 
31 #ifndef _wl_cfgnan_h_
32 #define _wl_cfgnan_h_
33 
34 /* NAN structs versioning b/w DHD and HAL
35 * define new version if any change in any of the shared structs
36 */
37 #define NAN_HAL_VERSION_1	0x2
38 
39 #define NAN_EVENT_BUFFER_SIZE_LARGE	1024u
40 
41 #define NAN_RANGE_EXT_CANCEL_SUPPORT_VER 2
42 #define WL_NAN_IOV_BATCH_VERSION	0x8000
43 #define WL_NAN_AVAIL_REPEAT_INTVL	0x0200
44 #define WL_NAN_AVAIL_START_INTVL	160
45 #define WL_NAN_AVAIL_DURATION_INTVL	336
46 #define NAN_IOCTL_BUF_SIZE		256u
47 #define NAN_IOCTL_BUF_SIZE_MED		512u
48 #define NAN_IOCTL_BUF_SIZE_LARGE	1024u
49 #define NAN_EVENT_NAME_MAX_LEN		40u
50 #define NAN_RTT_IOVAR_BUF_SIZE		1024u
51 #define WL_NAN_EVENT_CLEAR_BIT		32
52 #define NAN_EVENT_MASK_ALL			0x7fffffff
53 #define NAN_MAX_AWAKE_DW_INTERVAL	5
54 #define NAN_MAXIMUM_ID_NUMBER 255
55 #define NAN_MAXIMUM_MASTER_PREFERENCE 254
56 #define NAN_ID_RESERVED	0
57 #define NAN_ID_MIN	1
58 #define NAN_ID_MAX	255
59 #define NAN_DEF_SOCIAL_CHAN_2G	6
60 #define NAN_DEF_SOCIAL_CHAN_5G	149
61 #define NAN_DEF_SEC_SOCIAL_CHAN_5G	44
62 #define NAN_MAX_SOCIAL_CHANNELS	3
63 /* Keeping RSSI threshold value to be -70dBm */
64 #define NAN_DEF_RSSI_NOTIF_THRESH -70
65 /* Keeping default RSSI mid value to be -70dBm */
66 #define NAN_DEF_RSSI_MID -75
67 /* Keeping default RSSI close value to be -60dBm */
68 #define NAN_DEF_RSSI_CLOSE -60
69 #define WL_AVAIL_BIT_MAP	"1111111111111111111111111111111100000000000000000000000000000000"
70 #define WL_5G_AVAIL_BIT_MAP	"0000000011111111111111111111111111111111000000000000000000000000"
71 #define WL_AVAIL_CHANNEL_2G	6
72 #define WL_AVAIL_BANDWIDTH_2G	WL_CHANSPEC_BW_20
73 #define WL_AVAIL_CHANNEL_5G	149
74 #define WL_AVAIL_BANDWIDTH_5G	WL_CHANSPEC_BW_80
75 #define NAN_RANGING_PERIOD WL_AVAIL_PERIOD_1024
76 #define NAN_SYNC_DEF_AWAKE_DW	1
77 #define NAN_RNG_TERM_FLAG_NONE 0
78 
79 #define NAN_BLOOM_LENGTH_DEFAULT        240u
80 #define NAN_SRF_MAX_MAC (NAN_BLOOM_LENGTH_DEFAULT / ETHER_ADDR_LEN)
81 #define NAN_SRF_CTRL_FIELD_LEN 1u
82 
83 #define MAX_IF_ADD_WAIT_TIME	1000
84 #define NAN_DP_ROLE_INITIATOR  0x0001
85 #define NAN_DP_ROLE_RESPONDER  0x0002
86 
87 #define WL_NAN_OBUF_DATA_OFFSET  (OFFSETOF(bcm_iov_batch_buf_t, cmds[0]) + \
88 		OFFSETOF(bcm_iov_batch_subcmd_t, data[0]))
89 #define NAN_INVALID_ROLE(role)	(role > WL_NAN_ROLE_ANCHOR_MASTER)
90 #define NAN_INVALID_CHANSPEC(chanspec)	((chanspec == INVCHANSPEC) || \
91 	(chanspec == 0))
92 #define NAN_INVALID_EVENT(num)	((num < WL_NAN_EVENT_START) || \
93 	(num >= WL_NAN_EVENT_INVALID))
94 #define NAN_INVALID_PROXD_EVENT(num)	(num != WLC_E_PROXD_NAN_EVENT)
95 #define NAN_EVENT_BIT(event) (1U << (event - WL_NAN_EVENT_START))
96 #define NAN_EVENT_MAP(event) ((event) - WL_NAN_EVENT_START)
97 #define NAME_TO_STR(name) #name
98 #define NAN_ID_CTRL_SIZE ((NAN_MAXIMUM_ID_NUMBER/8) + 1)
99 
100 #define tolower(c) bcm_tolower(c)
101 
102 #define NMR2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5], (a)[6], (a)[7]
103 #define NMRSTR "%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x"
104 
105 #define NAN_DBG_ENTER() {WL_DBG(("Enter: %s\n", __FUNCTION__));}
106 #define NAN_DBG_EXIT() {WL_DBG(("Exit: %s\n", __FUNCTION__));}
107 
108 /* Service Control Type length */
109 #define NAN_SVC_CONTROL_TYPE_MASK	((1 << NAN_SVC_CONTROL_TYPE_LEN) - 1)
110 
111 #ifndef strtoul
112 #define strtoul(nptr, endptr, base) bcm_strtoul((nptr), (endptr), (base))
113 #endif // endif
114 
115 #define NAN_MAC_ADDR_LEN 6u
116 #define NAN_DP_MAX_APP_INFO_LEN	512u
117 
118 #define NAN_SDE_CF_DP_REQUIRED      (1 << 2)
119 #define NAN_SDE_CF_DP_TYPE      (1 << 3)
120 #define NAN_SDE_CF_MULTICAST_TYPE   (1 << 4)
121 #define NAN_SDE_CF_SECURITY_REQUIRED    (1 << 6)
122 #define NAN_SDE_CF_RANGING_REQUIRED (1 << 7)
123 #define NAN_SDE_CF_RANGE_PRESENT    (1 << 8)
124 
125 #define CHECK_BIT(m, n) ((m >> n) & 1)? 1 : 0
126 #define WL_NAN_EVENT_DIC_MAC_ADDR_BIT	0
127 #define WL_NAN_EVENT_START_EVENT	1
128 #define WL_NAN_EVENT_JOIN_EVENT		2
129 
130 /* Disabling svc specific(as per part of sub & pub calls) events based on below bits */
131 #define WL_NAN_EVENT_SUPPRESS_TERMINATE_BIT	0
132 #define WL_NAN_EVENT_SUPPRESS_MATCH_EXP_BIT	1
133 #define WL_NAN_EVENT_SUPPRESS_RECEIVE_BIT	2
134 #define WL_NAN_EVENT_SUPPRESS_REPLIED_BIT	3
135 
136 /* Disabling tranmsit followup events based on below bit */
137 #define WL_NAN_EVENT_SUPPRESS_FOLLOWUP_RECEIVE_BIT	0
138 
139 #define C2S(x)  case x: return #x;
140 #define NAN_BLOOM_LENGTH_DEFAULT        240u
141 #define NAN_SRF_MAX_MAC (NAN_BLOOM_LENGTH_DEFAULT / ETHER_ADDR_LEN)
142 #define NAN_MAX_PMK_LEN		32u
143 #define NAN_ERROR_STR_LEN	255u
144 
145 /* NAN related Capabilities */
146 #define MAX_CONCURRENT_NAN_CLUSTERS 1
147 #define MAX_PUBLISHES	8u
148 #define MAX_SUBSCRIBES	8u
149 #define MAX_SVC_NAME_LEN	255u
150 #define MAX_MATCH_FILTER_LEN	255u
151 #define MAX_TOTAL_MATCH_FILTER_LEN	510u
152 #define	NAN_MAX_SERVICE_SPECIFIC_INFO_LEN	255u
153 #define MAX_NDI_INTERFACES	1
154 #define MAX_NDP_SESSIONS	5
155 #define MAX_APP_INFO_LEN	255u
156 #define	MAX_QUEUED_TX_FOLLOUP_MSGS	10
157 #define	MAX_SDEA_SVC_INFO_LEN	255u
158 #define	MAX_SUBSCRIBE_ADDRESS	10
159 #define	CIPHER_SUITE_SUPPORTED	1
160 #define	MAX_SCID_LEN	0
161 #define	IS_NDP_SECURITY_SUPPORTED	true
162 #define	NDP_SUPPORTED_BANDS	2
163 #define NAN_MAX_RANGING_INST 8u
164 #define NAN_MAX_RANGING_SSN_ALLOWED 1u
165 #define NAN_MAX_SVC_INST (MAX_PUBLISHES + MAX_SUBSCRIBES)
166 #define NAN_SVC_INST_SIZE 32u
167 #define NAN_START_STOP_TIMEOUT	5000
168 #define NAN_MAX_NDP_PEER 8u
169 #define NAN_DISABLE_CMD_DELAY_TIMER    4000u
170 
171 #ifdef WL_NAN_DEBUG
172 #define NAN_MUTEX_LOCK() {WL_DBG(("Mutex Lock: Enter: %s\n", __FUNCTION__)); \
173 	mutex_lock(&cfg->nancfg.nan_sync);}
174 #define NAN_MUTEX_UNLOCK() {mutex_unlock(&cfg->nancfg.nan_sync); \
175 	WL_DBG(("Mutex Unlock: Exit: %s\n", __FUNCTION__));}
176 #else
177 #define NAN_MUTEX_LOCK() {mutex_lock(&cfg->nancfg.nan_sync);}
178 #define NAN_MUTEX_UNLOCK() {mutex_unlock(&cfg->nancfg.nan_sync);}
179 #endif /* WL_NAN_DEBUG */
180 #define	NAN_ATTR_SUPPORT_2G_CONFIG		(1<<0)
181 #define	NAN_ATTR_SYNC_DISC_2G_BEACON_CONFIG	(1<<1)
182 #define	NAN_ATTR_SDF_2G_SUPPORT_CONFIG		(1<<2)
183 #define	NAN_ATTR_SUPPORT_5G_CONFIG		(1<<3)
184 #define	NAN_ATTR_SYNC_DISC_5G_BEACON_CONFIG	(1<<4)
185 #define	NAN_ATTR_SDF_5G_SUPPORT_CONFIG		(1<<5)
186 #define	NAN_ATTR_2G_DW_CONFIG			(1<<6)
187 #define	NAN_ATTR_5G_DW_CONFIG			(1<<7)
188 #define	NAN_ATTR_2G_CHAN_CONFIG			(1<<8)
189 #define	NAN_ATTR_5G_CHAN_CONFIG			(1<<9)
190 #define	NAN_ATTR_2G_DWELL_TIME_CONFIG		(1<<10)
191 #define	NAN_ATTR_5G_DWELL_TIME_CONFIG		(1<<11)
192 #define	NAN_ATTR_2G_SCAN_PERIOD_CONFIG		(1<<12)
193 #define	NAN_ATTR_5G_SCAN_PERIOD_CONFIG		(1<<13)
194 #define	NAN_ATTR_RSSI_CLOSE_CONFIG		(1<<14)
195 #define	NAN_ATTR_RSSI_MIDDLE_2G_CONFIG		(1<<15)
196 #define	NAN_ATTR_RSSI_PROXIMITY_2G_CONFIG	(1<<16)
197 #define	NAN_ATTR_RSSI_CLOSE_5G_CONFIG		(1<<17)
198 #define	NAN_ATTR_RSSI_MIDDLE_5G_CONFIG		(1<<18)
199 #define	NAN_ATTR_RSSI_PROXIMITY_5G_CONFIG	(1<<19)
200 #define	NAN_ATTR_RSSI_WINDOW_SIZE_CONFIG	(1<<20)
201 #define	NAN_ATTR_HOP_COUNT_LIMIT_CONFIG		(1<<21)
202 #define	NAN_ATTR_SID_BEACON_CONFIG		(1<<22)
203 #define	NAN_ATTR_HOP_COUNT_FORCE_CONFIG		(1<<23)
204 #define	NAN_ATTR_RAND_FACTOR_CONFIG		(1<<24)
205 #define	NAN_ATTR_CLUSTER_VAL_CONFIG		(1<<25)
206 #define	NAN_ATTR_IF_ADDR_CONFIG			(1<<26)
207 #define	NAN_ATTR_OUI_CONFIG			(1<<27)
208 #define	NAN_ATTR_SUB_SID_BEACON_CONFIG		(1<<28)
209 #define NAN_IOVAR_NAME_SIZE	4u
210 #define NAN_XTLV_ID_LEN_SIZE OFFSETOF(bcm_xtlv_t, data)
211 #define NAN_RANGING_INDICATE_CONTINUOUS_MASK   0x01
212 #define NAN_RANGE_REQ_CMD 0
213 #define NAN_RNG_REQ_ACCEPTED_BY_HOST    1
214 #define NAN_RNG_REQ_REJECTED_BY_HOST    0
215 
216 #define NAN_RNG_GEOFENCE_MAX_RETRY_CNT	3u
217 
218 typedef uint32 nan_data_path_id;
219 
220 typedef enum nan_stop_reason_code {
221 	NAN_CONCURRENCY_CONFLICT = 0,
222 	NAN_USER_INITIATED = 1,
223 	NAN_BUS_IS_DOWN = 2,
224 	NAN_DEINITIALIZED = 3,
225 	NAN_COUNTRY_CODE_CHANGE = 4
226 } nan_stop_reason_code_t;
227 
228 typedef enum nan_range_status {
229 	NAN_RANGING_INVALID = 0,
230 	NAN_RANGING_REQUIRED = 1,
231 	NAN_RANGING_IN_PROGRESS = 2
232 } nan_range_status_t;
233 
234 typedef enum nan_range_role {
235 	NAN_RANGING_ROLE_INVALID = 0,
236 	NAN_RANGING_ROLE_INITIATOR = 1,
237 	NAN_RANGING_ROLE_RESPONDER = 2
238 } nan_range_role_t;
239 
240 typedef struct nan_svc_inst {
241 	uint8  inst_id;      /* publisher/subscriber id */
242 	uint8  inst_type;    /* publisher/subscriber */
243 } nan_svc_inst_t;
244 
245 /* Range Status Flag bits for svc info */
246 #define SVC_RANGE_REP_EVENT_ONCE 0x01
247 
248 /* Range Status Flag bits for svc info */
249 #define SVC_RANGE_REP_EVENT_ONCE 0x01
250 
251 typedef struct nan_svc_info {
252 	bool valid;
253 	nan_data_path_id ndp_id[NAN_MAX_SVC_INST];
254 	uint8 svc_hash[WL_NAN_SVC_HASH_LEN];        /* service hash */
255 	uint8 svc_id;
256 	uint8 ranging_required;
257 	uint8 ranging_ind;
258 	uint8 status;
259 	uint32 ranging_interval;
260 	uint32 ingress_limit;
261 	uint32 egress_limit;
262 	uint32 flags;
263 	uint8 tx_match_filter[MAX_MATCH_FILTER_LEN];        /* TX match filter */
264 	uint8 tx_match_filter_len;
265 	uint8 svc_range_status; /* For managing any svc range status flags */
266 } nan_svc_info_t;
267 
268 /* NAN Peer DP state */
269 typedef enum {
270 	NAN_PEER_DP_NOT_CONNECTED = 0,
271 	NAN_PEER_DP_CONNECTING = 1,
272 	NAN_PEER_DP_CONNECTED = 2
273 } nan_peer_dp_state_t;
274 
275 typedef struct nan_ndp_peer {
276 	uint8 peer_dp_state;
277 	uint8 dp_count;
278 	struct ether_addr peer_addr;
279 } nan_ndp_peer_t;
280 
281 #define INVALID_DISTANCE 0xFFFFFFFF
282 typedef struct nan_ranging_inst {
283 	uint8 range_id;
284 	nan_range_status_t range_status;
285 	struct ether_addr peer_addr;
286 	int range_type;
287 	uint8 num_svc_ctx;
288 	nan_svc_info_t *svc_idx[MAX_SUBSCRIBES];
289 	uint32 prev_distance_mm;
290 	nan_range_role_t range_role;
291 	bool in_use;
292 	uint8 geof_retry_count;
293 } nan_ranging_inst_t;
294 
295 #define DUMP_NAN_RTT_INST(inst) { printf("svc instance ID %d", (inst)->svc_inst_id); \
296 	printf("Range ID %d", (inst)->range_id); \
297 	printf("range_status %d", (inst)->range_status); \
298 	printf("Range Type %d", (inst)->range_type); \
299 	printf("Peer MAC "MACDBG"\n", MAC2STRDBG((inst)->peer_addr.octet)); \
300 	}
301 
302 #define DUMP_NAN_RTT_RPT(rpt) { printf("Range ID %d", (rpt)->rng_id); \
303 	printf("Distance in MM %d", (rpt)->dist_mm); \
304 	printf("range_indication %d", (rpt)->indication); \
305 	printf("Peer MAC "MACDBG"\n", MAC2STRDBG((rpt)->peer_m_addr.octet)); \
306 	}
307 /*
308  * Data request Initiator/Responder
309  * app/service related info
310  */
311 typedef struct nan_data_path_app_info {
312 	uint16 ndp_app_info_len;
313 	uint8 ndp_app_info[NAN_DP_MAX_APP_INFO_LEN];
314 } nan_data_path_app_info_t;
315 
316 /* QoS configuration */
317 typedef enum {
318 	NAN_DP_CONFIG_NO_QOS = 0,
319 	NAN_DP_CONFIG_QOS
320 } nan_data_path_qos_cfg_t;
321 
322 /* Data request Responder's response */
323 typedef enum {
324 	NAN_DP_REQUEST_ACCEPT = 0,
325 	NAN_DP_REQUEST_REJECT
326 } nan_data_path_response_code_t;
327 
328 /* NAN DP security Configuration */
329 typedef enum {
330 	NAN_DP_CONFIG_NO_SECURITY = 0,
331 	NAN_DP_CONFIG_SECURITY
332 } nan_data_path_security_cfg_status_t;
333 
334 /* NAN Security Key Input Type */
335 typedef enum {
336 	NAN_SECURITY_KEY_INPUT_PMK = 1,
337 	NAN_SECURITY_KEY_INPUT_PASSPHRASE
338 } nan_security_key_input_type;
339 
340 /* Configuration params of Data request Initiator/Responder */
341 typedef struct nan_data_path_cfg {
342 	/* Status Indicating Security/No Security */
343 	nan_data_path_security_cfg_status_t security_cfg;
344 	nan_data_path_qos_cfg_t qos_cfg;
345 } nan_data_path_cfg_t;
346 
347 enum nan_dp_states {
348 	NAN_DP_STATE_DISABLED = 0,
349 	NAN_DP_STATE_ENABLED = 1
350 };
351 
352 enum {
353 	SRF_TYPE_BLOOM_FILTER = 0,
354 	SRF_TYPE_SEQ_MAC_ADDR = 1
355 };
356 
357 /* NAN Match indication type */
358 typedef enum {
359     NAN_MATCH_ALG_MATCH_ONCE		= 0,
360     NAN_MATCH_ALG_MATCH_CONTINUOUS	= 1,
361     NAN_MATCH_ALG_MATCH_NEVER		= 2
362 } nan_match_alg;
363 
364 typedef struct nan_str_data {
365 	uint32 dlen;
366 	uint8 *data;
367 } nan_str_data_t;
368 
369 typedef struct nan_mac_list {
370 	uint32 num_mac_addr;
371 	uint8 *list;
372 } nan_mac_list_t;
373 
374 typedef struct wl_nan_sid_beacon_tune {
375 	uint8 sid_enable;	/* flag for sending service id in beacon */
376 	uint8 sid_count;	/* Limit for number of SIDs to be included in Beacons */
377 	uint8 sub_sid_enable;	/* flag for sending subscribe service id in beacon */
378 	uint8 sub_sid_count;	/* Limit for number of SUb SIDs to be included in Beacons */
379 } wl_nan_sid_beacon_ctrl_t;
380 
381 typedef struct nan_avail_cmd_data {
382 	chanspec_t chanspec[NAN_MAX_SOCIAL_CHANNELS];    /* channel */
383 	uint32 bmap;            /* bitmap */
384 	uint8 duration;
385 	uint8 avail_period;
386 	/* peer mac address reqd for ranging avail type */
387 	struct ether_addr peer_nmi;
388 	bool no_config_avail;
389 } nan_avail_cmd_data;
390 
391 typedef struct nan_discover_cmd_data {
392 	nan_str_data_t svc_info;        /* service information */
393 	nan_str_data_t sde_svc_info;	/* extended service information */
394 	nan_str_data_t svc_hash;        /* service hash */
395 	nan_str_data_t rx_match;        /* matching filter rx */
396 	nan_str_data_t tx_match;        /* matching filter tx */
397 	nan_str_data_t key;        /* Security key information */
398 	nan_str_data_t scid;        /* security context information */
399 	nan_data_path_cfg_t ndp_cfg;
400 	struct ether_addr mac_addr;     /* mac address */
401 	nan_mac_list_t mac_list;   /* mac list */
402 	wl_nan_instance_id_t pub_id;    /* publisher id */
403 	wl_nan_instance_id_t sub_id;    /* subscriber id */
404 	wl_nan_instance_id_t local_id;  /* Local id */
405 	wl_nan_instance_id_t remote_id; /* Remote id */
406 	uint32 status;
407 	uint32 ttl;             /* time to live */
408 	uint32 period;          /* publish period */
409 	uint32 flags;           /* Flag bits */
410 	bool sde_control_config; /* whether sde_control present */
411 	uint16 sde_control_flag;
412 	uint16 token; /* transmit fup token id */
413 	uint8 csid;	/* cipher suite type */
414 	nan_security_key_input_type key_type;	/* cipher suite type */
415 	uint8 priority;         /* Priority of Transmit */
416 	uint8 life_count;       /* life count of the instance */
417 	uint8 srf_type;         /* SRF type */
418 	uint8 srf_include;      /* SRF include */
419 	uint8 use_srf;          /* use SRF */
420 	uint8 recv_ind_flag;    /* Receive Indication Flag */
421 	uint8 disc_ind_cfg;	/* Discovery Ind cfg */
422 	uint8 ranging_indication;
423 	uint32 ranging_intvl_msec; /* ranging interval in msec */
424 	uint32 ingress_limit;
425 	uint32 egress_limit;
426 	bool response;
427 	uint8 service_responder_policy;
428 	bool svc_update;
429 } nan_discover_cmd_data_t;
430 
431 typedef struct nan_datapath_cmd_data {
432 	nan_avail_cmd_data avail_params;	/* Avail config params */
433 	nan_str_data_t svc_hash;        /* service hash */
434 	nan_str_data_t svc_info;        /* service information */
435 	nan_str_data_t key;        /* security key information */
436 	nan_data_path_response_code_t rsp_code;
437 	nan_data_path_id ndp_instance_id;
438 	nan_data_path_cfg_t ndp_cfg;
439 	wl_nan_instance_id_t pub_id;    /* publisher id */
440 	nan_security_key_input_type key_type;	/* cipher suite type */
441 	struct ether_addr if_addr;      /* if addr */
442 	struct ether_addr mac_addr;     /* mac address */
443 	chanspec_t chanspec[NAN_MAX_SOCIAL_CHANNELS];    /* channel */
444 	uint32 status;
445 	uint32 bmap;            /* bitmap */
446 	uint16 service_instance_id;
447 	uint16 sde_control_flag;
448 	uint8 csid;	/* cipher suite type */
449 	uint8 peer_disc_mac_addr[ETHER_ADDR_LEN];
450 	uint8 peer_ndi_mac_addr[ETHER_ADDR_LEN];
451 	uint8 num_ndp_instances;
452 	uint8 duration;
453 	char ndp_iface[IFNAMSIZ+1];
454 } nan_datapath_cmd_data_t;
455 
456 typedef struct nan_rssi_cmd_data {
457 	int8 rssi_middle_2dot4g_val;
458 	int8 rssi_close_2dot4g_val;
459 	int8 rssi_proximity_2dot4g_val;
460 	int8 rssi_proximity_5g_val;
461 	int8 rssi_middle_5g_val;
462 	int8 rssi_close_5g_val;
463 	uint16 rssi_window_size; /* Window size over which rssi calculated */
464 } nan_rssi_cmd_data_t;
465 
466 typedef struct election_metrics {
467 	uint8 random_factor;    /* Configured random factor */
468 	uint8 master_pref;     /* configured master preference */
469 } election_metrics_t;
470 
471 typedef struct nan_awake_dws {
472 	uint8 dw_interval_2g;   /* 2G DW interval */
473 	uint8 dw_interval_5g;   /* 5G DW interval */
474 } nan_awake_dws_t;
475 
476 typedef struct nan_config_cmd_data {
477 	nan_rssi_cmd_data_t rssi_attr;	/* RSSI related data */
478 	election_metrics_t metrics;
479 	nan_awake_dws_t awake_dws;	/* Awake DWs */
480 	nan_avail_cmd_data avail_params;	/* Avail config params */
481 	nan_str_data_t p2p_info;        /* p2p information */
482 	nan_str_data_t scid;        /* security context information */
483 	struct ether_addr clus_id;      /* cluster id */
484 	struct ether_addr mac_addr;     /* mac address */
485 	wl_nan_sid_beacon_ctrl_t sid_beacon;    /* sending service id in beacon */
486 	chanspec_t chanspec[NAN_MAX_SOCIAL_CHANNELS];    /* channel */
487 	uint32 status;
488 	uint32 bmap;            /* bitmap */
489 	uint32 nan_oui;         /* configured nan oui */
490 	uint32 warmup_time;     /* Warm up time */
491 	uint8 duration;
492 	uint8 hop_count_limit;  /* hop count limit */
493 	uint8 support_5g;       /* To decide dual band support */
494 	uint8 support_2g;       /* To decide dual band support */
495 	uint8 beacon_2g_val;
496 	uint8 beacon_5g_val;
497 	uint8 sdf_2g_val;
498 	uint8 sdf_5g_val;
499 	uint8 dwell_time[NAN_MAX_SOCIAL_CHANNELS];
500 	uint8 scan_period[NAN_MAX_SOCIAL_CHANNELS];
501 	uint8 config_cluster_val;
502 	uint8 disc_ind_cfg;	/* Discovery Ind cfg */
503 	uint8 csid;	/* cipher suite type */
504 	uint32 nmi_rand_intvl; /* nmi randomization interval */
505 } nan_config_cmd_data_t;
506 
507 typedef struct nan_event_hdr {
508 	uint32 flags;							/* future use */
509 	uint16 event_subtype;
510 } nan_event_hdr_t;
511 
512 typedef struct nan_event_data {
513 	uint8 svc_name[WL_NAN_SVC_HASH_LEN];    /* service name */
514 	uint8 enabled;        /* NAN Enabled */
515 	uint8 nan_de_evt_type;  /* DE event type */
516 	uint8 status;           /* status */
517 	uint8 ndp_id;           /* data path instance id */
518 	uint8 security;         /* data path security */
519 	uint8 type;
520 	uint8 attr_num;
521 	uint8 reason;          /* reason */
522 	wl_nan_instance_id_t pub_id;          /* publisher id */
523 	wl_nan_instance_id_t sub_id;          /* subscriber id */
524 	wl_nan_instance_id_t local_inst_id;   /* local instance id */
525 	wl_nan_instance_id_t requestor_id;    /* Requestor instance id */
526 	int publish_rssi;	/* discovery rssi value */
527 	int sub_rssi;	/* Sub rssi value */
528 	int fup_rssi;		/* followup rssi */
529 	uint16 attr_list_len;  /* sizeof attributes attached to payload */
530 	nan_str_data_t svc_info;        /* service info */
531 	nan_str_data_t vend_info;       /* vendor info */
532 	nan_str_data_t sde_svc_info;	/* extended service information */
533 	nan_str_data_t tx_match_filter;	/* tx match filter */
534 	nan_str_data_t rx_match_filter;	/* rx match filter */
535 	struct ether_addr local_nmi;      /* local nmi */
536 	struct ether_addr clus_id;        /* cluster id */
537 	struct ether_addr remote_nmi;     /* remote nmi */
538 	struct ether_addr initiator_ndi;        /* initiator_ndi */
539 	struct ether_addr responder_ndi;        /* responder_ndi */
540 	uint16 token; /* transmit fup token id */
541 	uint8 peer_cipher_suite; /* peer cipher suite type */
542 	nan_str_data_t scid;        /* security context information */
543 	char nan_reason[NAN_ERROR_STR_LEN]; /* Describe the NAN reason type */
544 	uint16 sde_control_flag;
545 	uint8 ranging_result_present;
546 	uint32 range_measurement_cm;
547 	uint32 ranging_ind;
548 	uint8 rng_id;
549 } nan_event_data_t;
550 
551 /*
552  *   Various NAN Protocol Response code
553 */
554 typedef enum {
555 	/* NAN Protocol Response Codes */
556 	NAN_STATUS_SUCCESS = 0,
557 	/*  NAN Discovery Engine/Host driver failures */
558 	NAN_STATUS_INTERNAL_FAILURE = 1,
559 	/*  NAN OTA failures */
560 	NAN_STATUS_PROTOCOL_FAILURE = 2,
561 	/* if the publish/subscribe id is invalid */
562 	NAN_STATUS_INVALID_PUBLISH_SUBSCRIBE_ID = 3,
563 	/* If we run out of resources allocated */
564 	NAN_STATUS_NO_RESOURCE_AVAILABLE = 4,
565 	/* if invalid params are passed */
566 	NAN_STATUS_INVALID_PARAM = 5,
567 	/*  if the requestor instance id is invalid */
568 	NAN_STATUS_INVALID_REQUESTOR_INSTANCE_ID = 6,
569 	/*  if the ndp id is invalid */
570 	NAN_STATUS_INVALID_NDP_ID = 7,
571 	/* if NAN is enabled when wifi is turned off */
572 	NAN_STATUS_NAN_NOT_ALLOWED = 8,
573 	/* if over the air ack is not received */
574 	NAN_STATUS_NO_OTA_ACK = 9,
575 	/* If NAN is already enabled and we are try to re-enable the same */
576 	NAN_STATUS_ALREADY_ENABLED = 10,
577 	/* If followup message internal queue is full */
578 	NAN_STATUS_FOLLOWUP_QUEUE_FULL = 11,
579 	/* Unsupported concurrency session enabled, NAN disabled notified */
580 	NAN_STATUS_UNSUPPORTED_CONCURRENCY_NAN_DISABLED = 12
581 } nan_status_type_t;
582 
583 typedef struct {
584 	nan_status_type_t status;
585 	char nan_reason[NAN_ERROR_STR_LEN]; /* Describe the NAN reason type */
586 } nan_hal_status_t;
587 
588 typedef struct nan_parse_event_ctx {
589 	struct bcm_cfg80211 *cfg;
590 	nan_event_data_t *nan_evt_data;
591 } nan_parse_event_ctx_t;
592 
593 /* Capabilities info supported by FW */
594 typedef struct nan_hal_capabilities {
595 	uint32 max_concurrent_nan_clusters;
596 	uint32 max_publishes;
597 	uint32 max_subscribes;
598 	uint32 max_service_name_len;
599 	uint32 max_match_filter_len;
600 	uint32 max_total_match_filter_len;
601 	uint32 max_service_specific_info_len;
602 	uint32 max_vsa_data_len;
603 	uint32 max_mesh_data_len;
604 	uint32 max_ndi_interfaces;
605 	uint32 max_ndp_sessions;
606 	uint32 max_app_info_len;
607 	uint32 max_queued_transmit_followup_msgs;
608 	uint32 ndp_supported_bands;
609 	uint32 cipher_suites_supported;
610 	uint32 max_scid_len;
611 	bool is_ndp_security_supported;
612 	uint32 max_sdea_service_specific_info_len;
613 	uint32 max_subscribe_address;
614 	uint32 ndpe_attr_supported;
615 } nan_hal_capabilities_t;
616 
617 typedef struct _nan_hal_resp {
618 	uint16 instance_id;
619 	uint16 subcmd;
620 	int32 status;
621 	int32 value;
622 	/* Identifier for the instance of the NDP */
623 	uint16 ndp_instance_id;
624 	/* Publisher NMI */
625 	uint8 pub_nmi[NAN_MAC_ADDR_LEN];
626 	/* SVC_HASH */
627 	uint8 svc_hash[WL_NAN_SVC_HASH_LEN];
628 	char nan_reason[NAN_ERROR_STR_LEN]; /* Describe the NAN reason type */
629 	char pad[3];
630 	nan_hal_capabilities_t capabilities;
631 } nan_hal_resp_t;
632 
633 typedef struct wl_nan_iov {
634 	uint16 nan_iov_len;
635 	uint8 *nan_iov_buf;
636 } wl_nan_iov_t;
637 
638 #ifdef WL_NAN_DISC_CACHE
639 
640 #define NAN_MAX_CACHE_DISC_RESULT 16
641 typedef struct {
642 	bool valid;
643 	wl_nan_instance_id_t pub_id;
644 	wl_nan_instance_id_t sub_id;
645 	uint8 svc_hash[WL_NAN_SVC_HASH_LEN];
646 	struct ether_addr peer;
647 	int8 publish_rssi;
648 	uint8 peer_cipher_suite;
649 	uint8 security;
650 	nan_str_data_t svc_info;        /* service info */
651 	nan_str_data_t vend_info;       /* vendor info */
652 	nan_str_data_t sde_svc_info;	/* extended service information */
653 	nan_str_data_t tx_match_filter; /* tx match filter */
654 	uint16 sde_control_flag;
655 } nan_disc_result_cache;
656 
657 typedef struct nan_datapath_sec_info {
658 	nan_data_path_id ndp_instance_id;
659 	wl_nan_instance_id_t pub_id;    /* publisher id */
660 	struct ether_addr mac_addr;     /* mac address */
661 } nan_datapath_sec_info_cmd_data_t;
662 #endif /* WL_NAN_DISC_CACHE */
663 
664 typedef enum {
665 	NAN_RANGING_AUTO_RESPONSE_ENABLE = 0,
666 	NAN_RANGING_AUTO_RESPONSE_DISABLE
667 } NanRangingAutoResponseCfg;
668 
669 extern int wl_cfgnan_set_vars_cbfn(void *ctx, const uint8 *tlv_buf,
670 	uint16 type, uint16 len);
671 extern int wl_cfgnan_config_eventmask(struct net_device *ndev, struct bcm_cfg80211 *cfg,
672 	uint8 event_ind_flag, bool disable_events);
673 extern int wl_cfgnan_start_handler(struct net_device *ndev,
674 	struct bcm_cfg80211 *cfg, nan_config_cmd_data_t *cmd_data, uint32 nan_attr_mask);
675 extern int wl_cfgnan_stop_handler(struct net_device *ndev, struct bcm_cfg80211 *cfg);
676 extern void wl_cfgnan_delayed_disable(struct work_struct *work);
677 extern int wl_cfgnan_config_handler(struct net_device *ndev,
678 	struct bcm_cfg80211 *cfg, nan_config_cmd_data_t *cmd_data, uint32 nan_attr_mask);
679 extern int wl_cfgnan_support_handler(struct net_device *ndev,
680 	struct bcm_cfg80211 *cfg, nan_config_cmd_data_t *cmd_data);
681 extern int wl_cfgnan_status_handler(struct net_device *ndev,
682 	struct bcm_cfg80211 *cfg, nan_config_cmd_data_t *cmd_data);
683 extern int wl_cfgnan_publish_handler(struct net_device *ndev,
684 	struct bcm_cfg80211 *cfg, nan_discover_cmd_data_t *cmd_data);
685 extern int wl_cfgnan_subscribe_handler(struct net_device *ndev,
686 	struct bcm_cfg80211 *cfg, nan_discover_cmd_data_t *cmd_data);
687 extern int wl_cfgnan_cancel_pub_handler(struct net_device *ndev,
688 	struct bcm_cfg80211 *cfg, nan_discover_cmd_data_t *cmd_data);
689 extern int wl_cfgnan_cancel_sub_handler(struct net_device *ndev,
690 	struct bcm_cfg80211 *cfg, nan_discover_cmd_data_t *cmd_data);
691 extern int wl_cfgnan_transmit_handler(struct net_device *ndev,
692 	struct bcm_cfg80211 *cfg, nan_discover_cmd_data_t *cmd_data);
693 extern s32 wl_cfgnan_notify_nan_status(struct bcm_cfg80211 *cfg,
694 	bcm_struct_cfgdev *cfgdev, const wl_event_msg_t *e, void *data);
695 extern int wl_cfgnan_generate_inst_id(struct bcm_cfg80211 *cfg, uint8 *p_inst_id);
696 extern int wl_cfgnan_remove_inst_id(struct bcm_cfg80211 *cfg, uint8 inst_id);
697 extern int bcm_xtlv_size_for_data(int dlen, bcm_xtlv_opts_t opts);
698 extern int wl_cfgnan_get_capablities_handler(struct net_device *ndev,
699 	struct bcm_cfg80211 *cfg, nan_hal_capabilities_t *capabilities);
700 
701 extern int wl_cfgnan_data_path_iface_create_delete_handler(struct net_device *ndev,
702 	struct bcm_cfg80211 *cfg, char *ifname, uint16 type, uint8 busstate);
703 extern int wl_cfgnan_data_path_request_handler(struct net_device *ndev,
704 	struct bcm_cfg80211 *cfg, nan_datapath_cmd_data_t *cmd_data,
705 	uint8 *ndp_instance_id);
706 extern int wl_cfgnan_data_path_response_handler(struct net_device *ndev,
707 	struct bcm_cfg80211 *cfg, nan_datapath_cmd_data_t *cmd_data);
708 extern int wl_cfgnan_data_path_end_handler(struct net_device *ndev,
709 	struct bcm_cfg80211 *cfg, nan_data_path_id ndp_instance_id,
710 	int *status);
711 
712 #ifdef WL_NAN_DISC_CACHE
713 extern int wl_cfgnan_sec_info_handler(struct bcm_cfg80211 *cfg,
714 	nan_datapath_sec_info_cmd_data_t *cmd_data, nan_hal_resp_t *nan_req_resp);
715 /* ranging quest and response iovar handler */
716 extern int wl_cfgnan_trigger_ranging(struct net_device *ndev,
717 	struct bcm_cfg80211 *cfg, void *event_data, nan_svc_info_t *svc,
718 	uint8 range_req, bool accept_req);
719 #endif /* WL_NAN_DISC_CACHE */
720 void wl_cfgnan_disable_cleanup(struct bcm_cfg80211 *cfg);
721 void wl_cfgnan_deinit_cleanup(struct bcm_cfg80211 *cfg);
722 
723 extern bool wl_cfgnan_is_dp_active(struct net_device *ndev);
724 extern s32 wl_cfgnan_get_ndi_idx(struct bcm_cfg80211 *cfg);
725 extern s32 wl_cfgnan_add_ndi_data(struct bcm_cfg80211 *cfg, s32 idx, char *name);
726 extern s32 wl_cfgnan_del_ndi_data(struct bcm_cfg80211 *cfg, char *name);
727 extern struct wl_ndi_data *wl_cfgnan_get_ndi_data(struct bcm_cfg80211 *cfg, char *name);
728 extern int wl_cfgnan_disable(struct bcm_cfg80211 *cfg);
729 extern nan_ranging_inst_t *wl_cfgnan_get_ranging_inst(struct bcm_cfg80211 *cfg,
730 	struct ether_addr *peer, nan_range_role_t range_role);
731 extern nan_ranging_inst_t* wl_cfgnan_check_for_ranging(struct bcm_cfg80211 *cfg,
732 	struct ether_addr *peer);
733 #ifdef RTT_SUPPORT
734 extern int wl_cfgnan_trigger_geofencing_ranging(struct net_device *dev,
735 	struct ether_addr *peer_addr);
736 #endif /* RTT_SUPPORT */
737 extern int wl_cfgnan_suspend_geofence_rng_session(struct net_device *ndev,
738 	struct ether_addr *peer, int suspend_reason, u8 cancel_flags);
739 extern nan_ndp_peer_t* wl_cfgnan_data_get_peer(struct bcm_cfg80211 *cfg,
740 	struct ether_addr *peer_addr);
741 bool wl_cfgnan_data_dp_exists(struct bcm_cfg80211 *cfg);
742 bool wl_cfgnan_data_dp_exists_with_peer(struct bcm_cfg80211 *cfg,
743 	struct ether_addr *peer_addr);
744 extern s32 wl_cfgnan_delete_ndp(struct bcm_cfg80211 *cfg, struct net_device *nan_ndev);
745 void wl_cfgnan_data_set_peer_dp_state(struct bcm_cfg80211 *cfg,
746 	struct ether_addr *peer_addr, nan_peer_dp_state_t state);
747 #ifdef RTT_SUPPORT
748 int wl_cfgnan_terminate_directed_rtt_sessions(struct net_device *ndev, struct bcm_cfg80211 *cfg);
749 void wl_cfgnan_reset_geofence_ranging(struct bcm_cfg80211 *cfg,
750 	nan_ranging_inst_t * rng_inst, int sched_reason);
751 void wl_cfgnan_process_range_report(struct bcm_cfg80211 *cfg,
752 	wl_nan_ev_rng_rpt_ind_t *range_res);
753 #endif /* RTT_SUPPORT */
754 int wl_cfgnan_cancel_ranging(struct net_device *ndev,
755 	struct bcm_cfg80211 *cfg, uint8 range_id, uint8 flags, uint32 *status);
756 bool wl_cfgnan_ranging_allowed(struct bcm_cfg80211 *cfg);
757 uint8 wl_cfgnan_cancel_rng_responders(struct net_device *ndev,
758 	struct bcm_cfg80211 *cfg);
759 extern int wl_cfgnan_get_status(struct net_device *ndev, wl_nan_conf_status_t *nan_status);
760 extern void wl_cfgnan_update_dp_info(struct bcm_cfg80211 *cfg, bool add,
761 	nan_data_path_id ndp_id);
762 nan_status_type_t wl_cfgvendor_brcm_to_nanhal_status(int32 vendor_status);
763 
764 typedef enum {
765 	NAN_ATTRIBUTE_HEADER                            = 100,
766 	NAN_ATTRIBUTE_HANDLE                            = 101,
767 	NAN_ATTRIBUTE_TRANSAC_ID                        = 102,
768 
769 	/* NAN Enable request attributes */
770 	NAN_ATTRIBUTE_2G_SUPPORT                        = 103,
771 	NAN_ATTRIBUTE_5G_SUPPORT                        = 104,
772 	NAN_ATTRIBUTE_CLUSTER_LOW                       = 105,
773 	NAN_ATTRIBUTE_CLUSTER_HIGH                      = 106,
774 	NAN_ATTRIBUTE_SID_BEACON                        = 107,
775 	NAN_ATTRIBUTE_SYNC_DISC_2G_BEACON               = 108,
776 	NAN_ATTRIBUTE_SYNC_DISC_5G_BEACON               = 109,
777 	NAN_ATTRIBUTE_SDF_2G_SUPPORT                    = 110,
778 	NAN_ATTRIBUTE_SDF_5G_SUPPORT                    = 111,
779 	NAN_ATTRIBUTE_RSSI_CLOSE                        = 112,
780 	NAN_ATTRIBUTE_RSSI_MIDDLE                       = 113,
781 	NAN_ATTRIBUTE_RSSI_PROXIMITY                    = 114,
782 	NAN_ATTRIBUTE_HOP_COUNT_LIMIT                   = 115,
783 	NAN_ATTRIBUTE_RANDOM_TIME                       = 116,
784 	NAN_ATTRIBUTE_MASTER_PREF                       = 117,
785 	NAN_ATTRIBUTE_PERIODIC_SCAN_INTERVAL            = 118,
786 
787 	/* Nan Publish/Subscribe request attributes */
788 	NAN_ATTRIBUTE_PUBLISH_ID                        = 119,
789 	NAN_ATTRIBUTE_TTL                               = 120,
790 	NAN_ATTRIBUTE_PERIOD                            = 121,
791 	NAN_ATTRIBUTE_REPLIED_EVENT_FLAG                = 122,
792 	NAN_ATTRIBUTE_PUBLISH_TYPE                      = 123,
793 	NAN_ATTRIBUTE_TX_TYPE                           = 124,
794 	NAN_ATTRIBUTE_PUBLISH_COUNT                     = 125,
795 	NAN_ATTRIBUTE_SERVICE_NAME_LEN                  = 126,
796 	NAN_ATTRIBUTE_SERVICE_NAME                      = 127,
797 	NAN_ATTRIBUTE_SERVICE_SPECIFIC_INFO_LEN         = 128,
798 	NAN_ATTRIBUTE_SERVICE_SPECIFIC_INFO             = 129,
799 	NAN_ATTRIBUTE_RX_MATCH_FILTER_LEN               = 130,
800 	NAN_ATTRIBUTE_RX_MATCH_FILTER                   = 131,
801 	NAN_ATTRIBUTE_TX_MATCH_FILTER_LEN               = 132,
802 	NAN_ATTRIBUTE_TX_MATCH_FILTER                   = 133,
803 	NAN_ATTRIBUTE_SUBSCRIBE_ID                      = 134,
804 	NAN_ATTRIBUTE_SUBSCRIBE_TYPE                    = 135,
805 	NAN_ATTRIBUTE_SERVICERESPONSEFILTER             = 136,
806 	NAN_ATTRIBUTE_SERVICERESPONSEINCLUDE            = 137,
807 	NAN_ATTRIBUTE_USESERVICERESPONSEFILTER          = 138,
808 	NAN_ATTRIBUTE_SSIREQUIREDFORMATCHINDICATION     = 139,
809 	NAN_ATTRIBUTE_SUBSCRIBE_MATCH                   = 140,
810 	NAN_ATTRIBUTE_SUBSCRIBE_COUNT                   = 141,
811 	NAN_ATTRIBUTE_MAC_ADDR                          = 142,
812 	NAN_ATTRIBUTE_MAC_ADDR_LIST                     = 143,
813 	NAN_ATTRIBUTE_MAC_ADDR_LIST_NUM_ENTRIES         = 144,
814 	NAN_ATTRIBUTE_PUBLISH_MATCH                     = 145,
815 
816 	/* Nan Event attributes */
817 	NAN_ATTRIBUTE_ENABLE_STATUS                     = 146,
818 	NAN_ATTRIBUTE_JOIN_STATUS                       = 147,
819 	NAN_ATTRIBUTE_ROLE                              = 148,
820 	NAN_ATTRIBUTE_MASTER_RANK                       = 149,
821 	NAN_ATTRIBUTE_ANCHOR_MASTER_RANK                = 150,
822 	NAN_ATTRIBUTE_CNT_PEND_TXFRM                    = 151,
823 	NAN_ATTRIBUTE_CNT_BCN_TX                        = 152,
824 	NAN_ATTRIBUTE_CNT_BCN_RX                        = 153,
825 	NAN_ATTRIBUTE_CNT_SVC_DISC_TX                   = 154,
826 	NAN_ATTRIBUTE_CNT_SVC_DISC_RX                   = 155,
827 	NAN_ATTRIBUTE_AMBTT                             = 156,
828 	NAN_ATTRIBUTE_CLUSTER_ID                        = 157,
829 	NAN_ATTRIBUTE_INST_ID                           = 158,
830 	NAN_ATTRIBUTE_OUI                               = 159,
831 	NAN_ATTRIBUTE_STATUS                            = 160,
832 	NAN_ATTRIBUTE_DE_EVENT_TYPE                     = 161,
833 	NAN_ATTRIBUTE_MERGE                             = 162,
834 	NAN_ATTRIBUTE_IFACE                             = 163,
835 	NAN_ATTRIBUTE_CHANNEL                           = 164,
836 	NAN_ATTRIBUTE_PEER_ID                           = 165,
837 	NAN_ATTRIBUTE_NDP_ID                            = 167,
838 	NAN_ATTRIBUTE_SECURITY                          = 168,
839 	NAN_ATTRIBUTE_QOS                               = 169,
840 	NAN_ATTRIBUTE_RSP_CODE                          = 170,
841 	NAN_ATTRIBUTE_INST_COUNT                        = 171,
842 	NAN_ATTRIBUTE_PEER_DISC_MAC_ADDR                = 172,
843 	NAN_ATTRIBUTE_PEER_NDI_MAC_ADDR                 = 173,
844 	NAN_ATTRIBUTE_IF_ADDR                           = 174,
845 	NAN_ATTRIBUTE_WARMUP_TIME                       = 175,
846 	NAN_ATTRIBUTE_RECV_IND_CFG                      = 176,
847 	NAN_ATTRIBUTE_RSSI_CLOSE_5G                     = 177,
848 	NAN_ATTRIBUTE_RSSI_MIDDLE_5G                    = 178,
849 	NAN_ATTRIBUTE_RSSI_PROXIMITY_5G                 = 179,
850 	NAN_ATTRIBUTE_CONNMAP                           = 180,
851 	NAN_ATTRIBUTE_24G_CHANNEL                       = 181,
852 	NAN_ATTRIBUTE_5G_CHANNEL                        = 182,
853 	NAN_ATTRIBUTE_DWELL_TIME                        = 183,
854 	NAN_ATTRIBUTE_SCAN_PERIOD                       = 184,
855 	NAN_ATTRIBUTE_RSSI_WINDOW_SIZE			= 185,
856 	NAN_ATTRIBUTE_CONF_CLUSTER_VAL			= 186,
857 	NAN_ATTRIBUTE_AVAIL_BIT_MAP                     = 187,
858 	NAN_ATTRIBUTE_ENTRY_CONTROL			= 188,
859 	NAN_ATTRIBUTE_CIPHER_SUITE_TYPE                 = 189,
860 	NAN_ATTRIBUTE_KEY_TYPE                          = 190,
861 	NAN_ATTRIBUTE_KEY_LEN                           = 191,
862 	NAN_ATTRIBUTE_SCID                              = 192,
863 	NAN_ATTRIBUTE_SCID_LEN                          = 193,
864 	NAN_ATTRIBUTE_SDE_CONTROL_CONFIG_DP             = 194,
865 	NAN_ATTRIBUTE_SDE_CONTROL_SECURITY		= 195,
866 	NAN_ATTRIBUTE_SDE_CONTROL_DP_TYPE		= 196,
867 	NAN_ATTRIBUTE_SDE_CONTROL_RANGE_SUPPORT		= 197,
868 	NAN_ATTRIBUTE_NO_CONFIG_AVAIL			= 198,
869 	NAN_ATTRIBUTE_2G_AWAKE_DW			= 199,
870 	NAN_ATTRIBUTE_5G_AWAKE_DW			= 200,
871 	NAN_ATTRIBUTE_RANGING_INTERVAL			= 201,
872 	NAN_ATTRIBUTE_RANGING_INDICATION		= 202,
873 	NAN_ATTRIBUTE_RANGING_INGRESS_LIMIT		= 203,
874 	NAN_ATTRIBUTE_RANGING_EGRESS_LIMIT		= 204,
875 	NAN_ATTRIBUTE_RANGING_AUTO_ACCEPT		= 205,
876 	NAN_ATTRIBUTE_RANGING_RESULT			= 206,
877 	NAN_ATTRIBUTE_DISC_IND_CFG			= 207,
878 	NAN_ATTRIBUTE_RSSI_THRESHOLD_FLAG		= 208,
879 	NAN_ATTRIBUTE_KEY_DATA                          = 209,
880 	NAN_ATTRIBUTE_SDEA_SERVICE_SPECIFIC_INFO_LEN    = 210,
881 	NAN_ATTRIBUTE_SDEA_SERVICE_SPECIFIC_INFO        = 211,
882 	NAN_ATTRIBUTE_REASON				= 212,
883 	NAN_ATTRIBUTE_DWELL_TIME_5G                     = 215,
884 	NAN_ATTRIBUTE_SCAN_PERIOD_5G                    = 216,
885 	NAN_ATTRIBUTE_SVC_RESPONDER_POLICY              = 217,
886 	NAN_ATTRIBUTE_EVENT_MASK			= 218,
887 	NAN_ATTRIBUTE_SUB_SID_BEACON                    = 219,
888 	NAN_ATTRIBUTE_RANDOMIZATION_INTERVAL            = 220,
889 	NAN_ATTRIBUTE_CMD_RESP_DATA			= 221
890 } NAN_ATTRIBUTE;
891 
892 enum geofence_suspend_reason {
893 	RTT_GEO_SUSPN_HOST_DIR_RTT_TRIG = 0,
894 	RTT_GEO_SUSPN_PEER_RTT_TRIGGER = 1,
895 	RTT_GEO_SUSPN_HOST_NDP_TRIGGER = 2,
896 	RTT_GEO_SUSPN_PEER_NDP_TRIGGER = 3,
897 	RTT_GEO_SUSPN_RANGE_RES_REPORTED = 4
898 };
899 #endif	/* _wl_cfgnan_h_ */
900