diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index 1af83f151..5352ef5ea 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -1885,6 +1885,14 @@ struct wpa_driver_ops {
 	 */
 	int (*set_p2p_powersave)(void *priv, int legacy_ps, int opp_ps,
 				 int ctwindow);
+
+	/**
+	 * ampdu - Enable/disable aggregation
+	 * @priv: Private driver interface data
+	 * @ampdu: 1/0 = enable/disable A-MPDU aggregation
+	 * Returns: 0 on success or -1 on failure
+	 */
+	int (*ampdu)(void *priv, int ampdu);
 };
 
 
diff --git a/src/drivers/driver_ndis.c b/src/drivers/driver_ndis.c
index b4b5cf313..ed00e9841 100644
--- a/src/drivers/driver_ndis.c
+++ b/src/drivers/driver_ndis.c
@@ -3307,5 +3307,6 @@ const struct wpa_driver_ops wpa_driver_ndis_ops = {
 	NULL /* shared_freq */,
 	NULL /* get_noa */,
 	NULL /* set_noa */,
-	NULL /* set_p2p_powersave */
+	NULL /* set_p2p_powersave */,
+	NULL /* ampdu */
 };
diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c
index 4357adada..0871b39fd 100644
--- a/wpa_supplicant/ctrl_iface.c
+++ b/wpa_supplicant/ctrl_iface.c
@@ -84,6 +84,9 @@ static int wpa_supplicant_ctrl_iface_set(struct wpa_supplicant *wpa_s,
 			ret = -1;
 	} else if (os_strcasecmp(cmd, "wps_fragment_size") == 0) {
 		wpa_s->wps_fragment_size = atoi(value);
+	} else if (os_strcasecmp(cmd, "ampdu") == 0) {
+		if (wpa_drv_ampdu(wpa_s, atoi(value)) < 0)
+			ret = -1;
 	} else {
 		value[-1] = '=';
 		ret = wpa_config_process_global(wpa_s->conf, cmd, -1);
diff --git a/wpa_supplicant/driver_i.h b/wpa_supplicant/driver_i.h
index 2e404e992..bfc5b749f 100644
--- a/wpa_supplicant/driver_i.h
+++ b/wpa_supplicant/driver_i.h
@@ -524,4 +524,11 @@ static inline int wpa_drv_set_p2p_powersave(struct wpa_supplicant *wpa_s,
 						opp_ps, ctwindow);
 }
 
+static inline int wpa_drv_ampdu(struct wpa_supplicant *wpa_s, int ampdu)
+{
+	if (!wpa_s->driver->ampdu)
+		return -1;
+	return wpa_s->driver->ampdu(wpa_s->drv_priv, ampdu);
+}
+
 #endif /* DRIVER_I_H */