support different wifi bt chip auto compatible
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / combo_mt66xx / mt6620 / wlan / include / mgmt / p2p_fsm.h
1 /*
2 ** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_fsm.h#23 $
3 */
4
5 /*! \file   p2p_fsm.h
6     \brief  Declaration of functions and finite state machine for P2P Module.
7
8     Declaration of functions and finite state machine for P2P Module.
9 */
10
11
12
13 /*
14 ** $Log: p2p_fsm.h $
15 ** 
16 ** 09 12 2012 wcpadmin
17 ** [ALPS00276400] Remove MTK copyright and legal header on GPL/LGPL related packages
18 ** .
19 ** 
20 ** 08 14 2012 yuche.tsai
21 ** NULL
22 ** Fix compile error.
23 ** 
24 ** 07 26 2012 yuche.tsai
25 ** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot
26 ** Update driver code of ALPS.JB for hot-spot.
27 ** 
28 ** 07 19 2012 yuche.tsai
29 ** NULL
30 ** Code update for JB.
31  *
32  * 07 18 2012 yuche.tsai
33  * NULL
34  * add one file.
35  *
36  * 12 02 2011 yuche.tsai
37  * NULL
38  * Resolve class 3 error issue under AP mode.
39  *
40  * data frame may TX before Assoc Response TX.
41  *
42  * 11 11 2011 yuche.tsai
43  * NULL
44  * Fix work thread cancel issue.
45  *
46  * 11 11 2011 yuche.tsai
47  * NULL
48  * Fix default device name issue.
49  *
50  * 11 09 2011 yuche.tsai
51  * [WCXRP00001093] [Need Patch][Volunteer Patch] Service Discovery 2.0 state transition issue.
52  * Fix SD2.0 issue which may cause KE. (Monkey test)
53  *
54  * 11 08 2011 yuche.tsai
55  * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check.
56  * Add support for driver version query & p2p supplicant verseion set.
57  * For new service discovery mechanism sync.
58  *
59  * 10 18 2011 yuche.tsai
60  * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch.
61  * Support Channle Query.
62  *
63  * 10 18 2011 yuche.tsai
64  * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch.
65  * New 2.1 branch
66
67  *
68  * 09 01 2011 yuche.tsai
69  * NULL
70  * Fix channel stay interval.
71  * Sync channel stay interval & channel request interval under AP mode..
72  *
73  * 08 30 2011 yuche.tsai
74  * [WCXRP00000953] [Volunteer Patch][Driver] Hot Spot Channel ASSERT issue.
75  * Fix hot spot FW assert issue when under concurrent case. (DBG enable only)
76  *
77  * 08 16 2011 cp.wu
78  * [WCXRP00000934] [MT6620 Wi-Fi][Driver][P2P] Wi-Fi hot spot with auto sparse channel residence
79  * auto channel decision for 2.4GHz hot spot mode
80  *
81  * 08 16 2011 yuche.tsai
82  * NULL
83  * Fix scan policy for Active LISTEN scan.
84  *
85  * 08 09 2011 yuche.tsai
86  * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature.
87  * Invitation Feature add on.
88  *
89  * 08 02 2011 yuche.tsai
90  * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue.
91  * Support TX Deauth Issue.
92  *
93  * 07 26 2011 yuche.tsai
94  * [WCXRP00000875] [Volunteer Patch][WiFi Direct][Driver] MT6620 IOT issue with realtek test bed solution.
95  * Turn off persistent group support for V2.0 release.
96  *
97  * 07 18 2011 yuche.tsai
98  * [WCXRP00000856] [Volunteer Patch][WiFi Direct][Driver] MT6620 WiFi Direct IOT Issue with BCM solution.
99  * Fix compile error.
100  *
101  * 07 18 2011 yuche.tsai
102  * [WCXRP00000856] [Volunteer Patch][WiFi Direct][Driver] MT6620 WiFi Direct IOT Issue with BCM solution.
103  * Fix MT6620 WiFi Direct IOT Issue with BCM solution.
104  *
105  * 07 11 2011 yuche.tsai
106  * [WCXRP00000845] [Volunteer Patch][WiFi Direct] WiFi Direct Device Connection Robustness
107  * Enhance Connection Robustness.
108  *
109  * 07 08 2011 yuche.tsai
110  * [WCXRP00000841] [Volunteer Patch][WiFi Direct] Group Owner Setting.
111  * Update GO configure parameter.
112  *
113  * 07 05 2011 yuche.tsai
114  * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue
115  * Disable enhancement II for debugging.
116  *
117  * 07 05 2011 yuche.tsai
118  * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue
119  * Refine compile flag.
120  *
121  * 07 05 2011 yuche.tsai
122  * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue
123  * Add wifi direct connection enhancement method I, II & VI.
124  *
125  * 06 20 2011 yuche.tsai
126  * [WCXRP00000799] [Volunteer Patch][MT6620][Driver] Connection Indication Twice Issue.
127  * Fix connection indication twice issue.
128  *
129  * 06 07 2011 yuche.tsai
130  * [WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue
131  * Fix RX SD request under AP mode issue.
132  *
133  * 05 04 2011 yuche.tsai
134  * NULL
135  * Support partial persistent group function.
136  *
137  * 04 20 2011 terry.wu
138  * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED
139  * Remove CFG_WIFI_DIRECT_MOVED.
140  *
141  * 04 08 2011 yuche.tsai
142  * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO.
143  * Add device discoverability support.
144  *
145  * 03 25 2011 yuche.tsai
146  * NULL
147  * Improve some error handleing.
148  *
149  * 03 22 2011 george.huang
150  * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command
151  * link with supplicant commands
152  *
153  * 03 22 2011 yuche.tsai
154  * NULL
155  * 1.Shorten the LISTEN interval.
156  * 2. Fix IF address issue when we are GO
157  * 3. Fix LISTEN channel issue.
158  *
159  * 03 21 2011 yuche.tsai
160  * NULL
161  * Change P2P Connection Request Flow.
162  *
163  * 03 19 2011 yuche.tsai
164  * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct.
165  * Add beacon timeout support.
166  *
167  * 03 19 2011 yuche.tsai
168  * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue
169  * Append P2P IE in Assoc Req, so that GC can be discovered in probe response of GO.
170  *
171  * 03 18 2011 yuche.tsai
172  * [WCXRP00000574] [Volunteer Patch][MT6620][Driver] Modify P2P FSM Connection Flow
173  * Modify connection flow after Group Formation Complete, or device connect to a GO.
174  * Instead of request channel & connect directly, we use scan to allocate channel bandwidth & connect after RX BCN.
175  *
176  * 03 15 2011 yuche.tsai
177  * [WCXRP00000560] [Volunteer Patch][MT6620][Driver] P2P Connection from UI using KEY/DISPLAY issue
178  * Fix some configure method issue.
179  *
180  * 03 10 2011 yuche.tsai
181  * NULL
182  * Add P2P API.
183  *
184  * 03 07 2011 yuche.tsai
185  * [WCXRP00000502] [Volunteer Patch][MT6620][Driver] Fix group ID issue when doing Group Formation.
186  * .
187  *
188  * 03 07 2011 wh.su
189  * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code
190  * rename the define to anti_pviracy.
191  *
192  * 03 05 2011 wh.su
193  * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code
194  * add the code to get the check rsponse and indicate to app.
195  *
196  * 03 01 2011 yuche.tsai
197  * [WCXRP00000501] [Volunteer Patch][MT6620][Driver] No common channel issue when doing GO formation
198  * Update channel issue when doing GO formation..
199  *
200  * 03 01 2011 yuche.tsai
201  * [WCXRP00000245] 1. Invitation Request/Response.
202 2. Provision Discovery Request/Response
203
204  * Update Service Discovery Related wlanoid function.
205  *
206  * 02 18 2011 wh.su
207  * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE
208  * fixed the ioctl setting that index not map to spec defined config method.
209  *
210  * 02 18 2011 yuche.tsai
211  * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue
212  * Fix WSC IE BE format issue.
213  *
214  * 02 17 2011 wh.su
215  * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE
216  * append the WSC IE config method attribute at provision discovery request.
217  *
218  * 02 11 2011 yuche.tsai
219  * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode.
220  * Add two function prototype.
221  *
222  * 02 10 2011 yuche.tsai
223  * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode.
224  * Support Disassoc & Deauthentication for Hot-Spot.
225  *
226  * 02 09 2011 yuche.tsai
227  * [WCXRP00000245] 1. Invitation Request/Response.
228
229 2. Provision Discovery Request/Response
230
231  * Add Service Discovery Indication Related code.
232  *
233  * 02 09 2011 yuche.tsai
234  * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode.
235  * Add Support for MLME deauthentication for Hot-Spot.
236  *
237  * 02 09 2011 yuche.tsai
238  * [WCXRP00000429] [Volunteer Patch][MT6620][Driver] Hot Spot Client Limit Issue
239  * Fix Client Limit Issue.
240  *
241  * 01 26 2011 yuche.tsai
242  * [WCXRP00000245] 1. Invitation Request/Response.
243
244 2. Provision Discovery Request/Response
245
246  * Add Service Discovery Function.
247  *
248  * 01 25 2011 terry.wu
249  * [WCXRP00000393] [MT6620 Wi-Fi][Driver] Add new module insert parameter
250  * Add a new module parameter to indicate current runnig mode, P2P or AP.
251  *
252  * 01 19 2011 george.huang
253  * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability
254  * Null NOA attribute setting when no related parameters.
255  *
256  * 01 12 2011 yuche.tsai
257  * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue
258  * Modify some behavior of AP mode.
259  *
260  * 12 22 2010 yuche.tsai
261  * [WCXRP00000245] 1. Invitation Request/Response.
262 2. Provision Discovery Request/Response
263
264  * Fix Compile Error.
265  *
266  * 12 15 2010 yuche.tsai
267  * [WCXRP00000245] 1. Invitation Request/Response.
268 2. Provision Discovery Request/Response
269
270  * Refine Connection Flow.
271  *
272  * 12 08 2010 yuche.tsai
273  * [WCXRP00000244] [MT6620][Driver] Add station record type for each client when in AP mode.
274  * Change STA Type under AP mode. We would tell if client is a P2P device or a legacy client by checking the P2P IE in assoc req frame.
275  *
276  * 12 02 2010 yuche.tsai
277  * NULL
278  * Update P2P Connection Policy for Invitation.
279  *
280  * 12 02 2010 yuche.tsai
281  * NULL
282  * Update P2P Connection Policy for Invitation & Provision Discovery.
283  *
284  * 11 30 2010 yuche.tsai
285  * NULL
286  * Invitation & Provision Discovery Indication.
287  *
288  * 11 30 2010 yuche.tsai
289  * NULL
290  * Update Configure Method indication & selection for Provision Discovery & GO_NEGO_REQ
291  *
292  * 11 29 2010 yuche.tsai
293  * NULL
294  * Update P2P related function for INVITATION & PROVISION DISCOVERY.
295  *
296  * 11 26 2010 george.huang
297  * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function
298  * Update P2P PS for NOA function.
299  *
300  * 11 25 2010 yuche.tsai
301  * NULL
302  * Update Code for Invitation Related Function.
303  *
304  * 11 17 2010 wh.su
305  * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID[WCXRP00000179] [MT6620 Wi-Fi][FW] Set the Tx lowest rate at wlan table for normal operation
306  * fixed some ASSERT check.
307  *
308  * 11 04 2010 wh.su
309  * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID
310  * adding the p2p random ssid support.
311  *
312  * 10 20 2010 wh.su
313  * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group
314  * Add the code to support disconnect p2p group
315  *
316  * 10 08 2010 wh.su
317  * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine
318  * update the frog's new p2p state machine.
319  *
320  * 10 04 2010 wh.su
321  * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P
322  * fixed compiling error while enable p2p.
323  *
324  * 09 21 2010 kevin.huang
325  * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface
326  * Isolate P2P related function for Hardware Software Bundle
327  *
328  * 09 10 2010 wh.su
329  * NULL
330  * fixed the compiling error at WinXP.
331  *
332  * 09 07 2010 wh.su
333  * NULL
334  * adding the code for beacon/probe req/ probe rsp wsc ie at p2p.
335  *
336  * 09 03 2010 kevin.huang
337  * NULL
338  * Refine #include sequence and solve recursive/nested #include issue
339  *
340  * 08 26 2010 yuche.tsai
341  * NULL
342  * Add connection abort message event prototype.
343  *
344  * 08 20 2010 kevin.huang
345  * NULL
346  * Modify AAA Module for changing STA STATE 3 at p2p/bowRunEventAAAComplete()
347  *
348  * 08 16 2010 yuche.tsai
349  * NULL
350  * Fix P2P Intended Interface Address Bug.
351  * Extend GO Nego Timeout Time.
352  *
353  * 08 16 2010 yuche.tsai
354  * NULL
355  * Extend Listen Interval default value & remove deprecated variable.
356  *
357  * 08 16 2010 kevin.huang
358  * NULL
359  * Refine AAA functions
360  *
361  * 08 12 2010 kevin.huang
362  * NULL
363  * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse()
364  *
365  * 08 12 2010 yuche.tsai
366  * NULL
367  * Add function prototype for join complete.
368  *
369  * 08 11 2010 yuche.tsai
370  * NULL
371  * Add some function proto type for P2P FSM under provisioning phase..
372  *
373  * 08 11 2010 yuche.tsai
374  * NULL
375  * Change P2P data structure for supporting
376  * 1. P2P Device discovery.
377  * 2. P2P Group Negotiation.
378  * 3. P2P JOIN
379  *
380  * 08 05 2010 yuche.tsai
381  * NULL
382  * Check-in P2P Device Discovery Feature.
383  *
384  * 08 03 2010 george.huang
385  * NULL
386  * handle event for updating NOA parameters indicated from FW
387  *
388  * 08 02 2010 yuche.tsai
389  * NULL
390  * P2P Group Negotiation Code Check in.
391  *
392  * 07 26 2010 yuche.tsai
393  *
394  * Update P2P FSM header file.
395  *
396  * 07 23 2010 cp.wu
397  *
398  * P2P/RSN/WAPI IEs need to be declared with compact structure.
399  *
400  * 07 21 2010 yuche.tsai
401  *
402  * Add for P2P Scan Result Parsing & Saving.
403  *
404  * 07 19 2010 yuche.tsai
405  *
406  * Update P2P FSM header file.
407  *
408  * 07 08 2010 cp.wu
409  *
410  * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
411  *
412  * 06 21 2010 yuche.tsai
413  * [WPD00003839][MT6620 5931][P2P] Feature migration
414  * Fix some P2P function prototype.
415  *
416  * 06 17 2010 yuche.tsai
417  * [WPD00003839][MT6620 5931][P2P] Feature migration
418  * First draft for migration P2P FSM from FW to Driver.
419  *
420  * 03 18 2010 kevin.huang
421  * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support
422  * Rename CFG flag for P2P
423  *
424  * 02 26 2010 kevin.huang
425  * [BORA00000603][WIFISYS] [New Feature] AAA Module Support
426  * Modify parameter of p2pStartGO
427  *
428  * 02 23 2010 kevin.huang
429  * [BORA00000603][WIFISYS] [New Feature] AAA Module Support
430  * Add Wi-Fi Direct SSID and P2P GO Test Mode
431  *
432  * 02 04 2010 kevin.huang
433  * [BORA00000603][WIFISYS] [New Feature] AAA Module Support
434  * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup
435 */
436
437 #ifndef _P2P_FSM_H
438 #define _P2P_FSM_H
439
440
441 /*******************************************************************************
442 *                         C O M P I L E R   F L A G S
443 ********************************************************************************
444 */
445 #define CID52_53_54         0
446
447
448 /*******************************************************************************
449 *                    E X T E R N A L   R E F E R E N C E S
450 ********************************************************************************
451 */
452
453 /*******************************************************************************
454 *                              C O N S T A N T S
455 ********************************************************************************
456 */
457
458
459
460
461
462 /*******************************************************************************
463 *                             D A T A   T Y P E S
464 ********************************************************************************
465 */
466 typedef enum _ENUM_P2P_STATE_T {
467     P2P_STATE_IDLE = 0,
468     P2P_STATE_SCAN,
469     P2P_STATE_AP_CHANNEL_DETECT,
470     P2P_STATE_REQING_CHANNEL,
471     P2P_STATE_CHNL_ON_HAND, /* Requesting Channel to Send Specific Frame. */
472     P2P_STATE_GC_JOIN, /* Sending Specific Frame. May extending channel by other event. */
473     P2P_STATE_NUM
474 } ENUM_P2P_STATE_T, *P_ENUM_P2P_STATE_T;
475
476
477 typedef enum _ENUM_CHANNEL_REQ_TYPE_T {
478     CHANNEL_REQ_TYPE_REMAIN_ON_CHANNEL,
479     CHANNEL_REQ_TYPE_GC_JOIN_REQ,
480     CHANNEL_REQ_TYPE_GO_START_BSS
481 }
482 ENUM_CHANNEL_REQ_TYPE_T, *P_ENUM_CHANNEL_REQ_TYPE_T;
483
484
485 typedef enum _ENUM_BUFFER_TYPE_T {
486     ENUM_FRAME_TYPE_EXTRA_IE_BEACON,
487     ENUM_FRAME_TYPE_EXTRA_IE_ASSOC_RSP,
488     ENUM_FRAME_TYPE_EXTRA_IE_PROBE_RSP,
489     ENUM_FRAME_TYPE_PROBE_RSP_TEMPLATE,
490     ENUM_FRAME_TYPE_BEACON_TEMPLATE,
491     ENUM_FRAME_IE_NUM
492 } ENUM_BUFFER_TYPE_T, *P_ENUM_BUFFER_TYPE_T;
493
494 typedef enum _ENUM_HIDDEN_SSID_TYPE_T {
495     ENUM_HIDDEN_SSID_NONE,
496     ENUM_HIDDEN_SSID_LEN,
497     ENUM_HIDDEN_SSID_ZERO_CONTENT,
498     ENUM_HIDDEN_SSID_NUM
499 }
500 ENUM_HIDDEN_SSID_TYPE_T, *P_ENUM_HIDDEN_SSID_TYPE_T;
501
502 typedef struct _P2P_SSID_STRUCT_T {
503     UINT_8 aucSsid[32];
504     UINT_8 ucSsidLen;
505 } P2P_SSID_STRUCT_T, *P_P2P_SSID_STRUCT_T;
506
507 typedef struct _P2P_STATION_INFO_T {
508     UINT_32 u4InactiveTime;
509     UINT_32 u4RxBytes;          // TODO:
510     UINT_32 u4TxBytes;          // TODO:
511     UINT_32 u4RxPackets;            // TODO:
512     UINT_32 u4TxPackets;            // TODO:
513     // TODO: Add more for requirement.
514 }
515 P2P_STATION_INFO_T, *P_P2P_STATION_INFO_T;
516
517
518 typedef struct _AP_CRYPTO_SETTINGS_T {
519     UINT_32 u4WpaVersion;
520     UINT_32 u4CipherGroup;
521     INT_32 i4NumOfCiphers;
522     UINT_32 aucCiphersPairwise[5];
523     INT_32 i4NumOfAkmSuites;
524     UINT_32 aucAkmSuites[2];
525     BOOLEAN fgIsControlPort;
526     UINT_16 u2ControlPortBE;
527     BOOLEAN fgIsControlPortEncrypt;
528 } AP_CRYPTO_SETTINGS_T, *P_AP_CRYPTO_SETTINGS_T;
529 typedef struct _MSG_P2P_MGMT_TX_REQUEST_T {
530     MSG_HDR_T rMsgHdr;
531     P_MSDU_INFO_T prMgmtMsduInfo;
532     UINT_64 u8Cookie;                   /* For indication. */
533     BOOLEAN fgNoneCckRate;
534     BOOLEAN fgIsWaitRsp;
535 } MSG_P2P_MGMT_TX_REQUEST_T, *P_MSG_P2P_MGMT_TX_REQUEST_T;
536
537
538 /*-------------------- P2P FSM ACTION STRUCT ---------------------*/
539 typedef struct _P2P_CHNL_REQ_INFO_T {
540     BOOLEAN fgIsChannelRequested;
541     UINT_8 ucSeqNumOfChReq;
542     UINT_64 u8Cookie;
543     UINT_8 ucReqChnlNum;
544     ENUM_BAND_T eBand;
545     ENUM_CHNL_EXT_T eChnlSco;
546     UINT_32 u4MaxInterval;
547     ENUM_CHANNEL_REQ_TYPE_T eChannelReqType;
548
549     UINT_8 ucOriChnlNum;
550     ENUM_BAND_T eOriBand;
551     ENUM_CHNL_EXT_T eOriChnlSco;
552 #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0)
553         P_MSG_P2P_MGMT_TX_REQUEST_T prMsgTxReq;
554         BOOLEAN fgNeedIndSupp;
555 #endif
556 } P2P_CHNL_REQ_INFO_T, *P_P2P_CHNL_REQ_INFO_T;
557
558 typedef struct _P2P_SCAN_REQ_INFO_T {
559     ENUM_SCAN_TYPE_T eScanType;
560     ENUM_SCAN_CHANNEL eChannelSet;
561     UINT_16  u2PassiveDewellTime;
562     UINT_8 ucSeqNumOfScnMsg;
563     BOOLEAN fgIsAbort;
564     BOOLEAN fgIsScanRequest;
565     UINT_8 ucNumChannelList;
566     RF_CHANNEL_INFO_T arScanChannelList[MAXIMUM_OPERATION_CHANNEL_LIST];
567     UINT_32 u4BufLength;
568     UINT_8 aucIEBuf[MAX_IE_LENGTH];
569     P2P_SSID_STRUCT_T rSsidStruct;    // Currently we can only take one SSID scan request
570 }
571 P2P_SCAN_REQ_INFO_T, *P_P2P_SCAN_REQ_INFO_T;
572
573 typedef struct _P2P_CONNECTION_REQ_INFO_T {
574
575     BOOLEAN fgIsConnRequest;
576     P2P_SSID_STRUCT_T rSsidStruct;
577     UINT_8 aucBssid[MAC_ADDR_LEN];
578     /* For ASSOC Req. */
579     UINT_32 u4BufLength;
580     UINT_8 aucIEBuf[MAX_IE_LENGTH];
581 } P2P_CONNECTION_REQ_INFO_T, *P_P2P_CONNECTION_REQ_INFO_T;
582
583 typedef struct _P2P_MGMT_TX_REQ_INFO_T {
584     BOOLEAN fgIsMgmtTxRequested;
585     P_MSDU_INFO_T prMgmtTxMsdu;
586     UINT_64 u8Cookie;
587 } P2P_MGMT_TX_REQ_INFO_T, *P_P2P_MGMT_TX_REQ_INFO_T;
588
589 typedef struct _P2P_BEACON_UPDATE_INFO_T {
590     PUINT_8 pucBcnHdr;
591     UINT_32 u4BcnHdrLen;
592     PUINT_8 pucBcnBody;
593     UINT_32 u4BcnBodyLen;
594 }
595 P2P_BEACON_UPDATE_INFO_T, *P_P2P_BEACON_UPDATE_INFO_T;
596
597 typedef struct _P2P_PROBE_RSP_UPDATE_INFO_T {
598     P_MSDU_INFO_T prProbeRspMsduTemplate;
599 } P2P_PROBE_RSP_UPDATE_INFO_T, *P_P2P_PROBE_RSP_UPDATE_INFO_T;
600
601 typedef struct _P2P_ASSOC_RSP_UPDATE_INFO_T {
602     PUINT_8 pucAssocRspExtIE;
603     UINT_16 u2AssocIELen;
604 } P2P_ASSOC_RSP_UPDATE_INFO_T, *P_P2P_ASSOC_RSP_UPDATE_INFO_T;
605
606 typedef struct _P2P_JOIN_INFO_T {
607     UINT_32 ucSeqNumOfReqMsg;
608     UINT_8 ucAvailableAuthTypes;
609     P_STA_RECORD_T prTargetStaRec;
610     P2P_SSID_STRUCT_T rSsidStruct;
611     BOOLEAN fgIsJoinComplete;
612     /* For ASSOC Rsp. */
613     UINT_32 u4BufLength;
614     UINT_8 aucIEBuf[MAX_IE_LENGTH];
615 }
616 P2P_JOIN_INFO_T, *P_P2P_JOIN_INFO_T;
617
618 #if CFG_SUPPORT_WFD
619
620 #define WFD_FLAGS_DEV_INFO_VALID            BIT(0)     /* 1. WFD_DEV_INFO, 2. WFD_CTRL_PORT, 3. WFD_MAT_TP. */
621 #define WFD_FLAGS_SINK_INFO_VALID           BIT(1)     /* 1. WFD_SINK_STATUS, 2. WFD_SINK_MAC. */
622 #define WFD_FLAGS_ASSOC_MAC_VALID        BIT(2)     /* 1. WFD_ASSOC_MAC. */
623 #define WFD_FLAGS_EXT_CAPABILITY_VALID  BIT(3)     /* 1. WFD_EXTEND_CAPABILITY. */
624
625
626
627 struct _WFD_CFG_SETTINGS_T {
628     UINT_32 u4WfdCmdType;
629     UINT_8 ucWfdEnable;
630     UINT_8 ucWfdCoupleSinkStatus;
631     UINT_8  ucWfdSessionAvailable; /* 0: NA 1:Set 2:Clear */
632     UINT_8  ucWfdSigmaMode;
633     UINT_16 u2WfdDevInfo;
634     UINT_16 u2WfdControlPort;
635     UINT_16 u2WfdMaximumTp;
636     UINT_16 u2WfdExtendCap;
637     UINT_8 aucWfdCoupleSinkAddress[MAC_ADDR_LEN];
638     UINT_8 aucWfdAssociatedBssid[MAC_ADDR_LEN];
639     UINT_8 aucWfdVideolp[4];
640     UINT_8 aucWfdAudiolp[4];
641     UINT_16 u2WfdVideoPort;
642     UINT_16 u2WfdAudioPort;
643     UINT_32 u4WfdFlag;
644     UINT_32 u4WfdPolicy;
645     UINT_32 u4WfdState;
646     UINT_8 aucWfdSessionInformationIE[24*8];
647     UINT_16 u2WfdSessionInformationIELen;
648     UINT_8 aucReserved1[2];
649     UINT_8   aucWfdPrimarySinkMac[MAC_ADDR_LEN];
650     UINT_8   aucWfdSecondarySinkMac[MAC_ADDR_LEN];
651     UINT_32  u4WfdAdvancedFlag;
652     /* Group 1 64 bytes */
653     UINT_8   aucWfdLocalIp[4];
654     UINT_16  u2WfdLifetimeAc2; /* Unit is 2 TU */
655     UINT_16  u2WfdLifetimeAc3; /* Unit is 2 TU */
656     UINT_8   aucReverved2[56];
657     /* Group 2 64 bytes */
658     UINT_8   aucReverved3[64];
659     /* Group 3 64 bytes */
660     UINT_8   aucReverved4[64];
661
662 };
663
664 #endif
665
666
667
668 struct _P2P_FSM_INFO_T {
669     /* State related. */
670     ENUM_P2P_STATE_T    ePreviousState;
671     ENUM_P2P_STATE_T    eCurrentState;
672
673     /* Channel related. */
674     P2P_CHNL_REQ_INFO_T rChnlReqInfo;
675
676     /* Scan related. */
677     P2P_SCAN_REQ_INFO_T rScanReqInfo;
678
679     /* Connection related. */
680     P2P_CONNECTION_REQ_INFO_T rConnReqInfo;
681
682     /* Mgmt tx related. */
683     P2P_MGMT_TX_REQ_INFO_T rMgmtTxInfo;
684
685     /* Beacon related. */
686     P2P_BEACON_UPDATE_INFO_T rBcnContentInfo;
687
688     /* Probe Response related. */
689     P2P_PROBE_RSP_UPDATE_INFO_T rProbeRspContentInfo;
690
691     /* Assoc Rsp related. */
692     P2P_ASSOC_RSP_UPDATE_INFO_T rAssocRspContentInfo;
693
694     /* GC Join related. */
695     P2P_JOIN_INFO_T rJoinInfo;
696
697     /* FSM Timer */
698     TIMER_T rP2pFsmTimeoutTimer;
699
700
701     /* GC Target BSS. */
702     P_BSS_DESC_T prTargetBss;
703
704     /* GC Connection Request. */
705     BOOLEAN fgIsConnectionRequested;
706
707     BOOLEAN fgIsApMode;
708
709     /* Channel grant interval. */
710     UINT_32 u4GrantInterval;
711
712     /* Packet filter for P2P module. */
713     UINT_32 u4P2pPacketFilter;
714
715     //vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv Prepare for use vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
716     /* Msg event queue. */
717     LINK_T rMsgEventQueue;
718
719 #if CFG_SUPPORT_WFD
720     WFD_CFG_SETTINGS_T rWfdConfigureSettings;
721 #endif
722
723     BOOLEAN fgIsWPSMode;
724 };
725
726
727 /*---------------- Messages -------------------*/
728 typedef struct _MSG_P2P_SCAN_REQUEST_T {
729     MSG_HDR_T       rMsgHdr;    /* Must be the first member */
730     P_P2P_SSID_STRUCT_T prSSID;
731     INT_32 i4SsidNum;
732     UINT_32 u4NumChannel;
733     PUINT_8 pucIEBuf;
734     UINT_32 u4IELen;
735     BOOLEAN fgIsAbort;
736     RF_CHANNEL_INFO_T arChannelListInfo[1];
737 } MSG_P2P_SCAN_REQUEST_T, *P_MSG_P2P_SCAN_REQUEST_T;
738
739 typedef struct _MSG_P2P_CHNL_REQUEST_T {
740     MSG_HDR_T       rMsgHdr;    /* Must be the first member */
741     UINT_64 u8Cookie;
742     UINT_32 u4Duration;
743     ENUM_CHNL_EXT_T eChnlSco;
744     RF_CHANNEL_INFO_T rChannelInfo;
745 #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0)
746         BOOLEAN fgNeedIndSupp;
747 #endif
748 } MSG_P2P_CHNL_REQUEST_T, *P_MSG_P2P_CHNL_REQUEST_T;
749
750 typedef struct _MSG_P2P_CHNL_ABORT_T {
751     MSG_HDR_T       rMsgHdr;    /* Must be the first member */
752     UINT_64 u8Cookie;
753 } MSG_P2P_CHNL_ABORT_T, *P_MSG_P2P_CHNL_ABORT_T;
754
755
756 typedef struct _MSG_P2P_CONNECTION_REQUEST_T {
757     MSG_HDR_T       rMsgHdr;    /* Must be the first member */
758     P2P_SSID_STRUCT_T rSsid;
759     UINT_8 aucBssid[MAC_ADDR_LEN];
760     ENUM_CHNL_EXT_T eChnlSco;
761     RF_CHANNEL_INFO_T rChannelInfo;
762     UINT_32 u4IELen;
763     UINT_8 aucIEBuf[1];
764     // TODO: Auth Type, OPEN, SHARED, FT, EAP...
765 } MSG_P2P_CONNECTION_REQUEST_T, *P_MSG_P2P_CONNECTION_REQUEST_T;
766
767
768 typedef struct _MSG_P2P_CONNECTION_ABORT_T {
769     MSG_HDR_T rMsgHdr; /* Must be the first member. */
770     UINT_8 aucTargetID[MAC_ADDR_LEN];
771     UINT_16 u2ReasonCode;
772     BOOLEAN fgSendDeauth;
773 } MSG_P2P_CONNECTION_ABORT_T, *P_MSG_P2P_CONNECTION_ABORT_T;
774 #if 0
775 typedef struct _MSG_P2P_MGMT_TX_REQUEST_T {
776     MSG_HDR_T rMsgHdr;
777     P_MSDU_INFO_T prMgmtMsduInfo;
778     UINT_64 u8Cookie;                   /* For indication. */
779     BOOLEAN fgNoneCckRate;
780     BOOLEAN fgIsWaitRsp;
781 } MSG_P2P_MGMT_TX_REQUEST_T, *P_MSG_P2P_MGMT_TX_REQUEST_T;
782 #endif
783 typedef struct _MSG_P2P_START_AP_T {
784     MSG_HDR_T rMsgHdr;
785     UINT_32 u4DtimPeriod;
786     UINT_32 u4BcnInterval;
787     UINT_8 aucSsid[32];
788     UINT_16 u2SsidLen;
789     UINT_8 ucHiddenSsidType;
790     BOOLEAN fgIsPrivacy;
791     AP_CRYPTO_SETTINGS_T rEncryptionSettings;
792     INT_32 i4InactiveTimeout;
793 }
794 MSG_P2P_START_AP_T, *P_MSG_P2P_START_AP_T;
795
796
797 typedef struct _MSG_P2P_BEACON_UPDATE_T {
798     MSG_HDR_T rMsgHdr;
799     UINT_32 u4BcnHdrLen;
800     UINT_32 u4BcnBodyLen;
801     PUINT_8 pucBcnHdr;
802     PUINT_8 pucBcnBody;
803     UINT_8 aucBuffer[1];       /* Header & Body are put here. */
804 }
805 MSG_P2P_BEACON_UPDATE_T, *P_MSG_P2P_BEACON_UPDATE_T;
806
807 typedef struct _MSG_P2P_MGMT_FRAME_UPDATE_T {
808     MSG_HDR_T rMsgHdr;
809     ENUM_BUFFER_TYPE_T eBufferType;
810     UINT_32 u4BufferLen;
811     UINT_8 aucBuffer[1];
812 } MSG_P2P_MGMT_FRAME_UPDATE_T, *P_MSG_P2P_MGMT_FRAME_UPDATE_T;
813
814
815 typedef struct _MSG_P2P_SWITCH_OP_MODE_T {
816     MSG_HDR_T       rMsgHdr;    /* Must be the first member */
817     ENUM_OP_MODE_T eOpMode;
818 } MSG_P2P_SWITCH_OP_MODE_T, *P_MSG_P2P_SWITCH_OP_MODE_T;
819
820 typedef struct _MSG_P2P_MGMT_FRAME_REGISTER_T {
821     MSG_HDR_T       rMsgHdr;    /* Must be the first member */
822     UINT_16             u2FrameType;
823     BOOLEAN           fgIsRegister;
824 }
825 MSG_P2P_MGMT_FRAME_REGISTER_T, *P_MSG_P2P_MGMT_FRAME_REGISTER_T;
826
827 typedef struct _MSG_P2P_NETDEV_REGISTER_T {
828     MSG_HDR_T       rMsgHdr;    /* Must be the first member */
829     BOOLEAN         fgIsEnable;
830     UINT_8          ucMode;
831 } MSG_P2P_NETDEV_REGISTER_T, *P_MSG_P2P_NETDEV_REGISTER_T;
832
833 #if CFG_SUPPORT_WFD
834 typedef struct _MSG_WFD_CONFIG_SETTINGS_CHANGED_T {
835     MSG_HDR_T       rMsgHdr;    /* Must be the first member */
836     P_WFD_CFG_SETTINGS_T prWfdCfgSettings;
837 } MSG_WFD_CONFIG_SETTINGS_CHANGED_T, *P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T;
838 #endif
839
840 /*******************************************************************************
841 *                  F U N C T I O N   D E C L A R A T I O N S
842 ********************************************************************************
843 */
844 VOID
845 p2pFsmStateTransition(
846     IN P_ADAPTER_T prAdapter,
847     IN P_P2P_FSM_INFO_T prP2pFsmInfo,
848     IN ENUM_P2P_STATE_T eNextState
849     );
850
851
852
853 VOID
854 p2pFsmRunEventAbort(
855     IN P_ADAPTER_T prAdapter,
856     IN P_P2P_FSM_INFO_T prP2pFsmInfo
857     );
858
859
860 VOID
861 p2pFsmRunEventScanRequest(
862     IN P_ADAPTER_T prAdapter,
863     IN P_MSG_HDR_T prMsgHdr
864     );
865
866 VOID
867 p2pFsmRunEventMgmtFrameTx(
868     IN P_ADAPTER_T prAdapter,
869     IN P_MSG_HDR_T prMsgHdr
870     );
871
872 VOID
873 p2pFsmRunEventStartAP(
874     IN P_ADAPTER_T prAdapter,
875     IN P_MSG_HDR_T prMsgHdr
876     );
877
878 VOID
879 p2pFsmRunEventNetDeviceRegister(
880     IN P_ADAPTER_T prAdapter,
881     IN P_MSG_HDR_T prMsgHdr
882     );
883
884 VOID
885 p2pFsmRunEventUpdateMgmtFrame(
886     IN P_ADAPTER_T prAdapter,
887     IN P_MSG_HDR_T prMsgHdr
888     );
889
890 VOID
891 p2pFsmRunEventBeaconUpdate(
892     IN P_ADAPTER_T prAdapter,
893     IN P_MSG_HDR_T prMsgHdr
894     );
895
896 VOID
897 p2pFsmRunEventStopAP(
898     IN P_ADAPTER_T prAdapter,
899     IN P_MSG_HDR_T prMsgHdr
900     );
901
902 VOID
903 p2pFsmRunEventChannelRequest(
904     IN P_ADAPTER_T prAdapter,
905     IN P_MSG_HDR_T prMsgHdr
906     );
907
908
909 VOID
910 p2pFsmRunEventChannelAbort(
911     IN P_ADAPTER_T prAdapter,
912     IN P_MSG_HDR_T prMsgHdr
913     );
914
915
916 VOID
917 p2pFsmRunEventDissolve(
918     IN P_ADAPTER_T prAdapter,
919     IN P_MSG_HDR_T prMsgHdr
920     );
921
922
923 VOID
924 p2pFsmRunEventSwitchOPMode(
925     IN P_ADAPTER_T prAdapter,
926     IN P_MSG_HDR_T prMsgHdr
927     );
928
929
930 WLAN_STATUS
931 p2pFsmRunEventMgmtFrameTxDone(
932     IN P_ADAPTER_T prAdapter,
933     IN P_MSDU_INFO_T prMsduInfo,
934     IN ENUM_TX_RESULT_CODE_T rTxDoneStatus
935     );
936
937
938 VOID
939 p2pFsmRunEventMgmtFrameRegister(
940     IN P_ADAPTER_T prAdapter,
941     IN P_MSG_HDR_T prMsgHdr
942     );
943
944 #if CFG_SUPPORT_WFD
945 VOID
946 p2pFsmRunEventWfdSettingUpdate(
947     IN P_ADAPTER_T prAdapter,
948     IN P_MSG_HDR_T prMsgHdr
949     );
950 #endif
951
952
953 #if 0
954 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
955 ///////////////////////////////////////////////////////////////////////////////////////
956 ///////////////////////////////////////////////////////////////////////////////////////
957 ///////////////////////////////////////////////////////////////////////////////////////
958 ///////////////////////////////////////////////////////////////////////////////////////
959 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
960 #endif
961
962 //3 /* --------------- WFA P2P DEFAULT PARAMETERS --------------- */
963 #define P2P_WILDCARD_SSID                           "DIRECT-"
964 #define P2P_WILDCARD_SSID_LEN                       7
965 #define P2P_GROUP_ID_LEN                            9
966
967 #define P2P_DRIVER_VERSION                          2        /* Update when needed. */
968
969 #define P2P_DEFAULT_DEV_NAME                        "Wireless Client"
970 #define P2P_DEFAULT_DEV_NAME_LEN                    15
971 #define P2P_DEFAULT_PRIMARY_CATEGORY_ID             10
972 #define P2P_DEFAULT_PRIMARY_SUB_CATEGORY_ID         5
973 #define P2P_DEFAULT_CONFIG_METHOD                   (WPS_ATTRI_CFG_METHOD_PUSH_BUTTON | WPS_ATTRI_CFG_METHOD_KEYPAD | WPS_ATTRI_CFG_METHOD_DISPLAY)
974 #define P2P_DEFAULT_LISTEN_CHANNEL                   1
975
976 #define P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT        0 /* NOTE(Kevin): Shall <= 16 */
977 #define P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT         13
978
979 #define P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE            51  /* Contains 6 sub-band. */
980
981 #define P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT        8 /* NOTE(Kevin): Shall <= 16 */
982
983 #define P2P_MAXIMUM_CLIENT_COUNT                    8
984 #define P2P_MAXIMUM_NOA_COUNT                       8
985
986
987 #define P2P_MAXIMUM_ATTRIBUTE_LEN                   251
988
989 #define P2P_CTWINDOW_DEFAULT                        25 /* in TU=(1024usec) */
990
991 #define P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE           768
992
993 /* P2P 3.1.2.1.3 - Find Phase */
994 #define P2P_MAX_DISCOVERABLE_INTERVAL    8   //3//3
995 #define P2P_MIN_DISCOVERABLE_INTERVAL    5   // 1
996
997 #define P2P_LISTEN_SCAN_UNIT                     100    // MS
998
999 /* FSM Time Related constrain. */
1000 #define P2P_SERACH_STATE_PERIOD_MS              1000   // Deprecated.
1001
1002 #define P2P_GO_CHANNEL_STAY_INTERVAL             1000
1003
1004 #define P2P_GO_NEGO_TIMEOUT_MS                          500
1005 #define P2P_CONNECTION_TIMEOUT_SEC                   120
1006
1007 #define P2P_INVITAION_TIMEOUT_MS                         500   /* Timeout Wait Invitation Resonse. */
1008 #define P2P_PROVISION_DISCOVERY_TIMEOUT_MS     500   /* Timeout Wait Provision Discovery Resonse. */
1009
1010 //3 /* --------------- WFA P2P IE --------------- */
1011 /* P2P 4.1.1 - P2P IE format */
1012 #define P2P_OUI_TYPE_LEN                            4
1013 #define P2P_IE_OUI_HDR                              (ELEM_HDR_LEN + P2P_OUI_TYPE_LEN) /* == OFFSET_OF(IE_P2P_T, aucP2PAttributes[0]) */
1014
1015 /* P2P 4.1.1 - General P2P Attribute */
1016 #define P2P_ATTRI_HDR_LEN                           3 /* ID(1 octet) + Length(2 octets) */
1017
1018 /* P2P 4.1.1 - P2P Attribute ID definitions */
1019 #define P2P_ATTRI_ID_STATUS                                 0
1020 #define P2P_ATTRI_ID_REASON_CODE                            1
1021 #define P2P_ATTRI_ID_P2P_CAPABILITY                         2
1022 #define P2P_ATTRI_ID_P2P_DEV_ID                             3
1023 #define P2P_ATTRI_ID_GO_INTENT                              4
1024 #define P2P_ATTRI_ID_CFG_TIMEOUT                            5
1025 #define P2P_ATTRI_ID_LISTEN_CHANNEL                         6
1026 #define P2P_ATTRI_ID_P2P_GROUP_BSSID                        7
1027 #define P2P_ATTRI_ID_EXT_LISTEN_TIMING                      8
1028 #define P2P_ATTRI_ID_INTENDED_P2P_IF_ADDR                   9
1029 #define P2P_ATTRI_ID_P2P_MANAGEABILITY                      10
1030 #define P2P_ATTRI_ID_CHANNEL_LIST                           11
1031 #define P2P_ATTRI_ID_NOTICE_OF_ABSENCE                      12
1032 #define P2P_ATTRI_ID_P2P_DEV_INFO                           13
1033 #define P2P_ATTRI_ID_P2P_GROUP_INFO                         14
1034 #define P2P_ATTRI_ID_P2P_GROUP_ID                           15
1035 #define P2P_ATTRI_ID_P2P_INTERFACE                          16
1036 #define P2P_ATTRI_ID_OPERATING_CHANNEL                      17
1037 #define P2P_ATTRI_ID_INVITATION_FLAG                        18
1038 #define P2P_ATTRI_ID_VENDOR_SPECIFIC                        221
1039
1040 /* Maximum Length of P2P Attributes */
1041 #define P2P_ATTRI_MAX_LEN_STATUS                            1 /* 0 */
1042 #define P2P_ATTRI_MAX_LEN_REASON_CODE                       1 /* 1 */
1043 #define P2P_ATTRI_MAX_LEN_P2P_CAPABILITY                    2 /* 2 */
1044 #define P2P_ATTRI_MAX_LEN_P2P_DEV_ID                        6 /* 3 */
1045 #define P2P_ATTRI_MAX_LEN_GO_INTENT                         1 /* 4 */
1046 #define P2P_ATTRI_MAX_LEN_CFG_TIMEOUT                       2 /* 5 */
1047 #if CID52_53_54
1048     #define P2P_ATTRI_MAX_LEN_LISTEN_CHANNEL                    5 /* 6 */
1049 #else
1050     #define P2P_ATTRI_MAX_LEN_LISTEN_CHANNEL                    5 /* 6 */
1051 #endif
1052 #define P2P_ATTRI_MAX_LEN_P2P_GROUP_BSSID                   6 /* 7 */
1053 #define P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING                 4 /* 8 */
1054 #define P2P_ATTRI_MAX_LEN_INTENDED_P2P_IF_ADDR              6 /* 9 */
1055 #define P2P_ATTRI_MAX_LEN_P2P_MANAGEABILITY                 1 /* 10 */
1056 //#define P2P_ATTRI_MAX_LEN_CHANNEL_LIST                      3 + (n* (2 + num_of_ch)) /* 11 */
1057 #define P2P_ATTRI_LEN_CHANNEL_LIST                                  3 /* 11 */
1058 #define P2P_ATTRI_LEN_CHANNEL_ENTRY                                  2 /* 11 */
1059
1060
1061 //#define P2P_ATTRI_MAX_LEN_NOTICE_OF_ABSENCE                 2 + (n* (13)) /* 12 */
1062 #define P2P_ATTRI_MAX_LEN_NOTICE_OF_ABSENCE                 (2 + (P2P_MAXIMUM_NOA_COUNT*(13))) /* 12 */
1063
1064 #define P2P_ATTRI_MAX_LEN_P2P_DEV_INFO                      17 + (8 * (8)) + 36 /* 13 */
1065 //#define P2P_ATTRI_MAX_LEN_P2P_GROUP_INFO                    n* (25 + (m* (8)) + 32) /* 14 */
1066 #define P2P_ATTRI_MAX_LEN_P2P_GROUP_ID                      38 /* 15 */
1067 #define P2P_ATTRI_MAX_LEN_P2P_INTERFACE                     253 // 7 + 6* [0~41] /* 16 */
1068 #if CID52_53_54
1069     #define P2P_ATTRI_MAX_LEN_OPERATING_CHANNEL                 5 /* 17 */
1070 #else
1071     #define P2P_ATTRI_MAX_LEN_OPERATING_CHANNEL                 5 /* 17 */
1072 #endif
1073 #define P2P_ATTRI_MAX_LEN_INVITATION_FLAGS                          1 /* 18 */
1074
1075 /* P2P 4.1.2 - P2P Status definitions */
1076 #define P2P_STATUS_SUCCESS                                  0
1077 #define P2P_STATUS_FAIL_INFO_IS_CURRENTLY_UNAVAILABLE   1
1078 #define P2P_STATUS_FAIL_INCOMPATIBLE_PARAM                  2
1079 #define P2P_STATUS_FAIL_LIMIT_REACHED                       3
1080 #define P2P_STATUS_FAIL_INVALID_PARAM                       4
1081 #define P2P_STATUS_FAIL_UNABLE_ACCOMMODATE_REQ              5
1082 #define P2P_STATUS_FAIL_PREVIOUS_PROTOCOL_ERR               6
1083 #define P2P_STATUS_FAIL_NO_COMMON_CHANNELS                  7
1084 #define P2P_STATUS_FAIL_UNKNOWN_P2P_GROUP                   8
1085 #define P2P_STATUS_FAIL_SAME_INTENT_VALUE_15                9
1086 #define P2P_STATUS_FAIL_INCOMPATIBLE_PROVISION_METHOD       10
1087 #define P2P_STATUS_FAIL_REJECTED_BY_USER                    11
1088
1089
1090 /* P2P 4.1.3 - P2P Minor Reason Code definitions */
1091 #define P2P_REASON_SUCCESS                                  0
1092 #define P2P_REASON_DISASSOCIATED_DUE_CROSS_CONNECTION       1
1093 #define P2P_REASON_DISASSOCIATED_DUE_UNMANAGEABLE           2
1094 #define P2P_REASON_DISASSOCIATED_DUE_NO_P2P_COEXIST_PARAM   3
1095 #define P2P_REASON_DISASSOCIATED_DUE_MANAGEABLE             4
1096
1097
1098 /* P2P 4.1.4 - Device Capability Bitmap definitions */
1099 #define P2P_DEV_CAPABILITY_SERVICE_DISCOVERY                BIT(0)
1100 #define P2P_DEV_CAPABILITY_CLIENT_DISCOVERABILITY           BIT(1)
1101 #define P2P_DEV_CAPABILITY_CONCURRENT_OPERATION             BIT(2)
1102 #define P2P_DEV_CAPABILITY_P2P_INFRA_MANAGED                BIT(3)
1103 #define P2P_DEV_CAPABILITY_P2P_DEVICE_LIMIT                 BIT(4)
1104 #define P2P_DEV_CAPABILITY_P2P_INVITATION_PROCEDURE         BIT(5)
1105
1106
1107 /* P2P 4.1.4 - Group Capability Bitmap definitions */
1108 #define P2P_GROUP_CAPABILITY_P2P_GROUP_OWNER                BIT(0)
1109 #define P2P_GROUP_CAPABILITY_PERSISTENT_P2P_GROUP           BIT(1)
1110 #define P2P_GROUP_CAPABILITY_P2P_GROUP_LIMIT                BIT(2)
1111 #define P2P_GROUP_CAPABILITY_INTRA_BSS_DISTRIBUTION         BIT(3)
1112 #define P2P_GROUP_CAPABILITY_CROSS_CONNECTION               BIT(4)
1113 #define P2P_GROUP_CAPABILITY_PERSISTENT_RECONNECT           BIT(5)
1114 #define P2P_GROUP_CAPABILITY_GROUP_FORMATION                BIT(6)
1115
1116 /* P2P 4.1.6 - GO Intent field definitions */
1117 #define P2P_GO_INTENT_TIE_BREAKER_FIELD                     BIT(0)
1118 #define P2P_GO_INTENT_VALUE_MASK                            BITS(1,7)
1119 #define P2P_GO_INTENT_VALUE_OFFSET                          1
1120
1121 /* P2P 4.1.12 - Manageability Bitmap definitions */
1122 #define P2P_DEVICE_MANAGEMENT                               BIT(0)
1123
1124 /* P2P 4.1.14 - CTWindow and OppPS Parameters definitions */
1125 #define P2P_CTW_OPPPS_PARAM_OPPPS_FIELD                     BIT(7)
1126 #define P2P_CTW_OPPPS_PARAM_CTWINDOW_MASK                   BITS(0,6)
1127
1128
1129 #define ELEM_MAX_LEN_P2P_FOR_PROBE_REQ                      \
1130             (P2P_OUI_TYPE_LEN + \
1131              (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_CAPABILITY) + \
1132              (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_DEV_ID) + \
1133              (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_LISTEN_CHANNEL) + \
1134              (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_OPERATING_CHANNEL))
1135
1136 #define ELEM_MAX_LEN_P2P_FOR_ASSOC_REQ                      \
1137             (P2P_OUI_TYPE_LEN + \
1138              (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_CAPABILITY) + \
1139              (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING) + \
1140              (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_DEV_INFO))
1141
1142
1143 /* P2P 4.1.16 - P2P Client Infor Descriptor */
1144 #define P2P_CLIENT_INFO_DESC_HDR_LEN                        1 /* Length(1 octets) */
1145
1146 /* P2P 4.1.20 - P2P Invitation Flags Attribute*/
1147 #define P2P_INVITATION_FLAGS_INVITATION_TYPE       BIT(0)
1148 #define P2P_INVITATION_TYPE_INVITATION                      0
1149 #define P2P_INVITATION_TYPE_REINVOKE                          1
1150 //3 /* --------------- WPS Data Element Definitions --------------- */
1151 /* P2P 4.2.2 - General WSC Attribute */
1152 #define WSC_ATTRI_HDR_LEN                                   4 /* ID(2 octet) + Length(2 octets) */
1153 #define WSC_ATTRI_MAX_LEN_VERSION                           1
1154 #define WSC_ATTRI_MAX_LEN_DEVICE_PASSWORD_ID                2
1155 #define WSC_ATTRI_LEN_CONFIG_METHOD                         2
1156
1157 /* WPS 11 - Data Element Definitions */
1158 #define WPS_ATTRI_ID_VERSION            0x104A
1159 #define WPS_ATTRI_ID_CONFIGURATION_METHODS   0x1008
1160 #define WPS_ATTRI_ID_DEVICE_PASSWORD    0x1012
1161 #define WPS_ATTRI_ID_DEVICE_NAME        0x1011
1162 #define WPS_ATTRI_ID_PRI_DEVICE_TYPE    0x1054
1163 #define WPS_ATTRI_ID_SEC_DEVICE_TYPE    0x1055
1164
1165 #define WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE           300
1166
1167 #define WPS_ATTRI_MAX_LEN_DEVICE_NAME   32  /* 0x1011 */
1168
1169 #define WPS_ATTRI_CFG_METHOD_USBA           BIT(0)
1170 #define WPS_ATTRI_CFG_METHOD_ETHERNET       BIT(1)
1171 #define WPS_ATTRI_CFG_METHOD_LABEL          BIT(2)
1172 #define WPS_ATTRI_CFG_METHOD_DISPLAY        BIT(3)
1173 #define WPS_ATTRI_CFG_METHOD_EXT_NFC        BIT(4)
1174 #define WPS_ATTRI_CFG_METHOD_INT_NFC        BIT(5)
1175 #define WPS_ATTRI_CFG_METHOD_NFC_IF         BIT(6)
1176 #define WPS_ATTRI_CFG_METHOD_PUSH_BUTTON    BIT(7)
1177 #define WPS_ATTRI_CFG_METHOD_KEYPAD         BIT(8)
1178
1179
1180 #define P2P_FLAGS_PROVISION_COMPLETE                            0x00000001
1181 #define P2P_FLAGS_PROVISION_DISCOVERY_COMPLETE        0x00000002
1182 #define P2P_FLAGS_PROVISION_DISCOVERY_WAIT_RESPONSE 0x00000004
1183 #define P2P_FLAGS_PROVISION_DISCOVERY_RESPONSE_WAIT  0x00000008
1184 #define P2P_FLAGS_MASK_PROVISION                                    0x00000017
1185 #define P2P_FLAGS_MASK_PROVISION_COMPLETE                   0x00000015
1186 #define P2P_FLAGS_PROVISION_DISCOVERY_INDICATED        0x00000010
1187 #define P2P_FLAGS_INVITATION_TOBE_GO                            0x00000100
1188 #define P2P_FLAGS_INVITATION_TOBE_GC                            0x00000200
1189 #define P2P_FLAGS_INVITATION_SUCCESS                            0x00000400
1190 #define P2P_FLAGS_INVITATION_WAITING_TARGET                            0x00000800
1191 #define P2P_FLAGS_MASK_INVITATION                                  0x00000F00
1192 #define P2P_FLAGS_FORMATION_ON_GOING                          0x00010000
1193 #define P2P_FLAGS_FORMATION_LOCAL_PWID_RDY              0x00020000
1194 #define P2P_FLAGS_FORMATION_TARGET_PWID_RDY           0x00040000
1195 #define P2P_FLAGS_FORMATION_COMPLETE                            0x00080000
1196 #define P2P_FLAGS_MASK_FORMATION                                  0x000F0000
1197 #define P2P_FLAGS_DEVICE_DISCOVER_REQ                        0x00100000
1198 #define P2P_FLAGS_DEVICE_DISCOVER_DONE                       0x00200000
1199 #define P2P_FLAGS_DEVICE_INVITATION_WAIT                      0x00400000
1200 #define P2P_FLAGS_DEVICE_SERVICE_DISCOVER_WAIT         0x00800000
1201 #define P2P_FLAGS_MASK_DEVICE_DISCOVER                        0x00F00000
1202
1203 #define P2P_FLAGS_DEVICE_FORMATION_REQUEST                 0x01000000
1204
1205
1206 /* MACRO for flag operation */
1207 #define SET_FLAGS(_FlagsVar, _BitsToSet) \
1208         (_FlagsVar) = ((_FlagsVar) | (_BitsToSet))
1209
1210 #define TEST_FLAGS(_FlagsVar, _BitsToCheck) \
1211         (((_FlagsVar) & (_BitsToCheck)) == (_BitsToCheck))
1212
1213 #define CLEAR_FLAGS(_FlagsVar, _BitsToClear) \
1214         (_FlagsVar) &= ~(_BitsToClear)
1215
1216
1217
1218 #define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_I     0
1219
1220 #define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_II     0
1221
1222 #define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_III     0
1223
1224 #define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_IV     0
1225
1226 #define CFG_DISABLE_DELAY_PROVISION_DISCOVERY      0
1227
1228 #define CFG_CONNECTION_POLICY_2_0                            0
1229
1230 /* Device Password ID */
1231 enum wps_dev_password_id {
1232     DEV_PW_DEFAULT = 0x0000,
1233     DEV_PW_USER_SPECIFIED = 0x0001,
1234     DEV_PW_MACHINE_SPECIFIED = 0x0002,
1235     DEV_PW_REKEY = 0x0003,
1236     DEV_PW_PUSHBUTTON = 0x0004,
1237     DEV_PW_REGISTRAR_SPECIFIED = 0x0005
1238 };
1239
1240 /*******************************************************************************
1241 *                             D A T A   T Y P E S
1242 ********************************************************************************
1243 */
1244 #if defined(WINDOWS_DDK) || defined(WINDOWS_CE)
1245 #pragma pack(1)
1246 #endif
1247
1248 //3 /* --------------- WFA P2P IE and Attributes --------------- */
1249
1250 /* P2P 4.1.1 - P2P Information Element */
1251 typedef struct _IE_P2P_T {
1252     UINT_8      ucId;                   /* Element ID */
1253     UINT_8      ucLength;               /* Length */
1254     UINT_8      aucOui[3];              /* OUI */
1255     UINT_8      ucOuiType;              /* OUI Type */
1256     UINT_8      aucP2PAttributes[1];    /* P2P Attributes */
1257 } __KAL_ATTRIB_PACKED__ IE_P2P_T, *P_IE_P2P_T;
1258
1259 /* P2P 4.1.1 - General P2P Attribute */
1260 typedef struct _P2P_ATTRIBUTE_T {
1261     UINT_8      ucId;                   /* Attribute ID */
1262     UINT_16     u2Length;               /* Length */
1263     UINT_8      aucBody[1];             /* Body field */
1264 } __KAL_ATTRIB_PACKED__ P2P_ATTRIBUTE_T, ATTRIBUTE_HDR_T, *P_P2P_ATTRIBUTE_T, *P_ATTRIBUTE_HDR_T;
1265
1266
1267 /* P2P 4.1.2 - P2P Status Attribute */
1268 typedef struct _P2P_ATTRI_STATUS_T {
1269     UINT_8      ucId;                   /* Attribute ID */
1270     UINT_16     u2Length;               /* Length */
1271     UINT_8      ucStatusCode;           /* Status Code */
1272 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_STATUS_T, *P_P2P_ATTRI_STATUS_T;
1273
1274
1275 /* P2P 4.1.3 - P2P Minor Reason Code Attribute */
1276 typedef struct _P2P_ATTRI_REASON_T {
1277     UINT_8      ucId;                   /* Attribute ID */
1278     UINT_16     u2Length;               /* Length */
1279     UINT_8      ucMinorReasonCode;      /* Minor Reason Code */
1280 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_REASON_T, *P_P2P_ATTRI_REASON_T;
1281
1282
1283 /* P2P 4.1.4 - P2P Capability Attribute */
1284 typedef struct _P2P_ATTRI_CAPABILITY_T {
1285     UINT_8      ucId;                   /* Attribute ID */
1286     UINT_16     u2Length;               /* Length */
1287     UINT_8      ucDeviceCap;            /* Device Capability Bitmap */
1288     UINT_8      ucGroupCap;             /* Group Capability Bitmap */
1289 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_CAPABILITY_T, *P_P2P_ATTRI_CAPABILITY_T;
1290
1291
1292 /* P2P 4.1.5 - P2P Device ID Attribute */
1293 typedef struct _P2P_ATTRI_DEV_ID_T {
1294     UINT_8      ucId;                       /* Attribute ID */
1295     UINT_16     u2Length;                   /* Length */
1296     UINT_8      aucDevAddr[MAC_ADDR_LEN];   /* P2P Device Address */
1297 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_DEV_ID_T, *P_P2P_ATTRI_DEV_ID_T;
1298
1299
1300 /* P2P 4.1.6 - Group Owner Intent Attribute */
1301 typedef struct _P2P_ATTRI_GO_INTENT_T {
1302     UINT_8      ucId;                   /* Attribute ID */
1303     UINT_16     u2Length;               /* Length */
1304     UINT_8      ucGOIntent;             /* Group Owner Intent */
1305 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_GO_INTENT_T, *P_P2P_ATTRI_GO_INTENT_T;
1306
1307
1308 /* P2P 4.1.7 - Configuration Timeout Attribute */
1309 typedef struct _P2P_ATTRI_CFG_TIMEOUT_T {
1310     UINT_8      ucId;                   /* Attribute ID */
1311     UINT_16     u2Length;               /* Length */
1312     UINT_8      ucGOCfgTimeout;         /* GO Configuration Timeout */
1313     UINT_8      ucClientCfgTimeout;     /* Client Configuration Timeout */
1314 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_CFG_TIMEOUT_T, *P_P2P_ATTRI_CFG_TIMEOUT_T;
1315
1316
1317 /* P2P 4.1.8 - Listen Channel Attribute */
1318 typedef struct _P2P_ATTRI_LISTEN_CHANNEL_T {
1319     UINT_8      ucId;                   /* Attribute ID */
1320     UINT_16     u2Length;               /* Length */
1321     UINT_8      aucCountryString[3];    /* Country String */
1322     UINT_8      ucOperatingClass;       /* Operating Class from 802.11 Annex J/P802.11 REVmb 3.0 */
1323     UINT_8      ucChannelNumber;        /* Channel Number */
1324 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_LISTEN_CHANNEL_T, *P_P2P_ATTRI_LISTEN_CHANNEL_T;
1325
1326
1327 /* P2P 4.1.9 - P2P Group BSSID Attribute */
1328 typedef struct _P2P_ATTRI_GROUP_BSSID_T {
1329     UINT_8      ucId;                   /* Attribute ID */
1330     UINT_16     u2Length;               /* Length */
1331     UINT_8      aucBssid[MAC_ADDR_LEN]; /* P2P Group BSSID */
1332 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_GROUP_BSSID_T, *P_P2P_ATTRI_GROUP_BSSID_T;
1333
1334
1335 /* P2P 4.1.10 - Extended Listen Timing Attribute */
1336 typedef struct _P2P_ATTRI_EXT_LISTEN_TIMING_T {
1337     UINT_8      ucId;                   /* Attribute ID */
1338     UINT_16     u2Length;               /* Length */
1339     UINT_16     u2AvailPeriod;          /* Availability Period */
1340     UINT_16     u2AvailInterval;        /* Availability Interval */
1341 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_EXT_LISTEN_TIMING_T, *P_P2P_ATTRI_EXT_LISTEN_TIMING_T;
1342
1343
1344 /* P2P 4.1.11 - Intended P2P Interface Address Attribute */
1345 typedef struct _P2P_ATTRI_INTENDED_IF_ADDR_T {
1346     UINT_8      ucId;                   /* Attribute ID */
1347     UINT_16     u2Length;               /* Length */
1348     UINT_8      aucIfAddr[MAC_ADDR_LEN];/* P2P Interface Address */
1349 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_INTENDED_IF_ADDR_T, *P_P2P_ATTRI_INTENDED_IF_ADDR_T;
1350
1351
1352 /* P2P 4.1.12 - P2P Manageability Attribute */
1353 typedef struct _P2P_ATTRI_MANAGEABILITY_T {
1354     UINT_8      ucId;                   /* Attribute ID */
1355     UINT_16     u2Length;               /* Length */
1356     UINT_8      ucManageability;        /* P2P Manageability Bitmap */
1357 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_MANAGEABILITY_T, *P_P2P_ATTRI_MANAGEABILITY_T;
1358
1359
1360 /* P2P 4.1.13 - Channel List Attribute */
1361 typedef struct _P2P_ATTRI_CHANNEL_LIST_T {
1362     UINT_8      ucId;                   /* Attribute ID */
1363     UINT_16     u2Length;               /* Length */
1364     UINT_8      aucCountryString[3];    /* Country String */
1365     UINT_8      aucChannelEntry[1];     /* Channel Entry List */
1366 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_CHANNEL_T, *P_P2P_ATTRI_CHANNEL_T;
1367
1368 typedef struct _CHANNEL_ENTRY_FIELD_T {
1369     UINT_8      ucRegulatoryClass;      /* Regulatory Class */
1370     UINT_8      ucNumberOfChannels;     /* Number Of Channels */
1371     UINT_8      aucChannelList[1];      /* Channel List */
1372 } __KAL_ATTRIB_PACKED__ CHANNEL_ENTRY_FIELD_T, *P_CHANNEL_ENTRY_FIELD_T;
1373
1374
1375 /* P2P 4.1.14 - Notice of Absence Attribute */
1376 typedef struct _P2P_ATTRI_NOA_T {
1377     UINT_8      ucId;                   /* Attribute ID */
1378     UINT_16     u2Length;               /* Length */
1379     UINT_8      ucIndex;                /* Index */
1380     UINT_8      ucCTWOppPSParam;        /* CTWindow and OppPS Parameters */
1381     UINT_8      aucNoADesc[1];          /* NoA Descriptor */
1382 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_NOA_T, *P_P2P_ATTRI_NOA_T;
1383
1384 typedef struct _NOA_DESCRIPTOR_T {
1385     UINT_8      ucCountType;            /* Count/Type */
1386     UINT_32     u4Duration;             /* Duration */
1387     UINT_32     u4Interval;             /* Interval */
1388     UINT_32     u4StartTime;            /* Start Time */
1389 } __KAL_ATTRIB_PACKED__ NOA_DESCRIPTOR_T, *P_NOA_DESCRIPTOR_T;
1390
1391 typedef struct _P2P_ATTRI_DEV_INFO_T {
1392     UINT_8      ucId;                           /* Attribute ID */
1393     UINT_16     u2Length;                       /* Length */
1394     UINT_8      aucDevAddr[MAC_ADDR_LEN];       /* P2P Device Address */
1395     UINT_16     u2ConfigMethodsBE;               /* Config Method */
1396     DEVICE_TYPE_T rPrimaryDevTypeBE;            /* Primary Device Type */
1397     UINT_8      ucNumOfSecondaryDevType;        /* Number of Secondary Device Types */
1398     DEVICE_TYPE_T arSecondaryDevTypeListBE[1];  /* Secondary Device Type List */
1399 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_DEV_INFO_T, *P_P2P_ATTRI_DEV_INFO_T;
1400
1401 /* WPS 7.1 & 11 WPS TLV Data Format - Device Name */
1402 typedef struct _DEVICE_NAME_TLV_T {
1403     UINT_16     u2Id;                       /* WPS Attribute Type */
1404     UINT_16     u2Length;                   /* Data Length */
1405     UINT_8      aucName[32];                /* Device Name */    // TODO: Fixme
1406 } __KAL_ATTRIB_PACKED__ DEVICE_NAME_TLV_T, *P_DEVICE_NAME_TLV_T;
1407
1408
1409 /* P2P 4.1.16 - P2P Group Info Attribute */
1410 typedef struct _P2P_CLIENT_INFO_DESC_T {
1411     UINT_8      ucLength;                       /* Length */
1412     UINT_8      aucDevAddr[MAC_ADDR_LEN];       /* P2P Device Address */
1413     UINT_8      aucIfAddr[MAC_ADDR_LEN];        /* P2P Interface Address */
1414     UINT_8      ucDeviceCap;                    /* Device Capability Bitmap */
1415     UINT_16     u2ConfigMethodsBE;               /* Config Method */
1416     DEVICE_TYPE_T rPrimaryDevTypeBE;            /* Primary Device Type */
1417     UINT_8      ucNumOfSecondaryDevType;        /* Number of Secondary Device Types */
1418     DEVICE_TYPE_T arSecondaryDevTypeListBE[1];  /* Secondary Device Type List */
1419 } __KAL_ATTRIB_PACKED__ P2P_CLIENT_INFO_DESC_T, *P_P2P_CLIENT_INFO_DESC_T;
1420
1421 typedef struct _P2P_ATTRI_GROUP_INFO_T {
1422     UINT_8      ucId;                       /* Attribute ID */
1423     UINT_16     u2Length;                   /* Length */
1424     P2P_CLIENT_INFO_DESC_T arClientDesc[1]; /* P2P Client Info Descriptors */
1425 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_GROUP_INFO_T, *P_P2P_ATTRI_GROUP_INFO_T;
1426
1427
1428 /* P2P 4.1.17 - P2P Group ID Attribute */
1429 typedef struct _P2P_ATTRI_GROUP_ID_T {
1430     UINT_8      ucId;                       /* Attribute ID */
1431     UINT_16     u2Length;                   /* Length */
1432     UINT_8      aucDevAddr[MAC_ADDR_LEN];   /* P2P Device Address */
1433     UINT_8      aucSSID[ELEM_MAX_LEN_SSID]; /* SSID */
1434 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_GROUP_ID_T, *P_P2P_ATTRI_GROUP_ID_T;
1435
1436
1437 /* P2P 4.1.18 - P2P Interface Attribute */
1438 typedef struct _P2P_ATTRI_INTERFACE_T {
1439     UINT_8      ucId;                       /* Attribute ID */
1440     UINT_16     u2Length;                   /* Length */
1441     UINT_8      aucDevAddr[MAC_ADDR_LEN];   /* P2P Device Address */
1442     UINT_8      ucIfAddrCount;              /* P2P Interface Address Count */
1443     UINT_8      aucIfAddrList[MAC_ADDR_LEN];/* P2P Interface Address List */
1444 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_INTERFACE_T, *P_P2P_ATTRI_INTERFACE_T;
1445
1446
1447 /* P2P 4.1.19 - Operating Channel Attribute */
1448 typedef struct _P2P_ATTRI_OPERATING_CHANNEL_T {
1449     UINT_8      ucId;                   /* Attribute ID */
1450     UINT_16     u2Length;               /* Length */
1451     UINT_8      aucCountryString[3];    /* Country String */
1452     UINT_8      ucOperatingClass;       /* Operating Class from 802.11 Annex J/P802.11 REVmb 3.0 */
1453     UINT_8      ucChannelNumber;        /* Channel Number */
1454 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_OPERATING_CHANNEL_T, *P_P2P_ATTRI_OPERATING_CHANNEL_T;
1455
1456 /* P2P 4.1.20 - Invitation Flags Attribute */
1457 typedef struct _P2P_ATTRI_INVITATION_FLAG_T {
1458     UINT_8 ucId;                        /* Attribute ID */
1459     UINT_16 u2Length;               /* Length */
1460     UINT_8 ucInviteFlagsBitmap;    /* Invitation Flags Bitmap */
1461 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_INVITATION_FLAG_T, *P_P2P_ATTRI_INVITATION_FLAG_T;
1462
1463
1464
1465 /* P2P 4.1.1 - General WSC Attribute */
1466 typedef struct _WSC_ATTRIBUTE_T {
1467     UINT_16     u2Id;                   /* Attribute ID */
1468     UINT_16     u2Length;               /* Length */
1469     UINT_8      aucBody[1];             /* Body field */
1470 } __KAL_ATTRIB_PACKED__ WSC_ATTRIBUTE_T, *P_WSC_ATTRIBUTE_T;
1471
1472 /* WSC 1.0 Table 28 */
1473 typedef struct _WSC_ATTRI_VERSION_T {
1474     UINT_16     u2Id;                   /* Attribute ID */
1475     UINT_16     u2Length;               /* Length */
1476     UINT_8      ucVersion;              /* Version 1.0 or 1.1 */
1477 } __KAL_ATTRIB_PACKED__ WSC_ATTRI_VERSION_T, *P_WSC_ATTRI_VERSION_T;
1478
1479 typedef struct _WSC_ATTRI_DEVICE_PASSWORD_ID_T {
1480     UINT_16     u2Id;                   /* Attribute ID */
1481     UINT_16     u2Length;               /* Length */
1482     UINT_16     u2DevPasswordId;        /* Device Password ID */
1483 } __KAL_ATTRIB_PACKED__ WSC_ATTRI_DEVICE_PASSWORD_ID_T, *P_WSC_ATTRI_DEVICE_PASSWORD_ID_T;
1484
1485
1486 typedef struct _WSC_ATTRI_CONFIGURATION_METHOD_T {
1487     UINT_16 u2Id;                       /* Attribute ID */
1488     UINT_16 u2Length;               /* Length */
1489     UINT_16 u2ConfigMethods;     /* Configure Methods */
1490 } __KAL_ATTRIB_PACKED__ WSC_ATTRI_CONFIGURATION_METHOD_T, *P_WSC_ATTRI_CONFIGURATION_METHOD_T;
1491
1492
1493 #if defined(WINDOWS_DDK) || defined(WINDOWS_CE)
1494 #pragma pack()
1495 #endif
1496
1497
1498 //3 /* --------------- WFA P2P Attributes Handler prototype --------------- */
1499 typedef UINT_32 (*PFN_APPEND_ATTRI_FUNC)(P_ADAPTER_T, BOOLEAN, PUINT_16, PUINT_8, UINT_16);
1500
1501 typedef VOID (*PFN_HANDLE_ATTRI_FUNC)(P_SW_RFB_T, P_P2P_ATTRIBUTE_T);
1502
1503 typedef VOID (*PFN_VERIFY_ATTRI_FUNC)(P_SW_RFB_T, P_P2P_ATTRIBUTE_T, PUINT_16);
1504
1505 typedef UINT_32 (*PFN_CALCULATE_VAR_ATTRI_LEN_FUNC)(P_ADAPTER_T, P_STA_RECORD_T);
1506
1507
1508 typedef struct _APPEND_VAR_ATTRI_ENTRY_T {
1509     UINT_16                             u2EstimatedFixedAttriLen; /* For fixed length */
1510     PFN_CALCULATE_VAR_ATTRI_LEN_FUNC    pfnCalculateVariableAttriLen;
1511     PFN_APPEND_ATTRI_FUNC               pfnAppendAttri;
1512 } APPEND_VAR_ATTRI_ENTRY_T, *P_APPEND_VAR_ATTRI_ENTRY_T;
1513
1514 typedef enum _ENUM_CONFIG_METHOD_SEL {
1515     ENUM_CONFIG_METHOD_SEL_AUTO,
1516     ENUM_CONFIG_METHOD_SEL_USER,
1517     ENUM_CONFIG_METHOD_SEL_NUM
1518 } ENUM_CONFIG_METHOD_SEL, *P_ENUM_CONFIG_METHOD_SEL;
1519
1520 typedef enum _ENUM_P2P_FORMATION_POLICY {
1521     ENUM_P2P_FORMATION_POLICY_AUTO = 0,
1522     ENUM_P2P_FORMATION_POLICY_PASSIVE,   /* Device would wait GO NEGO REQ instead of sending it actively. */
1523     ENUM_P2P_FORMATION_POLICY_NUM
1524 } ENUM_P2P_FORMATION_POLICY, P_ENUM_P2P_FORMATION_POLICY;
1525
1526 typedef enum _ENUM_P2P_INVITATION_POLICY {
1527     ENUM_P2P_INVITATION_POLICY_USER = 0,
1528     ENUM_P2P_INVITATION_POLICY_ACCEPT_FIRST,
1529     ENUM_P2P_INVITATION_POLICY_DENY_ALL,
1530     ENUM_P2P_INVITATION_POLICY_NUM
1531 } ENUM_P2P_INVITATION_POLICY, P_ENUM_P2P_INVITATION_POLICY;
1532
1533 //3 /* --------------- Data Structure for P2P Operation --------------- */
1534 //3 /* Session for CONNECTION SETTINGS of P2P */
1535 struct _P2P_CONNECTION_SETTINGS_T {
1536     UINT_8 ucDevNameLen;
1537     UINT_8 aucDevName[WPS_ATTRI_MAX_LEN_DEVICE_NAME];
1538
1539     DEVICE_TYPE_T rPrimaryDevTypeBE;
1540
1541     ENUM_P2P_FORMATION_POLICY eFormationPolicy;            /* Formation Policy. */
1542
1543     /*------------WSC Related Param---------------*/
1544     UINT_16 u2ConfigMethodsSupport;              /* Prefered configure method.
1545                                                                         * Some device may not have keypad.
1546                                                                         */
1547     ENUM_CONFIG_METHOD_SEL eConfigMethodSelType;
1548     UINT_16 u2TargetConfigMethod;                        /* Configure method selected by user or auto. */
1549     UINT_16 u2LocalConfigMethod;                        /* Configure method of target. */
1550     BOOLEAN fgIsPasswordIDRdy;
1551     /*------------WSC Related Param---------------*/
1552
1553     UINT_8 ucClientConfigTimeout;
1554     UINT_8 ucGoConfigTimeout;
1555
1556     UINT_8 ucSecondaryDevTypeCount;
1557 #if P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT
1558     DEVICE_TYPE_T                   arSecondaryDevTypeBE[P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT];
1559 #endif
1560
1561
1562 #if 0
1563     UINT_8 ucRfChannelListCount;
1564 #if P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT
1565     UINT_8            aucChannelList[P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT];      /* Channel Numbering depends on 802.11mb Annex J. */
1566
1567 #endif
1568 #else
1569     UINT_8 ucRfChannelListSize;
1570 #if P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE
1571     UINT_8 aucChannelEntriesField[P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE];
1572 #endif
1573 #endif
1574
1575     /* Go Intent */
1576     UINT_8 ucTieBreaker;
1577     UINT_8 ucGoIntent;
1578
1579     /* For Device Capability */
1580     BOOLEAN fgSupportServiceDiscovery;
1581     BOOLEAN fgSupportClientDiscoverability;
1582     BOOLEAN fgSupportConcurrentOperation;
1583     BOOLEAN fgSupportInfraManaged;
1584     BOOLEAN fgSupportInvitationProcedure;
1585
1586     /* For Group Capability */
1587     BOOLEAN fgSupportPersistentP2PGroup;
1588     BOOLEAN fgSupportIntraBSSDistribution;
1589     BOOLEAN fgSupportCrossConnection;
1590     BOOLEAN fgSupportPersistentReconnect;
1591
1592     BOOLEAN fgP2pGroupLimit;
1593
1594     BOOLEAN fgSupportOppPS;
1595     UINT_16 u2CTWindow;
1596
1597     BOOLEAN fgIsScanReqIssued;
1598     BOOLEAN fgIsServiceDiscoverIssued;
1599
1600
1601     /*============ Target Device Connection Settings ============*/
1602
1603     /* Discover Target Device Info. */
1604     BOOLEAN fgIsDevId;
1605     BOOLEAN fgIsDevType;
1606
1607     /* Encryption mode of Target Device */
1608     ENUM_PARAM_AUTH_MODE_T          eAuthMode;
1609
1610     /* SSID
1611       *  1. AP Mode, this is the desired SSID user specified.
1612       *  2. Client Mode, this is the target SSID to be connected to.
1613       */
1614     UINT_8 aucSSID[ELEM_MAX_LEN_SSID];
1615     UINT_8 ucSSIDLen;
1616
1617     /* Operating channel requested. */
1618     UINT_8 ucOperatingChnl;
1619     ENUM_BAND_T eBand;
1620
1621     /* Linten channel requested. */
1622     UINT_8 ucListenChnl;
1623
1624     /* For device discover address/type. */
1625     UINT_8 aucTargetDevAddr[MAC_ADDR_LEN];   /* P2P Device Address, for P2P Device Discovery & P2P Connection. */
1626
1627 #if CFG_ENABLE_WIFI_DIRECT
1628     P_P2P_DEVICE_DESC_T prTargetP2pDesc;
1629 #endif
1630
1631     UINT_8 ucLastStatus;  /* P2P FSM would append status attribute according to this field. */
1632
1633
1634 #if !CFG_DISABLE_DELAY_PROVISION_DISCOVERY
1635     UINT_8 ucLastDialogToken;
1636     UINT_8 aucIndicateDevAddr[MAC_ADDR_LEN];
1637 #endif
1638
1639 #if 0
1640     UINT_8 ucTargetRfChannelListCount;
1641 #if P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT
1642     UINT_8            aucTargetChannelList[P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT];      /* Channel Numbering depends on 802.11mb Annex J. */
1643 #endif
1644 #endif
1645
1646 };
1647
1648
1649 typedef struct _NOA_TIMING_T {
1650     BOOLEAN     fgIsInUse;              /* Indicate if this entry is in use or not */
1651     UINT_8      ucCount;                /* Count */
1652
1653     UINT_8      aucReserved[2];
1654
1655     UINT_32     u4Duration;             /* Duration */
1656     UINT_32     u4Interval;             /* Interval */
1657     UINT_32     u4StartTime;            /* Start Time */
1658 } NOA_TIMING_T, *P_NOA_TIMING_T;
1659
1660 typedef enum _ENUM_P2P_IOCTL_T {
1661     P2P_IOCTL_IDLE = 0,
1662     P2P_IOCTL_DEV_DISCOVER,
1663     P2P_IOCTL_INVITATION_REQ,
1664     P2P_IOCTL_SERV_DISCOVER,
1665     P2P_IOCTL_WAITING,
1666     P2P_IOCTL_NUM
1667 } ENUM_P2P_IOCTL_T;
1668
1669
1670
1671 /*---------------- Service Discovery Related -------------------*/
1672 typedef enum _ENUM_SERVICE_TX_TYPE_T {
1673     ENUM_SERVICE_TX_TYPE_BY_DA,
1674     ENUM_SERVICE_TX_TYPE_BY_CHNL,
1675     ENUM_SERVICE_TX_TYPE_NUM
1676 } ENUM_SERVICE_TX_TYPE_T;
1677
1678
1679 typedef struct _SERVICE_DISCOVERY_FRAME_DATA_T {
1680     QUE_ENTRY_T rQueueEntry;
1681     P_MSDU_INFO_T prSDFrame;
1682     ENUM_SERVICE_TX_TYPE_T eServiceType;
1683     UINT_8 ucSeqNum;
1684     union {
1685
1686         UINT_8 ucChannelNum;
1687         UINT_8 aucPeerAddr[MAC_ADDR_LEN];
1688     } uTypeData;
1689     BOOLEAN fgIsTxDoneIndicate;
1690 } SERVICE_DISCOVERY_FRAME_DATA_T, *P_SERVICE_DISCOVERY_FRAME_DATA_T;
1691
1692
1693
1694
1695 struct _P2P_FSM_INFO_T_DEPRECATED {
1696     /* P2P FSM State */
1697     ENUM_P2P_STATE_T    eCurrentState;
1698
1699     /* Channel */
1700     BOOLEAN fgIsChannelRequested;
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711     ENUM_P2P_STATE_T    ePreviousState;
1712
1713     ENUM_P2P_STATE_T    eReturnState;     /* Return state after current activity finished or abort. */
1714
1715     UINT_8 aucTargetIfAddr[PARAM_MAC_ADDR_LEN];
1716     P_BSS_DESC_T prTargetBss; /* BSS of target P2P Device. For Connection/Service Discovery */
1717
1718     P_STA_RECORD_T prTargetStaRec;
1719
1720     BOOLEAN fgIsRsponseProbe; /* Indicate if P2P FSM can response probe request frame. */
1721
1722     /* Sequence number of requested message. */
1723     UINT_8 ucSeqNumOfReqMsg;        /* Used for SAA FSM request message. */
1724
1725     /* Channel Privilege */
1726     UINT_8 ucSeqNumOfChReq;         /* Used for Channel Request message. */
1727
1728
1729     UINT_8 ucSeqNumOfScnMsg;        /* Used for SCAN FSM request message. */
1730     UINT_8 ucSeqNumOfCancelMsg;
1731
1732     UINT_8 ucDialogToken;
1733     UINT_8 ucRxDialogToken;
1734
1735     /* Timer */
1736     TIMER_T rDeviceDiscoverTimer;     /* For device discovery time of each discovery request from user.*/
1737     TIMER_T rOperationListenTimer;     /* For Find phase under operational state. */
1738     TIMER_T rFSMTimer;                      /* A timer used for Action frame timeout usage. */
1739
1740     TIMER_T rRejoinTimer;                      /* A timer used for Action frame timeout usage. */
1741
1742
1743     /* Flag to indicate Provisioning */
1744     BOOLEAN fgIsConnectionRequested;
1745
1746     /* Current IOCTL. */
1747     ENUM_P2P_IOCTL_T eP2pIOCTL;
1748
1749     UINT_8              ucAvailableAuthTypes;       /* Used for AUTH_MODE_AUTO_SWITCH */
1750
1751     /*--------SERVICE DISCOVERY--------*/
1752     QUE_T rQueueGASRx;    /* Input Request/Response. */
1753     QUE_T rQueueGASTx;    /* Output Response. */
1754     P_SERVICE_DISCOVERY_FRAME_DATA_T prSDRequest;
1755     UINT_8 ucVersionNum;   /* GAS packet sequence number for...Action Frame? */
1756     UINT_8 ucGlobalSeqNum; /* Sequence Number of RX SD packet. */
1757     /*--------Service DISCOVERY--------*/
1758
1759     /*--------DEVICE DISCOVERY---------*/
1760     UINT_8 aucTargetGroupID[PARAM_MAC_ADDR_LEN];
1761     UINT_16 u2TargetGroupSsidLen;
1762     UINT_8 aucTargetSsid[32];
1763     UINT_8 aucSearchingP2pDevice[PARAM_MAC_ADDR_LEN];
1764     UINT_8 ucDLToken;
1765     /*----------------------------------*/
1766
1767     /* Indicating Peer Status. */
1768     UINT_32 u4Flags;
1769
1770     /*Indicating current running mode.*/
1771     BOOLEAN fgIsApMode;
1772
1773
1774     /*------------INVITATION------------*/
1775     ENUM_P2P_INVITATION_POLICY eInvitationRspPolicy;
1776     /*----------------------------------*/
1777
1778 };
1779
1780
1781
1782 struct _P2P_SPECIFIC_BSS_INFO_T {
1783     /* For GO(AP) Mode - Compose TIM IE */
1784     UINT_16                 u2SmallestAID;
1785     UINT_16                 u2LargestAID;
1786     UINT_8                  ucBitmapCtrl;
1787     //UINT_8                  aucPartialVirtualBitmap[MAX_LEN_TIM_PARTIAL_BMP];
1788
1789     /* For GC/GO OppPS */
1790     BOOLEAN                 fgEnableOppPS;
1791     UINT_16                 u2CTWindow;
1792
1793     /* For GC/GO NOA */
1794     UINT_8                  ucNoAIndex;
1795     UINT_8                  ucNoATimingCount; /* Number of NoA Timing */
1796     NOA_TIMING_T            arNoATiming[P2P_MAXIMUM_NOA_COUNT];
1797
1798     BOOLEAN                 fgIsNoaAttrExisted;
1799
1800     /* For P2P Device */
1801     UINT_8                  ucRegClass;       /* Regulatory Class for channel. */
1802     UINT_8                  ucListenChannel; /* Linten Channel only on channels 1, 6 and 11 in the 2.4 GHz. */
1803
1804     UINT_8 ucPreferredChannel; /* Operating Channel, should be one of channel list in p2p connection settings. */
1805     ENUM_CHNL_EXT_T eRfSco;
1806     ENUM_BAND_T eRfBand;
1807
1808     /* Extened Listen Timing. */
1809     UINT_16 u2AvailabilityPeriod;
1810     UINT_16 u2AvailabilityInterval;
1811
1812
1813 #if 0 //LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0)
1814     UINT_16                 u2IELenForBCN;
1815     UINT_8                  aucBeaconIECache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE + WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE];
1816
1817 //    UINT_16                 u2IELenForProbeRsp;
1818 //    UINT_8                  aucProbeRspIECache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE + WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE];
1819
1820     UINT_16                 u2IELenForAssocRsp;
1821     UINT_8                  aucAssocRspIECache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE + WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE];
1822     
1823 #else
1824     UINT_16                 u2AttributeLen;
1825     UINT_8                  aucAttributesCache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE];
1826
1827     UINT_16                 u2WscAttributeLen;
1828     UINT_8                  aucWscAttributesCache[WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE];
1829 #endif
1830     UINT_8 aucGroupID[MAC_ADDR_LEN];
1831     UINT_16 u2GroupSsidLen;
1832     UINT_8 aucGroupSsid[ELEM_MAX_LEN_SSID];
1833
1834     PARAM_CUSTOM_NOA_PARAM_STRUC_T rNoaParam;
1835     PARAM_CUSTOM_OPPPS_PARAM_STRUC_T rOppPsParam;
1836
1837         UINT_16                 u2WpaIeLen;
1838         UINT_8                  aucWpaIeBuffer[ELEM_HDR_LEN + ELEM_MAX_LEN_WPA];
1839
1840 };
1841
1842
1843
1844
1845
1846
1847
1848 typedef struct _MSG_P2P_DEVICE_DISCOVER_T {
1849     MSG_HDR_T       rMsgHdr;    /* Must be the first member */
1850     UINT_32 u4DevDiscoverTime;    /* 0: Infinite, 1~X: in unit of MS. */
1851     BOOLEAN fgIsSpecificType;
1852 #if CFG_ENABLE_WIFI_DIRECT
1853     P2P_DEVICE_TYPE_T rTargetDeviceType;
1854 #endif
1855     UINT_8 aucTargetDeviceID[MAC_ADDR_LEN];
1856 } MSG_P2P_DEVICE_DISCOVER_T, *P_MSG_P2P_DEVICE_DISCOVER_T;
1857
1858
1859
1860 typedef struct _MSG_P2P_INVITATION_REQUEST_T {
1861     MSG_HDR_T       rMsgHdr;    /* Must be the first member */
1862     UINT_8 aucDeviceID[MAC_ADDR_LEN];    /* Target Device ID to be invited. */
1863 } MSG_P2P_INVITATION_REQUEST_T, *P_MSG_P2P_INVITATION_REQUEST_T;
1864
1865 typedef struct _MSG_P2P_FUNCTION_SWITCH_T {
1866     MSG_HDR_T       rMsgHdr;    /* Must be the first member */
1867     BOOLEAN fgIsFuncOn;
1868 } MSG_P2P_FUNCTION_SWITCH_T, *P_MSG_P2P_FUNCTION_SWITCH_T;
1869
1870 typedef struct _MSG_P2P_SERVICE_DISCOVERY_REQUEST_T {
1871     MSG_HDR_T       rMsgHdr;    /* Must be the first member */
1872     UINT_8 aucDeviceID[MAC_ADDR_LEN];
1873     BOOLEAN fgNeedTxDoneIndicate;
1874     UINT_8 ucSeqNum;
1875 } MSG_P2P_SERVICE_DISCOVERY_REQUEST_T, *P_MSG_P2P_SERVICE_DISCOVERY_REQUEST_T;
1876
1877
1878
1879 /*******************************************************************************
1880 *                            P U B L I C   D A T A
1881 ********************************************************************************
1882 */
1883
1884 /*******************************************************************************
1885 *                           P R I V A T E   D A T A
1886 ********************************************************************************
1887 */
1888
1889 /*******************************************************************************
1890 *                                 M A C R O S
1891 ********************************************************************************
1892 */
1893 #define p2pChangeMediaState(_prAdapter, _eNewMediaState) \
1894             (_prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX].eConnectionState = (_eNewMediaState));
1895
1896 #define ATTRI_ID(_fp)       (((P_P2P_ATTRIBUTE_T) _fp)->ucId)
1897 #define ATTRI_LEN(_fp)      \
1898             (((UINT_16) ((PUINT_8)&((P_P2P_ATTRIBUTE_T) _fp)->u2Length)[0]) | \
1899              ((UINT_16) ((PUINT_8)&((P_P2P_ATTRIBUTE_T) _fp)->u2Length)[1] << 8))
1900
1901
1902 #define ATTRI_SIZE(_fp)     (P2P_ATTRI_HDR_LEN + ATTRI_LEN(_fp))
1903
1904 #define P2P_ATTRI_FOR_EACH(_pucAttriBuf, _u2AttriBufLen, _u2Offset) \
1905     for ((_u2Offset) = 0; ((_u2Offset) < (_u2AttriBufLen)); \
1906         (_u2Offset) += ATTRI_SIZE(_pucAttriBuf), ((_pucAttriBuf) += ATTRI_SIZE(_pucAttriBuf)) )
1907
1908
1909 #define P2P_IE(_fp)          ((P_IE_P2P_T) _fp)
1910
1911
1912 #define WSC_ATTRI_ID(_fp)     \
1913              (((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Id)[0] << 8) | \
1914              ((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Id)[1]))
1915
1916 #define WSC_ATTRI_LEN(_fp)      \
1917             (((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Length)[0] << 8) | \
1918              ((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Length)[1]))
1919
1920
1921 #define WSC_ATTRI_SIZE(_fp)     (WSC_ATTRI_HDR_LEN + WSC_ATTRI_LEN(_fp))
1922
1923 #define WSC_ATTRI_FOR_EACH(_pucAttriBuf, _u2AttriBufLen, _u2Offset) \
1924     for ((_u2Offset) = 0; ((_u2Offset) < (_u2AttriBufLen)); \
1925         (_u2Offset) += WSC_ATTRI_SIZE(_pucAttriBuf), ((_pucAttriBuf) += WSC_ATTRI_SIZE(_pucAttriBuf)) )
1926
1927 #define WSC_IE(_fp)          ((P_IE_P2P_T) _fp)
1928
1929
1930 #define WFD_ATTRI_ID(_fp)       (((P_WFD_ATTRIBUTE_T) _fp)->ucElemID)
1931
1932 #define WFD_ATTRI_LEN(_fp)      \
1933             (((UINT_16) ((PUINT_8)&((P_WFD_ATTRIBUTE_T) _fp)->u2Length)[0] << 8) | \
1934              ((UINT_16) ((PUINT_8)&((P_WFD_ATTRIBUTE_T) _fp)->u2Length)[1]))
1935
1936 #define WFD_ATTRI_SIZE(_fp)     (WFD_ATTRI_HDR_LEN + WFD_ATTRI_LEN(_fp))
1937
1938 #define WFD_ATTRI_FOR_EACH(_pucAttriBuf, _u2AttriBufLen, _u2Offset) \
1939     for ((_u2Offset) = 0; ((_u2Offset) < (_u2AttriBufLen)); \
1940         (_u2Offset) += WFD_ATTRI_SIZE(_pucAttriBuf), ((_pucAttriBuf) += WFD_ATTRI_SIZE(_pucAttriBuf)) )
1941
1942
1943
1944
1945 #if DBG
1946     #define ASSERT_BREAK(_exp) \
1947         { \
1948             if (!(_exp)) { \
1949                 ASSERT(FALSE); \
1950                 break; \
1951             } \
1952         }
1953
1954 #else
1955     #define ASSERT_BREAK(_exp)
1956 #endif
1957
1958
1959 /*******************************************************************************
1960 *                  F U N C T I O N   D E C L A R A T I O N S
1961 ********************************************************************************
1962 */
1963
1964 /*======P2P State======*/
1965 VOID
1966 p2pStateInit_LISTEN(
1967     IN P_ADAPTER_T prAdapter,
1968     IN P_P2P_FSM_INFO_T prP2pFsmInfo,
1969     IN P_P2P_SPECIFIC_BSS_INFO_T prSP2pBssInfo,
1970     IN UINT_8 ucListenChannel
1971     );
1972
1973 VOID
1974 p2pStateAbort_LISTEN(
1975     IN P_ADAPTER_T prAdapter,
1976     IN BOOLEAN fgIsChannelExtenstion
1977     );
1978
1979 VOID
1980 p2pStateAbort_SEARCH_SCAN(
1981     IN P_ADAPTER_T prAdapter,
1982     IN BOOLEAN fgIsChannelExtenstion
1983     );
1984
1985 VOID
1986 p2pStateAbort_GO_OPERATION(
1987     IN P_ADAPTER_T prAdapter
1988     );
1989
1990 VOID
1991 p2pStateAbort_GC_OPERATION(
1992     IN P_ADAPTER_T prAdapter
1993     );
1994
1995 VOID
1996 p2pStateInit_CONFIGURATION(
1997     IN P_ADAPTER_T prAdapter,
1998     IN P_P2P_FSM_INFO_T prP2pFsmInfo,
1999     IN P_BSS_INFO_T prP2pBssInfo,
2000     IN P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecBssInfo
2001     );
2002
2003 VOID
2004 p2pStateAbort_CONFIGURATION(
2005     IN P_ADAPTER_T prAdapter
2006     );
2007
2008 VOID
2009 p2pStateInit_JOIN(
2010     IN P_ADAPTER_T prAdapter
2011     );
2012
2013 VOID
2014 p2pStateAbort_JOIN(
2015     IN P_ADAPTER_T prAdapter
2016     );
2017
2018 /*====== P2P Functions ======*/
2019
2020
2021 VOID
2022 p2pFuncInitGO(
2023     IN P_ADAPTER_T prAdapter
2024     );
2025
2026
2027
2028
2029
2030 VOID
2031 p2pFuncDisconnect(
2032     IN P_ADAPTER_T prAdapter,
2033     IN P_STA_RECORD_T prStaRec,
2034     IN BOOLEAN fgSendDeauth,
2035     IN UINT_16 u2ReasonCode
2036     );
2037
2038 VOID
2039 p2pFuncSwitchOPMode(
2040     IN P_ADAPTER_T prAdapter,
2041     IN P_BSS_INFO_T prP2pBssInfo,
2042     IN ENUM_OP_MODE_T eOpMode,
2043     IN BOOLEAN fgSyncToFW
2044     );
2045
2046 VOID
2047 p2pFuncRunEventProvisioningComplete(
2048     IN P_ADAPTER_T prAdapter,
2049     IN P_MSG_HDR_T prMsgHdr
2050     );
2051
2052 WLAN_STATUS
2053 p2pFuncSetGroupID(
2054     IN P_ADAPTER_T prAdapter,
2055     IN PUINT_8 pucGroupID,
2056     IN PUINT_8 pucSsid,
2057     IN UINT_8 ucSsidLen
2058     );
2059
2060
2061 WLAN_STATUS
2062 p2pFuncSendDeviceDiscoverabilityReqFrame(
2063     IN P_ADAPTER_T prAdapter,
2064     IN UINT_8 aucDestAddr[],
2065     IN UINT_8 ucDialogToken
2066     );
2067
2068 WLAN_STATUS
2069 p2pFuncSendDeviceDiscoverabilityRspFrame(
2070     IN P_ADAPTER_T prAdapter,
2071     IN UINT_8 aucDestAddr[],
2072     IN UINT_8 ucDialogToken
2073     );
2074
2075
2076 UINT_8
2077 p2pFuncGetVersionNumOfSD(
2078     IN P_ADAPTER_T prAdapter
2079     );
2080
2081 /*====== P2P FSM ======*/
2082 VOID
2083 p2pFsmRunEventConnectionRequest(
2084     IN P_ADAPTER_T prAdapter,
2085     IN P_MSG_HDR_T prMsgHdr
2086     );
2087
2088 VOID
2089 p2pFsmRunEventDeviceDiscoveryRequest(
2090     IN P_ADAPTER_T prAdapter,
2091     IN P_MSG_HDR_T prMsgHdr
2092     );
2093
2094 VOID
2095 p2pFsmRunEventDeviceDiscoveryAbort(
2096     IN P_ADAPTER_T prAdapter,
2097     IN P_MSG_HDR_T prMsgHdr
2098     );
2099
2100 VOID
2101 p2pFsmRunEventRxGroupNegotiationReqFrame(
2102     IN P_ADAPTER_T prAdapter,
2103     IN P_SW_RFB_T prSwRfb
2104     );
2105
2106 WLAN_STATUS
2107 p2pFsmRunEventGroupNegotiationRequestTxDone(
2108     IN P_ADAPTER_T prAdapter,
2109     IN P_MSDU_INFO_T prMsduInfo,
2110     IN ENUM_TX_RESULT_CODE_T rTxDoneStatus
2111     );
2112
2113 WLAN_STATUS
2114 p2pFsmRunEventGroupNegotiationResponseTxDone(
2115     IN P_ADAPTER_T prAdapter,
2116     IN P_MSDU_INFO_T prMsduInfo,
2117     IN ENUM_TX_RESULT_CODE_T rTxDoneStatus
2118     );
2119
2120 WLAN_STATUS
2121 p2pFsmRunEventGroupNegotiationConfirmTxDone(
2122     IN P_ADAPTER_T prAdapter,
2123     IN P_MSDU_INFO_T prMsduInfo,
2124     IN ENUM_TX_RESULT_CODE_T rTxDoneStatus
2125     );
2126
2127 WLAN_STATUS
2128 p2pFsmRunEventProvisionDiscoveryRequestTxDone(
2129     IN P_ADAPTER_T prAdapter,
2130     IN P_MSDU_INFO_T prMsduInfo,
2131     IN ENUM_TX_RESULT_CODE_T rTxDoneStatus
2132     );
2133
2134 WLAN_STATUS
2135 p2pFsmRunEventProvisionDiscoveryResponseTxDone(
2136     IN P_ADAPTER_T prAdapter,
2137     IN P_MSDU_INFO_T prMsduInfo,
2138     IN ENUM_TX_RESULT_CODE_T rTxDoneStatus
2139     );
2140
2141
2142 WLAN_STATUS
2143 p2pFsmRunEventInvitationRequestTxDone (
2144     IN P_ADAPTER_T prAdapter,
2145     IN P_MSDU_INFO_T prMsduInfo,
2146     IN ENUM_TX_RESULT_CODE_T rTxDoneStatus
2147     );
2148
2149
2150
2151 VOID
2152 p2pFsmRunEventRxDeauthentication(
2153     IN P_ADAPTER_T prAdapter,
2154     IN P_STA_RECORD_T prStaRec,
2155     IN P_SW_RFB_T prSwRfb
2156     );
2157
2158 VOID
2159 p2pFsmRunEventRxDisassociation(
2160     IN P_ADAPTER_T prAdapter,
2161     IN P_STA_RECORD_T prStaRec,
2162     IN P_SW_RFB_T prSwRfb
2163     );
2164
2165 VOID
2166 p2pFsmRunEventBeaconTimeout(
2167     IN P_ADAPTER_T prAdapter
2168     );
2169
2170
2171
2172 WLAN_STATUS
2173 p2pFsmRunEventDeauthTxDone(
2174     IN P_ADAPTER_T prAdapter,
2175     IN P_MSDU_INFO_T prMsduInfo,
2176     IN ENUM_TX_RESULT_CODE_T rTxDoneStatus
2177     );
2178
2179
2180 #if 1
2181 #endif
2182
2183
2184 //////////////////////////////////////////////////////////////////////////
2185 //////////////////////////////////////////////////////////////////////////
2186 //////////////////////////////////////////////////////////////////////////
2187 //////////////////////////////////////////////////////////////////////////
2188 //////////////////////////////////////////////////////////////////////////
2189 //////////////////////////////////////////////////////////////////////////
2190 //////////////////////////////////////////////////////////////////////////
2191 //////////////////////////////////////////////////////////////////////////
2192 //////////////////////////////////////////////////////////////////////////
2193 //////////////////////////////////////////////////////////////////////////
2194 //////////////////////////////////////////////////////////////////////////
2195 /*======Mail Box Event Message=====*/
2196
2197
2198 VOID
2199 p2pFsmRunEventConnectionAbort(
2200     IN P_ADAPTER_T prAdapter,
2201     IN P_MSG_HDR_T prMsgHdr
2202     );
2203
2204 VOID
2205 p2pFsmRunEventConnectionTrigger(
2206     IN P_ADAPTER_T prAdapter,
2207     IN P_MSG_HDR_T prMsgHdr
2208     );
2209
2210
2211 VOID
2212 p2pFsmRunEventP2PFunctionSwitch(
2213     IN P_ADAPTER_T prAdapter,
2214     IN P_MSG_HDR_T prMsgHdr
2215     );
2216
2217 VOID
2218 p2pFsmRunEventChGrant(
2219     IN P_ADAPTER_T prAdapter,
2220     IN P_MSG_HDR_T prMsgHdr
2221     );
2222
2223 VOID
2224 p2pFsmRunEventJoinComplete(
2225     IN P_ADAPTER_T prAdapter,
2226     IN P_MSG_HDR_T prMsgHdr
2227     );
2228
2229 VOID
2230 p2pFsmRunEventConnectionPause(
2231     IN P_ADAPTER_T prAdapter,
2232     IN P_MSG_HDR_T prMsgHdr
2233     );
2234
2235 VOID
2236 p2pIndicationOfMediaStateToHost(
2237     IN P_ADAPTER_T prAdapter,
2238     IN ENUM_PARAM_MEDIA_STATE_T eConnectionState,
2239     IN UINT_8 aucTargetAddr[]
2240     );
2241
2242 VOID
2243 p2pUpdateBssInfoForJOIN(
2244     IN P_ADAPTER_T prAdapter,
2245     IN P_STA_RECORD_T prStaRec,
2246     IN P_SW_RFB_T prAssocRspSwRfb
2247     );
2248
2249 /*======Mail Box Event Message=====*/
2250
2251
2252 VOID
2253 p2pFsmInit(
2254     IN P_ADAPTER_T prAdapter
2255     );
2256
2257 VOID
2258 p2pFsmUninit(
2259     IN P_ADAPTER_T prAdapter
2260     );
2261
2262 VOID
2263 p2pFsmSteps(
2264     IN P_ADAPTER_T prAdapter,
2265     IN ENUM_P2P_STATE_T eNextState
2266     );
2267
2268 VOID
2269 p2pStartGO(
2270     IN P_ADAPTER_T prAdapter
2271     );
2272
2273 VOID
2274 p2pAssignSsid(
2275     IN PUINT_8 pucSsid,
2276     IN PUINT_8 pucSsidLen
2277     );
2278
2279 VOID
2280 p2pFsmRunEventScanDone(
2281     IN P_ADAPTER_T prAdapter,
2282     IN P_MSG_HDR_T prMsgHdr
2283     );
2284
2285 VOID
2286 p2pFsmRunEventIOReqTimeout(
2287     IN P_ADAPTER_T prAdapter,
2288     IN UINT_32 u4Param
2289     );
2290
2291 VOID
2292 p2pFsmRunEventSearchPeriodTimeout(
2293     IN P_ADAPTER_T prAdapter,
2294     IN UINT_32 u4Param
2295     );
2296
2297 VOID
2298 p2pFsmRunEventFsmTimeout(
2299     IN P_ADAPTER_T prAdapter,
2300     IN UINT_32 u4Param
2301     );
2302
2303 VOID
2304 p2pFsmRunEventRejoinTimeout(
2305     IN P_ADAPTER_T prAdapter,
2306     IN UINT_32 u4Parm
2307     );
2308
2309
2310
2311
2312 /*=============== P2P Function Related ================*/
2313
2314 /*=============== P2P Function Related ================*/
2315
2316
2317 #if CFG_TEST_WIFI_DIRECT_GO
2318 VOID
2319 p2pTest(
2320     IN P_ADAPTER_T prAdapter
2321     );
2322 #endif /* CFG_TEST_WIFI_DIRECT_GO */
2323
2324
2325
2326
2327 VOID
2328 p2pGenerateP2P_IEForBeacon(
2329     IN P_ADAPTER_T prAdapter,
2330     IN P_MSDU_INFO_T prMsduInfo
2331     );
2332
2333 VOID
2334 p2pGenerateP2P_IEForAssocReq(
2335     IN P_ADAPTER_T prAdapter,
2336     IN P_MSDU_INFO_T prMsduInfo
2337     );
2338
2339 VOID
2340 p2pGenerateP2P_IEForAssocRsp(
2341     IN P_ADAPTER_T prAdapter,
2342     IN P_MSDU_INFO_T prMsduInfo
2343     );
2344
2345
2346 VOID
2347 p2pGenerateP2P_IEForProbeReq(
2348     IN P_ADAPTER_T prAdapter,
2349     IN PUINT_16 pu2Offset,
2350     IN PUINT_8 pucBuf,
2351     IN UINT_16 u2BufSize
2352     );
2353
2354
2355
2356
2357 UINT_32
2358 p2pCalculateP2P_IELenForBeacon(
2359     IN P_ADAPTER_T prAdapter,
2360     IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex,
2361     IN P_STA_RECORD_T prStaRec
2362     );
2363
2364 UINT_32
2365 p2pCalculateP2P_IELenForAssocRsp(
2366     IN P_ADAPTER_T prAdapter,
2367     IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex,
2368     IN P_STA_RECORD_T prStaRec
2369     );
2370
2371
2372 UINT_32
2373 p2pCalculateP2P_IELenForProbeReq(
2374     IN P_ADAPTER_T prAdapter,
2375     IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex,
2376     IN P_STA_RECORD_T prStaRec
2377     );
2378
2379
2380
2381 VOID
2382 p2pGenerateWSC_IEForProbeResp(
2383     IN P_ADAPTER_T prAdapter,
2384     IN P_MSDU_INFO_T prMsduInfo
2385     );
2386
2387 VOID
2388 p2pGenerateWSC_IEForProbeReq(
2389     IN P_ADAPTER_T prAdapter,
2390     IN PUINT_16 pu2Offset,
2391     IN PUINT_8 pucBuf,
2392     IN UINT_16 u2BufSize
2393     );
2394
2395
2396
2397 UINT_16
2398 p2pCalculateWSC_IELenForProbeReq(
2399     IN P_ADAPTER_T prAdapter,
2400     IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex
2401     );
2402
2403 UINT_32
2404 p2pCalculateWSC_IELenForProbeResp(
2405     IN P_ADAPTER_T prAdapter,
2406     IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex,
2407     IN P_STA_RECORD_T prStaRec
2408     );
2409
2410 UINT_32
2411 p2pAppendAttriStatus(
2412     IN P_ADAPTER_T prAdapter,
2413     IN BOOLEAN fgIsAssocFrame,
2414     IN PUINT_16 pu2Offset,
2415     IN PUINT_8 pucBuf,
2416     IN UINT_16 u2BufSize
2417     );
2418
2419
2420
2421 UINT_32
2422 p2pAppendAttriCapability(
2423     IN P_ADAPTER_T prAdapter,
2424     IN BOOLEAN fgIsAssocFrame,
2425     IN PUINT_16 pu2Offset,
2426     IN PUINT_8 pucBuf,
2427     IN UINT_16 u2BufSize
2428     );
2429
2430 UINT_32
2431 p2pAppendAttriGoIntent(
2432     IN P_ADAPTER_T prAdapter,
2433     IN BOOLEAN fgIsAssocFrame,
2434     IN PUINT_16 pu2Offset,
2435     IN PUINT_8 pucBuf,
2436     IN UINT_16 u2BufSize
2437     );
2438
2439 UINT_32
2440 p2pAppendAttriCfgTimeout(
2441     IN P_ADAPTER_T prAdapter,
2442     IN BOOLEAN fgIsAssocFrame,
2443     IN PUINT_16 pu2Offset,
2444     IN PUINT_8 pucBuf,
2445     IN UINT_16 u2BufSize
2446     );
2447
2448 UINT_32
2449 p2pAppendAttriGroupBssid(
2450     IN P_ADAPTER_T prAdapter,
2451     IN BOOLEAN fgIsAssocFrame,
2452     IN PUINT_16 pu2Offset,
2453     IN PUINT_8 pucBuf,
2454     IN UINT_16 u2BufSize
2455     );
2456
2457
2458 UINT_32
2459 p2pAppendAttriDeviceIDForBeacon(
2460     IN P_ADAPTER_T prAdapter,
2461     IN BOOLEAN fgIsAssocFrame,
2462     IN PUINT_16 pu2Offset,
2463     IN PUINT_8 pucBuf,
2464     IN UINT_16 u2BufSize
2465     );
2466
2467 UINT_32
2468 p2pAppendAttriDeviceIDForProbeReq(
2469     IN P_ADAPTER_T prAdapter,
2470     IN BOOLEAN fgIsAssocFrame,
2471     IN PUINT_16 pu2Offset,
2472     IN PUINT_8 pucBuf,
2473     IN UINT_16 u2BufSize
2474     );
2475
2476 UINT_32
2477 p2pAppendAttriDeviceIDForDeviceDiscoveryReq(
2478         IN P_ADAPTER_T prAdapter,
2479         IN BOOLEAN fgIsAssocFrame,
2480         IN PUINT_16 pu2Offset,
2481         IN PUINT_8 pucBuf,
2482         IN UINT_16 u2BufSize
2483         );
2484
2485 UINT_32
2486 p2pAppendAttriListenChannel(
2487     IN P_ADAPTER_T prAdapter,
2488     IN BOOLEAN fgIsAssocFrame,
2489     IN PUINT_16 pu2Offset,
2490     IN PUINT_8 pucBuf,
2491     IN UINT_16 u2BufSize
2492     );
2493
2494 UINT_32
2495 p2pAppendAttriIntendP2pIfAddr(
2496     IN P_ADAPTER_T prAdapter,
2497     IN BOOLEAN fgIsAssocFrame,
2498     IN PUINT_16 pu2Offset,
2499     IN PUINT_8 pucBuf,
2500     IN UINT_16 u2BufSize
2501     );
2502
2503
2504 UINT_32
2505 p2pAppendAttriChannelList(
2506     IN P_ADAPTER_T prAdapter,
2507     IN BOOLEAN fgIsAssocFrame,
2508     IN PUINT_16 pu2Offset,
2509     IN PUINT_8 pucBuf,
2510     IN UINT_16 u2BufSize
2511     );
2512
2513 UINT_32
2514 p2pCalculateAttriLenChannelList(
2515     IN P_ADAPTER_T prAdapter,
2516     IN P_STA_RECORD_T prStaRec
2517     );
2518
2519 UINT_32
2520 p2pAppendAttriNoA(
2521     IN P_ADAPTER_T prAdapter,
2522     IN BOOLEAN fgIsAssocFrame,
2523     IN PUINT_16 pu2Offset,
2524     IN PUINT_8 pucBuf,
2525     IN UINT_16 u2BufSize
2526     );
2527
2528 UINT_32
2529 p2pAppendAttriDeviceInfo(
2530     IN P_ADAPTER_T prAdapter,
2531     IN BOOLEAN fgIsAssocFrame,
2532     IN PUINT_16 pu2Offset,
2533     IN PUINT_8 pucBuf,
2534     IN UINT_16 u2BufSize
2535     );
2536
2537 UINT_32
2538 p2pCalculateAttriLenDeviceInfo(
2539     IN P_ADAPTER_T prAdapter,
2540     IN P_STA_RECORD_T prStaRec
2541     );
2542
2543 UINT_32
2544 p2pAppendAttriGroupInfo(
2545     IN P_ADAPTER_T prAdapter,
2546     IN BOOLEAN fgIsAssocFrame,
2547     IN PUINT_16 pu2Offset,
2548     IN PUINT_8 pucBuf,
2549     IN UINT_16 u2BufSize
2550     );
2551
2552 UINT_32
2553 p2pCalculateAttriLenGroupInfo(
2554     IN P_ADAPTER_T prAdapter,
2555     IN P_STA_RECORD_T prStaRec
2556     );
2557
2558
2559 UINT_32
2560 p2pAppendAttriP2pGroupID(
2561     IN P_ADAPTER_T prAdapter,
2562     IN BOOLEAN fgIsAssocFrame,
2563     IN PUINT_16 pu2Offset,
2564     IN PUINT_8 pucBuf,
2565     IN UINT_16 u2BufSize
2566     );
2567
2568 UINT_32
2569 p2pAppendAttriOperatingChannel(
2570     IN P_ADAPTER_T prAdapter,
2571     IN BOOLEAN fgIsAssocFrame,
2572     IN PUINT_16 pu2Offset,
2573     IN PUINT_8 pucBuf,
2574     IN UINT_16 u2BufSize
2575     );
2576
2577 UINT_32
2578 p2pAppendAttriInvitationFlag(
2579     IN P_ADAPTER_T prAdapter,
2580     IN BOOLEAN fgIsAssocFrame,
2581     IN PUINT_16 pu2Offset,
2582     IN PUINT_8 pucBuf,
2583     IN UINT_16 u2BufSize
2584     );
2585
2586
2587 VOID
2588 p2pGenerateWscIE (
2589     IN P_ADAPTER_T prAdapter,
2590     IN UINT_8 ucOuiType,
2591     IN BOOLEAN fgIsAssocFrame,
2592     IN PUINT_16 pu2Offset,
2593     IN PUINT_8 pucBuf,
2594     IN UINT_16 u2BufSize,
2595     IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[],
2596     IN UINT_32 u4AttriTableSize
2597     );
2598
2599 UINT_32
2600 p2pAppendAttriWSCConfigMethod (
2601     IN P_ADAPTER_T prAdapter,
2602     IN BOOLEAN fgIsAssocFrame,
2603     IN PUINT_16 pu2Offset,
2604     IN PUINT_8 pucBuf,
2605     IN UINT_16 u2BufSize
2606     );
2607
2608 UINT_32
2609 p2pAppendAttriWSCVersion (
2610     IN P_ADAPTER_T prAdapter,
2611     IN BOOLEAN fgIsAssocFrame,
2612     IN PUINT_16 pu2Offset,
2613     IN PUINT_8 pucBuf,
2614     IN UINT_16 u2BufSize
2615     );
2616
2617 UINT_32
2618 p2pAppendAttriWSCGONegReqDevPasswordId (
2619     IN P_ADAPTER_T prAdapter,
2620     IN BOOLEAN fgIsAssocFrame,
2621     IN PUINT_16 pu2Offset,
2622     IN PUINT_8 pucBuf,
2623     IN UINT_16 u2BufSize
2624     );
2625
2626 UINT_32
2627 p2pAppendAttriWSCGONegRspDevPasswordId (
2628     IN P_ADAPTER_T prAdapter,
2629     IN BOOLEAN fgIsAssocFrame,
2630     IN PUINT_16 pu2Offset,
2631     IN PUINT_8 pucBuf,
2632     IN UINT_16 u2BufSize
2633     );
2634
2635 WLAN_STATUS
2636 p2pGetWscAttriList(
2637     IN P_ADAPTER_T prAdapter,
2638     IN UINT_8       ucOuiType,
2639     IN PUINT_8      pucIE,
2640     IN UINT_16      u2IELength,
2641     OUT PPUINT_8    ppucAttriList,
2642     OUT PUINT_16    pu2AttriListLen
2643     );
2644
2645 WLAN_STATUS
2646 p2pGetAttriList (
2647     IN P_ADAPTER_T  prAdapter,
2648     IN UINT_8       ucOuiType,
2649     IN PUINT_8      pucIE,
2650     IN UINT_16      u2IELength,
2651     OUT PPUINT_8    ppucAttriList,
2652     OUT PUINT_16    pu2AttriListLen
2653     );
2654
2655 VOID
2656 p2pRunEventAAATxFail (
2657     IN P_ADAPTER_T prAdapter,
2658     IN P_STA_RECORD_T prStaRec
2659     );
2660
2661 WLAN_STATUS
2662 p2pRunEventAAASuccess (
2663     IN P_ADAPTER_T prAdapter,
2664     IN P_STA_RECORD_T prStaRec
2665     );
2666
2667
2668 WLAN_STATUS
2669 p2pRunEventAAAComplete (
2670     IN P_ADAPTER_T prAdapter,
2671     IN P_STA_RECORD_T prStaRec
2672     );
2673
2674 WLAN_STATUS
2675 p2pSendProbeResponseFrame(
2676     IN P_ADAPTER_T prAdapter,
2677     IN P_SW_RFB_T prSwRfb
2678     );
2679
2680 BOOLEAN
2681 p2pFsmRunEventRxProbeRequestFrame(
2682     IN P_ADAPTER_T prAdapter,
2683     IN P_SW_RFB_T prSwRfb
2684     );
2685
2686 VOID
2687 p2pFsmRunEventRxProbeResponseFrame(
2688     IN P_ADAPTER_T prAdapter,
2689     IN P_SW_RFB_T prSwRfb,
2690     IN P_BSS_DESC_T prBssDesc
2691     );
2692
2693 WLAN_STATUS
2694 p2pRxPublicActionFrame(
2695     IN P_ADAPTER_T     prAdapter,
2696     IN P_SW_RFB_T      prSwRfb
2697     );
2698
2699 WLAN_STATUS
2700 p2pRxActionFrame(
2701     IN P_ADAPTER_T prAdapter,
2702     IN P_SW_RFB_T prSwRfb
2703     );
2704
2705 VOID
2706 p2pFsmRunEventRxGroupNegotiationRspFrame(
2707     IN P_ADAPTER_T prAdapter,
2708     IN P_SW_RFB_T prSwRfb
2709     );
2710
2711 VOID
2712 p2pFsmRunEventRxGroupNegotiationCfmFrame(
2713     IN P_ADAPTER_T prAdapter,
2714     IN P_SW_RFB_T prSwRfb
2715     );
2716
2717
2718 #if 0 // frog
2719 BOOLEAN
2720 scanMatchFilterOfP2P (
2721     IN P_SW_RFB_T prSWRfb,
2722     IN PP_BSS_DESC_T pprBssDesc
2723     );
2724 #endif // frog
2725
2726 VOID
2727 p2pProcessEvent_UpdateNOAParam (
2728     IN P_ADAPTER_T    prAdapter,
2729     UINT_8  ucNetTypeIndex,
2730     P_EVENT_UPDATE_NOA_PARAMS_T prEventUpdateNoaParam
2731     );
2732
2733 VOID
2734 p2pFuncCompleteIOCTL(
2735     IN P_ADAPTER_T prAdapter,
2736     IN WLAN_STATUS rWlanStatus
2737     );
2738
2739 /*******************************************************************************
2740 *                              F U N C T I O N S
2741 ********************************************************************************
2742 */
2743 #ifndef _lint
2744 /* Kevin: we don't have to call following function to inspect the data structure.
2745  * It will check automatically while at compile time.
2746  * We'll need this for porting driver to different RTOS.
2747  */
2748 __KAL_INLINE__ VOID
2749 p2pDataTypeCheck (
2750     VOID
2751     )
2752 {
2753     DATA_STRUC_INSPECTING_ASSERT(sizeof(IE_P2P_T) == (2+4+1)); // all UINT_8
2754     DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRIBUTE_T) == (3+1));
2755     DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_STATUS_T) == (3+1));
2756     DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_REASON_T) == (3+1));
2757     DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_CAPABILITY_T) == (3+2));
2758     DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_DEV_ID_T) == (3+6));
2759     DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GO_INTENT_T) == (3+1));
2760     DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_CFG_TIMEOUT_T) == (3+2));
2761 #if CID52_53_54
2762     DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_LISTEN_CHANNEL_T) == (3+5));
2763 #else
2764     DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_LISTEN_CHANNEL_T) == (3+5));
2765 #endif
2766     DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GROUP_BSSID_T) == (3+6));
2767     DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_EXT_LISTEN_TIMING_T) == (3+4));
2768     DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_INTENDED_IF_ADDR_T) == (3+6));
2769     DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_MANAGEABILITY_T) == (3+1));
2770
2771     DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_CHANNEL_T) == (3+4));
2772     DATA_STRUC_INSPECTING_ASSERT(sizeof(CHANNEL_ENTRY_FIELD_T) == 3);
2773     DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_NOA_T) == (3+3));
2774     DATA_STRUC_INSPECTING_ASSERT(sizeof(NOA_DESCRIPTOR_T) == 13);
2775     DATA_STRUC_INSPECTING_ASSERT(sizeof(DEVICE_TYPE_T) == 8);
2776     DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_DEV_INFO_T) == (3+6+2+8+1+8));
2777     DATA_STRUC_INSPECTING_ASSERT(sizeof(DEVICE_NAME_TLV_T) == (4+32));
2778     DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_CLIENT_INFO_DESC_T) == (1+6+6+1+2+8+1+8));
2779     DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GROUP_INFO_T) == (3+(1+6+6+1+2+8+1+8)));
2780     DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GROUP_ID_T) == (3+38));
2781     DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_INTERFACE_T) == (3+13));
2782 #if CID52_53_54
2783     DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_OPERATING_CHANNEL_T) == (3+5));
2784 #else
2785     DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_OPERATING_CHANNEL_T) == (3+5));
2786 #endif
2787
2788
2789     return;
2790 }
2791 #endif /* _lint */
2792
2793 #endif /* _P2P_FSM_H */
2794
2795
2796
2797