2 ** $Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_fsm.h#23 $
6 \brief Declaration of functions and finite state machine for P2P Module.
8 Declaration of functions and finite state machine for P2P Module.
16 ** 09 12 2012 wcpadmin
17 ** [ALPS00276400] Remove MTK copyright and legal header on GPL/LGPL related packages
20 ** 08 14 2012 yuche.tsai
24 ** 07 26 2012 yuche.tsai
25 ** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot
26 ** Update driver code of ALPS.JB for hot-spot.
28 ** 07 19 2012 yuche.tsai
30 ** Code update for JB.
32 * 07 18 2012 yuche.tsai
36 * 12 02 2011 yuche.tsai
38 * Resolve class 3 error issue under AP mode.
40 * data frame may TX before Assoc Response TX.
42 * 11 11 2011 yuche.tsai
44 * Fix work thread cancel issue.
46 * 11 11 2011 yuche.tsai
48 * Fix default device name issue.
50 * 11 09 2011 yuche.tsai
51 * [WCXRP00001093] [Need Patch][Volunteer Patch] Service Discovery 2.0 state transition issue.
52 * Fix SD2.0 issue which may cause KE. (Monkey test)
54 * 11 08 2011 yuche.tsai
55 * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support for service discovery version check.
56 * Add support for driver version query & p2p supplicant verseion set.
57 * For new service discovery mechanism sync.
59 * 10 18 2011 yuche.tsai
60 * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch.
61 * Support Channle Query.
63 * 10 18 2011 yuche.tsai
64 * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch.
68 * 09 01 2011 yuche.tsai
70 * Fix channel stay interval.
71 * Sync channel stay interval & channel request interval under AP mode..
73 * 08 30 2011 yuche.tsai
74 * [WCXRP00000953] [Volunteer Patch][Driver] Hot Spot Channel ASSERT issue.
75 * Fix hot spot FW assert issue when under concurrent case. (DBG enable only)
78 * [WCXRP00000934] [MT6620 Wi-Fi][Driver][P2P] Wi-Fi hot spot with auto sparse channel residence
79 * auto channel decision for 2.4GHz hot spot mode
81 * 08 16 2011 yuche.tsai
83 * Fix scan policy for Active LISTEN scan.
85 * 08 09 2011 yuche.tsai
86 * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature.
87 * Invitation Feature add on.
89 * 08 02 2011 yuche.tsai
90 * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client, TX deauth to a disconnecting device issue.
91 * Support TX Deauth Issue.
93 * 07 26 2011 yuche.tsai
94 * [WCXRP00000875] [Volunteer Patch][WiFi Direct][Driver] MT6620 IOT issue with realtek test bed solution.
95 * Turn off persistent group support for V2.0 release.
97 * 07 18 2011 yuche.tsai
98 * [WCXRP00000856] [Volunteer Patch][WiFi Direct][Driver] MT6620 WiFi Direct IOT Issue with BCM solution.
101 * 07 18 2011 yuche.tsai
102 * [WCXRP00000856] [Volunteer Patch][WiFi Direct][Driver] MT6620 WiFi Direct IOT Issue with BCM solution.
103 * Fix MT6620 WiFi Direct IOT Issue with BCM solution.
105 * 07 11 2011 yuche.tsai
106 * [WCXRP00000845] [Volunteer Patch][WiFi Direct] WiFi Direct Device Connection Robustness
107 * Enhance Connection Robustness.
109 * 07 08 2011 yuche.tsai
110 * [WCXRP00000841] [Volunteer Patch][WiFi Direct] Group Owner Setting.
111 * Update GO configure parameter.
113 * 07 05 2011 yuche.tsai
114 * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue
115 * Disable enhancement II for debugging.
117 * 07 05 2011 yuche.tsai
118 * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue
119 * Refine compile flag.
121 * 07 05 2011 yuche.tsai
122 * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue
123 * Add wifi direct connection enhancement method I, II & VI.
125 * 06 20 2011 yuche.tsai
126 * [WCXRP00000799] [Volunteer Patch][MT6620][Driver] Connection Indication Twice Issue.
127 * Fix connection indication twice issue.
129 * 06 07 2011 yuche.tsai
130 * [WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue
131 * Fix RX SD request under AP mode issue.
133 * 05 04 2011 yuche.tsai
135 * Support partial persistent group function.
137 * 04 20 2011 terry.wu
138 * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED
139 * Remove CFG_WIFI_DIRECT_MOVED.
141 * 04 08 2011 yuche.tsai
142 * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO.
143 * Add device discoverability support.
145 * 03 25 2011 yuche.tsai
147 * Improve some error handleing.
149 * 03 22 2011 george.huang
150 * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command
151 * link with supplicant commands
153 * 03 22 2011 yuche.tsai
155 * 1.Shorten the LISTEN interval.
156 * 2. Fix IF address issue when we are GO
157 * 3. Fix LISTEN channel issue.
159 * 03 21 2011 yuche.tsai
161 * Change P2P Connection Request Flow.
163 * 03 19 2011 yuche.tsai
164 * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct.
165 * Add beacon timeout support.
167 * 03 19 2011 yuche.tsai
168 * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue
169 * Append P2P IE in Assoc Req, so that GC can be discovered in probe response of GO.
171 * 03 18 2011 yuche.tsai
172 * [WCXRP00000574] [Volunteer Patch][MT6620][Driver] Modify P2P FSM Connection Flow
173 * Modify connection flow after Group Formation Complete, or device connect to a GO.
174 * Instead of request channel & connect directly, we use scan to allocate channel bandwidth & connect after RX BCN.
176 * 03 15 2011 yuche.tsai
177 * [WCXRP00000560] [Volunteer Patch][MT6620][Driver] P2P Connection from UI using KEY/DISPLAY issue
178 * Fix some configure method issue.
180 * 03 10 2011 yuche.tsai
184 * 03 07 2011 yuche.tsai
185 * [WCXRP00000502] [Volunteer Patch][MT6620][Driver] Fix group ID issue when doing Group Formation.
189 * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code
190 * rename the define to anti_pviracy.
193 * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code
194 * add the code to get the check rsponse and indicate to app.
196 * 03 01 2011 yuche.tsai
197 * [WCXRP00000501] [Volunteer Patch][MT6620][Driver] No common channel issue when doing GO formation
198 * Update channel issue when doing GO formation..
200 * 03 01 2011 yuche.tsai
201 * [WCXRP00000245] 1. Invitation Request/Response.
202 2. Provision Discovery Request/Response
204 * Update Service Discovery Related wlanoid function.
207 * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE
208 * fixed the ioctl setting that index not map to spec defined config method.
210 * 02 18 2011 yuche.tsai
211 * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue
212 * Fix WSC IE BE format issue.
215 * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE
216 * append the WSC IE config method attribute at provision discovery request.
218 * 02 11 2011 yuche.tsai
219 * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode.
220 * Add two function prototype.
222 * 02 10 2011 yuche.tsai
223 * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode.
224 * Support Disassoc & Deauthentication for Hot-Spot.
226 * 02 09 2011 yuche.tsai
227 * [WCXRP00000245] 1. Invitation Request/Response.
229 2. Provision Discovery Request/Response
231 * Add Service Discovery Indication Related code.
233 * 02 09 2011 yuche.tsai
234 * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode.
235 * Add Support for MLME deauthentication for Hot-Spot.
237 * 02 09 2011 yuche.tsai
238 * [WCXRP00000429] [Volunteer Patch][MT6620][Driver] Hot Spot Client Limit Issue
239 * Fix Client Limit Issue.
241 * 01 26 2011 yuche.tsai
242 * [WCXRP00000245] 1. Invitation Request/Response.
244 2. Provision Discovery Request/Response
246 * Add Service Discovery Function.
248 * 01 25 2011 terry.wu
249 * [WCXRP00000393] [MT6620 Wi-Fi][Driver] Add new module insert parameter
250 * Add a new module parameter to indicate current runnig mode, P2P or AP.
252 * 01 19 2011 george.huang
253 * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability
254 * Null NOA attribute setting when no related parameters.
256 * 01 12 2011 yuche.tsai
257 * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue
258 * Modify some behavior of AP mode.
260 * 12 22 2010 yuche.tsai
261 * [WCXRP00000245] 1. Invitation Request/Response.
262 2. Provision Discovery Request/Response
266 * 12 15 2010 yuche.tsai
267 * [WCXRP00000245] 1. Invitation Request/Response.
268 2. Provision Discovery Request/Response
270 * Refine Connection Flow.
272 * 12 08 2010 yuche.tsai
273 * [WCXRP00000244] [MT6620][Driver] Add station record type for each client when in AP mode.
274 * Change STA Type under AP mode. We would tell if client is a P2P device or a legacy client by checking the P2P IE in assoc req frame.
276 * 12 02 2010 yuche.tsai
278 * Update P2P Connection Policy for Invitation.
280 * 12 02 2010 yuche.tsai
282 * Update P2P Connection Policy for Invitation & Provision Discovery.
284 * 11 30 2010 yuche.tsai
286 * Invitation & Provision Discovery Indication.
288 * 11 30 2010 yuche.tsai
290 * Update Configure Method indication & selection for Provision Discovery & GO_NEGO_REQ
292 * 11 29 2010 yuche.tsai
294 * Update P2P related function for INVITATION & PROVISION DISCOVERY.
296 * 11 26 2010 george.huang
297 * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function
298 * Update P2P PS for NOA function.
300 * 11 25 2010 yuche.tsai
302 * Update Code for Invitation Related Function.
305 * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID[WCXRP00000179] [MT6620 Wi-Fi][FW] Set the Tx lowest rate at wlan table for normal operation
306 * fixed some ASSERT check.
309 * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID
310 * adding the p2p random ssid support.
313 * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group
314 * Add the code to support disconnect p2p group
317 * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine
318 * update the frog's new p2p state machine.
321 * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P
322 * fixed compiling error while enable p2p.
324 * 09 21 2010 kevin.huang
325 * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface
326 * Isolate P2P related function for Hardware Software Bundle
330 * fixed the compiling error at WinXP.
334 * adding the code for beacon/probe req/ probe rsp wsc ie at p2p.
336 * 09 03 2010 kevin.huang
338 * Refine #include sequence and solve recursive/nested #include issue
340 * 08 26 2010 yuche.tsai
342 * Add connection abort message event prototype.
344 * 08 20 2010 kevin.huang
346 * Modify AAA Module for changing STA STATE 3 at p2p/bowRunEventAAAComplete()
348 * 08 16 2010 yuche.tsai
350 * Fix P2P Intended Interface Address Bug.
351 * Extend GO Nego Timeout Time.
353 * 08 16 2010 yuche.tsai
355 * Extend Listen Interval default value & remove deprecated variable.
357 * 08 16 2010 kevin.huang
359 * Refine AAA functions
361 * 08 12 2010 kevin.huang
363 * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse()
365 * 08 12 2010 yuche.tsai
367 * Add function prototype for join complete.
369 * 08 11 2010 yuche.tsai
371 * Add some function proto type for P2P FSM under provisioning phase..
373 * 08 11 2010 yuche.tsai
375 * Change P2P data structure for supporting
376 * 1. P2P Device discovery.
377 * 2. P2P Group Negotiation.
380 * 08 05 2010 yuche.tsai
382 * Check-in P2P Device Discovery Feature.
384 * 08 03 2010 george.huang
386 * handle event for updating NOA parameters indicated from FW
388 * 08 02 2010 yuche.tsai
390 * P2P Group Negotiation Code Check in.
392 * 07 26 2010 yuche.tsai
394 * Update P2P FSM header file.
398 * P2P/RSN/WAPI IEs need to be declared with compact structure.
400 * 07 21 2010 yuche.tsai
402 * Add for P2P Scan Result Parsing & Saving.
404 * 07 19 2010 yuche.tsai
406 * Update P2P FSM header file.
410 * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
412 * 06 21 2010 yuche.tsai
413 * [WPD00003839][MT6620 5931][P2P] Feature migration
414 * Fix some P2P function prototype.
416 * 06 17 2010 yuche.tsai
417 * [WPD00003839][MT6620 5931][P2P] Feature migration
418 * First draft for migration P2P FSM from FW to Driver.
420 * 03 18 2010 kevin.huang
421 * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support
422 * Rename CFG flag for P2P
424 * 02 26 2010 kevin.huang
425 * [BORA00000603][WIFISYS] [New Feature] AAA Module Support
426 * Modify parameter of p2pStartGO
428 * 02 23 2010 kevin.huang
429 * [BORA00000603][WIFISYS] [New Feature] AAA Module Support
430 * Add Wi-Fi Direct SSID and P2P GO Test Mode
432 * 02 04 2010 kevin.huang
433 * [BORA00000603][WIFISYS] [New Feature] AAA Module Support
434 * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup
441 /*******************************************************************************
442 * C O M P I L E R F L A G S
443 ********************************************************************************
445 #define CID52_53_54 0
448 /*******************************************************************************
449 * E X T E R N A L R E F E R E N C E S
450 ********************************************************************************
453 /*******************************************************************************
455 ********************************************************************************
462 /*******************************************************************************
464 ********************************************************************************
466 typedef enum _ENUM_P2P_STATE_T {
469 P2P_STATE_AP_CHANNEL_DETECT,
470 P2P_STATE_REQING_CHANNEL,
471 P2P_STATE_CHNL_ON_HAND, /* Requesting Channel to Send Specific Frame. */
472 P2P_STATE_GC_JOIN, /* Sending Specific Frame. May extending channel by other event. */
474 } ENUM_P2P_STATE_T, *P_ENUM_P2P_STATE_T;
477 typedef enum _ENUM_CHANNEL_REQ_TYPE_T {
478 CHANNEL_REQ_TYPE_REMAIN_ON_CHANNEL,
479 CHANNEL_REQ_TYPE_GC_JOIN_REQ,
480 CHANNEL_REQ_TYPE_GO_START_BSS
482 ENUM_CHANNEL_REQ_TYPE_T, *P_ENUM_CHANNEL_REQ_TYPE_T;
485 typedef enum _ENUM_BUFFER_TYPE_T {
486 ENUM_FRAME_TYPE_EXTRA_IE_BEACON,
487 ENUM_FRAME_TYPE_EXTRA_IE_ASSOC_RSP,
488 ENUM_FRAME_TYPE_EXTRA_IE_PROBE_RSP,
489 ENUM_FRAME_TYPE_PROBE_RSP_TEMPLATE,
490 ENUM_FRAME_TYPE_BEACON_TEMPLATE,
492 } ENUM_BUFFER_TYPE_T, *P_ENUM_BUFFER_TYPE_T;
494 typedef enum _ENUM_HIDDEN_SSID_TYPE_T {
495 ENUM_HIDDEN_SSID_NONE,
496 ENUM_HIDDEN_SSID_LEN,
497 ENUM_HIDDEN_SSID_ZERO_CONTENT,
500 ENUM_HIDDEN_SSID_TYPE_T, *P_ENUM_HIDDEN_SSID_TYPE_T;
502 typedef struct _P2P_SSID_STRUCT_T {
505 } P2P_SSID_STRUCT_T, *P_P2P_SSID_STRUCT_T;
507 typedef struct _P2P_STATION_INFO_T {
508 UINT_32 u4InactiveTime;
509 UINT_32 u4RxBytes; // TODO:
510 UINT_32 u4TxBytes; // TODO:
511 UINT_32 u4RxPackets; // TODO:
512 UINT_32 u4TxPackets; // TODO:
513 // TODO: Add more for requirement.
515 P2P_STATION_INFO_T, *P_P2P_STATION_INFO_T;
518 typedef struct _AP_CRYPTO_SETTINGS_T {
519 UINT_32 u4WpaVersion;
520 UINT_32 u4CipherGroup;
521 INT_32 i4NumOfCiphers;
522 UINT_32 aucCiphersPairwise[5];
523 INT_32 i4NumOfAkmSuites;
524 UINT_32 aucAkmSuites[2];
525 BOOLEAN fgIsControlPort;
526 UINT_16 u2ControlPortBE;
527 BOOLEAN fgIsControlPortEncrypt;
528 } AP_CRYPTO_SETTINGS_T, *P_AP_CRYPTO_SETTINGS_T;
529 typedef struct _MSG_P2P_MGMT_TX_REQUEST_T {
531 P_MSDU_INFO_T prMgmtMsduInfo;
532 UINT_64 u8Cookie; /* For indication. */
533 BOOLEAN fgNoneCckRate;
535 } MSG_P2P_MGMT_TX_REQUEST_T, *P_MSG_P2P_MGMT_TX_REQUEST_T;
538 /*-------------------- P2P FSM ACTION STRUCT ---------------------*/
539 typedef struct _P2P_CHNL_REQ_INFO_T {
540 BOOLEAN fgIsChannelRequested;
541 UINT_8 ucSeqNumOfChReq;
545 ENUM_CHNL_EXT_T eChnlSco;
546 UINT_32 u4MaxInterval;
547 ENUM_CHANNEL_REQ_TYPE_T eChannelReqType;
550 ENUM_BAND_T eOriBand;
551 ENUM_CHNL_EXT_T eOriChnlSco;
552 #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0)
553 P_MSG_P2P_MGMT_TX_REQUEST_T prMsgTxReq;
554 BOOLEAN fgNeedIndSupp;
556 } P2P_CHNL_REQ_INFO_T, *P_P2P_CHNL_REQ_INFO_T;
558 typedef struct _P2P_SCAN_REQ_INFO_T {
559 ENUM_SCAN_TYPE_T eScanType;
560 ENUM_SCAN_CHANNEL eChannelSet;
561 UINT_16 u2PassiveDewellTime;
562 UINT_8 ucSeqNumOfScnMsg;
564 BOOLEAN fgIsScanRequest;
565 UINT_8 ucNumChannelList;
566 RF_CHANNEL_INFO_T arScanChannelList[MAXIMUM_OPERATION_CHANNEL_LIST];
568 UINT_8 aucIEBuf[MAX_IE_LENGTH];
569 P2P_SSID_STRUCT_T rSsidStruct; // Currently we can only take one SSID scan request
571 P2P_SCAN_REQ_INFO_T, *P_P2P_SCAN_REQ_INFO_T;
573 typedef struct _P2P_CONNECTION_REQ_INFO_T {
575 BOOLEAN fgIsConnRequest;
576 P2P_SSID_STRUCT_T rSsidStruct;
577 UINT_8 aucBssid[MAC_ADDR_LEN];
580 UINT_8 aucIEBuf[MAX_IE_LENGTH];
581 } P2P_CONNECTION_REQ_INFO_T, *P_P2P_CONNECTION_REQ_INFO_T;
583 typedef struct _P2P_MGMT_TX_REQ_INFO_T {
584 BOOLEAN fgIsMgmtTxRequested;
585 P_MSDU_INFO_T prMgmtTxMsdu;
587 } P2P_MGMT_TX_REQ_INFO_T, *P_P2P_MGMT_TX_REQ_INFO_T;
589 typedef struct _P2P_BEACON_UPDATE_INFO_T {
593 UINT_32 u4BcnBodyLen;
595 P2P_BEACON_UPDATE_INFO_T, *P_P2P_BEACON_UPDATE_INFO_T;
597 typedef struct _P2P_PROBE_RSP_UPDATE_INFO_T {
598 P_MSDU_INFO_T prProbeRspMsduTemplate;
599 } P2P_PROBE_RSP_UPDATE_INFO_T, *P_P2P_PROBE_RSP_UPDATE_INFO_T;
601 typedef struct _P2P_ASSOC_RSP_UPDATE_INFO_T {
602 PUINT_8 pucAssocRspExtIE;
603 UINT_16 u2AssocIELen;
604 } P2P_ASSOC_RSP_UPDATE_INFO_T, *P_P2P_ASSOC_RSP_UPDATE_INFO_T;
606 typedef struct _P2P_JOIN_INFO_T {
607 UINT_32 ucSeqNumOfReqMsg;
608 UINT_8 ucAvailableAuthTypes;
609 P_STA_RECORD_T prTargetStaRec;
610 P2P_SSID_STRUCT_T rSsidStruct;
611 BOOLEAN fgIsJoinComplete;
614 UINT_8 aucIEBuf[MAX_IE_LENGTH];
616 P2P_JOIN_INFO_T, *P_P2P_JOIN_INFO_T;
620 #define WFD_FLAGS_DEV_INFO_VALID BIT(0) /* 1. WFD_DEV_INFO, 2. WFD_CTRL_PORT, 3. WFD_MAT_TP. */
621 #define WFD_FLAGS_SINK_INFO_VALID BIT(1) /* 1. WFD_SINK_STATUS, 2. WFD_SINK_MAC. */
622 #define WFD_FLAGS_ASSOC_MAC_VALID BIT(2) /* 1. WFD_ASSOC_MAC. */
623 #define WFD_FLAGS_EXT_CAPABILITY_VALID BIT(3) /* 1. WFD_EXTEND_CAPABILITY. */
627 struct _WFD_CFG_SETTINGS_T {
628 UINT_32 u4WfdCmdType;
630 UINT_8 ucWfdCoupleSinkStatus;
631 UINT_8 ucWfdSessionAvailable; /* 0: NA 1:Set 2:Clear */
632 UINT_8 ucWfdSigmaMode;
633 UINT_16 u2WfdDevInfo;
634 UINT_16 u2WfdControlPort;
635 UINT_16 u2WfdMaximumTp;
636 UINT_16 u2WfdExtendCap;
637 UINT_8 aucWfdCoupleSinkAddress[MAC_ADDR_LEN];
638 UINT_8 aucWfdAssociatedBssid[MAC_ADDR_LEN];
639 UINT_8 aucWfdVideolp[4];
640 UINT_8 aucWfdAudiolp[4];
641 UINT_16 u2WfdVideoPort;
642 UINT_16 u2WfdAudioPort;
646 UINT_8 aucWfdSessionInformationIE[24*8];
647 UINT_16 u2WfdSessionInformationIELen;
648 UINT_8 aucReserved1[2];
649 UINT_8 aucWfdPrimarySinkMac[MAC_ADDR_LEN];
650 UINT_8 aucWfdSecondarySinkMac[MAC_ADDR_LEN];
651 UINT_32 u4WfdAdvancedFlag;
652 /* Group 1 64 bytes */
653 UINT_8 aucWfdLocalIp[4];
654 UINT_16 u2WfdLifetimeAc2; /* Unit is 2 TU */
655 UINT_16 u2WfdLifetimeAc3; /* Unit is 2 TU */
656 UINT_8 aucReverved2[56];
657 /* Group 2 64 bytes */
658 UINT_8 aucReverved3[64];
659 /* Group 3 64 bytes */
660 UINT_8 aucReverved4[64];
668 struct _P2P_FSM_INFO_T {
670 ENUM_P2P_STATE_T ePreviousState;
671 ENUM_P2P_STATE_T eCurrentState;
673 /* Channel related. */
674 P2P_CHNL_REQ_INFO_T rChnlReqInfo;
677 P2P_SCAN_REQ_INFO_T rScanReqInfo;
679 /* Connection related. */
680 P2P_CONNECTION_REQ_INFO_T rConnReqInfo;
682 /* Mgmt tx related. */
683 P2P_MGMT_TX_REQ_INFO_T rMgmtTxInfo;
685 /* Beacon related. */
686 P2P_BEACON_UPDATE_INFO_T rBcnContentInfo;
688 /* Probe Response related. */
689 P2P_PROBE_RSP_UPDATE_INFO_T rProbeRspContentInfo;
691 /* Assoc Rsp related. */
692 P2P_ASSOC_RSP_UPDATE_INFO_T rAssocRspContentInfo;
694 /* GC Join related. */
695 P2P_JOIN_INFO_T rJoinInfo;
698 TIMER_T rP2pFsmTimeoutTimer;
702 P_BSS_DESC_T prTargetBss;
704 /* GC Connection Request. */
705 BOOLEAN fgIsConnectionRequested;
709 /* Channel grant interval. */
710 UINT_32 u4GrantInterval;
712 /* Packet filter for P2P module. */
713 UINT_32 u4P2pPacketFilter;
715 //vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv Prepare for use vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
716 /* Msg event queue. */
717 LINK_T rMsgEventQueue;
720 WFD_CFG_SETTINGS_T rWfdConfigureSettings;
727 /*---------------- Messages -------------------*/
728 typedef struct _MSG_P2P_SCAN_REQUEST_T {
729 MSG_HDR_T rMsgHdr; /* Must be the first member */
730 P_P2P_SSID_STRUCT_T prSSID;
732 UINT_32 u4NumChannel;
736 RF_CHANNEL_INFO_T arChannelListInfo[1];
737 } MSG_P2P_SCAN_REQUEST_T, *P_MSG_P2P_SCAN_REQUEST_T;
739 typedef struct _MSG_P2P_CHNL_REQUEST_T {
740 MSG_HDR_T rMsgHdr; /* Must be the first member */
743 ENUM_CHNL_EXT_T eChnlSco;
744 RF_CHANNEL_INFO_T rChannelInfo;
745 #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0)
746 BOOLEAN fgNeedIndSupp;
748 } MSG_P2P_CHNL_REQUEST_T, *P_MSG_P2P_CHNL_REQUEST_T;
750 typedef struct _MSG_P2P_CHNL_ABORT_T {
751 MSG_HDR_T rMsgHdr; /* Must be the first member */
753 } MSG_P2P_CHNL_ABORT_T, *P_MSG_P2P_CHNL_ABORT_T;
756 typedef struct _MSG_P2P_CONNECTION_REQUEST_T {
757 MSG_HDR_T rMsgHdr; /* Must be the first member */
758 P2P_SSID_STRUCT_T rSsid;
759 UINT_8 aucBssid[MAC_ADDR_LEN];
760 ENUM_CHNL_EXT_T eChnlSco;
761 RF_CHANNEL_INFO_T rChannelInfo;
764 // TODO: Auth Type, OPEN, SHARED, FT, EAP...
765 } MSG_P2P_CONNECTION_REQUEST_T, *P_MSG_P2P_CONNECTION_REQUEST_T;
768 typedef struct _MSG_P2P_CONNECTION_ABORT_T {
769 MSG_HDR_T rMsgHdr; /* Must be the first member. */
770 UINT_8 aucTargetID[MAC_ADDR_LEN];
771 UINT_16 u2ReasonCode;
772 BOOLEAN fgSendDeauth;
773 } MSG_P2P_CONNECTION_ABORT_T, *P_MSG_P2P_CONNECTION_ABORT_T;
775 typedef struct _MSG_P2P_MGMT_TX_REQUEST_T {
777 P_MSDU_INFO_T prMgmtMsduInfo;
778 UINT_64 u8Cookie; /* For indication. */
779 BOOLEAN fgNoneCckRate;
781 } MSG_P2P_MGMT_TX_REQUEST_T, *P_MSG_P2P_MGMT_TX_REQUEST_T;
783 typedef struct _MSG_P2P_START_AP_T {
785 UINT_32 u4DtimPeriod;
786 UINT_32 u4BcnInterval;
789 UINT_8 ucHiddenSsidType;
791 AP_CRYPTO_SETTINGS_T rEncryptionSettings;
792 INT_32 i4InactiveTimeout;
794 MSG_P2P_START_AP_T, *P_MSG_P2P_START_AP_T;
797 typedef struct _MSG_P2P_BEACON_UPDATE_T {
800 UINT_32 u4BcnBodyLen;
803 UINT_8 aucBuffer[1]; /* Header & Body are put here. */
805 MSG_P2P_BEACON_UPDATE_T, *P_MSG_P2P_BEACON_UPDATE_T;
807 typedef struct _MSG_P2P_MGMT_FRAME_UPDATE_T {
809 ENUM_BUFFER_TYPE_T eBufferType;
812 } MSG_P2P_MGMT_FRAME_UPDATE_T, *P_MSG_P2P_MGMT_FRAME_UPDATE_T;
815 typedef struct _MSG_P2P_SWITCH_OP_MODE_T {
816 MSG_HDR_T rMsgHdr; /* Must be the first member */
817 ENUM_OP_MODE_T eOpMode;
818 } MSG_P2P_SWITCH_OP_MODE_T, *P_MSG_P2P_SWITCH_OP_MODE_T;
820 typedef struct _MSG_P2P_MGMT_FRAME_REGISTER_T {
821 MSG_HDR_T rMsgHdr; /* Must be the first member */
823 BOOLEAN fgIsRegister;
825 MSG_P2P_MGMT_FRAME_REGISTER_T, *P_MSG_P2P_MGMT_FRAME_REGISTER_T;
827 typedef struct _MSG_P2P_NETDEV_REGISTER_T {
828 MSG_HDR_T rMsgHdr; /* Must be the first member */
831 } MSG_P2P_NETDEV_REGISTER_T, *P_MSG_P2P_NETDEV_REGISTER_T;
834 typedef struct _MSG_WFD_CONFIG_SETTINGS_CHANGED_T {
835 MSG_HDR_T rMsgHdr; /* Must be the first member */
836 P_WFD_CFG_SETTINGS_T prWfdCfgSettings;
837 } MSG_WFD_CONFIG_SETTINGS_CHANGED_T, *P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T;
840 /*******************************************************************************
841 * F U N C T I O N D E C L A R A T I O N S
842 ********************************************************************************
845 p2pFsmStateTransition(
846 IN P_ADAPTER_T prAdapter,
847 IN P_P2P_FSM_INFO_T prP2pFsmInfo,
848 IN ENUM_P2P_STATE_T eNextState
855 IN P_ADAPTER_T prAdapter,
856 IN P_P2P_FSM_INFO_T prP2pFsmInfo
861 p2pFsmRunEventScanRequest(
862 IN P_ADAPTER_T prAdapter,
863 IN P_MSG_HDR_T prMsgHdr
867 p2pFsmRunEventMgmtFrameTx(
868 IN P_ADAPTER_T prAdapter,
869 IN P_MSG_HDR_T prMsgHdr
873 p2pFsmRunEventStartAP(
874 IN P_ADAPTER_T prAdapter,
875 IN P_MSG_HDR_T prMsgHdr
879 p2pFsmRunEventNetDeviceRegister(
880 IN P_ADAPTER_T prAdapter,
881 IN P_MSG_HDR_T prMsgHdr
885 p2pFsmRunEventUpdateMgmtFrame(
886 IN P_ADAPTER_T prAdapter,
887 IN P_MSG_HDR_T prMsgHdr
891 p2pFsmRunEventBeaconUpdate(
892 IN P_ADAPTER_T prAdapter,
893 IN P_MSG_HDR_T prMsgHdr
897 p2pFsmRunEventStopAP(
898 IN P_ADAPTER_T prAdapter,
899 IN P_MSG_HDR_T prMsgHdr
903 p2pFsmRunEventChannelRequest(
904 IN P_ADAPTER_T prAdapter,
905 IN P_MSG_HDR_T prMsgHdr
910 p2pFsmRunEventChannelAbort(
911 IN P_ADAPTER_T prAdapter,
912 IN P_MSG_HDR_T prMsgHdr
917 p2pFsmRunEventDissolve(
918 IN P_ADAPTER_T prAdapter,
919 IN P_MSG_HDR_T prMsgHdr
924 p2pFsmRunEventSwitchOPMode(
925 IN P_ADAPTER_T prAdapter,
926 IN P_MSG_HDR_T prMsgHdr
931 p2pFsmRunEventMgmtFrameTxDone(
932 IN P_ADAPTER_T prAdapter,
933 IN P_MSDU_INFO_T prMsduInfo,
934 IN ENUM_TX_RESULT_CODE_T rTxDoneStatus
939 p2pFsmRunEventMgmtFrameRegister(
940 IN P_ADAPTER_T prAdapter,
941 IN P_MSG_HDR_T prMsgHdr
946 p2pFsmRunEventWfdSettingUpdate(
947 IN P_ADAPTER_T prAdapter,
948 IN P_MSG_HDR_T prMsgHdr
954 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
955 ///////////////////////////////////////////////////////////////////////////////////////
956 ///////////////////////////////////////////////////////////////////////////////////////
957 ///////////////////////////////////////////////////////////////////////////////////////
958 ///////////////////////////////////////////////////////////////////////////////////////
959 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
962 //3 /* --------------- WFA P2P DEFAULT PARAMETERS --------------- */
963 #define P2P_WILDCARD_SSID "DIRECT-"
964 #define P2P_WILDCARD_SSID_LEN 7
965 #define P2P_GROUP_ID_LEN 9
967 #define P2P_DRIVER_VERSION 2 /* Update when needed. */
969 #define P2P_DEFAULT_DEV_NAME "Wireless Client"
970 #define P2P_DEFAULT_DEV_NAME_LEN 15
971 #define P2P_DEFAULT_PRIMARY_CATEGORY_ID 10
972 #define P2P_DEFAULT_PRIMARY_SUB_CATEGORY_ID 5
973 #define P2P_DEFAULT_CONFIG_METHOD (WPS_ATTRI_CFG_METHOD_PUSH_BUTTON | WPS_ATTRI_CFG_METHOD_KEYPAD | WPS_ATTRI_CFG_METHOD_DISPLAY)
974 #define P2P_DEFAULT_LISTEN_CHANNEL 1
976 #define P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT 0 /* NOTE(Kevin): Shall <= 16 */
977 #define P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT 13
979 #define P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE 51 /* Contains 6 sub-band. */
981 #define P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT 8 /* NOTE(Kevin): Shall <= 16 */
983 #define P2P_MAXIMUM_CLIENT_COUNT 8
984 #define P2P_MAXIMUM_NOA_COUNT 8
987 #define P2P_MAXIMUM_ATTRIBUTE_LEN 251
989 #define P2P_CTWINDOW_DEFAULT 25 /* in TU=(1024usec) */
991 #define P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE 768
993 /* P2P 3.1.2.1.3 - Find Phase */
994 #define P2P_MAX_DISCOVERABLE_INTERVAL 8 //3//3
995 #define P2P_MIN_DISCOVERABLE_INTERVAL 5 // 1
997 #define P2P_LISTEN_SCAN_UNIT 100 // MS
999 /* FSM Time Related constrain. */
1000 #define P2P_SERACH_STATE_PERIOD_MS 1000 // Deprecated.
1002 #define P2P_GO_CHANNEL_STAY_INTERVAL 1000
1004 #define P2P_GO_NEGO_TIMEOUT_MS 500
1005 #define P2P_CONNECTION_TIMEOUT_SEC 120
1007 #define P2P_INVITAION_TIMEOUT_MS 500 /* Timeout Wait Invitation Resonse. */
1008 #define P2P_PROVISION_DISCOVERY_TIMEOUT_MS 500 /* Timeout Wait Provision Discovery Resonse. */
1010 //3 /* --------------- WFA P2P IE --------------- */
1011 /* P2P 4.1.1 - P2P IE format */
1012 #define P2P_OUI_TYPE_LEN 4
1013 #define P2P_IE_OUI_HDR (ELEM_HDR_LEN + P2P_OUI_TYPE_LEN) /* == OFFSET_OF(IE_P2P_T, aucP2PAttributes[0]) */
1015 /* P2P 4.1.1 - General P2P Attribute */
1016 #define P2P_ATTRI_HDR_LEN 3 /* ID(1 octet) + Length(2 octets) */
1018 /* P2P 4.1.1 - P2P Attribute ID definitions */
1019 #define P2P_ATTRI_ID_STATUS 0
1020 #define P2P_ATTRI_ID_REASON_CODE 1
1021 #define P2P_ATTRI_ID_P2P_CAPABILITY 2
1022 #define P2P_ATTRI_ID_P2P_DEV_ID 3
1023 #define P2P_ATTRI_ID_GO_INTENT 4
1024 #define P2P_ATTRI_ID_CFG_TIMEOUT 5
1025 #define P2P_ATTRI_ID_LISTEN_CHANNEL 6
1026 #define P2P_ATTRI_ID_P2P_GROUP_BSSID 7
1027 #define P2P_ATTRI_ID_EXT_LISTEN_TIMING 8
1028 #define P2P_ATTRI_ID_INTENDED_P2P_IF_ADDR 9
1029 #define P2P_ATTRI_ID_P2P_MANAGEABILITY 10
1030 #define P2P_ATTRI_ID_CHANNEL_LIST 11
1031 #define P2P_ATTRI_ID_NOTICE_OF_ABSENCE 12
1032 #define P2P_ATTRI_ID_P2P_DEV_INFO 13
1033 #define P2P_ATTRI_ID_P2P_GROUP_INFO 14
1034 #define P2P_ATTRI_ID_P2P_GROUP_ID 15
1035 #define P2P_ATTRI_ID_P2P_INTERFACE 16
1036 #define P2P_ATTRI_ID_OPERATING_CHANNEL 17
1037 #define P2P_ATTRI_ID_INVITATION_FLAG 18
1038 #define P2P_ATTRI_ID_VENDOR_SPECIFIC 221
1040 /* Maximum Length of P2P Attributes */
1041 #define P2P_ATTRI_MAX_LEN_STATUS 1 /* 0 */
1042 #define P2P_ATTRI_MAX_LEN_REASON_CODE 1 /* 1 */
1043 #define P2P_ATTRI_MAX_LEN_P2P_CAPABILITY 2 /* 2 */
1044 #define P2P_ATTRI_MAX_LEN_P2P_DEV_ID 6 /* 3 */
1045 #define P2P_ATTRI_MAX_LEN_GO_INTENT 1 /* 4 */
1046 #define P2P_ATTRI_MAX_LEN_CFG_TIMEOUT 2 /* 5 */
1048 #define P2P_ATTRI_MAX_LEN_LISTEN_CHANNEL 5 /* 6 */
1050 #define P2P_ATTRI_MAX_LEN_LISTEN_CHANNEL 5 /* 6 */
1052 #define P2P_ATTRI_MAX_LEN_P2P_GROUP_BSSID 6 /* 7 */
1053 #define P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING 4 /* 8 */
1054 #define P2P_ATTRI_MAX_LEN_INTENDED_P2P_IF_ADDR 6 /* 9 */
1055 #define P2P_ATTRI_MAX_LEN_P2P_MANAGEABILITY 1 /* 10 */
1056 //#define P2P_ATTRI_MAX_LEN_CHANNEL_LIST 3 + (n* (2 + num_of_ch)) /* 11 */
1057 #define P2P_ATTRI_LEN_CHANNEL_LIST 3 /* 11 */
1058 #define P2P_ATTRI_LEN_CHANNEL_ENTRY 2 /* 11 */
1061 //#define P2P_ATTRI_MAX_LEN_NOTICE_OF_ABSENCE 2 + (n* (13)) /* 12 */
1062 #define P2P_ATTRI_MAX_LEN_NOTICE_OF_ABSENCE (2 + (P2P_MAXIMUM_NOA_COUNT*(13))) /* 12 */
1064 #define P2P_ATTRI_MAX_LEN_P2P_DEV_INFO 17 + (8 * (8)) + 36 /* 13 */
1065 //#define P2P_ATTRI_MAX_LEN_P2P_GROUP_INFO n* (25 + (m* (8)) + 32) /* 14 */
1066 #define P2P_ATTRI_MAX_LEN_P2P_GROUP_ID 38 /* 15 */
1067 #define P2P_ATTRI_MAX_LEN_P2P_INTERFACE 253 // 7 + 6* [0~41] /* 16 */
1069 #define P2P_ATTRI_MAX_LEN_OPERATING_CHANNEL 5 /* 17 */
1071 #define P2P_ATTRI_MAX_LEN_OPERATING_CHANNEL 5 /* 17 */
1073 #define P2P_ATTRI_MAX_LEN_INVITATION_FLAGS 1 /* 18 */
1075 /* P2P 4.1.2 - P2P Status definitions */
1076 #define P2P_STATUS_SUCCESS 0
1077 #define P2P_STATUS_FAIL_INFO_IS_CURRENTLY_UNAVAILABLE 1
1078 #define P2P_STATUS_FAIL_INCOMPATIBLE_PARAM 2
1079 #define P2P_STATUS_FAIL_LIMIT_REACHED 3
1080 #define P2P_STATUS_FAIL_INVALID_PARAM 4
1081 #define P2P_STATUS_FAIL_UNABLE_ACCOMMODATE_REQ 5
1082 #define P2P_STATUS_FAIL_PREVIOUS_PROTOCOL_ERR 6
1083 #define P2P_STATUS_FAIL_NO_COMMON_CHANNELS 7
1084 #define P2P_STATUS_FAIL_UNKNOWN_P2P_GROUP 8
1085 #define P2P_STATUS_FAIL_SAME_INTENT_VALUE_15 9
1086 #define P2P_STATUS_FAIL_INCOMPATIBLE_PROVISION_METHOD 10
1087 #define P2P_STATUS_FAIL_REJECTED_BY_USER 11
1090 /* P2P 4.1.3 - P2P Minor Reason Code definitions */
1091 #define P2P_REASON_SUCCESS 0
1092 #define P2P_REASON_DISASSOCIATED_DUE_CROSS_CONNECTION 1
1093 #define P2P_REASON_DISASSOCIATED_DUE_UNMANAGEABLE 2
1094 #define P2P_REASON_DISASSOCIATED_DUE_NO_P2P_COEXIST_PARAM 3
1095 #define P2P_REASON_DISASSOCIATED_DUE_MANAGEABLE 4
1098 /* P2P 4.1.4 - Device Capability Bitmap definitions */
1099 #define P2P_DEV_CAPABILITY_SERVICE_DISCOVERY BIT(0)
1100 #define P2P_DEV_CAPABILITY_CLIENT_DISCOVERABILITY BIT(1)
1101 #define P2P_DEV_CAPABILITY_CONCURRENT_OPERATION BIT(2)
1102 #define P2P_DEV_CAPABILITY_P2P_INFRA_MANAGED BIT(3)
1103 #define P2P_DEV_CAPABILITY_P2P_DEVICE_LIMIT BIT(4)
1104 #define P2P_DEV_CAPABILITY_P2P_INVITATION_PROCEDURE BIT(5)
1107 /* P2P 4.1.4 - Group Capability Bitmap definitions */
1108 #define P2P_GROUP_CAPABILITY_P2P_GROUP_OWNER BIT(0)
1109 #define P2P_GROUP_CAPABILITY_PERSISTENT_P2P_GROUP BIT(1)
1110 #define P2P_GROUP_CAPABILITY_P2P_GROUP_LIMIT BIT(2)
1111 #define P2P_GROUP_CAPABILITY_INTRA_BSS_DISTRIBUTION BIT(3)
1112 #define P2P_GROUP_CAPABILITY_CROSS_CONNECTION BIT(4)
1113 #define P2P_GROUP_CAPABILITY_PERSISTENT_RECONNECT BIT(5)
1114 #define P2P_GROUP_CAPABILITY_GROUP_FORMATION BIT(6)
1116 /* P2P 4.1.6 - GO Intent field definitions */
1117 #define P2P_GO_INTENT_TIE_BREAKER_FIELD BIT(0)
1118 #define P2P_GO_INTENT_VALUE_MASK BITS(1,7)
1119 #define P2P_GO_INTENT_VALUE_OFFSET 1
1121 /* P2P 4.1.12 - Manageability Bitmap definitions */
1122 #define P2P_DEVICE_MANAGEMENT BIT(0)
1124 /* P2P 4.1.14 - CTWindow and OppPS Parameters definitions */
1125 #define P2P_CTW_OPPPS_PARAM_OPPPS_FIELD BIT(7)
1126 #define P2P_CTW_OPPPS_PARAM_CTWINDOW_MASK BITS(0,6)
1129 #define ELEM_MAX_LEN_P2P_FOR_PROBE_REQ \
1130 (P2P_OUI_TYPE_LEN + \
1131 (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_CAPABILITY) + \
1132 (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_DEV_ID) + \
1133 (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_LISTEN_CHANNEL) + \
1134 (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_OPERATING_CHANNEL))
1136 #define ELEM_MAX_LEN_P2P_FOR_ASSOC_REQ \
1137 (P2P_OUI_TYPE_LEN + \
1138 (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_CAPABILITY) + \
1139 (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING) + \
1140 (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_DEV_INFO))
1143 /* P2P 4.1.16 - P2P Client Infor Descriptor */
1144 #define P2P_CLIENT_INFO_DESC_HDR_LEN 1 /* Length(1 octets) */
1146 /* P2P 4.1.20 - P2P Invitation Flags Attribute*/
1147 #define P2P_INVITATION_FLAGS_INVITATION_TYPE BIT(0)
1148 #define P2P_INVITATION_TYPE_INVITATION 0
1149 #define P2P_INVITATION_TYPE_REINVOKE 1
1150 //3 /* --------------- WPS Data Element Definitions --------------- */
1151 /* P2P 4.2.2 - General WSC Attribute */
1152 #define WSC_ATTRI_HDR_LEN 4 /* ID(2 octet) + Length(2 octets) */
1153 #define WSC_ATTRI_MAX_LEN_VERSION 1
1154 #define WSC_ATTRI_MAX_LEN_DEVICE_PASSWORD_ID 2
1155 #define WSC_ATTRI_LEN_CONFIG_METHOD 2
1157 /* WPS 11 - Data Element Definitions */
1158 #define WPS_ATTRI_ID_VERSION 0x104A
1159 #define WPS_ATTRI_ID_CONFIGURATION_METHODS 0x1008
1160 #define WPS_ATTRI_ID_DEVICE_PASSWORD 0x1012
1161 #define WPS_ATTRI_ID_DEVICE_NAME 0x1011
1162 #define WPS_ATTRI_ID_PRI_DEVICE_TYPE 0x1054
1163 #define WPS_ATTRI_ID_SEC_DEVICE_TYPE 0x1055
1165 #define WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE 300
1167 #define WPS_ATTRI_MAX_LEN_DEVICE_NAME 32 /* 0x1011 */
1169 #define WPS_ATTRI_CFG_METHOD_USBA BIT(0)
1170 #define WPS_ATTRI_CFG_METHOD_ETHERNET BIT(1)
1171 #define WPS_ATTRI_CFG_METHOD_LABEL BIT(2)
1172 #define WPS_ATTRI_CFG_METHOD_DISPLAY BIT(3)
1173 #define WPS_ATTRI_CFG_METHOD_EXT_NFC BIT(4)
1174 #define WPS_ATTRI_CFG_METHOD_INT_NFC BIT(5)
1175 #define WPS_ATTRI_CFG_METHOD_NFC_IF BIT(6)
1176 #define WPS_ATTRI_CFG_METHOD_PUSH_BUTTON BIT(7)
1177 #define WPS_ATTRI_CFG_METHOD_KEYPAD BIT(8)
1180 #define P2P_FLAGS_PROVISION_COMPLETE 0x00000001
1181 #define P2P_FLAGS_PROVISION_DISCOVERY_COMPLETE 0x00000002
1182 #define P2P_FLAGS_PROVISION_DISCOVERY_WAIT_RESPONSE 0x00000004
1183 #define P2P_FLAGS_PROVISION_DISCOVERY_RESPONSE_WAIT 0x00000008
1184 #define P2P_FLAGS_MASK_PROVISION 0x00000017
1185 #define P2P_FLAGS_MASK_PROVISION_COMPLETE 0x00000015
1186 #define P2P_FLAGS_PROVISION_DISCOVERY_INDICATED 0x00000010
1187 #define P2P_FLAGS_INVITATION_TOBE_GO 0x00000100
1188 #define P2P_FLAGS_INVITATION_TOBE_GC 0x00000200
1189 #define P2P_FLAGS_INVITATION_SUCCESS 0x00000400
1190 #define P2P_FLAGS_INVITATION_WAITING_TARGET 0x00000800
1191 #define P2P_FLAGS_MASK_INVITATION 0x00000F00
1192 #define P2P_FLAGS_FORMATION_ON_GOING 0x00010000
1193 #define P2P_FLAGS_FORMATION_LOCAL_PWID_RDY 0x00020000
1194 #define P2P_FLAGS_FORMATION_TARGET_PWID_RDY 0x00040000
1195 #define P2P_FLAGS_FORMATION_COMPLETE 0x00080000
1196 #define P2P_FLAGS_MASK_FORMATION 0x000F0000
1197 #define P2P_FLAGS_DEVICE_DISCOVER_REQ 0x00100000
1198 #define P2P_FLAGS_DEVICE_DISCOVER_DONE 0x00200000
1199 #define P2P_FLAGS_DEVICE_INVITATION_WAIT 0x00400000
1200 #define P2P_FLAGS_DEVICE_SERVICE_DISCOVER_WAIT 0x00800000
1201 #define P2P_FLAGS_MASK_DEVICE_DISCOVER 0x00F00000
1203 #define P2P_FLAGS_DEVICE_FORMATION_REQUEST 0x01000000
1206 /* MACRO for flag operation */
1207 #define SET_FLAGS(_FlagsVar, _BitsToSet) \
1208 (_FlagsVar) = ((_FlagsVar) | (_BitsToSet))
1210 #define TEST_FLAGS(_FlagsVar, _BitsToCheck) \
1211 (((_FlagsVar) & (_BitsToCheck)) == (_BitsToCheck))
1213 #define CLEAR_FLAGS(_FlagsVar, _BitsToClear) \
1214 (_FlagsVar) &= ~(_BitsToClear)
1218 #define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_I 0
1220 #define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_II 0
1222 #define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_III 0
1224 #define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_IV 0
1226 #define CFG_DISABLE_DELAY_PROVISION_DISCOVERY 0
1228 #define CFG_CONNECTION_POLICY_2_0 0
1230 /* Device Password ID */
1231 enum wps_dev_password_id {
1232 DEV_PW_DEFAULT = 0x0000,
1233 DEV_PW_USER_SPECIFIED = 0x0001,
1234 DEV_PW_MACHINE_SPECIFIED = 0x0002,
1235 DEV_PW_REKEY = 0x0003,
1236 DEV_PW_PUSHBUTTON = 0x0004,
1237 DEV_PW_REGISTRAR_SPECIFIED = 0x0005
1240 /*******************************************************************************
1242 ********************************************************************************
1244 #if defined(WINDOWS_DDK) || defined(WINDOWS_CE)
1248 //3 /* --------------- WFA P2P IE and Attributes --------------- */
1250 /* P2P 4.1.1 - P2P Information Element */
1251 typedef struct _IE_P2P_T {
1252 UINT_8 ucId; /* Element ID */
1253 UINT_8 ucLength; /* Length */
1254 UINT_8 aucOui[3]; /* OUI */
1255 UINT_8 ucOuiType; /* OUI Type */
1256 UINT_8 aucP2PAttributes[1]; /* P2P Attributes */
1257 } __KAL_ATTRIB_PACKED__ IE_P2P_T, *P_IE_P2P_T;
1259 /* P2P 4.1.1 - General P2P Attribute */
1260 typedef struct _P2P_ATTRIBUTE_T {
1261 UINT_8 ucId; /* Attribute ID */
1262 UINT_16 u2Length; /* Length */
1263 UINT_8 aucBody[1]; /* Body field */
1264 } __KAL_ATTRIB_PACKED__ P2P_ATTRIBUTE_T, ATTRIBUTE_HDR_T, *P_P2P_ATTRIBUTE_T, *P_ATTRIBUTE_HDR_T;
1267 /* P2P 4.1.2 - P2P Status Attribute */
1268 typedef struct _P2P_ATTRI_STATUS_T {
1269 UINT_8 ucId; /* Attribute ID */
1270 UINT_16 u2Length; /* Length */
1271 UINT_8 ucStatusCode; /* Status Code */
1272 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_STATUS_T, *P_P2P_ATTRI_STATUS_T;
1275 /* P2P 4.1.3 - P2P Minor Reason Code Attribute */
1276 typedef struct _P2P_ATTRI_REASON_T {
1277 UINT_8 ucId; /* Attribute ID */
1278 UINT_16 u2Length; /* Length */
1279 UINT_8 ucMinorReasonCode; /* Minor Reason Code */
1280 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_REASON_T, *P_P2P_ATTRI_REASON_T;
1283 /* P2P 4.1.4 - P2P Capability Attribute */
1284 typedef struct _P2P_ATTRI_CAPABILITY_T {
1285 UINT_8 ucId; /* Attribute ID */
1286 UINT_16 u2Length; /* Length */
1287 UINT_8 ucDeviceCap; /* Device Capability Bitmap */
1288 UINT_8 ucGroupCap; /* Group Capability Bitmap */
1289 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_CAPABILITY_T, *P_P2P_ATTRI_CAPABILITY_T;
1292 /* P2P 4.1.5 - P2P Device ID Attribute */
1293 typedef struct _P2P_ATTRI_DEV_ID_T {
1294 UINT_8 ucId; /* Attribute ID */
1295 UINT_16 u2Length; /* Length */
1296 UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */
1297 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_DEV_ID_T, *P_P2P_ATTRI_DEV_ID_T;
1300 /* P2P 4.1.6 - Group Owner Intent Attribute */
1301 typedef struct _P2P_ATTRI_GO_INTENT_T {
1302 UINT_8 ucId; /* Attribute ID */
1303 UINT_16 u2Length; /* Length */
1304 UINT_8 ucGOIntent; /* Group Owner Intent */
1305 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_GO_INTENT_T, *P_P2P_ATTRI_GO_INTENT_T;
1308 /* P2P 4.1.7 - Configuration Timeout Attribute */
1309 typedef struct _P2P_ATTRI_CFG_TIMEOUT_T {
1310 UINT_8 ucId; /* Attribute ID */
1311 UINT_16 u2Length; /* Length */
1312 UINT_8 ucGOCfgTimeout; /* GO Configuration Timeout */
1313 UINT_8 ucClientCfgTimeout; /* Client Configuration Timeout */
1314 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_CFG_TIMEOUT_T, *P_P2P_ATTRI_CFG_TIMEOUT_T;
1317 /* P2P 4.1.8 - Listen Channel Attribute */
1318 typedef struct _P2P_ATTRI_LISTEN_CHANNEL_T {
1319 UINT_8 ucId; /* Attribute ID */
1320 UINT_16 u2Length; /* Length */
1321 UINT_8 aucCountryString[3]; /* Country String */
1322 UINT_8 ucOperatingClass; /* Operating Class from 802.11 Annex J/P802.11 REVmb 3.0 */
1323 UINT_8 ucChannelNumber; /* Channel Number */
1324 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_LISTEN_CHANNEL_T, *P_P2P_ATTRI_LISTEN_CHANNEL_T;
1327 /* P2P 4.1.9 - P2P Group BSSID Attribute */
1328 typedef struct _P2P_ATTRI_GROUP_BSSID_T {
1329 UINT_8 ucId; /* Attribute ID */
1330 UINT_16 u2Length; /* Length */
1331 UINT_8 aucBssid[MAC_ADDR_LEN]; /* P2P Group BSSID */
1332 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_GROUP_BSSID_T, *P_P2P_ATTRI_GROUP_BSSID_T;
1335 /* P2P 4.1.10 - Extended Listen Timing Attribute */
1336 typedef struct _P2P_ATTRI_EXT_LISTEN_TIMING_T {
1337 UINT_8 ucId; /* Attribute ID */
1338 UINT_16 u2Length; /* Length */
1339 UINT_16 u2AvailPeriod; /* Availability Period */
1340 UINT_16 u2AvailInterval; /* Availability Interval */
1341 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_EXT_LISTEN_TIMING_T, *P_P2P_ATTRI_EXT_LISTEN_TIMING_T;
1344 /* P2P 4.1.11 - Intended P2P Interface Address Attribute */
1345 typedef struct _P2P_ATTRI_INTENDED_IF_ADDR_T {
1346 UINT_8 ucId; /* Attribute ID */
1347 UINT_16 u2Length; /* Length */
1348 UINT_8 aucIfAddr[MAC_ADDR_LEN];/* P2P Interface Address */
1349 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_INTENDED_IF_ADDR_T, *P_P2P_ATTRI_INTENDED_IF_ADDR_T;
1352 /* P2P 4.1.12 - P2P Manageability Attribute */
1353 typedef struct _P2P_ATTRI_MANAGEABILITY_T {
1354 UINT_8 ucId; /* Attribute ID */
1355 UINT_16 u2Length; /* Length */
1356 UINT_8 ucManageability; /* P2P Manageability Bitmap */
1357 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_MANAGEABILITY_T, *P_P2P_ATTRI_MANAGEABILITY_T;
1360 /* P2P 4.1.13 - Channel List Attribute */
1361 typedef struct _P2P_ATTRI_CHANNEL_LIST_T {
1362 UINT_8 ucId; /* Attribute ID */
1363 UINT_16 u2Length; /* Length */
1364 UINT_8 aucCountryString[3]; /* Country String */
1365 UINT_8 aucChannelEntry[1]; /* Channel Entry List */
1366 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_CHANNEL_T, *P_P2P_ATTRI_CHANNEL_T;
1368 typedef struct _CHANNEL_ENTRY_FIELD_T {
1369 UINT_8 ucRegulatoryClass; /* Regulatory Class */
1370 UINT_8 ucNumberOfChannels; /* Number Of Channels */
1371 UINT_8 aucChannelList[1]; /* Channel List */
1372 } __KAL_ATTRIB_PACKED__ CHANNEL_ENTRY_FIELD_T, *P_CHANNEL_ENTRY_FIELD_T;
1375 /* P2P 4.1.14 - Notice of Absence Attribute */
1376 typedef struct _P2P_ATTRI_NOA_T {
1377 UINT_8 ucId; /* Attribute ID */
1378 UINT_16 u2Length; /* Length */
1379 UINT_8 ucIndex; /* Index */
1380 UINT_8 ucCTWOppPSParam; /* CTWindow and OppPS Parameters */
1381 UINT_8 aucNoADesc[1]; /* NoA Descriptor */
1382 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_NOA_T, *P_P2P_ATTRI_NOA_T;
1384 typedef struct _NOA_DESCRIPTOR_T {
1385 UINT_8 ucCountType; /* Count/Type */
1386 UINT_32 u4Duration; /* Duration */
1387 UINT_32 u4Interval; /* Interval */
1388 UINT_32 u4StartTime; /* Start Time */
1389 } __KAL_ATTRIB_PACKED__ NOA_DESCRIPTOR_T, *P_NOA_DESCRIPTOR_T;
1391 typedef struct _P2P_ATTRI_DEV_INFO_T {
1392 UINT_8 ucId; /* Attribute ID */
1393 UINT_16 u2Length; /* Length */
1394 UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */
1395 UINT_16 u2ConfigMethodsBE; /* Config Method */
1396 DEVICE_TYPE_T rPrimaryDevTypeBE; /* Primary Device Type */
1397 UINT_8 ucNumOfSecondaryDevType; /* Number of Secondary Device Types */
1398 DEVICE_TYPE_T arSecondaryDevTypeListBE[1]; /* Secondary Device Type List */
1399 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_DEV_INFO_T, *P_P2P_ATTRI_DEV_INFO_T;
1401 /* WPS 7.1 & 11 WPS TLV Data Format - Device Name */
1402 typedef struct _DEVICE_NAME_TLV_T {
1403 UINT_16 u2Id; /* WPS Attribute Type */
1404 UINT_16 u2Length; /* Data Length */
1405 UINT_8 aucName[32]; /* Device Name */ // TODO: Fixme
1406 } __KAL_ATTRIB_PACKED__ DEVICE_NAME_TLV_T, *P_DEVICE_NAME_TLV_T;
1409 /* P2P 4.1.16 - P2P Group Info Attribute */
1410 typedef struct _P2P_CLIENT_INFO_DESC_T {
1411 UINT_8 ucLength; /* Length */
1412 UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */
1413 UINT_8 aucIfAddr[MAC_ADDR_LEN]; /* P2P Interface Address */
1414 UINT_8 ucDeviceCap; /* Device Capability Bitmap */
1415 UINT_16 u2ConfigMethodsBE; /* Config Method */
1416 DEVICE_TYPE_T rPrimaryDevTypeBE; /* Primary Device Type */
1417 UINT_8 ucNumOfSecondaryDevType; /* Number of Secondary Device Types */
1418 DEVICE_TYPE_T arSecondaryDevTypeListBE[1]; /* Secondary Device Type List */
1419 } __KAL_ATTRIB_PACKED__ P2P_CLIENT_INFO_DESC_T, *P_P2P_CLIENT_INFO_DESC_T;
1421 typedef struct _P2P_ATTRI_GROUP_INFO_T {
1422 UINT_8 ucId; /* Attribute ID */
1423 UINT_16 u2Length; /* Length */
1424 P2P_CLIENT_INFO_DESC_T arClientDesc[1]; /* P2P Client Info Descriptors */
1425 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_GROUP_INFO_T, *P_P2P_ATTRI_GROUP_INFO_T;
1428 /* P2P 4.1.17 - P2P Group ID Attribute */
1429 typedef struct _P2P_ATTRI_GROUP_ID_T {
1430 UINT_8 ucId; /* Attribute ID */
1431 UINT_16 u2Length; /* Length */
1432 UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */
1433 UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; /* SSID */
1434 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_GROUP_ID_T, *P_P2P_ATTRI_GROUP_ID_T;
1437 /* P2P 4.1.18 - P2P Interface Attribute */
1438 typedef struct _P2P_ATTRI_INTERFACE_T {
1439 UINT_8 ucId; /* Attribute ID */
1440 UINT_16 u2Length; /* Length */
1441 UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */
1442 UINT_8 ucIfAddrCount; /* P2P Interface Address Count */
1443 UINT_8 aucIfAddrList[MAC_ADDR_LEN];/* P2P Interface Address List */
1444 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_INTERFACE_T, *P_P2P_ATTRI_INTERFACE_T;
1447 /* P2P 4.1.19 - Operating Channel Attribute */
1448 typedef struct _P2P_ATTRI_OPERATING_CHANNEL_T {
1449 UINT_8 ucId; /* Attribute ID */
1450 UINT_16 u2Length; /* Length */
1451 UINT_8 aucCountryString[3]; /* Country String */
1452 UINT_8 ucOperatingClass; /* Operating Class from 802.11 Annex J/P802.11 REVmb 3.0 */
1453 UINT_8 ucChannelNumber; /* Channel Number */
1454 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_OPERATING_CHANNEL_T, *P_P2P_ATTRI_OPERATING_CHANNEL_T;
1456 /* P2P 4.1.20 - Invitation Flags Attribute */
1457 typedef struct _P2P_ATTRI_INVITATION_FLAG_T {
1458 UINT_8 ucId; /* Attribute ID */
1459 UINT_16 u2Length; /* Length */
1460 UINT_8 ucInviteFlagsBitmap; /* Invitation Flags Bitmap */
1461 } __KAL_ATTRIB_PACKED__ P2P_ATTRI_INVITATION_FLAG_T, *P_P2P_ATTRI_INVITATION_FLAG_T;
1465 /* P2P 4.1.1 - General WSC Attribute */
1466 typedef struct _WSC_ATTRIBUTE_T {
1467 UINT_16 u2Id; /* Attribute ID */
1468 UINT_16 u2Length; /* Length */
1469 UINT_8 aucBody[1]; /* Body field */
1470 } __KAL_ATTRIB_PACKED__ WSC_ATTRIBUTE_T, *P_WSC_ATTRIBUTE_T;
1472 /* WSC 1.0 Table 28 */
1473 typedef struct _WSC_ATTRI_VERSION_T {
1474 UINT_16 u2Id; /* Attribute ID */
1475 UINT_16 u2Length; /* Length */
1476 UINT_8 ucVersion; /* Version 1.0 or 1.1 */
1477 } __KAL_ATTRIB_PACKED__ WSC_ATTRI_VERSION_T, *P_WSC_ATTRI_VERSION_T;
1479 typedef struct _WSC_ATTRI_DEVICE_PASSWORD_ID_T {
1480 UINT_16 u2Id; /* Attribute ID */
1481 UINT_16 u2Length; /* Length */
1482 UINT_16 u2DevPasswordId; /* Device Password ID */
1483 } __KAL_ATTRIB_PACKED__ WSC_ATTRI_DEVICE_PASSWORD_ID_T, *P_WSC_ATTRI_DEVICE_PASSWORD_ID_T;
1486 typedef struct _WSC_ATTRI_CONFIGURATION_METHOD_T {
1487 UINT_16 u2Id; /* Attribute ID */
1488 UINT_16 u2Length; /* Length */
1489 UINT_16 u2ConfigMethods; /* Configure Methods */
1490 } __KAL_ATTRIB_PACKED__ WSC_ATTRI_CONFIGURATION_METHOD_T, *P_WSC_ATTRI_CONFIGURATION_METHOD_T;
1493 #if defined(WINDOWS_DDK) || defined(WINDOWS_CE)
1498 //3 /* --------------- WFA P2P Attributes Handler prototype --------------- */
1499 typedef UINT_32 (*PFN_APPEND_ATTRI_FUNC)(P_ADAPTER_T, BOOLEAN, PUINT_16, PUINT_8, UINT_16);
1501 typedef VOID (*PFN_HANDLE_ATTRI_FUNC)(P_SW_RFB_T, P_P2P_ATTRIBUTE_T);
1503 typedef VOID (*PFN_VERIFY_ATTRI_FUNC)(P_SW_RFB_T, P_P2P_ATTRIBUTE_T, PUINT_16);
1505 typedef UINT_32 (*PFN_CALCULATE_VAR_ATTRI_LEN_FUNC)(P_ADAPTER_T, P_STA_RECORD_T);
1508 typedef struct _APPEND_VAR_ATTRI_ENTRY_T {
1509 UINT_16 u2EstimatedFixedAttriLen; /* For fixed length */
1510 PFN_CALCULATE_VAR_ATTRI_LEN_FUNC pfnCalculateVariableAttriLen;
1511 PFN_APPEND_ATTRI_FUNC pfnAppendAttri;
1512 } APPEND_VAR_ATTRI_ENTRY_T, *P_APPEND_VAR_ATTRI_ENTRY_T;
1514 typedef enum _ENUM_CONFIG_METHOD_SEL {
1515 ENUM_CONFIG_METHOD_SEL_AUTO,
1516 ENUM_CONFIG_METHOD_SEL_USER,
1517 ENUM_CONFIG_METHOD_SEL_NUM
1518 } ENUM_CONFIG_METHOD_SEL, *P_ENUM_CONFIG_METHOD_SEL;
1520 typedef enum _ENUM_P2P_FORMATION_POLICY {
1521 ENUM_P2P_FORMATION_POLICY_AUTO = 0,
1522 ENUM_P2P_FORMATION_POLICY_PASSIVE, /* Device would wait GO NEGO REQ instead of sending it actively. */
1523 ENUM_P2P_FORMATION_POLICY_NUM
1524 } ENUM_P2P_FORMATION_POLICY, P_ENUM_P2P_FORMATION_POLICY;
1526 typedef enum _ENUM_P2P_INVITATION_POLICY {
1527 ENUM_P2P_INVITATION_POLICY_USER = 0,
1528 ENUM_P2P_INVITATION_POLICY_ACCEPT_FIRST,
1529 ENUM_P2P_INVITATION_POLICY_DENY_ALL,
1530 ENUM_P2P_INVITATION_POLICY_NUM
1531 } ENUM_P2P_INVITATION_POLICY, P_ENUM_P2P_INVITATION_POLICY;
1533 //3 /* --------------- Data Structure for P2P Operation --------------- */
1534 //3 /* Session for CONNECTION SETTINGS of P2P */
1535 struct _P2P_CONNECTION_SETTINGS_T {
1536 UINT_8 ucDevNameLen;
1537 UINT_8 aucDevName[WPS_ATTRI_MAX_LEN_DEVICE_NAME];
1539 DEVICE_TYPE_T rPrimaryDevTypeBE;
1541 ENUM_P2P_FORMATION_POLICY eFormationPolicy; /* Formation Policy. */
1543 /*------------WSC Related Param---------------*/
1544 UINT_16 u2ConfigMethodsSupport; /* Prefered configure method.
1545 * Some device may not have keypad.
1547 ENUM_CONFIG_METHOD_SEL eConfigMethodSelType;
1548 UINT_16 u2TargetConfigMethod; /* Configure method selected by user or auto. */
1549 UINT_16 u2LocalConfigMethod; /* Configure method of target. */
1550 BOOLEAN fgIsPasswordIDRdy;
1551 /*------------WSC Related Param---------------*/
1553 UINT_8 ucClientConfigTimeout;
1554 UINT_8 ucGoConfigTimeout;
1556 UINT_8 ucSecondaryDevTypeCount;
1557 #if P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT
1558 DEVICE_TYPE_T arSecondaryDevTypeBE[P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT];
1563 UINT_8 ucRfChannelListCount;
1564 #if P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT
1565 UINT_8 aucChannelList[P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT]; /* Channel Numbering depends on 802.11mb Annex J. */
1569 UINT_8 ucRfChannelListSize;
1570 #if P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE
1571 UINT_8 aucChannelEntriesField[P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE];
1576 UINT_8 ucTieBreaker;
1579 /* For Device Capability */
1580 BOOLEAN fgSupportServiceDiscovery;
1581 BOOLEAN fgSupportClientDiscoverability;
1582 BOOLEAN fgSupportConcurrentOperation;
1583 BOOLEAN fgSupportInfraManaged;
1584 BOOLEAN fgSupportInvitationProcedure;
1586 /* For Group Capability */
1587 BOOLEAN fgSupportPersistentP2PGroup;
1588 BOOLEAN fgSupportIntraBSSDistribution;
1589 BOOLEAN fgSupportCrossConnection;
1590 BOOLEAN fgSupportPersistentReconnect;
1592 BOOLEAN fgP2pGroupLimit;
1594 BOOLEAN fgSupportOppPS;
1597 BOOLEAN fgIsScanReqIssued;
1598 BOOLEAN fgIsServiceDiscoverIssued;
1601 /*============ Target Device Connection Settings ============*/
1603 /* Discover Target Device Info. */
1605 BOOLEAN fgIsDevType;
1607 /* Encryption mode of Target Device */
1608 ENUM_PARAM_AUTH_MODE_T eAuthMode;
1611 * 1. AP Mode, this is the desired SSID user specified.
1612 * 2. Client Mode, this is the target SSID to be connected to.
1614 UINT_8 aucSSID[ELEM_MAX_LEN_SSID];
1617 /* Operating channel requested. */
1618 UINT_8 ucOperatingChnl;
1621 /* Linten channel requested. */
1622 UINT_8 ucListenChnl;
1624 /* For device discover address/type. */
1625 UINT_8 aucTargetDevAddr[MAC_ADDR_LEN]; /* P2P Device Address, for P2P Device Discovery & P2P Connection. */
1627 #if CFG_ENABLE_WIFI_DIRECT
1628 P_P2P_DEVICE_DESC_T prTargetP2pDesc;
1631 UINT_8 ucLastStatus; /* P2P FSM would append status attribute according to this field. */
1634 #if !CFG_DISABLE_DELAY_PROVISION_DISCOVERY
1635 UINT_8 ucLastDialogToken;
1636 UINT_8 aucIndicateDevAddr[MAC_ADDR_LEN];
1640 UINT_8 ucTargetRfChannelListCount;
1641 #if P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT
1642 UINT_8 aucTargetChannelList[P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT]; /* Channel Numbering depends on 802.11mb Annex J. */
1649 typedef struct _NOA_TIMING_T {
1650 BOOLEAN fgIsInUse; /* Indicate if this entry is in use or not */
1651 UINT_8 ucCount; /* Count */
1653 UINT_8 aucReserved[2];
1655 UINT_32 u4Duration; /* Duration */
1656 UINT_32 u4Interval; /* Interval */
1657 UINT_32 u4StartTime; /* Start Time */
1658 } NOA_TIMING_T, *P_NOA_TIMING_T;
1660 typedef enum _ENUM_P2P_IOCTL_T {
1662 P2P_IOCTL_DEV_DISCOVER,
1663 P2P_IOCTL_INVITATION_REQ,
1664 P2P_IOCTL_SERV_DISCOVER,
1671 /*---------------- Service Discovery Related -------------------*/
1672 typedef enum _ENUM_SERVICE_TX_TYPE_T {
1673 ENUM_SERVICE_TX_TYPE_BY_DA,
1674 ENUM_SERVICE_TX_TYPE_BY_CHNL,
1675 ENUM_SERVICE_TX_TYPE_NUM
1676 } ENUM_SERVICE_TX_TYPE_T;
1679 typedef struct _SERVICE_DISCOVERY_FRAME_DATA_T {
1680 QUE_ENTRY_T rQueueEntry;
1681 P_MSDU_INFO_T prSDFrame;
1682 ENUM_SERVICE_TX_TYPE_T eServiceType;
1686 UINT_8 ucChannelNum;
1687 UINT_8 aucPeerAddr[MAC_ADDR_LEN];
1689 BOOLEAN fgIsTxDoneIndicate;
1690 } SERVICE_DISCOVERY_FRAME_DATA_T, *P_SERVICE_DISCOVERY_FRAME_DATA_T;
1695 struct _P2P_FSM_INFO_T_DEPRECATED {
1697 ENUM_P2P_STATE_T eCurrentState;
1700 BOOLEAN fgIsChannelRequested;
1711 ENUM_P2P_STATE_T ePreviousState;
1713 ENUM_P2P_STATE_T eReturnState; /* Return state after current activity finished or abort. */
1715 UINT_8 aucTargetIfAddr[PARAM_MAC_ADDR_LEN];
1716 P_BSS_DESC_T prTargetBss; /* BSS of target P2P Device. For Connection/Service Discovery */
1718 P_STA_RECORD_T prTargetStaRec;
1720 BOOLEAN fgIsRsponseProbe; /* Indicate if P2P FSM can response probe request frame. */
1722 /* Sequence number of requested message. */
1723 UINT_8 ucSeqNumOfReqMsg; /* Used for SAA FSM request message. */
1725 /* Channel Privilege */
1726 UINT_8 ucSeqNumOfChReq; /* Used for Channel Request message. */
1729 UINT_8 ucSeqNumOfScnMsg; /* Used for SCAN FSM request message. */
1730 UINT_8 ucSeqNumOfCancelMsg;
1732 UINT_8 ucDialogToken;
1733 UINT_8 ucRxDialogToken;
1736 TIMER_T rDeviceDiscoverTimer; /* For device discovery time of each discovery request from user.*/
1737 TIMER_T rOperationListenTimer; /* For Find phase under operational state. */
1738 TIMER_T rFSMTimer; /* A timer used for Action frame timeout usage. */
1740 TIMER_T rRejoinTimer; /* A timer used for Action frame timeout usage. */
1743 /* Flag to indicate Provisioning */
1744 BOOLEAN fgIsConnectionRequested;
1746 /* Current IOCTL. */
1747 ENUM_P2P_IOCTL_T eP2pIOCTL;
1749 UINT_8 ucAvailableAuthTypes; /* Used for AUTH_MODE_AUTO_SWITCH */
1751 /*--------SERVICE DISCOVERY--------*/
1752 QUE_T rQueueGASRx; /* Input Request/Response. */
1753 QUE_T rQueueGASTx; /* Output Response. */
1754 P_SERVICE_DISCOVERY_FRAME_DATA_T prSDRequest;
1755 UINT_8 ucVersionNum; /* GAS packet sequence number for...Action Frame? */
1756 UINT_8 ucGlobalSeqNum; /* Sequence Number of RX SD packet. */
1757 /*--------Service DISCOVERY--------*/
1759 /*--------DEVICE DISCOVERY---------*/
1760 UINT_8 aucTargetGroupID[PARAM_MAC_ADDR_LEN];
1761 UINT_16 u2TargetGroupSsidLen;
1762 UINT_8 aucTargetSsid[32];
1763 UINT_8 aucSearchingP2pDevice[PARAM_MAC_ADDR_LEN];
1765 /*----------------------------------*/
1767 /* Indicating Peer Status. */
1770 /*Indicating current running mode.*/
1774 /*------------INVITATION------------*/
1775 ENUM_P2P_INVITATION_POLICY eInvitationRspPolicy;
1776 /*----------------------------------*/
1782 struct _P2P_SPECIFIC_BSS_INFO_T {
1783 /* For GO(AP) Mode - Compose TIM IE */
1784 UINT_16 u2SmallestAID;
1785 UINT_16 u2LargestAID;
1786 UINT_8 ucBitmapCtrl;
1787 //UINT_8 aucPartialVirtualBitmap[MAX_LEN_TIM_PARTIAL_BMP];
1789 /* For GC/GO OppPS */
1790 BOOLEAN fgEnableOppPS;
1795 UINT_8 ucNoATimingCount; /* Number of NoA Timing */
1796 NOA_TIMING_T arNoATiming[P2P_MAXIMUM_NOA_COUNT];
1798 BOOLEAN fgIsNoaAttrExisted;
1800 /* For P2P Device */
1801 UINT_8 ucRegClass; /* Regulatory Class for channel. */
1802 UINT_8 ucListenChannel; /* Linten Channel only on channels 1, 6 and 11 in the 2.4 GHz. */
1804 UINT_8 ucPreferredChannel; /* Operating Channel, should be one of channel list in p2p connection settings. */
1805 ENUM_CHNL_EXT_T eRfSco;
1806 ENUM_BAND_T eRfBand;
1808 /* Extened Listen Timing. */
1809 UINT_16 u2AvailabilityPeriod;
1810 UINT_16 u2AvailabilityInterval;
1813 #if 0 //LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0)
1814 UINT_16 u2IELenForBCN;
1815 UINT_8 aucBeaconIECache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE + WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE];
1817 // UINT_16 u2IELenForProbeRsp;
1818 // UINT_8 aucProbeRspIECache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE + WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE];
1820 UINT_16 u2IELenForAssocRsp;
1821 UINT_8 aucAssocRspIECache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE + WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE];
1824 UINT_16 u2AttributeLen;
1825 UINT_8 aucAttributesCache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE];
1827 UINT_16 u2WscAttributeLen;
1828 UINT_8 aucWscAttributesCache[WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE];
1830 UINT_8 aucGroupID[MAC_ADDR_LEN];
1831 UINT_16 u2GroupSsidLen;
1832 UINT_8 aucGroupSsid[ELEM_MAX_LEN_SSID];
1834 PARAM_CUSTOM_NOA_PARAM_STRUC_T rNoaParam;
1835 PARAM_CUSTOM_OPPPS_PARAM_STRUC_T rOppPsParam;
1838 UINT_8 aucWpaIeBuffer[ELEM_HDR_LEN + ELEM_MAX_LEN_WPA];
1848 typedef struct _MSG_P2P_DEVICE_DISCOVER_T {
1849 MSG_HDR_T rMsgHdr; /* Must be the first member */
1850 UINT_32 u4DevDiscoverTime; /* 0: Infinite, 1~X: in unit of MS. */
1851 BOOLEAN fgIsSpecificType;
1852 #if CFG_ENABLE_WIFI_DIRECT
1853 P2P_DEVICE_TYPE_T rTargetDeviceType;
1855 UINT_8 aucTargetDeviceID[MAC_ADDR_LEN];
1856 } MSG_P2P_DEVICE_DISCOVER_T, *P_MSG_P2P_DEVICE_DISCOVER_T;
1860 typedef struct _MSG_P2P_INVITATION_REQUEST_T {
1861 MSG_HDR_T rMsgHdr; /* Must be the first member */
1862 UINT_8 aucDeviceID[MAC_ADDR_LEN]; /* Target Device ID to be invited. */
1863 } MSG_P2P_INVITATION_REQUEST_T, *P_MSG_P2P_INVITATION_REQUEST_T;
1865 typedef struct _MSG_P2P_FUNCTION_SWITCH_T {
1866 MSG_HDR_T rMsgHdr; /* Must be the first member */
1868 } MSG_P2P_FUNCTION_SWITCH_T, *P_MSG_P2P_FUNCTION_SWITCH_T;
1870 typedef struct _MSG_P2P_SERVICE_DISCOVERY_REQUEST_T {
1871 MSG_HDR_T rMsgHdr; /* Must be the first member */
1872 UINT_8 aucDeviceID[MAC_ADDR_LEN];
1873 BOOLEAN fgNeedTxDoneIndicate;
1875 } MSG_P2P_SERVICE_DISCOVERY_REQUEST_T, *P_MSG_P2P_SERVICE_DISCOVERY_REQUEST_T;
1879 /*******************************************************************************
1880 * P U B L I C D A T A
1881 ********************************************************************************
1884 /*******************************************************************************
1885 * P R I V A T E D A T A
1886 ********************************************************************************
1889 /*******************************************************************************
1891 ********************************************************************************
1893 #define p2pChangeMediaState(_prAdapter, _eNewMediaState) \
1894 (_prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX].eConnectionState = (_eNewMediaState));
1896 #define ATTRI_ID(_fp) (((P_P2P_ATTRIBUTE_T) _fp)->ucId)
1897 #define ATTRI_LEN(_fp) \
1898 (((UINT_16) ((PUINT_8)&((P_P2P_ATTRIBUTE_T) _fp)->u2Length)[0]) | \
1899 ((UINT_16) ((PUINT_8)&((P_P2P_ATTRIBUTE_T) _fp)->u2Length)[1] << 8))
1902 #define ATTRI_SIZE(_fp) (P2P_ATTRI_HDR_LEN + ATTRI_LEN(_fp))
1904 #define P2P_ATTRI_FOR_EACH(_pucAttriBuf, _u2AttriBufLen, _u2Offset) \
1905 for ((_u2Offset) = 0; ((_u2Offset) < (_u2AttriBufLen)); \
1906 (_u2Offset) += ATTRI_SIZE(_pucAttriBuf), ((_pucAttriBuf) += ATTRI_SIZE(_pucAttriBuf)) )
1909 #define P2P_IE(_fp) ((P_IE_P2P_T) _fp)
1912 #define WSC_ATTRI_ID(_fp) \
1913 (((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Id)[0] << 8) | \
1914 ((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Id)[1]))
1916 #define WSC_ATTRI_LEN(_fp) \
1917 (((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Length)[0] << 8) | \
1918 ((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Length)[1]))
1921 #define WSC_ATTRI_SIZE(_fp) (WSC_ATTRI_HDR_LEN + WSC_ATTRI_LEN(_fp))
1923 #define WSC_ATTRI_FOR_EACH(_pucAttriBuf, _u2AttriBufLen, _u2Offset) \
1924 for ((_u2Offset) = 0; ((_u2Offset) < (_u2AttriBufLen)); \
1925 (_u2Offset) += WSC_ATTRI_SIZE(_pucAttriBuf), ((_pucAttriBuf) += WSC_ATTRI_SIZE(_pucAttriBuf)) )
1927 #define WSC_IE(_fp) ((P_IE_P2P_T) _fp)
1930 #define WFD_ATTRI_ID(_fp) (((P_WFD_ATTRIBUTE_T) _fp)->ucElemID)
1932 #define WFD_ATTRI_LEN(_fp) \
1933 (((UINT_16) ((PUINT_8)&((P_WFD_ATTRIBUTE_T) _fp)->u2Length)[0] << 8) | \
1934 ((UINT_16) ((PUINT_8)&((P_WFD_ATTRIBUTE_T) _fp)->u2Length)[1]))
1936 #define WFD_ATTRI_SIZE(_fp) (WFD_ATTRI_HDR_LEN + WFD_ATTRI_LEN(_fp))
1938 #define WFD_ATTRI_FOR_EACH(_pucAttriBuf, _u2AttriBufLen, _u2Offset) \
1939 for ((_u2Offset) = 0; ((_u2Offset) < (_u2AttriBufLen)); \
1940 (_u2Offset) += WFD_ATTRI_SIZE(_pucAttriBuf), ((_pucAttriBuf) += WFD_ATTRI_SIZE(_pucAttriBuf)) )
1946 #define ASSERT_BREAK(_exp) \
1955 #define ASSERT_BREAK(_exp)
1959 /*******************************************************************************
1960 * F U N C T I O N D E C L A R A T I O N S
1961 ********************************************************************************
1964 /*======P2P State======*/
1966 p2pStateInit_LISTEN(
1967 IN P_ADAPTER_T prAdapter,
1968 IN P_P2P_FSM_INFO_T prP2pFsmInfo,
1969 IN P_P2P_SPECIFIC_BSS_INFO_T prSP2pBssInfo,
1970 IN UINT_8 ucListenChannel
1974 p2pStateAbort_LISTEN(
1975 IN P_ADAPTER_T prAdapter,
1976 IN BOOLEAN fgIsChannelExtenstion
1980 p2pStateAbort_SEARCH_SCAN(
1981 IN P_ADAPTER_T prAdapter,
1982 IN BOOLEAN fgIsChannelExtenstion
1986 p2pStateAbort_GO_OPERATION(
1987 IN P_ADAPTER_T prAdapter
1991 p2pStateAbort_GC_OPERATION(
1992 IN P_ADAPTER_T prAdapter
1996 p2pStateInit_CONFIGURATION(
1997 IN P_ADAPTER_T prAdapter,
1998 IN P_P2P_FSM_INFO_T prP2pFsmInfo,
1999 IN P_BSS_INFO_T prP2pBssInfo,
2000 IN P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecBssInfo
2004 p2pStateAbort_CONFIGURATION(
2005 IN P_ADAPTER_T prAdapter
2010 IN P_ADAPTER_T prAdapter
2015 IN P_ADAPTER_T prAdapter
2018 /*====== P2P Functions ======*/
2023 IN P_ADAPTER_T prAdapter
2032 IN P_ADAPTER_T prAdapter,
2033 IN P_STA_RECORD_T prStaRec,
2034 IN BOOLEAN fgSendDeauth,
2035 IN UINT_16 u2ReasonCode
2039 p2pFuncSwitchOPMode(
2040 IN P_ADAPTER_T prAdapter,
2041 IN P_BSS_INFO_T prP2pBssInfo,
2042 IN ENUM_OP_MODE_T eOpMode,
2043 IN BOOLEAN fgSyncToFW
2047 p2pFuncRunEventProvisioningComplete(
2048 IN P_ADAPTER_T prAdapter,
2049 IN P_MSG_HDR_T prMsgHdr
2054 IN P_ADAPTER_T prAdapter,
2055 IN PUINT_8 pucGroupID,
2062 p2pFuncSendDeviceDiscoverabilityReqFrame(
2063 IN P_ADAPTER_T prAdapter,
2064 IN UINT_8 aucDestAddr[],
2065 IN UINT_8 ucDialogToken
2069 p2pFuncSendDeviceDiscoverabilityRspFrame(
2070 IN P_ADAPTER_T prAdapter,
2071 IN UINT_8 aucDestAddr[],
2072 IN UINT_8 ucDialogToken
2077 p2pFuncGetVersionNumOfSD(
2078 IN P_ADAPTER_T prAdapter
2081 /*====== P2P FSM ======*/
2083 p2pFsmRunEventConnectionRequest(
2084 IN P_ADAPTER_T prAdapter,
2085 IN P_MSG_HDR_T prMsgHdr
2089 p2pFsmRunEventDeviceDiscoveryRequest(
2090 IN P_ADAPTER_T prAdapter,
2091 IN P_MSG_HDR_T prMsgHdr
2095 p2pFsmRunEventDeviceDiscoveryAbort(
2096 IN P_ADAPTER_T prAdapter,
2097 IN P_MSG_HDR_T prMsgHdr
2101 p2pFsmRunEventRxGroupNegotiationReqFrame(
2102 IN P_ADAPTER_T prAdapter,
2103 IN P_SW_RFB_T prSwRfb
2107 p2pFsmRunEventGroupNegotiationRequestTxDone(
2108 IN P_ADAPTER_T prAdapter,
2109 IN P_MSDU_INFO_T prMsduInfo,
2110 IN ENUM_TX_RESULT_CODE_T rTxDoneStatus
2114 p2pFsmRunEventGroupNegotiationResponseTxDone(
2115 IN P_ADAPTER_T prAdapter,
2116 IN P_MSDU_INFO_T prMsduInfo,
2117 IN ENUM_TX_RESULT_CODE_T rTxDoneStatus
2121 p2pFsmRunEventGroupNegotiationConfirmTxDone(
2122 IN P_ADAPTER_T prAdapter,
2123 IN P_MSDU_INFO_T prMsduInfo,
2124 IN ENUM_TX_RESULT_CODE_T rTxDoneStatus
2128 p2pFsmRunEventProvisionDiscoveryRequestTxDone(
2129 IN P_ADAPTER_T prAdapter,
2130 IN P_MSDU_INFO_T prMsduInfo,
2131 IN ENUM_TX_RESULT_CODE_T rTxDoneStatus
2135 p2pFsmRunEventProvisionDiscoveryResponseTxDone(
2136 IN P_ADAPTER_T prAdapter,
2137 IN P_MSDU_INFO_T prMsduInfo,
2138 IN ENUM_TX_RESULT_CODE_T rTxDoneStatus
2143 p2pFsmRunEventInvitationRequestTxDone (
2144 IN P_ADAPTER_T prAdapter,
2145 IN P_MSDU_INFO_T prMsduInfo,
2146 IN ENUM_TX_RESULT_CODE_T rTxDoneStatus
2152 p2pFsmRunEventRxDeauthentication(
2153 IN P_ADAPTER_T prAdapter,
2154 IN P_STA_RECORD_T prStaRec,
2155 IN P_SW_RFB_T prSwRfb
2159 p2pFsmRunEventRxDisassociation(
2160 IN P_ADAPTER_T prAdapter,
2161 IN P_STA_RECORD_T prStaRec,
2162 IN P_SW_RFB_T prSwRfb
2166 p2pFsmRunEventBeaconTimeout(
2167 IN P_ADAPTER_T prAdapter
2173 p2pFsmRunEventDeauthTxDone(
2174 IN P_ADAPTER_T prAdapter,
2175 IN P_MSDU_INFO_T prMsduInfo,
2176 IN ENUM_TX_RESULT_CODE_T rTxDoneStatus
2184 //////////////////////////////////////////////////////////////////////////
2185 //////////////////////////////////////////////////////////////////////////
2186 //////////////////////////////////////////////////////////////////////////
2187 //////////////////////////////////////////////////////////////////////////
2188 //////////////////////////////////////////////////////////////////////////
2189 //////////////////////////////////////////////////////////////////////////
2190 //////////////////////////////////////////////////////////////////////////
2191 //////////////////////////////////////////////////////////////////////////
2192 //////////////////////////////////////////////////////////////////////////
2193 //////////////////////////////////////////////////////////////////////////
2194 //////////////////////////////////////////////////////////////////////////
2195 /*======Mail Box Event Message=====*/
2199 p2pFsmRunEventConnectionAbort(
2200 IN P_ADAPTER_T prAdapter,
2201 IN P_MSG_HDR_T prMsgHdr
2205 p2pFsmRunEventConnectionTrigger(
2206 IN P_ADAPTER_T prAdapter,
2207 IN P_MSG_HDR_T prMsgHdr
2212 p2pFsmRunEventP2PFunctionSwitch(
2213 IN P_ADAPTER_T prAdapter,
2214 IN P_MSG_HDR_T prMsgHdr
2218 p2pFsmRunEventChGrant(
2219 IN P_ADAPTER_T prAdapter,
2220 IN P_MSG_HDR_T prMsgHdr
2224 p2pFsmRunEventJoinComplete(
2225 IN P_ADAPTER_T prAdapter,
2226 IN P_MSG_HDR_T prMsgHdr
2230 p2pFsmRunEventConnectionPause(
2231 IN P_ADAPTER_T prAdapter,
2232 IN P_MSG_HDR_T prMsgHdr
2236 p2pIndicationOfMediaStateToHost(
2237 IN P_ADAPTER_T prAdapter,
2238 IN ENUM_PARAM_MEDIA_STATE_T eConnectionState,
2239 IN UINT_8 aucTargetAddr[]
2243 p2pUpdateBssInfoForJOIN(
2244 IN P_ADAPTER_T prAdapter,
2245 IN P_STA_RECORD_T prStaRec,
2246 IN P_SW_RFB_T prAssocRspSwRfb
2249 /*======Mail Box Event Message=====*/
2254 IN P_ADAPTER_T prAdapter
2259 IN P_ADAPTER_T prAdapter
2264 IN P_ADAPTER_T prAdapter,
2265 IN ENUM_P2P_STATE_T eNextState
2270 IN P_ADAPTER_T prAdapter
2276 IN PUINT_8 pucSsidLen
2280 p2pFsmRunEventScanDone(
2281 IN P_ADAPTER_T prAdapter,
2282 IN P_MSG_HDR_T prMsgHdr
2286 p2pFsmRunEventIOReqTimeout(
2287 IN P_ADAPTER_T prAdapter,
2292 p2pFsmRunEventSearchPeriodTimeout(
2293 IN P_ADAPTER_T prAdapter,
2298 p2pFsmRunEventFsmTimeout(
2299 IN P_ADAPTER_T prAdapter,
2304 p2pFsmRunEventRejoinTimeout(
2305 IN P_ADAPTER_T prAdapter,
2312 /*=============== P2P Function Related ================*/
2314 /*=============== P2P Function Related ================*/
2317 #if CFG_TEST_WIFI_DIRECT_GO
2320 IN P_ADAPTER_T prAdapter
2322 #endif /* CFG_TEST_WIFI_DIRECT_GO */
2328 p2pGenerateP2P_IEForBeacon(
2329 IN P_ADAPTER_T prAdapter,
2330 IN P_MSDU_INFO_T prMsduInfo
2334 p2pGenerateP2P_IEForAssocReq(
2335 IN P_ADAPTER_T prAdapter,
2336 IN P_MSDU_INFO_T prMsduInfo
2340 p2pGenerateP2P_IEForAssocRsp(
2341 IN P_ADAPTER_T prAdapter,
2342 IN P_MSDU_INFO_T prMsduInfo
2347 p2pGenerateP2P_IEForProbeReq(
2348 IN P_ADAPTER_T prAdapter,
2349 IN PUINT_16 pu2Offset,
2351 IN UINT_16 u2BufSize
2358 p2pCalculateP2P_IELenForBeacon(
2359 IN P_ADAPTER_T prAdapter,
2360 IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex,
2361 IN P_STA_RECORD_T prStaRec
2365 p2pCalculateP2P_IELenForAssocRsp(
2366 IN P_ADAPTER_T prAdapter,
2367 IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex,
2368 IN P_STA_RECORD_T prStaRec
2373 p2pCalculateP2P_IELenForProbeReq(
2374 IN P_ADAPTER_T prAdapter,
2375 IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex,
2376 IN P_STA_RECORD_T prStaRec
2382 p2pGenerateWSC_IEForProbeResp(
2383 IN P_ADAPTER_T prAdapter,
2384 IN P_MSDU_INFO_T prMsduInfo
2388 p2pGenerateWSC_IEForProbeReq(
2389 IN P_ADAPTER_T prAdapter,
2390 IN PUINT_16 pu2Offset,
2392 IN UINT_16 u2BufSize
2398 p2pCalculateWSC_IELenForProbeReq(
2399 IN P_ADAPTER_T prAdapter,
2400 IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex
2404 p2pCalculateWSC_IELenForProbeResp(
2405 IN P_ADAPTER_T prAdapter,
2406 IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex,
2407 IN P_STA_RECORD_T prStaRec
2411 p2pAppendAttriStatus(
2412 IN P_ADAPTER_T prAdapter,
2413 IN BOOLEAN fgIsAssocFrame,
2414 IN PUINT_16 pu2Offset,
2416 IN UINT_16 u2BufSize
2422 p2pAppendAttriCapability(
2423 IN P_ADAPTER_T prAdapter,
2424 IN BOOLEAN fgIsAssocFrame,
2425 IN PUINT_16 pu2Offset,
2427 IN UINT_16 u2BufSize
2431 p2pAppendAttriGoIntent(
2432 IN P_ADAPTER_T prAdapter,
2433 IN BOOLEAN fgIsAssocFrame,
2434 IN PUINT_16 pu2Offset,
2436 IN UINT_16 u2BufSize
2440 p2pAppendAttriCfgTimeout(
2441 IN P_ADAPTER_T prAdapter,
2442 IN BOOLEAN fgIsAssocFrame,
2443 IN PUINT_16 pu2Offset,
2445 IN UINT_16 u2BufSize
2449 p2pAppendAttriGroupBssid(
2450 IN P_ADAPTER_T prAdapter,
2451 IN BOOLEAN fgIsAssocFrame,
2452 IN PUINT_16 pu2Offset,
2454 IN UINT_16 u2BufSize
2459 p2pAppendAttriDeviceIDForBeacon(
2460 IN P_ADAPTER_T prAdapter,
2461 IN BOOLEAN fgIsAssocFrame,
2462 IN PUINT_16 pu2Offset,
2464 IN UINT_16 u2BufSize
2468 p2pAppendAttriDeviceIDForProbeReq(
2469 IN P_ADAPTER_T prAdapter,
2470 IN BOOLEAN fgIsAssocFrame,
2471 IN PUINT_16 pu2Offset,
2473 IN UINT_16 u2BufSize
2477 p2pAppendAttriDeviceIDForDeviceDiscoveryReq(
2478 IN P_ADAPTER_T prAdapter,
2479 IN BOOLEAN fgIsAssocFrame,
2480 IN PUINT_16 pu2Offset,
2482 IN UINT_16 u2BufSize
2486 p2pAppendAttriListenChannel(
2487 IN P_ADAPTER_T prAdapter,
2488 IN BOOLEAN fgIsAssocFrame,
2489 IN PUINT_16 pu2Offset,
2491 IN UINT_16 u2BufSize
2495 p2pAppendAttriIntendP2pIfAddr(
2496 IN P_ADAPTER_T prAdapter,
2497 IN BOOLEAN fgIsAssocFrame,
2498 IN PUINT_16 pu2Offset,
2500 IN UINT_16 u2BufSize
2505 p2pAppendAttriChannelList(
2506 IN P_ADAPTER_T prAdapter,
2507 IN BOOLEAN fgIsAssocFrame,
2508 IN PUINT_16 pu2Offset,
2510 IN UINT_16 u2BufSize
2514 p2pCalculateAttriLenChannelList(
2515 IN P_ADAPTER_T prAdapter,
2516 IN P_STA_RECORD_T prStaRec
2521 IN P_ADAPTER_T prAdapter,
2522 IN BOOLEAN fgIsAssocFrame,
2523 IN PUINT_16 pu2Offset,
2525 IN UINT_16 u2BufSize
2529 p2pAppendAttriDeviceInfo(
2530 IN P_ADAPTER_T prAdapter,
2531 IN BOOLEAN fgIsAssocFrame,
2532 IN PUINT_16 pu2Offset,
2534 IN UINT_16 u2BufSize
2538 p2pCalculateAttriLenDeviceInfo(
2539 IN P_ADAPTER_T prAdapter,
2540 IN P_STA_RECORD_T prStaRec
2544 p2pAppendAttriGroupInfo(
2545 IN P_ADAPTER_T prAdapter,
2546 IN BOOLEAN fgIsAssocFrame,
2547 IN PUINT_16 pu2Offset,
2549 IN UINT_16 u2BufSize
2553 p2pCalculateAttriLenGroupInfo(
2554 IN P_ADAPTER_T prAdapter,
2555 IN P_STA_RECORD_T prStaRec
2560 p2pAppendAttriP2pGroupID(
2561 IN P_ADAPTER_T prAdapter,
2562 IN BOOLEAN fgIsAssocFrame,
2563 IN PUINT_16 pu2Offset,
2565 IN UINT_16 u2BufSize
2569 p2pAppendAttriOperatingChannel(
2570 IN P_ADAPTER_T prAdapter,
2571 IN BOOLEAN fgIsAssocFrame,
2572 IN PUINT_16 pu2Offset,
2574 IN UINT_16 u2BufSize
2578 p2pAppendAttriInvitationFlag(
2579 IN P_ADAPTER_T prAdapter,
2580 IN BOOLEAN fgIsAssocFrame,
2581 IN PUINT_16 pu2Offset,
2583 IN UINT_16 u2BufSize
2589 IN P_ADAPTER_T prAdapter,
2590 IN UINT_8 ucOuiType,
2591 IN BOOLEAN fgIsAssocFrame,
2592 IN PUINT_16 pu2Offset,
2594 IN UINT_16 u2BufSize,
2595 IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[],
2596 IN UINT_32 u4AttriTableSize
2600 p2pAppendAttriWSCConfigMethod (
2601 IN P_ADAPTER_T prAdapter,
2602 IN BOOLEAN fgIsAssocFrame,
2603 IN PUINT_16 pu2Offset,
2605 IN UINT_16 u2BufSize
2609 p2pAppendAttriWSCVersion (
2610 IN P_ADAPTER_T prAdapter,
2611 IN BOOLEAN fgIsAssocFrame,
2612 IN PUINT_16 pu2Offset,
2614 IN UINT_16 u2BufSize
2618 p2pAppendAttriWSCGONegReqDevPasswordId (
2619 IN P_ADAPTER_T prAdapter,
2620 IN BOOLEAN fgIsAssocFrame,
2621 IN PUINT_16 pu2Offset,
2623 IN UINT_16 u2BufSize
2627 p2pAppendAttriWSCGONegRspDevPasswordId (
2628 IN P_ADAPTER_T prAdapter,
2629 IN BOOLEAN fgIsAssocFrame,
2630 IN PUINT_16 pu2Offset,
2632 IN UINT_16 u2BufSize
2637 IN P_ADAPTER_T prAdapter,
2638 IN UINT_8 ucOuiType,
2640 IN UINT_16 u2IELength,
2641 OUT PPUINT_8 ppucAttriList,
2642 OUT PUINT_16 pu2AttriListLen
2647 IN P_ADAPTER_T prAdapter,
2648 IN UINT_8 ucOuiType,
2650 IN UINT_16 u2IELength,
2651 OUT PPUINT_8 ppucAttriList,
2652 OUT PUINT_16 pu2AttriListLen
2656 p2pRunEventAAATxFail (
2657 IN P_ADAPTER_T prAdapter,
2658 IN P_STA_RECORD_T prStaRec
2662 p2pRunEventAAASuccess (
2663 IN P_ADAPTER_T prAdapter,
2664 IN P_STA_RECORD_T prStaRec
2669 p2pRunEventAAAComplete (
2670 IN P_ADAPTER_T prAdapter,
2671 IN P_STA_RECORD_T prStaRec
2675 p2pSendProbeResponseFrame(
2676 IN P_ADAPTER_T prAdapter,
2677 IN P_SW_RFB_T prSwRfb
2681 p2pFsmRunEventRxProbeRequestFrame(
2682 IN P_ADAPTER_T prAdapter,
2683 IN P_SW_RFB_T prSwRfb
2687 p2pFsmRunEventRxProbeResponseFrame(
2688 IN P_ADAPTER_T prAdapter,
2689 IN P_SW_RFB_T prSwRfb,
2690 IN P_BSS_DESC_T prBssDesc
2694 p2pRxPublicActionFrame(
2695 IN P_ADAPTER_T prAdapter,
2696 IN P_SW_RFB_T prSwRfb
2701 IN P_ADAPTER_T prAdapter,
2702 IN P_SW_RFB_T prSwRfb
2706 p2pFsmRunEventRxGroupNegotiationRspFrame(
2707 IN P_ADAPTER_T prAdapter,
2708 IN P_SW_RFB_T prSwRfb
2712 p2pFsmRunEventRxGroupNegotiationCfmFrame(
2713 IN P_ADAPTER_T prAdapter,
2714 IN P_SW_RFB_T prSwRfb
2720 scanMatchFilterOfP2P (
2721 IN P_SW_RFB_T prSWRfb,
2722 IN PP_BSS_DESC_T pprBssDesc
2727 p2pProcessEvent_UpdateNOAParam (
2728 IN P_ADAPTER_T prAdapter,
2729 UINT_8 ucNetTypeIndex,
2730 P_EVENT_UPDATE_NOA_PARAMS_T prEventUpdateNoaParam
2734 p2pFuncCompleteIOCTL(
2735 IN P_ADAPTER_T prAdapter,
2736 IN WLAN_STATUS rWlanStatus
2739 /*******************************************************************************
2741 ********************************************************************************
2744 /* Kevin: we don't have to call following function to inspect the data structure.
2745 * It will check automatically while at compile time.
2746 * We'll need this for porting driver to different RTOS.
2753 DATA_STRUC_INSPECTING_ASSERT(sizeof(IE_P2P_T) == (2+4+1)); // all UINT_8
2754 DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRIBUTE_T) == (3+1));
2755 DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_STATUS_T) == (3+1));
2756 DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_REASON_T) == (3+1));
2757 DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_CAPABILITY_T) == (3+2));
2758 DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_DEV_ID_T) == (3+6));
2759 DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GO_INTENT_T) == (3+1));
2760 DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_CFG_TIMEOUT_T) == (3+2));
2762 DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_LISTEN_CHANNEL_T) == (3+5));
2764 DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_LISTEN_CHANNEL_T) == (3+5));
2766 DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GROUP_BSSID_T) == (3+6));
2767 DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_EXT_LISTEN_TIMING_T) == (3+4));
2768 DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_INTENDED_IF_ADDR_T) == (3+6));
2769 DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_MANAGEABILITY_T) == (3+1));
2771 DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_CHANNEL_T) == (3+4));
2772 DATA_STRUC_INSPECTING_ASSERT(sizeof(CHANNEL_ENTRY_FIELD_T) == 3);
2773 DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_NOA_T) == (3+3));
2774 DATA_STRUC_INSPECTING_ASSERT(sizeof(NOA_DESCRIPTOR_T) == 13);
2775 DATA_STRUC_INSPECTING_ASSERT(sizeof(DEVICE_TYPE_T) == 8);
2776 DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_DEV_INFO_T) == (3+6+2+8+1+8));
2777 DATA_STRUC_INSPECTING_ASSERT(sizeof(DEVICE_NAME_TLV_T) == (4+32));
2778 DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_CLIENT_INFO_DESC_T) == (1+6+6+1+2+8+1+8));
2779 DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GROUP_INFO_T) == (3+(1+6+6+1+2+8+1+8)));
2780 DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GROUP_ID_T) == (3+38));
2781 DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_INTERFACE_T) == (3+13));
2783 DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_OPERATING_CHANNEL_T) == (3+5));
2785 DATA_STRUC_INSPECTING_ASSERT(sizeof(P2P_ATTRI_OPERATING_CHANNEL_T) == (3+5));
2793 #endif /* _P2P_FSM_H */