BOOLEAN CFG80211_HandleP2pMgmtFrame(RTMP_ADAPTER *pAd, RX_BLK *pRxBlk, UCHAR OpMode) { RXWI_STRUC *pRxWI = pRxBlk->pRxWI; PHEADER_802_11 pHeader = pRxBlk->pHeader; PNET_DEV pNetDev = NULL; PCFG80211_CTRL pCfg80211_ctrl = &pAd->cfg80211_ctrl; UINT32 freq; if ((pHeader->FC.SubType == SUBTYPE_PROBE_REQ) || ((pHeader->FC.SubType == SUBTYPE_ACTION) && CFG80211_CheckActionFrameType(pAd, "RX", pHeader, pRxWI->RXWI_N.MPDUtotalByteCnt))) { MAP_CHANNEL_ID_TO_KHZ(pAd->LatchRfRegs.Channel, freq); freq /= 1000; #ifdef RT_CFG80211_P2P_CONCURRENT_DEVICE /* Check the P2P_GO exist in the VIF List */ if (pCfg80211_ctrl->Cfg80211VifDevSet.vifDevList.size > 0) { if ((pNetDev = RTMP_CFG80211_FindVifEntry_ByType(pAd, RT_CMD_80211_IFTYPE_P2P_GO)) != NULL) { DBGPRINT(RT_DEBUG_INFO, ("VIF STA GO RtmpOsCFG80211RxMgmt OK!! TYPE = %d, freq = %d, %02x:%02x:%02x:%02x:%02x:%02x\n", pHeader->FC.SubType, freq, PRINT_MAC(pHeader->Addr2))); CFG80211OS_RxMgmt(pNetDev, freq, (PUCHAR)pHeader, pRxWI->RXWI_N.MPDUtotalByteCnt); if (OpMode == OPMODE_AP) return TRUE; } } #endif /* RT_CFG80211_P2P_CONCURRENT_DEVICE */ if ( ((pHeader->FC.SubType == SUBTYPE_PROBE_REQ) && (pCfg80211_ctrl->cfg80211MainDev.Cfg80211RegisterProbeReqFrame == TRUE) ) || ((pHeader->FC.SubType == SUBTYPE_ACTION) /*&& ( pAd->Cfg80211RegisterActionFrame == TRUE)*/ )) { DBGPRINT(RT_DEBUG_INFO,("MAIN STA RtmpOsCFG80211RxMgmt OK!! TYPE = %d, freq = %d, %02x:%02x:%02x:%02x:%02x:%02x\n", pHeader->FC.SubType, freq, PRINT_MAC(pHeader->Addr2))); CFG80211OS_RxMgmt(CFG80211_GetEventDevice(pAd), freq, (PUCHAR)pHeader, pRxWI->RXWI_N.MPDUtotalByteCnt); if (OpMode == OPMODE_AP) return TRUE; } } return FALSE; }
VOID CFG80211_SendMgmtFrameDone(RTMP_ADAPTER *pAd, USHORT Sequence) { //RTMP_USB_SUPPORT/RTMP_PCI_SUPPORT PCFG80211_CTRL pCfg80211_ctrl = &pAd->cfg80211_ctrl; if (pCfg80211_ctrl->TxStatusInUsed && pCfg80211_ctrl->pTxStatusBuf /*&& (pAd->TxStatusSeq == pHeader->Sequence)*/) { MTWF_LOG(DBG_CAT_ALL, DBG_SUBCAT_ALL, DBG_LVL_INFO, ("CFG_TX_STATUS: REAL send %d\n", Sequence)); CFG80211OS_TxStatus(CFG80211_GetEventDevice(pAd), 5678, pCfg80211_ctrl->pTxStatusBuf, pCfg80211_ctrl->TxStatusBufLen, TRUE); pCfg80211_ctrl->TxStatusSeq = 0; pCfg80211_ctrl->TxStatusInUsed = FALSE; } }