diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index 9a6db90..a449cc9 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -21,9 +21,6 @@
 
 #include "common/defs.h"
 #include "common/ieee802_11_defs.h"
-#ifdef CONFIG_MACSEC
-#include "pae/ieee802_1x_kay.h"
-#endif /* CONFIG_MACSEC */
 #include "utils/list.h"
 
 #define HOSTAPD_CHAN_DISABLED 0x00000001
@@ -488,18 +485,17 @@
 	int p2p;
 
 	/**
-	 * auth_data - Additional elements for Authentication frame
+	 * sae_data - SAE elements for Authentication frame
 	 *
 	 * This buffer starts with the Authentication transaction sequence
-	 * number field. If no special handling of such elements is needed, this
-	 * pointer is %NULL. This is used with SAE and FILS.
+	 * number field. If SAE is not used, this pointer is %NULL.
 	 */
-	const u8 *auth_data;
+	const u8 *sae_data;
 
 	/**
-	 * auth_data_len - Length of auth_data buffer in octets
+	 * sae_data_len - Length of sae_data buffer in octets
 	 */
-	size_t auth_data_len;
+	size_t sae_data_len;
 };
 
 /**
@@ -886,27 +882,6 @@
 	 * AP as usual. Valid for DMG network only.
 	 */
 	int pbss;
-
-	/**
-	 * fils_kek - KEK for FILS association frame protection (AES-SIV)
-	 */
-	const u8 *fils_kek;
-
-	/**
-	 * fils_kek_len: Length of fils_kek in bytes
-	 */
-	size_t fils_kek_len;
-
-	/**
-	 * fils_nonces - Nonces for FILS association frame protection
-	 * (AES-SIV AAD)
-	 */
-	const u8 *fils_nonces;
-
-	/**
-	 * fils_nonces_len: Length of fils_nonce in bytes
-	 */
-	size_t fils_nonces_len;
 };
 
 enum hide_ssid {
@@ -1311,8 +1286,6 @@
 #define WPA_DRIVER_FLAGS_FULL_AP_CLIENT_STATE	0x0000010000000000ULL
 /** Driver supports P2P Listen offload */
 #define WPA_DRIVER_FLAGS_P2P_LISTEN_OFFLOAD     0x0000020000000000ULL
-/** Driver supports FILS */
-#define WPA_DRIVER_FLAGS_SUPPORT_FILS		0x0000040000000000ULL
 	u64 flags;
 
 #define FULL_AP_CLIENT_STATE_SUPP(drv_flags) \
@@ -3322,14 +3295,6 @@
 	int (*macsec_deinit)(void *priv);
 
 	/**
-	 * macsec_get_capability - Inform MKA of this driver's capability
-	 * @priv: Private driver interface data
-	 * @cap: Driver's capability
-	 * Returns: 0 on success, -1 on failure
-	 */
-	int (*macsec_get_capability)(void *priv, enum macsec_cap *cap);
-
-	/**
 	 * enable_protect_frames - Set protect frames status
 	 * @priv: Private driver interface data
 	 * @enabled: TRUE = protect frames enabled
@@ -3368,129 +3333,155 @@
 	/**
 	 * get_receive_lowest_pn - Get receive lowest pn
 	 * @priv: Private driver interface data
-	 * @sa: secure association
+	 * @channel: secure channel
+	 * @an: association number
+	 * @lowest_pn: lowest accept pn
 	 * Returns: 0 on success, -1 on failure (or if not supported)
 	 */
-	int (*get_receive_lowest_pn)(void *priv, struct receive_sa *sa);
+	int (*get_receive_lowest_pn)(void *priv, u32 channel, u8 an,
+				     u32 *lowest_pn);
 
 	/**
 	 * get_transmit_next_pn - Get transmit next pn
 	 * @priv: Private driver interface data
-	 * @sa: secure association
+	 * @channel: secure channel
+	 * @an: association number
+	 * @next_pn: next pn
 	 * Returns: 0 on success, -1 on failure (or if not supported)
 	 */
-	int (*get_transmit_next_pn)(void *priv, struct transmit_sa *sa);
+	int (*get_transmit_next_pn)(void *priv, u32 channel, u8 an,
+				    u32 *next_pn);
 
 	/**
 	 * set_transmit_next_pn - Set transmit next pn
 	 * @priv: Private driver interface data
-	 * @sa: secure association
+	 * @channel: secure channel
+	 * @an: association number
+	 * @next_pn: next pn
 	 * Returns: 0 on success, -1 on failure (or if not supported)
 	 */
-	int (*set_transmit_next_pn)(void *priv, struct transmit_sa *sa);
+	int (*set_transmit_next_pn)(void *priv, u32 channel, u8 an,
+				    u32 next_pn);
+
+	/**
+	 * get_available_receive_sc - get available receive channel
+	 * @priv: Private driver interface data
+	 * @channel: secure channel
+	 * Returns: 0 on success, -1 on failure (or if not supported)
+	 */
+	int (*get_available_receive_sc)(void *priv, u32 *channel);
 
 	/**
 	 * create_receive_sc - create secure channel for receiving
 	 * @priv: Private driver interface data
-	 * @sc: secure channel
+	 * @channel: secure channel
+	 * @sci_addr: secure channel identifier - address
+	 * @sci_port: secure channel identifier - port
 	 * @conf_offset: confidentiality offset (0, 30, or 50)
 	 * @validation: frame validation policy (0 = Disabled, 1 = Checked,
 	 *	2 = Strict)
 	 * Returns: 0 on success, -1 on failure (or if not supported)
 	 */
-	int (*create_receive_sc)(void *priv, struct receive_sc *sc,
-				 unsigned int conf_offset,
+	int (*create_receive_sc)(void *priv, u32 channel, const u8 *sci_addr,
+				 u16 sci_port, unsigned int conf_offset,
 				 int validation);
 
 	/**
 	 * delete_receive_sc - delete secure connection for receiving
 	 * @priv: private driver interface data from init()
-	 * @sc: secure channel
+	 * @channel: secure channel
 	 * Returns: 0 on success, -1 on failure
 	 */
-	int (*delete_receive_sc)(void *priv, struct receive_sc *sc);
+	int (*delete_receive_sc)(void *priv, u32 channel);
 
 	/**
 	 * create_receive_sa - create secure association for receive
 	 * @priv: private driver interface data from init()
-	 * @sa: secure association
+	 * @channel: secure channel
+	 * @an: association number
+	 * @lowest_pn: the lowest packet number can be received
+	 * @sak: the secure association key
 	 * Returns: 0 on success, -1 on failure
 	 */
-	int (*create_receive_sa)(void *priv, struct receive_sa *sa);
-
-	/**
-	 * delete_receive_sa - Delete secure association for receive
-	 * @priv: Private driver interface data from init()
-	 * @sa: Secure association
-	 * Returns: 0 on success, -1 on failure
-	 */
-	int (*delete_receive_sa)(void *priv, struct receive_sa *sa);
+	int (*create_receive_sa)(void *priv, u32 channel, u8 an,
+				 u32 lowest_pn, const u8 *sak);
 
 	/**
 	 * enable_receive_sa - enable the SA for receive
 	 * @priv: private driver interface data from init()
-	 * @sa: secure association
+	 * @channel: secure channel
+	 * @an: association number
 	 * Returns: 0 on success, -1 on failure
 	 */
-	int (*enable_receive_sa)(void *priv, struct receive_sa *sa);
+	int (*enable_receive_sa)(void *priv, u32 channel, u8 an);
 
 	/**
 	 * disable_receive_sa - disable SA for receive
 	 * @priv: private driver interface data from init()
-	 * @sa: secure association
+	 * @channel: secure channel index
+	 * @an: association number
 	 * Returns: 0 on success, -1 on failure
 	 */
-	int (*disable_receive_sa)(void *priv, struct receive_sa *sa);
+	int (*disable_receive_sa)(void *priv, u32 channel, u8 an);
+
+	/**
+	 * get_available_transmit_sc - get available transmit channel
+	 * @priv: Private driver interface data
+	 * @channel: secure channel
+	 * Returns: 0 on success, -1 on failure (or if not supported)
+	 */
+	int (*get_available_transmit_sc)(void *priv, u32 *channel);
 
 	/**
 	 * create_transmit_sc - create secure connection for transmit
 	 * @priv: private driver interface data from init()
-	 * @sc: secure channel
-	 * @conf_offset: confidentiality offset (0, 30, or 50)
+	 * @channel: secure channel
+	 * @sci_addr: secure channel identifier - address
+	 * @sci_port: secure channel identifier - port
 	 * Returns: 0 on success, -1 on failure
 	 */
-	int (*create_transmit_sc)(void *priv, struct transmit_sc *sc,
-				  unsigned int conf_offset);
+	int (*create_transmit_sc)(void *priv, u32 channel, const u8 *sci_addr,
+				  u16 sci_port, unsigned int conf_offset);
 
 	/**
 	 * delete_transmit_sc - delete secure connection for transmit
 	 * @priv: private driver interface data from init()
-	 * @sc: secure channel
+	 * @channel: secure channel
 	 * Returns: 0 on success, -1 on failure
 	 */
-	int (*delete_transmit_sc)(void *priv, struct transmit_sc *sc);
+	int (*delete_transmit_sc)(void *priv, u32 channel);
 
 	/**
 	 * create_transmit_sa - create secure association for transmit
 	 * @priv: private driver interface data from init()
-	 * @sa: secure association
+	 * @channel: secure channel index
+	 * @an: association number
+	 * @next_pn: the packet number used as next transmit packet
+	 * @confidentiality: True if the SA is to provide confidentiality
+	 *                   as well as integrity
+	 * @sak: the secure association key
 	 * Returns: 0 on success, -1 on failure
 	 */
-	int (*create_transmit_sa)(void *priv, struct transmit_sa *sa);
-
-	/**
-	 * delete_transmit_sa - Delete secure association for transmit
-	 * @priv: Private driver interface data from init()
-	 * @sa: Secure association
-	 * Returns: 0 on success, -1 on failure
-	 */
-	int (*delete_transmit_sa)(void *priv, struct transmit_sa *sa);
+	int (*create_transmit_sa)(void *priv, u32 channel, u8 an, u32 next_pn,
+				  Boolean confidentiality, const u8 *sak);
 
 	/**
 	 * enable_transmit_sa - enable SA for transmit
 	 * @priv: private driver interface data from init()
-	 * @sa: secure association
+	 * @channel: secure channel
+	 * @an: association number
 	 * Returns: 0 on success, -1 on failure
 	 */
-	int (*enable_transmit_sa)(void *priv, struct transmit_sa *sa);
+	int (*enable_transmit_sa)(void *priv, u32 channel, u8 an);
 
 	/**
 	 * disable_transmit_sa - disable SA for transmit
 	 * @priv: private driver interface data from init()
-	 * @sa: secure association
+	 * @channel: secure channel
+	 * @an: association number
 	 * Returns: 0 on success, -1 on failure
 	 */
-	int (*disable_transmit_sa)(void *priv, struct transmit_sa *sa);
+	int (*disable_transmit_sa)(void *priv, u32 channel, u8 an);
 #endif /* CONFIG_MACSEC */
 
 	/**
@@ -3632,16 +3623,6 @@
 	 */
 	int (*set_default_scan_ies)(void *priv, const u8 *ies, size_t ies_len);
 
-	/**
-	 * set_tdls_mode - Set TDLS trigger mode to the host driver
-	 * @priv: Private driver interface data
-	 * @tdls_external_control: Represents if TDLS external trigger control
-	 *  mode is enabled/disabled.
-	 *
-	 * This optional callback can be used to configure the TDLS external
-	 * trigger control mode to the host driver.
-	 */
-	int (*set_tdls_mode)(void *priv, int tdls_external_control);
 };
 
 
@@ -4062,7 +4043,7 @@
 	 * EVENT_DFS_CAC_ABORTED - Notify that channel availability check has been aborted
 	 *
 	 * The CAC was not successful, and the channel remains in the previous
-	 * state. This may happen due to a radar being detected or other
+	 * state. This may happen due to a radar beeing detected or other
 	 * external influences.
 	 */
 	EVENT_DFS_CAC_ABORTED,
@@ -4223,16 +4204,6 @@
 		size_t resp_ies_len;
 
 		/**
-		 * resp_frame - (Re)Association Response frame
-		 */
-		const u8 *resp_frame;
-
-		/**
-		 * resp_frame_len - (Re)Association Response frame length
-		 */
-		size_t resp_frame_len;
-
-		/**
 		 * beacon_ies - Beacon or Probe Response IEs
 		 *
 		 * Optional Beacon/ProbeResp data: IEs included in Beacon or
diff --git a/src/drivers/driver_macsec_qca.c b/src/drivers/driver_macsec_qca.c
index 22d414c..826d3cc 100644
--- a/src/drivers/driver_macsec_qca.c
+++ b/src/drivers/driver_macsec_qca.c
@@ -29,7 +29,6 @@
 #include "utils/eloop.h"
 #include "common/defs.h"
 #include "common/ieee802_1x_defs.h"
-#include "pae/ieee802_1x_kay.h"
 #include "driver.h"
 
 #include "nss_macsec_secy.h"
@@ -56,10 +55,6 @@
 static const u8 pae_group_addr[ETH_ALEN] =
 { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x03 };
 
-struct channel_map {
-	struct ieee802_1x_mka_sci sci;
-};
-
 struct macsec_qca_data {
 	char ifname[IFNAMSIZ + 1];
 	u32 secy_id;
@@ -76,9 +71,6 @@
 	Boolean protect_frames;
 	Boolean replay_protect;
 	u32 replay_window;
-
-	struct channel_map receive_channel_map[MAXSC];
-	struct channel_map transmit_channel_map[MAXSC];
 };
 
 
@@ -465,16 +457,6 @@
 }
 
 
-static int macsec_qca_get_capability(void *priv, enum macsec_cap *cap)
-{
-	wpa_printf(MSG_DEBUG, "%s", __func__);
-
-	*cap = MACSEC_CAP_INTEG_AND_CONF_0_30_50;
-
-	return 0;
-}
-
-
 static int macsec_qca_enable_protect_frames(void *priv, Boolean enabled)
 {
 	struct macsec_qca_data *drv = priv;
@@ -533,82 +515,16 @@
 }
 
 
-static int macsec_qca_lookup_channel(struct channel_map *map,
-				     struct ieee802_1x_mka_sci *sci,
-				     u32 *channel)
-{
-	u32 i;
-
-	for (i = 0; i < MAXSC; i++) {
-		if (os_memcmp(&map[i].sci, sci,
-			      sizeof(struct ieee802_1x_mka_sci)) == 0) {
-			*channel = i;
-			return 0;
-		}
-	}
-
-	return -1;
-}
-
-
-static void macsec_qca_register_channel(struct channel_map *map,
-					struct ieee802_1x_mka_sci *sci,
-					u32 channel)
-{
-	os_memcpy(&map[channel].sci, sci, sizeof(struct ieee802_1x_mka_sci));
-}
-
-
-static int macsec_qca_lookup_receive_channel(struct macsec_qca_data *drv,
-					     struct receive_sc *sc,
-					     u32 *channel)
-{
-	return macsec_qca_lookup_channel(drv->receive_channel_map, &sc->sci,
-					 channel);
-}
-
-
-static void macsec_qca_register_receive_channel(struct macsec_qca_data *drv,
-						struct receive_sc *sc,
-						u32 channel)
-{
-	macsec_qca_register_channel(drv->receive_channel_map, &sc->sci,
-				    channel);
-}
-
-
-static int macsec_qca_lookup_transmit_channel(struct macsec_qca_data *drv,
-					      struct transmit_sc *sc,
-					      u32 *channel)
-{
-	return macsec_qca_lookup_channel(drv->transmit_channel_map, &sc->sci,
-					 channel);
-}
-
-
-static void macsec_qca_register_transmit_channel(struct macsec_qca_data *drv,
-						 struct transmit_sc *sc,
-						 u32 channel)
-{
-	macsec_qca_register_channel(drv->transmit_channel_map, &sc->sci,
-				    channel);
-}
-
-
-static int macsec_qca_get_receive_lowest_pn(void *priv, struct receive_sa *sa)
+static int macsec_qca_get_receive_lowest_pn(void *priv, u32 channel, u8 an,
+					    u32 *lowest_pn)
 {
 	struct macsec_qca_data *drv = priv;
 	int ret = 0;
 	u32 next_pn = 0;
 	bool enabled = FALSE;
 	u32 win;
-	u32 channel;
 
-	ret = macsec_qca_lookup_receive_channel(priv, sa->sc, &channel);
-	if (ret != 0)
-		return ret;
-
-	ret += nss_macsec_secy_rx_sa_next_pn_get(drv->secy_id, channel, sa->an,
+	ret += nss_macsec_secy_rx_sa_next_pn_get(drv->secy_id, channel, an,
 						 &next_pn);
 	ret += nss_macsec_secy_rx_sc_replay_protect_get(drv->secy_id, channel,
 							&enabled);
@@ -616,49 +532,40 @@
 							    channel, &win);
 
 	if (enabled)
-		sa->lowest_pn = (next_pn > win) ? (next_pn - win) : 1;
+		*lowest_pn = (next_pn > win) ? (next_pn - win) : 1;
 	else
-		sa->lowest_pn = next_pn;
+		*lowest_pn = next_pn;
 
-	wpa_printf(MSG_DEBUG, "%s: lpn=0x%x", __func__, sa->lowest_pn);
+	wpa_printf(MSG_DEBUG, "%s: lpn=0x%x", __func__, *lowest_pn);
 
 	return ret;
 }
 
 
-static int macsec_qca_get_transmit_next_pn(void *priv, struct transmit_sa *sa)
+static int macsec_qca_get_transmit_next_pn(void *priv, u32 channel, u8 an,
+					   u32 *next_pn)
 {
 	struct macsec_qca_data *drv = priv;
 	int ret = 0;
-	u32 channel;
 
-	ret = macsec_qca_lookup_transmit_channel(priv, sa->sc, &channel);
-	if (ret != 0)
-		return ret;
+	ret += nss_macsec_secy_tx_sa_next_pn_get(drv->secy_id, channel, an,
+						 next_pn);
 
-	ret += nss_macsec_secy_tx_sa_next_pn_get(drv->secy_id, channel, sa->an,
-						 &sa->next_pn);
-
-	wpa_printf(MSG_DEBUG, "%s: npn=0x%x", __func__, sa->next_pn);
+	wpa_printf(MSG_DEBUG, "%s: npn=0x%x", __func__, *next_pn);
 
 	return ret;
 }
 
 
-int macsec_qca_set_transmit_next_pn(void *priv, struct transmit_sa *sa)
+int macsec_qca_set_transmit_next_pn(void *priv, u32 channel, u8 an, u32 next_pn)
 {
 	struct macsec_qca_data *drv = priv;
 	int ret = 0;
-	u32 channel;
 
-	ret = macsec_qca_lookup_transmit_channel(priv, sa->sc, &channel);
-	if (ret != 0)
-		return ret;
+	ret += nss_macsec_secy_tx_sa_next_pn_set(drv->secy_id, channel, an,
+						 next_pn);
 
-	ret += nss_macsec_secy_tx_sa_next_pn_set(drv->secy_id, channel, sa->an,
-						 sa->next_pn);
-
-	wpa_printf(MSG_INFO, "%s: npn=0x%x", __func__, sa->next_pn);
+	wpa_printf(MSG_INFO, "%s: npn=0x%x", __func__, next_pn);
 
 	return ret;
 }
@@ -691,7 +598,8 @@
 }
 
 
-static int macsec_qca_create_receive_sc(void *priv, struct receive_sc *sc,
+static int macsec_qca_create_receive_sc(void *priv, u32 channel,
+					const u8 *sci_addr, u16 sci_port,
 					unsigned int conf_offset,
 					int validation)
 {
@@ -700,13 +608,6 @@
 	fal_rx_prc_lut_t entry;
 	fal_rx_sc_validate_frame_e vf;
 	enum validate_frames validate_frames = validation;
-	u32 channel;
-	const u8 *sci_addr = sc->sci.addr;
-	u16 sci_port = be_to_host16(sc->sci.port);
-
-	ret = macsec_qca_get_available_receive_sc(priv, &channel);
-	if (ret != 0)
-		return ret;
 
 	wpa_printf(MSG_DEBUG, "%s: channel=%d", __func__, channel);
 
@@ -741,22 +642,15 @@
 							    channel,
 							    drv->replay_window);
 
-	macsec_qca_register_receive_channel(drv, sc, channel);
-
 	return ret;
 }
 
 
-static int macsec_qca_delete_receive_sc(void *priv, struct receive_sc *sc)
+static int macsec_qca_delete_receive_sc(void *priv, u32 channel)
 {
 	struct macsec_qca_data *drv = priv;
-	int ret;
+	int ret = 0;
 	fal_rx_prc_lut_t entry;
-	u32 channel;
-
-	ret = macsec_qca_lookup_receive_channel(priv, sc, &channel);
-	if (ret != 0)
-		return ret;
 
 	wpa_printf(MSG_DEBUG, "%s: channel=%d", __func__, channel);
 
@@ -770,68 +664,49 @@
 }
 
 
-static int macsec_qca_create_receive_sa(void *priv, struct receive_sa *sa)
+static int macsec_qca_create_receive_sa(void *priv, u32 channel, u8 an,
+					u32 lowest_pn, const u8 *sak)
 {
 	struct macsec_qca_data *drv = priv;
-	int ret;
+	int ret = 0;
 	fal_rx_sak_t rx_sak;
 	int i = 0;
-	u32 channel;
-
-	ret = macsec_qca_lookup_receive_channel(priv, sa->sc, &channel);
-	if (ret != 0)
-		return ret;
 
 	wpa_printf(MSG_DEBUG, "%s, channel=%d, an=%d, lpn=0x%x",
-		   __func__, channel, sa->an, sa->lowest_pn);
+		   __func__, channel, an, lowest_pn);
 
 	os_memset(&rx_sak, 0, sizeof(rx_sak));
 	for (i = 0; i < 16; i++)
-		rx_sak.sak[i] = sa->pkey->key[15 - i];
+		rx_sak.sak[i] = sak[15 - i];
 
-	ret += nss_macsec_secy_rx_sa_create(drv->secy_id, channel, sa->an);
-	ret += nss_macsec_secy_rx_sak_set(drv->secy_id, channel, sa->an,
-					  &rx_sak);
+	ret += nss_macsec_secy_rx_sa_create(drv->secy_id, channel, an);
+	ret += nss_macsec_secy_rx_sak_set(drv->secy_id, channel, an, &rx_sak);
 
 	return ret;
 }
 
 
-static int macsec_qca_enable_receive_sa(void *priv, struct receive_sa *sa)
+static int macsec_qca_enable_receive_sa(void *priv, u32 channel, u8 an)
 {
 	struct macsec_qca_data *drv = priv;
-	int ret;
-	u32 channel;
+	int ret = 0;
 
-	ret = macsec_qca_lookup_receive_channel(priv, sa->sc, &channel);
-	if (ret != 0)
-		return ret;
+	wpa_printf(MSG_DEBUG, "%s: channel=%d, an=%d", __func__, channel, an);
 
-	wpa_printf(MSG_DEBUG, "%s: channel=%d, an=%d", __func__, channel,
-		   sa->an);
-
-	ret += nss_macsec_secy_rx_sa_en_set(drv->secy_id, channel, sa->an,
-					    TRUE);
+	ret += nss_macsec_secy_rx_sa_en_set(drv->secy_id, channel, an, TRUE);
 
 	return ret;
 }
 
 
-static int macsec_qca_disable_receive_sa(void *priv, struct receive_sa *sa)
+static int macsec_qca_disable_receive_sa(void *priv, u32 channel, u8 an)
 {
 	struct macsec_qca_data *drv = priv;
-	int ret;
-	u32 channel;
+	int ret = 0;
 
-	ret = macsec_qca_lookup_receive_channel(priv, sa->sc, &channel);
-	if (ret != 0)
-		return ret;
+	wpa_printf(MSG_DEBUG, "%s: channel=%d, an=%d", __func__, channel, an);
 
-	wpa_printf(MSG_DEBUG, "%s: channel=%d, an=%d", __func__, channel,
-		   sa->an);
-
-	ret += nss_macsec_secy_rx_sa_en_set(drv->secy_id, channel, sa->an,
-					    FALSE);
+	ret += nss_macsec_secy_rx_sa_en_set(drv->secy_id, channel, an, FALSE);
 
 	return ret;
 }
@@ -840,12 +715,14 @@
 static int macsec_qca_get_available_transmit_sc(void *priv, u32 *channel)
 {
 	struct macsec_qca_data *drv = priv;
+	int ret = 0;
 	u32 sc_ch = 0;
 	bool in_use = FALSE;
 
 	for (sc_ch = 0; sc_ch < MAXSC; sc_ch++) {
-		if (nss_macsec_secy_tx_sc_in_used_get(drv->secy_id, sc_ch,
-						      &in_use))
+		ret = nss_macsec_secy_tx_sc_in_used_get(drv->secy_id, sc_ch,
+							&in_use);
+		if (ret)
 			continue;
 
 		if (!in_use) {
@@ -862,18 +739,14 @@
 }
 
 
-static int macsec_qca_create_transmit_sc(void *priv, struct transmit_sc *sc,
+static int macsec_qca_create_transmit_sc(void *priv, u32 channel,
+					 const u8 *sci_addr, u16 sci_port,
 					 unsigned int conf_offset)
 {
 	struct macsec_qca_data *drv = priv;
-	int ret;
+	int ret = 0;
 	fal_tx_class_lut_t entry;
 	u8 psci[ETH_ALEN + 2];
-	u32 channel;
-
-	ret = macsec_qca_get_available_transmit_sc(priv, &channel);
-	if (ret != 0)
-		return ret;
 
 	wpa_printf(MSG_DEBUG, "%s: channel=%d", __func__, channel);
 
@@ -884,9 +757,9 @@
 	entry.action = FAL_TX_CLASS_ACTION_FORWARD;
 	entry.channel = channel;
 
-	os_memcpy(psci, sc->sci.addr, ETH_ALEN);
-	psci[6] = (sc->sci.port >> 8) & 0xf;
-	psci[7] = sc->sci.port & 0xf;
+	os_memcpy(psci, sci_addr, ETH_ALEN);
+	psci[6] = (sci_port >> 8) & 0xf;
+	psci[7] = sci_port & 0xf;
 
 	ret += nss_macsec_secy_tx_class_lut_set(drv->secy_id, channel, &entry);
 	ret += nss_macsec_secy_tx_sc_create(drv->secy_id, channel, psci, 8);
@@ -896,22 +769,15 @@
 								channel,
 								conf_offset);
 
-	macsec_qca_register_transmit_channel(drv, sc, channel);
-
 	return ret;
 }
 
 
-static int macsec_qca_delete_transmit_sc(void *priv, struct transmit_sc *sc)
+static int macsec_qca_delete_transmit_sc(void *priv, u32 channel)
 {
 	struct macsec_qca_data *drv = priv;
-	int ret;
+	int ret = 0;
 	fal_tx_class_lut_t entry;
-	u32 channel;
-
-	ret = macsec_qca_lookup_transmit_channel(priv, sc, &channel);
-	if (ret != 0)
-		return ret;
 
 	wpa_printf(MSG_DEBUG, "%s: channel=%d", __func__, channel);
 
@@ -925,22 +791,19 @@
 }
 
 
-static int macsec_qca_create_transmit_sa(void *priv, struct transmit_sa *sa)
+static int macsec_qca_create_transmit_sa(void *priv, u32 channel, u8 an,
+					 u32 next_pn, Boolean confidentiality,
+					 const u8 *sak)
 {
 	struct macsec_qca_data *drv = priv;
-	int ret;
+	int ret = 0;
 	u8 tci = 0;
 	fal_tx_sak_t tx_sak;
 	int i;
-	u32 channel;
-
-	ret = macsec_qca_lookup_transmit_channel(priv, sa->sc, &channel);
-	if (ret != 0)
-		return ret;
 
 	wpa_printf(MSG_DEBUG,
 		   "%s: channel=%d, an=%d, next_pn=0x%x, confidentiality=%d",
-		   __func__, channel, sa->an, sa->next_pn, sa->confidentiality);
+		   __func__, channel, an, next_pn, confidentiality);
 
 	if (drv->always_include_sci)
 		tci |= TCI_SC;
@@ -949,60 +812,45 @@
 	else if (drv->use_scb)
 		tci |= TCI_SCB;
 
-	if (sa->confidentiality)
+	if (confidentiality)
 		tci |= TCI_E | TCI_C;
 
 	os_memset(&tx_sak, 0, sizeof(tx_sak));
 	for (i = 0; i < 16; i++)
-		tx_sak.sak[i] = sa->pkey->key[15 - i];
+		tx_sak.sak[i] = sak[15 - i];
 
-	ret += nss_macsec_secy_tx_sa_next_pn_set(drv->secy_id, channel, sa->an,
-						 sa->next_pn);
-	ret += nss_macsec_secy_tx_sak_set(drv->secy_id, channel, sa->an,
-					  &tx_sak);
+	ret += nss_macsec_secy_tx_sa_next_pn_set(drv->secy_id, channel, an,
+						 next_pn);
+	ret += nss_macsec_secy_tx_sak_set(drv->secy_id, channel, an, &tx_sak);
 	ret += nss_macsec_secy_tx_sc_tci_7_2_set(drv->secy_id, channel,
 						 (tci >> 2));
-	ret += nss_macsec_secy_tx_sc_an_set(drv->secy_id, channel, sa->an);
+	ret += nss_macsec_secy_tx_sc_an_set(drv->secy_id, channel, an);
 
 	return ret;
 }
 
 
-static int macsec_qca_enable_transmit_sa(void *priv, struct transmit_sa *sa)
+static int macsec_qca_enable_transmit_sa(void *priv, u32 channel, u8 an)
 {
 	struct macsec_qca_data *drv = priv;
-	int ret;
-	u32 channel;
+	int ret = 0;
 
-	ret = macsec_qca_lookup_transmit_channel(priv, sa->sc, &channel);
-	if (ret != 0)
-		return ret;
+	wpa_printf(MSG_DEBUG, "%s: channel=%d, an=%d", __func__, channel, an);
 
-	wpa_printf(MSG_DEBUG, "%s: channel=%d, an=%d", __func__, channel,
-		   sa->an);
-
-	ret += nss_macsec_secy_tx_sa_en_set(drv->secy_id, channel, sa->an,
-					    TRUE);
+	ret += nss_macsec_secy_tx_sa_en_set(drv->secy_id, channel, an, TRUE);
 
 	return ret;
 }
 
 
-static int macsec_qca_disable_transmit_sa(void *priv, struct transmit_sa *sa)
+static int macsec_qca_disable_transmit_sa(void *priv, u32 channel, u8 an)
 {
 	struct macsec_qca_data *drv = priv;
-	int ret;
-	u32 channel;
+	int ret = 0;
 
-	ret = macsec_qca_lookup_transmit_channel(priv, sa->sc, &channel);
-	if (ret != 0)
-		return ret;
+	wpa_printf(MSG_DEBUG, "%s: channel=%d, an=%d", __func__, channel, an);
 
-	wpa_printf(MSG_DEBUG, "%s: channel=%d, an=%d", __func__, channel,
-		   sa->an);
-
-	ret += nss_macsec_secy_tx_sa_en_set(drv->secy_id, channel, sa->an,
-					    FALSE);
+	ret += nss_macsec_secy_tx_sa_en_set(drv->secy_id, channel, an, FALSE);
 
 	return ret;
 }
@@ -1019,7 +867,6 @@
 
 	.macsec_init = macsec_qca_macsec_init,
 	.macsec_deinit = macsec_qca_macsec_deinit,
-	.macsec_get_capability = macsec_qca_get_capability,
 	.enable_protect_frames = macsec_qca_enable_protect_frames,
 	.set_replay_protect = macsec_qca_set_replay_protect,
 	.set_current_cipher_suite = macsec_qca_set_current_cipher_suite,
@@ -1027,11 +874,13 @@
 	.get_receive_lowest_pn = macsec_qca_get_receive_lowest_pn,
 	.get_transmit_next_pn = macsec_qca_get_transmit_next_pn,
 	.set_transmit_next_pn = macsec_qca_set_transmit_next_pn,
+	.get_available_receive_sc = macsec_qca_get_available_receive_sc,
 	.create_receive_sc = macsec_qca_create_receive_sc,
 	.delete_receive_sc = macsec_qca_delete_receive_sc,
 	.create_receive_sa = macsec_qca_create_receive_sa,
 	.enable_receive_sa = macsec_qca_enable_receive_sa,
 	.disable_receive_sa = macsec_qca_disable_receive_sa,
+	.get_available_transmit_sc = macsec_qca_get_available_transmit_sc,
 	.create_transmit_sc = macsec_qca_create_transmit_sc,
 	.delete_transmit_sc = macsec_qca_delete_transmit_sc,
 	.create_transmit_sa = macsec_qca_create_transmit_sa,
diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
index 75c4271..1210d43 100644
--- a/src/drivers/driver_nl80211.c
+++ b/src/drivers/driver_nl80211.c
@@ -3095,11 +3095,11 @@
 	if (params->ie &&
 	    nla_put(msg, NL80211_ATTR_IE, params->ie_len, params->ie))
 		goto fail;
-	if (params->auth_data) {
-		wpa_hexdump(MSG_DEBUG, "  * auth_data", params->auth_data,
-			    params->auth_data_len);
-		if (nla_put(msg, NL80211_ATTR_SAE_DATA, params->auth_data_len,
-			    params->auth_data))
+	if (params->sae_data) {
+		wpa_hexdump(MSG_DEBUG, "  * SAE data", params->sae_data,
+			    params->sae_data_len);
+		if (nla_put(msg, NL80211_ATTR_SAE_DATA, params->sae_data_len,
+			    params->sae_data))
 			goto fail;
 	}
 	if (params->auth_alg & WPA_AUTH_ALG_OPEN)
@@ -3112,8 +3112,6 @@
 		type = NL80211_AUTHTYPE_FT;
 	else if (params->auth_alg & WPA_AUTH_ALG_SAE)
 		type = NL80211_AUTHTYPE_SAE;
-	else if (params->auth_alg & WPA_AUTH_ALG_FILS)
-		type = NL80211_AUTHTYPE_FILS_SK;
 	else
 		goto fail;
 	wpa_printf(MSG_DEBUG, "  * Auth Type %d", type);
@@ -5154,22 +5152,6 @@
 	if (ret)
 		goto fail;
 
-	if (params->fils_kek) {
-		wpa_printf(MSG_DEBUG, "  * FILS KEK (len=%u)",
-			   (unsigned int) params->fils_kek_len);
-		if (nla_put(msg, NL80211_ATTR_FILS_KEK, params->fils_kek_len,
-			    params->fils_kek))
-			goto fail;
-	}
-	if (params->fils_nonces) {
-		wpa_hexdump(MSG_DEBUG, "  * FILS nonces (for AAD)",
-			    params->fils_nonces,
-			    params->fils_nonces_len);
-		if (nla_put(msg, NL80211_ATTR_FILS_NONCES,
-			    params->fils_nonces_len, params->fils_nonces))
-			goto fail;
-	}
-
 	ret = send_and_recv_msgs(drv, msg, NULL, NULL);
 	msg = NULL;
 	if (ret) {
@@ -9325,56 +9307,6 @@
 	return send_and_recv_msgs(drv, msg, NULL, NULL);
 }
 
-
-static int nl80211_set_tdls_mode(void *priv, int tdls_external_control)
-{
-	struct i802_bss *bss = priv;
-	struct wpa_driver_nl80211_data *drv = bss->drv;
-	struct nl_msg *msg;
-	struct nlattr *params;
-	int ret;
-	u32 tdls_mode;
-
-	wpa_printf(MSG_DEBUG,
-		   "nl80211: Set TDKS mode: tdls_external_control=%d",
-		   tdls_external_control);
-
-	if (tdls_external_control == 1)
-		tdls_mode = QCA_WLAN_VENDOR_TDLS_TRIGGER_MODE_IMPLICIT |
-			QCA_WLAN_VENDOR_TDLS_TRIGGER_MODE_EXTERNAL;
-	else
-		tdls_mode = QCA_WLAN_VENDOR_TDLS_TRIGGER_MODE_EXPLICIT;
-
-	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_CONFIGURE_TDLS))
-		goto fail;
-
-	params = nla_nest_start(msg, NL80211_ATTR_VENDOR_DATA);
-	if (!params)
-		goto fail;
-
-	if (nla_put_u32(msg, QCA_WLAN_VENDOR_ATTR_TDLS_CONFIG_TRIGGER_MODE,
-			tdls_mode))
-		goto fail;
-
-	nla_nest_end(msg, params);
-
-	ret = send_and_recv_msgs(drv, msg, NULL, NULL);
-	msg = NULL;
-	if (ret) {
-		wpa_printf(MSG_ERROR,
-			   "nl80211: Set TDLS mode failed: ret=%d (%s)",
-			   ret, strerror(-ret));
-		goto fail;
-	}
-	return 0;
-fail:
-	nlmsg_free(msg);
-	return -1;
-}
-
 #endif /* CONFIG_DRIVER_NL80211_QCA */
 
 
@@ -9618,7 +9550,6 @@
 	.p2p_lo_start = nl80211_p2p_lo_start,
 	.p2p_lo_stop = nl80211_p2p_lo_stop,
 	.set_default_scan_ies = nl80211_set_default_scan_ies,
-	.set_tdls_mode = nl80211_set_tdls_mode,
 #endif /* CONFIG_DRIVER_NL80211_QCA */
 	.configure_data_frame_filters = nl80211_configure_data_frame_filters,
 	.get_ext_capab = nl80211_get_ext_capab,
diff --git a/src/drivers/driver_nl80211_capa.c b/src/drivers/driver_nl80211_capa.c
index 2507a43..6adc3f6 100644
--- a/src/drivers/driver_nl80211_capa.c
+++ b/src/drivers/driver_nl80211_capa.c
@@ -362,9 +362,6 @@
 
 	if (ext_feature_isset(ext_features, len, NL80211_EXT_FEATURE_RRM))
 		capa->rrm_flags |= WPA_DRIVER_FLAGS_SUPPORT_RRM;
-
-	if (ext_feature_isset(ext_features, len, NL80211_EXT_FEATURE_FILS_STA))
-		capa->flags |= WPA_DRIVER_FLAGS_SUPPORT_FILS;
 }
 
 
diff --git a/src/drivers/driver_nl80211_event.c b/src/drivers/driver_nl80211_event.c
index c77e21e..762e3ac 100644
--- a/src/drivers/driver_nl80211_event.c
+++ b/src/drivers/driver_nl80211_event.c
@@ -247,8 +247,6 @@
 	os_memcpy(drv->prev_bssid, mgmt->sa, ETH_ALEN);
 
 	os_memset(&event, 0, sizeof(event));
-	event.assoc_info.resp_frame = frame;
-	event.assoc_info.resp_frame_len = len;
 	if (len > 24 + sizeof(mgmt->u.assoc_resp)) {
 		event.assoc_info.resp_ies = (u8 *) mgmt->u.assoc_resp.variable;
 		event.assoc_info.resp_ies_len =
@@ -518,7 +516,6 @@
 		data.ch_switch.cf2 = nla_get_u32(cf2);
 
 	bss->freq = data.ch_switch.freq;
-	drv->assoc_freq = data.ch_switch.freq;
 
 	wpa_supplicant_event(bss->ctx, EVENT_CH_SWITCH, &data);
 }
diff --git a/src/drivers/driver_privsep.c b/src/drivers/driver_privsep.c
index 5d85033..43d4193 100644
--- a/src/drivers/driver_privsep.c
+++ b/src/drivers/driver_privsep.c
@@ -234,7 +234,7 @@
 		   __func__, priv, params->freq, MAC2STR(params->bssid),
 		   params->auth_alg, params->local_state_change, params->p2p);
 
-	buflen = sizeof(*data) + params->ie_len + params->auth_data_len;
+	buflen = sizeof(*data) + params->ie_len + params->sae_data_len;
 	data = os_zalloc(buflen);
 	if (data == NULL)
 		return -1;
@@ -259,8 +259,8 @@
 		os_memcpy(pos, params->ie, params->ie_len);
 		pos += params->ie_len;
 	}
-	if (params->auth_data_len)
-		os_memcpy(pos, params->auth_data, params->auth_data_len);
+	if (params->sae_data_len)
+		os_memcpy(pos, params->sae_data, params->sae_data_len);
 
 	res = wpa_priv_cmd(drv, PRIVSEP_CMD_AUTHENTICATE, data, buflen,
 			   NULL, NULL);
diff --git a/src/drivers/nl80211_copy.h b/src/drivers/nl80211_copy.h
index a268a00..2206941 100644
--- a/src/drivers/nl80211_copy.h
+++ b/src/drivers/nl80211_copy.h
@@ -48,7 +48,6 @@
 #define NL80211_MULTICAST_GROUP_REG		"regulatory"
 #define NL80211_MULTICAST_GROUP_MLME		"mlme"
 #define NL80211_MULTICAST_GROUP_VENDOR		"vendor"
-#define NL80211_MULTICAST_GROUP_NAN		"nan"
 #define NL80211_MULTICAST_GROUP_TESTMODE	"testmode"
 
 /**
@@ -839,41 +838,6 @@
  *	not running. The driver indicates the status of the scan through
  *	cfg80211_scan_done().
  *
- * @NL80211_CMD_START_NAN: Start NAN operation, identified by its
- *	%NL80211_ATTR_WDEV interface. This interface must have been previously
- *	created with %NL80211_CMD_NEW_INTERFACE. After it has been started, the
- *	NAN interface will create or join a cluster. This command must have a
- *	valid %NL80211_ATTR_NAN_MASTER_PREF attribute and optional
- *	%NL80211_ATTR_NAN_DUAL attributes.
- *	After this command NAN functions can be added.
- * @NL80211_CMD_STOP_NAN: Stop the NAN operation, identified by
- *	its %NL80211_ATTR_WDEV interface.
- * @NL80211_CMD_ADD_NAN_FUNCTION: Add a NAN function. The function is defined
- *	with %NL80211_ATTR_NAN_FUNC nested attribute. When called, this
- *	operation returns the strictly positive and unique instance id
- *	(%NL80211_ATTR_NAN_FUNC_INST_ID) and a cookie (%NL80211_ATTR_COOKIE)
- *	of the function upon success.
- *	Since instance ID's can be re-used, this cookie is the right
- *	way to identify the function. This will avoid races when a termination
- *	event is handled by the user space after it has already added a new
- *	function that got the same instance id from the kernel as the one
- *	which just terminated.
- *	This cookie may be used in NAN events even before the command
- *	returns, so userspace shouldn't process NAN events until it processes
- *	the response to this command.
- *	Look at %NL80211_ATTR_SOCKET_OWNER as well.
- * @NL80211_CMD_DEL_NAN_FUNCTION: Delete a NAN function by cookie.
- *	This command is also used as a notification sent when a NAN function is
- *	terminated. This will contain a %NL80211_ATTR_NAN_FUNC_INST_ID
- *	and %NL80211_ATTR_COOKIE attributes.
- * @NL80211_CMD_CHANGE_NAN_CONFIG: Change current NAN configuration. NAN
- *	must be operational (%NL80211_CMD_START_NAN was executed).
- *	It must contain at least one of the following attributes:
- *	%NL80211_ATTR_NAN_MASTER_PREF, %NL80211_ATTR_NAN_DUAL.
- * @NL80211_CMD_NAN_FUNC_MATCH: Notification sent when a match is reported.
- *	This will contain a %NL80211_ATTR_NAN_MATCH nested attribute and
- *	%NL80211_ATTR_COOKIE.
- *
  * @NL80211_CMD_MAX: highest used command number
  * @__NL80211_CMD_AFTER_LAST: internal use
  */
@@ -1062,13 +1026,6 @@
 
 	NL80211_CMD_ABORT_SCAN,
 
-	NL80211_CMD_START_NAN,
-	NL80211_CMD_STOP_NAN,
-	NL80211_CMD_ADD_NAN_FUNCTION,
-	NL80211_CMD_DEL_NAN_FUNCTION,
-	NL80211_CMD_CHANGE_NAN_CONFIG,
-	NL80211_CMD_NAN_MATCH,
-
 	/* add new commands above here */
 
 	/* used to define NL80211_CMD_MAX below */
@@ -1386,13 +1343,7 @@
  *	enum nl80211_band value is used as the index (nla_type() of the nested
  *	data. If a band is not included, it will be configured to allow all
  *	rates based on negotiated supported rates information. This attribute
- *	is used with %NL80211_CMD_SET_TX_BITRATE_MASK and with starting AP,
- *	and joining mesh networks (not IBSS yet). In the later case, it must
- *	specify just a single bitrate, which is to be used for the beacon.
- *	The driver must also specify support for this with the extended
- *	features NL80211_EXT_FEATURE_BEACON_RATE_LEGACY,
- *	NL80211_EXT_FEATURE_BEACON_RATE_HT and
- *	NL80211_EXT_FEATURE_BEACON_RATE_VHT.
+ *	is used with %NL80211_CMD_SET_TX_BITRATE_MASK.
  *
  * @NL80211_ATTR_FRAME_MATCH: A binary attribute which typically must contain
  *	at least one byte, currently used with @NL80211_CMD_REGISTER_FRAME.
@@ -1638,16 +1589,8 @@
  *	the connection request from a station. nl80211_connect_failed_reason
  *	enum has different reasons of connection failure.
  *
- * @NL80211_ATTR_AUTH_DATA: Fields and elements in Authentication frames.
- *	This contains the authentication frame body (non-IE and IE data),
- *	excluding the Authentication algorithm number, i.e., starting at the
- *	Authentication transaction sequence number field. It is used with
- *	authentication algorithms that need special fields to be added into
- *	the frames (SAE and FILS). Currently, only the SAE cases use the
- *	initial two fields (Authentication transaction sequence number and
- *	Status code). However, those fields are included in the attribute data
- *	for all authentication algorithms to keep the attribute definition
- *	consistent.
+ * @NL80211_ATTR_SAE_DATA: SAE elements in Authentication frames. This starts
+ *	with the Authentication transaction sequence number field.
  *
  * @NL80211_ATTR_VHT_CAPABILITY: VHT Capability information element (from
  *	association request when used with NL80211_CMD_NEW_STATION)
@@ -1790,12 +1733,6 @@
  *	regulatory indoor configuration would be owned by the netlink socket
  *	that configured the indoor setting, and the indoor operation would be
  *	cleared when the socket is closed.
- *	If set during NAN interface creation, the interface will be destroyed
- *	if the socket is closed just like any other interface. Moreover, only
- *	the netlink socket that created the interface will be allowed to add
- *	and remove functions. NAN notifications will be sent in unicast to that
- *	socket. Without this attribute, any socket can add functions and the
- *	notifications will be sent to the %NL80211_MCGRP_NAN multicast group.
  *
  * @NL80211_ATTR_TDLS_INITIATOR: flag attribute indicating the current end is
  *	the TDLS link initiator.
@@ -1930,26 +1867,6 @@
  * @NL80211_ATTR_MESH_PEER_AID: Association ID for the mesh peer (u16). This is
  *	used to pull the stored data for mesh peer in power save state.
  *
- * @NL80211_ATTR_NAN_MASTER_PREF: the master preference to be used by
- *	%NL80211_CMD_START_NAN and optionally with
- *	%NL80211_CMD_CHANGE_NAN_CONFIG. Its type is u8 and it can't be 0.
- *	Also, values 1 and 255 are reserved for certification purposes and
- *	should not be used during a normal device operation.
- * @NL80211_ATTR_NAN_DUAL: NAN dual band operation config (see
- *	&enum nl80211_nan_dual_band_conf). This attribute is used with
- *	%NL80211_CMD_START_NAN and optionally with
- *	%NL80211_CMD_CHANGE_NAN_CONFIG.
- * @NL80211_ATTR_NAN_FUNC: a function that can be added to NAN. See
- *	&enum nl80211_nan_func_attributes for description of this nested
- *	attribute.
- * @NL80211_ATTR_NAN_MATCH: used to report a match. This is a nested attribute.
- *	See &enum nl80211_nan_match_attributes.
- * @NL80211_ATTR_FILS_KEK: KEK for FILS (Re)Association Request/Response frame
- *	protection.
- * @NL80211_ATTR_FILS_NONCES: Nonces (part of AAD) for FILS (Re)Association
- *	Request/Response frame protection. This attribute contains the 16 octet
- *	STA Nonce followed by 16 octets of AP Nonce.
- *
  * @NUM_NL80211_ATTR: total number of nl80211_attrs available
  * @NL80211_ATTR_MAX: highest attribute number currently defined
  * @__NL80211_ATTR_AFTER_LAST: internal use
@@ -2208,7 +2125,7 @@
 
 	NL80211_ATTR_CONN_FAILED_REASON,
 
-	NL80211_ATTR_AUTH_DATA,
+	NL80211_ATTR_SAE_DATA,
 
 	NL80211_ATTR_VHT_CAPABILITY,
 
@@ -2344,14 +2261,6 @@
 
 	NL80211_ATTR_MESH_PEER_AID,
 
-	NL80211_ATTR_NAN_MASTER_PREF,
-	NL80211_ATTR_NAN_DUAL,
-	NL80211_ATTR_NAN_FUNC,
-	NL80211_ATTR_NAN_MATCH,
-
-	NL80211_ATTR_FILS_KEK,
-	NL80211_ATTR_FILS_NONCES,
-
 	/* add attributes here, update the policy in nl80211.c */
 
 	__NL80211_ATTR_AFTER_LAST,
@@ -2363,7 +2272,6 @@
 #define NL80211_ATTR_SCAN_GENERATION NL80211_ATTR_GENERATION
 #define	NL80211_ATTR_MESH_PARAMS NL80211_ATTR_MESH_CONFIG
 #define NL80211_ATTR_IFACE_SOCKET_OWNER NL80211_ATTR_SOCKET_OWNER
-#define NL80211_ATTR_SAE_DATA NL80211_ATTR_AUTH_DATA
 
 /*
  * Allow user space programs to use #ifdef on new attributes by defining them
@@ -2431,7 +2339,6 @@
  *	commands to create and destroy one
  * @NL80211_IF_TYPE_OCB: Outside Context of a BSS
  *	This mode corresponds to the MIB variable dot11OCBActivated=true
- * @NL80211_IFTYPE_NAN: NAN device interface type (not a netdev)
  * @NL80211_IFTYPE_MAX: highest interface type number currently defined
  * @NUM_NL80211_IFTYPES: number of defined interface types
  *
@@ -2452,7 +2359,6 @@
 	NL80211_IFTYPE_P2P_GO,
 	NL80211_IFTYPE_P2P_DEVICE,
 	NL80211_IFTYPE_OCB,
-	NL80211_IFTYPE_NAN,
 
 	/* keep last */
 	NUM_NL80211_IFTYPES,
@@ -3677,9 +3583,6 @@
  * @NL80211_AUTHTYPE_FT: Fast BSS Transition (IEEE 802.11r)
  * @NL80211_AUTHTYPE_NETWORK_EAP: Network EAP (some Cisco APs and mainly LEAP)
  * @NL80211_AUTHTYPE_SAE: Simultaneous authentication of equals
- * @NL80211_AUTHTYPE_FILS_SK: Fast Initial Link Setup shared key
- * @NL80211_AUTHTYPE_FILS_SK_PFS: Fast Initial Link Setup shared key with PFS
- * @NL80211_AUTHTYPE_FILS_PK: Fast Initial Link Setup public key
  * @__NL80211_AUTHTYPE_NUM: internal
  * @NL80211_AUTHTYPE_MAX: maximum valid auth algorithm
  * @NL80211_AUTHTYPE_AUTOMATIC: determine automatically (if necessary by
@@ -3692,9 +3595,6 @@
 	NL80211_AUTHTYPE_FT,
 	NL80211_AUTHTYPE_NETWORK_EAP,
 	NL80211_AUTHTYPE_SAE,
-	NL80211_AUTHTYPE_FILS_SK,
-	NL80211_AUTHTYPE_FILS_SK_PFS,
-	NL80211_AUTHTYPE_FILS_PK,
 
 	/* keep last */
 	__NL80211_AUTHTYPE_NUM,
@@ -4303,9 +4203,6 @@
  *	of supported channel widths for radar detection.
  * @NL80211_IFACE_COMB_RADAR_DETECT_REGIONS: u32 attribute containing the bitmap
  *	of supported regulatory regions for radar detection.
- * @NL80211_IFACE_COMB_BI_MIN_GCD: u32 attribute specifying the minimum GCD of
- *	different beacon intervals supported by all the interface combinations
- *	in this group (if not present, all beacon intervals be identical).
  * @NUM_NL80211_IFACE_COMB: number of attributes
  * @MAX_NL80211_IFACE_COMB: highest attribute number
  *
@@ -4313,8 +4210,8 @@
  *	limits = [ #{STA} <= 1, #{AP} <= 1 ], matching BI, channels = 1, max = 2
  *	=> allows an AP and a STA that must match BIs
  *
- *	numbers = [ #{AP, P2P-GO} <= 8 ], BI min gcd, channels = 1, max = 8,
- *	=> allows 8 of AP/GO that can have BI gcd >= min gcd
+ *	numbers = [ #{AP, P2P-GO} <= 8 ], channels = 1, max = 8
+ *	=> allows 8 of AP/GO
  *
  *	numbers = [ #{STA} <= 2 ], channels = 2, max = 2
  *	=> allows two STAs on different channels
@@ -4340,7 +4237,6 @@
 	NL80211_IFACE_COMB_NUM_CHANNELS,
 	NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS,
 	NL80211_IFACE_COMB_RADAR_DETECT_REGIONS,
-	NL80211_IFACE_COMB_BI_MIN_GCD,
 
 	/* keep last */
 	NUM_NL80211_IFACE_COMB,
@@ -4655,14 +4551,6 @@
  *	(if available).
  * @NL80211_EXT_FEATURE_SET_SCAN_DWELL: This driver supports configuration of
  *	channel dwell time.
- * @NL80211_EXT_FEATURE_BEACON_RATE_LEGACY: Driver supports beacon rate
- *	configuration (AP/mesh), supporting a legacy (non HT/VHT) rate.
- * @NL80211_EXT_FEATURE_BEACON_RATE_HT: Driver supports beacon rate
- *	configuration (AP/mesh) with HT rates.
- * @NL80211_EXT_FEATURE_BEACON_RATE_VHT: Driver supports beacon rate
- *	configuration (AP/mesh) with VHT rates.
- * @NL80211_EXT_FEATURE_FILS_STA: This driver supports Fast Initial Link Setup
- *	with user space SME (NL80211_CMD_AUTHENTICATE) in station mode.
  *
  * @NUM_NL80211_EXT_FEATURES: number of extended features.
  * @MAX_NL80211_EXT_FEATURES: highest extended feature index.
@@ -4674,10 +4562,6 @@
 	NL80211_EXT_FEATURE_SCAN_START_TIME,
 	NL80211_EXT_FEATURE_BSS_PARENT_TSF,
 	NL80211_EXT_FEATURE_SET_SCAN_DWELL,
-	NL80211_EXT_FEATURE_BEACON_RATE_LEGACY,
-	NL80211_EXT_FEATURE_BEACON_RATE_HT,
-	NL80211_EXT_FEATURE_BEACON_RATE_VHT,
-	NL80211_EXT_FEATURE_FILS_STA,
 
 	/* add new features before the definition below */
 	NUM_NL80211_EXT_FEATURES,
@@ -4971,186 +4855,4 @@
 	NL80211_BSS_SELECT_ATTR_MAX = __NL80211_BSS_SELECT_ATTR_AFTER_LAST - 1
 };
 
-/**
- * enum nl80211_nan_dual_band_conf - NAN dual band configuration
- *
- * Defines the NAN dual band mode of operation
- *
- * @NL80211_NAN_BAND_DEFAULT: device default mode
- * @NL80211_NAN_BAND_2GHZ: 2.4GHz mode
- * @NL80211_NAN_BAND_5GHZ: 5GHz mode
-  */
-enum nl80211_nan_dual_band_conf {
-	NL80211_NAN_BAND_DEFAULT	= 1 << 0,
-	NL80211_NAN_BAND_2GHZ		= 1 << 1,
-	NL80211_NAN_BAND_5GHZ		= 1 << 2,
-};
-
-/**
- * enum nl80211_nan_function_type - NAN function type
- *
- * Defines the function type of a NAN function
- *
- * @NL80211_NAN_FUNC_PUBLISH: function is publish
- * @NL80211_NAN_FUNC_SUBSCRIBE: function is subscribe
- * @NL80211_NAN_FUNC_FOLLOW_UP: function is follow-up
- */
-enum nl80211_nan_function_type {
-	NL80211_NAN_FUNC_PUBLISH,
-	NL80211_NAN_FUNC_SUBSCRIBE,
-	NL80211_NAN_FUNC_FOLLOW_UP,
-
-	/* keep last */
-	__NL80211_NAN_FUNC_TYPE_AFTER_LAST,
-	NL80211_NAN_FUNC_MAX_TYPE = __NL80211_NAN_FUNC_TYPE_AFTER_LAST - 1,
-};
-
-/**
- * enum nl80211_nan_publish_type - NAN publish tx type
- *
- * Defines how to send publish Service Discovery Frames
- *
- * @NL80211_NAN_SOLICITED_PUBLISH: publish function is solicited
- * @NL80211_NAN_UNSOLICITED_PUBLISH: publish function is unsolicited
- */
-enum nl80211_nan_publish_type {
-	NL80211_NAN_SOLICITED_PUBLISH = 1 << 0,
-	NL80211_NAN_UNSOLICITED_PUBLISH = 1 << 1,
-};
-
-/**
- * enum nl80211_nan_func_term_reason - NAN functions termination reason
- *
- * Defines termination reasons of a NAN function
- *
- * @NL80211_NAN_FUNC_TERM_REASON_USER_REQUEST: requested by user
- * @NL80211_NAN_FUNC_TERM_REASON_TTL_EXPIRED: timeout
- * @NL80211_NAN_FUNC_TERM_REASON_ERROR: errored
- */
-enum nl80211_nan_func_term_reason {
-	NL80211_NAN_FUNC_TERM_REASON_USER_REQUEST,
-	NL80211_NAN_FUNC_TERM_REASON_TTL_EXPIRED,
-	NL80211_NAN_FUNC_TERM_REASON_ERROR,
-};
-
-#define NL80211_NAN_FUNC_SERVICE_ID_LEN 6
-#define NL80211_NAN_FUNC_SERVICE_SPEC_INFO_MAX_LEN 0xff
-#define NL80211_NAN_FUNC_SRF_MAX_LEN 0xff
-
-/**
- * enum nl80211_nan_func_attributes - NAN function attributes
- * @__NL80211_NAN_FUNC_INVALID: invalid
- * @NL80211_NAN_FUNC_TYPE: &enum nl80211_nan_function_type (u8).
- * @NL80211_NAN_FUNC_SERVICE_ID: 6 bytes of the service ID hash as
- *	specified in NAN spec. This is a binary attribute.
- * @NL80211_NAN_FUNC_PUBLISH_TYPE: relevant if the function's type is
- *	publish. Defines the transmission type for the publish Service Discovery
- *	Frame, see &enum nl80211_nan_publish_type. Its type is u8.
- * @NL80211_NAN_FUNC_PUBLISH_BCAST: relevant if the function is a solicited
- *	publish. Should the solicited publish Service Discovery Frame be sent to
- *	the NAN Broadcast address. This is a flag.
- * @NL80211_NAN_FUNC_SUBSCRIBE_ACTIVE: relevant if the function's type is
- *	subscribe. Is the subscribe active. This is a flag.
- * @NL80211_NAN_FUNC_FOLLOW_UP_ID: relevant if the function's type is follow up.
- *	The instance ID for the follow up Service Discovery Frame. This is u8.
- * @NL80211_NAN_FUNC_FOLLOW_UP_REQ_ID: relevant if the function's type
- *	is follow up. This is a u8.
- *	The requestor instance ID for the follow up Service Discovery Frame.
- * @NL80211_NAN_FUNC_FOLLOW_UP_DEST: the MAC address of the recipient of the
- *	follow up Service Discovery Frame. This is a binary attribute.
- * @NL80211_NAN_FUNC_CLOSE_RANGE: is this function limited for devices in a
- *	close range. The range itself (RSSI) is defined by the device.
- *	This is a flag.
- * @NL80211_NAN_FUNC_TTL: strictly positive number of DWs this function should
- *	stay active. If not present infinite TTL is assumed. This is a u32.
- * @NL80211_NAN_FUNC_SERVICE_INFO: array of bytes describing the service
- *	specific info. This is a binary attribute.
- * @NL80211_NAN_FUNC_SRF: Service Receive Filter. This is a nested attribute.
- *	See &enum nl80211_nan_srf_attributes.
- * @NL80211_NAN_FUNC_RX_MATCH_FILTER: Receive Matching filter. This is a nested
- *	attribute. It is a list of binary values.
- * @NL80211_NAN_FUNC_TX_MATCH_FILTER: Transmit Matching filter. This is a
- *	nested attribute. It is a list of binary values.
- * @NL80211_NAN_FUNC_INSTANCE_ID: The instance ID of the function.
- *	Its type is u8 and it cannot be 0.
- * @NL80211_NAN_FUNC_TERM_REASON: NAN function termination reason.
- *	See &enum nl80211_nan_func_term_reason.
- *
- * @NUM_NL80211_NAN_FUNC_ATTR: internal
- * @NL80211_NAN_FUNC_ATTR_MAX: highest NAN function attribute
- */
-enum nl80211_nan_func_attributes {
-	__NL80211_NAN_FUNC_INVALID,
-	NL80211_NAN_FUNC_TYPE,
-	NL80211_NAN_FUNC_SERVICE_ID,
-	NL80211_NAN_FUNC_PUBLISH_TYPE,
-	NL80211_NAN_FUNC_PUBLISH_BCAST,
-	NL80211_NAN_FUNC_SUBSCRIBE_ACTIVE,
-	NL80211_NAN_FUNC_FOLLOW_UP_ID,
-	NL80211_NAN_FUNC_FOLLOW_UP_REQ_ID,
-	NL80211_NAN_FUNC_FOLLOW_UP_DEST,
-	NL80211_NAN_FUNC_CLOSE_RANGE,
-	NL80211_NAN_FUNC_TTL,
-	NL80211_NAN_FUNC_SERVICE_INFO,
-	NL80211_NAN_FUNC_SRF,
-	NL80211_NAN_FUNC_RX_MATCH_FILTER,
-	NL80211_NAN_FUNC_TX_MATCH_FILTER,
-	NL80211_NAN_FUNC_INSTANCE_ID,
-	NL80211_NAN_FUNC_TERM_REASON,
-
-	/* keep last */
-	NUM_NL80211_NAN_FUNC_ATTR,
-	NL80211_NAN_FUNC_ATTR_MAX = NUM_NL80211_NAN_FUNC_ATTR - 1
-};
-
-/**
- * enum nl80211_nan_srf_attributes - NAN Service Response filter attributes
- * @__NL80211_NAN_SRF_INVALID: invalid
- * @NL80211_NAN_SRF_INCLUDE: present if the include bit of the SRF set.
- *	This is a flag.
- * @NL80211_NAN_SRF_BF: Bloom Filter. Present if and only if
- *	&NL80211_NAN_SRF_MAC_ADDRS isn't present. This attribute is binary.
- * @NL80211_NAN_SRF_BF_IDX: index of the Bloom Filter. Mandatory if
- *	&NL80211_NAN_SRF_BF is present. This is a u8.
- * @NL80211_NAN_SRF_MAC_ADDRS: list of MAC addresses for the SRF. Present if
- *	and only if &NL80211_NAN_SRF_BF isn't present. This is a nested
- *	attribute. Each nested attribute is a MAC address.
- * @NUM_NL80211_NAN_SRF_ATTR: internal
- * @NL80211_NAN_SRF_ATTR_MAX: highest NAN SRF attribute
- */
-enum nl80211_nan_srf_attributes {
-	__NL80211_NAN_SRF_INVALID,
-	NL80211_NAN_SRF_INCLUDE,
-	NL80211_NAN_SRF_BF,
-	NL80211_NAN_SRF_BF_IDX,
-	NL80211_NAN_SRF_MAC_ADDRS,
-
-	/* keep last */
-	NUM_NL80211_NAN_SRF_ATTR,
-	NL80211_NAN_SRF_ATTR_MAX = NUM_NL80211_NAN_SRF_ATTR - 1,
-};
-
-/**
- * enum nl80211_nan_match_attributes - NAN match attributes
- * @__NL80211_NAN_MATCH_INVALID: invalid
- * @NL80211_NAN_MATCH_FUNC_LOCAL: the local function that had the
- *	match. This is a nested attribute.
- *	See &enum nl80211_nan_func_attributes.
- * @NL80211_NAN_MATCH_FUNC_PEER: the peer function
- *	that caused the match. This is a nested attribute.
- *	See &enum nl80211_nan_func_attributes.
- *
- * @NUM_NL80211_NAN_MATCH_ATTR: internal
- * @NL80211_NAN_MATCH_ATTR_MAX: highest NAN match attribute
- */
-enum nl80211_nan_match_attributes {
-	__NL80211_NAN_MATCH_INVALID,
-	NL80211_NAN_MATCH_FUNC_LOCAL,
-	NL80211_NAN_MATCH_FUNC_PEER,
-
-	/* keep last */
-	NUM_NL80211_NAN_MATCH_ATTR,
-	NL80211_NAN_MATCH_ATTR_MAX = NUM_NL80211_NAN_MATCH_ATTR - 1
-};
-
 #endif /* __LINUX_NL80211_H */
