[WCNCR00148136] softap: add dfs shut down flow
[Description]
Add dfs shut down flow
Change-Id: I9cc613aeeed556d0444889e514c8eb63513da682
Feature: softap
Signed-off-by: Chun Lee <chun.lee@mediatek.com>
CR-Id: WCNCR00148136
diff --git a/common/wlan_oid.c b/common/wlan_oid.c
index ee11d4a..1241a6a 100644
--- a/common/wlan_oid.c
+++ b/common/wlan_oid.c
@@ -12003,7 +12003,9 @@
prSetRddReport = (P_PARAM_CUSTOM_SET_RDD_REPORT_T) pvSetBuffer;
prCmdRddOnOffCtrl = (P_CMD_RDD_ON_OFF_CTRL_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG,
- sizeof(P_CMD_RDD_ON_OFF_CTRL_T));
+ sizeof(*prCmdRddOnOffCtrl));
+
+ ASSERT_BREAK((prCmdRddOnOffCtrl != NULL));
prCmdRddOnOffCtrl->ucDfsCtrl = RDD_RADAR_EMULATE;
@@ -12024,9 +12026,11 @@
TRUE, /* fgIsOid*/
nicCmdEventSetCommon, /* REF: wlanoidSetDbdcEnable */
nicOidCmdTimeoutCommon,
- sizeof(CMD_RDD_ON_OFF_CTRL_T),
+ sizeof(*prCmdRddOnOffCtrl),
(PUINT_8) (prCmdRddOnOffCtrl), pvSetBuffer, u4SetBufferLen);
+ cnmMemFree(prAdapter, prCmdRddOnOffCtrl);
+
return rWlanStatus;
}
@@ -12067,7 +12071,9 @@
prSetRadarDetectMode = (P_PARAM_CUSTOM_SET_RADAR_DETECT_MODE_T) pvSetBuffer;
prCmdRddOnOffCtrl = (P_CMD_RDD_ON_OFF_CTRL_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG,
- sizeof(P_CMD_RDD_ON_OFF_CTRL_T));
+ sizeof(*prCmdRddOnOffCtrl));
+
+ ASSERT_BREAK((prCmdRddOnOffCtrl != NULL));
prCmdRddOnOffCtrl->ucDfsCtrl = RDD_DET_MODE;
@@ -12083,9 +12089,11 @@
TRUE, /* fgIsOid*/
nicCmdEventSetCommon, /* REF: wlanoidSetDbdcEnable */
nicOidCmdTimeoutCommon,
- sizeof(CMD_RDD_ON_OFF_CTRL_T),
+ sizeof(*prCmdRddOnOffCtrl),
(PUINT_8) (prCmdRddOnOffCtrl), pvSetBuffer, u4SetBufferLen);
+ cnmMemFree(prAdapter, prCmdRddOnOffCtrl);
+
return rWlanStatus;
}
#endif
diff --git a/include/mgmt/p2p_func.h b/include/mgmt/p2p_func.h
index 09eedca..8f9c0bc 100644
--- a/include/mgmt/p2p_func.h
+++ b/include/mgmt/p2p_func.h
@@ -145,6 +145,8 @@
#if (CFG_SUPPORT_DFS_MASTER == 1)
VOID p2pFuncStartRdd(IN P_ADAPTER_T prAdapter, IN UINT_8 ucBssIdx);
+VOID p2pFuncStopRdd(IN P_ADAPTER_T prAdapter, IN UINT_8 ucBssIdx);
+
VOID p2pFuncDfsSwitchCh(IN P_ADAPTER_T prAdapter, IN P_BSS_INFO_T prBssInfo, IN P2P_CHNL_REQ_INFO_T rP2pChnlReqInfo);
BOOLEAN p2pFuncCheckWeatherRadarBand(IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo);
diff --git a/mgmt/p2p_func.c b/mgmt/p2p_func.c
index 35580ba..cba7f64 100644
--- a/mgmt/p2p_func.c
+++ b/mgmt/p2p_func.c
@@ -1032,6 +1032,8 @@
prCmdRddOnOffCtrl = (P_CMD_RDD_ON_OFF_CTRL_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG,
sizeof(*prCmdRddOnOffCtrl));
+ ASSERT_BREAK((prCmdRddOnOffCtrl != NULL));
+
prCmdRddOnOffCtrl->ucDfsCtrl = RDD_START;
prCmdRddOnOffCtrl->ucRddIdx = prAdapter->aprBssInfo[ucBssIdx]->eDBDCBand;
@@ -1060,11 +1062,53 @@
FALSE,
NULL,
NULL,
- sizeof(CMD_RDD_ON_OFF_CTRL_T), (PUINT_8) prCmdRddOnOffCtrl, NULL, 0);
+ sizeof(*prCmdRddOnOffCtrl), (PUINT_8) prCmdRddOnOffCtrl, NULL, 0);
+
+ cnmMemFree(prAdapter, prCmdRddOnOffCtrl);
} while (FALSE);
} /* p2pFuncStartRdd */
+VOID p2pFuncStopRdd(IN P_ADAPTER_T prAdapter, IN UINT_8 ucBssIdx)
+{
+ P_CMD_RDD_ON_OFF_CTRL_T prCmdRddOnOffCtrl;
+
+ DEBUGFUNC("p2pFuncStopRdd()");
+
+ do {
+ ASSERT_BREAK((prAdapter != NULL));
+
+ prCmdRddOnOffCtrl = (P_CMD_RDD_ON_OFF_CTRL_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG,
+ sizeof(*prCmdRddOnOffCtrl));
+
+ ASSERT_BREAK((prCmdRddOnOffCtrl != NULL));
+
+ prCmdRddOnOffCtrl->ucDfsCtrl = RDD_STOP;
+
+ prCmdRddOnOffCtrl->ucRddIdx = prAdapter->aprBssInfo[ucBssIdx]->eDBDCBand;
+
+ if (prCmdRddOnOffCtrl->ucRddIdx)
+ prCmdRddOnOffCtrl->ucRddInSel = RDD_IN_SEL_1;
+ else
+ prCmdRddOnOffCtrl->ucRddInSel = RDD_IN_SEL_0;
+
+ DBGLOG(P2P, INFO, "p2pFuncStopRdd: Stop Radar detection - DFS ctrl: %d, RDD index: %d\n",
+ prCmdRddOnOffCtrl->ucDfsCtrl, prCmdRddOnOffCtrl->ucRddIdx);
+
+ wlanSendSetQueryCmd(prAdapter,
+ CMD_ID_RDD_ON_OFF_CTRL,
+ TRUE,
+ FALSE,
+ FALSE,
+ NULL,
+ NULL,
+ sizeof(*prCmdRddOnOffCtrl), (PUINT_8) prCmdRddOnOffCtrl, NULL, 0);
+
+ cnmMemFree(prAdapter, prCmdRddOnOffCtrl);
+
+ } while (FALSE);
+} /* p2pFuncStopRdd */
+
VOID p2pFuncDfsSwitchCh(IN P_ADAPTER_T prAdapter, IN P_BSS_INFO_T prBssInfo, IN P2P_CHNL_REQ_INFO_T rP2pChnlReqInfo)
{
@@ -1092,7 +1136,9 @@
nicUpdateBss(prAdapter, prBssInfo->ucBssIndex);
prCmdRddOnOffCtrl = (P_CMD_RDD_ON_OFF_CTRL_T) cnmMemAlloc(prAdapter, RAM_TYPE_MSG,
- sizeof(P_CMD_RDD_ON_OFF_CTRL_T));
+ sizeof(*prCmdRddOnOffCtrl));
+
+ ASSERT_BREAK((prCmdRddOnOffCtrl != NULL));
prCmdRddOnOffCtrl->ucDfsCtrl = RDD_START_TXQ;
@@ -1105,7 +1151,9 @@
FALSE,
NULL,
NULL,
- sizeof(CMD_RDD_ON_OFF_CTRL_T), (PUINT_8) prCmdRddOnOffCtrl, NULL, 0);
+ sizeof(*prCmdRddOnOffCtrl), (PUINT_8) prCmdRddOnOffCtrl, NULL, 0);
+
+ cnmMemFree(prAdapter, prCmdRddOnOffCtrl);
prP2pRoleFsmInfo = P2P_ROLE_INDEX_2_ROLE_FSM_INFO(prAdapter, prBssInfo->u4PrivateData);
diff --git a/mgmt/p2p_role_fsm.c b/mgmt/p2p_role_fsm.c
index 1b69269..d57a271 100644
--- a/mgmt/p2p_role_fsm.c
+++ b/mgmt/p2p_role_fsm.c
@@ -1067,7 +1067,9 @@
if (!prP2pBssInfo)
break;
-
+#if (CFG_SUPPORT_DFS_MASTER == 1)
+ p2pFuncStopRdd(prAdapter, prP2pBssInfo->ucBssIndex);
+#endif
if (prP2pRoleFsmInfo->eCurrentState != P2P_ROLE_STATE_REQING_CHANNEL) {
p2pFuncStopGO(prAdapter, prP2pBssInfo);
diff --git a/os/linux/gl_ate_agent.c b/os/linux/gl_ate_agent.c
index 2bbbee2..23e766e 100644
--- a/os/linux/gl_ate_agent.c
+++ b/os/linux/gl_ate_agent.c
@@ -2070,20 +2070,20 @@
{
INT_32 i4Status;
INT_32 rv;
- int byPassCacTime;
- UINT_8 ucByPassCacTime;
+ INT_32 i4ByPassCacTime;
+ UINT_32 u4ByPassCacTime;
DBGLOG(REQ, INFO, "MT6632 : ATE_AGENT iwpriv Set By Pass Cac, buf: %s\n", prInBuf);
- rv = kstrtoint(prInBuf, 0, &byPassCacTime);
+ rv = kstrtoint(prInBuf, 0, &i4ByPassCacTime);
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", byPassCacTime);
+ DBGLOG(INIT, ERROR, "MT6632 : ATE_AGENT iwpriv Set By Pass Cac : %dsec\n", i4ByPassCacTime);
- ucByPassCacTime = (UINT_8) byPassCacTime;
+ u4ByPassCacTime = (UINT_32) i4ByPassCacTime;
if (rv == 0)
- i4Status = p2pFuncSetManualCacTime(ucByPassCacTime);
+ i4Status = p2pFuncSetManualCacTime(u4ByPassCacTime);
else
return -EINVAL;
diff --git a/os/linux/gl_p2p_cfg80211.c b/os/linux/gl_p2p_cfg80211.c
index de39374..314c6e4 100644
--- a/os/linux/gl_p2p_cfg80211.c
+++ b/os/linux/gl_p2p_cfg80211.c
@@ -1750,6 +1750,11 @@
DBGLOG(P2P, TRACE, "mtk_p2p_cfg80211_stop_ap.\n");
prGlueInfo = *((P_GLUE_INFO_T *) wiphy_priv(wiphy));
+#if (CFG_SUPPORT_DFS_MASTER == 1)
+ netif_carrier_off(dev);
+ netif_tx_stop_all_queues(dev);
+#endif
+
if (mtk_Netdev_To_RoleIdx(prGlueInfo, dev, &ucRoleIdx) < 0)
break;
/* Switch OP MOde. */