Index: hostapd-2021-02-20-59e9794c/hostapd/config_file.c
===================================================================
--- hostapd-2021-02-20-59e9794c.orig/hostapd/config_file.c
+++ hostapd-2021-02-20-59e9794c/hostapd/config_file.c
@@ -4590,6 +4590,15 @@ static int hostapd_config_fill(struct ho
 		bss->disable_11ac = !!atoi(pos);
 	} else if (os_strcmp(buf, "disable_11ax") == 0) {
 		bss->disable_11ax = !!atoi(pos);
+	} else if (os_strcmp(buf, "beacon_tx_mode") == 0) {
+		int val = atoi(pos);
+
+		if (val < 0 || val > 2) {
+			wpa_printf(MSG_ERROR, "Line %d: invalid beacon_tx_mode %d",
+				   line, val);
+			return 1;
+		}
+		bss->beacon_tx_mode = val;
 #ifdef CONFIG_PASN
 #ifdef CONFIG_TESTING_OPTIONS
 	} else if (os_strcmp(buf, "force_kdk_derivation") == 0) {
Index: hostapd-2021-02-20-59e9794c/src/ap/ap_config.h
===================================================================
--- hostapd-2021-02-20-59e9794c.orig/src/ap/ap_config.h
+++ hostapd-2021-02-20-59e9794c/src/ap/ap_config.h
@@ -894,6 +894,7 @@ struct hostapd_bss_config {
 
 	unsigned int unsol_bcast_probe_resp_interval;
 	u8 rnr_beacon;
+	int beacon_tx_mode;
 };
 
 /**
Index: hostapd-2021-02-20-59e9794c/src/ap/beacon.c
===================================================================
--- hostapd-2021-02-20-59e9794c.orig/src/ap/beacon.c
+++ hostapd-2021-02-20-59e9794c/src/ap/beacon.c
@@ -1861,6 +1861,8 @@ int ieee802_11_build_ap_params(struct ho
 		params->dtim_period = hapd->conf->dtim_period;
 	}
 
+	params->beacon_tx_mode = hapd->conf->beacon_tx_mode;
+
 	return 0;
 }
 
Index: hostapd-2021-02-20-59e9794c/src/drivers/driver.h
===================================================================
--- hostapd-2021-02-20-59e9794c.orig/src/drivers/driver.h
+++ hostapd-2021-02-20-59e9794c/src/drivers/driver.h
@@ -1206,6 +1206,12 @@ struct wpa_driver_associate_params {
 	 * Disable HE40MHz coexistence scan
 	 */
 	int disable_40mhz_scan;
+	/**
+	 * Beacon Tx mode - To configure STAGGERED or BURST mode
+	 * 1 = STAGGERED beacon tx mode
+	 * 2 = BURST beacon tx mode
+	 */
+	int beacon_tx_mode;
 };
 
 enum hide_ssid {
@@ -1650,6 +1656,13 @@ struct wpa_driver_ap_params {
 	 * rnr_ie_count - Number of offsets in rnr_ie_offsets
 	 */
 	int rnr_ie_count;
+
+	/**
+	 * Beacon Tx mode - To configure STAGGERED or BURST mode
+	 * 1 = STAGGERED beacon tx mode
+	 * 2 = BURST beacon tx mode
+	 */
+	int beacon_tx_mode;
 };
 
 struct wpa_driver_mesh_bss_params {
@@ -1689,6 +1702,7 @@ struct wpa_driver_mesh_join_params {
 	unsigned int flags;
 	bool handle_dfs;
 	int mcast_rate;
+	int beacon_tx_mode;
 };
 
 struct wpa_driver_set_key_params {
Index: hostapd-2021-02-20-59e9794c/src/drivers/driver_nl80211.c
===================================================================
--- hostapd-2021-02-20-59e9794c.orig/src/drivers/driver_nl80211.c
+++ hostapd-2021-02-20-59e9794c/src/drivers/driver_nl80211.c
@@ -4543,6 +4543,7 @@ static int wpa_driver_nl80211_set_ap(voi
 	wpa_printf(MSG_DEBUG, "nl80211: beacon_rate=%u", params->beacon_rate);
 	wpa_printf(MSG_DEBUG, "nl80211: rate_type=%d", params->rate_type);
 	wpa_printf(MSG_DEBUG, "nl80211: dtim_period=%d", params->dtim_period);
+	wpa_printf(MSG_DEBUG, "nl80211: beacon_tx_mode=%d", params->beacon_tx_mode);
 	wpa_printf(MSG_DEBUG, "nl80211: ssid=%s",
 		   wpa_ssid_txt(params->ssid, params->ssid_len));
 	if (!(msg = nl80211_bss_msg(bss, 0, cmd)) ||
@@ -4554,7 +4555,9 @@ static int wpa_driver_nl80211_set_ap(voi
 	    nl80211_put_beacon_rate(msg, drv->capa.flags, drv->capa.flags2,
 				    params) ||
 	    nl80211_put_dtim_period(msg, params->dtim_period) ||
-	    nla_put(msg, NL80211_ATTR_SSID, params->ssid_len, params->ssid))
+	    nla_put(msg, NL80211_ATTR_SSID, params->ssid_len, params->ssid) ||
+	    (params->beacon_tx_mode &&
+	     nla_put_u32(msg, NL80211_ATTR_BEACON_TX_MODE, params->beacon_tx_mode)))
 		goto fail;
 	if (params->proberesp && params->proberesp_len) {
 		wpa_hexdump(MSG_DEBUG, "nl80211: proberesp (offload)",
@@ -10663,7 +10666,9 @@ static int nl80211_join_mesh(struct i802
 	    nl80211_put_mesh_id(msg, params->meshid, params->meshid_len) ||
 	    nl80211_put_beacon_int(msg, params->beacon_int) ||
 	    nl80211_put_mcast_rate(msg, params->mcast_rate) ||
-	    nl80211_put_dtim_period(msg, params->dtim_period))
+	    nl80211_put_dtim_period(msg, params->dtim_period) ||
+	    (params->beacon_tx_mode &&
+	     nla_put_u32(msg, NL80211_ATTR_BEACON_TX_MODE, params->beacon_tx_mode)))
 		goto fail;
 
 	wpa_printf(MSG_DEBUG, "  * flags=%08X", params->flags);
Index: hostapd-2021-02-20-59e9794c/src/drivers/nl80211_copy.h
===================================================================
--- hostapd-2021-02-20-59e9794c.orig/src/drivers/nl80211_copy.h
+++ hostapd-2021-02-20-59e9794c/src/drivers/nl80211_copy.h
@@ -2608,6 +2608,10 @@ enum nl80211_commands {
  *	for co-located APs and neighbor APs in ESS to be added in all
  *	EMA beacons.
  *
+ * @NL80211_ATTR_BEACON_TX_MODE: used to configure the beacon tx mode as
+ * 	staggered mode or burst mode in %NL80211_CMD_START_AP from
+ * 	user-space.
+ *
  * @NUM_NL80211_ATTR: total number of nl80211_attrs available
  * @NL80211_ATTR_MAX: highest attribute number currently defined
  * @__NL80211_ATTR_AFTER_LAST: internal use
@@ -3121,6 +3125,8 @@ enum nl80211_attrs {
 
 	NL80211_ATTR_RNR_OFFSETS,
 
+	NL80211_ATTR_BEACON_TX_MODE,
+
 	/* add attributes here, update the policy in nl80211.c */
 
 	__NL80211_ATTR_AFTER_LAST,
@@ -7371,4 +7377,13 @@ enum nl80211_rnr_ies_attributes {
 	__NL80211_RNR_IES_ATTR_LAST,
 	NL80211_RNR_IES_ATTR_MAX = __NL80211_RNR_IES_ATTR_LAST - 1
 };
+
+/**
+ * enum nl80211_beacon_tx_mode - Beacon Tx Mode enum.
+ * 	Used to configure beacon staggered mode or beacon burst mode.
+ */
+enum nl80211_beacon_tx_mode {
+	NL80211_BEACON_STAGGERED_MODE = 1,
+	NL80211_BEACON_BURST_MODE = 2,
+};
 #endif /* __LINUX_NL80211_H */
Index: hostapd-2021-02-20-59e9794c/hostapd/hostapd.conf
===================================================================
--- hostapd-2021-02-20-59e9794c.orig/hostapd/hostapd.conf
+++ hostapd-2021-02-20-59e9794c/hostapd/hostapd.conf
@@ -250,6 +250,9 @@ rts_threshold=-1
 # it.
 fragm_threshold=-1
 
+# Beacon Tx mode; 1 = STAGGERED beacon tx mode; 2 = BURST beacon tx mode.
+beacon_tx_mode=1
+
 # Rate configuration
 # Default is to enable all rates supported by the hardware. This configuration
 # item allows this list be filtered so that only the listed rates will be left
Index: hostapd-2021-02-20-59e9794c/wpa_supplicant/config.c
===================================================================
--- hostapd-2021-02-20-59e9794c.orig/wpa_supplicant/config.c
+++ hostapd-2021-02-20-59e9794c/wpa_supplicant/config.c
@@ -2740,6 +2740,7 @@ static const struct parse_data ssid_fiel
 	{ INT_RANGE(transition_disable, 0, 255) },
 	{ INT_RANGE(sae_pk, 0, 2) },
 	{ INT_RANGE(disable_40mhz_scan, 0, 1)},
+	{ INT_RANGE(beacon_tx_mode, 1, 2)},
 };
 
 #undef OFFSET
@@ -3249,6 +3250,7 @@ void wpa_config_set_network_defaults(str
 #endif /* CONFIG_MACSEC */
 	ssid->mac_addr = -1;
 	ssid->max_oper_chwidth = DEFAULT_MAX_OPER_CHWIDTH;
+	ssid->beacon_tx_mode = DEFAULT_BEACON_TX_MODE;
 }
 
 
Index: hostapd-2021-02-20-59e9794c/wpa_supplicant/config_file.c
===================================================================
--- hostapd-2021-02-20-59e9794c.orig/wpa_supplicant/config_file.c
+++ hostapd-2021-02-20-59e9794c/wpa_supplicant/config_file.c
@@ -888,6 +888,7 @@ static void wpa_config_write_network(FIL
 	INT(disable_he);
 #endif /* CONFIG_HE_OVERRIDES */
 	INT(disable_40mhz_scan);
+	INT(beacon_tx_mode);
 #undef STR
 #undef INT
 #undef INT_DEF
Index: hostapd-2021-02-20-59e9794c/wpa_supplicant/config_ssid.h
===================================================================
--- hostapd-2021-02-20-59e9794c.orig/wpa_supplicant/config_ssid.h
+++ hostapd-2021-02-20-59e9794c/wpa_supplicant/config_ssid.h
@@ -47,6 +47,7 @@
 #define DEFAULT_AMPDU_DENSITY -1 /* no change */
 #define DEFAULT_USER_SELECTED_SIM 1
 #define DEFAULT_MAX_OPER_CHWIDTH -1
+#define DEFAULT_BEACON_TX_MODE 0
 
 struct psk_list_entry {
 	struct dl_list list;
@@ -1177,6 +1178,13 @@ struct wpa_ssid {
 	 * disable_40mhz_scan - Disable 40MHz coex scan
 	 */
 	int disable_40mhz_scan;
+
+	/**
+	 * beacon_tx_mode - Beacon Tx mode
+	 * 1 = STAGGERED MODE
+	 * 2 = BURST MODE
+	 */
+	int beacon_tx_mode;
 };
 
 #endif /* CONFIG_SSID_H */
Index: hostapd-2021-02-20-59e9794c/wpa_supplicant/mesh.c
===================================================================
--- hostapd-2021-02-20-59e9794c.orig/wpa_supplicant/mesh.c
+++ hostapd-2021-02-20-59e9794c/wpa_supplicant/mesh.c
@@ -668,6 +668,7 @@ int wpa_supplicant_join_mesh(struct wpa_
 		params->dtim_period = ssid->dtim_period;
 	else if (wpa_s->conf->dtim_period > 0)
 		params->dtim_period = wpa_s->conf->dtim_period;
+	params->beacon_tx_mode = ssid->beacon_tx_mode;
 	params->conf.max_peer_links = wpa_s->conf->max_peer_links;
 	if (ssid->mesh_rssi_threshold < DEFAULT_MESH_RSSI_THRESHOLD) {
 		params->conf.rssi_threshold = ssid->mesh_rssi_threshold;
Index: hostapd-2021-02-20-59e9794c/wpa_supplicant/wpa_cli.c
===================================================================
--- hostapd-2021-02-20-59e9794c.orig/wpa_supplicant/wpa_cli.c
+++ hostapd-2021-02-20-59e9794c/wpa_supplicant/wpa_cli.c
@@ -1489,6 +1489,7 @@ static const char *network_fields[] = {
 #endif /* CONFIG_HS20 */
 	"mac_addr", "pbss", "wps_disabled",
 	"disable_40mhz_scan",
+	"beacon_tx_mode",
 };
 
 
