git: d12ea01e39ea - stable/13 - LinuxKPI: 802.11 update compat code for driver updates
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 16 Jan 2022 23:21:00 UTC
The branch stable/13 has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=d12ea01e39eaa099c1f9fede29e7bf01a9259259 commit d12ea01e39eaa099c1f9fede29e7bf01a9259259 Author: Bjoern A. Zeeb <bz@FreeBSD.org> AuthorDate: 2022-01-09 18:08:47 +0000 Commit: Bjoern A. Zeeb <bz@FreeBSD.org> CommitDate: 2022-01-16 22:39:23 +0000 LinuxKPI: 802.11 update compat code for driver updates Add more (dummy in case of HE) defines, structs, functions and another mac80211 function pointer needed to update and support recent drivers. (cherry picked from commit 51b461b3db33b7cd7cbc62c9206568321f7298ad) --- .../linuxkpi/common/include/linux/ieee80211.h | 6 +++ sys/compat/linuxkpi/common/include/linux/nl80211.h | 6 +++ sys/compat/linuxkpi/common/include/net/cfg80211.h | 56 ++++++++++++++++++++-- sys/compat/linuxkpi/common/include/net/mac80211.h | 19 +++++++- 4 files changed, 81 insertions(+), 6 deletions(-) diff --git a/sys/compat/linuxkpi/common/include/linux/ieee80211.h b/sys/compat/linuxkpi/common/include/linux/ieee80211.h index 714a682013ec..1fe295c2ae96 100644 --- a/sys/compat/linuxkpi/common/include/linux/ieee80211.h +++ b/sys/compat/linuxkpi/common/include/linux/ieee80211.h @@ -72,6 +72,8 @@ extern int debug_80211; #define IEEE80211_P2P_OPPPS_CTWINDOW_MASK 0x7f #define IEEE80211_P2P_OPPPS_ENABLE_BIT BIT(7) +#define IEEE80211_QOS_CTL_TAG1D_MASK 0x0007 +#define IEEE80211_QOS_CTL_EOSP 0x0010 #define IEEE80211_QOS_CTL_A_MSDU_PRESENT 0x0080 /* 9.2.4.5.1, Table 9-6 QoS Control Field */ #define IEEE80211_RATE_SHORT_PREAMBLE BIT(0) @@ -109,6 +111,7 @@ enum ieee80211_rate_control_changed_flags { /* 9.4.2.56.3, Table 9-163 Subfields of the A-MPDU Parameters field */ enum ieee80211_min_mpdu_start_spacing { + IEEE80211_HT_MPDU_DENSITY_NONE = 0, IEEE80211_HT_MPDU_DENSITY_4 = 5, /* 4us */ IEEE80211_HT_MPDU_DENSITY_16 = 7, /* 16us */ }; @@ -117,6 +120,7 @@ enum ieee80211_min_mpdu_start_spacing { #define IEEE80211_HT_STBC_PARAM_DUAL_CTS_PROT 0x0080 /* B24.. */ #define IEEE80211_FCTL_STYPE IEEE80211_FC0_SUBTYPE_MASK +#define IEEE80211_FCTL_ORDER (IEEE80211_FC1_ORDER << 8) #define IEEE80211_STYPE_ASSOC_REQ IEEE80211_FC0_SUBTYPE_ASSOC_REQ #define IEEE80211_STYPE_REASSOC_REQ IEEE80211_FC0_SUBTYPE_REASSOC_REQ @@ -308,6 +312,8 @@ enum ieee80211_tx_rate_flags { IEEE80211_TX_RC_VHT_MCS = BIT(6), }; +#define IEEE80211_HT_CTL_LEN 4 + struct ieee80211_hdr { /* net80211::ieee80211_frame */ __le16 frame_control; __le16 duration_id; diff --git a/sys/compat/linuxkpi/common/include/linux/nl80211.h b/sys/compat/linuxkpi/common/include/linux/nl80211.h index 4f0a55c9dbdb..d9d9ba4edba9 100644 --- a/sys/compat/linuxkpi/common/include/linux/nl80211.h +++ b/sys/compat/linuxkpi/common/include/linux/nl80211.h @@ -86,6 +86,7 @@ enum nl80211_scan_flags { NL80211_SCAN_FLAG_OCE_PROBE_REQ_HIGH_TX_RATE = BIT(2), NL80211_SCAN_FLAG_RANDOM_ADDR = BIT(3), NL80211_SCAN_FLAG_COLOCATED_6GHZ = BIT(4), + NL80211_SCAN_FLAG_RANDOM_SN = BIT(5), }; #define NL80211_REGDOM_SET_BY_USER 1 @@ -208,6 +209,7 @@ enum nl80211_ext_feature { NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X, NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_PSK, NL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT, + NL80211_EXT_FEATURE_SCAN_RANDOM_SN, /* Keep this last. */ NUM_NL80211_EXT_FEATURES @@ -305,4 +307,8 @@ enum nl80211_dfs_regions { NL80211_DFS_JP, }; +enum nl80211_sar_type { + NL80211_SAR_TYPE_POWER, +}; + #endif /* _LINUXKPI_LINUX_NL80211_H */ diff --git a/sys/compat/linuxkpi/common/include/net/cfg80211.h b/sys/compat/linuxkpi/common/include/net/cfg80211.h index edecf9bed8a2..d0de3ec95086 100644 --- a/sys/compat/linuxkpi/common/include/net/cfg80211.h +++ b/sys/compat/linuxkpi/common/include/net/cfg80211.h @@ -1,6 +1,6 @@ /*- * Copyright (c) 2020-2021 The FreeBSD Foundation - * Copyright (c) 2021 Bjoern A. Zeeb + * Copyright (c) 2021-2022 Bjoern A. Zeeb * * This software was developed by Björn Zeeb under sponsorship from * the FreeBSD Foundation. @@ -122,6 +122,7 @@ struct cfg80211_bitrate_mask { uint64_t legacy; /* XXX? */ uint8_t ht_mcs[16]; /* XXX? */ uint16_t vht_mcs[16]; /* XXX? */ + uint16_t he_mcs[16]; /* XXX? */ uint8_t gi; /* NL80211_TXRATE_FORCE_LGI enum? */ } control[NUM_NL80211_BANDS]; }; @@ -315,6 +316,28 @@ struct cfg80211_pmsr_result { struct cfg80211_pmsr_ftm_result ftm; }; +struct cfg80211_sar_freq_ranges { + uint32_t start_freq; + uint32_t end_freq; +}; + +struct cfg80211_sar_sub_specs { + uint32_t freq_range_index; + int power; +}; + +struct cfg80211_sar_specs { + enum nl80211_sar_type type; + uint32_t num_sub_specs; + struct cfg80211_sar_sub_specs sub_specs[]; +}; + +struct cfg80211_sar_capa { + enum nl80211_sar_type type; + uint32_t num_freq_ranges; + const struct cfg80211_sar_freq_ranges *freq_ranges; +}; + struct cfg80211_ssid { int ssid_len; uint8_t ssid[IEEE80211_MAX_SSID_LEN]; @@ -600,18 +623,21 @@ struct linuxkpi_ieee80211_regdomain { #define IEEE80211_HE_MAC_CAP2_BSR 0x4 #define IEEE80211_HE_MAC_CAP2_LINK_ADAPTATION 0x8 #define IEEE80211_HE_MAC_CAP2_BCAST_TWT 0x10 +#define IEEE80211_HE_MAC_CAP2_ALL_ACK 0x20 #define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_VHT_2 0x1 #define IEEE80211_HE_MAC_CAP3_OMI_CONTROL 0x2 #define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_1 0x10 -#define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3 0x20 -#define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_MASK 0x30 +#define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_2 0x20 +#define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3 0x40 +#define IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_MASK 0x70 #define IEEE80211_HE_MAC_CAP3_RX_CTRL_FRAME_TO_MULTIBSS 0x80 #define IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU 0x1 #define IEEE80211_HE_MAC_CAP4_BQR 0x2 #define IEEE80211_HE_MAC_CAP4_MULTI_TID_AGG_TX_QOS_B39 0x4 #define IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU 0x8 +#define IEEE80211_HE_MAC_CAP4_OPS 0x10 #define IEEE80211_HE_MAC_CAP5_HE_DYNAMIC_SM_PS 0x1 #define IEEE80211_HE_MAC_CAP5_HT_VHT_TRIG_FRAME_RX 0x2 @@ -633,35 +659,51 @@ struct linuxkpi_ieee80211_regdomain { #define IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G 0x1 #define IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G 0x2 #define IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_IN_2G 0x4 +#define IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G 0x8 #define IEEE80211_HE_PHY_CAP1_DEVICE_CLASS_A 0x1 #define IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD 0x2 #define IEEE80211_HE_PHY_CAP1_MIDAMBLE_RX_TX_MAX_NSTS 0x4 #define IEEE80211_HE_PHY_CAP1_PREAMBLE_PUNC_RX_MASK 0x8 +#define IEEE80211_HE_PHY_CAP1_HE_LTF_AND_GI_FOR_HE_PPDUS_0_8US 0x10 #define IEEE80211_HE_PHY_CAP2_MIDAMBLE_RX_TX_MAX_NSTS 0x1 #define IEEE80211_HE_PHY_CAP2_NDP_4x_LTF_AND_3_2US 0x2 #define IEEE80211_HE_PHY_CAP2_STBC_TX_UNDER_80MHZ 0x4 #define IEEE80211_HE_PHY_CAP2_STBC_RX_UNDER_80MHZ 0x8 +#define IEEE80211_HE_PHY_CAP2_DOPPLER_TX 0x10 #define IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_MASK 0x1 #define IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_NO_DCM 0x2 #define IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_NO_DCM 0x4 #define IEEE80211_HE_PHY_CAP3_DCM_MAX_RX_NSS_1 0x8 #define IEEE80211_HE_PHY_CAP3_DCM_MAX_TX_NSS_1 0x10 +#define IEEE80211_HE_PHY_CAP3_SU_BEAMFORMER 0x20 +#define IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_16_QAM 0x40 +#define IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_16_QAM 0x80 +#define IEEE80211_HE_PHY_CAP3_DCM_MAX_TX_NSS_2 0x100 +#define IEEE80211_HE_PHY_CAP3_RX_PARTIAL_BW_SU_IN_20MHZ_MU 0x200 #define IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_UNDER_80MHZ_8 0x1 #define IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_ABOVE_80MHZ_8 0x2 #define IEEE80211_HE_PHY_CAP4_SU_BEAMFORMEE 0x4 +#define IEEE80211_HE_PHY_CAP4_MU_BEAMFORMER 0x8 +#define IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_UNDER_80MHZ_4 0x10 #define IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_ABOVE_80MHZ_2 0x1 #define IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_2 0x2 +#define IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK 0x4 +#define IEEE80211_HE_PHY_CAP5_NG16_MU_FEEDBACK 0x8 +#define IEEE80211_HE_PHY_CAP5_NG16_SU_FEEDBACK 0x10 #define IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT 0x1 #define IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMER_FB 0x2 #define IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMER_FB 0x4 -#define IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMING_FB 0x10 +#define IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMING_FB 0x8 #define IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB 0x20 +#define IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_42_SU 0x40 +#define IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_75_MU 0x80 +#define IEEE80211_HE_PHY_CAP6_PARTIAL_BW_EXT_RANGE 0x80 #define IEEE80211_HE_PHY_CAP7_HE_SU_MU_PPDU_4XLTF_AND_08_US_GI 0x1 #define IEEE80211_HE_PHY_CAP7_MAX_NC_1 0x2 @@ -677,6 +719,8 @@ struct linuxkpi_ieee80211_regdomain { #define IEEE80211_HE_PHY_CAP8_DCM_MAX_RU_2x996 0x8 #define IEEE80211_HE_PHY_CAP8_DCM_MAX_RU_242 0x10 #define IEEE80211_HE_PHY_CAP8_HE_ER_SU_PPDU_4XLTF_AND_08_US_GI 0x20 +#define IEEE80211_HE_PHY_CAP8_DCM_MAX_RU_996 0x40 +#define IEEE80211_HE_PHY_CAP8_HE_ER_SU_1XLTF_AND_08_US_GI 0x80 #define IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_0US 0x1 #define IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_16US 0x2 @@ -688,6 +732,7 @@ struct linuxkpi_ieee80211_regdomain { #define IEEE80211_HE_PHY_CAP9_RX_FULL_BW_SU_USING_MU_WITH_NON_COMP_SIGB 0x80 #define IEEE80211_HE_PHY_CAP9_RX_1024_QAM_LESS_THAN_242_TONE_RU 0x100 #define IEEE80211_HE_PHY_CAP9_TX_1024_QAM_LESS_THAN_242_TONE_RU 0x200 +#define IEEE80211_HE_PHY_CAP9_LONGER_THAN_16_SIGB_OFDM_SYM 0x400 #define IEEE80211_HE_PHY_CAP10_HE_MU_M1RU_MAX_LTF 0x1 @@ -850,6 +895,7 @@ struct wiphy { /* XXX TODO */ const struct cfg80211_pmsr_capabilities *pmsr_capa; + const struct cfg80211_sar_capa *sar_capa; const struct wiphy_iftype_ext_capab *iftype_ext_capab; const struct linuxkpi_ieee80211_regdomain *regd; char fw_version[64]; /* XXX TODO */ @@ -1144,7 +1190,7 @@ regulatory_set_wiphy_regd(struct wiphy *wiphy, } static __inline int -regulatory_hint(struct wiphy *wiphy, uint8_t *alpha2) +regulatory_hint(struct wiphy *wiphy, const uint8_t *alpha2) { TODO(); return (-ENXIO); diff --git a/sys/compat/linuxkpi/common/include/net/mac80211.h b/sys/compat/linuxkpi/common/include/net/mac80211.h index ffba78be2fed..15ad25cf3a19 100644 --- a/sys/compat/linuxkpi/common/include/net/mac80211.h +++ b/sys/compat/linuxkpi/common/include/net/mac80211.h @@ -1,6 +1,6 @@ /*- * Copyright (c) 2020-2021 The FreeBSD Foundation - * Copyright (c) 2020-2021 Bjoern A. Zeeb + * Copyright (c) 2020-2022 Bjoern A. Zeeb * * This software was developed by Björn Zeeb under sponsorship from * the FreeBSD Foundation. @@ -95,6 +95,7 @@ enum ieee80211_bss_changed { BSS_CHANGED_PS = BIT(16), BSS_CHANGED_QOS = BIT(17), BSS_CHANGED_TXPOWER = BIT(18), + BSS_CHANGED_HE_BSS_COLOR = BIT(19), }; /* 802.11 Figure 9-256 Suite selector format. [OUI(3), SUITE TYPE(1)] */ @@ -457,6 +458,7 @@ struct ieee80211_rx_status { #define RATE_INFO_BW_160 0x08 #define RATE_INFO_BW_HE_RU 0x10 u8 encoding; +#define RX_ENC_LEGACY 0x00 #define RX_ENC_HE 0x01 #define RX_ENC_HT 0x02 #define RX_ENC_VHT 0x04 @@ -782,6 +784,8 @@ struct ieee80211_ops { int (*join_ibss)(struct ieee80211_hw *, struct ieee80211_vif *); void (*leave_ibss)(struct ieee80211_hw *, struct ieee80211_vif *); + int (*set_sar_specs)(struct ieee80211_hw *, const struct cfg80211_sar_specs *); + /* XXX TODO: get_et_sset_count, get_et_stats, get_et_strings */ }; @@ -1830,6 +1834,13 @@ ieee80211_tx_status_irqsafe(struct ieee80211_hw *hw, struct sk_buff *skb) ieee80211_tx_status(hw, skb); } +static __inline void +ieee80211_tx_status_ni(struct ieee80211_hw *hw, struct sk_buff *skb) +{ + IMPROVE(); + ieee80211_tx_status(hw, skb); +} + static __inline int ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, uint8_t tid, int x) { @@ -1971,6 +1982,12 @@ ieee80211_txq_schedule_start(struct ieee80211_hw *hw, uint32_t ac) TODO(); } +static __inline void +ieee80211_schedule_txq(struct ieee80211_hw *hw, struct ieee80211_txq *txq) +{ + TODO(); +} + static __inline void ieee80211_beacon_set_cntdwn(struct ieee80211_vif *vif, u8 counter) {