diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index 8a5cdb8..e7c8f31 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -102,20 +102,6 @@
 };
 
 /**
- * struct hostapd_wmm_rule - WMM regulatory rule
- * @min_cwmin: Lower bound of CW_min value
- * @min_cwmax: Lower bound of CW_max value
- * @min_aifs: Lower bound of AIFS value
- * @max_txop: Upper bound of TXOP, value in units of 32 usec
- */
-struct hostapd_wmm_rule {
-	int min_cwmin;
-	int min_cwmax;
-	int min_aifs;
-	int max_txop;
-};
-
-/**
  * struct hostapd_channel_data - Channel information
  */
 struct hostapd_channel_data {
@@ -170,48 +156,34 @@
 	 * dfs_cac_ms - DFS CAC time in milliseconds
 	 */
 	unsigned int dfs_cac_ms;
-
-	/**
-	 * wmm_rules_valid - Indicates wmm_rules state
-	 */
-	int wmm_rules_valid;
-
-	/**
-	 * wmm_rules - WMM regulatory rules
-	 */
-	struct hostapd_wmm_rule wmm_rules[WMM_AC_NUM];
 };
 
-#define HE_MAX_MAC_CAPAB_SIZE	6
-#define HE_MAX_PHY_CAPAB_SIZE	11
-#define HE_MAX_MCS_CAPAB_SIZE	12
-#define HE_MAX_PPET_CAPAB_SIZE	25
+#define HE_MAX_NUM_SS 		8
+#define HE_MAX_PHY_CAPAB_SIZE	3
+
+/**
+ * struct he_ppe_threshold - IEEE 802.11ax HE PPE Threshold
+ */
+struct he_ppe_threshold {
+	u32 numss_m1;
+	u32 ru_count;
+	u32 ppet16_ppet8_ru3_ru0[HE_MAX_NUM_SS];
+};
 
 /**
  * struct he_capabilities - IEEE 802.11ax HE capabilities
  */
 struct he_capabilities {
 	u8 he_supported;
-	u8 phy_cap[HE_MAX_PHY_CAPAB_SIZE];
-	u8 mac_cap[HE_MAX_MAC_CAPAB_SIZE];
-	u8 mcs[HE_MAX_MCS_CAPAB_SIZE];
-	u8 ppet[HE_MAX_PPET_CAPAB_SIZE];
+	u32 phy_cap[HE_MAX_PHY_CAPAB_SIZE];
+	u32 mac_cap;
+	u32 mcs;
+	struct he_ppe_threshold ppet;
 };
 
 #define HOSTAPD_MODE_FLAG_HT_INFO_KNOWN BIT(0)
 #define HOSTAPD_MODE_FLAG_VHT_INFO_KNOWN BIT(1)
 
-
-enum ieee80211_op_mode {
-	IEEE80211_MODE_INFRA = 0,
-	IEEE80211_MODE_IBSS = 1,
-	IEEE80211_MODE_AP = 2,
-	IEEE80211_MODE_MESH = 5,
-
-	/* only add new entries before IEEE80211_MODE_NUM */
-	IEEE80211_MODE_NUM
-};
-
 /**
  * struct hostapd_hw_modes - Supported hardware mode information
  */
@@ -271,10 +243,15 @@
 	/**
 	 * he_capab - HE (IEEE 802.11ax) capabilities
 	 */
-	struct he_capabilities he_capab[IEEE80211_MODE_NUM];
+	struct he_capabilities he_capab;
 };
 
 
+#define IEEE80211_MODE_INFRA	0
+#define IEEE80211_MODE_IBSS	1
+#define IEEE80211_MODE_AP	2
+#define IEEE80211_MODE_MESH	5
+
 #define IEEE80211_CAP_ESS	0x0001
 #define IEEE80211_CAP_IBSS	0x0002
 #define IEEE80211_CAP_PRIVACY	0x0010
@@ -722,11 +699,6 @@
 	int vht_enabled;
 
 	/**
-	 * he_enabled - Whether HE is enabled
-	 */
-	int he_enabled;
-
-	/**
 	 * center_freq1 - Segment 0 center frequency in MHz
 	 *
 	 * Valid for both HT and VHT.
@@ -1150,11 +1122,6 @@
 	HIDDEN_SSID_ZERO_CONTENTS
 };
 
-enum ch_switch_state {
-	CH_SW_STARTED,
-	CH_SW_FINISHED
-};
-
 struct wowlan_triggers {
 	u8 any;
 	u8 disconnect;
@@ -1785,7 +1752,6 @@
 struct hostap_sta_driver_data {
 	unsigned long rx_packets, tx_packets;
 	unsigned long long rx_bytes, tx_bytes;
-	unsigned long long rx_airtime, tx_airtime;
 	int bytes_64bit; /* whether 64-bit byte counters are supported */
 	unsigned long current_tx_rate;
 	unsigned long current_rx_rate;
@@ -1795,8 +1761,6 @@
 	unsigned long tx_retry_failed;
 	unsigned long tx_retry_count;
 	s8 last_ack_rssi;
-	unsigned long backlog_packets;
-	unsigned long backlog_bytes;
 	s8 signal;
 	u8 rx_vhtmcs;
 	u8 tx_vhtmcs;
@@ -1817,8 +1781,6 @@
 	const struct ieee80211_vht_capabilities *vht_capabilities;
 	int vht_opmode_enabled;
 	u8 vht_opmode;
-	const struct ieee80211_he_capabilities *he_capab;
-	size_t he_capab_len;
 	u32 flags; /* bitmask of WPA_STA_* flags */
 	u32 flags_mask; /* unset bits in flags */
 #ifdef CONFIG_MESH
@@ -2375,7 +2337,7 @@
 	 *
 	 * Returns: 0 on success, -1 on failure
 	 */
-	int (*deauthenticate)(void *priv, const u8 *addr, u16 reason_code);
+	int (*deauthenticate)(void *priv, const u8 *addr, int reason_code);
 
 	/**
 	 * associate - Request driver to associate
@@ -2844,7 +2806,7 @@
 	 * a Deauthentication frame to be sent to it.
 	 */
 	int (*sta_deauth)(void *priv, const u8 *own_addr, const u8 *addr,
-			  u16 reason);
+			  int reason);
 
 	/**
 	 * sta_disassoc - Disassociate a station (AP only)
@@ -2858,7 +2820,7 @@
 	 * a Disassociation frame to be sent to it.
 	 */
 	int (*sta_disassoc)(void *priv, const u8 *own_addr, const u8 *addr,
-			    u16 reason);
+			    int reason);
 
 	/**
 	 * sta_remove - Remove a station entry (AP only)
@@ -2976,16 +2938,6 @@
 			     unsigned int flags_and);
 
 	/**
-	 * sta_set_airtime_weight - Set station airtime weight (AP only)
-	 * @priv: Private driver interface data
-	 * @addr: Station address
-	 * @weight: New weight for station airtime assignment
-	 * Returns: 0 on success, -1 on failure
-	 */
-	int (*sta_set_airtime_weight)(void *priv, const u8 *addr,
-				      unsigned int weight);
-
-	/**
 	 * set_tx_queue_params - Set TX queue parameters
 	 * @priv: Private driver interface data
 	 * @queue: Queue number (0 = VO, 1 = VI, 2 = BE, 3 = BK)
@@ -4023,18 +3975,6 @@
 	int (*leave_mesh)(void *priv);
 
 	/**
-	 * probe_mesh_link - Inject a frame over direct mesh link to a given
-	 *	peer skipping the next_hop lookup from mpath table.
-	 * @priv: Private driver interface data
-	 * @addr: Peer MAC address
-	 * @eth: Ethernet frame to be sent
-	 * @len: Ethernet frame lengtn in bytes
-	 * Returns 0 on success, -1 on failure
-	 */
-	int (*probe_mesh_link)(void *priv, const u8 *addr, const u8 *eth,
-			       size_t len);
-
-	/**
 	 * do_acs - Automatically select channel
 	 * @priv: Private driver interface data
 	 * @params: Parameters for ACS
@@ -4227,21 +4167,6 @@
 	 * Returns: 0 on success, < 0 on failure
 	 */
 	int (*set_4addr_mode)(void *priv, const char *bridge_ifname, int val);
-
-	/**
-	 * update_dh_ie - Update DH IE
-	 * @priv: Private driver interface data
-	 * @peer_mac: Peer MAC address
-	 * @reason_code: Reacon code
-	 * @ie: DH IE
-	 * @ie_len: DH IE length in bytes
-	 * Returns: 0 on success, -1 on failure
-	 *
-	 * This callback is used to let the driver know the DH processing result
-	 * and DH IE for a pending association.
-	 */
-	int (*update_dh_ie)(void *priv, const u8 *peer_mac, u16 reason_code,
-			    const u8 *ie, size_t ie_len);
 };
 
 /**
@@ -4616,15 +4541,6 @@
 	EVENT_CH_SWITCH,
 
 	/**
-	 * EVENT_CH_SWITCH_STARTED - AP or GO started to switch channels
-	 *
-	 * This is a pre-switch event indicating the shortly following switch
-	 * of operating channels.
-	 *
-	 * Described in wpa_event_data.ch_switch
-	 */
-	EVENT_CH_SWITCH_STARTED,
-	/**
 	 * EVENT_WNM - Request WNM operation
 	 *
 	 * This event can be used to request a WNM operation to be performed.
@@ -4787,11 +4703,6 @@
 	 * This event is emitted when an interface is added/removed for WDS STA.
 	 */
 	EVENT_WDS_STA_INTERFACE_STATUS,
-
-	/**
-	  * EVENT_UPDATE_DH - Notification of updated DH information
-	  */
-	EVENT_UPDATE_DH,
 };
 
 
@@ -5625,15 +5536,6 @@
 			INTERFACE_REMOVED
 		} istatus;
 	} wds_sta_interface;
-
-	/**
-	 * struct update_dh - Data for EVENT_UPDATE_DH
-	 */
-	struct update_dh {
-		const u8 *peer;
-		const u8 *ie;
-		size_t ie_len;
-	} update_dh;
 };
 
 /**
diff --git a/src/drivers/driver_atheros.c b/src/drivers/driver_atheros.c
index 840d4ff..807cd94 100644
--- a/src/drivers/driver_atheros.c
+++ b/src/drivers/driver_atheros.c
@@ -86,7 +86,7 @@
 };
 
 static int atheros_sta_deauth(void *priv, const u8 *own_addr, const u8 *addr,
-			      u16 reason_code);
+			      int reason_code);
 static int atheros_set_privacy(void *priv, int enabled);
 
 static const char * athr_get_ioctl_name(int op)
@@ -761,7 +761,7 @@
 
 static int
 atheros_sta_deauth(void *priv, const u8 *own_addr, const u8 *addr,
-		   u16 reason_code)
+		   int reason_code)
 {
 	struct atheros_driver_data *drv = priv;
 	struct ieee80211req_mlme mlme;
@@ -785,7 +785,7 @@
 
 static int
 atheros_sta_disassoc(void *priv, const u8 *own_addr, const u8 *addr,
-		     u16 reason_code)
+		     int reason_code)
 {
 	struct atheros_driver_data *drv = priv;
 	struct ieee80211req_mlme mlme;
diff --git a/src/drivers/driver_bsd.c b/src/drivers/driver_bsd.c
index 82ca061..4675496 100644
--- a/src/drivers/driver_bsd.c
+++ b/src/drivers/driver_bsd.c
@@ -663,7 +663,7 @@
 #undef WPA_OUI_TYPE
 
 static int bsd_sta_deauth(void *priv, const u8 *own_addr, const u8 *addr,
-			  u16 reason_code);
+			  int reason_code);
 
 static const char *
 ether_sprintf(const u8 *addr)
@@ -755,7 +755,7 @@
 }
 
 static int
-bsd_sta_deauth(void *priv, const u8 *own_addr, const u8 *addr, u16 reason_code)
+bsd_sta_deauth(void *priv, const u8 *own_addr, const u8 *addr, int reason_code)
 {
 	return bsd_send_mlme_param(priv, IEEE80211_MLME_DEAUTH, reason_code,
 				   addr);
@@ -763,7 +763,7 @@
 
 static int
 bsd_sta_disassoc(void *priv, const u8 *own_addr, const u8 *addr,
-		 u16 reason_code)
+		 int reason_code)
 {
 	return bsd_send_mlme_param(priv, IEEE80211_MLME_DISASSOC, reason_code,
 				   addr);
@@ -1026,7 +1026,7 @@
 }
 
 static int
-wpa_driver_bsd_deauthenticate(void *priv, const u8 *addr, u16 reason_code)
+wpa_driver_bsd_deauthenticate(void *priv, const u8 *addr, int reason_code)
 {
 	return bsd_send_mlme_param(priv, IEEE80211_MLME_DEAUTH, reason_code,
 				   addr);
diff --git a/src/drivers/driver_common.c b/src/drivers/driver_common.c
index 731c6a3..e55e6cd 100644
--- a/src/drivers/driver_common.c
+++ b/src/drivers/driver_common.c
@@ -67,7 +67,6 @@
 	E2S(DRIVER_CLIENT_POLL_OK);
 	E2S(EAPOL_TX_STATUS);
 	E2S(CH_SWITCH);
-	E2S(CH_SWITCH_STARTED);
 	E2S(WNM);
 	E2S(CONNECT_FAILED_REASON);
 	E2S(DFS_RADAR_DETECTED);
@@ -88,7 +87,6 @@
 	E2S(STATION_OPMODE_CHANGED);
 	E2S(INTERFACE_MAC_CHANGED);
 	E2S(WDS_STA_INTERFACE_STATUS);
-	E2S(UPDATE_DH);
 	}
 
 	return "UNKNOWN";
diff --git a/src/drivers/driver_hostap.c b/src/drivers/driver_hostap.c
index 186eccb..61b39b1 100644
--- a/src/drivers/driver_hostap.c
+++ b/src/drivers/driver_hostap.c
@@ -1028,7 +1028,7 @@
 
 
 static int hostap_sta_deauth(void *priv, const u8 *own_addr, const u8 *addr,
-			     u16 reason)
+			     int reason)
 {
 	struct hostap_driver_data *drv = priv;
 	struct ieee80211_mgmt mgmt;
@@ -1076,7 +1076,7 @@
 
 
 static int hostap_sta_disassoc(void *priv, const u8 *own_addr, const u8 *addr,
-			       u16 reason)
+			       int reason)
 {
 	struct hostap_driver_data *drv = priv;
 	struct ieee80211_mgmt mgmt;
diff --git a/src/drivers/driver_macsec_linux.c b/src/drivers/driver_macsec_linux.c
index e922503..9d981bb 100644
--- a/src/drivers/driver_macsec_linux.c
+++ b/src/drivers/driver_macsec_linux.c
@@ -1,7 +1,6 @@
 /*
  * Driver interaction with Linux MACsec kernel module
  * Copyright (c) 2016, Sabrina Dubroca <sd@queasysnail.net> and Red Hat, Inc.
- * Copyright (c) 2019, The Linux Foundation
  *
  * This software may be distributed under the terms of the BSD license.
  * See README for more details.
@@ -23,7 +22,6 @@
 
 #include "utils/common.h"
 #include "utils/eloop.h"
-#include "common/eapol_common.h"
 #include "pae/ieee802_1x_kay.h"
 #include "driver.h"
 #include "driver_wired_common.h"
@@ -59,7 +57,6 @@
 	char ifname[IFNAMSIZ + 1];
 	int ifi;
 	int parent_ifi;
-	int use_pae_group_addr;
 
 	Boolean created_link;
 
@@ -1402,214 +1399,6 @@
 }
 
 
-#ifdef __linux__
-
-static void macsec_drv_handle_data(void *ctx, unsigned char *buf, size_t len)
-{
-#ifdef HOSTAPD
-	struct ieee8023_hdr *hdr;
-	u8 *pos, *sa;
-	size_t left;
-	union wpa_event_data event;
-
-	/* must contain at least ieee8023_hdr 6 byte source, 6 byte dest,
-	 * 2 byte ethertype */
-	if (len < 14) {
-		wpa_printf(MSG_MSGDUMP, "%s: too short (%lu)",
-			   __func__, (unsigned long) len);
-		return;
-	}
-
-	hdr = (struct ieee8023_hdr *) buf;
-
-	switch (ntohs(hdr->ethertype)) {
-	case ETH_P_PAE:
-		wpa_printf(MSG_MSGDUMP, "Received EAPOL packet");
-		sa = hdr->src;
-		os_memset(&event, 0, sizeof(event));
-		event.new_sta.addr = sa;
-		wpa_supplicant_event(ctx, EVENT_NEW_STA, &event);
-
-		pos = (u8 *) (hdr + 1);
-		left = len - sizeof(*hdr);
-		drv_event_eapol_rx(ctx, sa, pos, left);
-		break;
-
-	default:
-		wpa_printf(MSG_DEBUG, "Unknown ethertype 0x%04x in data frame",
-			   ntohs(hdr->ethertype));
-		break;
-	}
-#endif /* HOSTAPD */
-}
-
-
-static void macsec_drv_handle_read(int sock, void *eloop_ctx, void *sock_ctx)
-{
-	int len;
-	unsigned char buf[3000];
-
-	len = recv(sock, buf, sizeof(buf), 0);
-	if (len < 0) {
-		wpa_printf(MSG_ERROR, "macsec_linux: recv: %s",
-			   strerror(errno));
-		return;
-	}
-
-	macsec_drv_handle_data(eloop_ctx, buf, len);
-}
-
-#endif /* __linux__ */
-
-
-static int macsec_drv_init_sockets(struct macsec_drv_data *drv, u8 *own_addr)
-{
-#ifdef __linux__
-	struct ifreq ifr;
-	struct sockaddr_ll addr;
-
-	drv->common.sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_PAE));
-	if (drv->common.sock < 0) {
-		wpa_printf(MSG_ERROR, "socket[PF_PACKET,SOCK_RAW]: %s",
-			   strerror(errno));
-		return -1;
-	}
-
-	if (eloop_register_read_sock(drv->common.sock, macsec_drv_handle_read,
-				     drv->common.ctx, NULL)) {
-		wpa_printf(MSG_INFO, "Could not register read socket");
-		return -1;
-	}
-
-	os_memset(&ifr, 0, sizeof(ifr));
-	os_strlcpy(ifr.ifr_name, drv->common.ifname, sizeof(ifr.ifr_name));
-	if (ioctl(drv->common.sock, SIOCGIFINDEX, &ifr) != 0) {
-		wpa_printf(MSG_ERROR, "ioctl(SIOCGIFINDEX): %s",
-			   strerror(errno));
-		return -1;
-	}
-
-	os_memset(&addr, 0, sizeof(addr));
-	addr.sll_family = AF_PACKET;
-	addr.sll_ifindex = ifr.ifr_ifindex;
-	wpa_printf(MSG_DEBUG, "Opening raw packet socket for ifindex %d",
-		   addr.sll_ifindex);
-
-	if (bind(drv->common.sock, (struct sockaddr *) &addr, sizeof(addr)) < 0)
-	{
-		wpa_printf(MSG_ERROR, "bind: %s", strerror(errno));
-		return -1;
-	}
-
-	/* filter multicast address */
-	if (wired_multicast_membership(drv->common.sock, ifr.ifr_ifindex,
-				       pae_group_addr, 1) < 0) {
-		wpa_printf(MSG_ERROR, "wired: Failed to add multicast group "
-			   "membership");
-		return -1;
-	}
-
-	os_memset(&ifr, 0, sizeof(ifr));
-	os_strlcpy(ifr.ifr_name, drv->common.ifname, sizeof(ifr.ifr_name));
-	if (ioctl(drv->common.sock, SIOCGIFHWADDR, &ifr) != 0) {
-		wpa_printf(MSG_ERROR, "ioctl(SIOCGIFHWADDR): %s",
-			   strerror(errno));
-		return -1;
-	}
-
-	if (ifr.ifr_hwaddr.sa_family != ARPHRD_ETHER) {
-		wpa_printf(MSG_INFO, "Invalid HW-addr family 0x%04x",
-			   ifr.ifr_hwaddr.sa_family);
-		return -1;
-	}
-	os_memcpy(own_addr, ifr.ifr_hwaddr.sa_data, ETH_ALEN);
-
-	return 0;
-#else /* __linux__ */
-	return -1;
-#endif /* __linux__ */
-}
-
-
-static void * macsec_drv_hapd_init(struct hostapd_data *hapd,
-				   struct wpa_init_params *params)
-{
-	struct macsec_drv_data *drv;
-
-	drv = os_zalloc(sizeof(struct macsec_drv_data));
-	if (drv == NULL) {
-		wpa_printf(MSG_INFO,
-			   "Could not allocate memory for wired driver data");
-		return NULL;
-	}
-
-	drv->common.ctx = hapd;
-	os_strlcpy(drv->common.ifname, params->ifname,
-		   sizeof(drv->common.ifname));
-	drv->use_pae_group_addr = params->use_pae_group_addr;
-
-	if (macsec_drv_init_sockets(drv, params->own_addr)) {
-		os_free(drv);
-		return NULL;
-	}
-
-	return drv;
-}
-
-
-static void macsec_drv_hapd_deinit(void *priv)
-{
-	struct macsec_drv_data *drv = priv;
-
-	if (drv->common.sock >= 0) {
-		eloop_unregister_read_sock(drv->common.sock);
-		close(drv->common.sock);
-	}
-
-	os_free(drv);
-}
-
-
-static int macsec_drv_send_eapol(void *priv, const u8 *addr,
-				 const u8 *data, size_t data_len, int encrypt,
-				 const u8 *own_addr, u32 flags)
-{
-	struct macsec_drv_data *drv = priv;
-	struct ieee8023_hdr *hdr;
-	size_t len;
-	u8 *pos;
-	int res;
-
-	len = sizeof(*hdr) + data_len;
-	hdr = os_zalloc(len);
-	if (hdr == NULL) {
-		wpa_printf(MSG_INFO,
-			   "%s: malloc() failed (len=%lu)",
-			   __func__, (unsigned long) len);
-		return -1;
-	}
-
-	os_memcpy(hdr->dest, drv->use_pae_group_addr ? pae_group_addr : addr,
-		  ETH_ALEN);
-	os_memcpy(hdr->src, own_addr, ETH_ALEN);
-	hdr->ethertype = htons(ETH_P_PAE);
-
-	pos = (u8 *) (hdr + 1);
-	os_memcpy(pos, data, data_len);
-
-	res = send(drv->common.sock, (u8 *) hdr, len, 0);
-	os_free(hdr);
-
-	if (res < 0) {
-		wpa_printf(MSG_ERROR,
-			   "%s: packet len: %lu - failed: send: %s",
-			   __func__, (unsigned long) len, strerror(errno));
-	}
-
-	return res;
-}
-
-
 const struct wpa_driver_ops wpa_driver_macsec_linux_ops = {
 	.name = "macsec_linux",
 	.desc = "MACsec Ethernet driver for Linux",
@@ -1618,9 +1407,6 @@
 	.get_capa = driver_wired_get_capa,
 	.init = macsec_drv_wpa_init,
 	.deinit = macsec_drv_wpa_deinit,
-	.hapd_init = macsec_drv_hapd_init,
-	.hapd_deinit = macsec_drv_hapd_deinit,
-	.hapd_send_eapol = macsec_drv_send_eapol,
 
 	.macsec_init = macsec_drv_macsec_init,
 	.macsec_deinit = macsec_drv_macsec_deinit,
diff --git a/src/drivers/driver_macsec_qca.c b/src/drivers/driver_macsec_qca.c
index f4e55d5..8372393 100644
--- a/src/drivers/driver_macsec_qca.c
+++ b/src/drivers/driver_macsec_qca.c
@@ -3,7 +3,6 @@
  * Copyright (c) 2005-2009, Jouni Malinen <j@w1.fi>
  * Copyright (c) 2004, Gunter Burchardt <tira@isx.de>
  * Copyright (c) 2013-2014, Qualcomm Atheros, Inc.
- * Copyright (c) 2019, The Linux Foundation
  *
  * This software may be distributed under the terms of the BSD license.
  * See README for more details.
@@ -30,7 +29,6 @@
 #include "utils/eloop.h"
 #include "common/defs.h"
 #include "common/ieee802_1x_defs.h"
-#include "common/eapol_common.h"
 #include "pae/ieee802_1x_kay.h"
 #include "driver.h"
 #include "driver_wired_common.h"
@@ -66,7 +64,6 @@
 struct macsec_qca_data {
 	struct driver_wired_common_data common;
 
-	int use_pae_group_addr;
 	u32 secy_id;
 
 	/* shadow */
@@ -129,134 +126,6 @@
 }
 
 
-#ifdef __linux__
-
-static void macsec_qca_handle_data(void *ctx, unsigned char *buf, size_t len)
-{
-#ifdef HOSTAPD
-	struct ieee8023_hdr *hdr;
-	u8 *pos, *sa;
-	size_t left;
-	union wpa_event_data event;
-
-	/* at least 6 bytes src macaddress, 6 bytes dst macaddress
-	 * and 2 bytes ethertype
-	*/
-	if (len < 14) {
-		wpa_printf(MSG_MSGDUMP,
-			   "macsec_qca_handle_data: too short (%lu)",
-			   (unsigned long) len);
-		return;
-	}
-	hdr = (struct ieee8023_hdr *) buf;
-
-	switch (ntohs(hdr->ethertype)) {
-	case ETH_P_PAE:
-		wpa_printf(MSG_MSGDUMP, "Received EAPOL packet");
-		sa = hdr->src;
-		os_memset(&event, 0, sizeof(event));
-		event.new_sta.addr = sa;
-		wpa_supplicant_event(ctx, EVENT_NEW_STA, &event);
-
-		pos = (u8 *) (hdr + 1);
-		left = len - sizeof(*hdr);
-		drv_event_eapol_rx(ctx, sa, pos, left);
-		break;
-	default:
-		wpa_printf(MSG_DEBUG, "Unknown ethertype 0x%04x in data frame",
-			   ntohs(hdr->ethertype));
-		break;
-	}
-#endif /* HOSTAPD */
-}
-
-
-static void macsec_qca_handle_read(int sock, void *eloop_ctx, void *sock_ctx)
-{
-	int len;
-	unsigned char buf[3000];
-
-	len = recv(sock, buf, sizeof(buf), 0);
-	if (len < 0) {
-		wpa_printf(MSG_ERROR, "macsec_qca: recv: %s", strerror(errno));
-		return;
-	}
-
-	macsec_qca_handle_data(eloop_ctx, buf, len);
-}
-
-#endif /* __linux__ */
-
-
-static int macsec_qca_init_sockets(struct macsec_qca_data *drv, u8 *own_addr)
-{
-#ifdef __linux__
-	struct ifreq ifr;
-	struct sockaddr_ll addr;
-
-	drv->common.sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_PAE));
-	if (drv->common.sock < 0) {
-		wpa_printf(MSG_ERROR, "socket[PF_PACKET,SOCK_RAW]: %s",
-			   strerror(errno));
-		return -1;
-	}
-
-	if (eloop_register_read_sock(drv->common.sock, macsec_qca_handle_read,
-				     drv->common.ctx, NULL)) {
-		wpa_printf(MSG_INFO, "Could not register read socket");
-		return -1;
-	}
-
-	os_memset(&ifr, 0, sizeof(ifr));
-	os_strlcpy(ifr.ifr_name, drv->common.ifname, sizeof(ifr.ifr_name));
-	if (ioctl(drv->common.sock, SIOCGIFINDEX, &ifr) != 0) {
-		wpa_printf(MSG_ERROR, "ioctl(SIOCGIFINDEX): %s",
-			   strerror(errno));
-		return -1;
-	}
-
-	os_memset(&addr, 0, sizeof(addr));
-	addr.sll_family = AF_PACKET;
-	addr.sll_ifindex = ifr.ifr_ifindex;
-	wpa_printf(MSG_DEBUG, "Opening raw packet socket for ifindex %d",
-		   addr.sll_ifindex);
-
-	if (bind(drv->common.sock, (struct sockaddr *) &addr,
-		 sizeof(addr)) < 0) {
-		wpa_printf(MSG_ERROR, "macsec_qca: bind: %s", strerror(errno));
-		return -1;
-	}
-
-	/* filter multicast address */
-	if (wired_multicast_membership(drv->common.sock, ifr.ifr_ifindex,
-				       pae_group_addr, 1) < 0) {
-		wpa_printf(MSG_ERROR,
-			"macsec_qca_init_sockets: Failed to add multicast group membership");
-		return -1;
-	}
-
-	os_memset(&ifr, 0, sizeof(ifr));
-	os_strlcpy(ifr.ifr_name, drv->common.ifname, sizeof(ifr.ifr_name));
-	if (ioctl(drv->common.sock, SIOCGIFHWADDR, &ifr) != 0) {
-		wpa_printf(MSG_ERROR, "ioctl(SIOCGIFHWADDR): %s",
-			   strerror(errno));
-		return -1;
-	}
-
-	if (ifr.ifr_hwaddr.sa_family != ARPHRD_ETHER) {
-		wpa_printf(MSG_INFO, "Invalid HW-addr family 0x%04x",
-			   ifr.ifr_hwaddr.sa_family);
-		return -1;
-	}
-	os_memcpy(own_addr, ifr.ifr_hwaddr.sa_data, ETH_ALEN);
-
-	return 0;
-#else /* __linux__ */
-	return -1;
-#endif /* __linux__ */
-}
-
-
 static void * macsec_qca_init(void *ctx, const char *ifname)
 {
 	struct macsec_qca_data *drv;
@@ -291,97 +160,6 @@
 }
 
 
-static void * macsec_qca_hapd_init(struct hostapd_data *hapd,
-				   struct wpa_init_params *params)
-{
-	struct macsec_qca_data *drv;
-
-	drv = os_zalloc(sizeof(struct macsec_qca_data));
-	if (!drv) {
-		wpa_printf(MSG_INFO,
-			   "Could not allocate memory for macsec_qca driver data");
-		return NULL;
-	}
-
-	/* Board specific settings */
-	if (os_memcmp("eth2", params->ifname, 4) == 0)
-		drv->secy_id = 1;
-	else if (os_memcmp("eth3", params->ifname, 4) == 0)
-		drv->secy_id = 2;
-	else if (os_memcmp("eth4", params->ifname, 4) == 0)
-		drv->secy_id = 0;
-	else if (os_memcmp("eth5", params->ifname, 4) == 0)
-		drv->secy_id = 1;
-	else
-		drv->secy_id = -1;
-
-	drv->common.ctx = hapd;
-	os_strlcpy(drv->common.ifname, params->ifname,
-		   sizeof(drv->common.ifname));
-	drv->use_pae_group_addr = params->use_pae_group_addr;
-
-	if (macsec_qca_init_sockets(drv, params->own_addr)) {
-		os_free(drv);
-		return NULL;
-	}
-
-	return drv;
-}
-
-
-static void macsec_qca_hapd_deinit(void *priv)
-{
-	struct macsec_qca_data *drv = priv;
-
-	if (drv->common.sock >= 0) {
-		eloop_unregister_read_sock(drv->common.sock);
-		close(drv->common.sock);
-	}
-
-	os_free(drv);
-}
-
-
-static int macsec_qca_send_eapol(void *priv, const u8 *addr,
-				 const u8 *data, size_t data_len, int encrypt,
-				 const u8 *own_addr, u32 flags)
-{
-	struct macsec_qca_data *drv = priv;
-	struct ieee8023_hdr *hdr;
-	size_t len;
-	u8 *pos;
-	int res;
-
-	len = sizeof(*hdr) + data_len;
-	hdr = os_zalloc(len);
-	if (!hdr) {
-		wpa_printf(MSG_INFO,
-			   "malloc() failed for macsec_qca_send_eapol(len=%lu)",
-			   (unsigned long) len);
-		return -1;
-	}
-
-	os_memcpy(hdr->dest, drv->use_pae_group_addr ? pae_group_addr : addr,
-		  ETH_ALEN);
-	os_memcpy(hdr->src, own_addr, ETH_ALEN);
-	hdr->ethertype = htons(ETH_P_PAE);
-
-	pos = (u8 *) (hdr + 1);
-	os_memcpy(pos, data, data_len);
-
-	res = send(drv->common.sock, (u8 *) hdr, len, 0);
-	os_free(hdr);
-
-	if (res < 0) {
-		wpa_printf(MSG_ERROR,
-			   "macsec_qca_send_eapol - packet len: %lu - failed: send: %s",
-			   (unsigned long) len, strerror(errno));
-	}
-
-	return res;
-}
-
-
 static int macsec_qca_macsec_init(void *priv, struct macsec_init_params *params)
 {
 	struct macsec_qca_data *drv = priv;
@@ -1022,9 +800,6 @@
 	.get_capa = driver_wired_get_capa,
 	.init = macsec_qca_init,
 	.deinit = macsec_qca_deinit,
-	.hapd_init = macsec_qca_hapd_init,
-	.hapd_deinit = macsec_qca_hapd_deinit,
-	.hapd_send_eapol = macsec_qca_send_eapol,
 
 	.macsec_init = macsec_qca_macsec_init,
 	.macsec_deinit = macsec_qca_macsec_deinit,
diff --git a/src/drivers/driver_ndis.c b/src/drivers/driver_ndis.c
index 5b4b924..614c452 100644
--- a/src/drivers/driver_ndis.c
+++ b/src/drivers/driver_ndis.c
@@ -719,7 +719,7 @@
 
 
 static int wpa_driver_ndis_deauthenticate(void *priv, const u8 *addr,
-					  u16 reason_code)
+					  int reason_code)
 {
 	struct wpa_driver_ndis_data *drv = priv;
 	return wpa_driver_ndis_disconnect(drv);
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index 45835a2..21d1398 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -236,7 +236,7 @@
 				   struct wpa_driver_mesh_bss_params *params);
 #endif /* CONFIG_MESH */
 static int i802_sta_disassoc(void *priv, const u8 *own_addr, const u8 *addr,
-			     u16 reason);
+			     int reason);
 
 
 /* Converts nl80211_chan_width to a common format */
@@ -2010,8 +2010,9 @@
 	 */
 	drv->set_rekey_offload = 1;
 
-	drv->num_if_indices = ARRAY_SIZE(drv->default_if_indices);
+	drv->num_if_indices = sizeof(drv->default_if_indices) / sizeof(int);
 	drv->if_indices = drv->default_if_indices;
+	drv->if_indices_reason = drv->default_if_indices_reason;
 
 	drv->first_bss = os_zalloc(sizeof(*drv->first_bss));
 	if (!drv->first_bss) {
@@ -2788,6 +2789,9 @@
 	if (drv->if_indices != drv->default_if_indices)
 		os_free(drv->if_indices);
 
+	if (drv->if_indices_reason != drv->default_if_indices_reason)
+		os_free(drv->if_indices_reason);
+
 	if (drv->disabled_11b_rates)
 		nl80211_disable_11b_rates(drv, drv->ifindex, 0);
 
@@ -3278,7 +3282,7 @@
 
 
 static int wpa_driver_nl80211_disconnect(struct wpa_driver_nl80211_data *drv,
-					 u16 reason_code,
+					 int reason_code,
 					 struct nl_handle *nl_connect)
 {
 	int ret;
@@ -3300,7 +3304,7 @@
 
 
 static int wpa_driver_nl80211_deauthenticate(struct i802_bss *bss,
-					     const u8 *addr, u16 reason_code)
+					     const u8 *addr, int reason_code)
 {
 	struct wpa_driver_nl80211_data *drv = bss->drv;
 	int ret;
@@ -4167,10 +4171,8 @@
 	     nla_put_flag(msg, NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT)))
 		goto fail;
 
-	if (drv->device_ap_sme &&
-	    (params->key_mgmt_suites & WPA_KEY_MGMT_SAE) &&
-	    nla_put_flag(msg, NL80211_ATTR_EXTERNAL_AUTH_SUPPORT))
-		goto fail;
+	if (drv->device_ap_sme && (params->key_mgmt_suites & WPA_KEY_MGMT_SAE))
+	     nla_put_flag(msg, NL80211_ATTR_EXTERNAL_AUTH_SUPPORT);
 
 	wpa_printf(MSG_DEBUG, "nl80211: pairwise_ciphers=0x%x",
 		   params->pairwise_ciphers);
@@ -4348,11 +4350,10 @@
 	if (nla_put_u32(msg, NL80211_ATTR_WIPHY_FREQ, freq->freq))
 		return -ENOBUFS;
 
-	wpa_printf(MSG_DEBUG, "  * he_enabled=%d", freq->he_enabled);
 	wpa_printf(MSG_DEBUG, "  * vht_enabled=%d", freq->vht_enabled);
 	wpa_printf(MSG_DEBUG, "  * ht_enabled=%d", freq->ht_enabled);
 
-	if (freq->vht_enabled || freq->he_enabled) {
+	if (freq->vht_enabled) {
 		enum nl80211_chan_width cw;
 
 		wpa_printf(MSG_DEBUG, "  * bandwidth=%d", freq->bandwidth);
@@ -4427,8 +4428,8 @@
 	int ret;
 
 	wpa_printf(MSG_DEBUG,
-		   "nl80211: Set freq %d (ht_enabled=%d, vht_enabled=%d, he_enabled=%d, bandwidth=%d MHz, cf1=%d MHz, cf2=%d MHz)",
-		   freq->freq, freq->ht_enabled, freq->vht_enabled, freq->he_enabled,
+		   "nl80211: Set freq %d (ht_enabled=%d, vht_enabled=%d, bandwidth=%d MHz, cf1=%d MHz, cf2=%d MHz)",
+		   freq->freq, freq->ht_enabled, freq->vht_enabled,
 		   freq->bandwidth, freq->center_freq1, freq->center_freq2);
 
 	msg = nl80211_drv_msg(drv, 0, set_chan ? NL80211_CMD_SET_CHANNEL :
@@ -4560,14 +4561,6 @@
 				goto fail;
 		}
 
-		if (params->he_capab) {
-			wpa_hexdump(MSG_DEBUG, "  * he_capab",
-				    params->he_capab, params->he_capab_len);
-			if (nla_put(msg, NL80211_ATTR_HE_CAPABILITY,
-				    params->he_capab_len, params->he_capab))
-				goto fail;
-		}
-
 		if (params->ext_capab) {
 			wpa_hexdump(MSG_DEBUG, "  * ext_capab",
 				    params->ext_capab, params->ext_capab_len);
@@ -5192,28 +5185,6 @@
 }
 
 
-static int driver_nl80211_sta_set_airtime_weight(void *priv, const u8 *addr,
-						 unsigned int weight)
-{
-	struct i802_bss *bss = priv;
-	struct nl_msg *msg;
-
-	wpa_printf(MSG_DEBUG,
-		   "nl80211: Set STA airtime weight - ifname=%s addr=" MACSTR
-		   " weight=%u", bss->ifname, MAC2STR(addr), weight);
-
-	if (!(msg = nl80211_bss_msg(bss, 0, NL80211_CMD_SET_STATION)) ||
-	    nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, addr) ||
-	    nla_put_u16(msg, NL80211_ATTR_AIRTIME_WEIGHT, weight))
-		goto fail;
-
-	return send_and_recv_msgs(bss->drv, msg, NULL, NULL);
-fail:
-	nlmsg_free(msg);
-	return -ENOBUFS;
-}
-
-
 static int wpa_driver_nl80211_ap(struct wpa_driver_nl80211_data *drv,
 				 struct wpa_driver_associate_params *params)
 {
@@ -6293,36 +6264,6 @@
 }
 
 
-static void get_sta_tid_stats(struct hostap_sta_driver_data *data,
-			      struct nlattr *attr)
-{
-	struct nlattr *tid_stats[NL80211_TID_STATS_MAX + 1], *tidattr;
-	struct nlattr *txq_stats[NL80211_TXQ_STATS_MAX + 1];
-	static struct nla_policy txq_stats_policy[NL80211_TXQ_STATS_MAX + 1] = {
-		[NL80211_TXQ_STATS_BACKLOG_BYTES] = { .type = NLA_U32 },
-		[NL80211_TXQ_STATS_BACKLOG_PACKETS] = { .type = NLA_U32 },
-	};
-	int rem;
-
-	nla_for_each_nested(tidattr, attr, rem) {
-		if (nla_parse_nested(tid_stats, NL80211_TID_STATS_MAX,
-				     tidattr, NULL) != 0 ||
-		    !tid_stats[NL80211_TID_STATS_TXQ_STATS] ||
-		    nla_parse_nested(txq_stats, NL80211_TXQ_STATS_MAX,
-				     tid_stats[NL80211_TID_STATS_TXQ_STATS],
-				     txq_stats_policy) != 0)
-			continue;
-		/* sum the backlogs over all TIDs for station */
-		if (txq_stats[NL80211_TXQ_STATS_BACKLOG_BYTES])
-			data->backlog_bytes += nla_get_u32(
-				txq_stats[NL80211_TXQ_STATS_BACKLOG_BYTES]);
-		if (txq_stats[NL80211_TXQ_STATS_BACKLOG_PACKETS])
-			data->backlog_bytes += nla_get_u32(
-				txq_stats[NL80211_TXQ_STATS_BACKLOG_PACKETS]);
-	}
-}
-
-
 static int get_sta_handler(struct nl_msg *msg, void *arg)
 {
 	struct nlattr *tb[NL80211_ATTR_MAX + 1];
@@ -6340,8 +6281,6 @@
 		[NL80211_STA_INFO_TX_BYTES64] = { .type = NLA_U64 },
 		[NL80211_STA_INFO_SIGNAL] = { .type = NLA_U8 },
 		[NL80211_STA_INFO_ACK_SIGNAL] = { .type = NLA_U8 },
-		[NL80211_STA_INFO_RX_DURATION] = { .type = NLA_U64 },
-		[NL80211_STA_INFO_TX_DURATION] = { .type = NLA_U64 },
 	};
 	struct nlattr *rate[NL80211_RATE_INFO_MAX + 1];
 	static struct nla_policy rate_policy[NL80211_RATE_INFO_MAX + 1] = {
@@ -6399,12 +6338,6 @@
 	if (stats[NL80211_STA_INFO_TX_PACKETS])
 		data->tx_packets =
 			nla_get_u32(stats[NL80211_STA_INFO_TX_PACKETS]);
-	if (stats[NL80211_STA_INFO_RX_DURATION])
-		data->rx_airtime =
-			nla_get_u64(stats[NL80211_STA_INFO_RX_DURATION]);
-	if (stats[NL80211_STA_INFO_TX_DURATION])
-		data->tx_airtime =
-			nla_get_u64(stats[NL80211_STA_INFO_TX_DURATION]);
 	if (stats[NL80211_STA_INFO_TX_FAILED])
 		data->tx_retry_failed =
 			nla_get_u32(stats[NL80211_STA_INFO_TX_FAILED]);
@@ -6475,9 +6408,6 @@
 		}
 	}
 
-	if (stats[NL80211_STA_INFO_TID_STATS])
-		get_sta_tid_stats(data, stats[NL80211_STA_INFO_TID_STATS]);
-
 	return NL_SKIP;
 }
 
@@ -6618,7 +6548,7 @@
 
 
 static int i802_sta_deauth(void *priv, const u8 *own_addr, const u8 *addr,
-			   u16 reason)
+			   int reason)
 {
 	struct i802_bss *bss = priv;
 	struct wpa_driver_nl80211_data *drv = bss->drv;
@@ -6653,7 +6583,7 @@
 
 
 static int i802_sta_disassoc(void *priv, const u8 *own_addr, const u8 *addr,
-			     u16 reason)
+			     int reason)
 {
 	struct i802_bss *bss = priv;
 	struct wpa_driver_nl80211_data *drv = bss->drv;
@@ -6688,11 +6618,11 @@
 	end = pos + sizeof(buf);
 
 	for (i = 0; i < drv->num_if_indices; i++) {
-		if (!drv->if_indices[i].ifindex)
+		if (!drv->if_indices[i])
 			continue;
 		res = os_snprintf(pos, end - pos, " %d(%d)",
-				  drv->if_indices[i].ifindex,
-				  drv->if_indices[i].reason);
+				  drv->if_indices[i],
+				  drv->if_indices_reason[i]);
 		if (os_snprintf_error(end - pos, res))
 			break;
 		pos += res;
@@ -6708,7 +6638,7 @@
 		      int ifidx_reason)
 {
 	int i;
-	struct drv_nl80211_if_info *old;
+	int *old, *old_reason;
 
 	wpa_printf(MSG_DEBUG,
 		   "nl80211: Add own interface ifindex %d (ifidx_reason %d)",
@@ -6719,9 +6649,9 @@
 		return;
 	}
 	for (i = 0; i < drv->num_if_indices; i++) {
-		if (drv->if_indices[i].ifindex == 0) {
-			drv->if_indices[i].ifindex = ifidx;
-			drv->if_indices[i].reason = ifidx_reason;
+		if (drv->if_indices[i] == 0) {
+			drv->if_indices[i] = ifidx;
+			drv->if_indices_reason[i] = ifidx_reason;
 			dump_ifidx(drv);
 			return;
 		}
@@ -6732,13 +6662,29 @@
 	else
 		old = NULL;
 
+	if (drv->if_indices_reason != drv->default_if_indices_reason)
+		old_reason = drv->if_indices_reason;
+	else
+		old_reason = NULL;
+
 	drv->if_indices = os_realloc_array(old, drv->num_if_indices + 1,
-					   sizeof(*old));
+					   sizeof(int));
+	drv->if_indices_reason = os_realloc_array(old_reason,
+						  drv->num_if_indices + 1,
+						  sizeof(int));
 	if (!drv->if_indices) {
 		if (!old)
 			drv->if_indices = drv->default_if_indices;
 		else
 			drv->if_indices = old;
+	}
+	if (!drv->if_indices_reason) {
+		if (!old_reason)
+			drv->if_indices_reason = drv->default_if_indices_reason;
+		else
+			drv->if_indices_reason = old_reason;
+	}
+	if (!drv->if_indices || !drv->if_indices_reason) {
 		wpa_printf(MSG_ERROR, "Failed to reallocate memory for "
 			   "interfaces");
 		wpa_printf(MSG_ERROR, "Ignoring EAPOL on interface %d", ifidx);
@@ -6747,8 +6693,12 @@
 	if (!old)
 		os_memcpy(drv->if_indices, drv->default_if_indices,
 			  sizeof(drv->default_if_indices));
-	drv->if_indices[drv->num_if_indices].ifindex = ifidx;
-	drv->if_indices[drv->num_if_indices].reason = ifidx_reason;
+	if (!old_reason)
+		os_memcpy(drv->if_indices_reason,
+			  drv->default_if_indices_reason,
+			  sizeof(drv->default_if_indices_reason));
+	drv->if_indices[drv->num_if_indices] = ifidx;
+	drv->if_indices_reason[drv->num_if_indices] = ifidx_reason;
 	drv->num_if_indices++;
 	dump_ifidx(drv);
 }
@@ -6760,12 +6710,10 @@
 	int i;
 
 	for (i = 0; i < drv->num_if_indices; i++) {
-		if ((drv->if_indices[i].ifindex == ifidx ||
-		     ifidx == IFIDX_ANY) &&
-		    (drv->if_indices[i].reason == ifidx_reason ||
+		if ((drv->if_indices[i] == ifidx || ifidx == IFIDX_ANY) &&
+		    (drv->if_indices_reason[i] == ifidx_reason ||
 		     ifidx_reason == IFIDX_ANY)) {
-			drv->if_indices[i].ifindex = 0;
-			drv->if_indices[i].reason = 0;
+			drv->if_indices[i] = 0;
 			break;
 		}
 	}
@@ -6779,8 +6727,8 @@
 	int i;
 
 	for (i = 0; i < drv->num_if_indices; i++)
-		if (drv->if_indices[i].ifindex == ifidx &&
-		    (drv->if_indices[i].reason == ifidx_reason ||
+		if (drv->if_indices[i] == ifidx &&
+		    (drv->if_indices_reason[i] == ifidx_reason ||
 		     ifidx_reason == IFIDX_ANY))
 			return 1;
 
@@ -8422,8 +8370,8 @@
 	struct nl_msg *msg;
 	int ret;
 
-	wpa_printf(MSG_DEBUG, "nl80211: Start radar detection (CAC) %d MHz (ht_enabled=%d, vht_enabled=%d, he_enabled=%d, bandwidth=%d MHz, cf1=%d MHz, cf2=%d MHz)",
-		   freq->freq, freq->ht_enabled, freq->vht_enabled, freq->he_enabled,
+	wpa_printf(MSG_DEBUG, "nl80211: Start radar detection (CAC) %d MHz (ht_enabled=%d, vht_enabled=%d, bandwidth=%d MHz, cf1=%d MHz, cf2=%d MHz)",
+		   freq->freq, freq->ht_enabled, freq->vht_enabled,
 		   freq->bandwidth, freq->center_freq1, freq->center_freq2);
 
 	if (!(drv->capa.flags & WPA_DRIVER_FLAGS_RADAR)) {
@@ -8635,7 +8583,7 @@
 
 
 static int driver_nl80211_deauthenticate(void *priv, const u8 *addr,
-					 u16 reason_code)
+					 int reason_code)
 {
 	struct i802_bss *bss = priv;
 	return wpa_driver_nl80211_deauthenticate(bss, addr, reason_code);
@@ -8750,35 +8698,6 @@
 }
 
 
-static int nl80211_update_dh_ie(void *priv, const u8 *peer_mac,
-				u16 reason_code, const u8 *ie, size_t ie_len)
-{
-	int ret;
-	struct nl_msg *msg;
-	struct i802_bss *bss = priv;
-	struct wpa_driver_nl80211_data *drv = bss->drv;
-
-	wpa_printf(MSG_DEBUG, "nl80211: Updating DH IE peer: " MACSTR
-		   " reason %u", MAC2STR(peer_mac), reason_code);
-	if (!(msg = nl80211_bss_msg(bss, 0, NL80211_CMD_UPDATE_OWE_INFO)) ||
-	    nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, peer_mac) ||
-	    nla_put_u16(msg, NL80211_ATTR_STATUS_CODE, reason_code) ||
-	    (ie && nla_put(msg, NL80211_ATTR_IE, ie_len, ie))) {
-		nlmsg_free(msg);
-		return -ENOBUFS;
-	}
-
-	ret = send_and_recv_msgs(drv, msg, NULL, NULL);
-	if (ret) {
-		wpa_printf(MSG_DEBUG,
-			   "nl80211: update_dh_ie failed err=%d (%s)",
-			   ret, strerror(-ret));
-	}
-
-	return ret;
-}
-
-
 static const u8 * wpa_driver_nl80211_get_macaddr(void *priv)
 {
 	struct i802_bss *bss = priv;
@@ -9727,36 +9646,6 @@
 	return ret;
 }
 
-
-static int nl80211_probe_mesh_link(void *priv, const u8 *addr, const u8 *eth,
-				   size_t len)
-{
-	struct i802_bss *bss = priv;
-	struct wpa_driver_nl80211_data *drv = bss->drv;
-	struct nl_msg *msg;
-	int ret;
-
-	msg = nl80211_drv_msg(drv, 0, NL80211_CMD_PROBE_MESH_LINK);
-	if (!msg ||
-	    nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, addr) ||
-	    nla_put(msg, NL80211_ATTR_FRAME, len, eth)) {
-		nlmsg_free(msg);
-		return -ENOBUFS;
-	}
-
-	ret = send_and_recv_msgs(drv, msg, NULL, NULL);
-	if (ret) {
-		wpa_printf(MSG_DEBUG, "nl80211: mesh link probe to " MACSTR
-			   " failed: ret=%d (%s)",
-			   MAC2STR(addr), ret, strerror(-ret));
-	} else {
-		wpa_printf(MSG_DEBUG, "nl80211: Mesh link to " MACSTR
-			   " probed successfully", MAC2STR(addr));
-	}
-
-	return ret;
-}
-
 #endif /* CONFIG_MESH */
 
 
@@ -10928,7 +10817,7 @@
 	 * SAE) to hostapd/wpa_supplicant. Do nott send the status to drivers
 	 * which do not support AP SME or use wpa_supplicant/hostapd SME.
 	 */
-	if ((is_ap_interface(drv->nlmode) && !bss->drv->device_ap_sme) ||
+	if (!bss->drv->device_ap_sme ||
 	    (drv->capa.flags & WPA_DRIVER_FLAGS_SME))
 		return -1;
 
@@ -11035,7 +10924,6 @@
 	.sta_remove = driver_nl80211_sta_remove,
 	.hapd_send_eapol = wpa_driver_nl80211_hapd_send_eapol,
 	.sta_set_flags = wpa_driver_nl80211_sta_set_flags,
-	.sta_set_airtime_weight = driver_nl80211_sta_set_airtime_weight,
 	.hapd_init = i802_init,
 	.hapd_deinit = i802_deinit,
 	.set_wds_sta = i802_set_wds_sta,
@@ -11081,7 +10969,6 @@
 	.tdls_disable_channel_switch = nl80211_tdls_disable_channel_switch,
 #endif /* CONFIG_TDLS */
 	.update_ft_ies = wpa_driver_nl80211_update_ft_ies,
-	.update_dh_ie = nl80211_update_dh_ie,
 	.get_mac_addr = wpa_driver_nl80211_get_macaddr,
 	.get_survey = wpa_driver_nl80211_get_survey,
 	.status = wpa_driver_nl80211_status,
@@ -11104,7 +10991,6 @@
 	.init_mesh = wpa_driver_nl80211_init_mesh,
 	.join_mesh = wpa_driver_nl80211_join_mesh,
 	.leave_mesh = wpa_driver_nl80211_leave_mesh,
-	.probe_mesh_link = nl80211_probe_mesh_link,
 #endif /* CONFIG_MESH */
 	.br_add_ip_neigh = wpa_driver_br_add_ip_neigh,
 	.br_delete_ip_neigh = wpa_driver_br_delete_ip_neigh,
diff --git a/src/drivers/driver_nl80211.h b/src/drivers/driver_nl80211.h
index 7498269..1e7fe7a 100644
--- a/src/drivers/driver_nl80211.h
+++ b/src/drivers/driver_nl80211.h
@@ -83,12 +83,6 @@
 	u8 rand_addr[ETH_ALEN];
 };
 
-struct drv_nl80211_if_info {
-	int ifindex;
-	/* the AP/AP_VLAN iface that is in this bridge */
-	int reason;
-};
-
 struct wpa_driver_nl80211_data {
 	struct nl80211_global *global;
 	struct dl_list list;
@@ -169,6 +163,7 @@
 	unsigned int scan_vendor_cmd_avail:1;
 	unsigned int connect_reassoc:1;
 	unsigned int set_wifi_conf_vendor_cmd_avail:1;
+	unsigned int he_capab_vendor_cmd_avail:1;
 	unsigned int fetch_bss_trans_status:1;
 	unsigned int roam_vendor_cmd_avail:1;
 	unsigned int get_supported_akm_suites_avail:1;
@@ -193,8 +188,11 @@
 
 	struct nl_handle *rtnl_sk; /* nl_sock for NETLINK_ROUTE */
 
-	struct drv_nl80211_if_info default_if_indices[16];
-	struct drv_nl80211_if_info *if_indices;
+	int default_if_indices[16];
+	/* the AP/AP_VLAN iface that is in this bridge */
+	int default_if_indices_reason[16];
+	int *if_indices;
+	int *if_indices_reason;
 	int num_if_indices;
 
 	/* From failed authentication command */
@@ -217,6 +215,8 @@
 	 * (NL80211_CMD_VENDOR). 0 if no pending scan request.
 	 */
 	int last_scan_cmd;
+
+	struct he_capabilities he_capab;
 };
 
 struct nl_msg;
diff --git a/src/drivers/driver_nl80211_capa.c b/src/drivers/driver_nl80211_capa.c
index 8318b10..37eeb5e 100644
--- a/src/drivers/driver_nl80211_capa.c
+++ b/src/drivers/driver_nl80211_capa.c
@@ -778,6 +778,9 @@
 				case QCA_NL80211_VENDOR_SUBCMD_SET_WIFI_CONFIGURATION:
 					drv->set_wifi_conf_vendor_cmd_avail = 1;
 					break;
+				case QCA_NL80211_VENDOR_SUBCMD_GET_HE_CAPABILITIES:
+					drv->he_capab_vendor_cmd_avail = 1;
+					break;
 				case QCA_NL80211_VENDOR_SUBCMD_FETCH_BSS_TRANSITION_STATUS:
 					drv->fetch_bss_trans_status = 1;
 					break;
@@ -1079,6 +1082,100 @@
 }
 
 
+static int qca_nl80211_he_capab_handler(struct nl_msg *msg, void *arg)
+{
+	struct nlattr *tb[NL80211_ATTR_MAX + 1];
+	struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
+	struct he_capabilities *he_capab = arg;
+	struct nlattr *nl_vend;
+	struct nlattr *tb_vendor[QCA_WLAN_VENDOR_ATTR_HE_CAPABILITIES_MAX + 1];
+	size_t len;
+
+	nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),
+		  genlmsg_attrlen(gnlh, 0), NULL);
+
+	if (!tb[NL80211_ATTR_VENDOR_DATA])
+		return NL_SKIP;
+
+	nl_vend = tb[NL80211_ATTR_VENDOR_DATA];
+	nla_parse(tb_vendor, QCA_WLAN_VENDOR_ATTR_HE_CAPABILITIES_MAX,
+		  nla_data(nl_vend), nla_len(nl_vend), NULL);
+
+	if (tb_vendor[QCA_WLAN_VENDOR_ATTR_HE_SUPPORTED]) {
+		u8 he_supported;
+
+		he_supported = nla_get_u8(
+			tb_vendor[QCA_WLAN_VENDOR_ATTR_HE_SUPPORTED]);
+		wpa_printf(MSG_DEBUG, "nl80211: HE capabilities supported: %u",
+			   he_supported);
+		he_capab->he_supported = he_supported;
+		if (!he_supported)
+			return NL_SKIP;
+	}
+
+	if (tb_vendor[QCA_WLAN_VENDOR_ATTR_PHY_CAPAB]) {
+		len = nla_len(tb_vendor[QCA_WLAN_VENDOR_ATTR_PHY_CAPAB]);
+
+		if (len > sizeof(he_capab->phy_cap))
+			len = sizeof(he_capab->phy_cap);
+		os_memcpy(he_capab->phy_cap,
+			  nla_data(tb_vendor[QCA_WLAN_VENDOR_ATTR_PHY_CAPAB]),
+			  len);
+	}
+
+	if (tb_vendor[QCA_WLAN_VENDOR_ATTR_MAC_CAPAB])
+		he_capab->mac_cap =
+			nla_get_u32(tb_vendor[QCA_WLAN_VENDOR_ATTR_MAC_CAPAB]);
+
+	if (tb_vendor[QCA_WLAN_VENDOR_ATTR_HE_MCS])
+		he_capab->mcs =
+			nla_get_u32(tb_vendor[QCA_WLAN_VENDOR_ATTR_HE_MCS]);
+
+	if (tb_vendor[QCA_WLAN_VENDOR_ATTR_NUM_SS])
+		he_capab->ppet.numss_m1 =
+			nla_get_u32(tb_vendor[QCA_WLAN_VENDOR_ATTR_NUM_SS]);
+
+	if (tb_vendor[QCA_WLAN_VENDOR_ATTR_RU_IDX_MASK])
+		he_capab->ppet.ru_count =
+			nla_get_u32(tb_vendor[QCA_WLAN_VENDOR_ATTR_RU_IDX_MASK]);
+
+	if (tb_vendor[QCA_WLAN_VENDOR_ATTR_PPE_THRESHOLD]) {
+		len = nla_len(tb_vendor[QCA_WLAN_VENDOR_ATTR_PPE_THRESHOLD]);
+
+		if (len > sizeof(he_capab->ppet.ppet16_ppet8_ru3_ru0))
+			len = sizeof(he_capab->ppet.ppet16_ppet8_ru3_ru0);
+		os_memcpy(he_capab->ppet.ppet16_ppet8_ru3_ru0,
+			  nla_data(tb_vendor[QCA_WLAN_VENDOR_ATTR_PPE_THRESHOLD]),
+			  len);
+	}
+
+	return NL_SKIP;
+}
+
+
+static void qca_nl80211_check_he_capab(struct wpa_driver_nl80211_data *drv)
+{
+	struct nl_msg *msg;
+	int ret;
+
+	if (!drv->he_capab_vendor_cmd_avail)
+		return;
+
+	if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) ||
+		nla_put_u32(msg, NL80211_ATTR_VENDOR_ID, OUI_QCA) ||
+		nla_put_u32(msg, NL80211_ATTR_VENDOR_SUBCMD,
+			    QCA_NL80211_VENDOR_SUBCMD_GET_HE_CAPABILITIES)) {
+		nlmsg_free(msg);
+		return;
+	}
+
+	ret = send_and_recv_msgs(drv, msg, qca_nl80211_he_capab_handler,
+				 &drv->he_capab);
+	if (!ret && drv->he_capab.he_supported)
+		drv->capa.flags |= WPA_DRIVER_FLAGS_HE_CAPABILITIES;
+}
+
+
 struct features_info {
 	u8 *flags;
 	size_t flags_len;
@@ -1276,6 +1373,7 @@
 	if (!(info.capa->flags & WPA_DRIVER_FLAGS_DFS_OFFLOAD))
 		qca_nl80211_check_dfs_capa(drv);
 	qca_nl80211_get_features(drv);
+	qca_nl80211_check_he_capab(drv);
 
 	/*
 	 * To enable offchannel simultaneous support in wpa_supplicant, the
@@ -1394,57 +1492,6 @@
 		chan->dfs_cac_ms = nla_get_u32(
 			tb_freq[NL80211_FREQUENCY_ATTR_DFS_CAC_TIME]);
 	}
-
-	chan->wmm_rules_valid = 0;
-	if (tb_freq[NL80211_FREQUENCY_ATTR_WMM]) {
-		static struct nla_policy wmm_policy[NL80211_WMMR_MAX + 1] = {
-			[NL80211_WMMR_CW_MIN] = { .type = NLA_U16 },
-			[NL80211_WMMR_CW_MAX] = { .type = NLA_U16 },
-			[NL80211_WMMR_AIFSN] = { .type = NLA_U8 },
-			[NL80211_WMMR_TXOP] = { .type = NLA_U16 },
-		};
-		struct nlattr *nl_wmm;
-		struct nlattr *tb_wmm[NL80211_WMMR_MAX + 1];
-		int rem_wmm, ac, count = 0;
-
-		nla_for_each_nested(nl_wmm, tb_freq[NL80211_FREQUENCY_ATTR_WMM],
-				    rem_wmm) {
-			if (nla_parse_nested(tb_wmm, NL80211_WMMR_MAX, nl_wmm,
-					     wmm_policy)) {
-				wpa_printf(MSG_DEBUG,
-					   "nl80211: Failed to parse WMM rules attribute");
-				return;
-			}
-			if (!tb_wmm[NL80211_WMMR_CW_MIN] ||
-			    !tb_wmm[NL80211_WMMR_CW_MAX] ||
-			    !tb_wmm[NL80211_WMMR_AIFSN] ||
-			    !tb_wmm[NL80211_WMMR_TXOP]) {
-				wpa_printf(MSG_DEBUG,
-					   "nl80211: Channel is missing WMM rule attribute");
-				return;
-			}
-			ac = nl_wmm->nla_type;
-			if (ac < 0 || ac >= WMM_AC_NUM) {
-				wpa_printf(MSG_DEBUG,
-					   "nl80211: Invalid AC value %d", ac);
-				return;
-			}
-
-			chan->wmm_rules[ac].min_cwmin =
-				nla_get_u16(tb_wmm[NL80211_WMMR_CW_MIN]);
-			chan->wmm_rules[ac].min_cwmax =
-				nla_get_u16(tb_wmm[NL80211_WMMR_CW_MAX]);
-			chan->wmm_rules[ac].min_aifs =
-				nla_get_u8(tb_wmm[NL80211_WMMR_AIFSN]);
-			chan->wmm_rules[ac].max_txop =
-				nla_get_u16(tb_wmm[NL80211_WMMR_TXOP]) / 32;
-			count++;
-		}
-
-		/* Set valid flag if all the AC rules are present */
-		if (count == WMM_AC_NUM)
-			chan->wmm_rules_valid = 1;
-	}
 }
 
 
@@ -1551,101 +1598,6 @@
 }
 
 
-static void phy_info_iftype_copy(struct he_capabilities *he_capab,
-				 enum ieee80211_op_mode opmode,
-				 struct nlattr **tb, struct nlattr **tb_flags)
-{
-	enum nl80211_iftype iftype;
-	size_t len;
-
-	switch (opmode) {
-	case IEEE80211_MODE_INFRA:
-		iftype = NL80211_IFTYPE_STATION;
-		break;
-	case IEEE80211_MODE_IBSS:
-		iftype = NL80211_IFTYPE_ADHOC;
-		break;
-	case IEEE80211_MODE_AP:
-		iftype = NL80211_IFTYPE_AP;
-		break;
-	case IEEE80211_MODE_MESH:
-		iftype = NL80211_IFTYPE_MESH_POINT;
-		break;
-	default:
-		return;
-	}
-
-	if (!nla_get_flag(tb_flags[iftype]))
-		return;
-
-	he_capab->he_supported = 1;
-
-	if (tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_PHY]) {
-		len = nla_len(tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_PHY]);
-
-		if (len > sizeof(he_capab->phy_cap))
-			len = sizeof(he_capab->phy_cap);
-		os_memcpy(he_capab->phy_cap,
-			  nla_data(tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_PHY]),
-			  len);
-	}
-
-	if (tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_MAC]) {
-		len = nla_len(tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_MAC]);
-
-		if (len > sizeof(he_capab->mac_cap))
-			len = sizeof(he_capab->mac_cap);
-		os_memcpy(he_capab->mac_cap,
-			  nla_data(tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_MAC]),
-			  len);
-	}
-
-	if (tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_MCS_SET]) {
-		len = nla_len(tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_MCS_SET]);
-
-		if (len > sizeof(he_capab->mcs))
-			len = sizeof(he_capab->mcs);
-		os_memcpy(he_capab->mcs,
-			  nla_data(tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_MCS_SET]),
-			  len);
-	}
-
-	if (tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE]) {
-		len = nla_len(tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE]);
-
-		if (len > sizeof(he_capab->ppet))
-			len = sizeof(he_capab->ppet);
-		os_memcpy(&he_capab->ppet,
-			  nla_data(tb[NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE]),
-			  len);
-	}
-}
-
-
-static int phy_info_iftype(struct hostapd_hw_modes *mode,
-			   struct nlattr *nl_iftype)
-{
-	struct nlattr *tb[NL80211_BAND_IFTYPE_ATTR_MAX + 1];
-	struct nlattr *tb_flags[NL80211_IFTYPE_MAX + 1];
-	unsigned int i;
-
-	nla_parse(tb, NL80211_BAND_IFTYPE_ATTR_MAX,
-		  nla_data(nl_iftype), nla_len(nl_iftype), NULL);
-
-	if (!tb[NL80211_BAND_IFTYPE_ATTR_IFTYPES])
-		return NL_STOP;
-
-	if (nla_parse_nested(tb_flags, NL80211_IFTYPE_MAX,
-			     tb[NL80211_BAND_IFTYPE_ATTR_IFTYPES], NULL))
-		return NL_STOP;
-
-	for (i = 0; i < IEEE80211_MODE_NUM; i++)
-		phy_info_iftype_copy(&mode->he_capab[i], i, tb, tb_flags);
-
-	return NL_OK;
-}
-
-
 static int phy_info_band(struct phy_info_arg *phy_info, struct nlattr *nl_band)
 {
 	struct nlattr *tb_band[NL80211_BAND_ATTR_MAX + 1];
@@ -1702,19 +1654,6 @@
 		return ret;
 	}
 
-	if (tb_band[NL80211_BAND_ATTR_IFTYPE_DATA]) {
-		struct nlattr *nl_iftype;
-		int rem_band;
-
-		nla_for_each_nested(nl_iftype,
-				    tb_band[NL80211_BAND_ATTR_IFTYPE_DATA],
-				    rem_band) {
-			ret = phy_info_iftype(mode, nl_iftype);
-			if (ret != NL_OK)
-				return ret;
-		}
-	}
-
 	return NL_OK;
 }
 
diff --git a/src/drivers/driver_nl80211_event.c b/src/drivers/driver_nl80211_event.c
index 7c16330..ee7b4da 100644
--- a/src/drivers/driver_nl80211_event.c
+++ b/src/drivers/driver_nl80211_event.c
@@ -136,7 +136,6 @@
 	C2S(NL80211_CMD_EXTERNAL_AUTH)
 	C2S(NL80211_CMD_STA_OPMODE_CHANGED)
 	C2S(NL80211_CMD_CONTROL_PORT_FRAME)
-	C2S(NL80211_CMD_UPDATE_OWE_INFO)
 	default:
 		return "NL80211_CMD_UNKNOWN";
 	}
@@ -535,8 +534,7 @@
 static void mlme_event_ch_switch(struct wpa_driver_nl80211_data *drv,
 				 struct nlattr *ifindex, struct nlattr *freq,
 				 struct nlattr *type, struct nlattr *bw,
-				 struct nlattr *cf1, struct nlattr *cf2,
-				 int finished)
+				 struct nlattr *cf1, struct nlattr *cf2)
 {
 	struct i802_bss *bss;
 	union wpa_event_data data;
@@ -544,8 +542,7 @@
 	int chan_offset = 0;
 	int ifidx;
 
-	wpa_printf(MSG_DEBUG, "nl80211: Channel switch%s event",
-		   finished ? "" : " started");
+	wpa_printf(MSG_DEBUG, "nl80211: Channel switch event");
 
 	if (!freq)
 		return;
@@ -596,12 +593,10 @@
 	if (cf2)
 		data.ch_switch.cf2 = nla_get_u32(cf2);
 
-	if (finished)
-		bss->freq = data.ch_switch.freq;
+	bss->freq = data.ch_switch.freq;
 	drv->assoc_freq = data.ch_switch.freq;
 
-	wpa_supplicant_event(bss->ctx, finished ?
-			     EVENT_CH_SWITCH : EVENT_CH_SWITCH_STARTED, &data);
+	wpa_supplicant_event(bss->ctx, EVENT_CH_SWITCH, &data);
 }
 
 
@@ -1106,29 +1101,6 @@
 }
 
 
-static void mlme_event_dh_event(struct wpa_driver_nl80211_data *drv,
-				struct i802_bss *bss,
-				struct nlattr *tb[])
-{
-	union wpa_event_data data;
-
-	if (!is_ap_interface(drv->nlmode))
-		return;
-	if (!tb[NL80211_ATTR_MAC] || !tb[NL80211_ATTR_IE])
-		return;
-
-	os_memset(&data, 0, sizeof(data));
-	data.update_dh.peer = nla_data(tb[NL80211_ATTR_MAC]);
-	data.update_dh.ie = nla_data(tb[NL80211_ATTR_IE]);
-	data.update_dh.ie_len = nla_len(tb[NL80211_ATTR_IE]);
-
-	wpa_printf(MSG_DEBUG, "nl80211: DH event - peer " MACSTR,
-		   MAC2STR(data.update_dh.peer));
-
-	wpa_supplicant_event(bss->ctx, EVENT_UPDATE_DH, &data);
-}
-
-
 static void send_scan_event(struct wpa_driver_nl80211_data *drv, int aborted,
 			    struct nlattr *tb[], int external_scan)
 {
@@ -2536,16 +2508,6 @@
 				   tb[NL80211_ATTR_PMK],
 				   tb[NL80211_ATTR_PMKID]);
 		break;
-	case NL80211_CMD_CH_SWITCH_STARTED_NOTIFY:
-		mlme_event_ch_switch(drv,
-				     tb[NL80211_ATTR_IFINDEX],
-				     tb[NL80211_ATTR_WIPHY_FREQ],
-				     tb[NL80211_ATTR_WIPHY_CHANNEL_TYPE],
-				     tb[NL80211_ATTR_CHANNEL_WIDTH],
-				     tb[NL80211_ATTR_CENTER_FREQ1],
-				     tb[NL80211_ATTR_CENTER_FREQ2],
-				     0);
-		break;
 	case NL80211_CMD_CH_SWITCH_NOTIFY:
 		mlme_event_ch_switch(drv,
 				     tb[NL80211_ATTR_IFINDEX],
@@ -2553,8 +2515,7 @@
 				     tb[NL80211_ATTR_WIPHY_CHANNEL_TYPE],
 				     tb[NL80211_ATTR_CHANNEL_WIDTH],
 				     tb[NL80211_ATTR_CENTER_FREQ1],
-				     tb[NL80211_ATTR_CENTER_FREQ2],
-				     1);
+				     tb[NL80211_ATTR_CENTER_FREQ2]);
 		break;
 	case NL80211_CMD_DISCONNECT:
 		mlme_event_disconnect(drv, tb[NL80211_ATTR_REASON_CODE],
@@ -2625,9 +2586,6 @@
 	case NL80211_CMD_STA_OPMODE_CHANGED:
 		nl80211_sta_opmode_change_event(drv, tb);
 		break;
-	case NL80211_CMD_UPDATE_OWE_INFO:
-		mlme_event_dh_event(drv, bss, tb);
-		break;
 	default:
 		wpa_dbg(drv->ctx, MSG_DEBUG, "nl80211: Ignored unknown event "
 			"(cmd=%d)", cmd);
@@ -2676,9 +2634,8 @@
 			}
 		}
 		wpa_printf(MSG_DEBUG,
-			   "nl80211: Ignored event %d (%s) for foreign interface (ifindex %d wdev 0x%llx)",
-			   gnlh->cmd, nl80211_command_to_string(gnlh->cmd),
-			   ifidx, (long long unsigned int) wdev_id);
+			   "nl80211: Ignored event (cmd=%d) for foreign interface (ifindex %d wdev 0x%llx)",
+			   gnlh->cmd, ifidx, (long long unsigned int) wdev_id);
 	}
 
 	return NL_SKIP;
diff --git a/src/drivers/driver_privsep.c b/src/drivers/driver_privsep.c
index 55cf618..a3f0837 100644
--- a/src/drivers/driver_privsep.c
+++ b/src/drivers/driver_privsep.c
@@ -368,7 +368,7 @@
 
 
 static int wpa_driver_privsep_deauthenticate(void *priv, const u8 *addr,
-					     u16 reason_code)
+					  int reason_code)
 {
 	//struct wpa_driver_privsep_data *drv = priv;
 	wpa_printf(MSG_DEBUG, "%s addr=" MACSTR " reason_code=%d",
diff --git a/src/drivers/driver_wext.c b/src/drivers/driver_wext.c
index 4d4a05d..f7755cc 100644
--- a/src/drivers/driver_wext.c
+++ b/src/drivers/driver_wext.c
@@ -1915,7 +1915,7 @@
 
 
 static int wpa_driver_wext_mlme(struct wpa_driver_wext_data *drv,
-				const u8 *addr, int cmd, u16 reason_code)
+				const u8 *addr, int cmd, int reason_code)
 {
 	struct iwreq iwr;
 	struct iw_mlme mlme;
@@ -1998,7 +1998,7 @@
 
 
 static int wpa_driver_wext_deauthenticate(void *priv, const u8 *addr,
-					  u16 reason_code)
+					  int reason_code)
 {
 	struct wpa_driver_wext_data *drv = priv;
 	int ret;
diff --git a/src/drivers/nl80211_copy.h b/src/drivers/nl80211_copy.h
index 6f09d15..dd4f86e 100644
--- a/src/drivers/nl80211_copy.h
+++ b/src/drivers/nl80211_copy.h
@@ -11,7 +11,7 @@
  * Copyright 2008 Jouni Malinen <jouni.malinen@atheros.com>
  * Copyright 2008 Colin McCabe <colin@cozybit.com>
  * Copyright 2015-2017	Intel Deutschland GmbH
- * Copyright (C) 2018-2019 Intel Corporation
+ * Copyright (C) 2018 Intel Corporation
  *
  * Permission to use, copy, modify, and/or distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -1065,26 +1065,6 @@
  *	indicated by %NL80211_ATTR_WIPHY_FREQ and other attributes
  *	determining the width and type.
  *
- * @NL80211_CMD_UPDATE_OWE_INFO: This interface allows the host driver to
- *	offload OWE processing to user space. This intends to support
- *	OWE AKM by the host drivers that implement SME but rely
- *	on the user space for the cryptographic/DH IE processing in AP mode.
- *
- * @NL80211_CMD_PROBE_MESH_LINK: The requirement for mesh link metric
- *	refreshing, is that from one mesh point we be able to send some data
- *	frames to other mesh points which are not currently selected as a
- *	primary traffic path, but which are only 1 hop away. The absence of
- *	the primary path to the chosen node makes it necessary to apply some
- *	form of marking on a chosen packet stream so that the packets can be
- *	properly steered to the selected node for testing, and not by the
- *	regular mesh path lookup. Further, the packets must be of type data
- *	so that the rate control (often embedded in firmware) is used for
- *	rate selection.
- *
- *	Here attribute %NL80211_ATTR_MAC is used to specify connected mesh
- *	peer MAC address and %NL80211_ATTR_FRAME is used to specify the frame
- *	content. The frame is ethernet data.
- *
  * @NL80211_CMD_MAX: highest used command number
  * @__NL80211_CMD_AFTER_LAST: internal use
  */
@@ -1305,10 +1285,6 @@
 
 	NL80211_CMD_NOTIFY_RADAR,
 
-	NL80211_CMD_UPDATE_OWE_INFO,
-
-	NL80211_CMD_PROBE_MESH_LINK,
-
 	/* add new commands above here */
 
 	/* used to define NL80211_CMD_MAX below */
@@ -2332,15 +2308,6 @@
  * @NL80211_ATTR_AIRTIME_WEIGHT: Station's weight when scheduled by the airtime
  *	scheduler.
  *
- * @NL80211_ATTR_STA_TX_POWER_SETTING: Transmit power setting type (u8) for
- *	station associated with the AP. See &enum nl80211_tx_power_setting for
- *	possible values.
- * @NL80211_ATTR_STA_TX_POWER: Transmit power level (s16) in dBm units. This
- *	allows to set Tx power for a station. If this attribute is not included,
- *	the default per-interface tx power setting will be overriding. Driver
- *	should be picking up the lowest tx power, either tx power per-interface
- *	or per-station.
- *
  * @NUM_NL80211_ATTR: total number of nl80211_attrs available
  * @NL80211_ATTR_MAX: highest attribute number currently defined
  * @__NL80211_ATTR_AFTER_LAST: internal use
@@ -2791,8 +2758,6 @@
 	NL80211_ATTR_PEER_MEASUREMENTS,
 
 	NL80211_ATTR_AIRTIME_WEIGHT,
-	NL80211_ATTR_STA_TX_POWER_SETTING,
-	NL80211_ATTR_STA_TX_POWER,
 
 	/* add attributes here, update the policy in nl80211.c */
 
@@ -2837,7 +2802,7 @@
 
 #define NL80211_MAX_SUPP_RATES			32
 #define NL80211_MAX_SUPP_HT_RATES		77
-#define NL80211_MAX_SUPP_REG_RULES		128
+#define NL80211_MAX_SUPP_REG_RULES		64
 #define NL80211_TKIP_DATA_OFFSET_ENCR_KEY	0
 #define NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY	16
 #define NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY	24
@@ -3174,7 +3139,6 @@
  * @NL80211_STA_INFO_TX_DURATION: aggregate PPDU duration for all frames
  *	sent to the station (u64, usec)
  * @NL80211_STA_INFO_AIRTIME_WEIGHT: current airtime weight for station (u16)
- * @NL80211_STA_INFO_AIRTIME_LINK_METRIC: airtime link metric for mesh station
  * @__NL80211_STA_INFO_AFTER_LAST: internal
  * @NL80211_STA_INFO_MAX: highest possible station info attribute
  */
@@ -3220,7 +3184,6 @@
 	NL80211_STA_INFO_CONNECTED_TO_GATE,
 	NL80211_STA_INFO_TX_DURATION,
 	NL80211_STA_INFO_AIRTIME_WEIGHT,
-	NL80211_STA_INFO_AIRTIME_LINK_METRIC,
 
 	/* keep last */
 	__NL80211_STA_INFO_AFTER_LAST,
@@ -3675,14 +3638,6 @@
  *	value as specified by &struct nl80211_bss_select_rssi_adjust.
  * @NL80211_SCHED_SCAN_MATCH_ATTR_BSSID: BSSID to be used for matching
  *	(this cannot be used together with SSID).
- * @NL80211_SCHED_SCAN_MATCH_PER_BAND_RSSI: Nested attribute that carries the
- *	band specific minimum rssi thresholds for the bands defined in
- *	enum nl80211_band. The minimum rssi threshold value(s32) specific to a
- *	band shall be encapsulated in attribute with type value equals to one
- *	of the NL80211_BAND_* defined in enum nl80211_band. For example, the
- *	minimum rssi threshold value for 2.4GHZ band shall be encapsulated
- *	within an attribute of type NL80211_BAND_2GHZ. And one or more of such
- *	attributes will be nested within this attribute.
  * @NL80211_SCHED_SCAN_MATCH_ATTR_MAX: highest scheduled scan filter
  *	attribute number currently defined
  * @__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST: internal use
@@ -3695,7 +3650,6 @@
 	NL80211_SCHED_SCAN_MATCH_ATTR_RELATIVE_RSSI,
 	NL80211_SCHED_SCAN_MATCH_ATTR_RSSI_ADJUST,
 	NL80211_SCHED_SCAN_MATCH_ATTR_BSSID,
-	NL80211_SCHED_SCAN_MATCH_PER_BAND_RSSI,
 
 	/* keep last */
 	__NL80211_SCHED_SCAN_MATCH_ATTR_AFTER_LAST,
@@ -4181,27 +4135,6 @@
 };
 
 /**
- * enum nl80211_key_mode - Key mode
- *
- * @NL80211_KEY_RX_TX: (Default)
- *	Key can be used for Rx and Tx immediately
- *
- * The following modes can only be selected for unicast keys and when the
- * driver supports @NL80211_EXT_FEATURE_EXT_KEY_ID:
- *
- * @NL80211_KEY_NO_TX: Only allowed in combination with @NL80211_CMD_NEW_KEY:
- *	Unicast key can only be used for Rx, Tx not allowed, yet
- * @NL80211_KEY_SET_TX: Only allowed in combination with @NL80211_CMD_SET_KEY:
- *	The unicast key identified by idx and mac is cleared for Tx and becomes
- *	the preferred Tx key for the station.
- */
-enum nl80211_key_mode {
-	NL80211_KEY_RX_TX,
-	NL80211_KEY_NO_TX,
-	NL80211_KEY_SET_TX
-};
-
-/**
  * enum nl80211_chan_width - channel width definitions
  *
  * These values are used with the %NL80211_ATTR_CHANNEL_WIDTH
@@ -4444,9 +4377,6 @@
  * @NL80211_KEY_DEFAULT_TYPES: A nested attribute containing flags
  *	attributes, specifying what a key should be set as default as.
  *	See &enum nl80211_key_default_types.
- * @NL80211_KEY_MODE: the mode from enum nl80211_key_mode.
- *	Defaults to @NL80211_KEY_RX_TX.
- *
  * @__NL80211_KEY_AFTER_LAST: internal
  * @NL80211_KEY_MAX: highest key attribute
  */
@@ -4460,7 +4390,6 @@
 	NL80211_KEY_DEFAULT_MGMT,
 	NL80211_KEY_TYPE,
 	NL80211_KEY_DEFAULT_TYPES,
-	NL80211_KEY_MODE,
 
 	/* keep last */
 	__NL80211_KEY_AFTER_LAST,
@@ -5406,8 +5335,6 @@
  *      able to rekey an in-use key correctly. Userspace must not rekey PTK keys
  *      if this flag is not set. Ignoring this can leak clear text packets and/or
  *      freeze the connection.
- * @NL80211_EXT_FEATURE_EXT_KEY_ID: Driver supports "Extended Key ID for
- *      Individually Addressed Frames" from IEEE802.11-2016.
  *
  * @NL80211_EXT_FEATURE_AIRTIME_FAIRNESS: Driver supports getting airtime
  *	fairness for transmitted packets and has enabled airtime fairness
@@ -5416,12 +5343,6 @@
  * @NL80211_EXT_FEATURE_AP_PMKSA_CACHING: Driver/device supports PMKSA caching
  *	(set/del PMKSA operations) in AP mode.
  *
- * @NL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD: Driver supports
- *	filtering of sched scan results using band specific RSSI thresholds.
- *
- * @NL80211_EXT_FEATURE_STA_TX_PWR: This driver supports controlling tx power
- *	to a station.
- *
  * @NUM_NL80211_EXT_FEATURES: number of extended features.
  * @MAX_NL80211_EXT_FEATURES: highest extended feature index.
  */
@@ -5463,9 +5384,6 @@
 	NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER,
 	NL80211_EXT_FEATURE_AIRTIME_FAIRNESS,
 	NL80211_EXT_FEATURE_AP_PMKSA_CACHING,
-	NL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD,
-	NL80211_EXT_FEATURE_EXT_KEY_ID,
-	NL80211_EXT_FEATURE_STA_TX_PWR,
 
 	/* add new features before the definition below */
 	NUM_NL80211_EXT_FEATURES,
