git: 4eebd438f8b7 - stable/15 - LinuxKPI: 802.11: add more defines, structures, ...
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 10 Sep 2026 09:48:34 UTC
The branch stable/15 has been updated by bz:
URL: https://cgit.FreeBSD.org/src/commit/?id=4eebd438f8b75d23a7c293d251e7b08de5b86667
commit 4eebd438f8b75d23a7c293d251e7b08de5b86667
Author: Bjoern A. Zeeb <bz@FreeBSD.org>
AuthorDate: 2026-08-12 14:11:36 +0000
Commit: Bjoern A. Zeeb <bz@FreeBSD.org>
CommitDate: 2026-09-10 09:46:52 +0000
LinuxKPI: 802.11: add more defines, structures, ...
Add more defines, structures, sort struct field types, add inline
functions (partially implemented) all needed for the upcoming
espwl(4) wireless driver.
(cherry picked from commit 9b13e6ce5b099af0958a824fa37c70538a8b6d2a)
---
.../linuxkpi/common/include/linux/ieee80211.h | 27 +++++++++--
sys/compat/linuxkpi/common/include/linux/nl80211.h | 6 +++
sys/compat/linuxkpi/common/include/net/cfg80211.h | 54 ++++++++++++++++++----
sys/compat/linuxkpi/common/include/net/mac80211.h | 12 ++++-
4 files changed, 84 insertions(+), 15 deletions(-)
diff --git a/sys/compat/linuxkpi/common/include/linux/ieee80211.h b/sys/compat/linuxkpi/common/include/linux/ieee80211.h
index dede010c57de..a3de8ae9b42f 100644
--- a/sys/compat/linuxkpi/common/include/linux/ieee80211.h
+++ b/sys/compat/linuxkpi/common/include/linux/ieee80211.h
@@ -1,5 +1,6 @@
/*-
* Copyright (c) 2020-2026 The FreeBSD Foundation
+ * Copyright (c) 2026 Bjoern A. Zeeb
*
* This software was developed by Björn Zeeb under sponsorship from
* the FreeBSD Foundation.
@@ -159,6 +160,13 @@ enum ieee80211_vht_max_ampdu_len_exp {
IEEE80211_VHT_MAX_AMPDU_1024K = 7,
};
+/* 802.11-2020, 9.6.22 VHT Action frame details. */
+enum ieee80211_vht_actioncode {
+ /* VHT Compressed Beamforming = 0, */
+ WLAN_VHT_ACTION_GROUPID_MGMT = 1,
+ /* Operating Mode Notification = 2, */
+};
+
#define IEEE80211_WEP_IV_LEN 3 /* net80211: IEEE80211_WEP_IVLEN */
#define IEEE80211_WEP_ICV_LEN 4
@@ -539,6 +547,7 @@ enum ieee80211_sa_query {
enum ieee80211_category {
WLAN_CATEGORY_BACK = 3,
WLAN_CATEGORY_SA_QUERY = 8, /* net80211::IEEE80211_ACTION_CAT_SA_QUERY */
+ WLAN_CATEGORY_VHT = 21,
};
/* 80211-2020 9.3.3.2 Format of Management frames */
@@ -563,6 +572,14 @@ struct ieee80211_mgmt {
uint16_t listen_interval;
uint8_t variable[0];
} __packed assoc_req;
+ /* 9.3.3.6 Association Response frame format */
+ /* 9.3.3.8 Reassociation Response frame format */
+ struct {
+ uint16_t capab_info;
+ uint16_t status_code;
+ uint16_t aid;
+ uint8_t variable[0];
+ } __packed assoc_resp, reassoc_resp;
/* 9.3.3.10 Probe Request frame format */
struct {
uint8_t variable[0];
@@ -731,15 +748,15 @@ struct ieee80211_trigger {
/* Table 9-29c-Trigger Type subfield encoding */
enum {
IEEE80211_TRIGGER_TYPE_BASIC = 0x0,
+ IEEE80211_TRIGGER_TYPE_BFRP = 0x1,
IEEE80211_TRIGGER_TYPE_MU_BAR = 0x2,
+ IEEE80211_TRIGGER_TYPE_MU_RTS = 0x3,
+ IEEE80211_TRIGGER_TYPE_BSRP = 0x4,
+ IEEE80211_TRIGGER_TYPE_BQRP = 0x6,
+ IEEE80211_TRIGGER_TYPE_NFRP = 0x7,
#if 0
/* Not seen yet. */
- BFRP = 0x1,
- MU-RTS = 0x3,
- BSRP = 0x4,
GCR MU-BAR = 0x5,
- BQRP = 0x6,
- NFRP = 0x7,
/* 0x8..0xf reserved */
#endif
IEEE80211_TRIGGER_TYPE_MASK = 0xf
diff --git a/sys/compat/linuxkpi/common/include/linux/nl80211.h b/sys/compat/linuxkpi/common/include/linux/nl80211.h
index 845ffec4bcba..635ded732d7e 100644
--- a/sys/compat/linuxkpi/common/include/linux/nl80211.h
+++ b/sys/compat/linuxkpi/common/include/linux/nl80211.h
@@ -1,5 +1,6 @@
/*-
* Copyright (c) 2020-2024 The FreeBSD Foundation
+ * Copyright (c) 2026 Bjoern A. Zeeb
*
* This software was developed by Björn Zeeb under sponsorship from
* the FreeBSD Foundation.
@@ -444,6 +445,11 @@ enum nl80211_rxmgmt_flags {
NL80211_RXMGMT_FLAG_EXTERNAL_AUTH = BIT(1),
};
+enum nl80211_radar_event {
+ NL80211_RADAR_CAC_FINISHED,
+ NL80211_RADAR_CAC_STARTED,
+};
+
#define NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY 16
#define NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY 24
diff --git a/sys/compat/linuxkpi/common/include/net/cfg80211.h b/sys/compat/linuxkpi/common/include/net/cfg80211.h
index dedf687d6530..1538f70b58d0 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-2026 The FreeBSD Foundation
- * Copyright (c) 2021-2022 Bjoern A. Zeeb
+ * Copyright (c) 2021-2026 Bjoern A. Zeeb
*
* This software was developed by Björn Zeeb under sponsorship from
* the FreeBSD Foundation.
@@ -64,6 +64,9 @@ extern int linuxkpi_debug_80211;
printf("%s:%d: XXX LKPI80211 IMPROVE " fmt "\n", __func__, __LINE__, ##__VA_ARGS__)
#endif
+#define wiphy_dbg(_wiphy, _fmt, ...) \
+ dev_dbg(&(_wiphy)->dev, _fmt, ##__VA_ARGS__)
+
enum rfkill_hard_block_reasons {
RFKILL_HARD_BLOCK_NOT_OWNER = BIT(0),
};
@@ -1023,12 +1026,14 @@ struct ieee80211_iface_limit {
};
struct ieee80211_iface_combination {
- /* TODO FIXME */
const struct ieee80211_iface_limit *limits;
- int n_limits;
- int max_interfaces, num_different_channels;
- int beacon_int_infra_match, beacon_int_min_gcd;
- int radar_detect_widths;
+ uint32_t num_different_channels;
+ uint32_t beacon_int_min_gcd;
+ uint16_t max_interfaces;
+ uint8_t n_limits;
+ uint8_t radar_detect_widths;
+ uint8_t radar_detect_regions;
+ bool beacon_int_infra_match;
};
struct iface_combination_params {
@@ -1204,6 +1209,8 @@ struct wiphy {
uint8_t nan_supported_bands;
struct wiphy_nan_capa nan_capa;
+ struct list_head wdev_list;
+
int features, hw_version;
int interface_modes, max_match_sets, max_remain_on_channel_duration, max_scan_ssids, max_sched_scan_ie_len, max_sched_scan_plan_interval, max_sched_scan_plan_iterations, max_sched_scan_plans, max_sched_scan_reqs, max_sched_scan_ssids;
int num_iftype_ext_capab;
@@ -1230,11 +1237,13 @@ struct wiphy {
struct wireless_dev {
/* XXX TODO, like ic? */
+ struct wiphy *wiphy;
enum nl80211_iftype iftype;
- uint32_t radio_mask;
- uint8_t address[ETH_ALEN];
+
struct net_device *netdev;
- struct wiphy *wiphy;
+ struct list_head list;
+ uint8_t address[ETH_ALEN];
+ uint32_t radio_mask;
};
struct cfg80211_ops {
@@ -1554,6 +1563,26 @@ cfg80211_chandef_valid(const struct cfg80211_chan_def *chandef)
return (false);
}
+static inline enum nl80211_channel_type
+cfg80211_get_chandef_type(const struct cfg80211_chan_def *chandef)
+{
+
+ switch (chandef->width) {
+ case NL80211_CHAN_WIDTH_20_NOHT:
+ return (NL80211_CHAN_NO_HT);
+ case NL80211_CHAN_WIDTH_20:
+ return (NL80211_CHAN_HT20);
+ case NL80211_CHAN_WIDTH_40:
+ if (chandef->center_freq1 < chandef->chan->center_freq)
+ return (NL80211_CHAN_HT40MINUS);
+ return (NL80211_CHAN_HT40PLUS);
+ default:
+ WARN_ONCE(1, "%s: invalid chandef width %d\n",
+ __func__, chandef->width);
+ return (NL80211_CHAN_NO_HT);
+ }
+}
+
static inline int
cfg80211_chandef_get_width(const struct cfg80211_chan_def *chandef)
{
@@ -1574,6 +1603,13 @@ cfg80211_chandef_dfs_cac_time(struct wiphy *wiphy, const struct cfg80211_chan_de
return (0);
}
+static inline void
+cfg80211_cac_event(struct net_device *netdev, const struct cfg80211_chan_def *chandef,
+ enum nl80211_radar_event re, gfp_t gfp, unsigned int link_id)
+{
+ TODO();
+}
+
static __inline bool
cfg80211_chandef_identical(const struct cfg80211_chan_def *chandef_1,
const struct cfg80211_chan_def *chandef_2)
diff --git a/sys/compat/linuxkpi/common/include/net/mac80211.h b/sys/compat/linuxkpi/common/include/net/mac80211.h
index 5555e14b06f9..83521c2fabaf 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-2026 The FreeBSD Foundation
- * Copyright (c) 2020-2025 Bjoern A. Zeeb
+ * Copyright (c) 2020-2026 Bjoern A. Zeeb
*
* This software was developed by Björn Zeeb under sponsorship from
* the FreeBSD Foundation.
@@ -471,6 +471,7 @@ enum ieee80211_hw_flags {
IEEE80211_HW_TX_STATUS_NO_AMPDU_LEN,
IEEE80211_HW_HANDLES_QUIET_CSA,
IEEE80211_HW_NO_VIRTUAL_MONITOR,
+ IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING,
/* Keep last. */
NUM_IEEE80211_HW_FLAGS
@@ -647,6 +648,7 @@ struct ieee80211_rx_status {
uint8_t band;
uint8_t chains;
int8_t chain_signal[IEEE80211_MAX_CHAINS];
+ uint8_t antenna;
int8_t signal;
uint8_t enc_flags;
union {
@@ -1056,6 +1058,7 @@ struct ieee80211_ops {
uint64_t (*get_tsf)(struct ieee80211_hw *, struct ieee80211_vif *);
void (*set_tsf)(struct ieee80211_hw *, struct ieee80211_vif *, uint64_t);
void (*offset_tsf)(struct ieee80211_hw *, struct ieee80211_vif *, s64);
+ void (*reset_tsf)(struct ieee80211_hw *, struct ieee80211_vif *);
int (*set_bitrate_mask)(struct ieee80211_hw *, struct ieee80211_vif *, const struct cfg80211_bitrate_mask *);
void (*set_coverage_class)(struct ieee80211_hw *, int, s16);
@@ -2106,6 +2109,13 @@ ieee80211_sta_set_buffered(struct ieee80211_sta *sta, uint8_t tid, bool t)
TODO();
}
+static inline struct sk_buff *
+ieee80211_get_buffered_bc(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
+{
+ TODO("IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING (espwl)");
+ return (NULL);
+}
+
static __inline void
ieee80211_sched_scan_results(struct ieee80211_hw *hw)
{