// Periodic Radar detection, switch channel will occur in RTMPHandleTBTTInterrupt() // Before switch channel, driver needs doing channel switch announcement. VOID RadarDetectPeriodic( IN PRTMP_ADAPTER pAd) { // need to check channel availability, after switch channel if (pAd->CommonCfg.RadarDetect.RDMode != RD_SILENCE_MODE) return; // channel availability check time is 60sec, use 65 for assurance if (pAd->CommonCfg.RadarDetect.RDCount++ > pAd->CommonCfg.RadarDetect.ChMovingTime) { DBGPRINT(RT_DEBUG_TRACE, ("Not found radar signal, start send beacon and radar detection in service monitor\n\n")); BbpRadarDetectionStop(pAd); #ifdef CONFIG_AP_SUPPORT IF_DEV_CONFIG_OPMODE_ON_AP(pAd) { #ifdef CARRIER_DETECTION_SUPPORT if (pAd->CommonCfg.CarrierDetect.Enable == TRUE) { // trun on Carrier-Detection. (Carrier-Detect with CTS protection). CARRIER_DETECT_START(pAd, 1); } #endif // CARRIER_DETECTION_SUPPORT // } #endif // CONFIG_AP_SUPPORT // AsicEnableBssSync(pAd); pAd->CommonCfg.RadarDetect.RDMode = RD_NORMAL_MODE; #ifdef DFS_MERGE_ARCH_TEAM if (pAd->CommonCfg.dfs_func < 1) AdaptRadarDetection(pAd); #else #ifdef CONFIG_AP_SUPPORT IF_DEV_CONFIG_OPMODE_ON_AP(pAd) { #ifdef DFS_SUPPORT AdaptRadarDetection(pAd); // start radar detection. #endif // DFS_SUPPORT // } #endif // CONFIG_AP_SUPPORT // #endif // DFS_MERGE_ARCH_TEAM // return; }
/* Before switch channel, driver needs doing channel switch announcement.*/ VOID RadarDetectPeriodic( IN PRTMP_ADAPTER pAd) { #ifdef RT2880 ULONG Value; /* Roger add to fix false detection(long pulse only) in the first 60 seconds */ if (pAd->CommonCfg.W56_debug) { if (pAd->CommonCfg.W56_idx < 300) { pAd->CommonCfg.RadarElectNum = 5; } else if (pAd->CommonCfg.W56_total <= 5000) { if (pAd->CommonCfg.RadarElectNum > 4) pAd->CommonCfg.RadarElectNum--; else pAd->CommonCfg.RadarElectNum = 3; } else if (pAd->CommonCfg.W56_total <= 10000) { if (pAd->CommonCfg.RadarElectNum > 5) pAd->CommonCfg.RadarElectNum--; else pAd->CommonCfg.RadarElectNum = 4; } else if (pAd->CommonCfg.W56_total <= 20000) { if (pAd->CommonCfg.RadarElectNum > 7) pAd->CommonCfg.RadarElectNum--; else if (pAd->CommonCfg.RadarElectNum < 5) pAd->CommonCfg.RadarElectNum++; else pAd->CommonCfg.RadarElectNum = 6; } else if (pAd->CommonCfg.W56_total <= 30000) { if (pAd->CommonCfg.RadarElectNum > 8) pAd->CommonCfg.RadarElectNum--; else if (pAd->CommonCfg.RadarElectNum < 6) pAd->CommonCfg.RadarElectNum++; else pAd->CommonCfg.RadarElectNum = 7; } else if (pAd->CommonCfg.W56_total <= 50000) { if (pAd->CommonCfg.RadarElectNum > 9) pAd->CommonCfg.RadarElectNum--; else if (pAd->CommonCfg.RadarElectNum < 6) pAd->CommonCfg.RadarElectNum++; else pAd->CommonCfg.RadarElectNum = 8; } else if (pAd->CommonCfg.W56_total <= 70000) { if (pAd->CommonCfg.RadarElectNum > 7) pAd->CommonCfg.RadarElectNum--; else if (pAd->CommonCfg.RadarElectNum < 8) pAd->CommonCfg.RadarElectNum++; else pAd->CommonCfg.RadarElectNum = 9; } else { if (pAd->CommonCfg.RadarElectNum < 9) pAd->CommonCfg.RadarElectNum++; else pAd->CommonCfg.RadarElectNum = 10; } } #endif /* RT2880 */ /* need to check channel availability, after switch channel*/ if (pAd->CommonCfg.RadarDetect.RDMode != RD_SILENCE_MODE) return; #ifdef RT2880 #ifdef DFS_SOFTWARE_SUPPORT if (pAd->CommonCfg.dfs_func < HARDWARE_DFS_V1) { /* Roger add to fix false detection(long pulse only) in the first 60 seconds */ if ((pAd->CommonCfg.RadarDetect.RDDurRegion == JAP_W56) || (pAd->CommonCfg.RadarDetect.RDDurRegion == FCC)) { if (pAd->CommonCfg.W56_debug == 0) { RTMP_IO_READ32(pAd, PBF_LIFE_TIMER, &pAd->CommonCfg.W56_hw_1); RTMP_IO_READ32(pAd, CH_TIME_CFG, &Value); RTMP_IO_WRITE32(pAd, CH_TIME_CFG, Value | 1); pAd->CommonCfg.W56_hw_sum = 0; pAd->CommonCfg.W56_idx = 0; pAd->CommonCfg.W56_debug = 1; } } } #endif /* DFS_SOFTWARE_SUPPORT */ #endif /* RT2880 */ /* channel availability check time is 60sec, use 65 for assurance*/ if (pAd->CommonCfg.RadarDetect.RDCount++ > pAd->CommonCfg.RadarDetect.ChMovingTime) { DBGPRINT(RT_DEBUG_TRACE, ("Not found radar signal, start send beacon and radar detection in service monitor\n\n")); #ifdef DFS_SOFTWARE_SUPPORT if (pAd->CommonCfg.dfs_func < HARDWARE_DFS_V1) BbpRadarDetectionStop(pAd); #endif /* DFS_SOFTWARE_SUPPORT */ #ifdef RT2880 pAd->CommonCfg.R66 = pAd->CommonCfg.DFS_R66; #endif /* RT2880 */ #ifdef CONFIG_AP_SUPPORT IF_DEV_CONFIG_OPMODE_ON_AP(pAd) { #ifdef CARRIER_DETECTION_SUPPORT if (pAd->CommonCfg.CarrierDetect.Enable == TRUE) { /* trun on Carrier-Detection. (Carrier-Detect with CTS protection).*/ CARRIER_DETECT_START(pAd, 1); } #endif /* CARRIER_DETECTION_SUPPORT */ } #endif /* CONFIG_AP_SUPPORT */ AsicEnableBssSync(pAd); pAd->CommonCfg.RadarDetect.RDMode = RD_NORMAL_MODE; #ifdef RT2880 #ifdef DFS_SOFTWARE_SUPPORT if (pAd->CommonCfg.dfs_func < HARDWARE_DFS_V1) { if ((pAd->CommonCfg.RadarDetect.RDDurRegion == JAP_W56) || (pAd->CommonCfg.RadarDetect.RDDurRegion == FCC)) { pAd->CommonCfg.W56_debug = 0; RTMP_IO_READ32(pAd, CH_TIME_CFG, &Value); if (Value & 1) { RTMP_IO_WRITE32(pAd, CH_TIME_CFG, Value & ~1); } RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, 114, 0x02); } } #endif /* DFS_SOFTWARE_SUPPORT */ #endif /* RT2880 */ #ifdef CONFIG_AP_SUPPORT IF_DEV_CONFIG_OPMODE_ON_AP(pAd) { #ifdef DFS_SUPPORT #ifdef RTMP_RBUS_SUPPORT #ifdef DFS_HARDWARE_SUPPORT if ((pAd->MACVersion == 0x28720200) && (pAd->CommonCfg.CID == 0x200)) { if (pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE) { return; } /*NewRadarDetectionStart(pAd);*/ } else #endif /* DFS_HARDWARE_SUPPORT */ #endif /* RTMP_RBUS_SUPPORT */ { #ifdef DFS_SOFTWARE_SUPPORT if (pAd->CommonCfg.dfs_func < HARDWARE_DFS_V1) AdaptRadarDetection(pAd); /* start radar detection.*/ #endif /* DFS_SOFTWARE_SUPPORT */ } #endif /* DFS_SUPPORT */ } #endif /* CONFIG_AP_SUPPORT */ return; }