INT Set_P2P_Scan( IN PRTMP_ADAPTER pAd, IN PSTRING arg) { POS_COOKIE pObj; int bScan; bScan = simple_strtol(arg, 0, 10); pObj = (POS_COOKIE) pAd->OS_Cookie; if (pObj->ioctl_if_type != INT_P2P) return 0; if (bScan) { pAd->StaCfg.bAutoReconnect = FALSE; P2pScan(pAd); } else { pAd->StaCfg.bAutoReconnect = TRUE; P2pStopScan(pAd); } return TRUE; }
INT Set_P2P_Scan( IN PRTMP_ADAPTER pAd, IN PSTRING arg) { POS_COOKIE pObj; int ScanType; PRT_P2P_CONFIG pP2PCtrl = &pAd->P2pCfg; ScanType = simple_strtol(arg, 0, 10); pObj = (POS_COOKIE) pAd->OS_Cookie; if (pObj->ioctl_if_type != INT_P2P) return 0; switch(ScanType) { case P2P_STOP_SCAN: /* Stop scan and stop to response peer P2P scanning */ #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT pAd->StaCfg.bAutoReconnect = FALSE; #else pAd->StaCfg.bAutoReconnect = TRUE; #endif /* NATIVE_WPA_SUPPLICANT_SUPPORT */ pP2PCtrl->bSentProbeRSP = FALSE; P2pStopScan(pAd); break; case P2P_SCANNING: /* Do P2P scanning */ pAd->StaCfg.bAutoReconnect = FALSE; pP2PCtrl->bSentProbeRSP = TRUE; P2pGroupTabInit(pAd); P2pScan(pAd); break; case P2P_STOP_SCAN_AND_LISTEN: /* Stop scan and lock at Listen Channel to response peer P2P scanning */ pAd->P2pCfg.bSentProbeRSP = TRUE; P2pStopScan(pAd); break; default: DBGPRINT(RT_DEBUG_ERROR, ("Incorrect scan type:%d\n", ScanType)); } return TRUE; }
INT Set_P2P_Cancel_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg) { POS_COOKIE pObj; PRT_P2P_CONFIG pP2PCtrl = &pAd->P2pCfg; PWSC_CTRL pWscControl = NULL; INT val = (INT)simple_strtol(arg, 0, 10); pObj = (POS_COOKIE) pAd->OS_Cookie; if (pObj->ioctl_if_type != INT_P2P) return FALSE; if (val == 1) { pP2PCtrl->P2PConnectState = P2P_CONNECT_IDLE; if (!MAC_ADDR_EQUAL(&ZERO_MAC_ADDR[0], &pP2PCtrl->ConnectingMAC[0])) { UCHAR p2pindex; p2pindex = P2pGroupTabSearch(pAd, pP2PCtrl->ConnectingMAC); if (p2pindex < MAX_P2P_GROUP_SIZE) { if (pAd->P2pTable.Client[p2pindex].Rule == P2P_IS_GO) pAd->P2pTable.Client[p2pindex].P2pClientState = P2PSTATE_DISCOVERY_GO; else pAd->P2pTable.Client[p2pindex].P2pClientState = P2PSTATE_DISCOVERY; pAd->P2pTable.Client[p2pindex].StateCount = 0; } NdisZeroMemory(pP2PCtrl->ConnectingMAC, MAC_ADDR_LEN); } if (P2P_GO_ON(pAd)) { UINT32 i, p2pEntryCnt=0; MAC_TABLE_ENTRY *pEntry; INT IsAPConfigured; pWscControl = &pAd->ApCfg.MBSSID[MAIN_MBSSID].WscControl; IsAPConfigured = pWscControl->WscConfStatus; if (pWscControl->bWscTrigger) { WscStop(pAd, FALSE, pWscControl); pWscControl->WscPinCode = 0; WscBuildBeaconIE(pAd, IsAPConfigured, FALSE, 0, 0, MAIN_MBSSID, NULL, 0, AP_MODE); WscBuildProbeRespIE(pAd, WSC_MSGTYPE_AP_WLAN_MGR, IsAPConfigured, FALSE, 0, 0, (MAIN_MBSSID | MIN_NET_DEVICE_FOR_P2P_GO), NULL, 0, AP_MODE); APUpdateBeaconFrame(pAd, pObj->ioctl_if); } for (i=0; i<MAX_LEN_OF_MAC_TABLE; i++) { pEntry = &pAd->MacTab.Content[i]; if (IS_P2P_GO_ENTRY(pEntry) && (pEntry->WpaState == AS_PTKINITDONE)) p2pEntryCnt++; } DBGPRINT(RT_DEBUG_ERROR, ("%s:: Total= %d. p2pEntry = %d.\n", __FUNCTION__, pAd->MacTab.Size, p2pEntryCnt)); if ((p2pEntryCnt == 0) && (pAd->flg_p2p_OpStatusFlags == P2P_GO_UP)) { #ifdef RTMP_MAC_USB RTEnqueueInternalCmd(pAd, CMDTHREAD_SET_P2P_LINK_DOWN, NULL, 0); #endif /* RTMP_MAC_USB */ } } else if (P2P_CLI_ON(pAd)) { pWscControl = &pAd->ApCfg.MBSSID[MAIN_MBSSID].WscControl; pWscControl->WscPinCode = 0; if (pWscControl->bWscTrigger) WscStop(pAd, TRUE, pWscControl); P2pLinkDown(pAd, P2P_DISCONNECTED); } P2pStopScan(pAd); pP2PCtrl->bPeriodicListen = TRUE; /* Reset bConfirmByUI to its default value */ pP2PCtrl->bConfirmByUI = CONFIRM_BY_UI_DEFAULT; if (INFRA_ON(pAd) || P2P_GO_ON(pAd) || P2P_CLI_ON(pAd)) { INT ch; // TODO: shiang-6590, why we set bw as 40 when BBPCurrentBW == BW_40?? if (pAd->CommonCfg.BBPCurrentBW == BW_40) { rtmp_bbp_set_bw(pAd, BW_40); ch = pAd->CommonCfg.CentralChannel; } else { ch = pAd->CommonCfg.Channel; } AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); } } DBGPRINT(RT_DEBUG_TRACE, ("%s:: Cancel P2P action\n", __FUNCTION__)); return TRUE; }