forked from coolsnowwolf/lede
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
mac80211: backport some new API from v6.1
- Loading branch information
1 parent
6710357
commit a45ed09
Showing
1 changed file
with
315 additions
and
0 deletions.
There are no files selected for viewing
315 changes: 315 additions & 0 deletions
315
package/kernel/mac80211/patches/subsys/997-backport-API-from-v6.1.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,315 @@ | ||
--- a/include/net/mac80211.h | ||
+++ b/include/net/mac80211.h | ||
@@ -702,6 +702,8 @@ | ||
u32 unsol_bcast_probe_resp_interval; | ||
bool s1g; | ||
struct cfg80211_bitrate_mask beacon_tx_rate; | ||
+ | ||
+ bool csa_active; | ||
}; | ||
|
||
/** | ||
@@ -1672,6 +1674,46 @@ | ||
}; | ||
|
||
/** | ||
+ * struct ieee80211_vif_cfg - interface configuration | ||
+ * @assoc: association status | ||
+ * @ibss_joined: indicates whether this station is part of an IBSS or not | ||
+ * @ibss_creator: indicates if a new IBSS network is being created | ||
+ * @ps: power-save mode (STA only). This flag is NOT affected by | ||
+ * offchannel/dynamic_ps operations. | ||
+ * @aid: association ID number, valid only when @assoc is true | ||
+ * @arp_addr_list: List of IPv4 addresses for hardware ARP filtering. The | ||
+ * may filter ARP queries targeted for other addresses than listed here. | ||
+ * The driver must allow ARP queries targeted for all address listed here | ||
+ * to pass through. An empty list implies no ARP queries need to pass. | ||
+ * @arp_addr_cnt: Number of addresses currently on the list. Note that this | ||
+ * may be larger than %IEEE80211_BSS_ARP_ADDR_LIST_LEN (the arp_addr_list | ||
+ * array size), it's up to the driver what to do in that case. | ||
+ * @ssid: The SSID of the current vif. Valid in AP and IBSS mode. | ||
+ * @ssid_len: Length of SSID given in @ssid. | ||
+ * @s1g: BSS is S1G BSS (affects Association Request format). | ||
+ * @idle: This interface is idle. There's also a global idle flag in the | ||
+ * hardware config which may be more appropriate depending on what | ||
+ * your driver/device needs to do. | ||
+ * @ap_addr: AP MLD address, or BSSID for non-MLO connections | ||
+ * (station mode only) | ||
+ */ | ||
+struct ieee80211_vif_cfg { | ||
+ /* association related data */ | ||
+ bool assoc, ibss_joined; | ||
+ bool ibss_creator; | ||
+ bool ps; | ||
+ u16 aid; | ||
+ | ||
+ __be32 arp_addr_list[IEEE80211_BSS_ARP_ADDR_LIST_LEN]; | ||
+ int arp_addr_cnt; | ||
+ u8 ssid[IEEE80211_MAX_SSID_LEN]; | ||
+ size_t ssid_len; | ||
+ bool s1g; | ||
+ bool idle; | ||
+ u8 ap_addr[ETH_ALEN] __aligned(2); | ||
+}; | ||
+ | ||
+/** | ||
* struct ieee80211_vif - per-interface data | ||
* | ||
* Data in this structure is continually present for driver | ||
@@ -1725,6 +1767,7 @@ | ||
*/ | ||
struct ieee80211_vif { | ||
enum nl80211_iftype type; | ||
+ struct ieee80211_vif_cfg cfg; | ||
struct ieee80211_bss_conf bss_conf; | ||
u8 addr[ETH_ALEN] __aligned(2); | ||
bool p2p; | ||
@@ -2045,6 +2088,80 @@ | ||
}; | ||
|
||
/** | ||
+ * struct ieee80211_sta_aggregates - info that is aggregated from active links | ||
+ * | ||
+ * Used for any per-link data that needs to be aggregated and updated in the | ||
+ * main &struct ieee80211_sta when updated or the active links change. | ||
+ * | ||
+ * @max_amsdu_len: indicates the maximal length of an A-MSDU in bytes. | ||
+ * This field is always valid for packets with a VHT preamble. | ||
+ * For packets with a HT preamble, additional limits apply: | ||
+ * | ||
+ * * If the skb is transmitted as part of a BA agreement, the | ||
+ * A-MSDU maximal size is min(max_amsdu_len, 4065) bytes. | ||
+ * * If the skb is not part of a BA agreement, the A-MSDU maximal | ||
+ * size is min(max_amsdu_len, 7935) bytes. | ||
+ * | ||
+ * Both additional HT limits must be enforced by the low level | ||
+ * driver. This is defined by the spec (IEEE 802.11-2012 section | ||
+ * 8.3.2.2 NOTE 2). | ||
+ * @max_rc_amsdu_len: Maximum A-MSDU size in bytes recommended by rate control. | ||
+ * @max_tid_amsdu_len: Maximum A-MSDU size in bytes for this TID | ||
+ */ | ||
+struct ieee80211_sta_aggregates { | ||
+ u16 max_amsdu_len; | ||
+ | ||
+ u16 max_rc_amsdu_len; | ||
+ u16 max_tid_amsdu_len[IEEE80211_NUM_TIDS]; | ||
+}; | ||
+ | ||
+/** | ||
+ * struct ieee80211_link_sta - station Link specific info | ||
+ * All link specific info for a STA link for a non MLD STA(single) | ||
+ * or a MLD STA(multiple entries) are stored here. | ||
+ * | ||
+ * @sta: reference to owning STA | ||
+ * @addr: MAC address of the Link STA. For non-MLO STA this is same as the addr | ||
+ * in ieee80211_sta. For MLO Link STA this addr can be same or different | ||
+ * from addr in ieee80211_sta (representing MLD STA addr) | ||
+ * @link_id: the link ID for this link STA (0 for deflink) | ||
+ * @smps_mode: current SMPS mode (off, static or dynamic) | ||
+ * @supp_rates: Bitmap of supported rates | ||
+ * @ht_cap: HT capabilities of this STA; restricted to our own capabilities | ||
+ * @vht_cap: VHT capabilities of this STA; restricted to our own capabilities | ||
+ * @he_cap: HE capabilities of this STA | ||
+ * @he_6ghz_capa: on 6 GHz, holds the HE 6 GHz band capabilities | ||
+ * @eht_cap: EHT capabilities of this STA | ||
+ * @bandwidth: current bandwidth the station can receive with | ||
+ * @rx_nss: in HT/VHT, the maximum number of spatial streams the | ||
+ * station can receive at the moment, changed by operating mode | ||
+ * notifications and capabilities. The value is only valid after | ||
+ * the station moves to associated state. | ||
+ * @txpwr: the station tx power configuration | ||
+ * | ||
+ */ | ||
+struct ieee80211_link_sta { | ||
+ struct ieee80211_sta *sta; | ||
+ | ||
+ u8 addr[ETH_ALEN]; | ||
+ u8 link_id; | ||
+ enum ieee80211_smps_mode smps_mode; | ||
+ | ||
+ u32 supp_rates[NUM_NL80211_BANDS]; | ||
+ struct ieee80211_sta_ht_cap ht_cap; | ||
+ struct ieee80211_sta_vht_cap vht_cap; | ||
+ struct ieee80211_sta_he_cap he_cap; | ||
+ struct ieee80211_he_6ghz_capa he_6ghz_capa; | ||
+ struct ieee80211_sta_eht_cap eht_cap; | ||
+ | ||
+ struct ieee80211_sta_aggregates agg; | ||
+ | ||
+ u8 rx_nss; | ||
+ enum ieee80211_sta_rx_bandwidth bandwidth; | ||
+ struct ieee80211_sta_txpwr txpwr; | ||
+}; | ||
+ | ||
+/** | ||
* struct ieee80211_sta - station table entry | ||
* | ||
* A station table entry represents a station we are possibly | ||
@@ -2136,6 +2253,10 @@ | ||
struct ieee80211_sta_txpwr txpwr; | ||
|
||
struct ieee80211_txq *txq[IEEE80211_NUM_TIDS + 1]; | ||
+ | ||
+ u16 valid_links; | ||
+ struct ieee80211_link_sta deflink; | ||
+ struct ieee80211_link_sta __rcu *link[IEEE80211_MLD_MAX_NUM_LINKS]; | ||
|
||
/* must be last */ | ||
u8 drv_priv[] __aligned(sizeof(void *)); | ||
--- a/include/linux/ieee80211.h | ||
+++ b/include/linux/ieee80211.h | ||
@@ -1912,6 +1912,73 @@ | ||
} __packed; | ||
|
||
/** | ||
+ * struct ieee80211_eht_mcs_nss_supp_20mhz_only - EHT 20MHz only station max | ||
+ * supported NSS for per MCS. | ||
+ * | ||
+ * For each field below, bits 0 - 3 indicate the maximal number of spatial | ||
+ * streams for Rx, and bits 4 - 7 indicate the maximal number of spatial streams | ||
+ * for Tx. | ||
+ * | ||
+ * @rx_tx_mcs7_max_nss: indicates the maximum number of spatial streams | ||
+ * supported for reception and the maximum number of spatial streams | ||
+ * supported for transmission for MCS 0 - 7. | ||
+ * @rx_tx_mcs9_max_nss: indicates the maximum number of spatial streams | ||
+ * supported for reception and the maximum number of spatial streams | ||
+ * supported for transmission for MCS 8 - 9. | ||
+ * @rx_tx_mcs11_max_nss: indicates the maximum number of spatial streams | ||
+ * supported for reception and the maximum number of spatial streams | ||
+ * supported for transmission for MCS 10 - 11. | ||
+ * @rx_tx_mcs13_max_nss: indicates the maximum number of spatial streams | ||
+ * supported for reception and the maximum number of spatial streams | ||
+ * supported for transmission for MCS 12 - 13. | ||
+ */ | ||
+struct ieee80211_eht_mcs_nss_supp_20mhz_only { | ||
+ u8 rx_tx_mcs7_max_nss; | ||
+ u8 rx_tx_mcs9_max_nss; | ||
+ u8 rx_tx_mcs11_max_nss; | ||
+ u8 rx_tx_mcs13_max_nss; | ||
+}; | ||
+ | ||
+/** | ||
+ * struct ieee80211_eht_mcs_nss_supp_bw - EHT max supported NSS per MCS (except | ||
+ * 20MHz only stations). | ||
+ * | ||
+ * For each field below, bits 0 - 3 indicate the maximal number of spatial | ||
+ * streams for Rx, and bits 4 - 7 indicate the maximal number of spatial streams | ||
+ * for Tx. | ||
+ * | ||
+ * @rx_tx_mcs9_max_nss: indicates the maximum number of spatial streams | ||
+ * supported for reception and the maximum number of spatial streams | ||
+ * supported for transmission for MCS 0 - 9. | ||
+ * @rx_tx_mcs11_max_nss: indicates the maximum number of spatial streams | ||
+ * supported for reception and the maximum number of spatial streams | ||
+ * supported for transmission for MCS 10 - 11. | ||
+ * @rx_tx_mcs13_max_nss: indicates the maximum number of spatial streams | ||
+ * supported for reception and the maximum number of spatial streams | ||
+ * supported for transmission for MCS 12 - 13. | ||
+ */ | ||
+struct ieee80211_eht_mcs_nss_supp_bw { | ||
+ u8 rx_tx_mcs9_max_nss; | ||
+ u8 rx_tx_mcs11_max_nss; | ||
+ u8 rx_tx_mcs13_max_nss; | ||
+}; | ||
+ | ||
+/** | ||
+ * struct ieee80211_eht_cap_elem_fixed - EHT capabilities fixed data | ||
+ * | ||
+ * This structure is the "EHT Capabilities element" fixed fields as | ||
+ * described in P802.11be_D2.0 section 9.4.2.313. | ||
+ * | ||
+ * @mac_cap_info: MAC capabilities, see IEEE80211_EHT_MAC_CAP* | ||
+ * @phy_cap_info: PHY capabilities, see IEEE80211_EHT_PHY_CAP* | ||
+ */ | ||
+struct ieee80211_eht_cap_elem_fixed { | ||
+ u8 mac_cap_info[2]; | ||
+ u8 phy_cap_info[9]; | ||
+} __packed; | ||
+ | ||
+ | ||
+/** | ||
* struct ieee80211_mu_edca_param_set - MU EDCA Parameter Set element | ||
* | ||
* This structure is the "MU EDCA Parameter Set element" fields as | ||
@@ -2225,6 +2292,12 @@ | ||
#define IEEE80211_HE_PHY_CAP9_NOMIMAL_PKT_PADDING_16US 0x80 | ||
#define IEEE80211_HE_PHY_CAP9_NOMIMAL_PKT_PADDING_RESERVED 0xc0 | ||
#define IEEE80211_HE_PHY_CAP9_NOMIMAL_PKT_PADDING_MASK 0xc0 | ||
+#define IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_0US 0x0 | ||
+#define IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_8US 0x1 | ||
+#define IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_16US 0x2 | ||
+#define IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_RESERVED 0x3 | ||
+#define IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_POS 6 | ||
+#define IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_MASK 0xc0 | ||
|
||
#define IEEE80211_HE_PHY_CAP10_HE_MU_M1RU_MAX_LTF 0x01 | ||
|
||
@@ -3978,5 +4051,8 @@ | ||
IEEE80211_RANGE_PARAMS_MAX_TOTAL_LTF_16, | ||
IEEE80211_RANGE_PARAMS_MAX_TOTAL_LTF_UNSPECIFIED, | ||
}; | ||
+ | ||
+/* multi-link device */ | ||
+#define IEEE80211_MLD_MAX_NUM_LINKS 15 | ||
|
||
#endif /* LINUX_IEEE80211_H */ | ||
--- a/include/net/cfg80211.h | ||
+++ b/include/net/cfg80211.h | ||
@@ -348,6 +348,31 @@ | ||
#define IEEE80211_HE_PPE_THRES_MAX_LEN 25 | ||
|
||
/** | ||
+ * struct ieee80211_eht_mcs_nss_supp - EHT max supported NSS per MCS | ||
+ * | ||
+ * See P802.11be_D1.3 Table 9-401k - "Subfields of the Supported EHT-MCS | ||
+ * and NSS Set field" | ||
+ * | ||
+ * @only_20mhz: MCS/NSS support for 20 MHz-only STA. | ||
+ * @bw: MCS/NSS support for 80, 160 and 320 MHz | ||
+ * @bw._80: MCS/NSS support for BW <= 80 MHz | ||
+ * @bw._160: MCS/NSS support for BW = 160 MHz | ||
+ * @bw._320: MCS/NSS support for BW = 320 MHz | ||
+ */ | ||
+struct ieee80211_eht_mcs_nss_supp { | ||
+ union { | ||
+ struct ieee80211_eht_mcs_nss_supp_20mhz_only only_20mhz; | ||
+ struct { | ||
+ struct ieee80211_eht_mcs_nss_supp_bw _80; | ||
+ struct ieee80211_eht_mcs_nss_supp_bw _160; | ||
+ struct ieee80211_eht_mcs_nss_supp_bw _320; | ||
+ } __packed bw; | ||
+ } __packed; | ||
+} __packed; | ||
+ | ||
+#define IEEE80211_EHT_PPE_THRES_MAX_LEN 32 | ||
+ | ||
+/** | ||
* struct ieee80211_sta_he_cap - STA's HE capabilities | ||
* | ||
* This structure describes most essential parameters needed | ||
@@ -363,6 +388,24 @@ | ||
struct ieee80211_he_cap_elem he_cap_elem; | ||
struct ieee80211_he_mcs_nss_supp he_mcs_nss_supp; | ||
u8 ppe_thres[IEEE80211_HE_PPE_THRES_MAX_LEN]; | ||
+}; | ||
+ | ||
+/** | ||
+ * struct ieee80211_sta_eht_cap - STA's EHT capabilities | ||
+ * | ||
+ * This structure describes most essential parameters needed | ||
+ * to describe 802.11be EHT capabilities for a STA. | ||
+ * | ||
+ * @has_eht: true iff EHT data is valid. | ||
+ * @eht_cap_elem: Fixed portion of the eht capabilities element. | ||
+ * @eht_mcs_nss_supp: The supported NSS/MCS combinations. | ||
+ * @eht_ppe_thres: Holds the PPE Thresholds data. | ||
+ */ | ||
+struct ieee80211_sta_eht_cap { | ||
+ bool has_eht; | ||
+ struct ieee80211_eht_cap_elem_fixed eht_cap_elem; | ||
+ struct ieee80211_eht_mcs_nss_supp eht_mcs_nss_supp; | ||
+ u8 eht_ppe_thres[IEEE80211_EHT_PPE_THRES_MAX_LEN]; | ||
}; | ||
|
||
/** |