diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
index 9818d79..dda8a94 100644
--- a/CORE/HDD/src/wlan_hdd_assoc.c
+++ b/CORE/HDD/src/wlan_hdd_assoc.c
@@ -762,8 +762,8 @@
 	adf_os_mem_zero(hdd_vht_ops, sizeof(struct ieee80211_vht_operation));
 
 	hdd_vht_ops->chan_width = roam_vht_ops->chanWidth;
-	hdd_vht_ops->center_freq_seg1_idx = roam_vht_ops->chanCenterFreqSeg1;
-	hdd_vht_ops->center_freq_seg2_idx = roam_vht_ops->chanCenterFreqSeg2;
+	hdd_vht_ops->center_freq_seg0_idx = roam_vht_ops->chanCenterFreqSeg1;
+	hdd_vht_ops->center_freq_seg1_idx = roam_vht_ops->chanCenterFreqSeg2;
 	hdd_vht_ops->basic_mcs_set = roam_vht_ops->basicMCSSet;
 }
 
@@ -2070,6 +2070,7 @@
     uint8_t *buf_ptr, ssid_ie_len;
     struct cfg80211_bss *bss = NULL;
     uint8_t *final_req_ie = NULL;
+    struct cfg80211_roam_info roam_info;
     tCsrRoamConnectedProfile roam_profile;
     tHalHandle hal_handle = WLAN_HDD_GET_HAL_CTX(pAdapter);
 
@@ -2147,9 +2148,13 @@
     hddLog(LOG2, FL("Req RSN IE:"));
     VOS_TRACE_HEX_DUMP(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_DEBUG,
        final_req_ie, (ssid_ie_len +reqRsnLength));
-    cfg80211_roamed_bss(dev, bss,
-       final_req_ie, (ssid_ie_len + reqRsnLength),
-       rspRsnIe, rspRsnLength, GFP_KERNEL);
+
+    roam_info.bss = bss;
+    roam_info.req_ie = final_req_ie;
+    roam_info.req_ie_len = (ssid_ie_len + reqRsnLength);
+    roam_info.resp_ie = rspRsnIe;
+    roam_info.resp_ie_len = rspRsnLength;
+    cfg80211_roamed(dev, &roam_info, GFP_KERNEL);
 
     hdd_send_roam_auth_event(pHddCtx, pCsrRoamInfo->bssid,
                     reqRsnIe, reqRsnLength, rspRsnIe,
@@ -2553,6 +2558,7 @@
                     if ( !hddDisconInProgress )
                     {
                         struct cfg80211_bss *roam_bss;
+			struct cfg80211_roam_info roam_info;
 
                         /* After roaming is completed, active session count is
                          * incremented as a part of connect indication but
@@ -2577,10 +2583,13 @@
                                pConnectedProfile->SSID.ssId,
                                pRoamInfo->u.
                                pConnectedProfile->SSID.length);
-                        cfg80211_roamed_bss(dev, roam_bss,
-                               pFTAssocReq, assocReqlen,
-                               pFTAssocRsp, assocRsplen,
-                               GFP_KERNEL);
+
+			roam_info.bss = roam_bss;
+			roam_info.req_ie = pFTAssocReq;
+			roam_info.req_ie_len = assocReqlen;
+			roam_info.resp_ie = pFTAssocRsp;
+			roam_info.resp_ie_len = assocRsplen;
+			cfg80211_roamed(dev, &roam_info, GFP_KERNEL);
                     }
                     if (sme_GetFTPTKState(WLAN_HDD_GET_HAL_CTX(pAdapter),
                                           pAdapter->sessionId))
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 50d5ae0..b1d2647 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -1740,7 +1740,7 @@
 
     if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_SET_SCANNING_MAC_OUI_MAX,
                     data, data_len,
-                    NULL)) {
+                    NULL, NULL)) {
         hddLog(LOGE, FL("Invalid ATTR"));
         return -EINVAL;
     }
@@ -1857,7 +1857,7 @@
         return ret;
 
     if (nla_parse(tb, MAX_CONCURRENT_MATRIX,
-                  data, data_len, wlan_hdd_get_concurrency_matrix_policy)) {
+                  data, data_len, wlan_hdd_get_concurrency_matrix_policy, NULL)) {
         hddLog(LOGE, FL("Invalid ATTR"));
         return -EINVAL;
     }
@@ -2010,7 +2010,7 @@
 
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_ROAMING_PARAM_MAX,
 		data, data_len,
-		wlan_hdd_set_roam_param_policy)) {
+		wlan_hdd_set_roam_param_policy, NULL)) {
 		hddLog(LOGE, FL("Invalid ATTR"));
 		return -EINVAL;
 	}
@@ -2049,7 +2049,7 @@
 				if (nla_parse(tb2,
 					QCA_WLAN_VENDOR_ATTR_ROAM_SUBCMD_MAX,
 					nla_data(curr_attr), nla_len(curr_attr),
-					wlan_hdd_set_roam_param_policy)) {
+					wlan_hdd_set_roam_param_policy, NULL)) {
 					hddLog(LOGE, FL("nla_parse failed"));
 					goto fail;
 				}
@@ -2213,7 +2213,7 @@
 			if (nla_parse(tb2,
 				QCA_WLAN_VENDOR_ATTR_ROAMING_PARAM_MAX,
 				nla_data(curr_attr), nla_len(curr_attr),
-				wlan_hdd_set_roam_param_policy)) {
+				wlan_hdd_set_roam_param_policy, NULL)) {
 				hddLog(LOGE, FL("nla_parse failed"));
 				goto fail;
 			}
@@ -2275,7 +2275,7 @@
 				if (nla_parse(tb2,
 					QCA_WLAN_VENDOR_ATTR_ROAMING_PARAM_MAX,
 					nla_data(curr_attr), nla_len(curr_attr),
-					wlan_hdd_set_roam_param_policy)) {
+					wlan_hdd_set_roam_param_policy, NULL)) {
 					hddLog(LOGE, FL("nla_parse failed"));
 					goto fail;
 				}
@@ -2733,7 +2733,7 @@
     }
     if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
                     data, data_len,
-                    wlan_hdd_extscan_config_policy)) {
+                    wlan_hdd_extscan_config_policy, NULL)) {
         hddLog(VOS_TRACE_LEVEL_ERROR, FL("Invalid ATTR"));
         return -EINVAL;
     }
@@ -2875,7 +2875,7 @@
 		return -ENOTSUPP;
 	}
 	if (nla_parse(tb, PARAM_MAX, data, data_len,
-			wlan_hdd_extscan_config_policy)) {
+			wlan_hdd_extscan_config_policy, NULL)) {
 		hddLog(LOGE, FL("Invalid ATTR"));
 		return -EINVAL;
 	}
@@ -3011,7 +3011,7 @@
 
     if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
                     data, data_len,
-                    wlan_hdd_extscan_config_policy)) {
+                    wlan_hdd_extscan_config_policy, NULL)) {
         hddLog(VOS_TRACE_LEVEL_ERROR, FL("Invalid ATTR"));
         return -EINVAL;
     }
@@ -3073,7 +3073,7 @@
 
         if (nla_parse(tb2, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
                 nla_data(apTh), nla_len(apTh),
-                wlan_hdd_extscan_config_policy)) {
+                wlan_hdd_extscan_config_policy, NULL)) {
             hddLog(LOGE, FL("nla_parse failed"));
             goto fail;
         }
@@ -3208,7 +3208,7 @@
 
     if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
                     data, data_len,
-                    wlan_hdd_extscan_config_policy)) {
+                    wlan_hdd_extscan_config_policy, NULL)) {
         hddLog(LOGE, FL("Invalid ATTR"));
         return -EINVAL;
     }
@@ -3291,7 +3291,7 @@
         if (nla_parse(tb2,
                 QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
                 nla_data(apTh), nla_len(apTh),
-                wlan_hdd_extscan_config_policy)) {
+                wlan_hdd_extscan_config_policy, NULL)) {
             hddLog(LOGE, FL("nla_parse failed"));
             goto fail;
         }
@@ -3421,7 +3421,7 @@
 
     if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
                   data, data_len,
-                  wlan_hdd_extscan_config_policy)) {
+                  wlan_hdd_extscan_config_policy, NULL)) {
         hddLog(LOGE, FL("Invalid ATTR"));
         return -EINVAL;
     }
@@ -3672,7 +3672,7 @@
 		if (nla_parse(bucket,
 			      QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
 			      nla_data(buckets), nla_len(buckets),
-			      wlan_hdd_extscan_config_policy)) {
+			      wlan_hdd_extscan_config_policy, NULL)) {
 			hddLog(LOGE, FL("nla_parse failed"));
 			return -EINVAL;
 		}
@@ -3895,7 +3895,7 @@
 			if (nla_parse(channel,
 				QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
 				nla_data(channels), nla_len(channels),
-				wlan_hdd_extscan_config_policy)) {
+				wlan_hdd_extscan_config_policy, NULL)) {
 				hddLog(LOGE, FL("nla_parse failed"));
 				return -EINVAL;
 			}
@@ -4106,7 +4106,7 @@
 	}
 
 	if (nla_parse(tb, PARAM_MAX, data, data_len,
-		wlan_hdd_extscan_config_policy)) {
+		wlan_hdd_extscan_config_policy, NULL)) {
 		hddLog(LOGE, FL("Invalid ATTR"));
 		return -EINVAL;
 	}
@@ -4320,7 +4320,7 @@
 		return -ENOTSUPP;
 	}
 	if (nla_parse(tb, PARAM_MAX, data, data_len,
-			wlan_hdd_extscan_config_policy)) {
+			wlan_hdd_extscan_config_policy, NULL)) {
 		hddLog(LOGE, FL("Invalid ATTR"));
 		return -EINVAL;
 	}
@@ -4440,7 +4440,7 @@
     }
     if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
                     data, data_len,
-                    wlan_hdd_extscan_config_policy)) {
+                    wlan_hdd_extscan_config_policy, NULL)) {
         hddLog(LOGE, FL("Invalid ATTR"));
         return -EINVAL;
     }
@@ -4555,7 +4555,7 @@
     }
     if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
                     data, data_len,
-                    wlan_hdd_extscan_config_policy)) {
+                    wlan_hdd_extscan_config_policy, NULL)) {
         hddLog(LOGE, FL("Invalid ATTR"));
         return -EINVAL;
     }
@@ -4679,7 +4679,7 @@
 
 		if (nla_parse(network, QCA_WLAN_VENDOR_ATTR_PNO_MAX,
 			      nla_data(networks), nla_len(networks),
-			      wlan_hdd_pno_config_policy)) {
+			      wlan_hdd_pno_config_policy, NULL)) {
 			hddLog(LOGE, FL("nla_parse failed"));
 			return -EINVAL;
 		}
@@ -4774,7 +4774,7 @@
 
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_PNO_MAX,
 		      data, data_len,
-		      wlan_hdd_pno_config_policy)) {
+		      wlan_hdd_pno_config_policy, NULL)) {
 		hddLog(LOGE, FL("Invalid ATTR"));
 		return -EINVAL;
 	}
@@ -4981,7 +4981,7 @@
 		if (nla_parse(network,
 			QCA_WLAN_VENDOR_ATTR_PNO_MAX,
 			nla_data(networks), nla_len(networks),
-			wlan_hdd_pno_config_policy)) {
+			wlan_hdd_pno_config_policy, NULL)) {
 			hddLog(LOGE, FL("nla_parse failed"));
 			return -EINVAL;
 		}
@@ -5082,7 +5082,7 @@
 	}
 
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_PNO_MAX, data, data_len,
-		wlan_hdd_pno_config_policy)) {
+		wlan_hdd_pno_config_policy, NULL)) {
 		hddLog(LOGE, FL("Invalid ATTR"));
 		return -EINVAL;
 	}
@@ -5203,7 +5203,7 @@
 	}
 
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_PNO_MAX, data, data_len,
-		wlan_hdd_extscan_config_policy)) {
+		wlan_hdd_extscan_config_policy, NULL)) {
 		hddLog(LOGE, FL("Invalid ATTR"));
 		return -EINVAL;
 	}
@@ -6420,7 +6420,7 @@
 	       data_len);
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_MAX,
 		      (struct nlattr *)data, data_len,
-		      qca_wlan_vendor_ll_ext_policy)) {
+		      qca_wlan_vendor_ll_ext_policy, NULL)) {
 		hddLog(VOS_TRACE_LEVEL_ERROR,
 		       FL("maximum attribute not present"));
 		return -EINVAL;
@@ -7410,7 +7410,7 @@
 
     if (nla_parse(tb_vendor, QCA_WLAN_VENDOR_ATTR_LL_STATS_SET_MAX,
                   (struct nlattr *)data,
-                  data_len, qca_wlan_vendor_ll_set_policy))
+                  data_len, qca_wlan_vendor_ll_set_policy, NULL))
     {
         hddLog(VOS_TRACE_LEVEL_ERROR, FL("maximum attribute not present"));
         return -EINVAL;
@@ -7547,7 +7547,7 @@
 
     if (nla_parse(tb_vendor, QCA_WLAN_VENDOR_ATTR_LL_STATS_GET_MAX,
                   (struct nlattr *)data,
-                  data_len, qca_wlan_vendor_ll_get_policy))
+                  data_len, qca_wlan_vendor_ll_get_policy, NULL))
     {
         hddLog(VOS_TRACE_LEVEL_ERROR, FL("max attribute not present"));
         return -EINVAL;
@@ -7672,7 +7672,7 @@
 
     if (nla_parse(tb_vendor, QCA_WLAN_VENDOR_ATTR_LL_STATS_CLR_MAX,
                   (struct nlattr *)data,
-                  data_len, qca_wlan_vendor_ll_clr_policy))
+                  data_len, qca_wlan_vendor_ll_clr_policy, NULL))
     {
         hddLog(VOS_TRACE_LEVEL_ERROR, FL("STATS_CLR_MAX is not present"));
         return -EINVAL;
@@ -8018,7 +8018,7 @@
 		return -EINVAL;
 
 	if (nla_parse(tb_vendor, QCA_WLAN_VENDOR_ATTR_WIFI_INFO_GET_MAX, data,
-		      data_len, qca_wlan_vendor_get_wifi_info_policy)) {
+		      data_len, qca_wlan_vendor_get_wifi_info_policy, NULL)) {
 		hddLog(LOGE, FL("WIFI_INFO_GET NL CMD parsing failed"));
 		return -EINVAL;
 	}
@@ -8282,7 +8282,7 @@
     }
     if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_TDLS_GET_STATUS_MAX,
                     data, data_len,
-                    wlan_hdd_tdls_config_get_status_policy)) {
+                    wlan_hdd_tdls_config_get_status_policy, NULL)) {
         hddLog(VOS_TRACE_LEVEL_ERROR, FL("Invalid attribute"));
         return -EINVAL;
     }
@@ -8469,7 +8469,7 @@
     }
     if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_TDLS_ENABLE_MAX,
                     data, data_len,
-                    wlan_hdd_tdls_config_enable_policy)) {
+                    wlan_hdd_tdls_config_enable_policy, NULL)) {
         hddLog(VOS_TRACE_LEVEL_ERROR, FL("Invalid ATTR"));
         return -EINVAL;
     }
@@ -8585,7 +8585,7 @@
     }
     if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_TDLS_DISABLE_MAX,
                     data, data_len,
-                    wlan_hdd_tdls_config_disable_policy)) {
+                    wlan_hdd_tdls_config_disable_policy, NULL)) {
         hddLog(VOS_TRACE_LEVEL_ERROR, FL("Invalid ATTR"));
         return -EINVAL;
     }
@@ -8771,7 +8771,7 @@
 
     if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_SET_NO_DFS_FLAG_MAX,
                     data, data_len,
-                    wlan_hdd_set_no_dfs_flag_config_policy)) {
+                    wlan_hdd_set_no_dfs_flag_config_policy, NULL)) {
         hddLog(LOGE, FL("invalid attr"));
         return -EINVAL;
     }
@@ -9382,7 +9382,7 @@
 	vos_mem_zero(&sap_config->acs_cfg, sizeof(struct sap_acs_cfg));
 
 	status = nla_parse(tb, QCA_WLAN_VENDOR_ATTR_ACS_MAX, data, data_len,
-						wlan_hdd_cfg80211_do_acs_policy);
+						wlan_hdd_cfg80211_do_acs_policy, NULL);
 	if (status) {
 		hddLog(VOS_TRACE_LEVEL_ERROR, FL("Invalid ATTR"));
 		goto out;
@@ -10012,7 +10012,7 @@
 
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_CONFIG_MAX,
 		      data, data_len,
-		      wlan_hdd_wifi_config_policy)) {
+		      wlan_hdd_wifi_config_policy, NULL)) {
 		hddLog(LOGE, FL("invalid attr"));
 		return -EINVAL;
 	}
@@ -10608,7 +10608,7 @@
 		return -EINVAL;
 
 	if (nla_parse(tb_vendor, QCA_WLAN_VENDOR_ATTR_CONFIG_MAX, data,
-		      data_len, wlan_hdd_wifi_config_policy)) {
+		      data_len, wlan_hdd_wifi_config_policy, NULL)) {
 		hddLog(LOGE, FL("WIFI_CFG_GET NL CMD parsing failed"));
 		return -EINVAL;
 	}
@@ -10840,7 +10840,7 @@
 
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_WIFI_LOGGER_START_MAX,
 		      data, data_len,
-		      qca_wlan_vendor_wifi_logger_start_policy)) {
+		      qca_wlan_vendor_wifi_logger_start_policy, NULL)) {
 		hddLog(LOGE, FL("Invalid attribute"));
 		return -EINVAL;
 	}
@@ -10940,7 +10940,7 @@
 		return -EINVAL;
 
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_MAX, data, data_len,
-		      qca_wlan_vendor_attr_policy)) {
+		      qca_wlan_vendor_attr_policy, NULL)) {
 		hddLog(VOS_TRACE_LEVEL_ERROR, FL("Invalid attribute"));
 		return -EINVAL;
 	}
@@ -11166,7 +11166,7 @@
 
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_WIFI_LOGGER_GET_RING_DATA_MAX,
 			data, data_len,
-			qca_wlan_vendor_wifi_logger_get_ring_data_policy)) {
+			qca_wlan_vendor_wifi_logger_get_ring_data_policy, NULL)) {
 		hddLog(LOGE, FL("Invalid attribute"));
 		return -EINVAL;
 	}
@@ -11571,7 +11571,7 @@
 		return -ENOTSUPP;
 	}
 
-	if (nla_parse(tb, PARAM_MAX, data, data_len, policy)) {
+	if (nla_parse(tb, PARAM_MAX, data, data_len, policy, NULL)) {
 		hddLog(LOGE, FL("Invalid ATTR"));
 		return -EINVAL;
 	}
@@ -11681,7 +11681,7 @@
 		return -ENOTSUPP;
 	}
 
-	if (nla_parse(tb, PARAM_MAX, data, data_len, policy)) {
+	if (nla_parse(tb, PARAM_MAX, data, data_len, policy, NULL)) {
 		hddLog(LOGE, FL("Invalid ATTR"));
 		return -EINVAL;
 	}
@@ -11940,7 +11940,7 @@
 
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_ND_OFFLOAD_MAX,
 			(struct nlattr *)data,
-			data_len, ns_offload_set_policy)) {
+			data_len, ns_offload_set_policy, NULL)) {
 		hddLog(LOGE, FL("nla_parse failed"));
 		return -EINVAL;
 	}
@@ -12016,7 +12016,7 @@
 	if (ret)
 		return ret;
 
-	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_MAX, data, data_len, policy)) {
+	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_MAX, data, data_len, policy, NULL)) {
 		hddLog(LOGE, FL("Invalid ATTR"));
 		return -EINVAL;
 	}
@@ -12369,7 +12369,7 @@
 	}
 
 	if (nla_parse(tb, BPF_MAX, data, data_len,
-				wlan_hdd_bpf_offload_policy)) {
+				wlan_hdd_bpf_offload_policy, NULL)) {
 		hddLog(LOGE, FL("Invalid ATTR"));
 		return -EINVAL;
 	}
@@ -12819,7 +12819,7 @@
 
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_ACS_DFS_MAX,
 				data, data_len,
-				wlan_hdd_set_acs_dfs_config_policy)) {
+				wlan_hdd_set_acs_dfs_config_policy, NULL)) {
 		hddLog(LOGE, FL("invalid attr"));
 		return -EINVAL;
 	}
@@ -12992,7 +12992,7 @@
 		return -EINVAL;
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_STA_CONNECT_ROAM_POLICY_MAX,
 				data, data_len,
-				wlan_hdd_set_sta_roam_config_policy)) {
+				wlan_hdd_set_sta_roam_config_policy, NULL)) {
 		hddLog(LOGE, FL("invalid attr"));
 		return -EINVAL;
         }
@@ -13246,7 +13246,7 @@
 
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_SAP_CONFIG_MAX,
 				data, data_len,
-				wlan_hdd_sap_config_policy)) {
+				wlan_hdd_sap_config_policy, NULL)) {
 		hddLog(LOGE, FL("invalid attr"));
 		return -EINVAL;
 	}
@@ -14184,7 +14184,7 @@
 		goto out;
 
 	status = nla_parse(tb, STATION_MAX, data, data_len,
-			   hdd_get_station_policy);
+			   hdd_get_station_policy, NULL);
 	if (status) {
 		hddLog(LOGE, FL("Invalid ATTR"));
 		goto out;
@@ -14330,7 +14330,7 @@
 	}
 
 	ret = nla_parse(tb, QCA_WLAN_VENDOR_ATTR_MAX, data, data_len,
-			qca_wlan_vendor_attr);
+			qca_wlan_vendor_attr, NULL);
 	if (ret) {
 		hddLog(LOGE, FL("Invalid ATTR"));
 		return -EINVAL;
@@ -14440,7 +14440,7 @@
 	adapter = WLAN_HDD_GET_PRIV_PTR(dev);
 
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_TXPOWER_SCALE_MAX,
-		      data, data_len, txpower_scale_policy)) {
+		      data, data_len, txpower_scale_policy, NULL)) {
 		hddLog(LOGE, "Invalid ATTR");
 		return -EINVAL;
 	}
@@ -14526,7 +14526,7 @@
 	adapter = WLAN_HDD_GET_PRIV_PTR(dev);
 
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_TXPOWER_SCALE_DECR_DB_MAX,
-		      data, data_len, txpower_scale_decr_db_policy)) {
+		      data, data_len, txpower_scale_decr_db_policy, NULL)) {
 		hddLog(LOGE, "Invalid ATTR");
 		return -EINVAL;
 	}
@@ -14649,7 +14649,7 @@
 		return retval;
 
 	/* nla validation doesn't do exact lengths, do the validation later */
-	retval = nla_parse(tb, QCA_WLAN_VENDOR_ATTR_MAX, data, data_len, NULL);
+	retval = nla_parse(tb, QCA_WLAN_VENDOR_ATTR_MAX, data, data_len, NULL, NULL);
 	if (retval) {
 		hddLog(LOGE, FL("Invalid ATTR"));
 		return retval;
@@ -14768,7 +14768,7 @@
 		return -EINVAL;
 	}
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_FLUSH_PENDING_MAX, data,
-		      data_len, qca_wlan_vendor_peer_flush_pending_policy)) {
+		      data_len, qca_wlan_vendor_peer_flush_pending_policy, NULL)) {
 		hddLog(LOGE, FL("Invalid attribute"));
 		return -EINVAL;
 	}
@@ -15571,7 +15571,7 @@
 #ifdef FEATURE_WLAN_SCAN_PNO
     if (pCfg->configPNOScanSupport)
     {
-        wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN;
+	wiphy->max_sched_scan_reqs = 1;
         wiphy->max_sched_scan_ssids = SIR_PNO_MAX_SUPP_NETWORKS;
         wiphy->max_match_sets       = SIR_PNO_MAX_SUPP_NETWORKS;
         wiphy->max_sched_scan_ie_len = SIR_MAC_MAX_IE_LENGTH;
@@ -15860,7 +15860,7 @@
     * control comes here. Here just we need to clear it if firmware doesn't
     * have PNO support. */
    if (!pCfg->PnoOffload) {
-       wiphy->flags &= ~WIPHY_FLAG_SUPPORTS_SCHED_SCAN;
+       wiphy->max_sched_scan_reqs = 1;
        wiphy->max_sched_scan_ssids = 0;
        wiphy->max_match_sets = 0;
        wiphy->max_sched_scan_ie_len = 0;
@@ -20714,7 +20714,7 @@
         return NULL;
     }
 
-    chan = __ieee80211_get_channel(wiphy, freq);
+    chan = ieee80211_get_channel(wiphy, freq);
     /*
      * When the band is changed on the fly using the GUI, three things are done
      * 1. scan abort
@@ -27497,7 +27497,7 @@
          */
         hdd_prevent_suspend_timeout(1000, WIFI_POWER_EVENT_WAKELOCK_SCAN);
     }
-    cfg80211_sched_scan_results(pHddCtx->wiphy);
+    cfg80211_sched_scan_results(pHddCtx->wiphy, 0);
     VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
             "%s: cfg80211 scan result database updated", __func__);
 }
@@ -29394,7 +29394,7 @@
 
     ENTER();
 
-    err = nla_parse(tb, WLAN_HDD_TM_ATTR_MAX, data, len, wlan_hdd_tm_policy);
+    err = nla_parse(tb, WLAN_HDD_TM_ATTR_MAX, data, len, wlan_hdd_tm_policy, NULL);
     if (err) {
         hddLog(LOGE, FL("Testmode INV ATTR"));
         return err;
@@ -30054,7 +30054,7 @@
                  */
                 hdd_prevent_suspend_timeout(1000,
                                          WIFI_POWER_EVENT_WAKELOCK_RESUME_WLAN);
-                cfg80211_sched_scan_results(pHddCtx->wiphy);
+                cfg80211_sched_scan_results(pHddCtx->wiphy, 0);
             }
 
             hddLog(LOG1, FL("cfg80211 scan result database updated"));
diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c
index 62d842d..75dae1a 100644
--- a/CORE/HDD/src/wlan_hdd_early_suspend.c
+++ b/CORE/HDD/src/wlan_hdd_early_suspend.c
@@ -2162,7 +2162,7 @@
    /* Wait for TLshim RX to exit */
    hddLog(VOS_TRACE_LEVEL_FATAL, "%s: Shutting down TLshim RX thread",
           __func__);
-   unregister_hotcpu_notifier(vosSchedContext->cpuHotPlugNotifier);
+   //unregister_hotcpu_notifier(vosSchedContext->cpuHotPlugNotifier);
    set_bit(RX_SHUTDOWN_EVENT, &vosSchedContext->tlshimRxEvtFlg);
    set_bit(RX_POST_EVENT, &vosSchedContext->tlshimRxEvtFlg);
    wake_up_interruptible(&vosSchedContext->tlshimRxWaitQueue);
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index 8bea288..d29c92d 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -1494,7 +1494,7 @@
 
 	freq = vos_chan_to_freq(oper_chan);
 
-	chan = __ieee80211_get_channel(hostapd_adapter->wdev.wiphy, freq);
+	chan = ieee80211_get_channel(hostapd_adapter->wdev.wiphy, freq);
 
 	if (!chan) {
 		VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
@@ -7941,7 +7941,7 @@
         vos_mem_copy(pHostapdAdapter->macAddressCurrent.bytes, (void *)macAddr, sizeof(tSirMacAddr));
 
         pHostapdAdapter->offloads_configured = FALSE;
-        pWlanHostapdDev->destructor = free_netdev;
+        pWlanHostapdDev->priv_destructor = free_netdev;
         pWlanHostapdDev->ieee80211_ptr = &pHostapdAdapter->wdev ;
         pHostapdAdapter->wdev.wiphy = pHddCtx->wiphy;
         pHostapdAdapter->wdev.netdev =  pWlanHostapdDev;
diff --git a/CORE/HDD/src/wlan_hdd_ipa.c b/CORE/HDD/src/wlan_hdd_ipa.c
index 8837214..5e12d2a 100644
--- a/CORE/HDD/src/wlan_hdd_ipa.c
+++ b/CORE/HDD/src/wlan_hdd_ipa.c
@@ -3058,7 +3058,7 @@
 		++adapter->hdd_stats.hddTxRxStats.rxRefused[cpu_index];
 
 	HDD_IPA_INCREASE_NET_SEND_COUNT(hdd_ipa);
-	adapter->dev->last_rx = jiffies;
+	//adapter->dev->last_rx = jiffies;
 }
 
 VOS_STATUS hdd_ipa_process_rxt(v_VOID_t *vosContext, adf_nbuf_t rx_buf_list,
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 00dca1a..d0d590c 100755
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -11022,7 +11022,7 @@
       pWlanDev->features |= NETIF_F_RXCSUM;
       hdd_set_station_ops( pAdapter->dev );
 
-      pWlanDev->destructor = free_netdev;
+      pWlanDev->priv_destructor = free_netdev;
       pWlanDev->ieee80211_ptr = &pAdapter->wdev ;
       pWlanDev->tx_queue_len = HDD_NETDEV_TX_QUEUE_LEN;
       pAdapter->wdev.wiphy = pHddCtx->wiphy;
@@ -11095,7 +11095,7 @@
 	   pwlan_dev->features |= NETIF_F_RXCSUM;
 	   hdd_set_monitor_ops(pAdapter->dev);
 
-	   pwlan_dev->destructor = free_netdev;
+	   pwlan_dev->priv_destructor = free_netdev;
 	   pwlan_dev->ieee80211_ptr = &pAdapter->wdev;
 	   pwlan_dev->tx_queue_len = HDD_NETDEV_TX_QUEUE_LEN;
 	   pAdapter->wdev.wiphy = pHddCtx->wiphy;
diff --git a/CORE/HDD/src/wlan_hdd_nan_datapath.c b/CORE/HDD/src/wlan_hdd_nan_datapath.c
index feb1a2b..d3a0e3c 100644
--- a/CORE/HDD/src/wlan_hdd_nan_datapath.c
+++ b/CORE/HDD/src/wlan_hdd_nan_datapath.c
@@ -1928,7 +1928,7 @@
 	}
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_NDP_PARAMS_MAX,
 			data, data_len,
-			qca_wlan_vendor_ndp_policy)) {
+			qca_wlan_vendor_ndp_policy, NULL)) {
 		hddLog(LOGE, FL("Invalid NDP vendor command attributes"));
 		return -EINVAL;
 	}
diff --git a/CORE/HDD/src/wlan_hdd_ocb.c b/CORE/HDD/src/wlan_hdd_ocb.c
index 8de1fd9..f021c92 100644
--- a/CORE/HDD/src/wlan_hdd_ocb.c
+++ b/CORE/HDD/src/wlan_hdd_ocb.c
@@ -991,7 +991,7 @@
 	/* Parse the netlink message */
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_MAX,
 			data,
-			data_len, qca_wlan_vendor_ocb_set_config_policy)) {
+			data_len, qca_wlan_vendor_ocb_set_config_policy, NULL)) {
 		hddLog(LOGE, FL("Invalid ATTR"));
 		return -EINVAL;
 	}
@@ -1229,7 +1229,7 @@
 	/* Parse the netlink message */
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_OCB_SET_UTC_TIME_MAX,
 		      data,
-		      data_len, qca_wlan_vendor_ocb_set_utc_time_policy)) {
+		      data_len, qca_wlan_vendor_ocb_set_utc_time_policy, NULL)) {
 		hddLog(LOGE, FL("Invalid ATTR"));
 		return -EINVAL;
 	}
@@ -1354,7 +1354,7 @@
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_OCB_START_TIMING_ADVERT_MAX,
 		      data,
 		      data_len,
-		      qca_wlan_vendor_ocb_start_timing_advert_policy)) {
+		      qca_wlan_vendor_ocb_start_timing_advert_policy, NULL)) {
 		hddLog(LOGE, FL("Invalid ATTR"));
 		goto fail;
 	}
@@ -1476,7 +1476,7 @@
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_OCB_STOP_TIMING_ADVERT_MAX,
 		      data,
 		      data_len,
-		      qca_wlan_vendor_ocb_stop_timing_advert_policy)) {
+		      qca_wlan_vendor_ocb_stop_timing_advert_policy, NULL)) {
 		hddLog(LOGE, FL("Invalid ATTR"));
 		goto fail;
 	}
@@ -1791,7 +1791,7 @@
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_MAX,
 		      data,
 		      data_len,
-		      qca_wlan_vendor_dcc_get_stats)) {
+		      qca_wlan_vendor_dcc_get_stats, NULL)) {
 		hddLog(LOGE, FL("Invalid ATTR"));
 		return -EINVAL;
 	}
@@ -1961,7 +1961,7 @@
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_DCC_CLEAR_STATS_MAX,
 		      data,
 		      data_len,
-		      qca_wlan_vendor_dcc_clear_stats)) {
+		      qca_wlan_vendor_dcc_clear_stats, NULL)) {
 		hddLog(LOGE, FL("Invalid ATTR"));
 		return -EINVAL;
 	}
@@ -2085,7 +2085,7 @@
 	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_DCC_UPDATE_NDL_MAX,
 		      data,
 		      data_len,
-		      qca_wlan_vendor_dcc_update_ndl)) {
+		      qca_wlan_vendor_dcc_update_ndl, NULL)) {
 		hddLog(LOGE, FL("Invalid ATTR"));
 		goto end;
 	}
diff --git a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
index c02e983..fd6d91b 100644
--- a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
+++ b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
@@ -970,7 +970,7 @@
 
       skb = skb_next;
    }
-   pAdapter->dev->last_rx = jiffies;
+   //pAdapter->dev->last_rx = jiffies;
 
    return VOS_STATUS_SUCCESS;
 }
diff --git a/CORE/HDD/src/wlan_hdd_tx_rx.c b/CORE/HDD/src/wlan_hdd_tx_rx.c
index b874191..b0fee04 100644
--- a/CORE/HDD/src/wlan_hdd_tx_rx.c
+++ b/CORE/HDD/src/wlan_hdd_tx_rx.c
@@ -1260,7 +1260,7 @@
 		skb = skb_next;
 	}
 
-	adapter->dev->last_rx = jiffies;
+	//adapter->dev->last_rx = jiffies;
 
 	return VOS_STATUS_SUCCESS;
 }
@@ -1318,7 +1318,7 @@
 		skb = skb_next;
 	}
 
-	adapter->dev->last_rx = jiffies;
+	//adapter->dev->last_rx = jiffies;
 
 	return VOS_STATUS_SUCCESS;
 }
@@ -1566,7 +1566,7 @@
       skb = skb_next;
    }
 
-   pAdapter->dev->last_rx = jiffies;
+   //pAdapter->dev->last_rx = jiffies;
 
    return VOS_STATUS_SUCCESS;
 }
diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_dma_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_os_dma_pvt.h
index d0e9e63..8bd4dae 100644
--- a/CORE/SERVICES/COMMON/adf/linux/adf_os_dma_pvt.h
+++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_dma_pvt.h
@@ -74,8 +74,8 @@
        vaddr = dma_alloc_coherent(osdev->dev, size, &lmap->seg[0].daddr,
                                   GFP_ATOMIC);
    else
-       vaddr = dma_alloc_noncoherent(osdev->dev, size, &lmap->seg[0].daddr,
-                                     GFP_ATOMIC);
+       vaddr = dma_alloc_attrs(osdev->dev, size, &lmap->seg[0].daddr,
+                                     GFP_ATOMIC, DMA_ATTR_NON_CONSISTENT);
 
    adf_os_assert(vaddr);
 
@@ -100,7 +100,8 @@
     if(coherent)
         dma_free_coherent(osdev->dev, size, vaddr, dmap->seg[0].daddr);
     else
-        dma_free_noncoherent(osdev->dev, size, vaddr, dmap->seg[0].daddr);
+        dma_free_attrs(osdev->dev, size, vaddr, dmap->seg[0].daddr,
+		       DMA_ATTR_NON_CONSISTENT);
 
     kfree(dmap);
 }
diff --git a/CORE/SERVICES/HIF/PCIe/if_pci.c b/CORE/SERVICES/HIF/PCIe/if_pci.c
index 840724d..1a8a826 100644
--- a/CORE/SERVICES/HIF/PCIe/if_pci.c
+++ b/CORE/SERVICES/HIF/PCIe/if_pci.c
@@ -2382,7 +2382,7 @@
         int rv;
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0)) || defined(WITH_BACKPORTS)
-        rv = pci_enable_msi_range(sc->pdev, MSI_NUM_REQUEST, MSI_NUM_REQUEST);
+        rv = pci_alloc_irq_vectors(sc->pdev, MSI_NUM_REQUEST, MSI_NUM_REQUEST, PCI_IRQ_MSI);
 #else
         rv = pci_enable_msi_block(sc->pdev, MSI_NUM_REQUEST);
 #endif
@@ -2554,7 +2554,7 @@
     hif_nointrs(sc);
 err_intr:
     if (num_msi_desired) {
-        pci_disable_msi(sc->pdev);
+	pci_free_irq_vectors(sc->pdev);
     }
     pci_set_drvdata(sc->pdev, NULL);
 
@@ -2592,7 +2592,7 @@
 
     mem = (void __iomem *)sc->mem;
 
-    pci_disable_msi(pdev);
+    pci_free_irq_vectors(pdev);
 
     hif_dump_pipe_debug_count(sc->hif_device);
 
@@ -2665,7 +2665,7 @@
 
     mem = (void __iomem *)sc->mem;
 
-    pci_disable_msi(pdev);
+    pci_free_irq_vectors(pdev);
 
     hif_pci_pm_runtime_ssr_post_exit(sc);
     hif_deinit_adf_ctx(scn);
diff --git a/CORE/VOSS/src/vos_sched.c b/CORE/VOSS/src/vos_sched.c
index ce09796..b7d7b5c 100644
--- a/CORE/VOSS/src/vos_sched.c
+++ b/CORE/VOSS/src/vos_sched.c
@@ -559,8 +559,8 @@
        return VOS_STATUS_E_FAILURE;
   }
   SPIN_UNLOCK_BH(&pSchedContext->VosTlshimPktFreeQLock);
-  register_hotcpu_notifier(&vos_cpu_hotplug_notifier);
-  pSchedContext->cpuHotPlugNotifier = &vos_cpu_hotplug_notifier;
+  //register_hotcpu_notifier(&vos_cpu_hotplug_notifier);
+  //pSchedContext->cpuHotPlugNotifier = &vos_cpu_hotplug_notifier;
   vos_lock_init(&pSchedContext->affinity_lock);
   pSchedContext->high_throughput_required = false;
 #endif
@@ -643,7 +643,7 @@
 
 
 #ifdef QCA_CONFIG_SMP
-  unregister_hotcpu_notifier(&vos_cpu_hotplug_notifier);
+  //unregister_hotcpu_notifier(&vos_cpu_hotplug_notifier);
   vos_free_tlshim_pkt_freeq(gpVosSchedContext);
 #endif
 
@@ -1610,7 +1610,7 @@
     gpVosSchedContext->TlshimRxThread = NULL;
     vos_drop_rxpkt_by_staid(gpVosSchedContext, WLAN_MAX_STA_COUNT);
     vos_free_tlshim_pkt_freeq(gpVosSchedContext);
-    unregister_hotcpu_notifier(&vos_cpu_hotplug_notifier);
+    //unregister_hotcpu_notifier(&vos_cpu_hotplug_notifier);
 #endif
     return VOS_STATUS_SUCCESS;
 } /* vox_sched_close() */
diff --git a/CORE/VOSS/src/vos_threads.c b/CORE/VOSS/src/vos_threads.c
index afbc9e9..a518b5b 100644
--- a/CORE/VOSS/src/vos_threads.c
+++ b/CORE/VOSS/src/vos_threads.c
@@ -42,6 +42,7 @@
 #include <vos_trace.h>
 #include <linux/jiffies.h>
 #include <linux/sched.h>
+#include <linux/sched/signal.h>
 #include <linux/delay.h>
 #include <linux/interrupt.h>
 
