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