import PULS_20160108
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / misc / mediatek / connectivity / combo / drv_wlan / mt6620 / wlan / mgmt / p2p_state.c
CommitLineData
6fa3eb70
S
1#include "p2p_precomp.h"
2
3
4BOOLEAN
5p2pStateInit_IDLE(IN P_ADAPTER_T prAdapter,
6 IN P_P2P_FSM_INFO_T prP2pFsmInfo,
7 IN P_BSS_INFO_T prP2pBssInfo, OUT P_ENUM_P2P_STATE_T peNextState)
8{
9 BOOLEAN fgIsTransOut = FALSE;
10/* P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T)NULL; */
11
12 do {
13 ASSERT_BREAK((prAdapter != NULL) &&
14 (prP2pFsmInfo != NULL) &&
15 (prP2pBssInfo != NULL) && (peNextState != NULL));
16
17 if ((prP2pBssInfo->eIntendOPMode == OP_MODE_ACCESS_POINT)
18 && IS_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX)) {
19 P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo);
20
21 fgIsTransOut = TRUE;
22 prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_GO_START_BSS;
23 *peNextState = P2P_STATE_REQING_CHANNEL;
24
25 } else {
26#if 0
27 else
28 if (IS_NET_PWR_STATE_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX)) {
29
30 ASSERT((prP2pBssInfo->eCurrentOPMode == OP_MODE_ACCESS_POINT) ||
31 (prP2pBssInfo->eCurrentOPMode == OP_MODE_INFRASTRUCTURE));
32
33 prChnlReqInfo = &prP2pFsmInfo->rChnlReqInfo;
34
35 if (prChnlReqInfo->fgIsChannelRequested) {
36 /* Start a timer for return channel. */
37 DBGLOG(P2P, TRACE, ("start a GO channel timer.\n"));
38 }
39
40 }
41#endif
42 cnmTimerStartTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer), 5000);
43 }
44
45 } while (FALSE);
46
47 return fgIsTransOut;
48} /* p2pStateInit_IDLE */
49
50
51VOID
52p2pStateAbort_IDLE(IN P_ADAPTER_T prAdapter,
53 IN P_P2P_FSM_INFO_T prP2pFsmInfo, IN ENUM_P2P_STATE_T eNextState)
54{
55
56 P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T) NULL;
57
58 do {
59 ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL));
60
61 prChnlReqInfo = &prP2pFsmInfo->rChnlReqInfo;
62
63
64 if (prChnlReqInfo->fgIsChannelRequested) {
65 /* Release channel before timeout. */
66 p2pFuncReleaseCh(prAdapter, prChnlReqInfo);
67 }
68
69
70 /* Stop timer for leaving this state. */
71 cnmTimerStopTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer));
72
73 } while (FALSE);
74
75 return;
76} /* p2pStateAbort_IDLE */
77
78
79
80VOID
81p2pStateInit_CHNL_ON_HAND(IN P_ADAPTER_T prAdapter,
82 IN P_BSS_INFO_T prP2pBssInfo, IN P_P2P_FSM_INFO_T prP2pFsmInfo)
83{
84 P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T) NULL;
85
86 do {
87 ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL));
88
89 prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo);
90
91 /* Store the original channel info. */
92 prChnlReqInfo->ucOriChnlNum = prP2pBssInfo->ucPrimaryChannel;
93 prChnlReqInfo->eOriBand = prP2pBssInfo->eBand;
94 prChnlReqInfo->eOriChnlSco = prP2pBssInfo->eBssSCO;
95
96 /* RX Probe Request would check primary channel. */
97 prP2pBssInfo->ucPrimaryChannel = prChnlReqInfo->ucReqChnlNum;
98 prP2pBssInfo->eBand = prChnlReqInfo->eBand;
99 prP2pBssInfo->eBssSCO = prChnlReqInfo->eChnlSco;
100
101
102 DBGLOG(P2P, TRACE, ("start a channel on hand timer.\n"));
103 cnmTimerStartTimer(prAdapter,
104 &(prP2pFsmInfo->rP2pFsmTimeoutTimer),
105 prChnlReqInfo->u4MaxInterval);
106
107 kalP2PIndicateChannelReady(prAdapter->prGlueInfo,
108 prChnlReqInfo->u8Cookie,
109 prChnlReqInfo->ucReqChnlNum,
110 prChnlReqInfo->eBand,
111 prChnlReqInfo->eChnlSco, prChnlReqInfo->u4MaxInterval);
112
113 } while (FALSE);
114
115 return;
116} /* p2pStateInit_CHNL_ON_HAND */
117
118
119VOID
120p2pStateAbort_CHNL_ON_HAND(IN P_ADAPTER_T prAdapter,
121 IN P_P2P_FSM_INFO_T prP2pFsmInfo,
122 IN P_BSS_INFO_T prP2pBssInfo, IN ENUM_P2P_STATE_T eNextState)
123{
124 P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T) NULL;
125
126
127 do {
128 ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL));
129
130 prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo);
131
132 cnmTimerStopTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer));
133
134 /* Restore the original channel info. */
135 prP2pBssInfo->ucPrimaryChannel = prChnlReqInfo->ucOriChnlNum;
136 prP2pBssInfo->eBand = prChnlReqInfo->eOriBand;
137 prP2pBssInfo->eBssSCO = prChnlReqInfo->eOriChnlSco;
138
139 if (eNextState != P2P_STATE_CHNL_ON_HAND) {
140 /* Indicate channel return. */
141 kalP2PIndicateChannelExpired(prAdapter->prGlueInfo,
142 &prP2pFsmInfo->rChnlReqInfo);
143
144 /* Return Channel. */
145 p2pFuncReleaseCh(prAdapter, &(prP2pFsmInfo->rChnlReqInfo));
146 }
147
148 } while (FALSE);
149 return;
150} /* p2pStateAbort_CHNL_ON_HAND */
151
152
153VOID
154p2pStateAbort_REQING_CHANNEL(IN P_ADAPTER_T prAdapter,
155 IN P_P2P_FSM_INFO_T prP2pFsmInfo, IN ENUM_P2P_STATE_T eNextState)
156{
157 P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T) NULL;
158 P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo = (P_P2P_SPECIFIC_BSS_INFO_T) NULL;
159
160 do {
161
162 ASSERT_BREAK((prAdapter != NULL) &&
163 (prP2pFsmInfo != NULL) && (eNextState < P2P_STATE_NUM));
164
165 prP2pBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]);
166 prP2pSpecificBssInfo = prAdapter->rWifiVar.prP2pSpecificBssInfo;
167
168 if (eNextState == P2P_STATE_IDLE) {
169 if (prP2pBssInfo->eIntendOPMode == OP_MODE_ACCESS_POINT) {
170 /* Intend to be AP. */
171 /* Setup for AP mode. */
172 p2pFuncStartGO(prAdapter,
173 prP2pBssInfo,
174 prP2pSpecificBssInfo->aucGroupSsid,
175 prP2pSpecificBssInfo->u2GroupSsidLen,
176 prP2pSpecificBssInfo->ucPreferredChannel,
177 prP2pSpecificBssInfo->eRfBand,
178 prP2pSpecificBssInfo->eRfSco,
179 prP2pFsmInfo->fgIsApMode);
180
181 } else {
182 /* Return Channel. */
183 p2pFuncReleaseCh(prAdapter, &(prP2pFsmInfo->rChnlReqInfo));
184 }
185
186 }
187
188
189 } while (FALSE);
190
191 return;
192} /* p2pStateInit_AP_CHANNEL_DETECT */
193
194
195VOID p2pStateInit_AP_CHANNEL_DETECT(IN P_ADAPTER_T prAdapter, IN P_P2P_FSM_INFO_T prP2pFsmInfo)
196{
197 P_P2P_SCAN_REQ_INFO_T prScanReqInfo = (P_P2P_SCAN_REQ_INFO_T) NULL;
198
199 do {
200 ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL));
201
202 prScanReqInfo = &(prP2pFsmInfo->rScanReqInfo);
203
204 prScanReqInfo->eScanType = SCAN_TYPE_PASSIVE_SCAN;
205 prScanReqInfo->eChannelSet = SCAN_CHANNEL_2G4;
206 prScanReqInfo->u2PassiveDewellTime = 50; /* 50ms for passive channel load detection */
207 prScanReqInfo->fgIsAbort = TRUE;
208 prScanReqInfo->fgIsScanRequest = TRUE;
209 prScanReqInfo->ucNumChannelList = 0;
210 prScanReqInfo->u4BufLength = 0;
211 prScanReqInfo->rSsidStruct.ucSsidLen = 0;
212
213 p2pFuncRequestScan(prAdapter, prScanReqInfo);
214
215 } while (FALSE);
216
217 return;
218} /* p2pStateInit_AP_CHANNEL_DETECT */
219
220
221
222VOID
223p2pStateAbort_AP_CHANNEL_DETECT(IN P_ADAPTER_T prAdapter,
224 IN P_P2P_FSM_INFO_T prP2pFsmInfo,
225 IN P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecificBssInfo,
226 IN ENUM_P2P_STATE_T eNextState)
227{
228 P_P2P_CHNL_REQ_INFO_T prChnlReqInfo = (P_P2P_CHNL_REQ_INFO_T) NULL;
229 P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T) NULL;
230
231 do {
232
233 if (eNextState == P2P_STATE_REQING_CHANNEL) {
234 UINT_8 ucPreferedChnl = 0;
235 ENUM_BAND_T eBand = BAND_NULL;
236 ENUM_CHNL_EXT_T eSco = CHNL_EXT_SCN;
237
238 prChnlReqInfo = &(prP2pFsmInfo->rChnlReqInfo);
239
240 /* Determine the channel for AP. */
241 if (cnmPreferredChannel(prAdapter, &eBand, &ucPreferedChnl, &eSco) == FALSE) {
242
243 prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings;
244
245 if ((ucPreferedChnl = prP2pConnSettings->ucOperatingChnl) == 0) {
246
247 if (scnQuerySparseChannel
248 (prAdapter, &eBand, &ucPreferedChnl) == FALSE) {
249
250 /* What to do? */
251 ASSERT(FALSE);
252 /* TODO: Pick up a valid channel from channel list. */
253 ucPreferedChnl = 1;
254 eBand = BAND_2G4;
255 }
256 }
257 }
258
259
260 prChnlReqInfo->eChannelReqType = CHANNEL_REQ_TYPE_GO_START_BSS;
261 prChnlReqInfo->ucReqChnlNum = prP2pSpecificBssInfo->ucPreferredChannel =
262 ucPreferedChnl;
263 prChnlReqInfo->eBand = prP2pSpecificBssInfo->eRfBand = eBand;
264 prChnlReqInfo->eChnlSco = prP2pSpecificBssInfo->eRfSco = eSco;
265 } else {
266 p2pFuncCancelScan(prAdapter, &(prP2pFsmInfo->rScanReqInfo));
267 }
268
269
270 } while (FALSE);
271
272 return;
273} /* p2pStateAbort_AP_CHANNEL_DETECT */
274
275
276VOID p2pStateInit_SCAN(IN P_ADAPTER_T prAdapter, IN P_P2P_FSM_INFO_T prP2pFsmInfo)
277{
278 P_P2P_SCAN_REQ_INFO_T prScanReqInfo = (P_P2P_SCAN_REQ_INFO_T) NULL;
279
280 do {
281
282 ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL));
283
284 prScanReqInfo = &prP2pFsmInfo->rScanReqInfo;
285
286 prScanReqInfo->fgIsScanRequest = TRUE;
287
288 p2pFuncRequestScan(prAdapter, prScanReqInfo);
289
290 } while (FALSE);
291 return;
292} /* p2pStateInit_SCAN */
293
294
295VOID
296p2pStateAbort_SCAN(IN P_ADAPTER_T prAdapter,
297 IN P_P2P_FSM_INFO_T prP2pFsmInfo, IN ENUM_P2P_STATE_T eNextState)
298{
299 do {
300 ASSERT_BREAK(prAdapter != NULL);
301
302 /* 1. Scan cancel. (Make sure the scan request is invalid. */
303 p2pFuncCancelScan(prAdapter, &(prP2pFsmInfo->rScanReqInfo));
304
305 /* Scan done indication. */
306 kalP2PIndicateScanDone(prAdapter->prGlueInfo, prP2pFsmInfo->rScanReqInfo.fgIsAbort);
307 } while (FALSE);
308
309 return;
310} /* p2pStateAbort_SCAN */
311
312
313VOID
314p2pStateInit_GC_JOIN(IN P_ADAPTER_T prAdapter,
315 IN P_P2P_FSM_INFO_T prP2pFsmInfo,
316 IN P_BSS_INFO_T prP2pBssInfo,
317 IN P_P2P_JOIN_INFO_T prJoinInfo, IN P_BSS_DESC_T prBssDesc)
318{
319 P_MSG_JOIN_REQ_T prJoinReqMsg = (P_MSG_JOIN_REQ_T) NULL;
320 P_STA_RECORD_T prStaRec = (P_STA_RECORD_T) NULL;
321 P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings = (P_P2P_CONNECTION_SETTINGS_T) NULL;
322
323 do {
324 ASSERT_BREAK((prAdapter != NULL) &&
325 (prP2pFsmInfo != NULL) &&
326 (prP2pBssInfo != NULL) && (prJoinInfo != NULL) && (prBssDesc != NULL));
327
328 prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings;
329
330 if (prBssDesc->ucSSIDLen) {
331 COPY_SSID(prP2pConnSettings->aucSSID,
332 prP2pConnSettings->ucSSIDLen,
333 prBssDesc->aucSSID, prBssDesc->ucSSIDLen);
334 }
335
336 /* Setup a join timer. */
337 DBGLOG(P2P, TRACE, ("Start a join init timer\n"));
338 cnmTimerStartTimer(prAdapter,
339 &(prP2pFsmInfo->rP2pFsmTimeoutTimer),
340 (prP2pFsmInfo->u4GrantInterval - AIS_JOIN_CH_GRANT_THRESHOLD));
341
342 /* 2 <1> We are goin to connect to this BSS */
343 prBssDesc->fgIsConnecting = TRUE;
344
345 /* 2 <2> Setup corresponding STA_RECORD_T */
346 prStaRec = bssCreateStaRecFromBssDesc(prAdapter,
347 (prBssDesc->
348 fgIsP2PPresent ? (STA_TYPE_P2P_GO)
349 : (STA_TYPE_LEGACY_AP)),
350 NETWORK_TYPE_P2P_INDEX, prBssDesc);
351
352 if (prStaRec == NULL) {
353 DBGLOG(P2P, TRACE, ("Create station record fail\n"));
354 break;
355 }
356
357
358 prJoinInfo->prTargetStaRec = prStaRec;
359 prJoinInfo->fgIsJoinComplete = FALSE;
360 prJoinInfo->u4BufLength = 0;
361
362 /* 2 <2.1> Sync. to FW domain */
363 cnmStaRecChangeState(prAdapter, prStaRec, STA_STATE_1);
364
365
366 if (prP2pBssInfo->eConnectionState == PARAM_MEDIA_STATE_DISCONNECTED) {
367 P_P2P_CONNECTION_SETTINGS_T prP2pConnSettings =
368 (P_P2P_CONNECTION_SETTINGS_T) NULL;
369
370 prStaRec->fgIsReAssoc = FALSE;
371
372 prP2pConnSettings = prAdapter->rWifiVar.prP2PConnSettings;
373
374 switch (prP2pConnSettings->eAuthMode) {
375 case AUTH_MODE_OPEN: /* Note: Omit break here. */
376 case AUTH_MODE_WPA:
377 case AUTH_MODE_WPA_PSK:
378 case AUTH_MODE_WPA2:
379 case AUTH_MODE_WPA2_PSK:
380 prJoinInfo->ucAvailableAuthTypes = (UINT_8) AUTH_TYPE_OPEN_SYSTEM;
381 break;
382 case AUTH_MODE_SHARED:
383 prJoinInfo->ucAvailableAuthTypes = (UINT_8) AUTH_TYPE_SHARED_KEY;
384 break;
385 case AUTH_MODE_AUTO_SWITCH:
386 DBGLOG(P2P, LOUD,
387 ("JOIN INIT: eAuthMode == AUTH_MODE_AUTO_SWITCH\n"));
388 prJoinInfo->ucAvailableAuthTypes =
389 (UINT_8) (AUTH_TYPE_OPEN_SYSTEM | AUTH_TYPE_SHARED_KEY);
390 break;
391 default:
392 ASSERT(!(prP2pConnSettings->eAuthMode == AUTH_MODE_WPA_NONE));
393 DBGLOG(P2P, ERROR,
394 ("JOIN INIT: Auth Algorithm : %d was not supported by JOIN\n",
395 prP2pConnSettings->eAuthMode));
396 /* TODO(Kevin): error handling ? */
397 return;
398 }
399 prStaRec->ucTxAuthAssocRetryLimit = TX_AUTH_ASSOCI_RETRY_LIMIT;
400 } else {
401 ASSERT(FALSE);
402 /* TODO: Shall we considering ROAMIN case for P2P Device?. */
403 }
404
405
406 /* 2 <4> Use an appropriate Authentication Algorithm Number among the ucAvailableAuthTypes. */
407 if (prJoinInfo->ucAvailableAuthTypes & (UINT_8) AUTH_TYPE_OPEN_SYSTEM) {
408
409 DBGLOG(P2P, TRACE,
410 ("JOIN INIT: Try to do Authentication with AuthType == OPEN_SYSTEM.\n"));
411
412 prJoinInfo->ucAvailableAuthTypes &= ~(UINT_8) AUTH_TYPE_OPEN_SYSTEM;
413
414 prStaRec->ucAuthAlgNum = (UINT_8) AUTH_ALGORITHM_NUM_OPEN_SYSTEM;
415 } else if (prJoinInfo->ucAvailableAuthTypes & (UINT_8) AUTH_TYPE_SHARED_KEY) {
416
417 DBGLOG(P2P, TRACE,
418 ("JOIN INIT: Try to do Authentication with AuthType == SHARED_KEY.\n"));
419
420 prJoinInfo->ucAvailableAuthTypes &= ~(UINT_8) AUTH_TYPE_SHARED_KEY;
421
422 prStaRec->ucAuthAlgNum = (UINT_8) AUTH_ALGORITHM_NUM_SHARED_KEY;
423 } else if (prJoinInfo->ucAvailableAuthTypes &
424 (UINT_8) AUTH_TYPE_FAST_BSS_TRANSITION) {
425
426 DBGLOG(P2P, TRACE,
427 ("JOIN INIT: Try to do Authentication with AuthType == FAST_BSS_TRANSITION.\n"));
428
429 prJoinInfo->ucAvailableAuthTypes &= ~(UINT_8) AUTH_TYPE_FAST_BSS_TRANSITION;
430
431 prStaRec->ucAuthAlgNum = (UINT_8) AUTH_ALGORITHM_NUM_FAST_BSS_TRANSITION;
432 } else {
433 ASSERT(0);
434 }
435
436
437 /* 4 <5> Overwrite Connection Setting for eConnectionPolicy == ANY (Used by Assoc Req) */
438 if (prBssDesc->ucSSIDLen) {
439 COPY_SSID(prJoinInfo->rSsidStruct.aucSsid,
440 prJoinInfo->rSsidStruct.ucSsidLen,
441 prBssDesc->aucSSID, prBssDesc->ucSSIDLen);
442 }
443 /* 2 <5> Backup desired channel. */
444
445 /* 2 <6> Send a Msg to trigger SAA to start JOIN process. */
446 prJoinReqMsg =
447 (P_MSG_JOIN_REQ_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_JOIN_REQ_T));
448
449 if (!prJoinReqMsg) {
450 DBGLOG(P2P, TRACE, ("Allocation Join Message Fail\n"));
451 ASSERT(FALSE);
452 return;
453 }
454
455 prJoinReqMsg->rMsgHdr.eMsgId = MID_P2P_SAA_FSM_START;
456 prJoinReqMsg->ucSeqNum = ++prJoinInfo->ucSeqNumOfReqMsg;
457 prJoinReqMsg->prStaRec = prStaRec;
458
459 /* TODO: Consider fragmentation info in station record. */
460
461 mboxSendMsg(prAdapter, MBOX_ID_0, (P_MSG_HDR_T) prJoinReqMsg, MSG_SEND_METHOD_BUF);
462
463
464
465
466 } while (FALSE);
467
468 return;
469} /* p2pStateInit_GC_JOIN */
470
471
472
473/*----------------------------------------------------------------------------*/
474/*!
475* @brief Process of JOIN Abort. Leave JOIN State & Abort JOIN.
476*
477* @param (none)
478*
479* @return (none)
480*/
481/*----------------------------------------------------------------------------*/
482VOID
483p2pStateAbort_GC_JOIN(IN P_ADAPTER_T prAdapter,
484 IN P_P2P_FSM_INFO_T prP2pFsmInfo,
485 IN P_P2P_JOIN_INFO_T prJoinInfo, IN ENUM_P2P_STATE_T eNextState)
486{
487 P_MSG_JOIN_ABORT_T prJoinAbortMsg = (P_MSG_JOIN_ABORT_T) NULL;
488
489
490 do {
491 ASSERT_BREAK((prAdapter != NULL) && (prP2pFsmInfo != NULL) && (prJoinInfo != NULL));
492
493 if (prJoinInfo->fgIsJoinComplete == FALSE) {
494
495 prJoinAbortMsg =
496 (P_MSG_JOIN_ABORT_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG,
497 sizeof(MSG_JOIN_ABORT_T));
498 if (!prJoinAbortMsg) {
499 DBGLOG(P2P, TRACE,
500 ("Fail to allocate join abort message buffer\n"));
501 ASSERT(FALSE);
502 return;
503 }
504
505 prJoinAbortMsg->rMsgHdr.eMsgId = MID_P2P_SAA_FSM_ABORT;
506 prJoinAbortMsg->ucSeqNum = prJoinInfo->ucSeqNumOfReqMsg;
507 prJoinAbortMsg->prStaRec = prJoinInfo->prTargetStaRec;
508
509 mboxSendMsg(prAdapter,
510 MBOX_ID_0, (P_MSG_HDR_T) prJoinAbortMsg, MSG_SEND_METHOD_BUF);
511
512 }
513
514 /* Stop Join Timer. */
515 cnmTimerStopTimer(prAdapter, &(prP2pFsmInfo->rP2pFsmTimeoutTimer));
516
517 /* Release channel requested. */
518 p2pFuncReleaseCh(prAdapter, &(prP2pFsmInfo->rChnlReqInfo));
519
520 } while (FALSE);
521
522 return;
523
524} /* p2pStateAbort_GC_JOIN */