فهرست منبع

qcacmn: Move the post NOL feature to win code

The macro QCA_SUPPORT_DFS_CHAN_POSTNOL is specific to WIN code.
Therefore remove the macro QCA_SUPPORT_DFS_CHAN_POSTNOL and
associated code from Common code and add it to component dev.

CRs-Fixed: 2829537
Change-Id: Ib49424c44817d6af5e485c87d6f7b08afee4fa11
Vijay Krishnan 4 سال پیش
والد
کامیت
607a31ed7e

+ 21 - 77
umac/dfs/core/src/dfs.h

@@ -2076,6 +2076,23 @@ static inline void dfs_process_phyerr(struct wlan_dfs *dfs,
 }
 #endif
 
+#ifdef QCA_SUPPORT_DFS_CHAN_POSTNOL
+/**
+ * dfs_switch_to_postnol_chan_if_nol_expired() - Find if NOL is expired
+ * in the postNOL channel configured. If true, trigger channel change.
+ * @dfs: Pointer to DFS of wlan_dfs structure.
+ *
+ * Return: True, if channel change is triggered, else false.
+ */
+bool dfs_switch_to_postnol_chan_if_nol_expired(struct wlan_dfs *dfs);
+#else
+static inline bool
+dfs_switch_to_postnol_chan_if_nol_expired(struct wlan_dfs *dfs)
+{
+	return false;
+}
+#endif
+
 #ifdef QCA_MCL_DFS_SUPPORT
 /**
  * dfs_process_phyerr_filter_offload() - Process radar event.
@@ -3049,84 +3066,11 @@ dfs_bang_radar(struct wlan_dfs *dfs, void *indata, uint32_t insize)
 }
 #endif
 
-#ifdef QCA_SUPPORT_DFS_CHAN_POSTNOL
-/**
- * dfs_set_postnol_freq() - DFS API to set postNOL frequency.
- * @dfs: Pointer to wlan_dfs object.
- * @postnol_freq: PostNOL frequency value configured by the user.
- */
-void dfs_set_postnol_freq(struct wlan_dfs *dfs, qdf_freq_t postnol_freq);
-
-/**
- * dfs_set_postnol_mode() - DFS API to set postNOL mode.
- * @dfs: Pointer to wlan_dfs object.
- * @postnol_mode: PostNOL frequency value configured by the user.
- */
-void dfs_set_postnol_mode(struct wlan_dfs *dfs, uint8_t postnol_mode);
-
-/**
- * dfs_set_postnol_cfreq2() - DFS API to set postNOL secondary center frequency.
- * @dfs: Pointer to wlan_dfs object.
- * @postnol_cfreq2: PostNOL secondary center frequency value configured by the
- * user.
- */
-void dfs_set_postnol_cfreq2(struct wlan_dfs *dfs, qdf_freq_t postnol_cfreq2);
-
-/**
- * dfs_get_postnol_freq() - DFS API to get postNOL frequency.
- * @dfs: Pointer to wlan_dfs object.
- * @postnol_freq: PostNOL frequency value configured by the user.
- */
-void dfs_get_postnol_freq(struct wlan_dfs *dfs, qdf_freq_t *postnol_freq);
-
-/**
- * dfs_get_postnol_mode() - DFS API to get postNOL mode.
- * @dfs: Pointer to wlan_dfs object.
- * @postnol_mode: PostNOL frequency value configured by the user.
- */
-void dfs_get_postnol_mode(struct wlan_dfs *dfs, uint8_t *postnol_mode);
-
-/**
- * dfs_get_postnol_cfreq2() - DFS API to get postNOL secondary center frequency.
- * @dfs: Pointer to wlan_dfs object.
- * @postnol_cfreq2: PostNOL secondary center frequency value configured by the
- * user.
- */
-void dfs_get_postnol_cfreq2(struct wlan_dfs *dfs, qdf_freq_t *postnol_cfreq2);
+#if defined(QCA_SUPPORT_DFS_CHAN_POSTNOL)
+void dfs_postnol_attach(struct wlan_dfs *dfs);
 #else
-static inline void
-dfs_set_postnol_freq(struct wlan_dfs *dfs, qdf_freq_t postnol_freq)
+static inline void dfs_postnol_attach(struct wlan_dfs *dfs)
 {
 }
-
-static inline void
-dfs_set_postnol_mode(struct wlan_dfs *dfs, uint8_t postnol_mode)
-{
-}
-
-static inline void
-dfs_set_postnol_cfreq2(struct wlan_dfs *dfs, qdf_freq_t postnol_cfreq2)
-{
-}
-
-static inline void
-dfs_get_postnol_freq(struct wlan_dfs *dfs, qdf_freq_t *postnol_freq)
-{
-	*postnol_freq = 0;
-}
-
-static inline void
-dfs_get_postnol_mode(struct wlan_dfs *dfs, uint8_t *postnol_mode)
-{
-	*postnol_mode = CH_WIDTH_INVALID;
-}
-
-static inline void
-dfs_get_postnol_cfreq2(struct wlan_dfs *dfs, qdf_freq_t *postnol_cfreq2)
-{
-	*postnol_cfreq2 = 0;
-}
-
-#endif /* QCA_SUPPORT_DFS_CHAN_POSTNOL */
-
+#endif
 #endif  /* _DFS_H_ */

+ 0 - 82
umac/dfs/core/src/misc/dfs.c

@@ -205,17 +205,6 @@ int dfs_create_object(struct wlan_dfs **dfs)
 	return 0;
 }
 
-#if defined(QCA_SUPPORT_DFS_CHAN_POSTNOL)
-static void dfs_postnol_attach(struct wlan_dfs *dfs)
-{
-	dfs->dfs_chan_postnol_mode = CH_WIDTH_INVALID;
-}
-#else
-static inline void dfs_postnol_attach(struct wlan_dfs *dfs)
-{
-}
-#endif
-
 int dfs_attach(struct wlan_dfs *dfs)
 {
 	int ret;
@@ -932,74 +921,3 @@ uint8_t dfs_get_agile_detector_id(struct wlan_dfs *dfs)
 	return dfs->dfs_agile_detector_id;
 }
 #endif
-
-#ifdef QCA_SUPPORT_DFS_CHAN_POSTNOL
-void dfs_set_postnol_freq(struct wlan_dfs *dfs, qdf_freq_t postnol_freq)
-{
-	dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS,
-		 "dfs_chan_postnol_freq configured as %d", postnol_freq);
-
-	dfs->dfs_chan_postnol_freq = postnol_freq;
-}
-
-void dfs_set_postnol_mode(struct wlan_dfs *dfs, uint8_t postnol_mode)
-{
-	if (dfs->dfs_chan_postnol_cfreq2) {
-		dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS,
-			 "postNOL cfreq2 has been set,reset it to change mode");
-		return;
-	}
-
-	switch (postnol_mode) {
-	case DFS_CHWIDTH_20_VAL:
-		dfs->dfs_chan_postnol_mode = CH_WIDTH_20MHZ;
-		break;
-	case DFS_CHWIDTH_40_VAL:
-		dfs->dfs_chan_postnol_mode = CH_WIDTH_40MHZ;
-		break;
-	case DFS_CHWIDTH_80_VAL:
-		dfs->dfs_chan_postnol_mode = CH_WIDTH_80MHZ;
-		break;
-	case DFS_CHWIDTH_160_VAL:
-		dfs->dfs_chan_postnol_mode = CH_WIDTH_160MHZ;
-		break;
-	default:
-		dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS,
-			"Invalid postNOL mode configured");
-		return;
-	}
-
-	dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS,
-		 "DFS postnol mode configured as %d",
-		 dfs->dfs_chan_postnol_mode);
-}
-
-void dfs_set_postnol_cfreq2(struct wlan_dfs *dfs, qdf_freq_t postnol_cfreq2)
-{
-	dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS,
-		 "dfs_chan_postnol_cfreq2 configured as %d", postnol_cfreq2);
-
-	dfs->dfs_chan_postnol_cfreq2 = postnol_cfreq2;
-
-	if (postnol_cfreq2) {
-		dfs_info(dfs, WLAN_DEBUG_DFS_ALWAYS,
-			 "postNOL cfreq2 is set, changing mode to 80P80");
-		dfs->dfs_chan_postnol_mode = CH_WIDTH_80P80MHZ;
-	}
-}
-
-void dfs_get_postnol_freq(struct wlan_dfs *dfs, qdf_freq_t *postnol_freq)
-{
-	*postnol_freq = dfs->dfs_chan_postnol_freq;
-}
-
-void dfs_get_postnol_mode(struct wlan_dfs *dfs, uint8_t *postnol_mode)
-{
-	*postnol_mode = dfs->dfs_chan_postnol_mode;
-}
-
-void dfs_get_postnol_cfreq2(struct wlan_dfs *dfs, qdf_freq_t *postnol_cfreq2)
-{
-	*postnol_cfreq2 = dfs->dfs_chan_postnol_cfreq2;
-}
-#endif

+ 0 - 121
umac/dfs/core/src/misc/dfs_nol.c

@@ -283,127 +283,6 @@ static void dfs_nol_delete(struct wlan_dfs *dfs,
 	}
 }
 
-#ifdef QCA_SUPPORT_DFS_CHAN_POSTNOL
-/**
- * dfs_switch_to_postnol_chan_if_nol_expired() - Find if NOL is expired
- * in the postNOL channel configured. If true, trigger channel change.
- * @dfs: Pointer to DFS of wlan_dfs structure.
- *
- * Return: True, if channel change is triggered, else false.
- */
-static bool
-dfs_switch_to_postnol_chan_if_nol_expired(struct wlan_dfs *dfs)
-{
-	struct dfs_channel chan;
-	struct dfs_channel *curchan = dfs->dfs_curchan;
-	bool is_curchan_11ac = false, is_curchan_11axa = false;
-	enum wlan_phymode postnol_phymode;
-
-	if (!dfs->dfs_chan_postnol_freq)
-		return false;
-
-	if (WLAN_IS_CHAN_11AC_VHT20(curchan) ||
-	    WLAN_IS_CHAN_11AC_VHT40(curchan) ||
-	    WLAN_IS_CHAN_11AC_VHT80(curchan) ||
-	    WLAN_IS_CHAN_11AC_VHT160(curchan) ||
-	    WLAN_IS_CHAN_11AC_VHT80_80(curchan))
-		is_curchan_11ac = true;
-	else if (WLAN_IS_CHAN_11AXA_HE20(curchan) ||
-		 WLAN_IS_CHAN_11AXA_HE40PLUS(curchan) ||
-		 WLAN_IS_CHAN_11AXA_HE40MINUS(curchan) ||
-		 WLAN_IS_CHAN_11AXA_HE80(curchan) ||
-		 WLAN_IS_CHAN_11AXA_HE160(curchan) ||
-		 WLAN_IS_CHAN_11AXA_HE80_80(curchan))
-		is_curchan_11axa = true;
-
-	switch (dfs->dfs_chan_postnol_mode) {
-	case CH_WIDTH_20MHZ:
-		if (is_curchan_11ac)
-			postnol_phymode = WLAN_PHYMODE_11AC_VHT20;
-		else if (is_curchan_11axa)
-			postnol_phymode = WLAN_PHYMODE_11AXA_HE20;
-		else
-			return false;
-		break;
-	case CH_WIDTH_40MHZ:
-		if (is_curchan_11ac)
-			postnol_phymode = WLAN_PHYMODE_11AC_VHT40;
-		else if (is_curchan_11axa)
-			postnol_phymode = WLAN_PHYMODE_11AXA_HE40;
-		else
-			return false;
-		break;
-	case CH_WIDTH_80MHZ:
-		if (is_curchan_11ac)
-			postnol_phymode = WLAN_PHYMODE_11AC_VHT80;
-		else if (is_curchan_11axa)
-			postnol_phymode = WLAN_PHYMODE_11AXA_HE80;
-		else
-			return false;
-		break;
-	case CH_WIDTH_160MHZ:
-		if (is_curchan_11ac)
-			postnol_phymode = WLAN_PHYMODE_11AC_VHT160;
-		else if (is_curchan_11axa)
-			postnol_phymode = WLAN_PHYMODE_11AXA_HE160;
-		else
-			return false;
-		break;
-	case CH_WIDTH_80P80MHZ:
-		if (is_curchan_11ac)
-			postnol_phymode = WLAN_PHYMODE_11AC_VHT80_80;
-		else if (is_curchan_11axa)
-			postnol_phymode = WLAN_PHYMODE_11AXA_HE80_80;
-		else
-			return false;
-		break;
-	default:
-		dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS,
-			"Invalid postNOL mode set. Cannot switch to the chan");
-		return false;
-	}
-
-	qdf_mem_zero(&chan, sizeof(struct dfs_channel));
-	if (QDF_STATUS_SUCCESS !=
-		dfs_mlme_find_dot11_chan_for_freq(
-			dfs->dfs_pdev_obj,
-			dfs->dfs_chan_postnol_freq,
-			dfs->dfs_chan_postnol_cfreq2,
-			postnol_phymode,
-			&chan.dfs_ch_freq,
-			&chan.dfs_ch_flags,
-			&chan.dfs_ch_flagext,
-			&chan.dfs_ch_ieee,
-			&chan.dfs_ch_vhtop_ch_freq_seg1,
-			&chan.dfs_ch_vhtop_ch_freq_seg2,
-			&chan.dfs_ch_mhz_freq_seg1,
-			&chan.dfs_ch_mhz_freq_seg2)) {
-		dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS,
-			"Channel %d not found for mode %d and cfreq2 %d",
-			dfs->dfs_chan_postnol_freq,
-			postnol_phymode,
-			dfs->dfs_chan_postnol_cfreq2);
-		return false;
-	}
-	if (WLAN_IS_CHAN_RADAR(&chan))
-		return false;
-
-	if (global_dfs_to_mlme.mlme_postnol_chan_switch)
-		global_dfs_to_mlme.mlme_postnol_chan_switch(
-				dfs->dfs_pdev_obj,
-				dfs->dfs_chan_postnol_freq,
-				dfs->dfs_chan_postnol_cfreq2,
-				postnol_phymode);
-	return true;
-}
-#else
-static inline bool
-dfs_switch_to_postnol_chan_if_nol_expired(struct wlan_dfs *dfs)
-{
-	return false;
-}
-#endif
-
 /**
  * dfs_remove_from_nol() - Remove the freq from NOL list.
  *

+ 0 - 103
umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h

@@ -653,109 +653,6 @@ ucfg_dfs_set_rcac_freq(struct wlan_objmgr_pdev *pdev,
 }
 #endif
 
-#ifdef QCA_SUPPORT_DFS_CHAN_POSTNOL
-/**
- * ucfg_dfs_set_postnol_freq() - Set PostNOL freq.
- * @pdev: Pointer to DFS pdev object.
- * @postnol_freq: User configured freq to switch to, post NOL, in MHZ.
- *
- */
-QDF_STATUS ucfg_dfs_set_postnol_freq(struct wlan_objmgr_pdev *pdev,
-				     qdf_freq_t postnol_freq);
-
-/**
- * ucfg_dfs_set_postnol_mode() - Set PostNOL mode.
- * @pdev: Pointer to DFS pdev object.
- * @postnol_mode: User configured mode to switch to, post NOL, in MHZ.
- *
- */
-QDF_STATUS ucfg_dfs_set_postnol_mode(struct wlan_objmgr_pdev *pdev,
-				     uint8_t postnol_mode);
-
-/**
- * ucfg_dfs_set_postnol_cfreq2() - Set PostNOL secondary center frequency.
- * @pdev: Pointer to DFS pdev object.
- * @postnol_freq: User configured secondary center frequency to switch to,
- * post NOL, in MHZ.
- *
- */
-QDF_STATUS ucfg_dfs_set_postnol_cfreq2(struct wlan_objmgr_pdev *pdev,
-				       qdf_freq_t postnol_cfreq2);
-
-/**
- * ucfg_dfs_get_postnol_freq() - Get PostNOL freq.
- * @pdev: Pointer to DFS pdev object.
- * @postnol_freq: Pointer to user configured freq to switch to, post NOL.
- *
- */
-QDF_STATUS ucfg_dfs_get_postnol_freq(struct wlan_objmgr_pdev *pdev,
-				     qdf_freq_t *postnol_freq);
-
-/**
- * ucfg_dfs_get_postnol_mode() - Set PostNOL mode.
- * @pdev: Pointer to DFS pdev object.
- * @postnol_mode: Pointer to user configured mode to switch to, post NOL.
- *
- */
-QDF_STATUS ucfg_dfs_get_postnol_mode(struct wlan_objmgr_pdev *pdev,
-				     uint8_t *postnol_mode);
-
-/**
- * ucfg_dfs_get_postnol_cfreq2() - Set PostNOL secondary center frequency.
- * @pdev: Pointer to DFS pdev object.
- * @postnol_freq: Pointer to user configured secondary center frequency to
- * switch to post NOL.
- *
- */
-QDF_STATUS ucfg_dfs_get_postnol_cfreq2(struct wlan_objmgr_pdev *pdev,
-				       qdf_freq_t *postnol_cfreq2);
-#else
-static inline QDF_STATUS
-ucfg_dfs_set_postnol_freq(struct wlan_objmgr_pdev *pdev,
-			  qdf_freq_t postnol_freq)
-{
-	return QDF_STATUS_SUCCESS;
-}
-
-static inline QDF_STATUS
-ucfg_dfs_set_postnol_mode(struct wlan_objmgr_pdev *pdev,
-			  uint8_t postnol_mode)
-{
-	return QDF_STATUS_SUCCESS;
-}
-
-static inline QDF_STATUS
-ucfg_dfs_set_postnol_cfreq2(struct wlan_objmgr_pdev *pdev,
-			    qdf_freq_t postnol_cfreq2)
-{
-	return QDF_STATUS_SUCCESS;
-}
-
-static inline QDF_STATUS
-ucfg_dfs_get_postnol_freq(struct wlan_objmgr_pdev *pdev,
-			  qdf_freq_t *postnol_freq)
-{
-	*postnol_freq = 0;
-	return QDF_STATUS_SUCCESS;
-}
-
-static inline QDF_STATUS
-ucfg_dfs_get_postnol_mode(struct wlan_objmgr_pdev *pdev,
-			  uint8_t *postnol_mode)
-{
-	*postnol_mode = CH_WIDTH_INVALID;
-	return QDF_STATUS_SUCCESS;
-}
-
-static inline QDF_STATUS
-ucfg_dfs_get_postnol_cfreq2(struct wlan_objmgr_pdev *pdev,
-			    qdf_freq_t *postnol_cfreq2)
-{
-	*postnol_cfreq2 = 0;
-	return QDF_STATUS_SUCCESS;
-}
-#endif
-
 /**
  * ucfg_dfs_get_rcac_freq() - Get rcac freq.
  * @pdev: Pointer to DFS pdev object.

+ 1 - 1
umac/dfs/dispatcher/src/wlan_dfs_init_deinit_api.c

@@ -75,7 +75,7 @@ register_dfs_precac_auto_chan_callbacks_freq(struct dfs_to_mlme *mlme_callback)
 #endif
 
 /**
- * register_dfs_postnol_csa_callback - Register postNOL channel switch callbacks
+ * register_dfs_postnol_csa_callback - Register CSA callback
  * @mlme_callback: Pointer to dfs_to_mlme.
  */
 #ifndef QCA_MCL_DFS_SUPPORT

+ 0 - 109
umac/dfs/dispatcher/src/wlan_dfs_ucfg_api.c

@@ -538,112 +538,3 @@ bool ucfg_dfs_is_agile_rcac_enabled(struct wlan_objmgr_pdev *pdev)
 qdf_export_symbol(ucfg_dfs_is_agile_rcac_enabled);
 #endif
 
-#ifdef QCA_SUPPORT_DFS_CHAN_POSTNOL
-QDF_STATUS ucfg_dfs_set_postnol_freq(struct wlan_objmgr_pdev *pdev,
-				     qdf_freq_t postnol_freq)
-{
-	struct wlan_dfs *dfs;
-
-	dfs = wlan_pdev_get_dfs_obj(pdev);
-	if (!dfs) {
-		dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS, "null dfs");
-		return QDF_STATUS_E_FAILURE;
-	}
-
-	dfs_set_postnol_freq(dfs, postnol_freq);
-
-	return QDF_STATUS_SUCCESS;
-}
-
-qdf_export_symbol(ucfg_dfs_set_postnol_freq);
-
-QDF_STATUS ucfg_dfs_set_postnol_mode(struct wlan_objmgr_pdev *pdev,
-				     uint8_t postnol_mode)
-{
-	struct wlan_dfs *dfs;
-
-	dfs = wlan_pdev_get_dfs_obj(pdev);
-	if (!dfs) {
-		dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS, "null dfs");
-		return QDF_STATUS_E_FAILURE;
-	}
-
-	dfs_set_postnol_mode(dfs, postnol_mode);
-
-	return QDF_STATUS_SUCCESS;
-}
-
-qdf_export_symbol(ucfg_dfs_set_postnol_mode);
-
-QDF_STATUS ucfg_dfs_set_postnol_cfreq2(struct wlan_objmgr_pdev *pdev,
-				       qdf_freq_t postnol_cfreq2)
-{
-	struct wlan_dfs *dfs;
-
-	dfs = wlan_pdev_get_dfs_obj(pdev);
-	if (!dfs) {
-		dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS, "null dfs");
-		return QDF_STATUS_E_FAILURE;
-	}
-
-	dfs_set_postnol_cfreq2(dfs, postnol_cfreq2);
-
-	return QDF_STATUS_SUCCESS;
-}
-
-qdf_export_symbol(ucfg_dfs_set_postnol_cfreq2);
-
-QDF_STATUS ucfg_dfs_get_postnol_freq(struct wlan_objmgr_pdev *pdev,
-				     qdf_freq_t *postnol_freq)
-{
-	struct wlan_dfs *dfs;
-
-	dfs = wlan_pdev_get_dfs_obj(pdev);
-	if (!dfs) {
-		dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS, "null dfs");
-		return QDF_STATUS_E_FAILURE;
-	}
-
-	dfs_get_postnol_freq(dfs, postnol_freq);
-
-	return QDF_STATUS_SUCCESS;
-}
-
-qdf_export_symbol(ucfg_dfs_get_postnol_freq);
-
-QDF_STATUS ucfg_dfs_get_postnol_mode(struct wlan_objmgr_pdev *pdev,
-				     uint8_t *postnol_mode)
-{
-	struct wlan_dfs *dfs;
-
-	dfs = wlan_pdev_get_dfs_obj(pdev);
-	if (!dfs) {
-		dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS, "null dfs");
-		return QDF_STATUS_E_FAILURE;
-	}
-
-	dfs_get_postnol_mode(dfs, postnol_mode);
-
-	return QDF_STATUS_SUCCESS;
-}
-
-qdf_export_symbol(ucfg_dfs_get_postnol_mode);
-
-QDF_STATUS ucfg_dfs_get_postnol_cfreq2(struct wlan_objmgr_pdev *pdev,
-				       qdf_freq_t *postnol_cfreq2)
-{
-	struct wlan_dfs *dfs;
-
-	dfs = wlan_pdev_get_dfs_obj(pdev);
-	if (!dfs) {
-		dfs_err(dfs, WLAN_DEBUG_DFS_ALWAYS, "null dfs");
-		return QDF_STATUS_E_FAILURE;
-	}
-
-	dfs_get_postnol_cfreq2(dfs, postnol_cfreq2);
-
-	return QDF_STATUS_SUCCESS;
-}
-
-qdf_export_symbol(ucfg_dfs_get_postnol_cfreq2);
-#endif

+ 3 - 0
umac/global_umac_dispatcher/lmac_if/src/wlan_lmac_if.c

@@ -49,6 +49,9 @@
 #include <wlan_dfs_tgt_api.h>
 #include <wlan_objmgr_vdev_obj.h>
 #include <wlan_dfs_utils_api.h>
+#ifdef QCA_SUPPORT_DFS_CHAN_POSTNOL
+#include <dfs_postnol_ucfg.h>
+#endif
 #endif
 
 #ifdef WLAN_SUPPORT_GREEN_AP