linux/net/mac80211
Jonas Jelonek 44fa75f207 mac80211: extend current rate control tx status API
This patch adds the new struct ieee80211_rate_status and replaces
'struct rate_info *rate' in ieee80211_tx_status with pointer and length
annotation.

The struct ieee80211_rate_status allows to:
(1)	receive tx power status feedback for transmit power control (TPC)
	per packet or packet retry
(2)	dynamic mapping of wifi chip specific multi-rate retry (mrr)
	chains with different lengths
(3)	increase the limit of annotatable rate indices to support
	IEEE802.11ac rate sets and beyond

ieee80211_tx_info, control and status buffer, and ieee80211_tx_rate
cannot be used to achieve these goals due to fixed size limitations.

Our new struct contains a struct rate_info to annotate the rate that was
used, retry count of the rate and tx power. It is intended for all
information related to RC and TPC that needs to be passed from driver to
mac80211 and its RC/TPC algorithms like Minstrel_HT. It corresponds to
one stage in an mrr. Multiple subsequent instances of this struct can be
included in struct ieee80211_tx_status via a pointer and a length variable.
Those instances can be allocated on-stack. The former reference to a single
instance of struct rate_info is replaced with our new annotation.

An extension is introduced to struct ieee80211_hw. There are two new
members called 'tx_power_levels' and 'max_txpwr_levels_idx' acting as a
tx power level table. When a wifi device is registered, the driver shall
supply all supported power levels in this list. This allows to support
several quirks like differing power steps in power level ranges or
alike. TPC can use this for algorithm and thus be designed more abstract
instead of handling all possible step widths individually.

Further mandatory changes in status.c, mt76 and ath11k drivers due to the
removal of 'struct rate_info *rate' are also included.
status.c already uses the information in ieee80211_tx_status->rate in
radiotap, this is now changed to use ieee80211_rate_status->rate_idx.
mt76 driver already uses struct rate_info to pass the tx rate to status
path. The new members of the ieee80211_tx_status are set to NULL and 0
because the previously passed rate is not relevant to rate control and
accurate information is passed via tx_info->status.rates.
For ath11k, the txrate can be passed via this struct because ath11k uses
firmware RC and thus the information does not interfere with software RC.

Compile-Tested: current wireless-next tree with all flags on
Tested-on: Xiaomi 4A Gigabit (MediaTek MT7603E, MT7612E) with OpenWrt
		Linux 5.10.113

Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
Link: https://lore.kernel.org/r/20220509173958.1398201-2-jelonek.jonas@gmail.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
2022-05-16 10:05:02 +02:00
..
aead_api.c mac80211: Check crypto_aead_encrypt for errors 2021-03-16 21:20:41 +01:00
aead_api.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
aes_ccm.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
aes_cmac.c mac80211: aes_cmac: check crypto_shash_setkey() return value 2021-04-19 12:01:40 +02:00
aes_cmac.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
aes_gcm.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
aes_gmac.c mac80211: Check crypto_aead_encrypt for errors 2021-03-16 21:20:41 +01:00
aes_gmac.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
agg-rx.c mac80211: prepare sta handling for MLO support 2022-04-11 16:42:03 +02:00
agg-tx.c mac80211: prepare sta handling for MLO support 2022-04-11 16:42:03 +02:00
airtime.c mac80211: prepare sta handling for MLO support 2022-04-11 16:42:03 +02:00
cfg.c mac80211: disable BSS color collision detection in case of no free colors 2022-05-16 09:46:30 +02:00
chan.c mac80211: prepare sta handling for MLO support 2022-04-11 16:42:03 +02:00
debug.h
debugfs_key.c mac80211: remove unused macros 2022-02-04 16:26:27 +01:00
debugfs_key.h mac80211: Support BIGTK configuration for Beacon protection 2020-02-24 10:35:57 +01:00
debugfs_netdev.c mac80211: use ifmgd->bssid instead of ifmgd->associated->bssid 2022-05-16 09:13:22 +02:00
debugfs_netdev.h
debugfs_sta.c wireless-next patches for v5.19 2022-05-03 17:27:51 -07:00
debugfs_sta.h
debugfs.c mac80211: introduce BSS color collision detection 2022-04-11 15:24:15 +02:00
debugfs.h
driver-ops.c mac80211: fix station rate table updates on assoc 2021-02-01 15:07:09 +01:00
driver-ops.h This time we have: 2021-12-21 07:41:52 -08:00
eht.c mac80211: prepare sta handling for MLO support 2022-04-11 16:42:03 +02:00
ethtool.c mac80211: prepare sta handling for MLO support 2022-04-11 16:42:03 +02:00
fils_aead.c mac80211: fils: use cfg80211_find_ext_elem() 2021-10-21 17:01:16 +02:00
fils_aead.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
he.c mac80211: prepare sta handling for MLO support 2022-04-11 16:42:03 +02:00
ht.c mac80211: prepare sta handling for MLO support 2022-04-11 16:42:03 +02:00
ibss.c mac80211: prepare sta handling for MLO support 2022-04-11 16:42:03 +02:00
ieee80211_i.h mac80211: mlme: track assoc_bss/associated separately 2022-05-16 09:16:20 +02:00
iface.c mac80211: add support for .ndo_fill_forward_path 2021-11-26 11:47:26 +01:00
Kconfig ath9k: fix build error with LEDS_CLASS=m 2021-01-28 09:29:34 +02:00
key.c mac80211: prepare sta handling for MLO support 2022-04-11 16:42:03 +02:00
key.h mac80211: prevent mixed key and fragment cache attacks 2021-05-11 20:12:51 +02:00
led.c mac80211: don't open-code LED manipulations 2021-06-23 11:29:12 +02:00
led.h mac80211: fix throughput LED trigger 2021-11-15 10:56:57 +01:00
main.c mac80211: remove unused argument to ieee80211_sta_connection_lost() 2022-05-16 09:15:04 +02:00
Makefile mac80211: Handle station association response with EHT 2022-02-16 15:44:09 +01:00
mesh_hwmp.c mac80211: prepare sta handling for MLO support 2022-04-11 16:42:03 +02:00
mesh_pathtbl.c mac80211: mesh: embedd mesh_paths and mpp_paths into ieee80211_if_mesh 2022-01-04 15:11:49 +01:00
mesh_plink.c mac80211: prepare sta handling for MLO support 2022-04-11 16:42:03 +02:00
mesh_ps.c mac80211: mesh: fix potentially unaligned access 2021-09-23 13:25:09 +02:00
mesh_sync.c mac80211: mesh: clean up rx_bcn_presp API 2021-09-23 16:26:33 +02:00
mesh.c mac80211: Use GFP_KERNEL instead of GFP_ATOMIC when possible 2022-03-11 11:42:49 +01:00
mesh.h mac80211: mesh: embedd mesh_paths and mpp_paths into ieee80211_if_mesh 2022-01-04 15:11:49 +01:00
michael.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
michael.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
mlme.c mac80211: mlme: track assoc_bss/associated separately 2022-05-16 09:16:20 +02:00
ocb.c mac80211: prepare sta handling for MLO support 2022-04-11 16:42:03 +02:00
offchannel.c mac80211: use ifmgd->bssid instead of ifmgd->associated->bssid 2022-05-16 09:13:22 +02:00
pm.c mac80211: Prevent AP probing during suspend 2021-10-21 17:27:51 +02:00
rate.c mac80211: prepare sta handling for MLO support 2022-04-11 16:42:03 +02:00
rate.h mac80211: populate debugfs only after cfg80211 init 2020-04-24 11:30:13 +02:00
rc80211_minstrel_ht_debugfs.c mac80211: minstrel_ht: show sampling rates in debugfs 2021-02-12 08:58:11 +01:00
rc80211_minstrel_ht.c mac80211: minstrel_ht: fill all requested rates 2022-05-16 10:03:39 +02:00
rc80211_minstrel_ht.h mac80211: minstrel_ht: remove sample rate switching code for constrained devices 2021-02-12 08:58:22 +01:00
rx.c mac80211: prepare sta handling for MLO support 2022-04-11 16:42:03 +02:00
s1g.c mac80211: prepare sta handling for MLO support 2022-04-11 16:42:03 +02:00
scan.c mac80211: upgrade passive scan to active scan on DFS channels after beacon rx 2022-05-04 22:49:38 +02:00
spectmgmt.c mac80211: 160MHz with extended NSS BW in CSA 2021-01-21 13:39:11 +01:00
sta_info.c mac80211: prepare sta handling for MLO support 2022-04-11 16:42:03 +02:00
sta_info.h mac80211: prepare sta handling for MLO support 2022-04-11 16:42:03 +02:00
status.c mac80211: extend current rate control tx status API 2022-05-16 10:05:02 +02:00
tdls.c mac80211: prepare sta handling for MLO support 2022-04-11 16:42:03 +02:00
tkip.c mac80211: Fix TKIP replay protection immediately after key setup 2020-01-15 09:52:12 +01:00
tkip.h Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2019-07-08 20:57:08 -07:00
trace_msg.h
trace.c
trace.h mac80211: prepare sta handling for MLO support 2022-04-11 16:42:03 +02:00
tx.c mac80211: tx: delete a redundant if statement in ieee80211_check_fast_xmit() 2022-05-04 22:49:38 +02:00
util.c mac80211: mlme: move in RSSI reporting code 2022-05-16 09:12:34 +02:00
vht.c mac80211: prepare sta handling for MLO support 2022-04-11 16:42:03 +02:00
wep.c mac80211: make ieee80211_wep_init() return void 2020-02-07 12:40:34 +01:00
wep.h mac80211: make ieee80211_wep_init() return void 2020-02-07 12:40:34 +01:00
wme.c mac80211: drop check for DONT_REORDER in __ieee80211_select_queue 2021-11-15 10:55:40 +01:00
wme.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
wpa.c mac80211: unify CCMP/GCMP AAD construction 2022-05-16 09:10:38 +02:00
wpa.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00