Revert "Cumulative patch from commit 4ec1fd8e42bad9390f14a58225b6e5f6fb691950"

This reverts commit 78a5dac804c22aa6e4ec8226a864d3b0d6ccddbb.

Test: None
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 */