mac80211: Update to version 5.7-rc3-1
This updates the mac80211 backport. The removed patches are already integrated in the upstream version. The 131-Revert-mac80211-aes-cmac-switch-to-shash-CMAC-driver.patch patch was manually adapted to the changes in kernel 5.7. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
		| @@ -10,10 +10,10 @@ include $(INCLUDE_DIR)/kernel.mk | |||||||
|  |  | ||||||
| PKG_NAME:=mac80211 | PKG_NAME:=mac80211 | ||||||
|  |  | ||||||
| PKG_VERSION:=5.6.8-1 | PKG_VERSION:=5.7-rc3-1 | ||||||
| PKG_RELEASE:=1 | PKG_RELEASE:=1 | ||||||
| PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v5.6.8/ | PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v5.7-rc3/ | ||||||
| PKG_HASH:=547c5e17b9e23dd23cdf4d617a7550b80869e02114a7d404911c5ae928ae1da5 | PKG_HASH:=7bc785c932f011c65adb75ffa746be2fa90b16ab61a6e1fd883acee403ffeed1 | ||||||
|  |  | ||||||
| PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz | PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz | ||||||
| PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/backports-$(PKG_VERSION) | PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/backports-$(PKG_VERSION) | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/net/wireless/reg.c | --- a/net/wireless/reg.c | ||||||
| +++ b/net/wireless/reg.c | +++ b/net/wireless/reg.c | ||||||
| @@ -3039,6 +3039,8 @@ void regulatory_hint_country_ie(struct w | @@ -3041,6 +3041,8 @@ void regulatory_hint_country_ie(struct w | ||||||
|  	enum environment_cap env = ENVIRON_ANY; |  	enum environment_cap env = ENVIRON_ANY; | ||||||
|  	struct regulatory_request *request = NULL, *lr; |  	struct regulatory_request *request = NULL, *lr; | ||||||
|   |   | ||||||
| @@ -9,7 +9,7 @@ | |||||||
|  	/* IE len must be evenly divisible by 2 */ |  	/* IE len must be evenly divisible by 2 */ | ||||||
|  	if (country_ie_len & 0x01) |  	if (country_ie_len & 0x01) | ||||||
|  		return; |  		return; | ||||||
| @@ -3290,6 +3292,7 @@ static bool is_wiphy_all_set_reg_flag(en | @@ -3292,6 +3294,7 @@ static bool is_wiphy_all_set_reg_flag(en | ||||||
|   |   | ||||||
|  void regulatory_hint_disconnect(void) |  void regulatory_hint_disconnect(void) | ||||||
|  { |  { | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ Signed-off-by: Sven Eckelmann <sven@open-mesh.com> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ath/ath10k/core.c | --- a/drivers/net/wireless/ath/ath10k/core.c | ||||||
| +++ b/drivers/net/wireless/ath/ath10k/core.c | +++ b/drivers/net/wireless/ath/ath10k/core.c | ||||||
| @@ -3094,6 +3094,16 @@ int ath10k_core_register(struct ath10k * | @@ -3174,6 +3174,16 @@ int ath10k_core_register(struct ath10k * | ||||||
|   |   | ||||||
|  	queue_work(ar->workqueue, &ar->register_work); |  	queue_work(ar->workqueue, &ar->register_work); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/drivers/net/wireless/ath/ath10k/mac.c | --- a/drivers/net/wireless/ath/ath10k/mac.c | ||||||
| +++ b/drivers/net/wireless/ath/ath10k/mac.c | +++ b/drivers/net/wireless/ath/ath10k/mac.c | ||||||
| @@ -8764,6 +8764,21 @@ static int ath10k_mac_init_rd(struct ath | @@ -8781,6 +8781,21 @@ static int ath10k_mac_init_rd(struct ath | ||||||
|  	return 0; |  	return 0; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -22,7 +22,7 @@ | |||||||
|  int ath10k_mac_register(struct ath10k *ar) |  int ath10k_mac_register(struct ath10k *ar) | ||||||
|  { |  { | ||||||
|  	static const u32 cipher_suites[] = { |  	static const u32 cipher_suites[] = { | ||||||
| @@ -9092,6 +9107,12 @@ int ath10k_mac_register(struct ath10k *a | @@ -9109,6 +9124,12 @@ int ath10k_mac_register(struct ath10k *a | ||||||
|   |   | ||||||
|  	ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER; |  	ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ v9: use SM/MS macros from code.h to simplify shift/mask handling | |||||||
|  3 files changed, 52 insertions(+), 23 deletions(-) |  3 files changed, 52 insertions(+), 23 deletions(-) | ||||||
| --- a/drivers/net/wireless/ath/ath10k/mac.c | --- a/drivers/net/wireless/ath/ath10k/mac.c | ||||||
| +++ b/drivers/net/wireless/ath/ath10k/mac.c | +++ b/drivers/net/wireless/ath/ath10k/mac.c | ||||||
| @@ -2516,7 +2516,7 @@ static void ath10k_peer_assoc_h_vht(stru | @@ -2517,7 +2517,7 @@ static void ath10k_peer_assoc_h_vht(stru | ||||||
|  	const u16 *vht_mcs_mask; |  	const u16 *vht_mcs_mask; | ||||||
|  	u8 ampdu_factor; |  	u8 ampdu_factor; | ||||||
|  	u8 max_nss, vht_mcs; |  	u8 max_nss, vht_mcs; | ||||||
| @@ -32,7 +32,7 @@ v9: use SM/MS macros from code.h to simplify shift/mask handling | |||||||
|   |   | ||||||
|  	if (WARN_ON(ath10k_mac_vif_chan(vif, &def))) |  	if (WARN_ON(ath10k_mac_vif_chan(vif, &def))) | ||||||
|  		return; |  		return; | ||||||
| @@ -2576,23 +2576,45 @@ static void ath10k_peer_assoc_h_vht(stru | @@ -2577,23 +2577,45 @@ static void ath10k_peer_assoc_h_vht(stru | ||||||
|  		__le16_to_cpu(vht_cap->vht_mcs.tx_highest); |  		__le16_to_cpu(vht_cap->vht_mcs.tx_highest); | ||||||
|  	arg->peer_vht_rates.tx_mcs_set = ath10k_peer_assoc_h_vht_limit( |  	arg->peer_vht_rates.tx_mcs_set = ath10k_peer_assoc_h_vht_limit( | ||||||
|  		__le16_to_cpu(vht_cap->vht_mcs.tx_mcs_map), vht_mcs_mask); |  		__le16_to_cpu(vht_cap->vht_mcs.tx_mcs_map), vht_mcs_mask); | ||||||
| @@ -92,7 +92,7 @@ v9: use SM/MS macros from code.h to simplify shift/mask handling | |||||||
|  } |  } | ||||||
|   |   | ||||||
|  static void ath10k_peer_assoc_h_qos(struct ath10k *ar, |  static void ath10k_peer_assoc_h_qos(struct ath10k *ar, | ||||||
| @@ -2744,9 +2766,9 @@ static int ath10k_peer_assoc_prepare(str | @@ -2745,9 +2767,9 @@ static int ath10k_peer_assoc_prepare(str | ||||||
|  	ath10k_peer_assoc_h_crypto(ar, vif, sta, arg); |  	ath10k_peer_assoc_h_crypto(ar, vif, sta, arg); | ||||||
|  	ath10k_peer_assoc_h_rates(ar, vif, sta, arg); |  	ath10k_peer_assoc_h_rates(ar, vif, sta, arg); | ||||||
|  	ath10k_peer_assoc_h_ht(ar, vif, sta, arg); |  	ath10k_peer_assoc_h_ht(ar, vif, sta, arg); | ||||||
| @@ -105,7 +105,7 @@ v9: use SM/MS macros from code.h to simplify shift/mask handling | |||||||
|  } |  } | ||||||
| --- a/drivers/net/wireless/ath/ath10k/wmi.c | --- a/drivers/net/wireless/ath/ath10k/wmi.c | ||||||
| +++ b/drivers/net/wireless/ath/ath10k/wmi.c | +++ b/drivers/net/wireless/ath/ath10k/wmi.c | ||||||
| @@ -7615,12 +7615,7 @@ ath10k_wmi_peer_assoc_fill_10_4(struct a | @@ -7628,12 +7628,7 @@ ath10k_wmi_peer_assoc_fill_10_4(struct a | ||||||
|  	struct wmi_10_4_peer_assoc_complete_cmd *cmd = buf; |  	struct wmi_10_4_peer_assoc_complete_cmd *cmd = buf; | ||||||
|   |   | ||||||
|  	ath10k_wmi_peer_assoc_fill_10_2(ar, buf, arg); |  	ath10k_wmi_peer_assoc_fill_10_2(ar, buf, arg); | ||||||
| @@ -121,7 +121,7 @@ v9: use SM/MS macros from code.h to simplify shift/mask handling | |||||||
|  static int |  static int | ||||||
| --- a/drivers/net/wireless/ath/ath10k/wmi.h | --- a/drivers/net/wireless/ath/ath10k/wmi.h | ||||||
| +++ b/drivers/net/wireless/ath/ath10k/wmi.h | +++ b/drivers/net/wireless/ath/ath10k/wmi.h | ||||||
| @@ -6501,7 +6501,19 @@ struct wmi_10_2_peer_assoc_complete_cmd | @@ -6508,7 +6508,19 @@ struct wmi_10_2_peer_assoc_complete_cmd | ||||||
|  	__le32 info0; /* WMI_PEER_ASSOC_INFO0_ */ |  	__le32 info0; /* WMI_PEER_ASSOC_INFO0_ */ | ||||||
|  } __packed; |  } __packed; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ v2: fix trailing whitespace issue and fix some typos within the commit note | |||||||
|  2 files changed, 8 insertions(+), 10 deletions(-) |  2 files changed, 8 insertions(+), 10 deletions(-) | ||||||
| --- a/drivers/net/wireless/ath/ath10k/mac.c | --- a/drivers/net/wireless/ath/ath10k/mac.c | ||||||
| +++ b/drivers/net/wireless/ath/ath10k/mac.c | +++ b/drivers/net/wireless/ath/ath10k/mac.c | ||||||
| @@ -4576,13 +4576,6 @@ static struct ieee80211_sta_vht_cap ath1 | @@ -4585,13 +4585,6 @@ static struct ieee80211_sta_vht_cap ath1 | ||||||
|  		vht_cap.cap |= val; |  		vht_cap.cap |= val; | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
|   | |||||||
| @@ -172,7 +172,7 @@ v13: | |||||||
|  		.patch_load_addr = QCA9888_HW_2_0_PATCH_LOAD_ADDR, |  		.patch_load_addr = QCA9888_HW_2_0_PATCH_LOAD_ADDR, | ||||||
|  		.uart_pin = 7, |  		.uart_pin = 7, | ||||||
|  		.cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_EACH, |  		.cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_EACH, | ||||||
| @@ -2811,6 +2817,10 @@ int ath10k_core_start(struct ath10k *ar, | @@ -2889,6 +2895,10 @@ int ath10k_core_start(struct ath10k *ar, | ||||||
|  		goto err_hif_stop; |  		goto err_hif_stop; | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @@ -183,7 +183,7 @@ v13: | |||||||
|  	return 0; |  	return 0; | ||||||
|   |   | ||||||
|  err_hif_stop: |  err_hif_stop: | ||||||
| @@ -3067,9 +3077,18 @@ static void ath10k_core_register_work(st | @@ -3147,9 +3157,18 @@ static void ath10k_core_register_work(st | ||||||
|  		goto err_spectral_destroy; |  		goto err_spectral_destroy; | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
| @@ -202,7 +202,7 @@ v13: | |||||||
|  err_spectral_destroy: |  err_spectral_destroy: | ||||||
|  	ath10k_spectral_destroy(ar); |  	ath10k_spectral_destroy(ar); | ||||||
|  err_debug_destroy: |  err_debug_destroy: | ||||||
| @@ -3115,6 +3134,8 @@ void ath10k_core_unregister(struct ath10 | @@ -3195,6 +3214,8 @@ void ath10k_core_unregister(struct ath10 | ||||||
|  	if (!test_bit(ATH10K_FLAG_CORE_REGISTERED, &ar->dev_flags)) |  	if (!test_bit(ATH10K_FLAG_CORE_REGISTERED, &ar->dev_flags)) | ||||||
|  		return; |  		return; | ||||||
|   |   | ||||||
| @@ -221,7 +221,7 @@ v13: | |||||||
|   |   | ||||||
|  #include "htt.h" |  #include "htt.h" | ||||||
|  #include "htc.h" |  #include "htc.h" | ||||||
| @@ -1180,6 +1181,13 @@ struct ath10k { | @@ -1182,6 +1183,13 @@ struct ath10k { | ||||||
|  	} testmode; |  	} testmode; | ||||||
|   |   | ||||||
|  	struct { |  	struct { | ||||||
| @@ -467,7 +467,7 @@ v13: | |||||||
|  static const struct wmi_peer_flags_map wmi_tlv_peer_flags_map = { |  static const struct wmi_peer_flags_map wmi_tlv_peer_flags_map = { | ||||||
| --- a/drivers/net/wireless/ath/ath10k/wmi.c | --- a/drivers/net/wireless/ath/ath10k/wmi.c | ||||||
| +++ b/drivers/net/wireless/ath/ath10k/wmi.c | +++ b/drivers/net/wireless/ath/ath10k/wmi.c | ||||||
| @@ -7435,6 +7435,49 @@ ath10k_wmi_op_gen_peer_set_param(struct | @@ -7448,6 +7448,49 @@ ath10k_wmi_op_gen_peer_set_param(struct | ||||||
|  	return skb; |  	return skb; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -517,7 +517,7 @@ v13: | |||||||
|  static struct sk_buff * |  static struct sk_buff * | ||||||
|  ath10k_wmi_op_gen_set_psmode(struct ath10k *ar, u32 vdev_id, |  ath10k_wmi_op_gen_set_psmode(struct ath10k *ar, u32 vdev_id, | ||||||
|  			     enum wmi_sta_ps_mode psmode) |  			     enum wmi_sta_ps_mode psmode) | ||||||
| @@ -9092,6 +9135,9 @@ static const struct wmi_ops wmi_ops = { | @@ -9105,6 +9148,9 @@ static const struct wmi_ops wmi_ops = { | ||||||
|  	.fw_stats_fill = ath10k_wmi_main_op_fw_stats_fill, |  	.fw_stats_fill = ath10k_wmi_main_op_fw_stats_fill, | ||||||
|  	.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype, |  	.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype, | ||||||
|  	.gen_echo = ath10k_wmi_op_gen_echo, |  	.gen_echo = ath10k_wmi_op_gen_echo, | ||||||
| @@ -527,7 +527,7 @@ v13: | |||||||
|  	/* .gen_bcn_tmpl not implemented */ |  	/* .gen_bcn_tmpl not implemented */ | ||||||
|  	/* .gen_prb_tmpl not implemented */ |  	/* .gen_prb_tmpl not implemented */ | ||||||
|  	/* .gen_p2p_go_bcn_ie not implemented */ |  	/* .gen_p2p_go_bcn_ie not implemented */ | ||||||
| @@ -9162,6 +9208,8 @@ static const struct wmi_ops wmi_10_1_ops | @@ -9175,6 +9221,8 @@ static const struct wmi_ops wmi_10_1_ops | ||||||
|  	.fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill, |  	.fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill, | ||||||
|  	.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype, |  	.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype, | ||||||
|  	.gen_echo = ath10k_wmi_op_gen_echo, |  	.gen_echo = ath10k_wmi_op_gen_echo, | ||||||
| @@ -536,7 +536,7 @@ v13: | |||||||
|  	/* .gen_bcn_tmpl not implemented */ |  	/* .gen_bcn_tmpl not implemented */ | ||||||
|  	/* .gen_prb_tmpl not implemented */ |  	/* .gen_prb_tmpl not implemented */ | ||||||
|  	/* .gen_p2p_go_bcn_ie not implemented */ |  	/* .gen_p2p_go_bcn_ie not implemented */ | ||||||
| @@ -9234,6 +9282,8 @@ static const struct wmi_ops wmi_10_2_ops | @@ -9247,6 +9295,8 @@ static const struct wmi_ops wmi_10_2_ops | ||||||
|  	.gen_delba_send = ath10k_wmi_op_gen_delba_send, |  	.gen_delba_send = ath10k_wmi_op_gen_delba_send, | ||||||
|  	.fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill, |  	.fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill, | ||||||
|  	.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype, |  	.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype, | ||||||
| @@ -545,7 +545,7 @@ v13: | |||||||
|  	/* .gen_pdev_enable_adaptive_cca not implemented */ |  	/* .gen_pdev_enable_adaptive_cca not implemented */ | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
| @@ -9305,6 +9355,8 @@ static const struct wmi_ops wmi_10_2_4_o | @@ -9318,6 +9368,8 @@ static const struct wmi_ops wmi_10_2_4_o | ||||||
|  		ath10k_wmi_op_gen_pdev_enable_adaptive_cca, |  		ath10k_wmi_op_gen_pdev_enable_adaptive_cca, | ||||||
|  	.get_vdev_subtype = ath10k_wmi_10_2_4_op_get_vdev_subtype, |  	.get_vdev_subtype = ath10k_wmi_10_2_4_op_get_vdev_subtype, | ||||||
|  	.gen_bb_timing = ath10k_wmi_10_2_4_op_gen_bb_timing, |  	.gen_bb_timing = ath10k_wmi_10_2_4_op_gen_bb_timing, | ||||||
| @@ -554,7 +554,7 @@ v13: | |||||||
|  	/* .gen_bcn_tmpl not implemented */ |  	/* .gen_bcn_tmpl not implemented */ | ||||||
|  	/* .gen_prb_tmpl not implemented */ |  	/* .gen_prb_tmpl not implemented */ | ||||||
|  	/* .gen_p2p_go_bcn_ie not implemented */ |  	/* .gen_p2p_go_bcn_ie not implemented */ | ||||||
| @@ -9385,6 +9437,8 @@ static const struct wmi_ops wmi_10_4_ops | @@ -9398,6 +9450,8 @@ static const struct wmi_ops wmi_10_4_ops | ||||||
|  	.gen_pdev_bss_chan_info_req = ath10k_wmi_10_2_op_gen_pdev_bss_chan_info, |  	.gen_pdev_bss_chan_info_req = ath10k_wmi_10_2_op_gen_pdev_bss_chan_info, | ||||||
|  	.gen_echo = ath10k_wmi_op_gen_echo, |  	.gen_echo = ath10k_wmi_op_gen_echo, | ||||||
|  	.gen_pdev_get_tpc_config = ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config, |  	.gen_pdev_get_tpc_config = ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config, | ||||||
| @@ -565,7 +565,7 @@ v13: | |||||||
|  int ath10k_wmi_attach(struct ath10k *ar) |  int ath10k_wmi_attach(struct ath10k *ar) | ||||||
| --- a/drivers/net/wireless/ath/ath10k/wmi.h | --- a/drivers/net/wireless/ath/ath10k/wmi.h | ||||||
| +++ b/drivers/net/wireless/ath/ath10k/wmi.h | +++ b/drivers/net/wireless/ath/ath10k/wmi.h | ||||||
| @@ -3007,6 +3007,41 @@ enum wmi_10_4_feature_mask { | @@ -3014,6 +3014,41 @@ enum wmi_10_4_feature_mask { | ||||||
|   |   | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
|   | |||||||
| @@ -16,9 +16,9 @@ Signed-off-by: Mathias Kresin <dev@kresin.me> | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ath/ath10k/core.h | --- a/drivers/net/wireless/ath/ath10k/core.h | ||||||
| +++ b/drivers/net/wireless/ath/ath10k/core.h | +++ b/drivers/net/wireless/ath/ath10k/core.h | ||||||
| @@ -1230,6 +1230,10 @@ struct ath10k { | @@ -1235,6 +1235,10 @@ struct ath10k { | ||||||
|  	struct ath10k_bus_params bus_param; |  	bool coex_support; | ||||||
|  	struct completion peer_delete_done; |  	int coex_gpio_pin; | ||||||
|   |   | ||||||
| +#ifdef CPTCFG_MAC80211_LEDS | +#ifdef CPTCFG_MAC80211_LEDS | ||||||
| +	const char *led_default_trigger; | +	const char *led_default_trigger; | ||||||
| @@ -42,7 +42,7 @@ Signed-off-by: Mathias Kresin <dev@kresin.me> | |||||||
|  	if (ret) |  	if (ret) | ||||||
| --- a/drivers/net/wireless/ath/ath10k/mac.c | --- a/drivers/net/wireless/ath/ath10k/mac.c | ||||||
| +++ b/drivers/net/wireless/ath/ath10k/mac.c | +++ b/drivers/net/wireless/ath/ath10k/mac.c | ||||||
| @@ -9124,7 +9124,7 @@ int ath10k_mac_register(struct ath10k *a | @@ -9141,7 +9141,7 @@ int ath10k_mac_register(struct ath10k *a | ||||||
|  	ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER; |  	ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER; | ||||||
|   |   | ||||||
|  #ifdef CPTCFG_MAC80211_LEDS |  #ifdef CPTCFG_MAC80211_LEDS | ||||||
|   | |||||||
| @@ -20,7 +20,7 @@ Forwarded: https://patchwork.kernel.org/patch/10986723/ | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ath/ath10k/mac.c | --- a/drivers/net/wireless/ath/ath10k/mac.c | ||||||
| +++ b/drivers/net/wireless/ath/ath10k/mac.c | +++ b/drivers/net/wireless/ath/ath10k/mac.c | ||||||
| @@ -1042,7 +1042,7 @@ static int ath10k_monitor_vdev_start(str | @@ -1043,7 +1043,7 @@ static int ath10k_monitor_vdev_start(str | ||||||
|  	arg.channel.min_power = 0; |  	arg.channel.min_power = 0; | ||||||
|  	arg.channel.max_power = channel->max_power * 2; |  	arg.channel.max_power = channel->max_power * 2; | ||||||
|  	arg.channel.max_reg_power = channel->max_reg_power * 2; |  	arg.channel.max_reg_power = channel->max_reg_power * 2; | ||||||
| @@ -29,7 +29,7 @@ Forwarded: https://patchwork.kernel.org/patch/10986723/ | |||||||
|   |   | ||||||
|  	reinit_completion(&ar->vdev_setup_done); |  	reinit_completion(&ar->vdev_setup_done); | ||||||
|  	reinit_completion(&ar->vdev_delete_done); |  	reinit_completion(&ar->vdev_delete_done); | ||||||
| @@ -1488,7 +1488,7 @@ static int ath10k_vdev_start_restart(str | @@ -1489,7 +1489,7 @@ static int ath10k_vdev_start_restart(str | ||||||
|  	arg.channel.min_power = 0; |  	arg.channel.min_power = 0; | ||||||
|  	arg.channel.max_power = chandef->chan->max_power * 2; |  	arg.channel.max_power = chandef->chan->max_power * 2; | ||||||
|  	arg.channel.max_reg_power = chandef->chan->max_reg_power * 2; |  	arg.channel.max_reg_power = chandef->chan->max_reg_power * 2; | ||||||
| @@ -38,7 +38,7 @@ Forwarded: https://patchwork.kernel.org/patch/10986723/ | |||||||
|   |   | ||||||
|  	if (arvif->vdev_type == WMI_VDEV_TYPE_AP) { |  	if (arvif->vdev_type == WMI_VDEV_TYPE_AP) { | ||||||
|  		arg.ssid = arvif->u.ap.ssid; |  		arg.ssid = arvif->u.ap.ssid; | ||||||
| @@ -3169,7 +3169,7 @@ static int ath10k_update_channel_list(st | @@ -3170,7 +3170,7 @@ static int ath10k_update_channel_list(st | ||||||
|  			ch->min_power = 0; |  			ch->min_power = 0; | ||||||
|  			ch->max_power = channel->max_power * 2; |  			ch->max_power = channel->max_power * 2; | ||||||
|  			ch->max_reg_power = channel->max_reg_power * 2; |  			ch->max_reg_power = channel->max_reg_power * 2; | ||||||
|   | |||||||
| @@ -28,7 +28,7 @@ Forwarded: no | |||||||
|  |  | ||||||
| --- a/drivers/net/wireless/ath/ath10k/mac.c | --- a/drivers/net/wireless/ath/ath10k/mac.c | ||||||
| +++ b/drivers/net/wireless/ath/ath10k/mac.c | +++ b/drivers/net/wireless/ath/ath10k/mac.c | ||||||
| @@ -1010,6 +1010,40 @@ static inline int ath10k_vdev_setup_sync | @@ -1011,6 +1011,40 @@ static inline int ath10k_vdev_setup_sync | ||||||
|  	return ar->last_wmi_vdev_start_status; |  	return ar->last_wmi_vdev_start_status; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @@ -69,7 +69,7 @@ Forwarded: no | |||||||
|  static int ath10k_monitor_vdev_start(struct ath10k *ar, int vdev_id) |  static int ath10k_monitor_vdev_start(struct ath10k *ar, int vdev_id) | ||||||
|  { |  { | ||||||
|  	struct cfg80211_chan_def *chandef = NULL; |  	struct cfg80211_chan_def *chandef = NULL; | ||||||
| @@ -1042,7 +1076,8 @@ static int ath10k_monitor_vdev_start(str | @@ -1043,7 +1077,8 @@ static int ath10k_monitor_vdev_start(str | ||||||
|  	arg.channel.min_power = 0; |  	arg.channel.min_power = 0; | ||||||
|  	arg.channel.max_power = channel->max_power * 2; |  	arg.channel.max_power = channel->max_power * 2; | ||||||
|  	arg.channel.max_reg_power = channel->max_reg_power * 2; |  	arg.channel.max_reg_power = channel->max_reg_power * 2; | ||||||
| @@ -79,7 +79,7 @@ Forwarded: no | |||||||
|   |   | ||||||
|  	reinit_completion(&ar->vdev_setup_done); |  	reinit_completion(&ar->vdev_setup_done); | ||||||
|  	reinit_completion(&ar->vdev_delete_done); |  	reinit_completion(&ar->vdev_delete_done); | ||||||
| @@ -1488,7 +1523,8 @@ static int ath10k_vdev_start_restart(str | @@ -1489,7 +1524,8 @@ static int ath10k_vdev_start_restart(str | ||||||
|  	arg.channel.min_power = 0; |  	arg.channel.min_power = 0; | ||||||
|  	arg.channel.max_power = chandef->chan->max_power * 2; |  	arg.channel.max_power = chandef->chan->max_power * 2; | ||||||
|  	arg.channel.max_reg_power = chandef->chan->max_reg_power * 2; |  	arg.channel.max_reg_power = chandef->chan->max_reg_power * 2; | ||||||
| @@ -89,7 +89,7 @@ Forwarded: no | |||||||
|   |   | ||||||
|  	if (arvif->vdev_type == WMI_VDEV_TYPE_AP) { |  	if (arvif->vdev_type == WMI_VDEV_TYPE_AP) { | ||||||
|  		arg.ssid = arvif->u.ap.ssid; |  		arg.ssid = arvif->u.ap.ssid; | ||||||
| @@ -3169,7 +3205,8 @@ static int ath10k_update_channel_list(st | @@ -3170,7 +3206,8 @@ static int ath10k_update_channel_list(st | ||||||
|  			ch->min_power = 0; |  			ch->min_power = 0; | ||||||
|  			ch->max_power = channel->max_power * 2; |  			ch->max_power = channel->max_power * 2; | ||||||
|  			ch->max_reg_power = channel->max_reg_power * 2; |  			ch->max_reg_power = channel->max_reg_power * 2; | ||||||
|   | |||||||
| @@ -1,100 +0,0 @@ | |||||||
| From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl> |  | ||||||
| Date: Fri, 27 Mar 2020 13:40:50 +0100 |  | ||||||
| Subject: [PATCH] brcmfmac: add stub for monitor interface xmit |  | ||||||
| MIME-Version: 1.0 |  | ||||||
| Content-Type: text/plain; charset=UTF-8 |  | ||||||
| Content-Transfer-Encoding: 8bit |  | ||||||
|  |  | ||||||
| According to the struct net_device_ops documentation .ndo_start_xmit is |  | ||||||
| "Required; cannot be NULL.". Missing it may crash kernel easily: |  | ||||||
|  |  | ||||||
| [  341.216709] Unable to handle kernel NULL pointer dereference at virtual address 00000000 |  | ||||||
| [  341.224836] pgd = 26088755 |  | ||||||
| [  341.227544] [00000000] *pgd=00000000 |  | ||||||
| [  341.231135] Internal error: Oops: 80000007 [#1] SMP ARM |  | ||||||
| [  341.236367] Modules linked in: pppoe ppp_async iptable_nat brcmfmac xt_state xt_nat xt_conntrack xt_REDIRECT xt_MASQU |  | ||||||
| [  341.304689] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.4.24 #0 |  | ||||||
| [  341.310621] Hardware name: BCM5301X |  | ||||||
| [  341.314116] PC is at 0x0 |  | ||||||
| [  341.316664] LR is at dev_hard_start_xmit+0x8c/0x11c |  | ||||||
| [  341.321546] pc : [<00000000>]    lr : [<c0469fa8>]    psr: 60000113 |  | ||||||
| [  341.327821] sp : c0801c30  ip : c610cf00  fp : c08048e4 |  | ||||||
| [  341.333051] r10: c073a63a  r9 : c08044dc  r8 : c6c04e00 |  | ||||||
| [  341.338283] r7 : 00000000  r6 : c60f5000  r5 : 00000000  r4 : c6a9c3c0 |  | ||||||
| [  341.344820] r3 : 00000000  r2 : bf25a13c  r1 : c60f5000  r0 : c6a9c3c0 |  | ||||||
| [  341.351358] Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none |  | ||||||
| [  341.358504] Control: 10c5387d  Table: 0611c04a  DAC: 00000051 |  | ||||||
| [  341.364257] Process swapper/0 (pid: 0, stack limit = 0xc68ed0ca) |  | ||||||
| [  341.370271] Stack: (0xc0801c30 to 0xc0802000) |  | ||||||
| [  341.374633] 1c20:                                     c6e7d480 c0802d00 c60f5050 c0801c6c |  | ||||||
| [  341.382825] 1c40: c60f5000 c6a9c3c0 c6f90000 c6f9005c c6c04e00 c60f5000 00000000 c6f9005c |  | ||||||
| [  341.391015] 1c60: 00000000 c04a033c 00f90200 00000010 c6a9c3c0 c6a9c3c0 c6f90000 00000000 |  | ||||||
| [  341.399205] 1c80: 00000000 00000000 00000000 c046a7ac c6f9005c 00000001 fffffff4 00000000 |  | ||||||
| [  341.407395] 1ca0: c6f90200 00000000 c60f5000 c0479550 00000000 c6f90200 c6a9c3c0 16000000 |  | ||||||
| [  341.415586] 1cc0: 0000001c 6f4ad52f c6197040 b6df9387 36000000 c0520404 c073a80c c6a9c3c0 |  | ||||||
| [  341.423777] 1ce0: 00000000 c6d643c0 c6a9c3c0 c0800024 00000001 00000001 c6d643c8 c6a9c3c0 |  | ||||||
| [  341.431967] 1d00: c081b9c0 c7abca80 c610c840 c081b9c0 0000001c 00400000 c6bc5e6c c0522fb4 |  | ||||||
| [  341.440157] 1d20: c6d64400 00000004 c6bc5e0a 00000000 c60f5000 c7abca80 c081b9c0 c0522f54 |  | ||||||
| [  341.448348] 1d40: c6a9c3c0 c7abca80 c0803e48 c0549c94 c610c828 0000000a c0801d74 00000003 |  | ||||||
| [  341.456538] 1d60: c6ec8f0a 00000000 c60f5000 c7abca80 c081b9c0 c0548520 0000000a 00000000 |  | ||||||
| [  341.464728] 1d80: 00000000 003a0000 00000000 00000000 00000000 00000000 00000000 00000000 |  | ||||||
| [  341.472919] 1da0: 000002ff 00000000 00000000 16000000 00000000 00000000 00000000 00000000 |  | ||||||
| [  341.481110] 1dc0: 00000000 0000008f 00000000 00000000 00000000 2d132a69 c6bc5e40 00000000 |  | ||||||
| [  341.489300] 1de0: c6bc5e40 c6a9c3c0 00000000 c6ec8e50 00000001 c054b070 00000001 00000000 |  | ||||||
| [  341.497490] 1e00: c0807200 c6bc5e00 00000000 ffffe000 00000100 c054aea4 00000000 00000000 |  | ||||||
| [  341.505681] 1e20: 00000122 00400000 c0802d00 c0172e80 6f56a70e ffffffff 6f56a70e c7eb9cc0 |  | ||||||
| [  341.513871] 1e40: c7eb82c0 00000000 c0801e60 c017309c 00000000 00000000 07780000 c07382c0 |  | ||||||
| [  341.522061] 1e60: 00000000 c7eb9cc0 c0739cc0 c0803f74 c0801e70 c0801e70 c0801ea4 c013d380 |  | ||||||
| [  341.530253] 1e80: 00000000 000000a0 00000001 c0802084 c0802080 40000001 ffffe000 00000100 |  | ||||||
| [  341.538443] 1ea0: c0802080 c01021e8 c8803100 10c5387d 00000000 c07341f0 c0739880 0000000a |  | ||||||
| [  341.546633] 1ec0: c0734180 00001017 c0802d00 c062aa98 00200002 c062aa60 c8803100 c073984c |  | ||||||
| [  341.554823] 1ee0: 00000000 00000001 00000000 c7810000 c8803100 10c5387d 00000000 c011c188 |  | ||||||
| [  341.563014] 1f00: c073984c c015f0f8 c0804244 c0815ae4 c880210c c8802100 c0801f40 c037c584 |  | ||||||
| [  341.571204] 1f20: c01035f8 60000013 ffffffff c0801f74 c080afd4 c0800000 10c5387d c0101a8c |  | ||||||
| [  341.579395] 1f40: 00000000 004ac9dc c7eba4b4 c010ee60 ffffe000 c0803e68 c0803ea8 00000001 |  | ||||||
| [  341.587587] 1f60: c080afd4 c062ca20 10c5387d 00000000 00000000 c0801f90 c01035f4 c01035f8 |  | ||||||
| [  341.595776] 1f80: 60000013 ffffffff 00000051 00000000 ffffe000 c013ff50 000000ce c0803e40 |  | ||||||
| [  341.603967] 1fa0: c082216c 00000000 00000001 c072ba38 10c5387d c0140214 c0822184 c0700df8 |  | ||||||
| [  341.612157] 1fc0: ffffffff ffffffff 00000000 c070058c c072ba38 2d162e71 00000000 c0700330 |  | ||||||
| [  341.620348] 1fe0: 00000051 10c0387d 000000ff 00a521d0 413fc090 00000000 00000000 00000000 |  | ||||||
| [  341.628558] [<c0469fa8>] (dev_hard_start_xmit) from [<c04a033c>] (sch_direct_xmit+0xe4/0x2bc) |  | ||||||
| [  341.637106] [<c04a033c>] (sch_direct_xmit) from [<c046a7ac>] (__dev_queue_xmit+0x6a4/0x72c) |  | ||||||
| [  341.645481] [<c046a7ac>] (__dev_queue_xmit) from [<c0520404>] (ip6_finish_output2+0x18c/0x434) |  | ||||||
| [  341.654112] [<c0520404>] (ip6_finish_output2) from [<c0522fb4>] (ip6_output+0x5c/0xd0) |  | ||||||
| [  341.662053] [<c0522fb4>] (ip6_output) from [<c0549c94>] (mld_sendpack+0x1a0/0x1a8) |  | ||||||
| [  341.669640] [<c0549c94>] (mld_sendpack) from [<c054b070>] (mld_ifc_timer_expire+0x1cc/0x2e4) |  | ||||||
| [  341.678111] [<c054b070>] (mld_ifc_timer_expire) from [<c0172e80>] (call_timer_fn.constprop.3+0x24/0x98) |  | ||||||
| [  341.687527] [<c0172e80>] (call_timer_fn.constprop.3) from [<c017309c>] (run_timer_softirq+0x1a8/0x1e4) |  | ||||||
| [  341.696860] [<c017309c>] (run_timer_softirq) from [<c01021e8>] (__do_softirq+0x120/0x2b0) |  | ||||||
| [  341.705066] [<c01021e8>] (__do_softirq) from [<c011c188>] (irq_exit+0x78/0x84) |  | ||||||
| [  341.712317] [<c011c188>] (irq_exit) from [<c015f0f8>] (__handle_domain_irq+0x60/0xb4) |  | ||||||
| [  341.720179] [<c015f0f8>] (__handle_domain_irq) from [<c037c584>] (gic_handle_irq+0x4c/0x90) |  | ||||||
| [  341.728549] [<c037c584>] (gic_handle_irq) from [<c0101a8c>] (__irq_svc+0x6c/0x90) |  | ||||||
|  |  | ||||||
| Fixes: 20f2c5fa3af0 ("brcmfmac: add initial support for monitor mode") |  | ||||||
| Signed-off-by: Rafał Miłecki <rafal@milecki.pl> |  | ||||||
| --- |  | ||||||
|  drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c | 9 +++++++++ |  | ||||||
|  1 file changed, 9 insertions(+) |  | ||||||
|  |  | ||||||
| --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c |  | ||||||
| +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c |  | ||||||
| @@ -746,9 +746,18 @@ static int brcmf_net_mon_stop(struct net |  | ||||||
|  	return err; |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| +static netdev_tx_t brcmf_net_mon_start_xmit(struct sk_buff *skb, |  | ||||||
| +					    struct net_device *ndev) |  | ||||||
| +{ |  | ||||||
| +	dev_kfree_skb_any(skb); |  | ||||||
| + |  | ||||||
| +	return NETDEV_TX_OK; |  | ||||||
| +} |  | ||||||
| + |  | ||||||
|  static const struct net_device_ops brcmf_netdev_ops_mon = { |  | ||||||
|  	.ndo_open = brcmf_net_mon_open, |  | ||||||
|  	.ndo_stop = brcmf_net_mon_stop, |  | ||||||
| +	.ndo_start_xmit = brcmf_net_mon_start_xmit, |  | ||||||
|  }; |  | ||||||
|   |  | ||||||
|  int brcmf_net_mon_attach(struct brcmf_if *ifp) |  | ||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/local-symbols | --- a/local-symbols | ||||||
| +++ b/local-symbols | +++ b/local-symbols | ||||||
| @@ -416,43 +416,6 @@ USB_SIERRA_NET= | @@ -417,43 +417,6 @@ USB_SIERRA_NET= | ||||||
|  USB_VL600= |  USB_VL600= | ||||||
|  USB_NET_CH9200= |  USB_NET_CH9200= | ||||||
|  USB_NET_AQC111= |  USB_NET_AQC111= | ||||||
| @@ -192,7 +192,7 @@ | |||||||
|  	select BRCMUTIL |  	select BRCMUTIL | ||||||
| --- a/Kconfig.local | --- a/Kconfig.local | ||||||
| +++ b/Kconfig.local | +++ b/Kconfig.local | ||||||
| @@ -1252,117 +1252,6 @@ config BACKPORTED_USB_NET_CH9200 | @@ -1255,117 +1255,6 @@ config BACKPORTED_USB_NET_CH9200 | ||||||
|  config BACKPORTED_USB_NET_AQC111 |  config BACKPORTED_USB_NET_AQC111 | ||||||
|  	tristate |  	tristate | ||||||
|  	default USB_NET_AQC111 |  	default USB_NET_AQC111 | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/local-symbols | --- a/local-symbols | ||||||
| +++ b/local-symbols | +++ b/local-symbols | ||||||
| @@ -317,6 +317,7 @@ RT2X00_LIB_FIRMWARE= | @@ -318,6 +318,7 @@ RT2X00_LIB_FIRMWARE= | ||||||
|  RT2X00_LIB_CRYPTO= |  RT2X00_LIB_CRYPTO= | ||||||
|  RT2X00_LIB_LEDS= |  RT2X00_LIB_LEDS= | ||||||
|  RT2X00_LIB_DEBUGFS= |  RT2X00_LIB_DEBUGFS= | ||||||
|   | |||||||
| @@ -687,7 +687,7 @@ | |||||||
|  #endif /* AES_GMAC_H */ |  #endif /* AES_GMAC_H */ | ||||||
| --- a/net/mac80211/key.h | --- a/net/mac80211/key.h | ||||||
| +++ b/net/mac80211/key.h | +++ b/net/mac80211/key.h | ||||||
| @@ -88,7 +88,7 @@ struct ieee80211_key { | @@ -89,7 +89,7 @@ struct ieee80211_key { | ||||||
|  			 * Management frames. |  			 * Management frames. | ||||||
|  			 */ |  			 */ | ||||||
|  			u8 rx_pn[IEEE80211_NUM_TIDS + 1][IEEE80211_CCMP_PN_LEN]; |  			u8 rx_pn[IEEE80211_NUM_TIDS + 1][IEEE80211_CCMP_PN_LEN]; | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ Used for AP+STA support in OpenWrt - preserve AP mode keys across STA reconnects | |||||||
|  |  | ||||||
| --- a/net/mac80211/cfg.c | --- a/net/mac80211/cfg.c | ||||||
| +++ b/net/mac80211/cfg.c | +++ b/net/mac80211/cfg.c | ||||||
| @@ -1172,7 +1172,6 @@ static int ieee80211_stop_ap(struct wiph | @@ -1186,7 +1186,6 @@ static int ieee80211_stop_ap(struct wiph | ||||||
|  	sdata->vif.bss_conf.ftmr_params = NULL; |  	sdata->vif.bss_conf.ftmr_params = NULL; | ||||||
|   |   | ||||||
|  	__sta_info_flush(sdata, true); |  	__sta_info_flush(sdata, true); | ||||||
|   | |||||||
| @@ -21,7 +21,7 @@ Disable FILS support, since it pulls in crypto hash support | |||||||
|   * FILS AEAD for (Re)Association Request/Response frames |   * FILS AEAD for (Re)Association Request/Response frames | ||||||
| --- a/net/mac80211/main.c | --- a/net/mac80211/main.c | ||||||
| +++ b/net/mac80211/main.c | +++ b/net/mac80211/main.c | ||||||
| @@ -571,7 +571,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_ | @@ -586,7 +586,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_ | ||||||
|  			   NL80211_FEATURE_MAC_ON_CREATE | |  			   NL80211_FEATURE_MAC_ON_CREATE | | ||||||
|  			   NL80211_FEATURE_USERSPACE_MPM | |  			   NL80211_FEATURE_USERSPACE_MPM | | ||||||
|  			   NL80211_FEATURE_FULL_AP_CLIENT_STATE; |  			   NL80211_FEATURE_FULL_AP_CLIENT_STATE; | ||||||
|   | |||||||
| @@ -11,14 +11,13 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  |  | ||||||
| --- a/net/mac80211/aes_cmac.c | --- a/net/mac80211/aes_cmac.c | ||||||
| +++ b/net/mac80211/aes_cmac.c | +++ b/net/mac80211/aes_cmac.c | ||||||
| @@ -19,50 +19,126 @@ | @@ -19,67 +19,151 @@ | ||||||
|  #define CMAC_TLEN_256 16 /* CMAC TLen = 128 bits (16 octets) */ |  #define CMAC_TLEN_256 16 /* CMAC TLen = 128 bits (16 octets) */ | ||||||
|  #define AAD_LEN 20 |  #define AAD_LEN 20 | ||||||
|   |   | ||||||
| -static const u8 zero[CMAC_TLEN_256]; | -static const u8 zero[CMAC_TLEN_256]; | ||||||
|   |   | ||||||
| -void ieee80211_aes_cmac(struct crypto_shash *tfm, const u8 *aad, | -void ieee80211_aes_cmac(struct crypto_shash *tfm, const u8 *aad, | ||||||
| -			const u8 *data, size_t data_len, u8 *mic) |  | ||||||
| +void gf_mulx(u8 *pad) | +void gf_mulx(u8 *pad) | ||||||
| +{ | +{ | ||||||
| +	int i, carry; | +	int i, carry; | ||||||
| @@ -34,9 +33,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| +void aes_cmac_vector(struct crypto_cipher *tfm, size_t num_elem, | +void aes_cmac_vector(struct crypto_cipher *tfm, size_t num_elem, | ||||||
| +		     const u8 *addr[], const size_t *len, u8 *mac, | +		     const u8 *addr[], const size_t *len, u8 *mac, | ||||||
| +		     size_t mac_len) | +		     size_t mac_len) | ||||||
|  { | +{ | ||||||
| -	SHASH_DESC_ON_STACK(desc, tfm); |  | ||||||
| -	u8 out[AES_BLOCK_SIZE]; |  | ||||||
| +	u8 cbc[AES_BLOCK_SIZE], pad[AES_BLOCK_SIZE]; | +	u8 cbc[AES_BLOCK_SIZE], pad[AES_BLOCK_SIZE]; | ||||||
| +	const u8 *pos, *end; | +	const u8 *pos, *end; | ||||||
| +	size_t i, e, left, total_len; | +	size_t i, e, left, total_len; | ||||||
| @@ -88,57 +85,91 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
| +	crypto_cipher_encrypt_one(tfm, pad, pad); | +	crypto_cipher_encrypt_one(tfm, pad, pad); | ||||||
| +	memcpy(mac, pad, mac_len); | +	memcpy(mac, pad, mac_len); | ||||||
| +} | +} | ||||||
|  | + | ||||||
|  | + | ||||||
|  | +void ieee80211_aes_cmac(struct crypto_cipher *tfm, const u8 *aad, | ||||||
|  |  			const u8 *data, size_t data_len, u8 *mic) | ||||||
|  |  { | ||||||
|  | -	SHASH_DESC_ON_STACK(desc, tfm); | ||||||
|  | -	u8 out[AES_BLOCK_SIZE]; | ||||||
|  | +	const u8 *addr[4]; | ||||||
|  | +	size_t len[4]; | ||||||
|  | +	u8 zero[CMAC_TLEN]; | ||||||
|  |  	const __le16 *fc; | ||||||
|   |   | ||||||
| -	desc->tfm = tfm; | -	desc->tfm = tfm; | ||||||
|   | - | ||||||
| -	crypto_shash_init(desc); | -	crypto_shash_init(desc); | ||||||
| -	crypto_shash_update(desc, aad, AAD_LEN); | -	crypto_shash_update(desc, aad, AAD_LEN); | ||||||
| -	crypto_shash_update(desc, data, data_len - CMAC_TLEN); |  | ||||||
| -	crypto_shash_finup(desc, zero, CMAC_TLEN, out); |  | ||||||
| +void ieee80211_aes_cmac(struct crypto_cipher *tfm, const u8 *aad, |  | ||||||
| +			const u8 *data, size_t data_len, u8 *mic) |  | ||||||
| +{ |  | ||||||
| +	const u8 *addr[3]; |  | ||||||
| +	size_t len[3]; |  | ||||||
| +	u8 zero[CMAC_TLEN]; |  | ||||||
| + |  | ||||||
| +	memset(zero, 0, CMAC_TLEN); | +	memset(zero, 0, CMAC_TLEN); | ||||||
| +	addr[0] = aad; | +	addr[0] = aad; | ||||||
| +	len[0] = AAD_LEN; | +	len[0] = AAD_LEN; | ||||||
|  |  	fc = (const __le16 *)aad; | ||||||
|  |  	if (ieee80211_is_beacon(*fc)) { | ||||||
|  |  		/* mask Timestamp field to zero */ | ||||||
|  | -		crypto_shash_update(desc, zero, 8); | ||||||
|  | -		crypto_shash_update(desc, data + 8, data_len - 8 - CMAC_TLEN); | ||||||
|  | +		addr[1] = zero; | ||||||
|  | +		len[1] = 8; | ||||||
|  | +		addr[2] = data + 8; | ||||||
|  | +		len[2] = data_len - 8 - CMAC_TLEN; | ||||||
|  | +		addr[3] = zero; | ||||||
|  | +		len[3] = CMAC_TLEN; | ||||||
|  | +		aes_cmac_vector(tfm, 4, addr, len, mic, CMAC_TLEN); | ||||||
|  |  	} else { | ||||||
|  | -		crypto_shash_update(desc, data, data_len - CMAC_TLEN); | ||||||
| +		addr[1] = data; | +		addr[1] = data; | ||||||
| +		len[1] = data_len - CMAC_TLEN; | +		len[1] = data_len - CMAC_TLEN; | ||||||
| +		addr[2] = zero; | +		addr[2] = zero; | ||||||
| +		len[2] = CMAC_TLEN; | +		len[2] = CMAC_TLEN; | ||||||
|   |  | ||||||
| -	memcpy(mic, out, CMAC_TLEN); |  | ||||||
| +		aes_cmac_vector(tfm, 3, addr, len, mic, CMAC_TLEN); | +		aes_cmac_vector(tfm, 3, addr, len, mic, CMAC_TLEN); | ||||||
|  	} |  	} | ||||||
|  | -	crypto_shash_finup(desc, zero, CMAC_TLEN, out); | ||||||
|  | - | ||||||
|  | -	memcpy(mic, out, CMAC_TLEN); | ||||||
|  |  } | ||||||
|   |   | ||||||
| -void ieee80211_aes_cmac_256(struct crypto_shash *tfm, const u8 *aad, | -void ieee80211_aes_cmac_256(struct crypto_shash *tfm, const u8 *aad, | ||||||
| +void ieee80211_aes_cmac_256(struct crypto_cipher *tfm, const u8 *aad, | +void ieee80211_aes_cmac_256(struct crypto_cipher *tfm, const u8 *aad, | ||||||
|  			    const u8 *data, size_t data_len, u8 *mic) |  			    const u8 *data, size_t data_len, u8 *mic) | ||||||
|  { |  { | ||||||
| -	SHASH_DESC_ON_STACK(desc, tfm); | -	SHASH_DESC_ON_STACK(desc, tfm); | ||||||
| +	const u8 *addr[3]; | +	const u8 *addr[4]; | ||||||
| +	size_t len[3]; | +	size_t len[4]; | ||||||
| +	u8 zero[CMAC_TLEN_256]; | +	u8 zero[CMAC_TLEN_256]; | ||||||
| + |  	const __le16 *fc; | ||||||
| +	memset(zero, 0, CMAC_TLEN_256); |  | ||||||
| +	addr[0] = aad; |  | ||||||
| +	len[0] = AAD_LEN; |  | ||||||
| +	addr[1] = data; |  | ||||||
| +	len[1] = data_len - CMAC_TLEN_256; |  | ||||||
| +	addr[2] = zero; |  | ||||||
| +	len[2] = CMAC_TLEN_256; |  | ||||||
|   |   | ||||||
| -	desc->tfm = tfm; | -	desc->tfm = tfm; | ||||||
| - | - | ||||||
| -	crypto_shash_init(desc); | -	crypto_shash_init(desc); | ||||||
| -	crypto_shash_update(desc, aad, AAD_LEN); | -	crypto_shash_update(desc, aad, AAD_LEN); | ||||||
|  | +	memset(zero, 0, CMAC_TLEN_256); | ||||||
|  | +	addr[0] = aad; | ||||||
|  | +	len[0] = AAD_LEN; | ||||||
|  | +	addr[1] = data; | ||||||
|  |  	fc = (const __le16 *)aad; | ||||||
|  |  	if (ieee80211_is_beacon(*fc)) { | ||||||
|  |  		/* mask Timestamp field to zero */ | ||||||
|  | -		crypto_shash_update(desc, zero, 8); | ||||||
|  | -		crypto_shash_update(desc, data + 8, | ||||||
|  | -				    data_len - 8 - CMAC_TLEN_256); | ||||||
|  | +		addr[1] = zero; | ||||||
|  | +		len[1] = 8; | ||||||
|  | +		addr[2] = data + 8; | ||||||
|  | +		len[2] = data_len - 8 - CMAC_TLEN_256; | ||||||
|  | +		addr[3] = zero; | ||||||
|  | +		len[3] = CMAC_TLEN_256; | ||||||
|  | +		aes_cmac_vector(tfm, 4, addr, len, mic, CMAC_TLEN_256); | ||||||
|  |  	} else { | ||||||
| -		crypto_shash_update(desc, data, data_len - CMAC_TLEN_256); | -		crypto_shash_update(desc, data, data_len - CMAC_TLEN_256); | ||||||
| -	crypto_shash_finup(desc, zero, CMAC_TLEN_256, mic); | +		addr[1] = data; | ||||||
|  | +		len[1] = data_len - CMAC_TLEN_256; | ||||||
|  | +		addr[2] = zero; | ||||||
|  | +		len[2] = CMAC_TLEN_256; | ||||||
| +		aes_cmac_vector(tfm, 3, addr, len, mic, CMAC_TLEN_256); | +		aes_cmac_vector(tfm, 3, addr, len, mic, CMAC_TLEN_256); | ||||||
|  	} |  	} | ||||||
|  | -	crypto_shash_finup(desc, zero, CMAC_TLEN_256, mic); | ||||||
|  |  } | ||||||
|   |   | ||||||
| -struct crypto_shash *ieee80211_aes_cmac_key_setup(const u8 key[], | -struct crypto_shash *ieee80211_aes_cmac_key_setup(const u8 key[], | ||||||
| -						  size_t key_len) | -						  size_t key_len) | ||||||
| @@ -188,7 +219,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  #endif /* AES_CMAC_H */ |  #endif /* AES_CMAC_H */ | ||||||
| --- a/net/mac80211/key.h | --- a/net/mac80211/key.h | ||||||
| +++ b/net/mac80211/key.h | +++ b/net/mac80211/key.h | ||||||
| @@ -93,7 +93,7 @@ struct ieee80211_key { | @@ -94,7 +94,7 @@ struct ieee80211_key { | ||||||
|  		} ccmp; |  		} ccmp; | ||||||
|  		struct { |  		struct { | ||||||
|  			u8 rx_pn[IEEE80211_CMAC_PN_LEN]; |  			u8 rx_pn[IEEE80211_CMAC_PN_LEN]; | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/net/mac80211/tx.c | --- a/net/mac80211/tx.c | ||||||
| +++ b/net/mac80211/tx.c | +++ b/net/mac80211/tx.c | ||||||
| @@ -4113,6 +4113,12 @@ out: | @@ -4119,6 +4119,12 @@ out: | ||||||
|  netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb, |  netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb, | ||||||
|  				       struct net_device *dev) |  				       struct net_device *dev) | ||||||
|  { |  { | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/net/mac80211/main.c | --- a/net/mac80211/main.c | ||||||
| +++ b/net/mac80211/main.c | +++ b/net/mac80211/main.c | ||||||
| @@ -314,7 +314,7 @@ void ieee80211_restart_hw(struct ieee802 | @@ -316,7 +316,7 @@ void ieee80211_restart_hw(struct ieee802 | ||||||
|  } |  } | ||||||
|  EXPORT_SYMBOL(ieee80211_restart_hw); |  EXPORT_SYMBOL(ieee80211_restart_hw); | ||||||
|   |   | ||||||
| @@ -9,7 +9,7 @@ | |||||||
|  static int ieee80211_ifa_changed(struct notifier_block *nb, |  static int ieee80211_ifa_changed(struct notifier_block *nb, | ||||||
|  				 unsigned long data, void *arg) |  				 unsigned long data, void *arg) | ||||||
|  { |  { | ||||||
| @@ -373,7 +373,7 @@ static int ieee80211_ifa_changed(struct | @@ -375,7 +375,7 @@ static int ieee80211_ifa_changed(struct | ||||||
|  } |  } | ||||||
|  #endif |  #endif | ||||||
|   |   | ||||||
| @@ -18,7 +18,7 @@ | |||||||
|  static int ieee80211_ifa6_changed(struct notifier_block *nb, |  static int ieee80211_ifa6_changed(struct notifier_block *nb, | ||||||
|  				  unsigned long data, void *arg) |  				  unsigned long data, void *arg) | ||||||
|  { |  { | ||||||
| @@ -1273,14 +1273,14 @@ int ieee80211_register_hw(struct ieee802 | @@ -1292,14 +1292,14 @@ int ieee80211_register_hw(struct ieee802 | ||||||
|   |   | ||||||
|  	rtnl_unlock(); |  	rtnl_unlock(); | ||||||
|   |   | ||||||
| @@ -35,7 +35,7 @@ | |||||||
|  	local->ifa6_notifier.notifier_call = ieee80211_ifa6_changed; |  	local->ifa6_notifier.notifier_call = ieee80211_ifa6_changed; | ||||||
|  	result = register_inet6addr_notifier(&local->ifa6_notifier); |  	result = register_inet6addr_notifier(&local->ifa6_notifier); | ||||||
|  	if (result) |  	if (result) | ||||||
| @@ -1289,13 +1289,13 @@ int ieee80211_register_hw(struct ieee802 | @@ -1308,13 +1308,13 @@ int ieee80211_register_hw(struct ieee802 | ||||||
|   |   | ||||||
|  	return 0; |  	return 0; | ||||||
|   |   | ||||||
| @@ -52,7 +52,7 @@ | |||||||
|   fail_ifa: |   fail_ifa: | ||||||
|  #endif |  #endif | ||||||
|  	wiphy_unregister(local->hw.wiphy); |  	wiphy_unregister(local->hw.wiphy); | ||||||
| @@ -1323,10 +1323,10 @@ void ieee80211_unregister_hw(struct ieee | @@ -1342,10 +1342,10 @@ void ieee80211_unregister_hw(struct ieee | ||||||
|  	tasklet_kill(&local->tx_pending_tasklet); |  	tasklet_kill(&local->tx_pending_tasklet); | ||||||
|  	tasklet_kill(&local->tasklet); |  	tasklet_kill(&local->tasklet); | ||||||
|   |   | ||||||
|   | |||||||
| @@ -24,7 +24,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  |  | ||||||
| --- a/net/mac80211/ieee80211_i.h | --- a/net/mac80211/ieee80211_i.h | ||||||
| +++ b/net/mac80211/ieee80211_i.h | +++ b/net/mac80211/ieee80211_i.h | ||||||
| @@ -1786,6 +1786,9 @@ int ieee80211_tx_control_port(struct wip | @@ -1801,6 +1801,9 @@ int ieee80211_tx_control_port(struct wip | ||||||
|  			      const u8 *dest, __be16 proto, bool unencrypted); |  			      const u8 *dest, __be16 proto, bool unencrypted); | ||||||
|  int ieee80211_probe_mesh_link(struct wiphy *wiphy, struct net_device *dev, |  int ieee80211_probe_mesh_link(struct wiphy *wiphy, struct net_device *dev, | ||||||
|  			      const u8 *buf, size_t len); |  			      const u8 *buf, size_t len); | ||||||
| @@ -36,7 +36,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata, |  void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata, | ||||||
| --- a/net/mac80211/status.c | --- a/net/mac80211/status.c | ||||||
| +++ b/net/mac80211/status.c | +++ b/net/mac80211/status.c | ||||||
| @@ -829,6 +829,11 @@ void ieee80211_tx_monitor(struct ieee802 | @@ -828,6 +828,11 @@ void ieee80211_tx_monitor(struct ieee802 | ||||||
|  	struct net_device *prev_dev = NULL; |  	struct net_device *prev_dev = NULL; | ||||||
|  	int rtap_len; |  	int rtap_len; | ||||||
|   |   | ||||||
| @@ -50,7 +50,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	if (WARN_ON_ONCE(skb_headroom(skb) < rtap_len)) { |  	if (WARN_ON_ONCE(skb_headroom(skb) < rtap_len)) { | ||||||
| --- a/net/mac80211/tx.c | --- a/net/mac80211/tx.c | ||||||
| +++ b/net/mac80211/tx.c | +++ b/net/mac80211/tx.c | ||||||
| @@ -1936,37 +1936,53 @@ static bool ieee80211_tx(struct ieee8021 | @@ -1937,37 +1937,53 @@ static bool ieee80211_tx(struct ieee8021 | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  /* device xmit handlers */ |  /* device xmit handlers */ | ||||||
| @@ -123,7 +123,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  		wiphy_debug(local->hw.wiphy, |  		wiphy_debug(local->hw.wiphy, | ||||||
|  			    "failed to reallocate TX buffer\n"); |  			    "failed to reallocate TX buffer\n"); | ||||||
|  		return -ENOMEM; |  		return -ENOMEM; | ||||||
| @@ -1982,18 +1998,8 @@ void ieee80211_xmit(struct ieee80211_sub | @@ -1983,18 +1999,8 @@ void ieee80211_xmit(struct ieee80211_sub | ||||||
|  	struct ieee80211_local *local = sdata->local; |  	struct ieee80211_local *local = sdata->local; | ||||||
|  	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); |  	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); | ||||||
|  	struct ieee80211_hdr *hdr; |  	struct ieee80211_hdr *hdr; | ||||||
| @@ -143,7 +143,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  		ieee80211_free_txskb(&local->hw, skb); |  		ieee80211_free_txskb(&local->hw, skb); | ||||||
|  		return; |  		return; | ||||||
|  	} |  	} | ||||||
| @@ -2795,29 +2801,13 @@ static struct sk_buff *ieee80211_build_h | @@ -2796,29 +2802,13 @@ static struct sk_buff *ieee80211_build_h | ||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	skb_pull(skb, skip_header_bytes); |  	skb_pull(skb, skip_header_bytes); | ||||||
| @@ -179,7 +179,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	} |  	} | ||||||
|   |   | ||||||
|  	if (encaps_data) |  	if (encaps_data) | ||||||
| @@ -3432,7 +3422,6 @@ static bool ieee80211_xmit_fast(struct i | @@ -3433,7 +3423,6 @@ static bool ieee80211_xmit_fast(struct i | ||||||
|  	struct ieee80211_local *local = sdata->local; |  	struct ieee80211_local *local = sdata->local; | ||||||
|  	u16 ethertype = (skb->data[12] << 8) | skb->data[13]; |  	u16 ethertype = (skb->data[12] << 8) | skb->data[13]; | ||||||
|  	int extra_head = fast_tx->hdr_len - (ETH_HLEN - 2); |  	int extra_head = fast_tx->hdr_len - (ETH_HLEN - 2); | ||||||
| @@ -187,7 +187,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> | |||||||
|  	struct ethhdr eth; |  	struct ethhdr eth; | ||||||
|  	struct ieee80211_tx_info *info; |  	struct ieee80211_tx_info *info; | ||||||
|  	struct ieee80211_hdr *hdr = (void *)fast_tx->hdr; |  	struct ieee80211_hdr *hdr = (void *)fast_tx->hdr; | ||||||
| @@ -3484,10 +3473,7 @@ static bool ieee80211_xmit_fast(struct i | @@ -3485,10 +3474,7 @@ static bool ieee80211_xmit_fast(struct i | ||||||
|  	 * as the may-encrypt argument for the resize to not account for |  	 * as the may-encrypt argument for the resize to not account for | ||||||
|  	 * more room than we already have in 'extra_head' |  	 * more room than we already have in 'extra_head' | ||||||
|  	 */ |  	 */ | ||||||
|   | |||||||
| @@ -28,7 +28,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> | |||||||
|  |  | ||||||
| --- a/net/mac80211/sta_info.c | --- a/net/mac80211/sta_info.c | ||||||
| +++ b/net/mac80211/sta_info.c | +++ b/net/mac80211/sta_info.c | ||||||
| @@ -338,6 +338,7 @@ struct sta_info *sta_info_alloc(struct i | @@ -339,6 +339,7 @@ struct sta_info *sta_info_alloc(struct i | ||||||
|  	INIT_WORK(&sta->drv_deliver_wk, sta_deliver_ps_frames); |  	INIT_WORK(&sta->drv_deliver_wk, sta_deliver_ps_frames); | ||||||
|  	INIT_WORK(&sta->ampdu_mlme.work, ieee80211_ba_session_work); |  	INIT_WORK(&sta->ampdu_mlme.work, ieee80211_ba_session_work); | ||||||
|  	mutex_init(&sta->ampdu_mlme.mtx); |  	mutex_init(&sta->ampdu_mlme.mtx); | ||||||
|   | |||||||
| @@ -1,82 +0,0 @@ | |||||||
| From: Markus Theil <markus.theil@tu-ilmenau.de> |  | ||||||
| Date: Wed, 18 Dec 2019 15:27:36 +0100 |  | ||||||
| Subject: [PATCH] mac80211: fix tx status for no ack cases |  | ||||||
|  |  | ||||||
| Before this patch, frames which where successfully transmitted without |  | ||||||
| requiring acks where accounted as lost frames. |  | ||||||
|  |  | ||||||
| Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de> |  | ||||||
| Link: https://lore.kernel.org/r/20191218142736.15843-1-markus.theil@tu-ilmenau.de |  | ||||||
| Signed-off-by: Johannes Berg <johannes.berg@intel.com> |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| --- a/net/mac80211/status.c |  | ||||||
| +++ b/net/mac80211/status.c |  | ||||||
| @@ -895,6 +895,7 @@ static void __ieee80211_tx_status(struct |  | ||||||
|  	int rates_idx; |  | ||||||
|  	bool send_to_cooked; |  | ||||||
|  	bool acked; |  | ||||||
| +	bool noack_success; |  | ||||||
|  	struct ieee80211_bar *bar; |  | ||||||
|  	int shift = 0; |  | ||||||
|  	int tid = IEEE80211_NUM_TIDS; |  | ||||||
| @@ -913,6 +914,8 @@ static void __ieee80211_tx_status(struct |  | ||||||
|  			clear_sta_flag(sta, WLAN_STA_SP); |  | ||||||
|   |  | ||||||
|  		acked = !!(info->flags & IEEE80211_TX_STAT_ACK); |  | ||||||
| +		noack_success = !!(info->flags & |  | ||||||
| +				   IEEE80211_TX_STAT_NOACK_TRANSMITTED); |  | ||||||
|   |  | ||||||
|  		/* mesh Peer Service Period support */ |  | ||||||
|  		if (ieee80211_vif_is_mesh(&sta->sdata->vif) && |  | ||||||
| @@ -977,12 +980,12 @@ static void __ieee80211_tx_status(struct |  | ||||||
|  			ieee80211_handle_filtered_frame(local, sta, skb); |  | ||||||
|  			return; |  | ||||||
|  		} else { |  | ||||||
| -			if (!acked) |  | ||||||
| +			if (!acked && !noack_success) |  | ||||||
|  				sta->status_stats.retry_failed++; |  | ||||||
|  			sta->status_stats.retry_count += retry_count; |  | ||||||
|   |  | ||||||
|  			if (ieee80211_is_data_present(fc)) { |  | ||||||
| -				if (!acked) |  | ||||||
| +				if (!acked && !noack_success) |  | ||||||
|  					sta->status_stats.msdu_failed[tid]++; |  | ||||||
|   |  | ||||||
|  				sta->status_stats.msdu_retries[tid] += |  | ||||||
| @@ -1020,7 +1023,7 @@ static void __ieee80211_tx_status(struct |  | ||||||
|  		} |  | ||||||
|   |  | ||||||
|  		if (ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) { |  | ||||||
| -			if (info->flags & IEEE80211_TX_STAT_ACK) { |  | ||||||
| +			if (acked) { |  | ||||||
|  				if (sta->status_stats.lost_packets) |  | ||||||
|  					sta->status_stats.lost_packets = 0; |  | ||||||
|   |  | ||||||
| @@ -1028,6 +1031,8 @@ static void __ieee80211_tx_status(struct |  | ||||||
|  				if (test_sta_flag(sta, WLAN_STA_TDLS_PEER_AUTH)) |  | ||||||
|  					sta->status_stats.last_tdls_pkt_time = |  | ||||||
|  						jiffies; |  | ||||||
| +			} else if (noack_success) { |  | ||||||
| +				/* nothing to do here, do not account as lost */ |  | ||||||
|  			} else { |  | ||||||
|  				ieee80211_lost_packet(sta, info); |  | ||||||
|  			} |  | ||||||
| @@ -1148,7 +1153,7 @@ void ieee80211_tx_status_ext(struct ieee |  | ||||||
|   |  | ||||||
|  		sta = container_of(pubsta, struct sta_info, sta); |  | ||||||
|   |  | ||||||
| -		if (!acked) |  | ||||||
| +		if (!acked && !noack_success) |  | ||||||
|  			sta->status_stats.retry_failed++; |  | ||||||
|  		sta->status_stats.retry_count += retry_count; |  | ||||||
|   |  | ||||||
| @@ -1163,6 +1168,8 @@ void ieee80211_tx_status_ext(struct ieee |  | ||||||
|  				sta->status_stats.last_tdls_pkt_time = jiffies; |  | ||||||
|  		} else if (test_sta_flag(sta, WLAN_STA_PS_STA)) { |  | ||||||
|  			return; |  | ||||||
| +		} else if (noack_success) { |  | ||||||
| +			/* nothing to do here, do not account as lost */ |  | ||||||
|  		} else { |  | ||||||
|  			ieee80211_lost_packet(sta, info); |  | ||||||
|  		} |  | ||||||
| @@ -1,6 +1,6 @@ | |||||||
| --- a/include/net/cfg80211.h | --- a/include/net/cfg80211.h | ||||||
| +++ b/include/net/cfg80211.h | +++ b/include/net/cfg80211.h | ||||||
| @@ -3458,6 +3458,7 @@ struct cfg80211_update_owe_info { | @@ -3552,6 +3552,7 @@ struct cfg80211_update_owe_info { | ||||||
|   *	(as advertised by the nl80211 feature flag.) |   *	(as advertised by the nl80211 feature flag.) | ||||||
|   * @get_tx_power: store the current TX power into the dbm variable; |   * @get_tx_power: store the current TX power into the dbm variable; | ||||||
|   *	return 0 if successful |   *	return 0 if successful | ||||||
| @@ -8,7 +8,7 @@ | |||||||
|   * |   * | ||||||
|   * @set_wds_peer: set the WDS peer for a WDS interface |   * @set_wds_peer: set the WDS peer for a WDS interface | ||||||
|   * |   * | ||||||
| @@ -3773,6 +3774,7 @@ struct cfg80211_ops { | @@ -3874,6 +3875,7 @@ struct cfg80211_ops { | ||||||
|  				enum nl80211_tx_power_setting type, int mbm); |  				enum nl80211_tx_power_setting type, int mbm); | ||||||
|  	int	(*get_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev, |  	int	(*get_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev, | ||||||
|  				int *dbm); |  				int *dbm); | ||||||
| @@ -18,7 +18,7 @@ | |||||||
|  				const u8 *addr); |  				const u8 *addr); | ||||||
| --- a/include/net/mac80211.h | --- a/include/net/mac80211.h | ||||||
| +++ b/include/net/mac80211.h | +++ b/include/net/mac80211.h | ||||||
| @@ -1501,6 +1501,7 @@ enum ieee80211_smps_mode { | @@ -1504,6 +1504,7 @@ enum ieee80211_smps_mode { | ||||||
|   * |   * | ||||||
|   * @power_level: requested transmit power (in dBm), backward compatibility |   * @power_level: requested transmit power (in dBm), backward compatibility | ||||||
|   *	value only that is set to the minimum of all interfaces |   *	value only that is set to the minimum of all interfaces | ||||||
| @@ -26,7 +26,7 @@ | |||||||
|   * |   * | ||||||
|   * @chandef: the channel definition to tune to |   * @chandef: the channel definition to tune to | ||||||
|   * @radar_enabled: whether radar detection is enabled |   * @radar_enabled: whether radar detection is enabled | ||||||
| @@ -1521,6 +1522,7 @@ enum ieee80211_smps_mode { | @@ -1524,6 +1525,7 @@ enum ieee80211_smps_mode { | ||||||
|  struct ieee80211_conf { |  struct ieee80211_conf { | ||||||
|  	u32 flags; |  	u32 flags; | ||||||
|  	int power_level, dynamic_ps_timeout; |  	int power_level, dynamic_ps_timeout; | ||||||
| @@ -36,9 +36,9 @@ | |||||||
|  	u8 ps_dtim_period; |  	u8 ps_dtim_period; | ||||||
| --- a/include/uapi/linux/nl80211.h | --- a/include/uapi/linux/nl80211.h | ||||||
| +++ b/include/uapi/linux/nl80211.h | +++ b/include/uapi/linux/nl80211.h | ||||||
| @@ -2400,6 +2400,9 @@ enum nl80211_commands { | @@ -2470,6 +2470,9 @@ enum nl80211_commands { | ||||||
|   * @NL80211_ATTR_VLAN_ID: VLAN ID (1..4094) for the station and VLAN group key |   *	no roaming occurs between the reauth threshold and PMK expiration, | ||||||
|   *	(u16). |   *	disassociation is still forced. | ||||||
|   * |   * | ||||||
| + * @NL80211_ATTR_WIPHY_ANTENNA_GAIN: Configured antenna gain. Used to reduce | + * @NL80211_ATTR_WIPHY_ANTENNA_GAIN: Configured antenna gain. Used to reduce | ||||||
| + *	transmit power to stay within regulatory limits. u32, dBi. | + *	transmit power to stay within regulatory limits. u32, dBi. | ||||||
| @@ -46,9 +46,9 @@ | |||||||
|   * @NUM_NL80211_ATTR: total number of nl80211_attrs available |   * @NUM_NL80211_ATTR: total number of nl80211_attrs available | ||||||
|   * @NL80211_ATTR_MAX: highest attribute number currently defined |   * @NL80211_ATTR_MAX: highest attribute number currently defined | ||||||
|   * @__NL80211_ATTR_AFTER_LAST: internal use |   * @__NL80211_ATTR_AFTER_LAST: internal use | ||||||
| @@ -2864,6 +2867,8 @@ enum nl80211_attrs { | @@ -2945,6 +2948,8 @@ enum nl80211_attrs { | ||||||
|   |  	NL80211_ATTR_PMK_LIFETIME, | ||||||
|  	NL80211_ATTR_VLAN_ID, |  	NL80211_ATTR_PMK_REAUTH_THRESHOLD, | ||||||
|   |   | ||||||
| +	NL80211_ATTR_WIPHY_ANTENNA_GAIN, | +	NL80211_ATTR_WIPHY_ANTENNA_GAIN, | ||||||
| + | + | ||||||
| @@ -77,7 +77,7 @@ | |||||||
|  static int ieee80211_set_wds_peer(struct wiphy *wiphy, struct net_device *dev, |  static int ieee80211_set_wds_peer(struct wiphy *wiphy, struct net_device *dev, | ||||||
|  				  const u8 *addr) |  				  const u8 *addr) | ||||||
|  { |  { | ||||||
| @@ -4017,6 +4030,7 @@ const struct cfg80211_ops mac80211_confi | @@ -4004,6 +4017,7 @@ const struct cfg80211_ops mac80211_confi | ||||||
|  	.set_wiphy_params = ieee80211_set_wiphy_params, |  	.set_wiphy_params = ieee80211_set_wiphy_params, | ||||||
|  	.set_tx_power = ieee80211_set_tx_power, |  	.set_tx_power = ieee80211_set_tx_power, | ||||||
|  	.get_tx_power = ieee80211_get_tx_power, |  	.get_tx_power = ieee80211_get_tx_power, | ||||||
| @@ -87,7 +87,7 @@ | |||||||
|  	CFG80211_TESTMODE_CMD(ieee80211_testmode_cmd) |  	CFG80211_TESTMODE_CMD(ieee80211_testmode_cmd) | ||||||
| --- a/net/mac80211/ieee80211_i.h | --- a/net/mac80211/ieee80211_i.h | ||||||
| +++ b/net/mac80211/ieee80211_i.h | +++ b/net/mac80211/ieee80211_i.h | ||||||
| @@ -1376,6 +1376,7 @@ struct ieee80211_local { | @@ -1380,6 +1380,7 @@ struct ieee80211_local { | ||||||
|  	int dynamic_ps_forced_timeout; |  	int dynamic_ps_forced_timeout; | ||||||
|   |   | ||||||
|  	int user_power_level; /* in dBm, for all interfaces */ |  	int user_power_level; /* in dBm, for all interfaces */ | ||||||
| @@ -106,7 +106,7 @@ | |||||||
|  	u32 offchannel_flag; |  	u32 offchannel_flag; | ||||||
|   |   | ||||||
|  	offchannel_flag = local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL; |  	offchannel_flag = local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL; | ||||||
| @@ -150,6 +150,12 @@ static u32 ieee80211_hw_conf_chan(struct | @@ -152,6 +152,12 @@ static u32 ieee80211_hw_conf_chan(struct | ||||||
|  	} |  	} | ||||||
|  	rcu_read_unlock(); |  	rcu_read_unlock(); | ||||||
|   |   | ||||||
| @@ -119,7 +119,7 @@ | |||||||
|  	if (local->hw.conf.power_level != power) { |  	if (local->hw.conf.power_level != power) { | ||||||
|  		changed |= IEEE80211_CONF_CHANGE_POWER; |  		changed |= IEEE80211_CONF_CHANGE_POWER; | ||||||
|  		local->hw.conf.power_level = power; |  		local->hw.conf.power_level = power; | ||||||
| @@ -639,6 +645,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_ | @@ -656,6 +662,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_ | ||||||
|  					 IEEE80211_RADIOTAP_MCS_HAVE_BW; |  					 IEEE80211_RADIOTAP_MCS_HAVE_BW; | ||||||
|  	local->hw.radiotap_vht_details = IEEE80211_RADIOTAP_VHT_KNOWN_GI | |  	local->hw.radiotap_vht_details = IEEE80211_RADIOTAP_VHT_KNOWN_GI | | ||||||
|  					 IEEE80211_RADIOTAP_VHT_KNOWN_BANDWIDTH; |  					 IEEE80211_RADIOTAP_VHT_KNOWN_BANDWIDTH; | ||||||
| @@ -129,15 +129,15 @@ | |||||||
|  	local->hw.max_mtu = IEEE80211_MAX_DATA_LEN; |  	local->hw.max_mtu = IEEE80211_MAX_DATA_LEN; | ||||||
| --- a/net/wireless/nl80211.c | --- a/net/wireless/nl80211.c | ||||||
| +++ b/net/wireless/nl80211.c | +++ b/net/wireless/nl80211.c | ||||||
| @@ -630,6 +630,7 @@ const struct nla_policy nl80211_policy[N | @@ -661,6 +661,7 @@ const struct nla_policy nl80211_policy[N | ||||||
|  	[NL80211_ATTR_TWT_RESPONDER] = { .type = NLA_FLAG }, |  	[NL80211_ATTR_CONTROL_PORT_NO_PREAUTH] = { .type = NLA_FLAG }, | ||||||
|  	[NL80211_ATTR_HE_OBSS_PD] = NLA_POLICY_NESTED(he_obss_pd_policy), |  	[NL80211_ATTR_PMK_LIFETIME] = NLA_POLICY_MIN(NLA_U32, 1), | ||||||
|  	[NL80211_ATTR_VLAN_ID] = NLA_POLICY_RANGE(NLA_U16, 1, VLAN_N_VID - 2), |  	[NL80211_ATTR_PMK_REAUTH_THRESHOLD] = NLA_POLICY_RANGE(NLA_U8, 1, 100), | ||||||
| +	[NL80211_ATTR_WIPHY_ANTENNA_GAIN] = { .type = NLA_U32 }, | +	[NL80211_ATTR_WIPHY_ANTENNA_GAIN] = { .type = NLA_U32 }, | ||||||
|  }; |  }; | ||||||
|   |   | ||||||
|  /* policy for the key attributes */ |  /* policy for the key attributes */ | ||||||
| @@ -2994,6 +2995,20 @@ static int nl80211_set_wiphy(struct sk_b | @@ -3132,6 +3133,20 @@ static int nl80211_set_wiphy(struct sk_b | ||||||
|  		if (result) |  		if (result) | ||||||
|  			return result; |  			return result; | ||||||
|  	} |  	} | ||||||
|   | |||||||
| @@ -1,6 +1,15 @@ | |||||||
| --- a/nl80211.h | --- a/nl80211.h | ||||||
| +++ b/nl80211.h | +++ b/nl80211.h | ||||||
| @@ -249,6 +249,22 @@ | @@ -11,7 +11,7 @@ | ||||||
|  |   * Copyright 2008 Jouni Malinen <jouni.malinen@atheros.com> | ||||||
|  |   * Copyright 2008 Colin McCabe <colin@cozybit.com> | ||||||
|  |   * Copyright 2015-2017	Intel Deutschland GmbH | ||||||
|  | - * Copyright (C) 2018-2019 Intel Corporation | ||||||
|  | + * Copyright (C) 2018-2020 Intel Corporation | ||||||
|  |   * | ||||||
|  |   * Permission to use, copy, modify, and/or distribute this software for any | ||||||
|  |   * purpose with or without fee is hereby granted, provided that the above | ||||||
|  | @@ -249,6 +249,45 @@ | ||||||
|   */ |   */ | ||||||
|   |   | ||||||
|  /** |  /** | ||||||
| @@ -19,11 +28,34 @@ | |||||||
| + * %NL80211_ATTR_VLAN_ID. | + * %NL80211_ATTR_VLAN_ID. | ||||||
| + */ | + */ | ||||||
| + | + | ||||||
|  | +/** | ||||||
|  | + * DOC: TID configuration | ||||||
|  | + * | ||||||
|  | + * TID config support can be checked in the %NL80211_ATTR_TID_CONFIG | ||||||
|  | + * attribute given in wiphy capabilities. | ||||||
|  | + * | ||||||
|  | + * The necessary configuration parameters are mentioned in | ||||||
|  | + * &enum nl80211_tid_config_attr and it will be passed to the | ||||||
|  | + * %NL80211_CMD_SET_TID_CONFIG command in %NL80211_ATTR_TID_CONFIG. | ||||||
|  | + * | ||||||
|  | + * If the configuration needs to be applied for specific peer then the MAC | ||||||
|  | + * address of the peer needs to be passed in %NL80211_ATTR_MAC, otherwise the | ||||||
|  | + * configuration will be applied for all the connected peers in the vif except | ||||||
|  | + * any peers that have peer specific configuration for the TID by default; if | ||||||
|  | + * the %NL80211_TID_CONFIG_ATTR_OVERRIDE flag is set, peer specific values | ||||||
|  | + * will be overwritten. | ||||||
|  | + * | ||||||
|  | + * All this configuration is valid only for STA's current connection | ||||||
|  | + * i.e. the configuration will be reset to default when the STA connects back | ||||||
|  | + * after disconnection/roaming, and this configuration will be cleared when | ||||||
|  | + * the interface goes down. | ||||||
|  | + */ | ||||||
|  | + | ||||||
| +/** | +/** | ||||||
|   * enum nl80211_commands - supported nl80211 commands |   * enum nl80211_commands - supported nl80211 commands | ||||||
|   * |   * | ||||||
|   * @NL80211_CMD_UNSPEC: unspecified command to catch errors |   * @NL80211_CMD_UNSPEC: unspecified command to catch errors | ||||||
| @@ -571,6 +587,14 @@ | @@ -571,6 +610,14 @@ | ||||||
|   *	set of BSSID,frequency parameters is used (i.e., either the enforcing |   *	set of BSSID,frequency parameters is used (i.e., either the enforcing | ||||||
|   *	%NL80211_ATTR_MAC,%NL80211_ATTR_WIPHY_FREQ or the less strict |   *	%NL80211_ATTR_MAC,%NL80211_ATTR_WIPHY_FREQ or the less strict | ||||||
|   *	%NL80211_ATTR_MAC_HINT and %NL80211_ATTR_WIPHY_FREQ_HINT). |   *	%NL80211_ATTR_MAC_HINT and %NL80211_ATTR_WIPHY_FREQ_HINT). | ||||||
| @@ -38,31 +70,231 @@ | |||||||
|   *	%NL80211_ATTR_PREV_BSSID can be used to request a reassociation within |   *	%NL80211_ATTR_PREV_BSSID can be used to request a reassociation within | ||||||
|   *	the ESS in case the device is already associated and an association with |   *	the ESS in case the device is already associated and an association with | ||||||
|   *	a different BSS is desired. |   *	a different BSS is desired. | ||||||
| @@ -2373,6 +2397,12 @@ enum nl80211_commands { | @@ -1101,6 +1148,9 @@ | ||||||
|  |   *	peer MAC address and %NL80211_ATTR_FRAME is used to specify the frame | ||||||
|  |   *	content. The frame is ethernet data. | ||||||
|  |   * | ||||||
|  | + * @NL80211_CMD_SET_TID_CONFIG: Data frame TID specific configuration | ||||||
|  | + *	is passed using %NL80211_ATTR_TID_CONFIG attribute. | ||||||
|  | + * | ||||||
|  |   * @NL80211_CMD_MAX: highest used command number | ||||||
|  |   * @__NL80211_CMD_AFTER_LAST: internal use | ||||||
|  |   */ | ||||||
|  | @@ -1325,6 +1375,8 @@ enum nl80211_commands { | ||||||
|  |   | ||||||
|  |  	NL80211_CMD_PROBE_MESH_LINK, | ||||||
|  |   | ||||||
|  | +	NL80211_CMD_SET_TID_CONFIG, | ||||||
|  | + | ||||||
|  |  	/* add new commands above here */ | ||||||
|  |   | ||||||
|  |  	/* used to define NL80211_CMD_MAX below */ | ||||||
|  | @@ -1580,7 +1632,8 @@ enum nl80211_commands { | ||||||
|  |   *	flag is included, then control port frames are sent over NL80211 instead | ||||||
|  |   *	using %CMD_CONTROL_PORT_FRAME.  If control port routing over NL80211 is | ||||||
|  |   *	to be used then userspace must also use the %NL80211_ATTR_SOCKET_OWNER | ||||||
|  | - *	flag. | ||||||
|  | + *	flag. When used with %NL80211_ATTR_CONTROL_PORT_NO_PREAUTH, pre-auth | ||||||
|  | + *	frames are not forwared over the control port. | ||||||
|  |   * | ||||||
|  |   * @NL80211_ATTR_TESTDATA: Testmode data blob, passed through to the driver. | ||||||
|  |   *	We recommend using nested, driver-specific attributes within this. | ||||||
|  | @@ -2373,6 +2426,53 @@ enum nl80211_commands { | ||||||
|   *	the allowed channel bandwidth configurations. (u8 attribute) |   *	the allowed channel bandwidth configurations. (u8 attribute) | ||||||
|   *	Defined by IEEE P802.11ay/D4.0 section 9.4.2.251, Table 13. |   *	Defined by IEEE P802.11ay/D4.0 section 9.4.2.251, Table 13. | ||||||
|   * |   * | ||||||
| + * @NL80211_ATTR_VLAN_ID: VLAN ID (1..4094) for the station and VLAN group key | + * @NL80211_ATTR_VLAN_ID: VLAN ID (1..4094) for the station and VLAN group key | ||||||
| + *	(u16). | + *	(u16). | ||||||
| + * | + * | ||||||
|  | + * @NL80211_ATTR_HE_BSS_COLOR: nested attribute for BSS Color Settings. | ||||||
|  | + * | ||||||
|  | + * @NL80211_ATTR_IFTYPE_AKM_SUITES: nested array attribute, with each entry | ||||||
|  | + *	using attributes from &enum nl80211_iftype_akm_attributes. This | ||||||
|  | + *	attribute is sent in a response to %NL80211_CMD_GET_WIPHY indicating | ||||||
|  | + *	supported AKM suites capability per interface. AKMs advertised in | ||||||
|  | + *	%NL80211_ATTR_AKM_SUITES are default capabilities if AKM suites not | ||||||
|  | + *	advertised for a specific interface type. | ||||||
|  | + * | ||||||
|  | + * @NL80211_ATTR_TID_CONFIG: TID specific configuration in a | ||||||
|  | + *	nested attribute with &enum nl80211_tid_config_attr sub-attributes; | ||||||
|  | + *	on output (in wiphy attributes) it contains only the feature sub- | ||||||
|  | + *	attributes. | ||||||
|  | + * | ||||||
|  | + * @NL80211_ATTR_CONTROL_PORT_NO_PREAUTH: disable preauth frame rx on control | ||||||
|  | + *	port in order to forward/receive them as ordinary data frames. | ||||||
|  | + * | ||||||
|  | + * @NL80211_ATTR_PMK_LIFETIME: Maximum lifetime for PMKSA in seconds (u32, | ||||||
|  | + *	dot11RSNAConfigPMKReauthThreshold; 0 is not a valid value). | ||||||
|  | + *	An optional parameter configured through %NL80211_CMD_SET_PMKSA. | ||||||
|  | + *	Drivers that trigger roaming need to know the lifetime of the | ||||||
|  | + *	configured PMKSA for triggering the full vs. PMKSA caching based | ||||||
|  | + *	authentication. This timeout helps authentication methods like SAE, | ||||||
|  | + *	where PMK gets updated only by going through a full (new SAE) | ||||||
|  | + *	authentication instead of getting updated during an association for EAP | ||||||
|  | + *	authentication. No new full authentication within the PMK expiry shall | ||||||
|  | + *	result in a disassociation at the end of the lifetime. | ||||||
|  | + * | ||||||
|  | + * @NL80211_ATTR_PMK_REAUTH_THRESHOLD: Reauthentication threshold time, in | ||||||
|  | + *	terms of percentage of %NL80211_ATTR_PMK_LIFETIME | ||||||
|  | + *	(u8, dot11RSNAConfigPMKReauthThreshold, 1..100). This is an optional | ||||||
|  | + *	parameter configured through %NL80211_CMD_SET_PMKSA. Requests the | ||||||
|  | + *	driver to trigger a full authentication roam (without PMKSA caching) | ||||||
|  | + *	after the reauthentication threshold time, but before the PMK lifetime | ||||||
|  | + *	has expired. | ||||||
|  | + * | ||||||
|  | + *	Authentication methods like SAE need to be able to generate a new PMKSA | ||||||
|  | + *	entry without having to force a disconnection after the PMK timeout. If | ||||||
|  | + *	no roaming occurs between the reauth threshold and PMK expiration, | ||||||
|  | + *	disassociation is still forced. | ||||||
|  | + * | ||||||
| + * @NL80211_ATTR_WIPHY_ANTENNA_GAIN: Configured antenna gain. Used to reduce | + * @NL80211_ATTR_WIPHY_ANTENNA_GAIN: Configured antenna gain. Used to reduce | ||||||
| + *	transmit power to stay within regulatory limits. u32, dBi. | + *	transmit power to stay within regulatory limits. u32, dBi. | ||||||
| + * | + * | ||||||
|   * @NUM_NL80211_ATTR: total number of nl80211_attrs available |   * @NUM_NL80211_ATTR: total number of nl80211_attrs available | ||||||
|   * @NL80211_ATTR_MAX: highest attribute number currently defined |   * @NL80211_ATTR_MAX: highest attribute number currently defined | ||||||
|   * @__NL80211_ATTR_AFTER_LAST: internal use |   * @__NL80211_ATTR_AFTER_LAST: internal use | ||||||
| @@ -2835,6 +2865,10 @@ enum nl80211_attrs { | @@ -2835,6 +2935,21 @@ enum nl80211_attrs { | ||||||
|  	NL80211_ATTR_WIPHY_EDMG_CHANNELS, |  	NL80211_ATTR_WIPHY_EDMG_CHANNELS, | ||||||
|  	NL80211_ATTR_WIPHY_EDMG_BW_CONFIG, |  	NL80211_ATTR_WIPHY_EDMG_BW_CONFIG, | ||||||
|   |   | ||||||
| +	NL80211_ATTR_VLAN_ID, | +	NL80211_ATTR_VLAN_ID, | ||||||
| + | + | ||||||
|  | +	NL80211_ATTR_HE_BSS_COLOR, | ||||||
|  | + | ||||||
|  | +	NL80211_ATTR_IFTYPE_AKM_SUITES, | ||||||
|  | + | ||||||
|  | +	NL80211_ATTR_TID_CONFIG, | ||||||
|  | + | ||||||
|  | +	NL80211_ATTR_CONTROL_PORT_NO_PREAUTH, | ||||||
|  | + | ||||||
|  | +	NL80211_ATTR_PMK_LIFETIME, | ||||||
|  | +	NL80211_ATTR_PMK_REAUTH_THRESHOLD, | ||||||
|  | + | ||||||
| +	NL80211_ATTR_WIPHY_ANTENNA_GAIN, | +	NL80211_ATTR_WIPHY_ANTENNA_GAIN, | ||||||
| + | + | ||||||
|  	/* add attributes here, update the policy in nl80211.c */ |  	/* add attributes here, update the policy in nl80211.c */ | ||||||
|   |   | ||||||
|  	__NL80211_ATTR_AFTER_LAST, |  	__NL80211_ATTR_AFTER_LAST, | ||||||
| @@ -5484,6 +5518,14 @@ enum nl80211_feature_flags { | @@ -3554,6 +3669,8 @@ enum nl80211_wmm_rule { | ||||||
|  |   * @NL80211_FREQUENCY_ATTR_WMM: this channel has wmm limitations. | ||||||
|  |   *	This is a nested attribute that contains the wmm limitation per AC. | ||||||
|  |   *	(see &enum nl80211_wmm_rule) | ||||||
|  | + * @NL80211_FREQUENCY_ATTR_NO_HE: HE operation is not allowed on this channel | ||||||
|  | + *	in current regulatory domain. | ||||||
|  |   * @NL80211_FREQUENCY_ATTR_MAX: highest frequency attribute number | ||||||
|  |   *	currently defined | ||||||
|  |   * @__NL80211_FREQUENCY_ATTR_AFTER_LAST: internal use | ||||||
|  | @@ -3583,6 +3700,7 @@ enum nl80211_frequency_attr { | ||||||
|  |  	NL80211_FREQUENCY_ATTR_NO_20MHZ, | ||||||
|  |  	NL80211_FREQUENCY_ATTR_NO_10MHZ, | ||||||
|  |  	NL80211_FREQUENCY_ATTR_WMM, | ||||||
|  | +	NL80211_FREQUENCY_ATTR_NO_HE, | ||||||
|  |   | ||||||
|  |  	/* keep last */ | ||||||
|  |  	__NL80211_FREQUENCY_ATTR_AFTER_LAST, | ||||||
|  | @@ -3780,6 +3898,7 @@ enum nl80211_sched_scan_match_attr { | ||||||
|  |   * @NL80211_RRF_NO_HT40PLUS: channels can't be used in HT40+ operation | ||||||
|  |   * @NL80211_RRF_NO_80MHZ: 80MHz operation not allowed | ||||||
|  |   * @NL80211_RRF_NO_160MHZ: 160MHz operation not allowed | ||||||
|  | + * @NL80211_RRF_NO_HE: HE operation not allowed | ||||||
|  |   */ | ||||||
|  |  enum nl80211_reg_rule_flags { | ||||||
|  |  	NL80211_RRF_NO_OFDM		= 1<<0, | ||||||
|  | @@ -3797,6 +3916,7 @@ enum nl80211_reg_rule_flags { | ||||||
|  |  	NL80211_RRF_NO_HT40PLUS		= 1<<14, | ||||||
|  |  	NL80211_RRF_NO_80MHZ		= 1<<15, | ||||||
|  |  	NL80211_RRF_NO_160MHZ		= 1<<16, | ||||||
|  | +	NL80211_RRF_NO_HE		= 1<<17, | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  |  #define NL80211_RRF_PASSIVE_SCAN	NL80211_RRF_NO_IR | ||||||
|  | @@ -4503,6 +4623,7 @@ enum nl80211_key_default_types { | ||||||
|  |   *	See &enum nl80211_key_default_types. | ||||||
|  |   * @NL80211_KEY_MODE: the mode from enum nl80211_key_mode. | ||||||
|  |   *	Defaults to @NL80211_KEY_RX_TX. | ||||||
|  | + * @NL80211_KEY_DEFAULT_BEACON: flag indicating default Beacon frame key | ||||||
|  |   * | ||||||
|  |   * @__NL80211_KEY_AFTER_LAST: internal | ||||||
|  |   * @NL80211_KEY_MAX: highest key attribute | ||||||
|  | @@ -4518,6 +4639,7 @@ enum nl80211_key_attributes { | ||||||
|  |  	NL80211_KEY_TYPE, | ||||||
|  |  	NL80211_KEY_DEFAULT_TYPES, | ||||||
|  |  	NL80211_KEY_MODE, | ||||||
|  | +	NL80211_KEY_DEFAULT_BEACON, | ||||||
|  |   | ||||||
|  |  	/* keep last */ | ||||||
|  |  	__NL80211_KEY_AFTER_LAST, | ||||||
|  | @@ -4674,6 +4796,69 @@ enum nl80211_tx_power_setting { | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  |  /** | ||||||
|  | + * enum nl80211_tid_config - TID config state | ||||||
|  | + * @NL80211_TID_CONFIG_ENABLE: Enable config for the TID | ||||||
|  | + * @NL80211_TID_CONFIG_DISABLE: Disable config for the TID | ||||||
|  | + */ | ||||||
|  | +enum nl80211_tid_config { | ||||||
|  | +	NL80211_TID_CONFIG_ENABLE, | ||||||
|  | +	NL80211_TID_CONFIG_DISABLE, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +/* enum nl80211_tid_config_attr - TID specific configuration. | ||||||
|  | + * @NL80211_TID_CONFIG_ATTR_PAD: pad attribute for 64-bit values | ||||||
|  | + * @NL80211_TID_CONFIG_ATTR_VIF_SUPP: a bitmap (u64) of attributes supported | ||||||
|  | + *	for per-vif configuration; doesn't list the ones that are generic | ||||||
|  | + *	(%NL80211_TID_CONFIG_ATTR_TIDS, %NL80211_TID_CONFIG_ATTR_OVERRIDE). | ||||||
|  | + * @NL80211_TID_CONFIG_ATTR_PEER_SUPP: same as the previous per-vif one, but | ||||||
|  | + *	per peer instead. | ||||||
|  | + * @NL80211_TID_CONFIG_ATTR_OVERRIDE: flag attribue, if no peer | ||||||
|  | + *	is selected, if set indicates that the new configuration overrides | ||||||
|  | + *	all previous peer configurations, otherwise previous peer specific | ||||||
|  | + *	configurations should be left untouched. If peer is selected then | ||||||
|  | + *	it will reset particular TID configuration of that peer and it will | ||||||
|  | + *	not accept other TID config attributes along with peer. | ||||||
|  | + * @NL80211_TID_CONFIG_ATTR_TIDS: a bitmask value of TIDs (bit 0 to 7) | ||||||
|  | + *	Its type is u16. | ||||||
|  | + * @NL80211_TID_CONFIG_ATTR_NOACK: Configure ack policy for the TID. | ||||||
|  | + *	specified in %NL80211_TID_CONFIG_ATTR_TID. see %enum nl80211_tid_config. | ||||||
|  | + *	Its type is u8. | ||||||
|  | + * @NL80211_TID_CONFIG_ATTR_RETRY_SHORT: Number of retries used with data frame | ||||||
|  | + *	transmission, user-space sets this configuration in | ||||||
|  | + *	&NL80211_CMD_SET_TID_CONFIG. It is u8 type, min value is 1 and | ||||||
|  | + *	the max value is advertised by the driver in this attribute on | ||||||
|  | + *	output in wiphy capabilities. | ||||||
|  | + * @NL80211_TID_CONFIG_ATTR_RETRY_LONG: Number of retries used with data frame | ||||||
|  | + *	transmission, user-space sets this configuration in | ||||||
|  | + *	&NL80211_CMD_SET_TID_CONFIG. Its type is u8, min value is 1 and | ||||||
|  | + *	the max value is advertised by the driver in this attribute on | ||||||
|  | + *	output in wiphy capabilities. | ||||||
|  | + * @NL80211_TID_CONFIG_ATTR_AMPDU_CTRL: Enable/Disable aggregation for the TIDs | ||||||
|  | + *	specified in %NL80211_TID_CONFIG_ATTR_TIDS. Its type is u8, using | ||||||
|  | + *	the values from &nl80211_tid_config. | ||||||
|  | + * @NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL: Enable/Disable RTS_CTS for the TIDs | ||||||
|  | + *	specified in %NL80211_TID_CONFIG_ATTR_TIDS. It is u8 type, using | ||||||
|  | + *	the values from &nl80211_tid_config. | ||||||
|  | + */ | ||||||
|  | +enum nl80211_tid_config_attr { | ||||||
|  | +	__NL80211_TID_CONFIG_ATTR_INVALID, | ||||||
|  | +	NL80211_TID_CONFIG_ATTR_PAD, | ||||||
|  | +	NL80211_TID_CONFIG_ATTR_VIF_SUPP, | ||||||
|  | +	NL80211_TID_CONFIG_ATTR_PEER_SUPP, | ||||||
|  | +	NL80211_TID_CONFIG_ATTR_OVERRIDE, | ||||||
|  | +	NL80211_TID_CONFIG_ATTR_TIDS, | ||||||
|  | +	NL80211_TID_CONFIG_ATTR_NOACK, | ||||||
|  | +	NL80211_TID_CONFIG_ATTR_RETRY_SHORT, | ||||||
|  | +	NL80211_TID_CONFIG_ATTR_RETRY_LONG, | ||||||
|  | +	NL80211_TID_CONFIG_ATTR_AMPDU_CTRL, | ||||||
|  | +	NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL, | ||||||
|  | + | ||||||
|  | +	/* keep last */ | ||||||
|  | +	__NL80211_TID_CONFIG_ATTR_AFTER_LAST, | ||||||
|  | +	NL80211_TID_CONFIG_ATTR_MAX = __NL80211_TID_CONFIG_ATTR_AFTER_LAST - 1 | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +/** | ||||||
|  |   * enum nl80211_packet_pattern_attr - packet pattern attribute | ||||||
|  |   * @__NL80211_PKTPAT_INVALID: invalid number for nested attribute | ||||||
|  |   * @NL80211_PKTPAT_PATTERN: the pattern, values where the mask has | ||||||
|  | @@ -5484,6 +5669,26 @@ enum nl80211_feature_flags { | ||||||
|   * @NL80211_EXT_FEATURE_SAE_OFFLOAD: Device wants to do SAE authentication in |   * @NL80211_EXT_FEATURE_SAE_OFFLOAD: Device wants to do SAE authentication in | ||||||
|   *	station mode (SAE password is passed as part of the connect command). |   *	station mode (SAE password is passed as part of the connect command). | ||||||
|   * |   * | ||||||
| @@ -73,16 +305,149 @@ | |||||||
| + * @NL80211_EXT_FEATURE_AQL: The driver supports the Airtime Queue Limit (AQL) | + * @NL80211_EXT_FEATURE_AQL: The driver supports the Airtime Queue Limit (AQL) | ||||||
| + *	feature, which prevents bufferbloat by using the expected transmission | + *	feature, which prevents bufferbloat by using the expected transmission | ||||||
| + *	time to limit the amount of data buffered in the hardware. | + *	time to limit the amount of data buffered in the hardware. | ||||||
|  | + * | ||||||
|  | + * @NL80211_EXT_FEATURE_BEACON_PROTECTION: The driver supports Beacon protection | ||||||
|  | + *	and can receive key configuration for BIGTK using key indexes 6 and 7. | ||||||
|  | + * | ||||||
|  | + * @NL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH: The driver can disable the | ||||||
|  | + *	forwarding of preauth frames over the control port. They are then | ||||||
|  | + *	handled as ordinary data frames. | ||||||
|  | + * | ||||||
|  | + * @NL80211_EXT_FEATURE_PROTECTED_TWT: Driver supports protected TWT frames | ||||||
|  | + * | ||||||
|  | + * @NL80211_EXT_FEATURE_DEL_IBSS_STA: The driver supports removing stations | ||||||
|  | + *      in IBSS mode, essentially by dropping their state. | ||||||
| + * | + * | ||||||
|   * @NUM_NL80211_EXT_FEATURES: number of extended features. |   * @NUM_NL80211_EXT_FEATURES: number of extended features. | ||||||
|   * @MAX_NL80211_EXT_FEATURES: highest extended feature index. |   * @MAX_NL80211_EXT_FEATURES: highest extended feature index. | ||||||
|   */ |   */ | ||||||
| @@ -5529,6 +5571,8 @@ enum nl80211_ext_feature_index { | @@ -5529,6 +5734,12 @@ enum nl80211_ext_feature_index { | ||||||
|  	NL80211_EXT_FEATURE_EXT_KEY_ID, |  	NL80211_EXT_FEATURE_EXT_KEY_ID, | ||||||
|  	NL80211_EXT_FEATURE_STA_TX_PWR, |  	NL80211_EXT_FEATURE_STA_TX_PWR, | ||||||
|  	NL80211_EXT_FEATURE_SAE_OFFLOAD, |  	NL80211_EXT_FEATURE_SAE_OFFLOAD, | ||||||
| +	NL80211_EXT_FEATURE_VLAN_OFFLOAD, | +	NL80211_EXT_FEATURE_VLAN_OFFLOAD, | ||||||
| +	NL80211_EXT_FEATURE_AQL, | +	NL80211_EXT_FEATURE_AQL, | ||||||
|  | +	NL80211_EXT_FEATURE_BEACON_PROTECTION, | ||||||
|  | +	NL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH, | ||||||
|  | +	NL80211_EXT_FEATURE_PROTECTED_TWT, | ||||||
|  | +	NL80211_EXT_FEATURE_DEL_IBSS_STA, | ||||||
|   |   | ||||||
|  	/* add new features before the definition below */ |  	/* add new features before the definition below */ | ||||||
|  	NUM_NL80211_EXT_FEATURES, |  	NUM_NL80211_EXT_FEATURES, | ||||||
|  | @@ -6151,12 +6362,14 @@ enum nl80211_ftm_responder_stats { | ||||||
|  |   * @NL80211_PREAMBLE_HT: HT preamble | ||||||
|  |   * @NL80211_PREAMBLE_VHT: VHT preamble | ||||||
|  |   * @NL80211_PREAMBLE_DMG: DMG preamble | ||||||
|  | + * @NL80211_PREAMBLE_HE: HE preamble | ||||||
|  |   */ | ||||||
|  |  enum nl80211_preamble { | ||||||
|  |  	NL80211_PREAMBLE_LEGACY, | ||||||
|  |  	NL80211_PREAMBLE_HT, | ||||||
|  |  	NL80211_PREAMBLE_VHT, | ||||||
|  |  	NL80211_PREAMBLE_DMG, | ||||||
|  | +	NL80211_PREAMBLE_HE, | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  |  /** | ||||||
|  | @@ -6349,6 +6562,10 @@ enum nl80211_peer_measurement_attrs { | ||||||
|  |   *	is valid) | ||||||
|  |   * @NL80211_PMSR_FTM_CAPA_ATTR_MAX_FTMS_PER_BURST: u32 attribute indicating | ||||||
|  |   *	the maximum FTMs per burst (if not present anything is valid) | ||||||
|  | + * @NL80211_PMSR_FTM_CAPA_ATTR_TRIGGER_BASED: flag attribute indicating if | ||||||
|  | + *	trigger based ranging measurement is supported | ||||||
|  | + * @NL80211_PMSR_FTM_CAPA_ATTR_NON_TRIGGER_BASED: flag attribute indicating | ||||||
|  | + *	if non trigger based ranging measurement is supported | ||||||
|  |   * | ||||||
|  |   * @NUM_NL80211_PMSR_FTM_CAPA_ATTR: internal | ||||||
|  |   * @NL80211_PMSR_FTM_CAPA_ATTR_MAX: highest attribute number | ||||||
|  | @@ -6364,6 +6581,8 @@ enum nl80211_peer_measurement_ftm_capa { | ||||||
|  |  	NL80211_PMSR_FTM_CAPA_ATTR_BANDWIDTHS, | ||||||
|  |  	NL80211_PMSR_FTM_CAPA_ATTR_MAX_BURSTS_EXPONENT, | ||||||
|  |  	NL80211_PMSR_FTM_CAPA_ATTR_MAX_FTMS_PER_BURST, | ||||||
|  | +	NL80211_PMSR_FTM_CAPA_ATTR_TRIGGER_BASED, | ||||||
|  | +	NL80211_PMSR_FTM_CAPA_ATTR_NON_TRIGGER_BASED, | ||||||
|  |   | ||||||
|  |  	/* keep last */ | ||||||
|  |  	NUM_NL80211_PMSR_FTM_CAPA_ATTR, | ||||||
|  | @@ -6393,6 +6612,20 @@ enum nl80211_peer_measurement_ftm_capa { | ||||||
|  |   * @NL80211_PMSR_FTM_REQ_ATTR_REQUEST_LCI: request LCI data (flag) | ||||||
|  |   * @NL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC: request civic location data | ||||||
|  |   *	(flag) | ||||||
|  | + * @NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED: request trigger based ranging | ||||||
|  | + *	measurement (flag). | ||||||
|  | + *	This attribute and %NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED are | ||||||
|  | + *	mutually exclusive. | ||||||
|  | + *      if neither %NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED nor | ||||||
|  | + *	%NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set, EDCA based | ||||||
|  | + *	ranging will be used. | ||||||
|  | + * @NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED: request non trigger based | ||||||
|  | + *	ranging measurement (flag) | ||||||
|  | + *	This attribute and %NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED are | ||||||
|  | + *	mutually exclusive. | ||||||
|  | + *      if neither %NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED nor | ||||||
|  | + *	%NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED is set, EDCA based | ||||||
|  | + *	ranging will be used. | ||||||
|  |   * | ||||||
|  |   * @NUM_NL80211_PMSR_FTM_REQ_ATTR: internal | ||||||
|  |   * @NL80211_PMSR_FTM_REQ_ATTR_MAX: highest attribute number | ||||||
|  | @@ -6409,6 +6642,8 @@ enum nl80211_peer_measurement_ftm_req { | ||||||
|  |  	NL80211_PMSR_FTM_REQ_ATTR_NUM_FTMR_RETRIES, | ||||||
|  |  	NL80211_PMSR_FTM_REQ_ATTR_REQUEST_LCI, | ||||||
|  |  	NL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC, | ||||||
|  | +	NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED, | ||||||
|  | +	NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED, | ||||||
|  |   | ||||||
|  |  	/* keep last */ | ||||||
|  |  	NUM_NL80211_PMSR_FTM_REQ_ATTR, | ||||||
|  | @@ -6548,5 +6783,51 @@ enum nl80211_obss_pd_attributes { | ||||||
|  |  	NL80211_HE_OBSS_PD_ATTR_MAX = __NL80211_HE_OBSS_PD_ATTR_LAST - 1, | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  | +/** | ||||||
|  | + * enum nl80211_bss_color_attributes - BSS Color attributes | ||||||
|  | + * @__NL80211_HE_BSS_COLOR_ATTR_INVALID: Invalid | ||||||
|  | + * | ||||||
|  | + * @NL80211_HE_BSS_COLOR_ATTR_COLOR: the current BSS Color. | ||||||
|  | + * @NL80211_HE_BSS_COLOR_ATTR_DISABLED: is BSS coloring disabled. | ||||||
|  | + * @NL80211_HE_BSS_COLOR_ATTR_PARTIAL: the AID equation to be used.. | ||||||
|  | + * | ||||||
|  | + * @__NL80211_HE_BSS_COLOR_ATTR_LAST: Internal | ||||||
|  | + * @NL80211_HE_BSS_COLOR_ATTR_MAX: highest BSS Color attribute. | ||||||
|  | + */ | ||||||
|  | +enum nl80211_bss_color_attributes { | ||||||
|  | +	__NL80211_HE_BSS_COLOR_ATTR_INVALID, | ||||||
|  | + | ||||||
|  | +	NL80211_HE_BSS_COLOR_ATTR_COLOR, | ||||||
|  | +	NL80211_HE_BSS_COLOR_ATTR_DISABLED, | ||||||
|  | +	NL80211_HE_BSS_COLOR_ATTR_PARTIAL, | ||||||
|  | + | ||||||
|  | +	/* keep last */ | ||||||
|  | +	__NL80211_HE_BSS_COLOR_ATTR_LAST, | ||||||
|  | +	NL80211_HE_BSS_COLOR_ATTR_MAX = __NL80211_HE_BSS_COLOR_ATTR_LAST - 1, | ||||||
|  | +}; | ||||||
|  | + | ||||||
|  | +/** | ||||||
|  | + * enum nl80211_iftype_akm_attributes - interface type AKM attributes | ||||||
|  | + * @__NL80211_IFTYPE_AKM_ATTR_INVALID: Invalid | ||||||
|  | + * | ||||||
|  | + * @NL80211_IFTYPE_AKM_ATTR_IFTYPES: nested attribute containing a flag | ||||||
|  | + *	attribute for each interface type that supports AKM suites specified in | ||||||
|  | + *	%NL80211_IFTYPE_AKM_ATTR_SUITES | ||||||
|  | + * @NL80211_IFTYPE_AKM_ATTR_SUITES: an array of u32. Used to indicate supported | ||||||
|  | + *	AKM suites for the specified interface types. | ||||||
|  | + * | ||||||
|  | + * @__NL80211_IFTYPE_AKM_ATTR_LAST: Internal | ||||||
|  | + * @NL80211_IFTYPE_AKM_ATTR_MAX: highest interface type AKM attribute. | ||||||
|  | + */ | ||||||
|  | +enum nl80211_iftype_akm_attributes { | ||||||
|  | +	__NL80211_IFTYPE_AKM_ATTR_INVALID, | ||||||
|  | + | ||||||
|  | +	NL80211_IFTYPE_AKM_ATTR_IFTYPES, | ||||||
|  | +	NL80211_IFTYPE_AKM_ATTR_SUITES, | ||||||
|  | + | ||||||
|  | +	/* keep last */ | ||||||
|  | +	__NL80211_IFTYPE_AKM_ATTR_LAST, | ||||||
|  | +	NL80211_IFTYPE_AKM_ATTR_MAX = __NL80211_IFTYPE_AKM_ATTR_LAST - 1, | ||||||
|  | +}; | ||||||
|  |   | ||||||
|  |  #endif /* __LINUX_NL80211_H */ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Hauke Mehrtens
					Hauke Mehrtens