The branch main has been updated by bz:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=9b13e6ce5b099af0958a824fa37c70538a8b6d2a

commit 9b13e6ce5b099af0958a824fa37c70538a8b6d2a
Author:     Bjoern A. Zeeb <[email protected]>
AuthorDate: 2026-08-12 14:11:36 +0000
Commit:     Bjoern A. Zeeb <[email protected]>
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)
 {

Reply via email to