wifi: Add for kernel-4.14 support

Update driver for kernel-4.14 support

Test: Build pass and test OK

Change-Id: I748b378bb8246d126b2a375629a98a3a453582f0
CR-Id: AUTO00014958
Signed-off-by: Shengxi Xu <shengxi.xu@mediatek.com>
Reviewed-on: http://gerrit.mediatek.inc:8080/1655166
CheckPatch: Check Patch <srv_checkpatch@mediatek.com>
Reviewed-by: Jiehang Zheng <jiehang.zheng@mediatek.com>
Tested-by: Jiehang Zheng <jiehang.zheng@mediatek.com>
diff --git a/os/linux/gl_cfg80211.c b/os/linux/gl_cfg80211.c
index 8636a9c..71f56ce 100644
--- a/os/linux/gl_cfg80211.c
+++ b/os/linux/gl_cfg80211.c
@@ -127,9 +127,15 @@
  *         others:  failure
  */
 /*----------------------------------------------------------------------------*/
+#if KERNEL_VERSION(4, 14, 0) <= CFG80211_VERSION_CODE
+int
+mtk_cfg80211_change_iface(struct wiphy *wiphy,
+			  struct net_device *ndev, enum nl80211_iftype type, struct vif_params *params)
+#else
 int
 mtk_cfg80211_change_iface(struct wiphy *wiphy,
 			  struct net_device *ndev, enum nl80211_iftype type, u32 *flags, struct vif_params *params)
+#endif
 {
 	P_GLUE_INFO_T prGlueInfo = NULL;
 	WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS;
diff --git a/os/linux/gl_init.c b/os/linux/gl_init.c
index 45ad6a2..59182a5 100644
--- a/os/linux/gl_init.c
+++ b/os/linux/gl_init.c
@@ -955,7 +955,12 @@
 
 	/* 2. indication to cfg80211 */
 	/* 20150205 change cfg80211_sched_scan_stopped to work queue due to sched_scan_mtx dead lock issue */
+	#if KERNEL_VERSION(4, 14, 0) <= CFG80211_VERSION_CODE
+	/*We not support sched scan on 7668, so just change reqid to 0*/
+	cfg80211_sched_scan_stopped(priv_to_wiphy(prGlueInfo), 0);
+	#else
 	cfg80211_sched_scan_stopped(priv_to_wiphy(prGlueInfo));
+	#endif
 	DBGLOG(SCN, INFO,
 	       "cfg80211_sched_scan_stopped event send done WorkQueue thread return from wlanSchedScanStoppedWorkQueue\n");
 	return;
@@ -2402,6 +2407,7 @@
 
 		/* TODO the change schedule API shall be provided by OS glue layer */
 		/* Switch the Wi-Fi task priority to higher priority and change the scheduling method */
+		#if KERNEL_VERSION(4, 14, 0) > CFG80211_VERSION_CODE
 		if (prGlueInfo->prAdapter->rWifiVar.ucThreadPriority > 0) {
 			struct sched_param param = {.sched_priority = prGlueInfo->prAdapter->rWifiVar.ucThreadPriority
 			};
@@ -2418,6 +2424,7 @@
 			       prGlueInfo->prAdapter->rWifiVar.ucThreadPriority,
 			       prGlueInfo->prAdapter->rWifiVar.ucThreadScheduling);
 		}
+		#endif
 
 		g_u4HaltFlag = 0;
 
diff --git a/os/linux/gl_kal.c b/os/linux/gl_kal.c
index 5eb45f5..7b502d5 100644
--- a/os/linux/gl_kal.c
+++ b/os/linux/gl_kal.c
@@ -880,7 +880,9 @@
 
 	}
 #endif
+#if KERNEL_VERSION(4, 14, 0) > CFG80211_VERSION_CODE
 	prNetDev->last_rx = jiffies;
+#endif
 #if CFG_SUPPORT_SNIFFER
 	if (prGlueInfo->fgIsEnableMon) {
 		skb_reset_mac_header(prSkb);
@@ -965,6 +967,9 @@
 	struct cfg80211_bss *bss;
 	UINT_8 ucChannelNum;
 	P_BSS_DESC_T prBssDesc = NULL;
+	#if KERNEL_VERSION(4, 14, 0) <= CFG80211_VERSION_CODE
+	struct cfg80211_roam_info roam_info;
+	#endif
 
 	GLUE_SPIN_LOCK_DECLARATION();
 
@@ -1063,12 +1068,25 @@
 									  (ucChannelNum, KAL_BAND_5GHZ));
 				}
 
+				#if KERNEL_VERSION(4, 14, 0) <= CFG80211_VERSION_CODE
+				memset(&roam_info, 0, sizeof(struct cfg80211_roam_info));
+				roam_info.channel = prChannel;
+				roam_info.bssid = arBssid;
+				roam_info.req_ie = prGlueInfo->aucReqIe;
+				roam_info.req_ie_len = prGlueInfo->u4ReqIeLength;
+				roam_info.resp_ie = prGlueInfo->aucRspIe;
+				roam_info.resp_ie_len = prGlueInfo->u4RspIeLength;
+				cfg80211_roamed(prGlueInfo->prDevHandler,
+						&roam_info,
+						GFP_KERNEL);
+				#else
 				cfg80211_roamed(prGlueInfo->prDevHandler,
 						prChannel,
 						arBssid,
 						prGlueInfo->aucReqIe,
 						prGlueInfo->u4ReqIeLength,
 						prGlueInfo->aucRspIe, prGlueInfo->u4RspIeLength, GFP_KERNEL);
+				#endif
 			} else {
 				cfg80211_connect_result(prGlueInfo->prDevHandler, arBssid,
 							prGlueInfo->aucReqIe,
@@ -4503,9 +4521,13 @@
 VOID kalSchedScanResults(IN P_GLUE_INFO_T prGlueInfo)
 {
 	ASSERT(prGlueInfo);
-
+	
+	#if KERNEL_VERSION(4, 14, 0) <= CFG80211_VERSION_CODE
+	/*We not support sched scan on 7668, so just set reqid to 0*/
+	cfg80211_sched_scan_results(priv_to_wiphy(prGlueInfo), 0);
+	#else
 	cfg80211_sched_scan_results(priv_to_wiphy(prGlueInfo));
-
+	#endif
 }
 
 /*----------------------------------------------------------------------------*/
diff --git a/os/linux/gl_p2p_cfg80211.c b/os/linux/gl_p2p_cfg80211.c
index 3c4b025..1277f75 100644
--- a/os/linux/gl_p2p_cfg80211.c
+++ b/os/linux/gl_p2p_cfg80211.c
@@ -283,10 +283,15 @@
 	}
 }
 
-#if KERNEL_VERSION(4, 1, 0) <= CFG80211_VERSION_CODE
+#if KERNEL_VERSION(4, 14, 0) <= CFG80211_VERSION_CODE
 struct wireless_dev *mtk_p2p_cfg80211_add_iface(struct wiphy *wiphy,
 						const char *name, unsigned char name_assign_type,
-						enum nl80211_iftype type, u32 *flags, struct vif_params *params)
+						enum nl80211_iftype type, struct vif_params *params)
+#elif KERNEL_VERSION(4, 1, 0) <= CFG80211_VERSION_CODE
+	struct wireless_dev *mtk_p2p_cfg80211_add_iface(struct wiphy *wiphy,
+							const char *name, unsigned char name_assign_type,
+							enum nl80211_iftype type, u32 *flags, struct vif_params *params)
+
 #else
 struct wireless_dev *mtk_p2p_cfg80211_add_iface(struct wiphy *wiphy,
 						const char *name,
@@ -379,7 +384,11 @@
 		if (prNewNetDevice->ieee80211_ptr)
 			prNewNetDevice->ieee80211_ptr->iftype = type;
 		/* register destructor function for virtual interface */
+#if KERNEL_VERSION(4, 14, 0) <= CFG80211_VERSION_CODE
+		prNewNetDevice->priv_destructor = mtk_vif_destructor;
+#else
 		prNewNetDevice->destructor = mtk_vif_destructor;
+#endif
 
 		gprP2pRoleWdev[u4Idx] = prWdev;
 		/*prP2pInfo->prRoleWdev[0] = prWdev;*//* TH3 multiple P2P */
@@ -2612,10 +2621,17 @@
 	return i4Rslt;
 }				/* mtk_p2p_cfg80211_disconnect */
 
+#if KERNEL_VERSION(4, 14, 0) <= CFG80211_VERSION_CODE
+int
+mtk_p2p_cfg80211_change_iface(IN struct wiphy *wiphy,
+			      IN struct net_device *ndev,
+			      IN enum nl80211_iftype type, IN struct vif_params *params)
+#else
 int
 mtk_p2p_cfg80211_change_iface(IN struct wiphy *wiphy,
 			      IN struct net_device *ndev,
 			      IN enum nl80211_iftype type, IN u32 *flags, IN struct vif_params *params)
+#endif
 {
 	P_GLUE_INFO_T prGlueInfo = (P_GLUE_INFO_T) NULL;
 	INT_32 i4Rslt = -EINVAL;
diff --git a/os/linux/include/gl_cfg80211.h b/os/linux/include/gl_cfg80211.h
index 097a6fe..5c2d926 100644
--- a/os/linux/include/gl_cfg80211.h
+++ b/os/linux/include/gl_cfg80211.h
@@ -162,9 +162,15 @@
 ********************************************************************************
 */
 /* cfg80211 hooks */
+#if KERNEL_VERSION(4, 14, 0) <= CFG80211_VERSION_CODE
+int
+mtk_cfg80211_change_iface(struct wiphy *wiphy,
+			  struct net_device *ndev, enum nl80211_iftype type, struct vif_params *params);
+#else
 int
 mtk_cfg80211_change_iface(struct wiphy *wiphy,
 			  struct net_device *ndev, enum nl80211_iftype type, u32 *flags, struct vif_params *params);
+#endif
 
 int
 mtk_cfg80211_add_key(struct wiphy *wiphy,
diff --git a/os/linux/include/gl_p2p_ioctl.h b/os/linux/include/gl_p2p_ioctl.h
index 414f383..c42e660 100644
--- a/os/linux/include/gl_p2p_ioctl.h
+++ b/os/linux/include/gl_p2p_ioctl.h
@@ -369,7 +369,11 @@
 
 #if (CFG_ENABLE_WIFI_DIRECT_CFG_80211 != 0)
 
-#if KERNEL_VERSION(4, 1, 0) <= CFG80211_VERSION_CODE
+#if KERNEL_VERSION(4, 14, 0) <= CFG80211_VERSION_CODE
+struct wireless_dev *mtk_p2p_cfg80211_add_iface(struct wiphy *wiphy,
+						const char *name, unsigned char name_assign_type,
+						enum nl80211_iftype type, struct vif_params *params);
+#elif KERNEL_VERSION(4, 1, 0) <= CFG80211_VERSION_CODE
 struct wireless_dev *mtk_p2p_cfg80211_add_iface(struct wiphy *wiphy,
 						const char *name, unsigned char name_assign_type,
 						enum nl80211_iftype type, u32 *flags, struct vif_params *params);
@@ -379,10 +383,17 @@
 						enum nl80211_iftype type, u32 *flags, struct vif_params *params);
 #endif
 
+#if KERNEL_VERSION(4, 14, 0) <= CFG80211_VERSION_CODE
+int
+mtk_p2p_cfg80211_change_iface(struct wiphy *wiphy,
+			      struct net_device *ndev,
+			      enum nl80211_iftype type, struct vif_params *params);
+#else
 int
 mtk_p2p_cfg80211_change_iface(struct wiphy *wiphy,
 			      struct net_device *ndev,
 			      enum nl80211_iftype type, u32 *flags, struct vif_params *params);
+#endif
 
 int mtk_p2p_cfg80211_del_iface(struct wiphy *wiphy, struct wireless_dev *wdev);