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 */
Exemplo n.º 2
0
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 */