BOOLEAN p2pDevStateInit_REQING_CHANNEL ( IN P_ADAPTER_T prAdapter, IN UINT_8 ucBssIdx, IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo, OUT P_ENUM_P2P_DEV_STATE_T peNextState ) { BOOLEAN fgIsTransition = FALSE; P_MSG_P2P_CHNL_REQUEST_T prP2pMsgChnlReq = (P_MSG_P2P_CHNL_REQUEST_T)NULL; do { ASSERT_BREAK((prAdapter != NULL) && (prChnlReqInfo != NULL) && (peNextState != NULL)); if (LINK_IS_EMPTY(&(prChnlReqInfo->rP2pChnlReqLink))) { /* NO Channel Request Pending. */ DBGLOG(P2P, ERROR, ("NO Pending Channel Request, but enter Req Channel State\n")); fgIsTransition = TRUE; *peNextState = P2P_DEV_STATE_IDLE; break; } LINK_REMOVE_HEAD(&(prChnlReqInfo->rP2pChnlReqLink), prP2pMsgChnlReq, P_MSG_P2P_CHNL_REQUEST_T); ASSERT(prP2pMsgChnlReq); prChnlReqInfo->u4MaxInterval = prP2pMsgChnlReq->u4Duration; prChnlReqInfo->ucReqChnlNum = prP2pMsgChnlReq->rChannelInfo.ucChannelNum; prChnlReqInfo->eChnlSco = prP2pMsgChnlReq->eChnlSco; prChnlReqInfo->eBand = prP2pMsgChnlReq->rChannelInfo.eBand; prChnlReqInfo->u8Cookie = prP2pMsgChnlReq->u8Cookie; prChnlReqInfo->eChnlReqType = prP2pMsgChnlReq->eChnlReqType; prChnlReqInfo->eChannelWidth = CW_20_40MHZ; prChnlReqInfo->ucCenterFreqS1 = 0; prChnlReqInfo->ucCenterFreqS2 = 0; p2pFuncAcquireCh(prAdapter, ucBssIdx, prChnlReqInfo); } while (FALSE); if (prP2pMsgChnlReq) { cnmMemFree(prAdapter, prP2pMsgChnlReq); } return fgIsTransition; } /* p2pDevStateInit_REQING_CHANNEL */
BOOLEAN p2pDevStateInit_OFF_CHNL_TX(IN P_ADAPTER_T prAdapter, IN P_P2P_DEV_FSM_INFO_T prP2pDevFsmInfo, IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo, IN P_P2P_MGMT_TX_REQ_INFO_T prP2pMgmtTxInfo, OUT P_ENUM_P2P_DEV_STATE_T peNextState) { P_P2P_OFF_CHNL_TX_REQ_INFO_T prP2pOffChnlTxPkt = (P_P2P_OFF_CHNL_TX_REQ_INFO_T) NULL; BOOLEAN fgIsTransition = FALSE; do { ASSERT_BREAK((prAdapter != NULL) && (prP2pMgmtTxInfo != NULL) && (peNextState != NULL)); if (!LINK_IS_EMPTY(&(prP2pMgmtTxInfo->rP2pTxReqLink))) { prP2pOffChnlTxPkt = LINK_PEEK_HEAD(&(prP2pMgmtTxInfo->rP2pTxReqLink), P2P_OFF_CHNL_TX_REQ_INFO_T, rLinkEntry); if (prP2pOffChnlTxPkt == NULL) { DBGLOG(P2P, ERROR, ("Fetal Error, Link not empty but get NULL pointer.\n")); ASSERT(FALSE); break; } if (prChnlReqInfo->ucReqChnlNum != prP2pOffChnlTxPkt->rChannelInfo.ucChannelNum) { prChnlReqInfo->ucReqChnlNum = prP2pOffChnlTxPkt->rChannelInfo.ucChannelNum; prChnlReqInfo->eChnlSco = prP2pOffChnlTxPkt->eChnlExt; prChnlReqInfo->eBand = prP2pOffChnlTxPkt->rChannelInfo.eBand; prChnlReqInfo->u8Cookie = 0; prChnlReqInfo->eChannelWidth = CW_20_40MHZ; prChnlReqInfo->ucCenterFreqS1 = 0; prChnlReqInfo->ucCenterFreqS2 = 0; ASSERT(prChnlReqInfo->eChnlReqType == CH_REQ_TYPE_OFFCHNL_TX); p2pFuncAcquireCh(prAdapter, prP2pDevFsmInfo->ucBssIndex, prChnlReqInfo); } else { LINK_REMOVE_HEAD(&(prP2pMgmtTxInfo->rP2pTxReqLink), prP2pOffChnlTxPkt, P_P2P_OFF_CHNL_TX_REQ_INFO_T); p2pFuncTxMgmtFrame(prAdapter, prP2pDevFsmInfo->ucBssIndex, prP2pOffChnlTxPkt->prMgmtTxMsdu, prP2pOffChnlTxPkt->fgNoneCckRate); prP2pMgmtTxInfo->prMgmtTxMsdu = prP2pOffChnlTxPkt->prMgmtTxMsdu; prP2pMgmtTxInfo->fgIsWaitRsp = prP2pOffChnlTxPkt->fgIsWaitRsp; } } else { /* Link is empty, return back to IDLE. */ *peNextState = P2P_DEV_STATE_IDLE; fgIsTransition = TRUE; } } while (FALSE); return fgIsTransition; } /* p2pDevSateInit_OFF_CHNL_TX */