The branch main has been updated by bz:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=800aa9cd3d8050c1d873a1db02d9a546dca8c42e

commit 800aa9cd3d8050c1d873a1db02d9a546dca8c42e
Author:     Bjoern A. Zeeb <[email protected]>
AuthorDate: 2022-09-09 18:40:23 +0000
Commit:     Bjoern A. Zeeb <[email protected]>
CommitDate: 2022-09-09 18:40:23 +0000

    LinuxKPI: 80211 (+net80211): update and cleanup headers
    
    Fix types for various struct fields (initially added as int).
    
    Move structs and inline functions logically together, e.g., for wowlan.
    Add more skeleton functions and #defines needed for iwlwifi d3.c
    in the future.
    
    Add struct ieee80211_vht_cap (without "_ie") to net80211 and remove
    duplicate definitions in LinuxKPI headers now using net80211 structs.
    For now leave ieee80211_ie_vhtcap in net80211.  I am not sure yet if we
    actually need it as such.  That'll be cleaned up with more VHT updates
    in net80211 in the future.
    
    No functional changes in currently compiled code intended.
    
    Try to implement ieee80211_action_contains_tpc() as I ran into it with
    an older iwlwifi chipset.  This depends on c994352a8841eb453.
    
    Sponsored by:   The FreeBSD Foundation
    MFC after:      2 weeks
---
 .../linuxkpi/common/include/linux/ieee80211.h      |  35 ++--
 sys/compat/linuxkpi/common/include/linux/nl80211.h |   2 +
 sys/compat/linuxkpi/common/include/net/cfg80211.h  | 114 +++++++-----
 sys/compat/linuxkpi/common/include/net/mac80211.h  | 191 +++++++++++++++++----
 sys/net80211/ieee80211.h                           |   6 +
 5 files changed, 251 insertions(+), 97 deletions(-)

diff --git a/sys/compat/linuxkpi/common/include/linux/ieee80211.h 
b/sys/compat/linuxkpi/common/include/linux/ieee80211.h
index 4259018a179a..9c65b4045cbe 100644
--- a/sys/compat/linuxkpi/common/include/linux/ieee80211.h
+++ b/sys/compat/linuxkpi/common/include/linux/ieee80211.h
@@ -132,7 +132,9 @@ enum wlan_ht_cap_sm_ps {
 
 #define        WLAN_KEY_LEN_WEP40                      5
 #define        WLAN_KEY_LEN_WEP104                     13
+#define        WLAN_KEY_LEN_TKIP                       32
 #define        WLAN_KEY_LEN_CCMP                       16
+#define        WLAN_KEY_LEN_GCMP                       16
 #define        WLAN_KEY_LEN_GCMP_256                   32
 
 /* 802.11-2020, 9.4.2.55.3, Table 9-185 Subfields of the A-MPDU Parameters 
field */
@@ -243,6 +245,8 @@ enum ieee80211_ac_numbers {
 /* XXX net80211 calls these IEEE80211_HTCAP_* */
 #define        IEEE80211_HT_CAP_LDPC_CODING            0x0001  /* 
IEEE80211_HTCAP_LDPC */
 #define        IEEE80211_HT_CAP_SUP_WIDTH_20_40        0x0002  /* 
IEEE80211_HTCAP_CHWIDTH40 */
+#define        IEEE80211_HT_CAP_SM_PS                  0x000c  /* 
IEEE80211_HTCAP_SMPS */
+#define        IEEE80211_HT_CAP_SM_PS_SHIFT            2
 #define        IEEE80211_HT_CAP_GRN_FLD                0x0010  /* 
IEEE80211_HTCAP_GREENFIELD */
 #define        IEEE80211_HT_CAP_SGI_20                 0x0020  /* 
IEEE80211_HTCAP_SHORTGI20 */
 #define        IEEE80211_HT_CAP_SGI_40                 0x0040  /* 
IEEE80211_HTCAP_SHORTGI40 */
@@ -251,8 +255,6 @@ enum ieee80211_ac_numbers {
 #define        IEEE80211_HT_CAP_RX_STBC_SHIFT          8       /* 
IEEE80211_HTCAP_RXSTBC_S */
 #define        IEEE80211_HT_CAP_MAX_AMSDU              0x0800  /* 
IEEE80211_HTCAP_MAXAMSDU */
 #define        IEEE80211_HT_CAP_DSSSCCK40              0x1000  /* 
IEEE80211_HTCAP_DSSSCCK40 */
-#define        IEEE80211_HT_CAP_SM_PS                  0x000c  /* 
IEEE80211_HTCAP_SMPS */
-#define        IEEE80211_HT_CAP_SM_PS_SHIFT            2
 #define        IEEE80211_HT_CAP_LSIG_TXOP_PROT         0x8000  /* 
IEEE80211_HTCAP_LSIGTXOPPROT */
 
 #define        IEEE80211_HT_MCS_TX_DEFINED             0x0001
@@ -269,13 +271,6 @@ struct ieee80211_mcs_info {
        uint8_t         __reserved[3];
 };
 
-struct vht_mcs {
-       uint16_t        rx_mcs_map;
-       uint16_t        rx_highest;
-       uint16_t        tx_mcs_map;
-       uint16_t        tx_highest;
-};
-
 /* 802.11-2020, 9.4.2.55.1 HT Capabilities element structure */
 struct ieee80211_ht_cap {
        uint16_t                                cap_info;
@@ -286,11 +281,6 @@ struct ieee80211_ht_cap {
        uint8_t                                 antenna_selection_info;
 };
 
-struct ieee80211_vht_cap {
-       __le32                                  vht_cap_info;
-       struct vht_mcs                          supp_mcs;
-};
-
 #define        IEEE80211_HT_MAX_AMPDU_FACTOR           13
 
 enum ieee80211_ht_max_ampdu_len {
@@ -447,7 +437,7 @@ enum ieee80211_category {
        WLAN_CATEGORY_BACK              = 3,
 };
 
-/* 9.3.3.2 Format of Management frames */
+/* 80211-2020 9.3.3.2 Format of Management frames */
 struct ieee80211_mgmt {
        __le16          frame_control;
         __le16         duration_id;
@@ -480,6 +470,16 @@ struct ieee80211_mgmt {
                        uint8_t         category;
                        /* 9.6.8 Public Action details */
                        union {
+                               /* 9.6.2.5 TPC Report frame format */
+                               struct {
+                                       uint8_t spec_mgmt;
+                                       uint8_t dialog_token;
+                                       /* uint32_t tpc_rep_elem:: */
+                                       uint8_t tpc_elem_id;
+                                       uint8_t tpc_elem_length;
+                                       uint8_t tpc_elem_tx_power;
+                                       uint8_t tpc_elem_link_margin;
+                               } tpc_report;
                                /* 9.6.8.33 Fine Timing Measurement frame 
format */
                                struct {
                                        uint8_t dialog_token;
@@ -669,9 +669,8 @@ ieee80211_is_data_qos(__le16 fc)
 {
        __le16 v;
 
-       fc &= htole16(IEEE80211_FC0_SUBTYPE_QOS_DATA | IEEE80211_FC0_TYPE_MASK |
-           IEEE80211_FC0_VERSION_MASK);
-       v = htole16(IEEE80211_FC0_QOSDATA);
+       fc &= htole16(IEEE80211_FC0_SUBTYPE_QOS_DATA | IEEE80211_FC0_TYPE_MASK);
+       v = htole16(IEEE80211_FC0_SUBTYPE_QOS_DATA | IEEE80211_FC0_TYPE_DATA);
 
        return (fc == v);
 }
diff --git a/sys/compat/linuxkpi/common/include/linux/nl80211.h 
b/sys/compat/linuxkpi/common/include/linux/nl80211.h
index a85abfc10453..c4c46fbd90cb 100644
--- a/sys/compat/linuxkpi/common/include/linux/nl80211.h
+++ b/sys/compat/linuxkpi/common/include/linux/nl80211.h
@@ -367,6 +367,8 @@ enum nl80211_probe_resp_offload_support {
 };
 
 #define        NL80211_KCK_LEN                         16
+#define        NL80211_KCK_EXT_LEN                     24
 #define        NL80211_KEK_LEN                         16
+#define        NL80211_KEK_EXT_LEN                     32
 #define        NL80211_REPLAY_CTR_LEN                  8
 #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 e7301e7b85cb..89b7af916573 100644
--- a/sys/compat/linuxkpi/common/include/net/cfg80211.h
+++ b/sys/compat/linuxkpi/common/include/net/cfg80211.h
@@ -51,7 +51,7 @@ extern int linuxkpi_debug_80211;
 #ifndef        D80211_IMPROVE
 #define        D80211_IMPROVE          0x2
 #endif
-#define        TODO()          if (linuxkpi_debug_80211 & D80211_TODO)         
\
+#define        TODO(...)               if (linuxkpi_debug_80211 & D80211_TODO) 
\
     printf("%s:%d: XXX LKPI80211 TODO\n", __func__, __LINE__)
 #define        IMPROVE(...)    if (linuxkpi_debug_80211 & D80211_IMPROVE)      
\
     printf("%s:%d: XXX LKPI80211 IMPROVE\n", __func__, __LINE__)
@@ -76,6 +76,7 @@ enum cfg80211_rate_info_flags {
        RATE_INFO_FLAGS_MCS             = BIT(1),
        RATE_INFO_FLAGS_VHT_MCS         = BIT(2),
        RATE_INFO_FLAGS_HE_MCS          = BIT(3),
+       /* Max 8 bits as used in struct rate_info. */
 };
 
 extern const uint8_t rfc1042_header[6];
@@ -131,15 +132,14 @@ struct linuxkpi_ieee80211_channel {
 
 struct cfg80211_bitrate_mask {
        /* TODO FIXME */
-       /* This is so weird but nothing else works out...*/
        struct {
-               uint64_t                        legacy;         /* XXX? */
+               uint32_t                        legacy;
                uint8_t                         
ht_mcs[IEEE80211_HT_MCS_MASK_LEN];
-               uint16_t                        vht_mcs[16];    /* XXX? */
-               uint16_t                        he_mcs[16];     /* XXX? */
+               uint16_t                        vht_mcs[8];
+               uint16_t                        he_mcs[8];
                enum nl80211_txrate_gi          gi;
                enum nl80211_he_gi              he_gi;
-               uint8_t                         he_ltf;
+               uint8_t                         he_ltf;         /* XXX enum? */
        } control[NUM_NL80211_BANDS];
 };
 
@@ -154,8 +154,14 @@ enum rate_info_bw {
 };
 
 struct rate_info {
-       /* TODO FIXME */
-       int     bw, flags, he_dcm, he_gi, he_ru_alloc, legacy, mcs, nss;
+       uint8_t                                 flags;                  /* enum 
cfg80211_rate_info_flags */
+       uint8_t                                 bw;
+       uint16_t                                legacy;
+       uint8_t                                 mcs;
+       uint8_t                                 nss;
+       uint8_t                                 he_dcm;
+       uint8_t                                 he_gi;
+       uint8_t                                 he_ru_alloc;
 };
 
 struct ieee80211_rate {
@@ -223,9 +229,9 @@ struct ieee80211_sta_ht_cap {
 
 struct ieee80211_sta_vht_cap {
                /* TODO FIXME */
-       bool                    vht_supported;
-       uint32_t                cap;
-       struct vht_mcs          vht_mcs;
+       bool                            vht_supported;
+       uint32_t                        cap;
+       struct ieee80211_vht_mcs_info   vht_mcs;
 };
 
 enum ieee80211_vht_opmode {
@@ -514,33 +520,6 @@ struct cfg80211_pmksa {
        const uint8_t                   *pmkid;
 };
 
-struct cfg80211_wowlan_nd_match {
-       /* XXX TODO */
-       struct cfg80211_ssid            ssid;
-       int                             n_channels;
-       uint32_t                        channels[0];    /* freq! = 
ieee80211_channel_to_frequency() */
-};
-
-struct cfg80211_wowlan_nd_info {
-       /* XXX TODO */
-       int                             n_matches;
-       struct cfg80211_wowlan_nd_match *matches[0];
-};
-
-enum wiphy_wowlan_support_flags {
-       WIPHY_WOWLAN_DISCONNECT,
-       WIPHY_WOWLAN_GTK_REKEY_FAILURE,
-       WIPHY_WOWLAN_MAGIC_PKT,
-       WIPHY_WOWLAN_SUPPORTS_GTK_REKEY,
-       WIPHY_WOWLAN_NET_DETECT,
-};
-
-struct wiphy_wowlan_support {
-       /* XXX TODO */
-       enum wiphy_wowlan_support_flags         flags;
-       int     max_nd_match_sets, max_pkt_offset, n_patterns, pattern_max_len, 
pattern_min_len;
-};
-
 struct station_del_parameters {
        /* XXX TODO */
        const uint8_t                           *mac;
@@ -847,9 +826,56 @@ struct cfg80211_pkt_pattern {
        int                                     pkt_offset;
 };
 
+struct cfg80211_wowlan_nd_match {
+       /* XXX TODO */
+       struct cfg80211_ssid            ssid;
+       int                             n_channels;
+       uint32_t                        channels[0];    /* freq! = 
ieee80211_channel_to_frequency() */
+};
+
+struct cfg80211_wowlan_nd_info {
+       /* XXX TODO */
+       int                             n_matches;
+       struct cfg80211_wowlan_nd_match *matches[0];
+};
+
+enum wiphy_wowlan_support_flags {
+       WIPHY_WOWLAN_DISCONNECT,
+       WIPHY_WOWLAN_GTK_REKEY_FAILURE,
+       WIPHY_WOWLAN_MAGIC_PKT,
+       WIPHY_WOWLAN_SUPPORTS_GTK_REKEY,
+       WIPHY_WOWLAN_NET_DETECT,
+};
+
+struct wiphy_wowlan_support {
+       /* XXX TODO */
+       enum wiphy_wowlan_support_flags         flags;
+       int     max_nd_match_sets, max_pkt_offset, n_patterns, pattern_max_len, 
pattern_min_len;
+};
+
+struct cfg80211_wowlan_wakeup {
+       /* XXX TODO */
+       uint16_t                                pattern_idx;
+       bool                                    disconnect;
+       bool                                    eap_identity_req;
+       bool                                    four_way_handshake;
+       bool                                    gtk_rekey_failure;
+       bool                                    magic_pkt;
+       bool                                    rfkill_release;
+       bool                                    tcp_connlost;
+       bool                                    tcp_nomoretokens;
+       bool                                    tcp_match;
+       bool                                    packet_80211;
+       struct cfg80211_wowlan_nd_info          *net_detect;
+       uint8_t                                 *packet;
+       uint16_t                                packet_len;
+       uint16_t                                packet_present_len;
+};
+
 struct cfg80211_wowlan {
        /* XXX TODO */
        int     disconnect, gtk_rekey_failure, magic_pkt;
+       int     eap_identity_req, four_way_handshake, rfkill_release, tcp, any;
        int                                     n_patterns;
        struct cfg80211_sched_scan_request      *nd_config;
        struct cfg80211_pkt_pattern             *patterns;
@@ -857,7 +883,9 @@ struct cfg80211_wowlan {
 
 struct cfg80211_gtk_rekey_data {
        /* XXX TODO */
-       int     kck, kek, replay_ctr;
+       const uint8_t                           *kck, *kek, *replay_ctr;
+       uint32_t                                akm;
+       uint8_t                                 kck_len, kek_len;
 };
 
 struct cfg80211_tid_cfg {
@@ -966,6 +994,7 @@ struct wiphy {
        uint32_t                                flags;
        struct ieee80211_supported_band         *bands[NUM_NL80211_BANDS];
        uint8_t                                 perm_addr[ETH_ALEN];
+       uint16_t                                max_scan_ie_len;
 
        /* XXX TODO */
        const struct cfg80211_pmsr_capabilities *pmsr_capa;
@@ -988,7 +1017,7 @@ struct wiphy {
 
        int     available_antennas_rx, available_antennas_tx;
        int     features, hw_version;
-       int     interface_modes, max_match_sets, 
max_remain_on_channel_duration, max_scan_ie_len, 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     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;
        int     max_ap_assoc_sta, probe_resp_offload, software_iftypes;
        int     bss_select_support, max_num_pmkids, retry_long, retry_short, 
signal_type;
@@ -1218,6 +1247,7 @@ cfg80211_chandef_create(struct cfg80211_chan_def *chandef,
                chandef->center_freq1 = chan->center_freq;
                break;
        default:
+               IMPROVE("Also depends on our manual settings");
                if (chan->flags & IEEE80211_CHAN_NO_HT40)
                        chandef->width = NL80211_CHAN_WIDTH_20;
                else if (chan->flags & IEEE80211_CHAN_NO_80MHZ)
@@ -1340,7 +1370,7 @@ freq_reg_info(struct wiphy *wiphy, uint32_t center_freq)
 
 static __inline struct cfg80211_bss *
 cfg80211_get_bss(struct wiphy *wiphy, struct linuxkpi_ieee80211_channel *chan,
-    uint8_t *bssid, void *p, int x, uint32_t f1, uint32_t f2)
+    const uint8_t *bssid, void *p, int x, uint32_t f1, uint32_t f2)
 {
        TODO();
        return (NULL);
@@ -1696,4 +1726,6 @@ cfg80211_chandef_valid(const struct cfg80211_chan_def 
*chandef)
 #define        ieee80211_regdomain             linuxkpi_ieee80211_regdomain
 #endif
 
+#include <net/mac80211.h>
+
 #endif /* _LINUXKPI_NET_CFG80211_H */
diff --git a/sys/compat/linuxkpi/common/include/net/mac80211.h 
b/sys/compat/linuxkpi/common/include/net/mac80211.h
index 659101dec689..33379900b625 100644
--- a/sys/compat/linuxkpi/common/include/net/mac80211.h
+++ b/sys/compat/linuxkpi/common/include/net/mac80211.h
@@ -162,6 +162,8 @@ enum ieee80211_bss_changed {
 /* Reserved                            14-255 */
 /* Apparently 11ax defines more. Seen (19,20) mentioned. */
 
+#define        TKIP_PN_TO_IV16(_x)             ((uint16_t)(_x & 0xffff))
+#define        TKIP_PN_TO_IV32(_x)             ((uint32_t)((_x >> 16) & 
0xffffffff))
 
 struct ieee80211_sta;
 
@@ -773,6 +775,7 @@ enum ieee80211_iface_iter {
        /* ieee80211_iterate_active_interfaces*(). */
        IEEE80211_IFACE_ITER__ATOMIC    = BIT(6),
        IEEE80211_IFACE_ITER__ACTIVE    = BIT(7),
+       IEEE80211_IFACE_ITER__MTX       = BIT(8),
 };
 
 enum set_key_cmd {
@@ -1491,6 +1494,17 @@ ieee80211_iterate_active_interfaces(struct ieee80211_hw 
*hw,
        linuxkpi_ieee80211_iterate_interfaces(hw, flags, iterfunc, arg);
 }
 
+static __inline void
+ieee80211_iterate_active_interfaces_mtx(struct ieee80211_hw *hw,
+    enum ieee80211_iface_iter flags,
+    void(*iterfunc)(void *, uint8_t *, struct ieee80211_vif *),
+    void *arg)
+{
+       flags |= IEEE80211_IFACE_ITER__ACTIVE;
+       flags |= IEEE80211_IFACE_ITER__MTX;
+       linuxkpi_ieee80211_iterate_interfaces(hw, flags, iterfunc, arg);
+}
+
 static __inline void
 ieee80211_iterate_interfaces(struct ieee80211_hw *hw,
    enum ieee80211_iface_iter flags,
@@ -1621,11 +1635,47 @@ ieee80211_tu_to_usec(unsigned long tu)
 }
 
 
-static __inline int
+static __inline bool
 ieee80211_action_contains_tpc(struct sk_buff *skb)
 {
-       TODO();
-       return (0);
+       struct ieee80211_mgmt *mgmt;
+
+       mgmt = (struct ieee80211_mgmt *)skb->data;
+
+       /* Check that this is a mgmt/action frame? */
+       if (!ieee80211_is_action(mgmt->frame_control))
+               return (false);
+
+       /*
+        * This is a bit convoluted but according to docs both actions
+        * are checked for this.  Kind-of makes sense for the only consumer
+        * (iwlwifi) I am aware off given the txpower fields are at the
+        * same location so firmware can update the value.
+        */
+       /* 80211-2020 9.6.2 Spectrum Management Action frames */
+       /* 80211-2020 9.6.2.5 TPC Report frame format */
+       /* 80211-2020 9.6.6 Radio Measurement action details */
+       /* 80211-2020 9.6.6.4 Link Measurement Report frame format */
+       /* Check that it is Spectrum Management or Radio Measurement? */
+       if (mgmt->u.action.category != IEEE80211_ACTION_CAT_SM &&
+           mgmt->u.action.category != IEEE80211_ACTION_CAT_RADIO_MEASUREMENT)
+               return (false);
+
+       /* Check that it is TPC Report or Link Measurement Report? */
+       KASSERT(IEEE80211_ACTION_SM_TPCREP == 
IEEE80211_ACTION_RADIO_MEASUREMENT_LMREP,
+           ("%s: SM_TPCREP %d != RADIO_MEASUREMENT_LMREP %d\n", __func__,
+           IEEE80211_ACTION_SM_TPCREP, 
IEEE80211_ACTION_RADIO_MEASUREMENT_LMREP));
+       if (mgmt->u.action.u.tpc_report.spec_mgmt != IEEE80211_ACTION_SM_TPCREP)
+               return (false);
+
+       /* 80211-2020 9.4.2.16 TPC Report element */
+       /* Check that the ELEMID and length are correct? */
+       if (mgmt->u.action.u.tpc_report.tpc_elem_id != IEEE80211_ELEMID_TPCREP 
||
+           mgmt->u.action.u.tpc_report.tpc_elem_length != 4)
+               return (false);
+
+       /* All the right fields in the right place. */
+       return (true);
 }
 
 static __inline void
@@ -1867,13 +1917,6 @@ ieee80211_sta_uapsd_trigger(struct ieee80211_sta *sta, 
int ntids)
        TODO();
 }
 
-static __inline void
-ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, uint8_t *addr,
-    uint8_t tid)
-{
-       TODO();
-}
-
 static __inline void
 ieee80211_tkip_add_iv(u8 *crypto_hdr, struct ieee80211_key_conf *keyconf,
     uint64_t pn)
@@ -1926,11 +1969,32 @@ ieee80211_sta_eosp(struct ieee80211_sta *sta)
        TODO();
 }
 
+static __inline int
+ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, uint8_t tid, int x)
+{
+       TODO("rtw8x");
+       return (-EINVAL);
+}
+
+static __inline int
+ieee80211_stop_tx_ba_session(struct ieee80211_sta *sta, uint8_t tid)
+{
+       TODO("rtw89");
+       return (-EINVAL);
+}
+
+static __inline void
+ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, uint8_t *addr,
+    uint8_t tid)
+{
+       TODO("iwlwifi");
+}
+
 static __inline void
 ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, uint8_t *addr,
     uint8_t tid)
 {
-       TODO();
+       TODO("iwlwifi/rtw8x/...");
 }
 
 static __inline void
@@ -1948,7 +2012,8 @@ ieee80211_scan_completed(struct ieee80211_hw *hw,
 }
 
 static __inline struct sk_buff *
-ieee80211_beacon_get(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
+ieee80211_beacon_get(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
+    uint32_t link_id)
 {
        TODO();
        return (NULL);
@@ -2034,20 +2099,6 @@ ieee80211_tx_status_ni(struct ieee80211_hw *hw, struct 
sk_buff *skb)
        ieee80211_tx_status(hw, skb);
 }
 
-static __inline int
-ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, uint8_t tid, int x)
-{
-       TODO();
-       return (-EINVAL);
-}
-
-static __inline int
-ieee80211_stop_tx_ba_session(struct ieee80211_sta *sta, uint8_t tid)
-{
-       TODO();
-       return (-EINVAL);
-}
-
 static __inline void
 ieee80211_tx_info_clear_status(struct ieee80211_tx_info *info)
 {
@@ -2143,13 +2194,6 @@ ieee80211_txq_may_transmit(struct ieee80211_hw *hw, 
struct ieee80211_txq *txq)
        return (false);
 }
 
-static __inline struct ieee80211_txq *
-ieee80211_next_txq(struct ieee80211_hw *hw, uint32_t ac)
-{
-       TODO();
-       return (NULL);
-}
-
 static __inline void
 ieee80211_radar_detected(struct ieee80211_hw *hw)
 {
@@ -2165,30 +2209,39 @@ ieee80211_sta_register_airtime(struct ieee80211_sta 
*sta,
 
 
 static __inline void
-ieee80211_return_txq(struct ieee80211_hw *hw,
-    struct ieee80211_txq *txq, bool _t)
+ieee80211_txq_schedule_start(struct ieee80211_hw *hw, uint8_t ac)
 {
        TODO();
 }
 
 static __inline void
-ieee80211_txq_schedule_end(struct ieee80211_hw *hw, uint32_t ac)
+ieee80211_txq_schedule_end(struct ieee80211_hw *hw, uint8_t ac)
 {
+       /* DO_NADA; */
+}
+
+static __inline struct ieee80211_txq *
+ieee80211_next_txq(struct ieee80211_hw *hw, uint8_t ac)
+{
+
        TODO();
+       return (NULL);
 }
 
 static __inline void
-ieee80211_txq_schedule_start(struct ieee80211_hw *hw, uint32_t ac)
+ieee80211_schedule_txq(struct ieee80211_hw *hw, struct ieee80211_txq *txq)
 {
        TODO();
 }
 
 static __inline void
-ieee80211_schedule_txq(struct ieee80211_hw *hw, struct ieee80211_txq *txq)
+ieee80211_return_txq(struct ieee80211_hw *hw, struct ieee80211_txq *txq,
+    bool withoutpkts)
 {
        TODO();
 }
 
+
 static __inline void
 ieee80211_beacon_set_cntdwn(struct ieee80211_vif *vif, u8 counter)
 {
@@ -2314,6 +2367,68 @@ linuxkpi_ieee80211_send_bar(struct ieee80211_vif *vif, 
uint8_t *ra, uint16_t tid
        TODO();
 }
 
+static __inline void
+ieee80211_resume_disconnect(struct ieee80211_vif *vif)
+{
+        TODO();
+        return;
+}
+
+static __inline int
+ieee80211_data_to_8023(struct sk_buff *skb, const uint8_t *addr,
+     enum nl80211_iftype iftype)
+{
+        TODO();
+        return (-1);
+}
+
+static __inline void
+ieee80211_get_tkip_p1k_iv(struct ieee80211_key_conf *key,
+    uint32_t iv32, uint16_t *p1k)
+{
+        TODO();
+        return;
+}
+
+static __inline struct ieee80211_key_conf *
+ieee80211_gtk_rekey_add(struct ieee80211_vif *vif,
+    struct ieee80211_key_conf *key)
+{
+        TODO();
+        return (NULL);
+}
+
+static __inline void
+ieee80211_gtk_rekey_notify(struct ieee80211_vif *vif, const uint8_t *bssid,
+    const uint8_t *replay_ctr, gfp_t gfp)
+{
+        TODO();
+        return;
+}
+
+static __inline void
+ieee80211_remove_key(struct ieee80211_key_conf *key)
+{
+        TODO();
+        return;
+}
+
+static __inline void
+ieee80211_set_key_rx_seq(struct ieee80211_key_conf *key, int tid,
+    struct ieee80211_key_seq *seq)
+{
+        TODO();
+        return;
+}
+
+static __inline void
+ieee80211_report_wowlan_wakeup(struct ieee80211_vif *vif,
+    struct cfg80211_wowlan_wakeup *wakeup, gfp_t gfp)
+{
+        TODO();
+        return;
+}
+
 #define        ieee80211_send_bar(_v, _r, _t, _s)                              
\
     linuxkpi_ieee80211_send_bar(_v, _r, _t, _s)
 
diff --git a/sys/net80211/ieee80211.h b/sys/net80211/ieee80211.h
index f4efc90dfb22..42f864e8aed0 100644
--- a/sys/net80211/ieee80211.h
+++ b/sys/net80211/ieee80211.h
@@ -865,6 +865,12 @@ struct ieee80211_vht_mcs_info {
        uint16_t tx_highest;
 } __packed;
 
+/* 802.11ac-2013, 8.4.2.160.1 VHT Capabilities element structure */
+struct ieee80211_vht_cap {
+       uint32_t                        vht_cap_info;
+       struct ieee80211_vht_mcs_info   supp_mcs;
+} __packed;
+
 /* VHT capabilities element: 802.11ac-2013 8.4.2.160 */
 struct ieee80211_ie_vhtcap {
        uint8_t ie;

Reply via email to