Commit 21ab562c authored by Po Hao Huang's avatar Po Hao Huang Committed by Kalle Valo

ieee80211: add trigger frame definition

Define trigger stype of control frame, and its checking function, struct
and trigger type within common_info of trigger.
Signed-off-by: default avatarPo Hao Huang <phhuang@realtek.com>
Signed-off-by: default avatarPing-Ke Shih <pkshih@realtek.com>
Signed-off-by: default avatarKalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20220608113224.11193-2-pkshih@realtek.com
parent 05a2eebf
...@@ -76,6 +76,7 @@ ...@@ -76,6 +76,7 @@
#define IEEE80211_STYPE_ACTION 0x00D0 #define IEEE80211_STYPE_ACTION 0x00D0
/* control */ /* control */
#define IEEE80211_STYPE_TRIGGER 0x0020
#define IEEE80211_STYPE_CTL_EXT 0x0060 #define IEEE80211_STYPE_CTL_EXT 0x0060
#define IEEE80211_STYPE_BACK_REQ 0x0080 #define IEEE80211_STYPE_BACK_REQ 0x0080
#define IEEE80211_STYPE_BACK 0x0090 #define IEEE80211_STYPE_BACK 0x0090
...@@ -295,6 +296,17 @@ static inline u16 ieee80211_sn_sub(u16 sn1, u16 sn2) ...@@ -295,6 +296,17 @@ static inline u16 ieee80211_sn_sub(u16 sn1, u16 sn2)
#define IEEE80211_HT_CTL_LEN 4 #define IEEE80211_HT_CTL_LEN 4
/* trigger type within common_info of trigger frame */
#define IEEE80211_TRIGGER_TYPE_MASK 0xf
#define IEEE80211_TRIGGER_TYPE_BASIC 0x0
#define IEEE80211_TRIGGER_TYPE_BFRP 0x1
#define IEEE80211_TRIGGER_TYPE_MU_BAR 0x2
#define IEEE80211_TRIGGER_TYPE_MU_RTS 0x3
#define IEEE80211_TRIGGER_TYPE_BSRP 0x4
#define IEEE80211_TRIGGER_TYPE_GCR_MU_BAR 0x5
#define IEEE80211_TRIGGER_TYPE_BQRP 0x6
#define IEEE80211_TRIGGER_TYPE_NFRP 0x7
struct ieee80211_hdr { struct ieee80211_hdr {
__le16 frame_control; __le16 frame_control;
__le16 duration_id; __le16 duration_id;
...@@ -324,6 +336,15 @@ struct ieee80211_qos_hdr { ...@@ -324,6 +336,15 @@ struct ieee80211_qos_hdr {
__le16 qos_ctrl; __le16 qos_ctrl;
} __packed __aligned(2); } __packed __aligned(2);
struct ieee80211_trigger {
__le16 frame_control;
__le16 duration;
u8 ra[ETH_ALEN];
u8 ta[ETH_ALEN];
__le64 common_info;
u8 variable[];
} __packed __aligned(2);
/** /**
* ieee80211_has_tods - check if IEEE80211_FCTL_TODS is set * ieee80211_has_tods - check if IEEE80211_FCTL_TODS is set
* @fc: frame control bytes in little-endian byteorder * @fc: frame control bytes in little-endian byteorder
...@@ -729,6 +750,16 @@ static inline bool ieee80211_is_qos_nullfunc(__le16 fc) ...@@ -729,6 +750,16 @@ static inline bool ieee80211_is_qos_nullfunc(__le16 fc)
cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_QOS_NULLFUNC); cpu_to_le16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_QOS_NULLFUNC);
} }
/**
* ieee80211_is_trigger - check if frame is trigger frame
* @fc: frame control field in little-endian byteorder
*/
static inline bool ieee80211_is_trigger(__le16 fc)
{
return (fc & cpu_to_le16(IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) ==
cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_TRIGGER);
}
/** /**
* ieee80211_is_any_nullfunc - check if frame is regular or QoS nullfunc frame * ieee80211_is_any_nullfunc - check if frame is regular or QoS nullfunc frame
* @fc: frame control bytes in little-endian byteorder * @fc: frame control bytes in little-endian byteorder
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment