1/*!
2 *  @file	host_interface.h
3 *  @brief	File containg host interface APIs
4 *  @author	zsalah
5 *  @sa		host_interface.c
6 *  @date	8 March 2012
7 *  @version	1.0
8 */
9
10#ifndef HOST_INT_H
11#define HOST_INT_H
12
13#include "coreconfigurator.h"
14
15#define IP_ALEN  4
16
17#define IDLE_MODE	0x00
18#define AP_MODE		0x01
19#define STATION_MODE	0x02
20#define GO_MODE		0x03
21#define CLIENT_MODE	0x04
22
23
24#define MAX_NUM_STA				9
25#define ACTIVE_SCAN_TIME			10
26#define PASSIVE_SCAN_TIME			1200
27#define MIN_SCAN_TIME				10
28#define MAX_SCAN_TIME				1200
29#define DEFAULT_SCAN				0
30#define USER_SCAN				BIT(0)
31#define OBSS_PERIODIC_SCAN			BIT(1)
32#define OBSS_ONETIME_SCAN			BIT(2)
33#define GTK_RX_KEY_BUFF_LEN			24
34#define ADDKEY					0x1
35#define REMOVEKEY				0x2
36#define DEFAULTKEY				0x4
37#define ADDKEY_AP				0x8
38#define MAX_NUM_SCANNED_NETWORKS		100
39#define MAX_NUM_SCANNED_NETWORKS_SHADOW		130
40#define MAX_NUM_PROBED_SSID			10
41#define CHANNEL_SCAN_TIME			250
42
43#define TX_MIC_KEY_LEN				8
44#define RX_MIC_KEY_LEN				8
45#define PTK_KEY_LEN				16
46
47#define TX_MIC_KEY_MSG_LEN			26
48#define RX_MIC_KEY_MSG_LEN			48
49#define PTK_KEY_MSG_LEN				39
50
51#define PMKSA_KEY_LEN				22
52#define ETH_ALEN				6
53#define PMKID_LEN				16
54#define WILC_MAX_NUM_PMKIDS			16
55#define WILC_SUPP_MCS_SET_SIZE			16
56#define WILC_ADD_STA_LENGTH			40
57#define SCAN_EVENT_DONE_ABORTED
58#define NUM_CONCURRENT_IFC			2
59
60struct rf_info {
61	u8 u8LinkSpeed;
62	s8 s8RSSI;
63	u32 u32TxCount;
64	u32 u32RxCount;
65	u32 u32TxFailureCount;
66};
67
68enum host_if_state {
69	HOST_IF_IDLE			= 0,
70	HOST_IF_SCANNING		= 1,
71	HOST_IF_CONNECTING		= 2,
72	HOST_IF_WAITING_CONN_RESP	= 3,
73	HOST_IF_CONNECTED		= 4,
74	HOST_IF_P2P_LISTEN		= 5,
75	HOST_IF_FORCE_32BIT		= 0xFFFFFFFF
76};
77
78struct host_if_pmkid {
79	u8 bssid[ETH_ALEN];
80	u8 pmkid[PMKID_LEN];
81};
82
83struct host_if_pmkid_attr {
84	u8 numpmkid;
85	struct host_if_pmkid pmkidlist[WILC_MAX_NUM_PMKIDS];
86};
87
88enum CURRENT_TXRATE {
89	AUTORATE	= 0,
90	MBPS_1		= 1,
91	MBPS_2		= 2,
92	MBPS_5_5	= 5,
93	MBPS_11		= 11,
94	MBPS_6		= 6,
95	MBPS_9		= 9,
96	MBPS_12		= 12,
97	MBPS_18		= 18,
98	MBPS_24		= 24,
99	MBPS_36		= 36,
100	MBPS_48		= 48,
101	MBPS_54		= 54
102};
103
104struct cfg_param_val {
105	u32 flag;
106	u8 ht_enable;
107	u8 bss_type;
108	u8 auth_type;
109	u16 auth_timeout;
110	u8 power_mgmt_mode;
111	u16 short_retry_limit;
112	u16 long_retry_limit;
113	u16 frag_threshold;
114	u16 rts_threshold;
115	u16 preamble_type;
116	u8 short_slot_allowed;
117	u8 txop_prot_disabled;
118	u16 beacon_interval;
119	u16 dtim_period;
120	enum SITESURVEY site_survey_enabled;
121	u16 site_survey_scan_time;
122	u8 scan_source;
123	u16 active_scan_time;
124	u16 passive_scan_time;
125	enum CURRENT_TXRATE curr_tx_rate;
126
127};
128
129enum cfg_param {
130	RETRY_SHORT		= BIT(0),
131	RETRY_LONG		= BIT(1),
132	FRAG_THRESHOLD		= BIT(2),
133	RTS_THRESHOLD		= BIT(3),
134	BSS_TYPE		= BIT(4),
135	AUTH_TYPE		= BIT(5),
136	AUTHEN_TIMEOUT		= BIT(6),
137	POWER_MANAGEMENT	= BIT(7),
138	PREAMBLE		= BIT(8),
139	SHORT_SLOT_ALLOWED	= BIT(9),
140	TXOP_PROT_DISABLE	= BIT(10),
141	BEACON_INTERVAL		= BIT(11),
142	DTIM_PERIOD		= BIT(12),
143	SITE_SURVEY		= BIT(13),
144	SITE_SURVEY_SCAN_TIME	= BIT(14),
145	ACTIVE_SCANTIME		= BIT(15),
146	PASSIVE_SCANTIME	= BIT(16),
147	CURRENT_TX_RATE		= BIT(17),
148	HT_ENABLE		= BIT(18),
149};
150
151struct found_net_info {
152	u8 au8bssid[6];
153	s8 s8rssi;
154};
155
156enum scan_event {
157	SCAN_EVENT_NETWORK_FOUND	= 0,
158	SCAN_EVENT_DONE			= 1,
159	SCAN_EVENT_ABORTED		= 2,
160	SCAN_EVENT_FORCE_32BIT		= 0xFFFFFFFF
161};
162
163enum conn_event {
164	CONN_DISCONN_EVENT_CONN_RESP		= 0,
165	CONN_DISCONN_EVENT_DISCONN_NOTIF	= 1,
166	CONN_DISCONN_EVENT_FORCE_32BIT		= 0xFFFFFFFF
167};
168
169enum KEY_TYPE {
170	WEP,
171	WPARxGtk,
172	WPAPtk,
173	PMKSA,
174};
175
176
177/*Scan callBack function definition*/
178typedef void (*wilc_scan_result)(enum scan_event, tstrNetworkInfo *,
179				  void *, void *);
180
181/*Connect callBack function definition*/
182typedef void (*wilc_connect_result)(enum conn_event,
183				     tstrConnectInfo *,
184				     u8,
185				     tstrDisconnectNotifInfo *,
186				     void *);
187
188typedef void (*wilc_remain_on_chan_expired)(void *, u32);  /*Remain on channel expiration callback function*/
189typedef void (*wilc_remain_on_chan_ready)(void *); /*Remain on channel callback function*/
190
191/*!
192 *  @struct             rcvd_net_info
193 *  @brief		Structure to hold Received Asynchronous Network info
194 *  @details
195 *  @todo
196 *  @sa
197 *  @author		Mostafa Abu Bakr
198 *  @date		25 March 2012
199 *  @version		1.0
200 */
201struct rcvd_net_info {
202	u8 *buffer;
203	u32 len;
204};
205
206struct hidden_net_info {
207	u8  *pu8ssid;
208	u8 u8ssidlen;
209};
210
211struct hidden_network {
212	struct hidden_net_info *pstrHiddenNetworkInfo;
213	u8 u8ssidnum;
214};
215
216struct user_scan_req {
217	/* Scan user call back function */
218	wilc_scan_result pfUserScanResult;
219
220	/* User specific parameter to be delivered through the Scan User Callback function */
221	void *u32UserScanPvoid;
222
223	u32 u32RcvdChCount;
224	struct found_net_info astrFoundNetworkInfo[MAX_NUM_SCANNED_NETWORKS];
225};
226
227struct user_conn_req {
228	u8 *pu8bssid;
229	u8 *pu8ssid;
230	u8 u8security;
231	enum AUTHTYPE tenuAuth_type;
232	size_t ssidLen;
233	u8 *pu8ConnReqIEs;
234	size_t ConnReqIEsLen;
235	/* Connect user call back function */
236	wilc_connect_result pfUserConnectResult;
237	bool IsHTCapable;
238	/* User specific parameter to be delivered through the Connect User Callback function */
239	void *u32UserConnectPvoid;
240};
241
242struct drv_handler {
243	u32 handler;
244};
245
246struct op_mode {
247	u32 mode;
248};
249
250struct set_mac_addr {
251	u8 mac_addr[ETH_ALEN];
252};
253
254struct get_mac_addr {
255	u8 *mac_addr;
256};
257
258struct ba_session_info {
259	u8 au8Bssid[ETH_ALEN];
260	u8 u8Ted;
261	u16 u16BufferSize;
262	u16 u16SessionTimeout;
263};
264
265struct remain_ch {
266	u16 u16Channel;
267	u32 u32duration;
268	wilc_remain_on_chan_expired pRemainOnChanExpired;
269	wilc_remain_on_chan_ready pRemainOnChanReady;
270	void *pVoid;
271	u32 u32ListenSessionID;
272};
273
274struct reg_frame {
275	bool bReg;
276	u16 u16FrameType;
277	u8 u8Regid;
278};
279
280
281#define ACTION			0xD0
282#define PROBE_REQ		0x40
283#define PROBE_RESP		0x50
284#define ACTION_FRM_IDX		0
285#define PROBE_REQ_IDX		1
286
287
288enum p2p_listen_state {
289	P2P_IDLE,
290	P2P_LISTEN,
291	P2P_GRP_FORMATION
292};
293
294struct host_if_drv {
295	struct user_scan_req usr_scan_req;
296	struct user_conn_req usr_conn_req;
297	struct remain_ch remain_on_ch;
298	u8 remain_on_ch_pending;
299	u64 u64P2p_MgmtTimeout;
300	u8 u8P2PConnect;
301
302	enum host_if_state enuHostIFstate;
303
304	u8 au8AssociatedBSSID[ETH_ALEN];
305	struct cfg_param_val strCfgValues;
306/* semaphores */
307	struct semaphore gtOsCfgValuesSem;
308	struct semaphore hSemTestKeyBlock;
309
310	struct semaphore hSemTestDisconnectBlock;
311	struct semaphore hSemGetRSSI;
312	struct semaphore hSemGetLINKSPEED;
313	struct semaphore hSemGetCHNL;
314	struct semaphore hSemInactiveTime;
315/* timer handlers */
316	struct timer_list hScanTimer;
317	struct timer_list hConnectTimer;
318	struct timer_list hRemainOnChannel;
319
320	bool IFC_UP;
321};
322
323struct add_sta_param {
324	u8 au8BSSID[ETH_ALEN];
325	u16 u16AssocID;
326	u8 u8NumRates;
327	const u8 *pu8Rates;
328	bool bIsHTSupported;
329	u16 u16HTCapInfo;
330	u8 u8AmpduParams;
331	u8 au8SuppMCsSet[16];
332	u16 u16HTExtParams;
333	u32 u32TxBeamformingCap;
334	u8 u8ASELCap;
335	u16 u16FlagsMask;               /*<! Determines which of u16FlagsSet were changed>*/
336	u16 u16FlagsSet;                /*<! Decoded according to tenuWILC_StaFlag */
337};
338
339/*****************************************************************************/
340/*																			 */
341/*							Host Interface API								 */
342/*																			 */
343/*****************************************************************************/
344
345/**
346 *  @brief              removes wpa/wpa2 keys
347 *  @details    only in BSS STA mode if External Supplicant support is enabled.
348 *                              removes all WPA/WPA2 station key entries from MAC hardware.
349 *  @param[in,out] handle to the wifi driver
350 *  @param[in]  6 bytes of Station Adress in the station entry table
351 *  @return             Error code indicating success/failure
352 *  @note
353 *  @author		zsalah
354 *  @date		8 March 2012
355 *  @version		1.0
356 */
357s32 host_int_remove_key(struct host_if_drv *hWFIDrv, const u8 *pu8StaAddress);
358/**
359 *  @brief              removes WEP key
360 *  @details    valid only in BSS STA mode if External Supplicant support is enabled.
361 *                              remove a WEP key entry from MAC HW.
362 *                              The BSS Station automatically finds the index of the entry using its
363 *                              BSS ID and removes that entry from the MAC hardware.
364 *  @param[in,out] handle to the wifi driver
365 *  @param[in]  6 bytes of Station Adress in the station entry table
366 *  @return             Error code indicating success/failure
367 *  @note               NO need for the STA add since it is not used for processing
368 *  @author		zsalah
369 *  @date		8 March 2012
370 *  @version		1.0
371 */
372int host_int_remove_wep_key(struct host_if_drv *wfi_drv, u8 index);
373/**
374 *  @brief              sets WEP deafault key
375 *  @details    Sets the index of the WEP encryption key in use,
376 *                              in the key table
377 *  @param[in,out] handle to the wifi driver
378 *  @param[in]  key index ( 0, 1, 2, 3)
379 *  @return             Error code indicating success/failure
380 *  @note
381 *  @author		zsalah
382 *  @date		8 March 2012
383 *  @version		1.0
384 */
385int host_int_set_wep_default_key(struct host_if_drv *hif_drv, u8 index);
386
387/**
388 *  @brief              sets WEP deafault key
389 *  @details    valid only in BSS STA mode if External Supplicant support is enabled.
390 *                              sets WEP key entry into MAC hardware when it receives the
391 *                              corresponding request from NDIS.
392 *  @param[in,out] handle to the wifi driver
393 *  @param[in]  message containing WEP Key in the following format
394 *|---------------------------------------|
395 *|Key ID Value | Key Length |	Key		|
396 *|-------------|------------|------------|
397 |	1byte	  |		1byte  | Key Length	|
398 ||---------------------------------------|
399 |
400 *  @return             Error code indicating success/failure
401 *  @note
402 *  @author		zsalah
403 *  @date		8 March 2012
404 *  @version		1.0
405 */
406int host_int_add_wep_key_bss_sta(struct host_if_drv *hif_drv,
407				 const u8 *key, u8 len, u8 index);
408/**
409 *  @brief              host_int_add_wep_key_bss_ap
410 *  @details    valid only in AP mode if External Supplicant support is enabled.
411 *                              sets WEP key entry into MAC hardware when it receives the
412 *                              corresponding request from NDIS.
413 *  @param[in,out] handle to the wifi driver
414 *
415 *
416 *  @return             Error code indicating success/failure
417 *  @note
418 *  @author		mdaftedar
419 *  @date		28 Feb 2013
420 *  @version		1.0
421 */
422int host_int_add_wep_key_bss_ap(struct host_if_drv *hif_drv,
423				const u8 *key, u8 len, u8 index, u8 mode,
424				enum AUTHTYPE auth_type);
425
426/**
427 *  @brief              adds ptk Key
428 *  @details
429 *  @param[in,out] handle to the wifi driver
430 *  @param[in]  message containing PTK Key in the following format
431 *|-------------------------------------------------------------------------|
432 *|Sta Adress | Key Length |	Temporal Key | Rx Michael Key |Tx Michael Key |
433 *|-----------|------------|---------------|----------------|---------------|
434 |	6 bytes |	1byte	 |   16 bytes	 |	  8 bytes	  |	   8 bytes	  |
435 ||-------------------------------------------------------------------------|
436 *  @return             Error code indicating success/failure
437 *  @note
438 *  @author		zsalah
439 *  @date		8 March 2012
440 *  @version		1.0
441 */
442s32 host_int_add_ptk(struct host_if_drv *hWFIDrv, const u8 *pu8Ptk, u8 u8PtkKeylen,
443			     const u8 *mac_addr, const u8 *pu8RxMic, const u8 *pu8TxMic, u8 mode, u8 u8Ciphermode, u8 u8Idx);
444
445/**
446 *  @brief              host_int_get_inactive_time
447 *  @details
448 *  @param[in,out] handle to the wifi driver
449 *  @param[in]  message containing inactive time
450 *
451 *  @return             Error code indicating success/failure
452 *  @note
453 *  @author		mdaftedar
454 *  @date		15 April 2013
455 *  @version		1.0
456 */
457s32 host_int_get_inactive_time(struct host_if_drv *hWFIDrv, const u8 *mac, u32 *pu32InactiveTime);
458
459/**
460 *  @brief              adds Rx GTk Key
461 *  @details
462 *  @param[in,out] handle to the wifi driver
463 *  @param[in]  message containing Rx GTK Key in the following format
464 *|----------------------------------------------------------------------------|
465 *|Sta Address | Key RSC | KeyID | Key Length | Temporal Key	| Rx Michael Key |
466 *|------------|---------|-------|------------|---------------|----------------|
467 |	6 bytes	 | 8 byte  |1 byte |  1 byte	|   16 bytes	|	  8 bytes	 |
468 ||----------------------------------------------------------------------------|
469 *  @return             Error code indicating success/failure
470 *  @note
471 *  @author		zsalah
472 *  @date		8 March 2012
473 *  @version		1.0
474 */
475s32 host_int_add_rx_gtk(struct host_if_drv *hWFIDrv, const u8 *pu8RxGtk, u8 u8GtkKeylen,
476				u8 u8KeyIdx, u32 u32KeyRSClen, const u8 *KeyRSC,
477				const u8 *pu8RxMic, const u8 *pu8TxMic, u8 mode, u8 u8Ciphermode);
478
479
480/**
481 *  @brief              adds Tx GTk Key
482 *  @details
483 *  @param[in,out] handle to the wifi driver
484 *  @param[in]  message containing Tx GTK Key in the following format
485 *|----------------------------------------------------|
486 | KeyID | Key Length | Temporal Key	| Tx Michael Key |
487 ||-------|------------|--------------|----------------|
488 ||1 byte |  1 byte	 |   16 bytes	|	  8 bytes	 |
489 ||----------------------------------------------------|
490 *  @return             Error code indicating success/failure
491 *  @note
492 *  @author		zsalah
493 *  @date		8 March 2012
494 *  @version		1.0
495 */
496s32 host_int_add_tx_gtk(struct host_if_drv *hWFIDrv, u8 u8KeyLen, u8 *pu8TxGtk, u8 u8KeyIdx);
497
498/**
499 *  @brief              caches the pmkid
500 *  @details    valid only in BSS STA mode if External Supplicant
501 *                              support is enabled. This Function sets the PMKID in firmware
502 *                              when host drivr receives the corresponding request from NDIS.
503 *                              The firmware then includes theset PMKID in the appropriate
504 *                              management frames
505 *  @param[in,out] handle to the wifi driver
506 *  @param[in]  message containing PMKID Info in the following format
507 *|-----------------------------------------------------------------|
508 *|NumEntries |	BSSID[1] | PMKID[1] |  ...	| BSSID[K] | PMKID[K] |
509 *|-----------|------------|----------|-------|----------|----------|
510 |	   1	|		6	 |   16		|  ...	|	 6	   |	16	  |
511 ||-----------------------------------------------------------------|
512 *  @return             Error code indicating success/failure
513 *  @note
514 *  @author		zsalah
515 *  @date		8 March 2012
516 *  @version		1.0
517 */
518
519s32 host_int_set_pmkid_info(struct host_if_drv *hWFIDrv, struct host_if_pmkid_attr *pu8PmkidInfoArray);
520/**
521 *  @brief              gets the cached the pmkid info
522 *  @details    valid only in BSS STA mode if External Supplicant
523 *                              support is enabled. This Function sets the PMKID in firmware
524 *                              when host drivr receives the corresponding request from NDIS.
525 *                              The firmware then includes theset PMKID in the appropriate
526 *                              management frames
527 *  @param[in,out] handle to the wifi driver,
528 *
529 *                                message containing PMKID Info in the following format
530 *|-----------------------------------------------------------------|
531 *|NumEntries |	BSSID[1] | PMKID[1] |  ...	| BSSID[K] | PMKID[K] |
532 *|-----------|------------|----------|-------|----------|----------|
533 |	   1	|		6	 |   16		|  ...	|	 6	   |	16	  |
534 ||-----------------------------------------------------------------|
535 *  @param[in]
536 *  @return             Error code indicating success/failure
537 *  @note
538 *  @author		zsalah
539 *  @date		8 March 2012
540 *  @version		1.0
541 */
542
543s32 host_int_get_pmkid_info(struct host_if_drv *hWFIDrv, u8 *pu8PmkidInfoArray,
544				    u32 u32PmkidInfoLen);
545
546/**
547 *  @brief              sets the pass phrase
548 *  @details    AP/STA mode. This function gives the pass phrase used to
549 *                              generate the Pre-Shared Key when WPA/WPA2 is enabled
550 *                              The length of the field can vary from 8 to 64 bytes,
551 *                              the lower layer should get the
552 *  @param[in,out] handle to the wifi driver,
553 *  @param[in]   String containing PSK
554 *  @return             Error code indicating success/failure
555 *  @note
556 *  @author		zsalah
557 *  @date		8 March 2012
558 *  @version		1.0
559 */
560s32 host_int_set_RSNAConfigPSKPassPhrase(struct host_if_drv *hWFIDrv, u8 *pu8PassPhrase,
561						 u8 u8Psklength);
562/**
563 *  @brief              gets the pass phrase
564 *  @details    AP/STA mode. This function gets the pass phrase used to
565 *                              generate the Pre-Shared Key when WPA/WPA2 is enabled
566 *                              The length of the field can vary from 8 to 64 bytes,
567 *                              the lower layer should get the
568 *  @param[in,out] handle to the wifi driver,
569 *                                String containing PSK
570 *  @return             Error code indicating success/failure
571 *  @note
572 *  @author		zsalah
573 *  @date		8 March 2012
574 *  @version		1.0
575 */
576s32 host_int_get_RSNAConfigPSKPassPhrase(struct host_if_drv *hWFIDrv,
577						 u8 *pu8PassPhrase, u8 u8Psklength);
578
579/**
580 *  @brief              gets mac address
581 *  @details
582 *  @param[in,out] handle to the wifi driver,
583 *
584 *  @return             Error code indicating success/failure
585 *  @note
586 *  @author		mdaftedar
587 *  @date		19 April 2012
588 *  @version		1.0
589 */
590s32 host_int_get_MacAddress(struct host_if_drv *hWFIDrv, u8 *pu8MacAddress);
591
592/**
593 *  @brief              sets mac address
594 *  @details
595 *  @param[in,out] handle to the wifi driver,
596 *
597 *  @return             Error code indicating success/failure
598 *  @note
599 *  @author		mabubakr
600 *  @date		16 July 2012
601 *  @version		1.0
602 */
603s32 host_int_set_MacAddress(struct host_if_drv *hWFIDrv, u8 *pu8MacAddress);
604
605/**
606 *  @brief              wait until msg q is empty
607 *  @details
608 *  @param[in,out]
609 *
610 *  @return             Error code indicating success/failure
611 *  @note
612 *  @author		asobhy
613 *  @date		19 march 2014
614 *  @version		1.0
615 */
616int host_int_wait_msg_queue_idle(void);
617
618/**
619 *  @brief              sets a start scan request
620 *  @details
621 *  @param[in,out] handle to the wifi driver,
622 *  @param[in]	Scan Source one of the following values
623 *                              DEFAULT_SCAN        0
624 *                              USER_SCAN           BIT0
625 *                              OBSS_PERIODIC_SCAN  BIT1
626 *                              OBSS_ONETIME_SCAN   BIT2
627 *  @return             Error code indicating success/failure
628 *  @note
629 *  @author		zsalah
630 *  @date		8 March 2012
631 *  @version		1.0
632 */
633
634s32 host_int_set_start_scan_req(struct host_if_drv *hWFIDrv, u8 scanSource);
635/**
636 *  @brief              gets scan source of the last scan
637 *  @details
638 *  @param[in,out] handle to the wifi driver,
639 *                              Scan Source one of the following values
640 *                              DEFAULT_SCAN        0
641 *                              USER_SCAN           BIT0
642 *                              OBSS_PERIODIC_SCAN  BIT1
643 *                              OBSS_ONETIME_SCAN   BIT2
644 *  @return             Error code indicating success/failure
645 *  @note
646 *  @author		zsalah
647 *  @date		8 March 2012
648 *  @version		1.0
649 */
650s32 host_int_get_start_scan_req(struct host_if_drv *hWFIDrv, u8 *pu8ScanSource);
651
652/**
653 *  @brief              sets a join request
654 *  @details
655 *  @param[in,out] handle to the wifi driver,
656 *  @param[in]	Index of the bss descriptor
657 *  @return             Error code indicating success/failure
658 *  @note
659 *  @author		zsalah
660 *  @date		8 March 2012
661 *  @version		1.0
662 */
663
664s32 host_int_set_join_req(struct host_if_drv *hWFIDrv, u8 *pu8bssid,
665				  const u8 *pu8ssid, size_t ssidLen,
666				  const u8 *pu8IEs, size_t IEsLen,
667				  wilc_connect_result pfConnectResult, void *pvUserArg,
668				  u8 u8security, enum AUTHTYPE tenuAuth_type,
669				  u8 u8channel,
670				  void *pJoinParams);
671
672/**
673 *  @brief              Flush a join request parameters to FW, but actual connection
674 *  @details    The function is called in situation where WILC is connected to AP and
675 *                      required to switch to hybrid FW for P2P connection
676 *  @param[in] handle to the wifi driver,
677 *  @return             Error code indicating success/failure
678 *  @note
679 *  @author		Amr Abdel-Moghny
680 *  @date		19 DEC 2013
681 *  @version		8.0
682 */
683
684s32 host_int_flush_join_req(struct host_if_drv *hWFIDrv);
685
686
687/**
688 *  @brief              disconnects from the currently associated network
689 *  @details
690 *  @param[in,out] handle to the wifi driver,
691 *  @param[in]	Reason Code of the Disconnection
692 *  @return             Error code indicating success/failure
693 *  @note
694 *  @author		zsalah
695 *  @date		8 March 2012
696 *  @version		1.0
697 */
698s32 host_int_disconnect(struct host_if_drv *hWFIDrv, u16 u16ReasonCode);
699
700/**
701 *  @brief              disconnects a sta
702 *  @details
703 *  @param[in,out] handle to the wifi driver,
704 *  @param[in]	Association Id of the station to be disconnected
705 *  @return             Error code indicating success/failure
706 *  @note
707 *  @author		zsalah
708 *  @date		8 March 2012
709 *  @version		1.0
710 */
711s32 host_int_disconnect_station(struct host_if_drv *hWFIDrv, u8 assoc_id);
712/**
713 *  @brief              gets a Association request info
714 *  @details
715 *  @param[in,out] handle to the wifi driver,
716 *                              Message containg assoc. req info in the following format
717 * ------------------------------------------------------------------------
718 |                        Management Frame Format                    |
719 ||-------------------------------------------------------------------|
720 ||Frame Control|Duration|DA|SA|BSSID|Sequence Control|Frame Body|FCS |
721 ||-------------|--------|--|--|-----|----------------|----------|----|
722 | 2           |2       |6 |6 |6    |		2       |0 - 2312  | 4  |
723 ||-------------------------------------------------------------------|
724 |                                                                   |
725 |             Association Request Frame - Frame Body                |
726 ||-------------------------------------------------------------------|
727 | Capability Information | Listen Interval | SSID | Supported Rates |
728 ||------------------------|-----------------|------|-----------------|
729 |			2            |		 2         | 2-34 |		3-10        |
730 | ---------------------------------------------------------------------
731 *  @return             Error code indicating success/failure
732 *  @note
733 *  @author		zsalah
734 *  @date		8 March 2012
735 *  @version		1.0
736 */
737
738s32 host_int_get_assoc_req_info(struct host_if_drv *hWFIDrv, u8 *pu8AssocReqInfo,
739					u32 u32AssocReqInfoLen);
740/**
741 *  @brief              gets a Association Response info
742 *  @details
743 *  @param[in,out] handle to the wifi driver,
744 *                              Message containg assoc. resp info
745 *  @return             Error code indicating success/failure
746 *  @note
747 *  @author		zsalah
748 *  @date		8 March 2012
749 *  @version		1.0
750 */
751
752s32 host_int_get_assoc_res_info(struct host_if_drv *hWFIDrv, u8 *pu8AssocRespInfo,
753					u32 u32MaxAssocRespInfoLen, u32 *pu32RcvdAssocRespInfoLen);
754/**
755 *  @brief              gets a Association Response info
756 *  @details    Valid only in STA mode. This function gives the RSSI
757 *                              values observed in all the channels at the time of scanning.
758 *                              The length of the field is 1 greater that the total number of
759 *                              channels supported. Byte 0 contains the number of channels while
760 *                              each of Byte N contains	the observed RSSI value for the channel index N.
761 *  @param[in,out] handle to the wifi driver,
762 *                              array of scanned channels' RSSI
763 *  @return             Error code indicating success/failure
764 *  @note
765 *  @author		zsalah
766 *  @date		8 March 2012
767 *  @version		1.0
768 */
769s32 host_int_get_rx_power_level(struct host_if_drv *hWFIDrv, u8 *pu8RxPowerLevel,
770					u32 u32RxPowerLevelLen);
771
772/**
773 *  @brief              sets a channel
774 *  @details
775 *  @param[in,out] handle to the wifi driver,
776 *  @param[in]	Index of the channel to be set
777 *|-------------------------------------------------------------------|
778 |          CHANNEL1      CHANNEL2 ....		             CHANNEL14	|
779 |  Input:         1             2					            14	|
780 ||-------------------------------------------------------------------|
781 *  @return             Error code indicating success/failure
782 *  @note
783 *  @author		zsalah
784 *  @date		8 March 2012
785 *  @version		1.0
786 */
787int host_int_set_mac_chnl_num(struct host_if_drv *wfi_drv, u8 channel);
788
789/**
790 *  @brief              gets the current channel index
791 *  @details
792 *  @param[in,out] handle to the wifi driver,
793 *                              current channel index
794 *|-----------------------------------------------------------------------|
795 |          CHANNEL1      CHANNEL2 ....                     CHANNEL14	|
796 |  Input:         1             2                                 14	|
797 ||-----------------------------------------------------------------------|
798 *  @return             Error code indicating success/failure
799 *  @note
800 *  @author		zsalah
801 *  @date		8 March 2012
802 *  @version		1.0
803 */
804s32 host_int_get_host_chnl_num(struct host_if_drv *hWFIDrv, u8 *pu8ChNo);
805/**
806 *  @brief              gets the sta rssi
807 *  @details    gets the currently maintained RSSI value for the station.
808 *                              The received signal strength value in dB.
809 *                              The range of valid values is -128 to 0.
810 *  @param[in,out] handle to the wifi driver,
811 *                              rssi value in dB
812 *  @return             Error code indicating success/failure
813 *  @note
814 *  @author		zsalah
815 *  @date		8 March 2012
816 *  @version		1.0
817 */
818s32 host_int_get_rssi(struct host_if_drv *hWFIDrv, s8 *ps8Rssi);
819s32 host_int_get_link_speed(struct host_if_drv *hWFIDrv, s8 *ps8lnkspd);
820/**
821 *  @brief              scans a set of channels
822 *  @details
823 *  @param[in,out] handle to the wifi driver,
824 *  @param[in]		Scan source
825 *                              Scan Type	PASSIVE_SCAN = 0,
826 *                                                      ACTIVE_SCAN  = 1
827 *                              Channels Array
828 *                              Channels Array length
829 *                              Scan Callback function
830 *                              User Argument to be delivered back through the Scan Cllback function
831 *  @return             Error code indicating success/failure
832 *  @note
833 *  @author		zsalah
834 *  @date		8 March 2012
835 *  @version		1.0
836 */
837s32 host_int_scan(struct host_if_drv *hWFIDrv, u8 u8ScanSource,
838			  u8 u8ScanType, u8 *pu8ChnlFreqList,
839			  u8 u8ChnlListLen, const u8 *pu8IEs,
840			  size_t IEsLen, wilc_scan_result ScanResult,
841			  void *pvUserArg,
842			  struct hidden_network *pstrHiddenNetwork);
843/**
844 *  @brief              sets configuration wids values
845 *  @details
846 *  @param[in,out] handle to the wifi driver,
847 *  @param[in]	WID, WID value
848 *  @return             Error code indicating success/failure
849 *  @note
850 *  @author		zsalah
851 *  @date		8 March 2012
852 *  @version		1.0
853 */
854s32 hif_set_cfg(struct host_if_drv *hWFIDrv, struct cfg_param_val *pstrCfgParamVal);
855
856/**
857 *  @brief              gets configuration wids values
858 *  @details
859 *  @param[in,out] handle to the wifi driver,
860 *                              WID value
861 *  @param[in]	WID,
862 *  @return             Error code indicating success/failure
863 *  @note
864 *  @author		zsalah
865 *  @date		8 March 2012
866 *  @version		1.0
867 */
868s32 hif_get_cfg(struct host_if_drv *hWFIDrv, u16 u16WID, u16 *pu16WID_Value);
869/*****************************************************************************/
870/*							Notification Functions							 */
871/*****************************************************************************/
872/**
873 *  @brief              host interface initialization function
874 *  @details
875 *  @param[in,out] handle to the wifi driver,
876 *  @note
877 *  @author		zsalah
878 *  @date		8 March 2012
879 *  @version		1.0
880 */
881s32 host_int_init(struct net_device *dev, struct host_if_drv **phWFIDrv);
882
883/**
884 *  @brief              host interface initialization function
885 *  @details
886 *  @param[in,out] handle to the wifi driver,
887 *  @note
888 *  @author		zsalah
889 *  @date		8 March 2012
890 *  @version		1.0
891 */
892s32 host_int_deinit(struct host_if_drv *hWFIDrv);
893
894
895/*!
896 *  @fn		s32 host_int_add_beacon(WILC_WFIDrvHandle hWFIDrv,u8 u8Index)
897 *  @brief		Sends a beacon to the firmware to be transmitted over the air
898 *  @details
899 *  @param[in,out]	hWFIDrv		handle to the wifi driver
900 *  @param[in]	u32Interval	Beacon Interval. Period between two successive beacons on air
901 *  @param[in]	u32DTIMPeriod DTIM Period. Indicates how many Beacon frames
902 *              (including the current frame) appear before the next DTIM
903 *  @param[in]	u32Headlen	Length of the head buffer in bytes
904 *  @param[in]	pu8Head		Pointer to the beacon's head buffer. Beacon's head
905 *		is the part from the beacon's start till the TIM element, NOT including the TIM
906 *  @param[in]	u32Taillen	Length of the tail buffer in bytes
907 *  @param[in]	pu8Tail		Pointer to the beacon's tail buffer. Beacon's tail
908 *		starts just after the TIM inormation element
909 *  @return	0 for Success, error otherwise
910 *  @todo
911 *  @sa
912 *  @author		Adham Abozaeid
913 *  @date		10 Julys 2012
914 *  @version		1.0 Description
915 *
916 */
917s32 host_int_add_beacon(struct host_if_drv *hWFIDrv, u32 u32Interval,
918				u32 u32DTIMPeriod,
919				u32 u32HeadLen, u8 *pu8Head,
920				u32 u32TailLen, u8 *pu8tail);
921
922
923/*!
924 *  @fn		s32 host_int_del_beacon(WILC_WFIDrvHandle hWFIDrv)
925 *  @brief		Removes the beacon and stops trawilctting it over the air
926 *  @details
927 *  @param[in,out]	hWFIDrv		handle to the wifi driver
928 *  @return	0 for Success, error otherwise
929 *  @todo
930 *  @sa
931 *  @author		Adham Abozaeid
932 *  @date		10 Julys 2012
933 *  @version		1.0 Description
934 */
935s32 host_int_del_beacon(struct host_if_drv *hWFIDrv);
936
937/*!
938 *  @fn		s32 host_int_add_station(WILC_WFIDrvHandle hWFIDrv,
939 *					 struct add_sta_param *pstrStaParams)
940 *  @brief		Notifies the firmware with a new associated stations
941 *  @details
942 *  @param[in,out]	hWFIDrv		handle to the wifi driver
943 *  @param[in]	pstrStaParams	Station's parameters
944 *  @return	0 for Success, error otherwise
945 *  @todo
946 *  @sa
947 *  @author		Adham Abozaeid
948 *  @date		12 July 2012
949 *  @version		1.0 Description
950 */
951s32 host_int_add_station(struct host_if_drv *hWFIDrv,
952			 struct add_sta_param *pstrStaParams);
953
954/*!
955 *  @fn		s32 host_int_del_allstation(WILC_WFIDrvHandle hWFIDrv, const u8* pu8MacAddr)
956 *  @brief		Deauthenticates clients when group is terminating
957 *  @details
958 *  @param[in,out]	hWFIDrv		handle to the wifi driver
959 *  @param[in]	pu8MacAddr	Station's mac address
960 *  @return	0 for Success, error otherwise
961 *  @todo
962 *  @sa
963 *  @author		Mai Daftedar
964 *  @date		09 April 2014
965 *  @version		1.0 Description
966 */
967s32 host_int_del_allstation(struct host_if_drv *hWFIDrv, u8 pu8MacAddr[][ETH_ALEN]);
968
969/*!
970 *  @fn		s32 host_int_del_station(WILC_WFIDrvHandle hWFIDrv, u8* pu8MacAddr)
971 *  @brief		Notifies the firmware with a new deleted station
972 *  @details
973 *  @param[in,out]	hWFIDrv		handle to the wifi driver
974 *  @param[in]	pu8MacAddr	Station's mac address
975 *  @return	0 for Success, error otherwise
976 *  @todo
977 *  @sa
978 *  @author		Adham Abozaeid
979 *  @date		15 July 2012
980 *  @version		1.0 Description
981 */
982s32 host_int_del_station(struct host_if_drv *hWFIDrv, const u8 *pu8MacAddr);
983
984/*!
985 *  @fn		s32 host_int_edit_station(WILC_WFIDrvHandle hWFIDrv,
986 *					  struct add_sta_param *pstrStaParams)
987 *  @brief		Notifies the firmware with new parameters of an already associated station
988 *  @details
989 *  @param[in,out]	hWFIDrv		handle to the wifi driver
990 *  @param[in]	pstrStaParams	Station's parameters
991 *  @return	0 for Success, error otherwise
992 *  @todo
993 *  @sa
994 *  @author		Adham Abozaeid
995 *  @date		15 July 2012
996 *  @version		1.0 Description
997 */
998s32 host_int_edit_station(struct host_if_drv *hWFIDrv,
999			  struct add_sta_param *pstrStaParams);
1000
1001/*!
1002 *  @fn		s32 host_int_set_power_mgmt(WILC_WFIDrvHandle hWFIDrv, bool bIsEnabled, u32 u32Timeout)
1003 *  @brief		Set the power management mode to enabled or disabled
1004 *  @details
1005 *  @param[in,out]	hWFIDrv		handle to the wifi driver
1006 *  @param[in]	bIsEnabled	TRUE if enabled, FALSE otherwise
1007 *  @param[in]	u32Timeout	A timeout value of -1 allows the driver to adjust
1008 *							the dynamic ps timeout value
1009 *  @return	0 for Success, error otherwise
1010 *  @todo
1011 *  @sa
1012 *  @author		Adham Abozaeid
1013 *  @date		24 November 2012
1014 *  @version		1.0 Description
1015 */
1016s32 host_int_set_power_mgmt(struct host_if_drv *hWFIDrv, bool bIsEnabled, u32 u32Timeout);
1017/*  @param[in,out]	hWFIDrv		handle to the wifi driver
1018 *  @param[in]	bIsEnabled	TRUE if enabled, FALSE otherwise
1019 *  @param[in]	u8count		count of mac address entries in the filter table
1020 *
1021 *  @return	0 for Success, error otherwise
1022 *  @todo
1023 *  @sa
1024 *  @author		Adham Abozaeid
1025 *  @date		24 November 2012
1026 *  @version		1.0 Description
1027 */
1028s32 host_int_setup_multicast_filter(struct host_if_drv *hWFIDrv, bool bIsEnabled, u32 u32count);
1029/**
1030 *  @brief           host_int_setup_ipaddress
1031 *  @details       set IP address on firmware
1032 *  @param[in]
1033 *  @return         Error code.
1034 *  @author		Abdelrahman Sobhy
1035 *  @date
1036 *  @version	1.0
1037 */
1038s32 host_int_setup_ipaddress(struct host_if_drv *hWFIDrv, u8 *pu8IPAddr, u8 idx);
1039
1040
1041/**
1042 *  @brief           host_int_delBASession
1043 *  @details       Delete single Rx BA session
1044 *  @param[in]
1045 *  @return         Error code.
1046 *  @author		Abdelrahman Sobhy
1047 *  @date
1048 *  @version	1.0
1049 */
1050s32 host_int_delBASession(struct host_if_drv *hWFIDrv, char *pBSSID, char TID);
1051
1052/**
1053 *  @brief           host_int_delBASession
1054 *  @details       Delete all Rx BA session
1055 *  @param[in]
1056 *  @return         Error code.
1057 *  @author		Abdelrahman Sobhy
1058 *  @date
1059 *  @version	1.0
1060 */
1061s32 host_int_del_All_Rx_BASession(struct host_if_drv *hWFIDrv, char *pBSSID, char TID);
1062
1063
1064/**
1065 *  @brief           host_int_get_ipaddress
1066 *  @details       get IP address on firmware
1067 *  @param[in]
1068 *  @return         Error code.
1069 *  @author		Abdelrahman Sobhy
1070 *  @date
1071 *  @version	1.0
1072 */
1073s32 host_int_get_ipaddress(struct host_if_drv *hWFIDrv, u8 *pu8IPAddr, u8 idx);
1074
1075/**
1076 *  @brief           host_int_remain_on_channel
1077 *  @details
1078 *  @param[in]
1079 *  @return         Error code.
1080 *  @author
1081 *  @date
1082 *  @version	1.0
1083 */
1084s32 host_int_remain_on_channel(struct host_if_drv *hWFIDrv, u32 u32SessionID, u32 u32duration, u16 chan, wilc_remain_on_chan_expired RemainOnChanExpired, wilc_remain_on_chan_ready RemainOnChanReady, void *pvUserArg);
1085
1086/**
1087 *  @brief              host_int_ListenStateExpired
1088 *  @details
1089 *  @param[in]          Handle to wifi driver
1090 *                              Duration to remain on channel
1091 *                              Channel to remain on
1092 *                              Pointer to fn to be called on receive frames in listen state
1093 *                              Pointer to remain-on-channel expired fn
1094 *                              Priv
1095 *  @return             Error code.
1096 *  @author
1097 *  @date
1098 *  @version		1.0
1099 */
1100s32 host_int_ListenStateExpired(struct host_if_drv *hWFIDrv, u32 u32SessionID);
1101
1102/**
1103 *  @brief           host_int_frame_register
1104 *  @details
1105 *  @param[in]
1106 *  @return         Error code.
1107 *  @author
1108 *  @date
1109 *  @version	1.0
1110 */
1111s32 host_int_frame_register(struct host_if_drv *hWFIDrv, u16 u16FrameType, bool bReg);
1112/**
1113 *  @brief           host_int_set_wfi_drv_handler
1114 *  @details
1115 *  @param[in]
1116 *  @return         Error code.
1117 *  @author
1118 *  @date
1119 *  @version	1.0
1120 */
1121int host_int_set_wfi_drv_handler(struct host_if_drv *address);
1122int host_int_set_operation_mode(struct host_if_drv *wfi_drv, u32 mode);
1123
1124static s32 Handle_ScanDone(struct host_if_drv *drvHandler, enum scan_event enuEvent);
1125
1126void host_int_freeJoinParams(void *pJoinParams);
1127
1128s32 host_int_get_statistics(struct host_if_drv *hWFIDrv, struct rf_info *pstrStatistics);
1129
1130#endif
1131