389-ieee80211-add-TWT-element-definitions.patch 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. From: Lorenzo Bianconi <[email protected]>
  2. Date: Mon, 23 Aug 2021 20:02:38 +0200
  3. Subject: [PATCH] ieee80211: add TWT element definitions
  4. Introduce TWT definitions and TWT Information element structure
  5. in ieee80211.h
  6. Tested-by: Peter Chiu <[email protected]>
  7. Signed-off-by: Lorenzo Bianconi <[email protected]>
  8. Link: https://lore.kernel.org/r/71d8b581fe4b5abc5b92f8d77ac2de3e2f7591b6.1629741512.git.lorenzo@kernel.org
  9. Signed-off-by: Johannes Berg <[email protected]>
  10. ---
  11. --- a/include/linux/ieee80211.h
  12. +++ b/include/linux/ieee80211.h
  13. @@ -1088,6 +1088,48 @@ struct ieee80211_ext {
  14. } u;
  15. } __packed __aligned(2);
  16. +#define IEEE80211_TWT_CONTROL_NDP BIT(0)
  17. +#define IEEE80211_TWT_CONTROL_RESP_MODE BIT(1)
  18. +#define IEEE80211_TWT_CONTROL_NEG_TYPE_BROADCAST BIT(3)
  19. +#define IEEE80211_TWT_CONTROL_RX_DISABLED BIT(4)
  20. +#define IEEE80211_TWT_CONTROL_WAKE_DUR_UNIT BIT(5)
  21. +
  22. +#define IEEE80211_TWT_REQTYPE_REQUEST BIT(0)
  23. +#define IEEE80211_TWT_REQTYPE_SETUP_CMD GENMASK(3, 1)
  24. +#define IEEE80211_TWT_REQTYPE_TRIGGER BIT(4)
  25. +#define IEEE80211_TWT_REQTYPE_IMPLICIT BIT(5)
  26. +#define IEEE80211_TWT_REQTYPE_FLOWTYPE BIT(6)
  27. +#define IEEE80211_TWT_REQTYPE_FLOWID GENMASK(9, 7)
  28. +#define IEEE80211_TWT_REQTYPE_WAKE_INT_EXP GENMASK(14, 10)
  29. +#define IEEE80211_TWT_REQTYPE_PROTECTION BIT(15)
  30. +
  31. +enum ieee80211_twt_setup_cmd {
  32. + TWT_SETUP_CMD_REQUEST,
  33. + TWT_SETUP_CMD_SUGGEST,
  34. + TWT_SETUP_CMD_DEMAND,
  35. + TWT_SETUP_CMD_GROUPING,
  36. + TWT_SETUP_CMD_ACCEPT,
  37. + TWT_SETUP_CMD_ALTERNATE,
  38. + TWT_SETUP_CMD_DICTATE,
  39. + TWT_SETUP_CMD_REJECT,
  40. +};
  41. +
  42. +struct ieee80211_twt_params {
  43. + __le16 req_type;
  44. + __le64 twt;
  45. + u8 min_twt_dur;
  46. + __le16 mantissa;
  47. + u8 channel;
  48. +} __packed;
  49. +
  50. +struct ieee80211_twt_setup {
  51. + u8 dialog_token;
  52. + u8 element_id;
  53. + u8 length;
  54. + u8 control;
  55. + u8 params[];
  56. +} __packed;
  57. +
  58. struct ieee80211_mgmt {
  59. __le16 frame_control;
  60. __le16 duration;
  61. @@ -1252,6 +1294,10 @@ struct ieee80211_mgmt {
  62. __le16 toa_error;
  63. u8 variable[0];
  64. } __packed ftm;
  65. + struct {
  66. + u8 action_code;
  67. + u8 variable[];
  68. + } __packed s1g;
  69. } u;
  70. } __packed action;
  71. } u;
  72. @@ -2881,6 +2927,7 @@ enum ieee80211_eid {
  73. WLAN_EID_AID_RESPONSE = 211,
  74. WLAN_EID_S1G_BCN_COMPAT = 213,
  75. WLAN_EID_S1G_SHORT_BCN_INTERVAL = 214,
  76. + WLAN_EID_S1G_TWT = 216,
  77. WLAN_EID_S1G_CAPABILITIES = 217,
  78. WLAN_EID_VENDOR_SPECIFIC = 221,
  79. WLAN_EID_QOS_PARAMETER = 222,
  80. @@ -2950,6 +2997,7 @@ enum ieee80211_category {
  81. WLAN_CATEGORY_FST = 18,
  82. WLAN_CATEGORY_UNPROT_DMG = 20,
  83. WLAN_CATEGORY_VHT = 21,
  84. + WLAN_CATEGORY_S1G = 22,
  85. WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126,
  86. WLAN_CATEGORY_VENDOR_SPECIFIC = 127,
  87. };
  88. @@ -3023,6 +3071,20 @@ enum ieee80211_key_len {
  89. WLAN_KEY_LEN_BIP_GMAC_256 = 32,
  90. };
  91. +enum ieee80211_s1g_actioncode {
  92. + WLAN_S1G_AID_SWITCH_REQUEST,
  93. + WLAN_S1G_AID_SWITCH_RESPONSE,
  94. + WLAN_S1G_SYNC_CONTROL,
  95. + WLAN_S1G_STA_INFO_ANNOUNCE,
  96. + WLAN_S1G_EDCA_PARAM_SET,
  97. + WLAN_S1G_EL_OPERATION,
  98. + WLAN_S1G_TWT_SETUP,
  99. + WLAN_S1G_TWT_TEARDOWN,
  100. + WLAN_S1G_SECT_GROUP_ID_LIST,
  101. + WLAN_S1G_SECT_ID_FEEDBACK,
  102. + WLAN_S1G_TWT_INFORMATION = 11,
  103. +};
  104. +
  105. #define IEEE80211_WEP_IV_LEN 4
  106. #define IEEE80211_WEP_ICV_LEN 4
  107. #define IEEE80211_CCMP_HDR_LEN 8