[WCNCR00152247] softap: add dfs test cmd
[Description]
Add dfs test cmd show_dfs_state
Add dfs test cmd show_dfs_radar_param
Add dfs test cmd show_dfs_help
Add dfs test cmd show_dfs_time
Change-Id: I5aec2e5227566acb799d6aa91a299ee265eade4a
Feature: softap
Signed-off-by: Chun Lee <chun.lee@mediatek.com>
CR-Id: WCNCR00152247
diff --git a/include/mgmt/p2p_func.h b/include/mgmt/p2p_func.h
index 7dca620..4262bbd 100644
--- a/include/mgmt/p2p_func.h
+++ b/include/mgmt/p2p_func.h
@@ -58,6 +58,14 @@
#if (CFG_SUPPORT_DFS_MASTER == 1)
extern P2P_RADAR_INFO_T g_rP2pRadarInfo;
+
+enum _ENUM_DFS_STATE_T {
+ DFS_STATE_INACTIVE = 0,
+ DFS_STATE_CHECKING,
+ DFS_STATE_ACTIVE,
+ DFS_STATE_DETECTED,
+ DFS_STATE_NUM
+};
#endif
/*******************************************************************************
@@ -151,9 +159,11 @@
BOOLEAN p2pFuncCheckWeatherRadarBand(IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo);
-INT_32 p2pFuncSetManualCacTime(IN UINT_32 u4ManualCacTime);
+INT_32 p2pFuncSetDriverCacTime(IN UINT_32 u4CacTime);
-UINT_32 p2pFuncGetManualCacTime(VOID);
+VOID p2pFuncEnableManualCac(VOID);
+
+UINT_32 p2pFuncGetDriverCacTime(VOID);
BOOLEAN p2pFuncIsManualCac(VOID);
@@ -161,6 +171,8 @@
VOID p2pFuncShowRadarInfo(IN P_ADAPTER_T prAdapter, IN UINT_8 ucBssIdx);
+VOID p2pFuncGetRadarInfo(IN P_P2P_RADAR_INFO_T prP2pRadarInfo);
+
PUINT_8 p2pFuncJpW53RadarType(VOID);
PUINT_8 p2pFuncJpW56RadarType(VOID);
@@ -168,6 +180,16 @@
VOID p2pFuncSetRadarDetectMode(IN UINT_8 ucRadarDetectMode);
UINT_8 p2pFuncGetRadarDetectMode(VOID);
+
+VOID p2pFuncSetDfsState(IN UINT_8 ucDfsState);
+
+UINT_8 p2pFuncGetDfsState(VOID);
+
+PUINT_8 p2pFuncShowDfsState(VOID);
+
+VOID p2pFuncRecordCacStartBootTime(VOID);
+
+UINT_32 p2pFuncGetCacRemainingTime(VOID);
#endif
VOID p2pFuncSetChannel(IN P_ADAPTER_T prAdapter, IN UINT_8 ucRoleIdx, IN P_RF_CHANNEL_INFO_T prRfChannelInfo);
diff --git a/mgmt/cnm.c b/mgmt/cnm.c
index 6ebb334..d2efcb4 100644
--- a/mgmt/cnm.c
+++ b/mgmt/cnm.c
@@ -422,7 +422,7 @@
prEventBody = (P_EVENT_RDD_REPORT_T)(prEvent->aucBuffer);
prP2pRddDetMsg = (P_MSG_P2P_RADAR_DETECT_T) cnmMemAlloc(prAdapter,
- RAM_TYPE_MSG, sizeof(P_MSG_P2P_RADAR_DETECT_T));
+ RAM_TYPE_MSG, sizeof(*prP2pRddDetMsg));
prP2pRddDetMsg->rMsgHdr.eMsgId = MID_CNM_P2P_RADAR_DETECT;
@@ -435,6 +435,8 @@
}
}
+ p2pFuncSetDfsState(DFS_STATE_DETECTED);
+
p2pFuncRadarInfoInit();
g_rP2pRadarInfo.ucRadarReportMode = prEventBody->ucRadarReportMode;
@@ -467,7 +469,7 @@
DBGLOG(CNM, INFO, "cnmCsaDoneEvent.\n");
prP2pCsaDoneMsg = (P_MSG_P2P_CSA_DONE_T) cnmMemAlloc(prAdapter,
- RAM_TYPE_MSG, sizeof(P_MSG_P2P_CSA_DONE_T));
+ RAM_TYPE_MSG, sizeof(*prP2pCsaDoneMsg));
prAdapter->rWifiVar.fgCsaInProgress = FALSE;
diff --git a/mgmt/p2p_func.c b/mgmt/p2p_func.c
index e1fdea1..f85d6e6 100644
--- a/mgmt/p2p_func.c
+++ b/mgmt/p2p_func.c
@@ -80,9 +80,18 @@
#if (CFG_SUPPORT_DFS_MASTER == 1)
BOOLEAN g_fgManualCac = FALSE;
-UINT_32 g_u4ManualCacTime;
-UINT_8 g_ucRadarDetectMode;
+UINT_32 g_u4DriverCacTime;
+UINT_32 g_u4CacStartBootTime;
+UINT_8 g_ucRadarDetectMode = FALSE;
P2P_RADAR_INFO_T g_rP2pRadarInfo;
+UINT_8 g_ucDfsState = DFS_STATE_INACTIVE;
+static PUINT_8 apucDfsState[DFS_STATE_NUM] = {
+ (PUINT_8) DISP_STRING("DFS_STATE_INACTIVE"),
+ (PUINT_8) DISP_STRING("DFS_STATE_CHECKING"),
+ (PUINT_8) DISP_STRING("DFS_STATE_ACTIVE"),
+ (PUINT_8) DISP_STRING("DFS_STATE_DETECTED")
+};
+
PUINT_8 apucW53RadarType[3] = {
(PUINT_8) DISP_STRING("Unknown Type"),
(PUINT_8) DISP_STRING("Type 1 (short pulse)"),
@@ -1207,22 +1216,25 @@
return FALSE;
}
-INT_32 p2pFuncSetManualCacTime(IN UINT_32 u4ManualCacTime)
+INT_32 p2pFuncSetDriverCacTime(IN UINT_32 u4CacTime)
{
WLAN_STATUS i4Status = WLAN_STATUS_SUCCESS;
- g_fgManualCac = TRUE;
+ g_u4DriverCacTime = u4CacTime;
- g_u4ManualCacTime = u4ManualCacTime * 1000;
-
- DBGLOG(P2P, INFO, "p2pFuncSetManualCacTime: g_u4ManualCacTime = %dsec\n", g_u4ManualCacTime/1000);
+ DBGLOG(P2P, INFO, "p2pFuncSetDriverCacTime: g_u4ManualCacTime = %dsec\n", g_u4DriverCacTime);
return i4Status;
}
-UINT_32 p2pFuncGetManualCacTime(VOID)
+VOID p2pFuncEnableManualCac(VOID)
{
- return g_u4ManualCacTime;
+ g_fgManualCac = TRUE;
+}
+
+UINT_32 p2pFuncGetDriverCacTime(VOID)
+{
+ return g_u4DriverCacTime;
}
BOOLEAN p2pFuncIsManualCac(VOID)
@@ -1232,35 +1244,7 @@
VOID p2pFuncRadarInfoInit(VOID)
{
-
kalMemZero(&g_rP2pRadarInfo, sizeof(g_rP2pRadarInfo));
-
-/* UINT_8 ucCnt;
-
- g_rP2pRadarInfo.ucRadarReportMode = 0;
- g_rP2pRadarInfo.ucRddIdx = 0;
- g_rP2pRadarInfo.ucLongDetected = 0;
- g_rP2pRadarInfo.ucPeriodicDetected = 0;
- g_rP2pRadarInfo.ucLPBNum = 0;
- g_rP2pRadarInfo.ucPPBNum = 0;
- g_rP2pRadarInfo.ucLPBPeriodValid = 0;
- g_rP2pRadarInfo.ucLPBWidthValid = 0;
- g_rP2pRadarInfo.ucPRICountM1 = 0;
- g_rP2pRadarInfo.ucPRICountM1TH = 0;
- g_rP2pRadarInfo.ucPRICountM2 = 0;
- g_rP2pRadarInfo.ucPRICountM2TH = 0;
- g_rP2pRadarInfo.u4PRI1stUs = 0;
-
- for (ucCnt = 0; ucCnt < 32; ucCnt++) {
- g_rP2pRadarInfo.arPpbContent[ucCnt].u4PeriodicStartTime = 0;
- g_rP2pRadarInfo.arPpbContent[ucCnt].u2PeriodicPulseWidth = 0;
- }
- for (ucCnt = 0; ucCnt < 32; ucCnt++) {
- g_rP2pRadarInfo.arLpbContent[ucCnt].u4LongStartTime = 0;
- g_rP2pRadarInfo.arLpbContent[ucCnt].u2LongPulseWidth = 0;
- }
-*/
-
}
VOID p2pFuncShowRadarInfo(IN P_ADAPTER_T prAdapter, IN UINT_8 ucBssIdx)
@@ -1300,7 +1284,7 @@
DBGLOG(P2P, INFO, "Radar Content:\n");
- DBGLOG(P2P, INFO, "start time pulse width PRI\n");
+ DBGLOG(P2P, INFO, "start time pulse width PRI\n");
if (g_rP2pRadarInfo.ucPeriodicDetected) {
DBGLOG(P2P, INFO, "%-10d %-11d -\n"
@@ -1330,6 +1314,11 @@
}
}
+VOID p2pFuncGetRadarInfo(IN P_P2P_RADAR_INFO_T prP2pRadarInfo)
+{
+ kalMemCopy(prP2pRadarInfo, &g_rP2pRadarInfo, sizeof(*prP2pRadarInfo));
+}
+
PUINT_8 p2pFuncJpW53RadarType(VOID)
{
UINT_32 u4Type1Diff;
@@ -1409,6 +1398,41 @@
{
return g_ucRadarDetectMode;
}
+
+VOID p2pFuncSetDfsState(IN UINT_8 ucDfsState)
+{
+ DBGLOG(P2P, INFO, "[DFS_STATE] TRANSITION: [%s] -> [%s]\n",
+ apucDfsState[g_ucDfsState], apucDfsState[ucDfsState]);
+
+ g_ucDfsState = ucDfsState;
+}
+
+UINT_8 p2pFuncGetDfsState(VOID)
+{
+ return g_ucDfsState;
+}
+
+PUINT_8 p2pFuncShowDfsState(VOID)
+{
+ return apucDfsState[g_ucDfsState];
+}
+
+VOID p2pFuncRecordCacStartBootTime(VOID)
+{
+ g_u4CacStartBootTime = kalGetBootTime();
+}
+
+UINT_32 p2pFuncGetCacRemainingTime(VOID)
+{
+ UINT_32 u4CurrentBootTime;
+ UINT_32 u4CacRemainingTime;
+
+ u4CurrentBootTime = kalGetBootTime();
+
+ u4CacRemainingTime = g_u4DriverCacTime - (u4CurrentBootTime - g_u4CacStartBootTime)/1000000;
+
+ return u4CacRemainingTime;
+}
#endif
#if 0
diff --git a/mgmt/p2p_role_fsm.c b/mgmt/p2p_role_fsm.c
index a7b96dd..2462247 100644
--- a/mgmt/p2p_role_fsm.c
+++ b/mgmt/p2p_role_fsm.c
@@ -445,6 +445,7 @@
case P2P_ROLE_STATE_DFS_CAC:
p2pRoleFsmStateTransition(prAdapter, prP2pRoleFsmInfo, P2P_ROLE_STATE_IDLE);
kalP2PCacFinishedUpdate(prAdapter->prGlueInfo, prP2pRoleFsmInfo->ucRoleIndex);
+ p2pFuncSetDfsState(DFS_STATE_ACTIVE);
break;
#endif
default:
@@ -1069,6 +1070,7 @@
break;
#if (CFG_SUPPORT_DFS_MASTER == 1)
+ p2pFuncSetDfsState(DFS_STATE_INACTIVE);
p2pFuncStopRdd(prAdapter, prP2pBssInfo->ucBssIndex);
#endif
@@ -1218,13 +1220,17 @@
prP2pRoleFsmInfo->eCurrentState != P2P_ROLE_STATE_IDLE)
ASSERT(FALSE);
- if (p2pFuncGetRadarDetectMode())
+ if (p2pFuncGetRadarDetectMode()) {
DBGLOG(P2P, INFO, "p2pRoleFsmRunEventRadarDet: Ignore radar event\n");
- else {
- if (prP2pRoleFsmInfo->eCurrentState == P2P_ROLE_STATE_DFS_CAC)
- p2pRoleFsmStateTransition(prAdapter, prP2pRoleFsmInfo, P2P_ROLE_STATE_IDLE);
+ if (prP2pRoleFsmInfo->eCurrentState == P2P_ROLE_STATE_DFS_CAC)
+ p2pFuncSetDfsState(DFS_STATE_CHECKING);
+ else
+ p2pFuncSetDfsState(DFS_STATE_ACTIVE);
+ } else {
+ if (prP2pRoleFsmInfo->eCurrentState == P2P_ROLE_STATE_DFS_CAC)
+ p2pRoleFsmStateTransition(prAdapter, prP2pRoleFsmInfo, P2P_ROLE_STATE_IDLE);
- kalP2PRddDetectUpdate(prAdapter->prGlueInfo, prP2pRoleFsmInfo->ucRoleIndex);
+ kalP2PRddDetectUpdate(prAdapter->prGlueInfo, prP2pRoleFsmInfo->ucRoleIndex);
}
p2pFuncShowRadarInfo(prAdapter, prMsgP2pRddDetMsg->ucBssIndex);
@@ -1939,7 +1945,7 @@
P_MSG_CH_GRANT_T prMsgChGrant = (P_MSG_CH_GRANT_T) NULL;
#if (CFG_SUPPORT_DFS_MASTER == 1)
P_BSS_INFO_T prP2pBssInfo = (P_BSS_INFO_T) NULL;
- UINT_32 u4CacTime;
+ UINT_32 u4CacTimeMs;
#endif
UINT_8 ucTokenID = 0;
@@ -1991,18 +1997,24 @@
p2pFuncStartRdd(prAdapter, prMsgChGrant->ucBssIndex);
if (p2pFuncCheckWeatherRadarBand(prChnlReqInfo))
- u4CacTime = P2P_AP_CAC_WEATHER_CHNL_HOLD_TIME_MS;
+ u4CacTimeMs = P2P_AP_CAC_WEATHER_CHNL_HOLD_TIME_MS;
else
- u4CacTime = prP2pRoleFsmInfo->rChnlReqInfo.u4MaxInterval;
+ u4CacTimeMs = prP2pRoleFsmInfo->rChnlReqInfo.u4MaxInterval;
if (p2pFuncIsManualCac())
- u4CacTime = p2pFuncGetManualCacTime();
+ u4CacTimeMs = p2pFuncGetDriverCacTime() * 1000;
+ else
+ p2pFuncSetDriverCacTime(u4CacTimeMs/1000);
cnmTimerStartTimer(prAdapter, &(prP2pRoleFsmInfo->rP2pRoleFsmTimeoutTimer),
- u4CacTime);
+ u4CacTimeMs);
+
+ p2pFuncRecordCacStartBootTime();
+
+ p2pFuncSetDfsState(DFS_STATE_CHECKING);
DBGLOG(P2P, INFO, "p2pRoleFsmRunEventChnlGrant: CAC time = %ds\n",
- u4CacTime/1000);
+ u4CacTimeMs/1000);
break;
case P2P_ROLE_STATE_SWITCH_CHANNEL:
p2pFuncDfsSwitchCh(prAdapter, prP2pBssInfo, prP2pRoleFsmInfo->rChnlReqInfo);
diff --git a/os/linux/gl_ate_agent.c b/os/linux/gl_ate_agent.c
index 23e766e..50f02dd 100644
--- a/os/linux/gl_ate_agent.c
+++ b/os/linux/gl_ate_agent.c
@@ -2043,6 +2043,16 @@
DBGLOG(REQ, INFO, "MT6632 : ATE_AGENT iwpriv Set RDD Report, prInBuf: %s\n", prInBuf);
DBGLOG(INIT, ERROR, "MT6632 : ATE_AGENT iwpriv Set RDD Report : Band %d\n", dbdcIdx);
+ if (p2pFuncGetDfsState() == DFS_STATE_INACTIVE || p2pFuncGetDfsState() == DFS_STATE_DETECTED) {
+ DBGLOG(REQ, ERROR, "RDD Report is not supported in this DFS state (inactive or deteted)\n");
+ return WLAN_STATUS_NOT_SUPPORTED;
+ }
+
+ if (dbdcIdx != 0 && dbdcIdx != 1) {
+ DBGLOG(REQ, ERROR, "RDD index is not \"0\" or \"1\", Invalid data\n");
+ return WLAN_STATUS_INVALID_DATA;
+ }
+
ucDbdcIdx = (UINT_8) dbdcIdx;
if (rv == 0)
@@ -2080,10 +2090,17 @@
DBGLOG(REQ, INFO, "MT6632 : ATE_AGENT iwpriv Set By Pass Cac, prInBuf: %s\n", prInBuf);
DBGLOG(INIT, ERROR, "MT6632 : ATE_AGENT iwpriv Set By Pass Cac : %dsec\n", i4ByPassCacTime);
+ if (i4ByPassCacTime < 0) {
+ DBGLOG(REQ, ERROR, "Cac time < 0, Invalid data\n");
+ return WLAN_STATUS_INVALID_DATA;
+ }
+
u4ByPassCacTime = (UINT_32) i4ByPassCacTime;
+ p2pFuncEnableManualCac();
+
if (rv == 0)
- i4Status = p2pFuncSetManualCacTime(u4ByPassCacTime);
+ i4Status = p2pFuncSetDriverCacTime(u4ByPassCacTime);
else
return -EINVAL;
@@ -2116,13 +2133,18 @@
DBGLOG(REQ, INFO, "MT6632 : ATE_AGENT iwpriv Set Radar Detect Mode, prInBuf: %s\n", prInBuf);
DBGLOG(INIT, ERROR, "MT6632 : ATE_AGENT iwpriv Set Radar Detect Mode : %d\n", radarDetectMode);
- ucRadarDetectMode = (UINT_8) radarDetectMode;
+ if (p2pFuncGetDfsState() == DFS_STATE_INACTIVE || p2pFuncGetDfsState() == DFS_STATE_DETECTED) {
+ DBGLOG(REQ, ERROR, "RDD Report is not supported in this DFS state (inactive or deteted)\n");
+ return WLAN_STATUS_NOT_SUPPORTED;
+ }
- if (ucRadarDetectMode > 1) {
- DBGLOG(REQ, ERROR, "Radar Detect Mode > 1, Invalid data\n");
+ if (radarDetectMode != 0 && radarDetectMode != 1) {
+ DBGLOG(REQ, ERROR, "Radar Detect Mode is not \"0\" or \"1\", Invalid data\n");
return WLAN_STATUS_INVALID_DATA;
}
+ ucRadarDetectMode = (UINT_8) radarDetectMode;
+
p2pFuncSetRadarDetectMode(ucRadarDetectMode);
if (rv == 0)
diff --git a/os/linux/gl_p2p_cfg80211.c b/os/linux/gl_p2p_cfg80211.c
index d3a82b3..cd4ce9a 100644
--- a/os/linux/gl_p2p_cfg80211.c
+++ b/os/linux/gl_p2p_cfg80211.c
@@ -1242,6 +1242,11 @@
pucBuffer = prP2pBcnUpdateMsg->aucBuffer;
DBGLOG(P2P, INFO, "mtk_p2p_cfg80211_start_ap.(role %d)\n", ucRoleIdx);
+#if (CFG_SUPPORT_DFS_MASTER == 1)
+ if (p2pFuncGetDfsState() == DFS_STATE_DETECTED) {
+ p2pFuncSetDfsState(DFS_STATE_INACTIVE);
+ }
+#endif
if (settings->beacon.head_len != 0) {
kalMemCopy(pucBuffer, settings->beacon.head, settings->beacon.head_len);
@@ -1400,8 +1405,10 @@
DBGLOG(P2P, INFO, "mtk_p2p_cfg80211_start_radar_detection.(role %d)\n", ucRoleIdx);
+ p2pFuncSetDfsState(DFS_STATE_INACTIVE);
+
prP2pDfsCacMsg = (P_MSG_P2P_DFS_CAC_T) cnmMemAlloc(prGlueInfo->prAdapter,
- RAM_TYPE_MSG, sizeof(MSG_P2P_DFS_CAC_T));
+ RAM_TYPE_MSG, sizeof(*prP2pDfsCacMsg));
if (prP2pDfsCacMsg == NULL) {
ASSERT(FALSE);
@@ -1512,6 +1519,8 @@
DBGLOG(P2P, INFO, "mtk_p2p_cfg80211_channel_switch.(role %d)\n", ucRoleIdx);
+ p2pFuncSetDfsState(DFS_STATE_INACTIVE);
+
/* Set CSA IE parameters */
prGlueInfo->prAdapter->rWifiVar.fgCsaInProgress = TRUE;
prGlueInfo->prAdapter->rWifiVar.ucChannelSwitchMode = 1;
@@ -1521,7 +1530,7 @@
/* Set new channel parameters */
prP2pSetNewChannelMsg = (P_MSG_P2P_SET_NEW_CHANNEL_T) cnmMemAlloc(prGlueInfo->prAdapter,
- RAM_TYPE_MSG, sizeof(P_MSG_P2P_SET_NEW_CHANNEL_T));
+ RAM_TYPE_MSG, sizeof(*prP2pSetNewChannelMsg));
if (prP2pSetNewChannelMsg == NULL) {
ASSERT(FALSE);
diff --git a/os/linux/gl_wext_priv.c b/os/linux/gl_wext_priv.c
index b25d611..a5d38f8 100644
--- a/os/linux/gl_wext_priv.c
+++ b/os/linux/gl_wext_priv.c
@@ -2232,6 +2232,13 @@
#define CMD_SETROAMMODE "SETROAMMODE"
#define CMD_MIRACAST "MIRACAST"
+#if (CFG_SUPPORT_DFS_MASTER == 1)
+#define CMD_SHOW_DFS_STATE "SHOW_DFS_STATE"
+#define CMD_SHOW_DFS_RADAR_PARAM "SHOW_DFS_RADAR_PARAM"
+#define CMD_SHOW_DFS_HELP "SHOW_DFS_HELP"
+#define CMD_SHOW_DFS_CAC_TIME "SHOW_DFS_CAC_TIME"
+#endif
+
#define CMD_PNOSSIDCLR_SET "PNOSSIDCLR"
#define CMD_PNOSETUP_SET "PNOSETUP "
#define CMD_PNOENABLE_SET "PNOFORCE"
@@ -6794,7 +6801,173 @@
return i4BytesWritten;
}
+#if (CFG_SUPPORT_DFS_MASTER == 1)
+int priv_driver_show_dfs_state(IN struct net_device *prNetDev, IN char *pcCommand, IN int i4TotalLen)
+{
+ INT_32 i4Argc = 0;
+ PCHAR apcArgv[WLAN_CFG_ARGV_MAX];
+ INT_32 i4BytesWritten = 0;
+ ASSERT(prNetDev);
+ if (GLUE_CHK_PR2(prNetDev, pcCommand) == FALSE)
+ return -1;
+
+ DBGLOG(REQ, LOUD, "command is %s\n", pcCommand);
+ wlanCfgParseArgument(pcCommand, &i4Argc, apcArgv);
+ DBGLOG(REQ, LOUD, "argc is %i\n", i4Argc);
+
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\nDFS State: \"%s\"",
+ p2pFuncShowDfsState());
+
+ return i4BytesWritten;
+}
+
+int priv_driver_show_dfs_radar_param(IN struct net_device *prNetDev, IN char *pcCommand, IN int i4TotalLen)
+{
+ P_GLUE_INFO_T prGlueInfo = NULL;
+ INT_32 i4Argc = 0;
+ PCHAR apcArgv[WLAN_CFG_ARGV_MAX];
+ INT_32 i4BytesWritten = 0;
+ UINT_8 ucCnt = 0;
+ P_P2P_RADAR_INFO_T prP2pRadarInfo = (P_P2P_RADAR_INFO_T) NULL;
+
+ ASSERT(prNetDev);
+ if (GLUE_CHK_PR2(prNetDev, pcCommand) == FALSE)
+ return -1;
+ prGlueInfo = *((P_GLUE_INFO_T *) netdev_priv(prNetDev));
+
+ prP2pRadarInfo = (P_P2P_RADAR_INFO_T) cnmMemAlloc(prGlueInfo->prAdapter,
+ RAM_TYPE_MSG, sizeof(*prP2pRadarInfo));
+
+ DBGLOG(REQ, LOUD, "command is %s\n", pcCommand);
+ wlanCfgParseArgument(pcCommand, &i4Argc, apcArgv);
+ DBGLOG(REQ, LOUD, "argc is %i\n", i4Argc);
+
+ p2pFuncGetRadarInfo(prP2pRadarInfo);
+
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\nRDD idx: %d\n",
+ prP2pRadarInfo->ucRddIdx);
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\nLong Pulse detected: %d\n",
+ prP2pRadarInfo->ucLongDetected);
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\nPeriodic Pulse detected: %d\n",
+ prP2pRadarInfo->ucPeriodicDetected);
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\nLPB Num: %d\n",
+ prP2pRadarInfo->ucLPBNum);
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\nPPB Num: %d\n",
+ prP2pRadarInfo->ucPPBNum);
+
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\n===========================");
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\nLong Pulse Buffer Contents:\n");
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\npulse_time pulse_width PRI\n");
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\n%-10d %-11d -\n"
+ , prP2pRadarInfo->arLpbContent[ucCnt].u4LongStartTime
+ , prP2pRadarInfo->arLpbContent[ucCnt].u2LongPulseWidth);
+ for (ucCnt = 1; ucCnt < prP2pRadarInfo->ucLPBNum; ucCnt++) {
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\n%-10d %-11d %d\n"
+ , prP2pRadarInfo->arLpbContent[ucCnt].u4LongStartTime
+ , prP2pRadarInfo->arLpbContent[ucCnt].u2LongPulseWidth
+ , (prP2pRadarInfo->arLpbContent[ucCnt].u4LongStartTime
+ - prP2pRadarInfo->arLpbContent[ucCnt-1].u4LongStartTime) * 2 / 5);
+ }
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\nLPB Period Valid: %d",
+ prP2pRadarInfo->ucLPBPeriodValid);
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\nLPB Period Valid: %d\n",
+ prP2pRadarInfo->ucLPBWidthValid);
+
+ ucCnt = 0;
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\n===========================");
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\nPeriod Pulse Buffer Contents:\n");
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\npulse_time pulse_width PRI\n");
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\n%-10d %-11d -\n"
+ , prP2pRadarInfo->arPpbContent[ucCnt].u4PeriodicStartTime
+ , prP2pRadarInfo->arPpbContent[ucCnt].u2PeriodicPulseWidth);
+ for (ucCnt = 1; ucCnt < prP2pRadarInfo->ucPPBNum; ucCnt++) {
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\n%-10d %-11d %d\n"
+ , prP2pRadarInfo->arPpbContent[ucCnt].u4PeriodicStartTime
+ , prP2pRadarInfo->arPpbContent[ucCnt].u2PeriodicPulseWidth
+ , (prP2pRadarInfo->arPpbContent[ucCnt].u4PeriodicStartTime
+ - prP2pRadarInfo->arPpbContent[ucCnt-1].u4PeriodicStartTime) * 2 / 5);
+ }
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\nPRI Count M1 TH: %d; PRI Count M1: %d",
+ prP2pRadarInfo->ucPRICountM1TH, prP2pRadarInfo->ucPRICountM1);
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\nPRI Count M2 TH: %d; PRI Count M2: %d",
+ prP2pRadarInfo->ucPRICountM2TH, prP2pRadarInfo->ucPRICountM2);
+
+
+ cnmMemFree(prGlueInfo->prAdapter, prP2pRadarInfo);
+
+ return i4BytesWritten;
+}
+
+int priv_driver_show_dfs_help(IN struct net_device *prNetDev, IN char *pcCommand, IN int i4TotalLen)
+{
+ INT_32 i4Argc = 0;
+ PCHAR apcArgv[WLAN_CFG_ARGV_MAX];
+ INT_32 i4BytesWritten = 0;
+
+ ASSERT(prNetDev);
+ if (GLUE_CHK_PR2(prNetDev, pcCommand) == FALSE)
+ return -1;
+
+ DBGLOG(REQ, LOUD, "command is %s\n", pcCommand);
+ wlanCfgParseArgument(pcCommand, &i4Argc, apcArgv);
+ DBGLOG(REQ, LOUD, "argc is %i\n", i4Argc);
+
+
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\n--iwpriv wlanX driver \"show_dfs_state\"\n");
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\nINACTIVE: RDD disable or temporary RDD disable");
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\nCHECKING: During CAC time");
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\nACTIVE : In-serive monitoring");
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten,
+ "\nDETECTED: Has detected radar but hasn't moved to new channel\n");
+
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\n--iwpriv wlanX driver \"show_dfs_radar_param\"\n");
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\nShow the latest pulse information\n");
+
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\n--iwpriv wlanX driver \"show_dfs_cac_time\"\n");
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\nShow the remaining time of CAC\n");
+
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\n--iwpriv wlanX set ByPassCac=yy\n");
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\nValue yy: set the time of CAC\n");
+
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\n--iwpriv wlanX set RDDReport=yy\n");
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\nValue yy is \"0\" or \"1\"");
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\n\"0\": Emulate RDD0 manual radar event");
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\n\"1\": Emulate RDD1 manual radar event\n");
+
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\n--iwpriv wlanX set RadarDetectMode=yy\n");
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\nValue yy is \"0\" or \"1\"");
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\n\"0\": Switch channel when radar detected (default)");
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\n\"1\": Do not switch channel when radar detected");
+
+ return i4BytesWritten;
+}
+
+int priv_driver_show_dfs_cac_time(IN struct net_device *prNetDev, IN char *pcCommand, IN int i4TotalLen)
+{
+ INT_32 i4Argc = 0;
+ PCHAR apcArgv[WLAN_CFG_ARGV_MAX];
+ INT_32 i4BytesWritten = 0;
+
+ ASSERT(prNetDev);
+ if (GLUE_CHK_PR2(prNetDev, pcCommand) == FALSE)
+ return -1;
+
+ DBGLOG(REQ, LOUD, "command is %s\n", pcCommand);
+ wlanCfgParseArgument(pcCommand, &i4Argc, apcArgv);
+ DBGLOG(REQ, LOUD, "argc is %i\n", i4Argc);
+
+ if (p2pFuncGetDfsState() != DFS_STATE_CHECKING) {
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\nNot in CAC period");
+ return i4BytesWritten;
+ }
+
+ LOGBUF(pcCommand, i4TotalLen, i4BytesWritten, "\nRemaining time of CAC: %dsec", p2pFuncGetCacRemainingTime());
+
+ return i4BytesWritten;
+}
+
+#endif
int priv_driver_set_miracast(IN struct net_device *prNetDev, IN char *pcCommand, IN int i4TotalLen)
{
@@ -9044,6 +9217,17 @@
} else if (strnicmp(pcCommand, CMD_CLEAR_ACL_ENTRY, strlen(CMD_CLEAR_ACL_ENTRY)) == 0) {
i4BytesWritten = priv_driver_clear_acl_entry(prNetDev, pcCommand, i4TotalLen);
}
+#if (CFG_SUPPORT_DFS_MASTER == 1)
+ else if (strnicmp(pcCommand, CMD_SHOW_DFS_STATE, strlen(CMD_SHOW_DFS_STATE)) == 0) {
+ i4BytesWritten = priv_driver_show_dfs_state(prNetDev, pcCommand, i4TotalLen);
+ } else if (strnicmp(pcCommand, CMD_SHOW_DFS_RADAR_PARAM, strlen(CMD_SHOW_DFS_RADAR_PARAM)) == 0) {
+ i4BytesWritten = priv_driver_show_dfs_radar_param(prNetDev, pcCommand, i4TotalLen);
+ } else if (strnicmp(pcCommand, CMD_SHOW_DFS_HELP, strlen(CMD_SHOW_DFS_HELP)) == 0) {
+ i4BytesWritten = priv_driver_show_dfs_help(prNetDev, pcCommand, i4TotalLen);
+ } else if (strnicmp(pcCommand, CMD_SHOW_DFS_CAC_TIME, strlen(CMD_SHOW_DFS_CAC_TIME)) == 0) {
+ i4BytesWritten = priv_driver_show_dfs_cac_time(prNetDev, pcCommand, i4TotalLen);
+ }
+#endif
#if CFG_SUPPORT_CAL_RESULT_BACKUP_TO_HOST
else if (strnicmp(pcCommand,
CMD_SET_CALBACKUP_TEST_DRV_FW, strlen(CMD_SET_CALBACKUP_TEST_DRV_FW)) == 0)