git: 9b13e6ce5b09 - main - LinuxKPI: 802.11: add more defines, structures, ...
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 19 Aug 2026 15:43:29 UTC
The branch main has been updated by bz:
URL: https://cgit.FreeBSD.org/src/commit/?id=9b13e6ce5b099af0958a824fa37c70538a8b6d2a
commit 9b13e6ce5b099af0958a824fa37c70538a8b6d2a
Author: Bjoern A. Zeeb <bz@FreeBSD.org>
AuthorDate: 2026-08-12 14:11:36 +0000
Commit: Bjoern A. Zeeb <bz@FreeBSD.org>
CommitDate: 2026-08-19 15:37:42 +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.
MFC after: 3 days
---
.../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 3edcf96292f7..3d5c938835fe 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];
@@ -732,15 +749,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)
{