diff --git a/mgmt/rlm_domain.c b/mgmt/rlm_domain.c
index a907b5c..8464bb0 100644
--- a/mgmt/rlm_domain.c
+++ b/mgmt/rlm_domain.c
@@ -822,15 +822,15 @@
 
 	if (eSpecificBand == BAND_2G4) {
 		i = 0;
-		max_count = rlmDomainGetActiveChannelCount(IEEE80211_BAND_2GHZ);
+		max_count = rlmDomainGetActiveChannelCount(KAL_BAND_2GHZ);
 	} else if (eSpecificBand == BAND_5G) {
-		i = rlmDomainGetActiveChannelCount(IEEE80211_BAND_2GHZ);
-		max_count = rlmDomainGetActiveChannelCount(IEEE80211_BAND_5GHZ) +
-			rlmDomainGetActiveChannelCount(IEEE80211_BAND_2GHZ);
+		i = rlmDomainGetActiveChannelCount(KAL_BAND_2GHZ);
+		max_count = rlmDomainGetActiveChannelCount(KAL_BAND_5GHZ) +
+			rlmDomainGetActiveChannelCount(KAL_BAND_2GHZ);
 	} else {
 		i = 0;
-		max_count = rlmDomainGetActiveChannelCount(IEEE80211_BAND_5GHZ) +
-			rlmDomainGetActiveChannelCount(IEEE80211_BAND_2GHZ);
+		max_count = rlmDomainGetActiveChannelCount(KAL_BAND_5GHZ) +
+			rlmDomainGetActiveChannelCount(KAL_BAND_2GHZ);
 	}
 
 	ucNum = 0;
@@ -839,7 +839,7 @@
 		if (fgNoDfs && (prCh->flags & IEEE80211_CHAN_RADAR))
 			continue; /*not match*/
 
-		if (i < rlmDomainGetActiveChannelCount(IEEE80211_BAND_2GHZ))
+		if (i < rlmDomainGetActiveChannelCount(KAL_BAND_2GHZ))
 			band = BAND_2G4;
 		else
 			band = BAND_5G;
@@ -941,8 +941,8 @@
 
 
 	pWiphy = priv_to_wiphy(prAdapter->prGlueInfo);
-	max_channel_count = pWiphy->bands[IEEE80211_BAND_2GHZ]->n_channels
-						+ pWiphy->bands[IEEE80211_BAND_5GHZ]->n_channels;
+	max_channel_count = pWiphy->bands[KAL_BAND_2GHZ]->n_channels
+						+ pWiphy->bands[KAL_BAND_5GHZ]->n_channels;
 
 	if (max_channel_count == 0) {
 		DBGLOG(RLM, ERROR, "%s, invalid channel count.\n", __func__);
@@ -1153,11 +1153,11 @@
 
 	if (eBand == BAND_2G4) {
 		start_idx = 0;
-		end_idx = rlmDomainGetActiveChannelCount(IEEE80211_BAND_2GHZ);
+		end_idx = rlmDomainGetActiveChannelCount(KAL_BAND_2GHZ);
 	} else {
-		start_idx = rlmDomainGetActiveChannelCount(IEEE80211_BAND_2GHZ);
-		end_idx = rlmDomainGetActiveChannelCount(IEEE80211_BAND_2GHZ) +
-					rlmDomainGetActiveChannelCount(IEEE80211_BAND_5GHZ);
+		start_idx = rlmDomainGetActiveChannelCount(KAL_BAND_2GHZ);
+		end_idx = rlmDomainGetActiveChannelCount(KAL_BAND_2GHZ) +
+					rlmDomainGetActiveChannelCount(KAL_BAND_5GHZ);
 	}
 
 	for (idx = start_idx; idx < end_idx; idx++) {
@@ -2405,22 +2405,22 @@
 	UINT32 ch_cnt;
 	struct wiphy *wiphy;
 	u8 band_idx, ch_idx;
-	P_CMD_SET_COUNTRY_CHANNEL_POWER_LIMIT_V2_T prCmd[IEEE80211_NUM_BANDS] = {NULL};
-	UINT_32 u4SetCmdTableMaxSize[IEEE80211_NUM_BANDS] = {0};
+	P_CMD_SET_COUNTRY_CHANNEL_POWER_LIMIT_V2_T prCmd[KAL_NUM_BANDS] = {NULL};
+	UINT_32 u4SetCmdTableMaxSize[KAL_NUM_BANDS] = {0};
 	const INT_8 *prChannelList = NULL;
 
 
 	DBGLOG(RLM, INFO, "rlmDomainSendPwrLimitCmd()\n");
 
 	wiphy = priv_to_wiphy(prAdapter->prGlueInfo);
-	for (band_idx = 0; band_idx < IEEE80211_NUM_BANDS; band_idx++) {
-		if (band_idx != IEEE80211_BAND_2GHZ && band_idx != IEEE80211_BAND_5GHZ)
+	for (band_idx = 0; band_idx < KAL_NUM_BANDS; band_idx++) {
+		if (band_idx != KAL_BAND_2GHZ && band_idx != KAL_BAND_5GHZ)
 			continue;
 
-		prChannelList = (band_idx == IEEE80211_BAND_2GHZ) ?
+		prChannelList = (band_idx == KAL_BAND_2GHZ) ?
 			gTx_Pwr_Limit_2g_Ch : gTx_Pwr_Limit_5g_Ch;
 
-		ch_cnt = (band_idx == IEEE80211_BAND_2GHZ) ? TX_PWR_LIMIT_2G_CH_NUM :
+		ch_cnt = (band_idx == KAL_BAND_2GHZ) ? TX_PWR_LIMIT_2G_CH_NUM :
 			TX_PWR_LIMIT_5G_CH_NUM;
 
 		if (!ch_cnt)
@@ -2455,7 +2455,7 @@
 		kalMemSet(prCmd[band_idx], MAX_TX_POWER, u4SetCmdTableMaxSize[band_idx]);
 
 		prCmd[band_idx]->ucNum = ch_cnt;
-		prCmd[band_idx]->eband = (band_idx == IEEE80211_BAND_2GHZ) ? BAND_2G4 : BAND_5G;
+		prCmd[band_idx]->eband = (band_idx == KAL_BAND_2GHZ) ? BAND_2G4 : BAND_5G;
 		prCmd[band_idx]->countryCode = rlmDomainGetCountryCode();
 
 		DBGLOG(RLM, INFO, "%s, active n_channels=%d, band=%d\n", __func__, ch_cnt, prCmd[band_idx]->eband);
@@ -2472,15 +2472,15 @@
 	 */
 	rlmDomainGetTxPwrLimit(rlmDomainGetCountryCode(),
 							prAdapter->prGlueInfo,
-							prCmd[IEEE80211_BAND_2GHZ],
-							prCmd[IEEE80211_BAND_5GHZ]);
+							prCmd[KAL_BAND_2GHZ],
+							prCmd[KAL_BAND_5GHZ]);
 
 
-	for (band_idx = 0; band_idx < IEEE80211_NUM_BANDS; band_idx++) {
+	for (band_idx = 0; band_idx < KAL_NUM_BANDS; band_idx++) {
 		UINT_8 ucRemainChNum, i, ucTempChNum, prCmdBatchNum;
 		UINT_32 u4BufSize = 0;
 		P_CMD_SET_COUNTRY_CHANNEL_POWER_LIMIT_V2_T prTempCmd = NULL;
-		ENUM_BAND_T eBand = (band_idx == IEEE80211_BAND_2GHZ) ?
+		ENUM_BAND_T eBand = (band_idx == KAL_BAND_2GHZ) ?
 				BAND_2G4 : BAND_5G;
 
 		if (!prCmd[band_idx])
@@ -2537,7 +2537,7 @@
 	}
 
 error:
-	for (band_idx = 0; band_idx < IEEE80211_NUM_BANDS; band_idx++) {
+	for (band_idx = 0; band_idx < KAL_NUM_BANDS; band_idx++) {
 		if (prCmd[band_idx])
 			cnmMemFree(prAdapter, prCmd[band_idx]);
 	}
@@ -2718,17 +2718,17 @@
 void rlmDomainAddActiveChannel(u8 band)
 
 {
-	if (band == IEEE80211_BAND_2GHZ)
+	if (band == KAL_BAND_2GHZ)
 		g_mtk_regd_control.n_channel_active_2g += 1;
-	else if (band == IEEE80211_BAND_5GHZ)
+	else if (band == KAL_BAND_5GHZ)
 		g_mtk_regd_control.n_channel_active_5g += 1;
 }
 
 u8 rlmDomainGetActiveChannelCount(u8 band)
 {
-	if (band == IEEE80211_BAND_2GHZ)
+	if (band == KAL_BAND_2GHZ)
 		return g_mtk_regd_control.n_channel_active_2g;
-	else if (band == IEEE80211_BAND_5GHZ)
+	else if (band == KAL_BAND_5GHZ)
 		return g_mtk_regd_control.n_channel_active_5g;
 	else
 		return 0;
@@ -2943,17 +2943,7 @@
 	rlmDomainSetRefWiphy(pWiphy);
 
 	ch_count = 0;
-	for (band_idx = 0; band_idx < IEEE80211_NUM_BANDS; band_idx++) {
-		/**
-		 * enum nl80211_band - Frequency band
-		 * @NL80211_BAND_2GHZ: 2.4 GHz ISM band
-		 * @NL80211_BAND_5GHZ: around 5 GHz band (4.9 - 5.7 GHz)
-		 * @NL80211_BAND_60GHZ: around 60 GHz band (58.32 - 64.80 GHz)
-		 * @NUM_NL80211_BANDS: number of bands, avoid using this in userspace
-		 *	 since newer kernel versions may support more bands
-		 */
-
-		/*select band*/
+	for (band_idx = 0; band_idx < KAL_NUM_BANDS; band_idx++) {
 		sband = pWiphy->bands[band_idx];
 		if (!sband)
 			continue;
@@ -2996,8 +2986,8 @@
 	u32 ch_count, idx;
 	struct channel *pCh;
 
-	prBuff->n_channels_2g = rlmDomainGetActiveChannelCount(IEEE80211_BAND_2GHZ);
-	prBuff->n_channels_5g = rlmDomainGetActiveChannelCount(IEEE80211_BAND_5GHZ);
+	prBuff->n_channels_2g = rlmDomainGetActiveChannelCount(KAL_BAND_2GHZ);
+	prBuff->n_channels_5g = rlmDomainGetActiveChannelCount(KAL_BAND_5GHZ);
 	ch_count = prBuff->n_channels_2g + prBuff->n_channels_5g;
 
 	if (ch_count > max_ch_count) {
diff --git a/os/linux/gl_cfg80211.c b/os/linux/gl_cfg80211.c
index 9952451..587ec05 100644
--- a/os/linux/gl_cfg80211.c
+++ b/os/linux/gl_cfg80211.c
@@ -1649,10 +1649,10 @@
 		prMsgChnlReq->ucChannelNum = nicFreq2ChannelNum(chan->center_freq * 1000);
 
 		switch (chan->band) {
-		case IEEE80211_BAND_2GHZ:
+		case KAL_BAND_2GHZ:
 			prMsgChnlReq->eBand = BAND_2G4;
 			break;
-		case IEEE80211_BAND_5GHZ:
+		case KAL_BAND_5GHZ:
 			prMsgChnlReq->eBand = BAND_5G;
 			break;
 		default:
@@ -3201,17 +3201,7 @@
 	DBGLOG(RLM, INFO, "%s()\n", __func__);
 
 	/* to reset cha->flags*/
-	for (band_idx = 0; band_idx < IEEE80211_NUM_BANDS; band_idx++) {
-		/**
-		 * enum nl80211_band - Frequency band
-		 * @NL80211_BAND_2GHZ: 2.4 GHz ISM band
-		 * @NL80211_BAND_5GHZ: around 5 GHz band (4.9 - 5.7 GHz)
-		 * @NL80211_BAND_60GHZ: around 60 GHz band (58.32 - 64.80 GHz)
-		 * @NUM_NL80211_BANDS: number of bands, avoid using this in userspace
-		 *	 since newer kernel versions may support more bands
-		 */
-
-		/*select band*/
+	for (band_idx = 0; band_idx < KAL_NUM_BANDS; band_idx++) {
 		sband = pWiphy->bands[band_idx];
 		if (!sband)
 			continue;
diff --git a/os/linux/gl_init.c b/os/linux/gl_init.c
index 63617bf..a78c6b1 100644
--- a/os/linux/gl_init.c
+++ b/os/linux/gl_init.c
@@ -182,7 +182,7 @@
 
 #define CHAN2G(_channel, _freq, _flags)         \
 {                                           \
-	.band               = IEEE80211_BAND_2GHZ,  \
+	.band               = KAL_BAND_2GHZ,  \
 	.center_freq        = (_freq),              \
 	.hw_value           = (_channel),           \
 	.flags              = (_flags),             \
@@ -208,7 +208,7 @@
 
 #define CHAN5G(_channel, _flags)                    \
 {                                               \
-	.band               = IEEE80211_BAND_5GHZ,      \
+	.band               = KAL_BAND_5GHZ,      \
 	.center_freq        = 5000 + (5 * (_channel)),  \
 	.hw_value           = (_channel),               \
 	.flags              = (_flags),                 \
@@ -309,7 +309,7 @@
 
 /* public for both Legacy Wi-Fi / P2P access */
 struct ieee80211_supported_band mtk_band_2ghz = {
-	.band = IEEE80211_BAND_2GHZ,
+	.band = KAL_BAND_2GHZ,
 	.channels = mtk_2ghz_channels,
 	.n_channels = ARRAY_SIZE(mtk_2ghz_channels),
 	.bitrates = mtk_g_rates,
@@ -319,7 +319,7 @@
 
 /* public for both Legacy Wi-Fi / P2P access */
 struct ieee80211_supported_band mtk_band_5ghz = {
-	.band = IEEE80211_BAND_5GHZ,
+	.band = KAL_BAND_5GHZ,
 	.channels = mtk_5ghz_channels,
 	.n_channels = ARRAY_SIZE(mtk_5ghz_channels),
 	.bitrates = mtk_a_rates,
@@ -1205,7 +1205,8 @@
 	GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV);
 
 	if (prScanRequest)
-		cfg80211_scan_done(prScanRequest, TRUE);
+		kalCfg80211ScanDone(prScanRequest, TRUE);
+
 	netif_tx_stop_all_queues(prDev);
 
 	return 0;		/* success */
@@ -1469,11 +1470,11 @@
 	prWiphy->max_scan_ssids = 1;	/* FIXME: for combo scan */
 	prWiphy->max_scan_ie_len = 512;
 	prWiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | BIT(NL80211_IFTYPE_ADHOC);
-	prWiphy->bands[IEEE80211_BAND_2GHZ] = &mtk_band_2ghz;
+	prWiphy->bands[KAL_BAND_2GHZ] = &mtk_band_2ghz;
 	/* always assign 5Ghz bands here, if the chip is not support 5Ghz,
-	 *  bands[IEEE80211_BAND_5GHZ] will be assign to NULL
+	 *  bands[KAL_BAND_5GHZ] will be assign to NULL
 	 */
-	prWiphy->bands[IEEE80211_BAND_5GHZ] = &mtk_band_5ghz;
+	prWiphy->bands[KAL_BAND_5GHZ] = &mtk_band_5ghz;
 	prWiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM;
 	prWiphy->cipher_suites = (const u32 *)mtk_cipher_suites;
 	prWiphy->n_cipher_suites = ARRAY_SIZE(mtk_cipher_suites);
@@ -2285,7 +2286,7 @@
 
 		/* Disable 5G band for AIS */
 		if (prAdapter->fgEnable5GBand == FALSE)
-			prWdev->wiphy->bands[IEEE80211_BAND_5GHZ] = NULL;
+			prWdev->wiphy->bands[KAL_BAND_5GHZ] = NULL;
 
 		g_u4HaltFlag = 0;
 
diff --git a/os/linux/gl_kal.c b/os/linux/gl_kal.c
index ab4c051..e519ea3 100644
--- a/os/linux/gl_kal.c
+++ b/os/linux/gl_kal.c
@@ -1035,12 +1035,12 @@
 				prChannel =
 				    ieee80211_get_channel(priv_to_wiphy(prGlueInfo),
 							  ieee80211_channel_to_frequency
-							  (ucChannelNum, IEEE80211_BAND_2GHZ));
+							  (ucChannelNum, KAL_BAND_2GHZ));
 			} else {
 				prChannel =
 				    ieee80211_get_channel(priv_to_wiphy(prGlueInfo),
 							  ieee80211_channel_to_frequency
-							  (ucChannelNum, IEEE80211_BAND_5GHZ));
+							  (ucChannelNum, KAL_BAND_5GHZ));
 			}
 
 			/* ensure BSS exists */
@@ -1087,11 +1087,11 @@
 				if (ucChannelNum <= 14) {
 					prChannel = ieee80211_get_channel(priv_to_wiphy(prGlueInfo),
 									  ieee80211_channel_to_frequency
-									  (ucChannelNum, IEEE80211_BAND_2GHZ));
+									  (ucChannelNum, KAL_BAND_2GHZ));
 				} else {
 					prChannel = ieee80211_get_channel(priv_to_wiphy(prGlueInfo),
 									  ieee80211_channel_to_frequency
-									  (ucChannelNum, IEEE80211_BAND_5GHZ));
+									  (ucChannelNum, KAL_BAND_5GHZ));
 				}
 
 				cfg80211_roamed(prGlueInfo->prDevHandler,
@@ -1182,8 +1182,9 @@
 		GLUE_RELEASE_SPIN_LOCK(prGlueInfo, SPIN_LOCK_NET_DEV);
 
 		/* 2. then CFG80211 Indication */
-		if (prScanRequest != NULL)
-			cfg80211_scan_done(prScanRequest, FALSE);
+		if (prScanRequest)
+			kalCfg80211ScanDone(prScanRequest, FALSE);
+
 		break;
 
 #if 0
@@ -4053,10 +4054,10 @@
 	/* search through channel entries */
 	if (ucChannelNum <= 14) {
 		prChannel =
-		    ieee80211_get_channel(wiphy, ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_2GHZ));
+		    ieee80211_get_channel(wiphy, ieee80211_channel_to_frequency(ucChannelNum, KAL_BAND_2GHZ));
 	} else {
 		prChannel =
-		    ieee80211_get_channel(wiphy, ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_5GHZ));
+		    ieee80211_get_channel(wiphy, ieee80211_channel_to_frequency(ucChannelNum, KAL_BAND_5GHZ));
 	}
 
 	if (prChannel != NULL && prGlueInfo->fgIsRegistered == TRUE) {
@@ -4107,11 +4108,11 @@
 		if (ucChannelNum <= 14) {
 			prChannel =
 			    ieee80211_get_channel(priv_to_wiphy(prGlueInfo),
-						  ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_2GHZ));
+						  ieee80211_channel_to_frequency(ucChannelNum, KAL_BAND_2GHZ));
 		} else {
 			prChannel =
 			    ieee80211_get_channel(priv_to_wiphy(prGlueInfo),
-						  ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_5GHZ));
+						  ieee80211_channel_to_frequency(ucChannelNum, KAL_BAND_5GHZ));
 		}
 
 		switch (eSco) {
@@ -4164,11 +4165,11 @@
 		if (ucChannelNum <= 14) {
 			prChannel =
 			    ieee80211_get_channel(priv_to_wiphy(prGlueInfo),
-						  ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_2GHZ));
+						  ieee80211_channel_to_frequency(ucChannelNum, KAL_BAND_2GHZ));
 		} else {
 			prChannel =
 			    ieee80211_get_channel(priv_to_wiphy(prGlueInfo),
-						  ieee80211_channel_to_frequency(ucChannelNum, IEEE80211_BAND_5GHZ));
+						  ieee80211_channel_to_frequency(ucChannelNum, KAL_BAND_5GHZ));
 		}
 
 		switch (eSco) {
diff --git a/os/linux/gl_p2p.c b/os/linux/gl_p2p.c
index 419fe81..6044cbb 100644
--- a/os/linux/gl_p2p.c
+++ b/os/linux/gl_p2p.c
@@ -1048,8 +1048,8 @@
 	prWiphy->iface_combinations = p_mtk_iface_combinations_p2p;
 	prWiphy->n_iface_combinations = mtk_iface_combinations_p2p_num;
 
-	prWiphy->bands[IEEE80211_BAND_2GHZ] = &mtk_band_2ghz;
-	prWiphy->bands[IEEE80211_BAND_5GHZ] = &mtk_band_5ghz;
+	prWiphy->bands[KAL_BAND_2GHZ] = &mtk_band_2ghz;
+	prWiphy->bands[KAL_BAND_5GHZ] = &mtk_band_5ghz;
 
 	prWiphy->mgmt_stypes = mtk_cfg80211_default_mgmt_stypes;
 	prWiphy->max_remain_on_channel_duration = 5000;
@@ -1364,7 +1364,7 @@
 
 	if (prScanRequest) {
 		DBGLOG(INIT, INFO, "p2pStop and abort scan!!\n");
-		cfg80211_scan_done(prScanRequest, TRUE);
+		kalCfg80211ScanDone(prScanRequest, TRUE);
 	}
 
 	/* 1. stop TX queue */
diff --git a/os/linux/gl_p2p_cfg80211.c b/os/linux/gl_p2p_cfg80211.c
index 58cd879..16b37be 100644
--- a/os/linux/gl_p2p_cfg80211.c
+++ b/os/linux/gl_p2p_cfg80211.c
@@ -174,10 +174,10 @@
 			prRfChnlInfo->ucChannelNum = nicFreq2ChannelNum(channel->center_freq * 1000);
 
 			switch (channel->band) {
-			case IEEE80211_BAND_2GHZ:
+			case KAL_BAND_2GHZ:
 				prRfChnlInfo->eBand = BAND_2G4;
 				break;
-			case IEEE80211_BAND_5GHZ:
+			case KAL_BAND_5GHZ:
 				prRfChnlInfo->eBand = BAND_5G;
 				break;
 			default:
@@ -528,7 +528,7 @@
 		/* Check the wdev with backup scan req due to */
 		/* the kernel will free this request by error handling */
 		if (prP2pGlueDevInfo->rBackupScanRequest.wdev == UnregRoleHander->ieee80211_ptr) {
-			cfg80211_scan_done(&(prP2pGlueDevInfo->rBackupScanRequest), TRUE);
+			kalCfg80211ScanDone(&(prP2pGlueDevInfo->rBackupScanRequest), TRUE);
 			/* clear the request to avoid the Role FSM calls the scan_done again */
 			prP2pGlueDevInfo->prScanRequest = NULL;
 		}
@@ -963,10 +963,10 @@
 			       "Scanning Channel:%d,  freq: %d\n", prRfChannelInfo->ucChannelNum,
 			       prChannel->center_freq);
 			switch (prChannel->band) {
-			case IEEE80211_BAND_2GHZ:
+			case KAL_BAND_2GHZ:
 				prRfChannelInfo->eBand = BAND_2G4;
 				break;
-			case IEEE80211_BAND_5GHZ:
+			case KAL_BAND_5GHZ:
 				prRfChannelInfo->eBand = BAND_5G;
 				break;
 			default:
diff --git a/os/linux/gl_p2p_kal.c b/os/linux/gl_p2p_kal.c
index c1f42ab..938dfa3 100644
--- a/os/linux/gl_p2p_kal.c
+++ b/os/linux/gl_p2p_kal.c
@@ -984,7 +984,7 @@
 			scanReportBss2Cfg80211(prGlueInfo->prAdapter, BSS_TYPE_P2P_DEVICE, NULL);
 
 			DBGLOG(INIT, INFO, "DBG:p2p_cfg_scan_done\n");
-			cfg80211_scan_done(prScanRequest, fgIsAbort);
+			kalCfg80211ScanDone(prScanRequest, fgIsAbort);
 		}
 		KAL_RELEASE_MUTEX(prGlueInfo->prAdapter, MUTEX_DEL_INF);
 
@@ -1384,12 +1384,12 @@
 
 		switch (prChannelInfo->eBand) {
 		case BAND_2G4:
-			prTargetChannelEntry = wiphy->bands[IEEE80211_BAND_2GHZ]->channels;
-			u4TblSize = wiphy->bands[IEEE80211_BAND_2GHZ]->n_channels;
+			prTargetChannelEntry = wiphy->bands[KAL_BAND_2GHZ]->channels;
+			u4TblSize = wiphy->bands[KAL_BAND_2GHZ]->n_channels;
 			break;
 		case BAND_5G:
-			prTargetChannelEntry = wiphy->bands[IEEE80211_BAND_5GHZ]->channels;
-			u4TblSize = wiphy->bands[IEEE80211_BAND_5GHZ]->n_channels;
+			prTargetChannelEntry = wiphy->bands[KAL_BAND_5GHZ]->channels;
+			u4TblSize = wiphy->bands[KAL_BAND_5GHZ]->n_channels;
 			break;
 		default:
 			break;
diff --git a/os/linux/gl_wext_priv.c b/os/linux/gl_wext_priv.c
index a5d38f8..8ebca1b 100644
--- a/os/linux/gl_wext_priv.c
+++ b/os/linux/gl_wext_priv.c
@@ -6752,15 +6752,15 @@
 	 **/
 	if (i4Argc >= 2 && (apcArgv[1][0] == '2') && (apcArgv[1][1] == 'g')) {
 		start_idx = 0;
-		end_idx = rlmDomainGetActiveChannelCount(IEEE80211_BAND_2GHZ);
+		end_idx = rlmDomainGetActiveChannelCount(KAL_BAND_2GHZ);
 	} else if (i4Argc >= 2 && (apcArgv[1][0] == '5') && (apcArgv[1][1] == 'g')) {
-		start_idx = rlmDomainGetActiveChannelCount(IEEE80211_BAND_2GHZ);
-		end_idx = rlmDomainGetActiveChannelCount(IEEE80211_BAND_2GHZ)
-				+ rlmDomainGetActiveChannelCount(IEEE80211_BAND_5GHZ);
+		start_idx = rlmDomainGetActiveChannelCount(KAL_BAND_2GHZ);
+		end_idx = rlmDomainGetActiveChannelCount(KAL_BAND_2GHZ)
+				+ rlmDomainGetActiveChannelCount(KAL_BAND_5GHZ);
 	} else {
 		start_idx = 0;
-		end_idx = rlmDomainGetActiveChannelCount(IEEE80211_BAND_2GHZ)
-				+ rlmDomainGetActiveChannelCount(IEEE80211_BAND_5GHZ);
+		end_idx = rlmDomainGetActiveChannelCount(KAL_BAND_2GHZ)
+				+ rlmDomainGetActiveChannelCount(KAL_BAND_5GHZ);
 		if (i4Argc >= 2)
 			/* Dump only specified channel */
 			u4Ret = kalkStrtou32(apcArgv[1], 0, &ch_num);
diff --git a/os/linux/include/gl_kal.h b/os/linux/include/gl_kal.h
index 4067987..76b1646 100644
--- a/os/linux/include/gl_kal.h
+++ b/os/linux/include/gl_kal.h
@@ -437,6 +437,50 @@
 #define IEEE80211_CHAN_PASSIVE_STR		"NO_IR"
 #endif
 
+#if KERNEL_VERSION(4, 7, 0) <= CFG80211_VERSION_CODE
+/**
+ * enum nl80211_band - Frequency band
+ * @NL80211_BAND_2GHZ: 2.4 GHz ISM band
+ * @NL80211_BAND_5GHZ: around 5 GHz band (4.9 - 5.7 GHz)
+ * @NL80211_BAND_60GHZ: around 60 GHz band (58.32 - 64.80 GHz)
+ * @NUM_NL80211_BANDS: number of bands, avoid using this in userspace
+ *	 since newer kernel versions may support more bands
+ */
+#define KAL_BAND_2GHZ NL80211_BAND_2GHZ
+#define KAL_BAND_5GHZ NL80211_BAND_5GHZ
+#define KAL_NUM_BANDS NUM_NL80211_BANDS
+#else
+#define KAL_BAND_2GHZ IEEE80211_BAND_2GHZ
+#define KAL_BAND_5GHZ IEEE80211_BAND_5GHZ
+#define KAL_NUM_BANDS IEEE80211_NUM_BANDS
+#endif
+
+/**
+ * kalCfg80211ScanDone - abstraction of cfg80211_scan_done
+ *
+ * @request: the corresponding scan request (sanity checked by callers!)
+ * @aborted: set to true if the scan was aborted for any reason,
+ *	userspace will be notified of that
+ *
+ * Since linux-4.8.y the 2nd parameter is changed from bool to
+ * struct cfg80211_scan_info, but we don't use all fields yet.
+ */
+#if KERNEL_VERSION(4, 8, 0) <= CFG80211_VERSION_CODE
+static inline void kalCfg80211ScanDone(struct cfg80211_scan_request *request,
+				       bool aborted)
+{
+	struct cfg80211_scan_info info = { .aborted = aborted };
+
+	cfg80211_scan_done(request, &info);
+}
+#else
+static inline void kalCfg80211ScanDone(struct cfg80211_scan_request *request,
+				       bool aborted)
+{
+	cfg80211_scan_done(request, aborted);
+}
+#endif
+
 /* Consider on some Android platform, using request_firmware_direct()
  * may cause system failed to load firmware. So we still use
  * request_firmware().
diff --git a/os/linux/include/gl_p2p_ioctl.h b/os/linux/include/gl_p2p_ioctl.h
index 4b2462a..550e5e8 100644
--- a/os/linux/include/gl_p2p_ioctl.h
+++ b/os/linux/include/gl_p2p_ioctl.h
@@ -344,7 +344,7 @@
 
 #define CHAN2G(_channel, _freq, _flags)             \
 {                                               \
-	.band               = IEEE80211_BAND_2GHZ,  \
+	.band               = KAL_BAND_2GHZ,  \
 	.center_freq        = (_freq),              \
 	.hw_value           = (_channel),           \
 	.flags              = (_flags),             \
@@ -354,7 +354,7 @@
 
 #define CHAN5G(_channel, _flags)                        \
 {                                                   \
-	.band               = IEEE80211_BAND_5GHZ,      \
+	.band               = KAL_BAND_5GHZ,      \
 	.center_freq        = 5000 + (5 * (_channel)),  \
 	.hw_value           = (_channel),               \
 	.flags              = (_flags),                 \
