]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: ieee80211: define some UHR link reconfiguration frame types
authorJohannes Berg <johannes.berg@intel.com>
Fri, 29 May 2026 08:24:54 +0000 (10:24 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 3 Jun 2026 12:11:56 +0000 (14:11 +0200)
Define some values needed for UHR link reconfiguration frames,
in particular to prepare for UHR mode change request/handling.

Link: https://patch.msgid.link/20260529102644.03029bae6447.If22b0c1e10d9db712dca408a420469b3d385b4ea@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/linux/ieee80211-uhr.h
include/linux/ieee80211.h

index f4f4bd8256dff06c7be31c046fdc7ef1537a79d6..71faf4a6825e8139bd21a9542c94d2a819bbf934 100644 (file)
@@ -8,6 +8,7 @@
 #define LINUX_IEEE80211_UHR_H
 
 #include <linux/types.h>
+#include <linux/bitfield.h>
 #include <linux/if_ether.h>
 
 #define IEEE80211_UHR_OPER_PARAMS_DPS_ENA              0x0001
@@ -463,4 +464,54 @@ struct ieee80211_smd_info {
        __le16 timeout;
 } __packed;
 
+enum ieee80211_protected_uhr_action {
+       IEEE80211_PROTECTED_UHR_ACTION_LINK_RECONFIG_REQUEST    = 0,
+       IEEE80211_PROTECTED_UHR_ACTION_LINK_RECONFIG_RESPONSE   = 1,
+       IEEE80211_PROTECTED_UHR_ACTION_LINK_RECONFIG_NOTIFY     = 2,
+};
+
+enum ieee80211_uhr_link_reconfig_request_type {
+       IEEE80211_UHR_LINK_RECONFIG_REQUEST_ST_PREP             = 0,
+       IEEE80211_UHR_LINK_RECONFIG_REQUEST_ST_EXEC             = 1,
+       IEEE80211_UHR_LINK_RECONFIG_REQUEST_OMP_REQUEST         = 3,
+};
+
+enum ieee80211_uhr_link_reconfig_response_type {
+       IEEE80211_UHR_LINK_RECONFIG_RESPONSE_ST_PREP            = 0,
+       IEEE80211_UHR_LINK_RECONFIG_RESPONSE_ST_EXEC            = 1,
+};
+
+enum ieee80211_uhr_link_reconfig_notify_type {
+       IEEE80211_UHR_LINK_RECONFIG_NOTIFY_DL_DRAINED           = 2,
+       IEEE80211_UHR_LINK_RECONFIG_NOTIFY_OMP_RESPONSE         = 3,
+};
+
+enum ieee80211_uhr_mode_change_control {
+       IEEE80211_UHR_MODE_CHANGE_CONTROL_MODE_ID               = 0x003f,
+       IEEE80211_UHR_MODE_CHANGE_CONTROL_MODE_ENABLE           = 0x0040,
+       IEEE80211_UHR_MODE_CHANGE_CONTROL_MODE_UPDATE           = 0x0080,
+       IEEE80211_UHR_MODE_CHANGE_CONTROL_MODE_LENGTH           = 0x0f00,
+       IEEE80211_UHR_MODE_CHANGE_CONTROL_MODE_SPECIFIC         = 0xf000,
+};
+
+enum ieee80211_uhr_mode_change_mode_id {
+       IEEE80211_UHR_MODE_CHANGE_MODE_ID_DPS                   = 0,
+       IEEE80211_UHR_MODE_CHANGE_MODE_ID_NPCA                  = 1,
+       IEEE80211_UHR_MODE_CHANGE_MODE_ID_DUO                   = 2,
+       IEEE80211_UHR_MODE_CHANGE_MODE_ID_DSO                   = 3,
+       IEEE80211_UHR_MODE_CHANGE_MODE_ID_P_EDCA                = 4,
+       IEEE80211_UHR_MODE_CHANGE_MODE_ID_ELR_RX                = 5,
+       IEEE80211_UHR_MODE_CHANGE_MODE_ID_AOM                   = 6,
+       IEEE80211_UHR_MODE_CHANGE_MODE_ID_LLI                   = 7,
+       IEEE80211_UHR_MODE_CHANGE_MODE_ID_CO_BF                 = 8,
+       IEEE80211_UHR_MODE_CHANGE_MODE_ID_CO_SR                 = 9,
+       IEEE80211_UHR_MODE_CHANGE_MODE_ID_EMLSR                 = 10,
+       IEEE80211_UHR_MODE_CHANGE_MODE_ID_DBE                   = 11,
+};
+
+struct ieee80211_uhr_mode_change_tuple {
+       __le16 control;
+       u8 variable[];
+} __packed;
+
 #endif /* LINUX_IEEE80211_UHR_H */
index 11106589acc6fd3f1f694889e5ef3b4f4c9e3e90..d40484451e9a283c03b2e02eb0e43a87ed0492a7 100644 (file)
@@ -1174,6 +1174,22 @@ struct ieee80211_mgmt {
                                        u8 control;
                                        u8 variable[];
                                } __packed eml_omn;
+                               struct {
+                                       u8 dialog_token;
+                                       u8 type;
+                                       u8 variable[];
+                               } __packed uhr_link_reconf_req;
+                               struct {
+                                       u8 dialog_token;
+                                       u8 type;
+                                       u8 count;
+                                       u8 variable[];
+                               } __packed uhr_link_reconf_resp;
+                               struct {
+                                       u8 dialog_token;
+                                       u8 type;
+                                       u8 variable[];
+                               } __packed uhr_link_reconf_notif;
                        };
                } __packed action;
                DECLARE_FLEX_ARRAY(u8, body); /* Generic frame body */
@@ -1837,6 +1853,7 @@ enum ieee80211_category {
        WLAN_CATEGORY_VHT = 21,
        WLAN_CATEGORY_S1G = 22,
        WLAN_CATEGORY_PROTECTED_EHT = 37,
+       WLAN_CATEGORY_PROTECTED_UHR = 43,
        WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126,
        WLAN_CATEGORY_VENDOR_SPECIFIC = 127,
 };