These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / staging / wilc1000 / host_interface.h
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
60 struct rf_info {
61         u8 u8LinkSpeed;
62         s8 s8RSSI;
63         u32 u32TxCount;
64         u32 u32RxCount;
65         u32 u32TxFailureCount;
66 };
67
68 enum 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
78 struct host_if_pmkid {
79         u8 bssid[ETH_ALEN];
80         u8 pmkid[PMKID_LEN];
81 };
82
83 struct host_if_pmkid_attr {
84         u8 numpmkid;
85         struct host_if_pmkid pmkidlist[WILC_MAX_NUM_PMKIDS];
86 };
87
88 enum 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
104 struct 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
129 enum 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
151 struct found_net_info {
152         u8 au8bssid[6];
153         s8 s8rssi;
154 };
155
156 enum 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
163 enum 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
169 enum KEY_TYPE {
170         WEP,
171         WPARxGtk,
172         WPAPtk,
173         PMKSA,
174 };
175
176
177 /*Scan callBack function definition*/
178 typedef void (*wilc_scan_result)(enum scan_event, tstrNetworkInfo *,
179                                   void *, void *);
180
181 /*Connect callBack function definition*/
182 typedef void (*wilc_connect_result)(enum conn_event,
183                                      tstrConnectInfo *,
184                                      u8,
185                                      tstrDisconnectNotifInfo *,
186                                      void *);
187
188 typedef void (*wilc_remain_on_chan_expired)(void *, u32);  /*Remain on channel expiration callback function*/
189 typedef 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  */
201 struct rcvd_net_info {
202         u8 *buffer;
203         u32 len;
204 };
205
206 struct hidden_net_info {
207         u8  *pu8ssid;
208         u8 u8ssidlen;
209 };
210
211 struct hidden_network {
212         struct hidden_net_info *pstrHiddenNetworkInfo;
213         u8 u8ssidnum;
214 };
215
216 struct 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
227 struct 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
242 struct drv_handler {
243         u32 handler;
244 };
245
246 struct op_mode {
247         u32 mode;
248 };
249
250 struct set_mac_addr {
251         u8 mac_addr[ETH_ALEN];
252 };
253
254 struct get_mac_addr {
255         u8 *mac_addr;
256 };
257
258 struct ba_session_info {
259         u8 au8Bssid[ETH_ALEN];
260         u8 u8Ted;
261         u16 u16BufferSize;
262         u16 u16SessionTimeout;
263 };
264
265 struct 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
274 struct 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
288 enum p2p_listen_state {
289         P2P_IDLE,
290         P2P_LISTEN,
291         P2P_GRP_FORMATION
292 };
293
294 struct 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
323 struct 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  */
357 s32 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  */
372 int 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  */
385 int 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  */
406 int 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  */
422 int 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  */
442 s32 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  */
457 s32 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  */
475 s32 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  */
496 s32 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
519 s32 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
543 s32 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  */
560 s32 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  */
576 s32 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  */
590 s32 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  */
603 s32 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  */
616 int 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
634 s32 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  */
650 s32 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
664 s32 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
684 s32 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  */
698 s32 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  */
711 s32 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
738 s32 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
752 s32 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  */
769 s32 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  */
787 int 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  */
804 s32 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  */
818 s32 host_int_get_rssi(struct host_if_drv *hWFIDrv, s8 *ps8Rssi);
819 s32 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  */
837 s32 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  */
854 s32 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  */
868 s32 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  */
881 s32 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  */
892 s32 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  */
917 s32 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  */
935 s32 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  */
951 s32 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  */
967 s32 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  */
982 s32 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  */
998 s32 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  */
1016 s32 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  */
1028 s32 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  */
1038 s32 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  */
1050 s32 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  */
1061 s32 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  */
1073 s32 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  */
1084 s32 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  */
1100 s32 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  */
1111 s32 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  */
1121 int host_int_set_wfi_drv_handler(struct host_if_drv *address);
1122 int host_int_set_operation_mode(struct host_if_drv *wfi_drv, u32 mode);
1123
1124 static s32 Handle_ScanDone(struct host_if_drv *drvHandler, enum scan_event enuEvent);
1125
1126 void host_int_freeJoinParams(void *pJoinParams);
1127
1128 s32 host_int_get_statistics(struct host_if_drv *hWFIDrv, struct rf_info *pstrStatistics);
1129
1130 #endif