162306a36Sopenharmony_ci/*
262306a36Sopenharmony_ci * Copyright (c) 2017		Intel Deutschland GmbH
362306a36Sopenharmony_ci * Copyright (c) 2018-2019, 2021-2022 Intel Corporation
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Permission to use, copy, modify, and/or distribute this software for any
662306a36Sopenharmony_ci * purpose with or without fee is hereby granted, provided that the above
762306a36Sopenharmony_ci * copyright notice and this permission notice appear in all copies.
862306a36Sopenharmony_ci *
962306a36Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1062306a36Sopenharmony_ci * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1162306a36Sopenharmony_ci * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1262306a36Sopenharmony_ci * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1362306a36Sopenharmony_ci * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1462306a36Sopenharmony_ci * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1562306a36Sopenharmony_ci * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1662306a36Sopenharmony_ci */
1762306a36Sopenharmony_ci#ifndef __RADIOTAP_H
1862306a36Sopenharmony_ci#define __RADIOTAP_H
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci#include <linux/kernel.h>
2162306a36Sopenharmony_ci#include <asm/unaligned.h>
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci/**
2462306a36Sopenharmony_ci * struct ieee80211_radiotap_header - base radiotap header
2562306a36Sopenharmony_ci */
2662306a36Sopenharmony_cistruct ieee80211_radiotap_header {
2762306a36Sopenharmony_ci	/**
2862306a36Sopenharmony_ci	 * @it_version: radiotap version, always 0
2962306a36Sopenharmony_ci	 */
3062306a36Sopenharmony_ci	uint8_t it_version;
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci	/**
3362306a36Sopenharmony_ci	 * @it_pad: padding (or alignment)
3462306a36Sopenharmony_ci	 */
3562306a36Sopenharmony_ci	uint8_t it_pad;
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci	/**
3862306a36Sopenharmony_ci	 * @it_len: overall radiotap header length
3962306a36Sopenharmony_ci	 */
4062306a36Sopenharmony_ci	__le16 it_len;
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci	/**
4362306a36Sopenharmony_ci	 * @it_present: (first) present word
4462306a36Sopenharmony_ci	 */
4562306a36Sopenharmony_ci	__le32 it_present;
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci	/**
4862306a36Sopenharmony_ci	 * @it_optional: all remaining presence bitmaps
4962306a36Sopenharmony_ci	 */
5062306a36Sopenharmony_ci	__le32 it_optional[];
5162306a36Sopenharmony_ci} __packed;
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci/* version is always 0 */
5462306a36Sopenharmony_ci#define PKTHDR_RADIOTAP_VERSION	0
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci/* see the radiotap website for the descriptions */
5762306a36Sopenharmony_cienum ieee80211_radiotap_presence {
5862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_TSFT = 0,
5962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_FLAGS = 1,
6062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_RATE = 2,
6162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_CHANNEL = 3,
6262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_FHSS = 4,
6362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_ANTENNA = 11,
7062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
7162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_DB_ANTNOISE = 13,
7262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_RX_FLAGS = 14,
7362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_TX_FLAGS = 15,
7462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_RTS_RETRIES = 16,
7562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_DATA_RETRIES = 17,
7662306a36Sopenharmony_ci	/* 18 is XChannel, but it's not defined yet */
7762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_MCS = 19,
7862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_AMPDU_STATUS = 20,
7962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_VHT = 21,
8062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_TIMESTAMP = 22,
8162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE = 23,
8262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_MU = 24,
8362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_ZERO_LEN_PSDU = 26,
8462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_LSIG = 27,
8562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_TLV = 28,
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ci	/* valid in every it_present bitmap, even vendor namespaces */
8862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE = 29,
8962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_VENDOR_NAMESPACE = 30,
9062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EXT = 31,
9162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG = 33,
9262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT = 34,
9362306a36Sopenharmony_ci};
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci/* for IEEE80211_RADIOTAP_FLAGS */
9662306a36Sopenharmony_cienum ieee80211_radiotap_flags {
9762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_F_CFP = 0x01,
9862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_F_SHORTPRE = 0x02,
9962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_F_WEP = 0x04,
10062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_F_FRAG = 0x08,
10162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_F_FCS = 0x10,
10262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_F_DATAPAD = 0x20,
10362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_F_BADFCS = 0x40,
10462306a36Sopenharmony_ci};
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ci/* for IEEE80211_RADIOTAP_CHANNEL */
10762306a36Sopenharmony_cienum ieee80211_radiotap_channel_flags {
10862306a36Sopenharmony_ci	IEEE80211_CHAN_CCK = 0x0020,
10962306a36Sopenharmony_ci	IEEE80211_CHAN_OFDM = 0x0040,
11062306a36Sopenharmony_ci	IEEE80211_CHAN_2GHZ = 0x0080,
11162306a36Sopenharmony_ci	IEEE80211_CHAN_5GHZ = 0x0100,
11262306a36Sopenharmony_ci	IEEE80211_CHAN_DYN = 0x0400,
11362306a36Sopenharmony_ci	IEEE80211_CHAN_HALF = 0x4000,
11462306a36Sopenharmony_ci	IEEE80211_CHAN_QUARTER = 0x8000,
11562306a36Sopenharmony_ci};
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ci/* for IEEE80211_RADIOTAP_RX_FLAGS */
11862306a36Sopenharmony_cienum ieee80211_radiotap_rx_flags {
11962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_F_RX_BADPLCP = 0x0002,
12062306a36Sopenharmony_ci};
12162306a36Sopenharmony_ci
12262306a36Sopenharmony_ci/* for IEEE80211_RADIOTAP_TX_FLAGS */
12362306a36Sopenharmony_cienum ieee80211_radiotap_tx_flags {
12462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_F_TX_FAIL = 0x0001,
12562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_F_TX_CTS = 0x0002,
12662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_F_TX_RTS = 0x0004,
12762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_F_TX_NOACK = 0x0008,
12862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_F_TX_NOSEQNO = 0x0010,
12962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_F_TX_ORDER = 0x0020,
13062306a36Sopenharmony_ci};
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ci/* for IEEE80211_RADIOTAP_MCS "have" flags */
13362306a36Sopenharmony_cienum ieee80211_radiotap_mcs_have {
13462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_MCS_HAVE_BW = 0x01,
13562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_MCS_HAVE_MCS = 0x02,
13662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_MCS_HAVE_GI = 0x04,
13762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_MCS_HAVE_FMT = 0x08,
13862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_MCS_HAVE_FEC = 0x10,
13962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_MCS_HAVE_STBC = 0x20,
14062306a36Sopenharmony_ci};
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_cienum ieee80211_radiotap_mcs_flags {
14362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_MCS_BW_MASK = 0x03,
14462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_MCS_BW_20 = 0,
14562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_MCS_BW_40 = 1,
14662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_MCS_BW_20L = 2,
14762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_MCS_BW_20U = 3,
14862306a36Sopenharmony_ci
14962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_MCS_SGI = 0x04,
15062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_MCS_FMT_GF = 0x08,
15162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_MCS_FEC_LDPC = 0x10,
15262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_MCS_STBC_MASK = 0x60,
15362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_MCS_STBC_1 = 1,
15462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_MCS_STBC_2 = 2,
15562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_MCS_STBC_3 = 3,
15662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_MCS_STBC_SHIFT = 5,
15762306a36Sopenharmony_ci};
15862306a36Sopenharmony_ci
15962306a36Sopenharmony_ci/* for IEEE80211_RADIOTAP_AMPDU_STATUS */
16062306a36Sopenharmony_cienum ieee80211_radiotap_ampdu_flags {
16162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_AMPDU_REPORT_ZEROLEN = 0x0001,
16262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_AMPDU_IS_ZEROLEN = 0x0002,
16362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_AMPDU_LAST_KNOWN = 0x0004,
16462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_AMPDU_IS_LAST = 0x0008,
16562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_ERR = 0x0010,
16662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_KNOWN = 0x0020,
16762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_AMPDU_EOF = 0x0040,
16862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_AMPDU_EOF_KNOWN = 0x0080,
16962306a36Sopenharmony_ci};
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ci/* for IEEE80211_RADIOTAP_VHT */
17262306a36Sopenharmony_cienum ieee80211_radiotap_vht_known {
17362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_VHT_KNOWN_STBC = 0x0001,
17462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_VHT_KNOWN_TXOP_PS_NA = 0x0002,
17562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_VHT_KNOWN_GI = 0x0004,
17662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_VHT_KNOWN_SGI_NSYM_DIS = 0x0008,
17762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_VHT_KNOWN_LDPC_EXTRA_OFDM_SYM = 0x0010,
17862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_VHT_KNOWN_BEAMFORMED = 0x0020,
17962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_VHT_KNOWN_BANDWIDTH = 0x0040,
18062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_VHT_KNOWN_GROUP_ID = 0x0080,
18162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_VHT_KNOWN_PARTIAL_AID = 0x0100,
18262306a36Sopenharmony_ci};
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_cienum ieee80211_radiotap_vht_flags {
18562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_VHT_FLAG_STBC = 0x01,
18662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_VHT_FLAG_TXOP_PS_NA = 0x02,
18762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_VHT_FLAG_SGI = 0x04,
18862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_VHT_FLAG_SGI_NSYM_M10_9 = 0x08,
18962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_VHT_FLAG_LDPC_EXTRA_OFDM_SYM = 0x10,
19062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_VHT_FLAG_BEAMFORMED = 0x20,
19162306a36Sopenharmony_ci};
19262306a36Sopenharmony_ci
19362306a36Sopenharmony_cienum ieee80211_radiotap_vht_coding {
19462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_CODING_LDPC_USER0 = 0x01,
19562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_CODING_LDPC_USER1 = 0x02,
19662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_CODING_LDPC_USER2 = 0x04,
19762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_CODING_LDPC_USER3 = 0x08,
19862306a36Sopenharmony_ci};
19962306a36Sopenharmony_ci
20062306a36Sopenharmony_ci/* for IEEE80211_RADIOTAP_TIMESTAMP */
20162306a36Sopenharmony_cienum ieee80211_radiotap_timestamp_unit_spos {
20262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_TIMESTAMP_UNIT_MASK = 0x000F,
20362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_TIMESTAMP_UNIT_MS = 0x0000,
20462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_TIMESTAMP_UNIT_US = 0x0001,
20562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_TIMESTAMP_UNIT_NS = 0x0003,
20662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_TIMESTAMP_SPOS_MASK = 0x00F0,
20762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_TIMESTAMP_SPOS_BEGIN_MDPU = 0x0000,
20862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_TIMESTAMP_SPOS_PLCP_SIG_ACQ = 0x0010,
20962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_TIMESTAMP_SPOS_EO_PPDU = 0x0020,
21062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_TIMESTAMP_SPOS_EO_MPDU = 0x0030,
21162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_TIMESTAMP_SPOS_UNKNOWN = 0x00F0,
21262306a36Sopenharmony_ci};
21362306a36Sopenharmony_ci
21462306a36Sopenharmony_cienum ieee80211_radiotap_timestamp_flags {
21562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_TIMESTAMP_FLAG_64BIT = 0x00,
21662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_TIMESTAMP_FLAG_32BIT = 0x01,
21762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_TIMESTAMP_FLAG_ACCURACY = 0x02,
21862306a36Sopenharmony_ci};
21962306a36Sopenharmony_ci
22062306a36Sopenharmony_cistruct ieee80211_radiotap_he {
22162306a36Sopenharmony_ci	__le16 data1, data2, data3, data4, data5, data6;
22262306a36Sopenharmony_ci};
22362306a36Sopenharmony_ci
22462306a36Sopenharmony_cienum ieee80211_radiotap_he_bits {
22562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA1_FORMAT_MASK		= 3,
22662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA1_FORMAT_SU		= 0,
22762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA1_FORMAT_EXT_SU	= 1,
22862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA1_FORMAT_MU		= 2,
22962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA1_FORMAT_TRIG		= 3,
23062306a36Sopenharmony_ci
23162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA1_BSS_COLOR_KNOWN	= 0x0004,
23262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA1_BEAM_CHANGE_KNOWN	= 0x0008,
23362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA1_UL_DL_KNOWN		= 0x0010,
23462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA1_DATA_MCS_KNOWN	= 0x0020,
23562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA1_DATA_DCM_KNOWN	= 0x0040,
23662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA1_CODING_KNOWN	= 0x0080,
23762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA1_LDPC_XSYMSEG_KNOWN	= 0x0100,
23862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA1_STBC_KNOWN		= 0x0200,
23962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA1_SPTL_REUSE_KNOWN	= 0x0400,
24062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA1_SPTL_REUSE2_KNOWN	= 0x0800,
24162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA1_SPTL_REUSE3_KNOWN	= 0x1000,
24262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA1_SPTL_REUSE4_KNOWN	= 0x2000,
24362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA1_BW_RU_ALLOC_KNOWN	= 0x4000,
24462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA1_DOPPLER_KNOWN	= 0x8000,
24562306a36Sopenharmony_ci
24662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA2_PRISEC_80_KNOWN	= 0x0001,
24762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA2_GI_KNOWN		= 0x0002,
24862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA2_NUM_LTF_SYMS_KNOWN	= 0x0004,
24962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA2_PRE_FEC_PAD_KNOWN	= 0x0008,
25062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA2_TXBF_KNOWN		= 0x0010,
25162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA2_PE_DISAMBIG_KNOWN	= 0x0020,
25262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA2_TXOP_KNOWN		= 0x0040,
25362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA2_MIDAMBLE_KNOWN	= 0x0080,
25462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA2_RU_OFFSET		= 0x3f00,
25562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA2_RU_OFFSET_KNOWN	= 0x4000,
25662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA2_PRISEC_80_SEC	= 0x8000,
25762306a36Sopenharmony_ci
25862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA3_BSS_COLOR		= 0x003f,
25962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA3_BEAM_CHANGE		= 0x0040,
26062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA3_UL_DL		= 0x0080,
26162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA3_DATA_MCS		= 0x0f00,
26262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA3_DATA_DCM		= 0x1000,
26362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA3_CODING		= 0x2000,
26462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA3_LDPC_XSYMSEG	= 0x4000,
26562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA3_STBC		= 0x8000,
26662306a36Sopenharmony_ci
26762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA4_SU_MU_SPTL_REUSE	= 0x000f,
26862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA4_MU_STA_ID		= 0x7ff0,
26962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA4_TB_SPTL_REUSE1	= 0x000f,
27062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA4_TB_SPTL_REUSE2	= 0x00f0,
27162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA4_TB_SPTL_REUSE3	= 0x0f00,
27262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA4_TB_SPTL_REUSE4	= 0xf000,
27362306a36Sopenharmony_ci
27462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC	= 0x000f,
27562306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_20MHZ	= 0,
27662306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_40MHZ	= 1,
27762306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_80MHZ	= 2,
27862306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_160MHZ	= 3,
27962306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_26T	= 4,
28062306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_52T	= 5,
28162306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_106T	= 6,
28262306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_242T	= 7,
28362306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_484T	= 8,
28462306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_996T	= 9,
28562306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_DATA5_DATA_BW_RU_ALLOC_2x996T	= 10,
28662306a36Sopenharmony_ci
28762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA5_GI			= 0x0030,
28862306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_DATA5_GI_0_8			= 0,
28962306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_DATA5_GI_1_6			= 1,
29062306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_DATA5_GI_3_2			= 2,
29162306a36Sopenharmony_ci
29262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE		= 0x00c0,
29362306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE_UNKNOWN		= 0,
29462306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE_1X			= 1,
29562306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE_2X			= 2,
29662306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_DATA5_LTF_SIZE_4X			= 3,
29762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA5_NUM_LTF_SYMS	= 0x0700,
29862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA5_PRE_FEC_PAD		= 0x3000,
29962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA5_TXBF		= 0x4000,
30062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA5_PE_DISAMBIG		= 0x8000,
30162306a36Sopenharmony_ci
30262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA6_NSTS		= 0x000f,
30362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA6_DOPPLER		= 0x0010,
30462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW_KNOWN	= 0x0020,
30562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW		= 0x00c0,
30662306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW_20MHZ	= 0,
30762306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW_40MHZ	= 1,
30862306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW_80MHZ	= 2,
30962306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_DATA6_TB_PPDU_BW_160MHZ	= 3,
31062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA6_TXOP		= 0x7f00,
31162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_DATA6_MIDAMBLE_PDCTY	= 0x8000,
31262306a36Sopenharmony_ci};
31362306a36Sopenharmony_ci
31462306a36Sopenharmony_cistruct ieee80211_radiotap_he_mu {
31562306a36Sopenharmony_ci	__le16 flags1, flags2;
31662306a36Sopenharmony_ci	u8 ru_ch1[4];
31762306a36Sopenharmony_ci	u8 ru_ch2[4];
31862306a36Sopenharmony_ci};
31962306a36Sopenharmony_ci
32062306a36Sopenharmony_cienum ieee80211_radiotap_he_mu_bits {
32162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_MCS		= 0x000f,
32262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_MCS_KNOWN		= 0x0010,
32362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_DCM		= 0x0020,
32462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_DCM_KNOWN		= 0x0040,
32562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_MU_FLAGS1_CH2_CTR_26T_RU_KNOWN	= 0x0080,
32662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_MU_FLAGS1_CH1_RU_KNOWN		= 0x0100,
32762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_MU_FLAGS1_CH2_RU_KNOWN		= 0x0200,
32862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_MU_FLAGS1_CH1_CTR_26T_RU_KNOWN	= 0x1000,
32962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_MU_FLAGS1_CH1_CTR_26T_RU		= 0x2000,
33062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_COMP_KNOWN	= 0x4000,
33162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_SYMS_USERS_KNOWN	= 0x8000,
33262306a36Sopenharmony_ci
33362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_MU_FLAGS2_BW_FROM_SIG_A_BW	= 0x0003,
33462306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_MU_FLAGS2_BW_FROM_SIG_A_BW_20MHZ	= 0x0000,
33562306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_MU_FLAGS2_BW_FROM_SIG_A_BW_40MHZ	= 0x0001,
33662306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_MU_FLAGS2_BW_FROM_SIG_A_BW_80MHZ	= 0x0002,
33762306a36Sopenharmony_ci		IEEE80211_RADIOTAP_HE_MU_FLAGS2_BW_FROM_SIG_A_BW_160MHZ	= 0x0003,
33862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_MU_FLAGS2_BW_FROM_SIG_A_BW_KNOWN	= 0x0004,
33962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_MU_FLAGS2_SIG_B_COMP		= 0x0008,
34062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_MU_FLAGS2_SIG_B_SYMS_USERS	= 0x00f0,
34162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_MU_FLAGS2_PUNC_FROM_SIG_A_BW	= 0x0300,
34262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_MU_FLAGS2_PUNC_FROM_SIG_A_BW_KNOWN= 0x0400,
34362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_HE_MU_FLAGS2_CH2_CTR_26T_RU		= 0x0800,
34462306a36Sopenharmony_ci};
34562306a36Sopenharmony_ci
34662306a36Sopenharmony_cienum ieee80211_radiotap_lsig_data1 {
34762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_LSIG_DATA1_RATE_KNOWN		= 0x0001,
34862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_LSIG_DATA1_LENGTH_KNOWN		= 0x0002,
34962306a36Sopenharmony_ci};
35062306a36Sopenharmony_ci
35162306a36Sopenharmony_cienum ieee80211_radiotap_lsig_data2 {
35262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_LSIG_DATA2_RATE			= 0x000f,
35362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_LSIG_DATA2_LENGTH			= 0xfff0,
35462306a36Sopenharmony_ci};
35562306a36Sopenharmony_ci
35662306a36Sopenharmony_cistruct ieee80211_radiotap_lsig {
35762306a36Sopenharmony_ci	__le16 data1, data2;
35862306a36Sopenharmony_ci};
35962306a36Sopenharmony_ci
36062306a36Sopenharmony_cienum ieee80211_radiotap_zero_len_psdu_type {
36162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_ZERO_LEN_PSDU_SOUNDING		= 0,
36262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_ZERO_LEN_PSDU_NOT_CAPTURED		= 1,
36362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_ZERO_LEN_PSDU_VENDOR			= 0xff,
36462306a36Sopenharmony_ci};
36562306a36Sopenharmony_ci
36662306a36Sopenharmony_cistruct ieee80211_radiotap_tlv {
36762306a36Sopenharmony_ci	__le16 type;
36862306a36Sopenharmony_ci	__le16 len;
36962306a36Sopenharmony_ci	u8 data[];
37062306a36Sopenharmony_ci} __packed;
37162306a36Sopenharmony_ci
37262306a36Sopenharmony_ci/**
37362306a36Sopenharmony_ci * struct ieee80211_radiotap_vendor_content - radiotap vendor data content
37462306a36Sopenharmony_ci * @oui: radiotap vendor namespace OUI
37562306a36Sopenharmony_ci * @oui_subtype: radiotap vendor sub namespace
37662306a36Sopenharmony_ci * @vendor_type: radiotap vendor type
37762306a36Sopenharmony_ci * @reserved: should always be set to zero (to avoid leaking memory)
37862306a36Sopenharmony_ci * @data: the actual vendor namespace data
37962306a36Sopenharmony_ci */
38062306a36Sopenharmony_cistruct ieee80211_radiotap_vendor_content {
38162306a36Sopenharmony_ci	u8 oui[3];
38262306a36Sopenharmony_ci	u8 oui_subtype;
38362306a36Sopenharmony_ci	__le16 vendor_type;
38462306a36Sopenharmony_ci	__le16 reserved;
38562306a36Sopenharmony_ci	u8 data[];
38662306a36Sopenharmony_ci} __packed;
38762306a36Sopenharmony_ci
38862306a36Sopenharmony_ci/**
38962306a36Sopenharmony_ci * struct ieee80211_radiotap_vendor_tlv - vendor radiotap data information
39062306a36Sopenharmony_ci * @type: should always be set to IEEE80211_RADIOTAP_VENDOR_NAMESPACE
39162306a36Sopenharmony_ci * @len: length of data
39262306a36Sopenharmony_ci * @content: vendor content see @ieee80211_radiotap_vendor_content
39362306a36Sopenharmony_ci */
39462306a36Sopenharmony_cistruct ieee80211_radiotap_vendor_tlv {
39562306a36Sopenharmony_ci	__le16 type; /* IEEE80211_RADIOTAP_VENDOR_NAMESPACE */
39662306a36Sopenharmony_ci	__le16 len;
39762306a36Sopenharmony_ci	struct ieee80211_radiotap_vendor_content content;
39862306a36Sopenharmony_ci};
39962306a36Sopenharmony_ci
40062306a36Sopenharmony_ci/* ieee80211_radiotap_eht_usig - content of U-SIG tlv (type 33)
40162306a36Sopenharmony_ci * see www.radiotap.org/fields/U-SIG.html for details
40262306a36Sopenharmony_ci */
40362306a36Sopenharmony_cistruct ieee80211_radiotap_eht_usig {
40462306a36Sopenharmony_ci	__le32 common;
40562306a36Sopenharmony_ci	__le32 value;
40662306a36Sopenharmony_ci	__le32 mask;
40762306a36Sopenharmony_ci} __packed;
40862306a36Sopenharmony_ci
40962306a36Sopenharmony_ci/* ieee80211_radiotap_eht - content of EHT tlv (type 34)
41062306a36Sopenharmony_ci * see www.radiotap.org/fields/EHT.html for details
41162306a36Sopenharmony_ci */
41262306a36Sopenharmony_cistruct ieee80211_radiotap_eht {
41362306a36Sopenharmony_ci	__le32 known;
41462306a36Sopenharmony_ci	__le32 data[9];
41562306a36Sopenharmony_ci	__le32 user_info[];
41662306a36Sopenharmony_ci} __packed;
41762306a36Sopenharmony_ci
41862306a36Sopenharmony_ci/* Known field for EHT TLV
41962306a36Sopenharmony_ci * The ending defines for what the field applies as following
42062306a36Sopenharmony_ci * O - OFDMA (including TB), M - MU-MIMO, S - EHT sounding.
42162306a36Sopenharmony_ci */
42262306a36Sopenharmony_cienum ieee80211_radiotap_eht_known {
42362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_KNOWN_SPATIAL_REUSE		= 0x00000002,
42462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_KNOWN_GI				= 0x00000004,
42562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_KNOWN_EHT_LTF			= 0x00000010,
42662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_KNOWN_LDPC_EXTRA_SYM_OM		= 0x00000020,
42762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_KNOWN_PRE_PADD_FACOR_OM		= 0x00000040,
42862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_KNOWN_PE_DISAMBIGUITY_OM		= 0x00000080,
42962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_KNOWN_DISREGARD_O		= 0x00000100,
43062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_KNOWN_DISREGARD_S		= 0x00000200,
43162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_KNOWN_CRC1			= 0x00002000,
43262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_KNOWN_TAIL1			= 0x00004000,
43362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_KNOWN_CRC2_O			= 0x00008000,
43462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_KNOWN_TAIL2_O			= 0x00010000,
43562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_KNOWN_NSS_S			= 0x00020000,
43662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_KNOWN_BEAMFORMED_S		= 0x00040000,
43762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_KNOWN_NR_NON_OFDMA_USERS_M	= 0x00080000,
43862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_KNOWN_ENCODING_BLOCK_CRC_M	= 0x00100000,
43962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_KNOWN_ENCODING_BLOCK_TAIL_M	= 0x00200000,
44062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_KNOWN_RU_MRU_SIZE_OM		= 0x00400000,
44162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_KNOWN_RU_MRU_INDEX_OM		= 0x00800000,
44262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_KNOWN_RU_ALLOC_TB_FMT		= 0x01000000,
44362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_KNOWN_PRIMARY_80			= 0x02000000,
44462306a36Sopenharmony_ci};
44562306a36Sopenharmony_ci
44662306a36Sopenharmony_cienum ieee80211_radiotap_eht_data {
44762306a36Sopenharmony_ci	/* Data 0 */
44862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA0_SPATIAL_REUSE		= 0x00000078,
44962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA0_GI				= 0x00000180,
45062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA0_LTF			= 0x00000600,
45162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA0_EHT_LTF			= 0x00003800,
45262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA0_LDPC_EXTRA_SYM_OM		= 0x00004000,
45362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA0_PRE_PADD_FACOR_OM		= 0x00018000,
45462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA0_PE_DISAMBIGUITY_OM		= 0x00020000,
45562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA0_DISREGARD_S		= 0x000c0000,
45662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA0_DISREGARD_O		= 0x003c0000,
45762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA0_CRC1_O			= 0x03c00000,
45862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA0_TAIL1_O			= 0xfc000000,
45962306a36Sopenharmony_ci	/* Data 1 */
46062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA1_RU_SIZE			= 0x0000001f,
46162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA1_RU_INDEX			= 0x00001fe0,
46262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA1_RU_ALLOC_CC_1_1_1		= 0x003fe000,
46362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA1_RU_ALLOC_CC_1_1_1_KNOWN	= 0x00400000,
46462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA1_PRIMARY_80			= 0xc0000000,
46562306a36Sopenharmony_ci	/* Data 2 */
46662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA2_RU_ALLOC_CC_2_1_1		= 0x000001ff,
46762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA2_RU_ALLOC_CC_2_1_1_KNOWN	= 0x00000200,
46862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA2_RU_ALLOC_CC_1_1_2		= 0x0007fc00,
46962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA2_RU_ALLOC_CC_1_1_2_KNOWN	= 0x00080000,
47062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA2_RU_ALLOC_CC_2_1_2		= 0x1ff00000,
47162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA2_RU_ALLOC_CC_2_1_2_KNOWN	= 0x20000000,
47262306a36Sopenharmony_ci	/* Data 3 */
47362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA3_RU_ALLOC_CC_1_2_1		= 0x000001ff,
47462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA3_RU_ALLOC_CC_1_2_1_KNOWN	= 0x00000200,
47562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA3_RU_ALLOC_CC_2_2_1		= 0x0007fc00,
47662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA3_RU_ALLOC_CC_2_2_1_KNOWN	= 0x00080000,
47762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA3_RU_ALLOC_CC_1_2_2		= 0x1ff00000,
47862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA3_RU_ALLOC_CC_1_2_2_KNOWN	= 0x20000000,
47962306a36Sopenharmony_ci	/* Data 4 */
48062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA4_RU_ALLOC_CC_2_2_2		= 0x000001ff,
48162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA4_RU_ALLOC_CC_2_2_2_KNOWN	= 0x00000200,
48262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA4_RU_ALLOC_CC_1_2_3		= 0x0007fc00,
48362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA4_RU_ALLOC_CC_1_2_3_KNOWN	= 0x00080000,
48462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA4_RU_ALLOC_CC_2_2_3		= 0x1ff00000,
48562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA4_RU_ALLOC_CC_2_2_3_KNOWN	= 0x20000000,
48662306a36Sopenharmony_ci	/* Data 5 */
48762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA5_RU_ALLOC_CC_1_2_4		= 0x000001ff,
48862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA5_RU_ALLOC_CC_1_2_4_KNOWN	= 0x00000200,
48962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA5_RU_ALLOC_CC_2_2_4		= 0x0007fc00,
49062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA5_RU_ALLOC_CC_2_2_4_KNOWN	= 0x00080000,
49162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA5_RU_ALLOC_CC_1_2_5		= 0x1ff00000,
49262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA5_RU_ALLOC_CC_1_2_5_KNOWN	= 0x20000000,
49362306a36Sopenharmony_ci	/* Data 6 */
49462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA6_RU_ALLOC_CC_2_2_5		= 0x000001ff,
49562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA6_RU_ALLOC_CC_2_2_5_KNOWN	= 0x00000200,
49662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA6_RU_ALLOC_CC_1_2_6		= 0x0007fc00,
49762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA6_RU_ALLOC_CC_1_2_6_KNOWN	= 0x00080000,
49862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA6_RU_ALLOC_CC_2_2_6		= 0x1ff00000,
49962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA6_RU_ALLOC_CC_2_2_6_KNOWN	= 0x20000000,
50062306a36Sopenharmony_ci	/* Data 7 */
50162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA7_CRC2_O			= 0x0000000f,
50262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA7_TAIL_2_O			= 0x000003f0,
50362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA7_NSS_S			= 0x0000f000,
50462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA7_BEAMFORMED_S		= 0x00010000,
50562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA7_NUM_OF_NON_OFDMA_USERS	= 0x000e0000,
50662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA7_USER_ENCODING_BLOCK_CRC	= 0x00f00000,
50762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA7_USER_ENCODING_BLOCK_TAIL	= 0x3f000000,
50862306a36Sopenharmony_ci	/* Data 8 */
50962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA8_RU_ALLOC_TB_FMT_PS_160	= 0x00000001,
51062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA8_RU_ALLOC_TB_FMT_B0		= 0x00000002,
51162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_DATA8_RU_ALLOC_TB_FMT_B7_B1	= 0x000001fc,
51262306a36Sopenharmony_ci};
51362306a36Sopenharmony_ci
51462306a36Sopenharmony_cienum ieee80211_radiotap_eht_user_info {
51562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USER_INFO_STA_ID_KNOWN		= 0x00000001,
51662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USER_INFO_MCS_KNOWN		= 0x00000002,
51762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USER_INFO_CODING_KNOWN		= 0x00000004,
51862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USER_INFO_NSS_KNOWN_O		= 0x00000010,
51962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USER_INFO_BEAMFORMING_KNOWN_O	= 0x00000020,
52062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USER_INFO_SPATIAL_CONFIG_KNOWN_M	= 0x00000040,
52162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USER_INFO_DATA_FOR_USER		= 0x00000080,
52262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USER_INFO_STA_ID			= 0x0007ff00,
52362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USER_INFO_CODING			= 0x00080000,
52462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USER_INFO_MCS			= 0x00f00000,
52562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USER_INFO_NSS_O			= 0x0f000000,
52662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USER_INFO_BEAMFORMING_O		= 0x20000000,
52762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USER_INFO_SPATIAL_CONFIG_M	= 0x3f000000,
52862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USER_INFO_RESEVED_c0000000	= 0xc0000000,
52962306a36Sopenharmony_ci};
53062306a36Sopenharmony_ci
53162306a36Sopenharmony_cienum ieee80211_radiotap_eht_usig_common {
53262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG_COMMON_PHY_VER_KNOWN	= 0x00000001,
53362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG_COMMON_BW_KNOWN		= 0x00000002,
53462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG_COMMON_UL_DL_KNOWN		= 0x00000004,
53562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG_COMMON_BSS_COLOR_KNOWN	= 0x00000008,
53662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG_COMMON_TXOP_KNOWN		= 0x00000010,
53762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG_COMMON_BAD_USIG_CRC		= 0x00000020,
53862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG_COMMON_VALIDATE_BITS_CHECKED = 0x00000040,
53962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG_COMMON_VALIDATE_BITS_OK	= 0x00000080,
54062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG_COMMON_PHY_VER		= 0x00007000,
54162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG_COMMON_BW			= 0x00038000,
54262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG_COMMON_UL_DL		= 0x00040000,
54362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG_COMMON_BSS_COLOR		= 0x01f80000,
54462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG_COMMON_TXOP			= 0xfe000000,
54562306a36Sopenharmony_ci};
54662306a36Sopenharmony_ci
54762306a36Sopenharmony_cienum ieee80211_radiotap_eht_usig_mu {
54862306a36Sopenharmony_ci	/* MU-USIG-1 */
54962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG1_MU_B20_B24_DISREGARD	= 0x0000001f,
55062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG1_MU_B25_VALIDATE		= 0x00000020,
55162306a36Sopenharmony_ci	/* MU-USIG-2 */
55262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG2_MU_B0_B1_PPDU_TYPE		= 0x000000c0,
55362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG2_MU_B2_VALIDATE		= 0x00000100,
55462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG2_MU_B3_B7_PUNCTURED_INFO	= 0x00003e00,
55562306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG2_MU_B8_VALIDATE		= 0x00004000,
55662306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG2_MU_B9_B10_SIG_MCS		= 0x00018000,
55762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG2_MU_B11_B15_EHT_SIG_SYMBOLS = 0x003e0000,
55862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG2_MU_B16_B19_CRC		= 0x03c00000,
55962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG2_MU_B20_B25_TAIL		= 0xfc000000,
56062306a36Sopenharmony_ci};
56162306a36Sopenharmony_ci
56262306a36Sopenharmony_cienum ieee80211_radiotap_eht_usig_tb {
56362306a36Sopenharmony_ci	/* TB-USIG-1 */
56462306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG1_TB_B20_B25_DISREGARD	= 0x0000001f,
56562306a36Sopenharmony_ci
56662306a36Sopenharmony_ci	/* TB-USIG-2 */
56762306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG2_TB_B0_B1_PPDU_TYPE		= 0x000000c0,
56862306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG2_TB_B2_VALIDATE		= 0x00000100,
56962306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG2_TB_B3_B6_SPATIAL_REUSE_1	= 0x00001e00,
57062306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG2_TB_B7_B10_SPATIAL_REUSE_2	= 0x0001e000,
57162306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG2_TB_B11_B15_DISREGARD	= 0x003e0000,
57262306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG2_TB_B16_B19_CRC		= 0x03c00000,
57362306a36Sopenharmony_ci	IEEE80211_RADIOTAP_EHT_USIG2_TB_B20_B25_TAIL		= 0xfc000000,
57462306a36Sopenharmony_ci};
57562306a36Sopenharmony_ci
57662306a36Sopenharmony_ci/**
57762306a36Sopenharmony_ci * ieee80211_get_radiotap_len - get radiotap header length
57862306a36Sopenharmony_ci * @data: pointer to the header
57962306a36Sopenharmony_ci */
58062306a36Sopenharmony_cistatic inline u16 ieee80211_get_radiotap_len(const char *data)
58162306a36Sopenharmony_ci{
58262306a36Sopenharmony_ci	const struct ieee80211_radiotap_header *hdr = (const void *)data;
58362306a36Sopenharmony_ci
58462306a36Sopenharmony_ci	return get_unaligned_le16(&hdr->it_len);
58562306a36Sopenharmony_ci}
58662306a36Sopenharmony_ci
58762306a36Sopenharmony_ci#endif /* __RADIOTAP_H */
588