cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

wifi.h (25836B)


      1/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
      2/* Copyright(c) 2007 - 2012 Realtek Corporation. */
      3
      4#ifndef _WIFI_H_
      5#define _WIFI_H_
      6
      7#include <linux/bits.h>
      8#include <linux/ieee80211.h>
      9
     10#define WLAN_ETHHDR_LEN		14
     11#define WLAN_HDR_A3_LEN		24
     12#define WLAN_HDR_A3_QOS_LEN	26
     13#define WLAN_SSID_MAXLEN	32
     14
     15enum WIFI_FRAME_SUBTYPE {
     16	/*  below is for mgt frame */
     17	WIFI_ASSOCREQ       = (0 | IEEE80211_FTYPE_MGMT),
     18	WIFI_ASSOCRSP       = (BIT(4) | IEEE80211_FTYPE_MGMT),
     19	WIFI_REASSOCREQ     = (BIT(5) | IEEE80211_FTYPE_MGMT),
     20	WIFI_REASSOCRSP     = (BIT(5) | BIT(4) | IEEE80211_FTYPE_MGMT),
     21	WIFI_PROBEREQ       = (BIT(6) | IEEE80211_FTYPE_MGMT),
     22	WIFI_PROBERSP       = (BIT(6) | BIT(4) | IEEE80211_FTYPE_MGMT),
     23	WIFI_BEACON         = (BIT(7) | IEEE80211_FTYPE_MGMT),
     24	WIFI_ATIM           = (BIT(7) | BIT(4) | IEEE80211_FTYPE_MGMT),
     25	WIFI_DISASSOC       = (BIT(7) | BIT(5) | IEEE80211_FTYPE_MGMT),
     26	WIFI_AUTH           = (BIT(7) | BIT(5) | BIT(4) | IEEE80211_FTYPE_MGMT),
     27	WIFI_DEAUTH         = (BIT(7) | BIT(6) | IEEE80211_FTYPE_MGMT),
     28	WIFI_ACTION         = (BIT(7) | BIT(6) | BIT(4) | IEEE80211_FTYPE_MGMT),
     29
     30	/*  below is for control frame */
     31	WIFI_PSPOLL         = (BIT(7) | BIT(5) | IEEE80211_FTYPE_CTL),
     32
     33	/*  below is for data frame */
     34	WIFI_DATA           = (0 | IEEE80211_FTYPE_DATA),
     35	WIFI_DATA_CFACK     = (BIT(4) | IEEE80211_FTYPE_DATA),
     36	WIFI_DATA_CFPOLL    = (BIT(5) | IEEE80211_FTYPE_DATA),
     37	WIFI_DATA_CFACKPOLL = (BIT(5) | BIT(4) | IEEE80211_FTYPE_DATA),
     38	WIFI_DATA_NULL      = (BIT(6) | IEEE80211_FTYPE_DATA),
     39	WIFI_QOS_DATA_NULL	= (BIT(6) | IEEE80211_STYPE_QOS_DATA | IEEE80211_FTYPE_DATA),
     40};
     41
     42enum WIFI_REASON_CODE	{
     43	_RSON_RESERVED_			= 0,
     44	_RSON_UNSPECIFIED_		= 1,
     45	_RSON_AUTH_NO_LONGER_VALID_	= 2,
     46	_RSON_DEAUTH_STA_LEAVING_	= 3,
     47	_RSON_INACTIVITY_		= 4,
     48	_RSON_UNABLE_HANDLE_		= 5,
     49	_RSON_CLS2_			= 6,
     50	_RSON_CLS3_			= 7,
     51	_RSON_DISAOC_STA_LEAVING_	= 8,
     52	_RSON_ASOC_NOT_AUTH_		= 9,
     53
     54	/*  WPA reason */
     55	_RSON_INVALID_IE_		= 13,
     56	_RSON_MIC_FAILURE_		= 14,
     57	_RSON_4WAY_HNDSHK_TIMEOUT_	= 15,
     58	_RSON_GROUP_KEY_UPDATE_TIMEOUT_	= 16,
     59	_RSON_DIFF_IE_			= 17,
     60	_RSON_MLTCST_CIPHER_NOT_VALID_	= 18,
     61	_RSON_UNICST_CIPHER_NOT_VALID_	= 19,
     62	_RSON_AKMP_NOT_VALID_		= 20,
     63	_RSON_UNSUPPORT_RSNE_VER_	= 21,
     64	_RSON_INVALID_RSNE_CAP_		= 22,
     65	_RSON_IEEE_802DOT1X_AUTH_FAIL_	= 23,
     66
     67	/* belowing are Realtek definition */
     68	_RSON_PMK_NOT_AVAILABLE_	= 24,
     69	_RSON_TDLS_TEAR_TOOFAR_		= 25,
     70	_RSON_TDLS_TEAR_UN_RSN_		= 26,
     71};
     72
     73enum WIFI_STATUS_CODE {
     74	_STATS_SUCCESSFUL_		= 0,
     75	_STATS_FAILURE_			= 1,
     76	_STATS_CAP_FAIL_		= 10,
     77	_STATS_NO_ASOC_			= 11,
     78	_STATS_OTHER_			= 12,
     79	_STATS_NO_SUPP_ALG_		= 13,
     80	_STATS_OUT_OF_AUTH_SEQ_		= 14,
     81	_STATS_CHALLENGE_FAIL_		= 15,
     82	_STATS_AUTH_TIMEOUT_		= 16,
     83	_STATS_UNABLE_HANDLE_STA_	= 17,
     84	_STATS_RATE_FAIL_		= 18,
     85};
     86
     87/* entended */
     88/* IEEE 802.11b */
     89#define WLAN_STATUS_ASSOC_DENIED_NOSHORT 19
     90#define WLAN_STATUS_ASSOC_DENIED_NOPBCC 20
     91#define WLAN_STATUS_ASSOC_DENIED_NOAGILITY 21
     92/* IEEE 802.11h */
     93#define WLAN_STATUS_SPEC_MGMT_REQUIRED 22
     94#define WLAN_STATUS_PWR_CAPABILITY_NOT_VALID 23
     95#define WLAN_STATUS_SUPPORTED_CHANNEL_NOT_VALID 24
     96/* IEEE 802.11g */
     97#define WLAN_STATUS_ASSOC_DENIED_NO_SHORT_SLOT_TIME 25
     98#define WLAN_STATUS_ASSOC_DENIED_NO_ER_PBCC 26
     99#define WLAN_STATUS_ASSOC_DENIED_NO_DSSS_OFDM 27
    100/* IEEE 802.11w */
    101#define WLAN_STATUS_ASSOC_REJECTED_TEMPORARILY 30
    102#define WLAN_STATUS_ROBUST_MGMT_FRAME_POLICY_VIOLATION 31
    103/* IEEE 802.11i */
    104#define WLAN_STATUS_INVALID_IE 40
    105#define WLAN_STATUS_GROUP_CIPHER_NOT_VALID 41
    106#define WLAN_STATUS_PAIRWISE_CIPHER_NOT_VALID 42
    107#define WLAN_STATUS_AKMP_NOT_VALID 43
    108#define WLAN_STATUS_UNSUPPORTED_RSN_IE_VERSION 44
    109#define WLAN_STATUS_INVALID_RSN_IE_CAPAB 45
    110#define WLAN_STATUS_CIPHER_REJECTED_PER_POLICY 46
    111#define WLAN_STATUS_TS_NOT_CREATED 47
    112#define WLAN_STATUS_DIRECT_LINK_NOT_ALLOWED 48
    113#define WLAN_STATUS_DEST_STA_NOT_PRESENT 49
    114#define WLAN_STATUS_DEST_STA_NOT_QOS_STA 50
    115#define WLAN_STATUS_ASSOC_DENIED_LISTEN_INT_TOO_LARGE 51
    116/* IEEE 802.11r */
    117#define WLAN_STATUS_INVALID_FT_ACTION_FRAME_COUNT 52
    118#define WLAN_STATUS_INVALID_PMKID 53
    119#define WLAN_STATUS_INVALID_MDIE 54
    120#define WLAN_STATUS_INVALID_FTIE 55
    121
    122enum WIFI_REG_DOMAIN {
    123	DOMAIN_FCC	= 1,
    124	DOMAIN_IC	= 2,
    125	DOMAIN_ETSI	= 3,
    126	DOMAIN_SPA	= 4,
    127	DOMAIN_FRANCE	= 5,
    128	DOMAIN_MKK	= 6,
    129	DOMAIN_ISRAEL	= 7,
    130	DOMAIN_MKK1	= 8,
    131	DOMAIN_MKK2	= 9,
    132	DOMAIN_MKK3	= 10,
    133	DOMAIN_MAX
    134};
    135
    136#define _TO_DS_		BIT(8)
    137#define _FROM_DS_	BIT(9)
    138#define _MORE_FRAG_	BIT(10)
    139#define _RETRY_		BIT(11)
    140#define _PWRMGT_	BIT(12)
    141#define _MORE_DATA_	BIT(13)
    142#define _PRIVACY_	BIT(14)
    143#define _ORDER_		BIT(15)
    144
    145#define SetToDs(pbuf)	\
    146	*(__le16 *)(pbuf) |= cpu_to_le16(_TO_DS_)
    147
    148#define GetToDs(pbuf)	(((*(__le16 *)(pbuf)) & cpu_to_le16(_TO_DS_)) != 0)
    149
    150#define SetFrDs(pbuf)	\
    151	*(__le16 *)(pbuf) |= cpu_to_le16(_FROM_DS_)
    152
    153#define GetFrDs(pbuf)	(((*(__le16 *)(pbuf)) & cpu_to_le16(_FROM_DS_)) != 0)
    154
    155#define SetMFrag(pbuf)	\
    156	*(__le16 *)(pbuf) |= cpu_to_le16(_MORE_FRAG_)
    157
    158#define ClearMFrag(pbuf)	\
    159	*(__le16 *)(pbuf) &= (~cpu_to_le16(_MORE_FRAG_))
    160
    161#define GetRetry(pbuf)	(((*(__le16 *)(pbuf)) & cpu_to_le16(_RETRY_)) != 0)
    162
    163#define SetPwrMgt(pbuf)	\
    164	*(__le16 *)(pbuf) |= cpu_to_le16(_PWRMGT_)
    165
    166#define GetPwrMgt(pbuf)	(((*(__le16 *)(pbuf)) & cpu_to_le16(_PWRMGT_)) != 0)
    167
    168#define SetMData(pbuf)	\
    169	*(__le16 *)(pbuf) |= cpu_to_le16(_MORE_DATA_)
    170
    171#define SetPrivacy(pbuf)	\
    172	*(__le16 *)(pbuf) |= cpu_to_le16(_PRIVACY_)
    173
    174#define GetPrivacy(pbuf)					\
    175	(((*(__le16 *)(pbuf)) & cpu_to_le16(_PRIVACY_)) != 0)
    176
    177#define GetFrameType(pbuf)				\
    178	(le16_to_cpu(*(__le16 *)(pbuf)) & (BIT(3) | BIT(2)))
    179
    180#define GetFrameSubType(pbuf)	(le16_to_cpu(*(__le16 *)(pbuf)) & (BIT(7) |\
    181	 BIT(6) | BIT(5) | BIT(4) | BIT(3) | BIT(2)))
    182
    183#define SetFrameSubType(pbuf, type) \
    184	do {    \
    185		*(__le16 *)(pbuf) &= cpu_to_le16(~(BIT(7) | BIT(6) |	\
    186		 BIT(5) | BIT(4) | BIT(3) | BIT(2))); \
    187		*(__le16 *)(pbuf) |= cpu_to_le16(type); \
    188	} while (0)
    189
    190#define GetTupleCache(pbuf)			\
    191	(cpu_to_le16(*(unsigned short *)((size_t)(pbuf) + 22)))
    192
    193#define SetFragNum(pbuf, num) \
    194	do {    \
    195		*(unsigned short *)((size_t)(pbuf) + 22) = \
    196			((*(unsigned short *)((size_t)(pbuf) + 22)) &	\
    197			le16_to_cpu(~(0x000f))) | \
    198			cpu_to_le16(0x0f & (num));     \
    199	} while (0)
    200
    201#define SetSeqNum(pbuf, num) \
    202	do {    \
    203		*(__le16 *)((size_t)(pbuf) + 22) = \
    204			((*(__le16 *)((size_t)(pbuf) + 22)) & cpu_to_le16((unsigned short)0x000f)) | \
    205			cpu_to_le16((unsigned short)(0xfff0 & (num << 4))); \
    206	} while (0)
    207
    208#define SetDuration(pbuf, dur) \
    209	*(__le16 *)((size_t)(pbuf) + 2) = cpu_to_le16(0xffff & (dur))
    210
    211#define SetPriority(pbuf, tid)	\
    212	*(__le16 *)(pbuf) |= cpu_to_le16(tid & 0xf)
    213
    214#define SetEOSP(pbuf, eosp)	\
    215		*(__le16 *)(pbuf) |= cpu_to_le16((eosp & 1) << 4)
    216
    217#define SetAckpolicy(pbuf, ack)	\
    218	*(__le16 *)(pbuf) |= cpu_to_le16((ack & 3) << 5)
    219
    220#define GetAckpolicy(pbuf) (((le16_to_cpu(*(__le16 *)pbuf)) >> 5) & 0x3)
    221
    222#define GetAMsdu(pbuf) (((le16_to_cpu(*(__le16 *)pbuf)) >> 7) & 0x1)
    223
    224#define SetAMsdu(pbuf, amsdu)	\
    225	*(__le16 *)(pbuf) |= cpu_to_le16((amsdu & 1) << 7)
    226
    227#define GetTid(pbuf)	(le16_to_cpu(*(__le16 *)((size_t)(pbuf) +	\
    228			(((GetToDs(pbuf)<<1) | GetFrDs(pbuf)) == 3 ?	\
    229			30 : 24))) & 0x000f)
    230
    231#define GetAddr1Ptr(pbuf)	((unsigned char *)((size_t)(pbuf) + 4))
    232
    233#define GetAddr2Ptr(pbuf)	((unsigned char *)((size_t)(pbuf) + 10))
    234
    235#define GetAddr3Ptr(pbuf)	((unsigned char *)((size_t)(pbuf) + 16))
    236
    237#define GetAddr4Ptr(pbuf)	((unsigned char *)((size_t)(pbuf) + 24))
    238
    239static inline bool IS_MCAST(unsigned char *da)
    240{
    241	return (*da) & 0x01;
    242}
    243
    244static inline unsigned char *get_da(unsigned char *pframe)
    245{
    246	unsigned char	*da;
    247	unsigned int to_fr_ds = (GetToDs(pframe) << 1) | GetFrDs(pframe);
    248
    249	switch (to_fr_ds) {
    250	case 0x00:	/*  ToDs=0, FromDs=0 */
    251		da = GetAddr1Ptr(pframe);
    252		break;
    253	case 0x01:	/*  ToDs=0, FromDs=1 */
    254		da = GetAddr1Ptr(pframe);
    255		break;
    256	case 0x02:	/*  ToDs=1, FromDs=0 */
    257		da = GetAddr3Ptr(pframe);
    258		break;
    259	default:	/*  ToDs=1, FromDs=1 */
    260		da = GetAddr3Ptr(pframe);
    261		break;
    262	}
    263	return da;
    264}
    265
    266static inline unsigned char *get_sa(unsigned char *pframe)
    267{
    268	unsigned char	*sa;
    269	unsigned int	to_fr_ds = (GetToDs(pframe) << 1) | GetFrDs(pframe);
    270
    271	switch (to_fr_ds) {
    272	case 0x00:	/*  ToDs=0, FromDs=0 */
    273		sa = GetAddr2Ptr(pframe);
    274		break;
    275	case 0x01:	/*  ToDs=0, FromDs=1 */
    276		sa = GetAddr3Ptr(pframe);
    277		break;
    278	case 0x02:	/*  ToDs=1, FromDs=0 */
    279		sa = GetAddr2Ptr(pframe);
    280		break;
    281	default:	/*  ToDs=1, FromDs=1 */
    282		sa = GetAddr4Ptr(pframe);
    283		break;
    284	}
    285	return sa;
    286}
    287
    288static inline unsigned char *get_hdr_bssid(unsigned char *pframe)
    289{
    290	unsigned char	*sa;
    291	unsigned int	to_fr_ds = (GetToDs(pframe) << 1) | GetFrDs(pframe);
    292
    293	switch (to_fr_ds) {
    294	case 0x00:	/*  ToDs=0, FromDs=0 */
    295		sa = GetAddr3Ptr(pframe);
    296		break;
    297	case 0x01:	/*  ToDs=0, FromDs=1 */
    298		sa = GetAddr2Ptr(pframe);
    299		break;
    300	case 0x02:	/*  ToDs=1, FromDs=0 */
    301		sa = GetAddr1Ptr(pframe);
    302		break;
    303	case 0x03:	/*  ToDs=1, FromDs=1 */
    304		sa = GetAddr1Ptr(pframe);
    305		break;
    306	default:
    307		sa = NULL; /*  */
    308		break;
    309	}
    310	return sa;
    311}
    312
    313/*-----------------------------------------------------------------------------
    314			Below is for the security related definition
    315------------------------------------------------------------------------------*/
    316#define _RESERVED_FRAME_TYPE_		0
    317#define _SKB_FRAME_TYPE_		2
    318#define _PRE_ALLOCMEM_			1
    319#define _PRE_ALLOCHDR_			3
    320#define _PRE_ALLOCLLCHDR_		4
    321#define _PRE_ALLOCICVHDR_		5
    322#define _PRE_ALLOCMICHDR_		6
    323
    324#define _SIFSTIME_				\
    325	(priv->pmib->dot11BssType.net_work_type = 10)
    326#define _ACKCTSLNG_		14	/* 14 bytes long, including crclng */
    327#define _CRCLNG_		4
    328
    329#define _ASOCREQ_IE_OFFSET_	4	/*  excluding wlan_hdr */
    330#define	_ASOCRSP_IE_OFFSET_	6
    331#define _REASOCREQ_IE_OFFSET_	10
    332#define _REASOCRSP_IE_OFFSET_	6
    333#define _PROBEREQ_IE_OFFSET_	0
    334#define	_PROBERSP_IE_OFFSET_	12
    335#define _AUTH_IE_OFFSET_	6
    336#define _DEAUTH_IE_OFFSET_	0
    337#define _BEACON_IE_OFFSET_	12
    338#define _PUBLIC_ACTION_IE_OFFSET_	8
    339
    340#define _FIXED_IE_LENGTH_	_BEACON_IE_OFFSET_
    341
    342#define _SSID_IE_		0
    343#define _SUPPORTEDRATES_IE_	1
    344#define _DSSET_IE_		3
    345#define _TIM_IE_		5
    346#define _IBSS_PARA_IE_		6
    347#define _COUNTRY_IE_		7
    348#define _CHLGETXT_IE_		16
    349#define _SUPPORTED_CH_IE_	36
    350#define _CH_SWTICH_ANNOUNCE_	37	/* Secondary Channel Offset */
    351#define _RSN_IE_2_		48
    352#define _SSN_IE_1_		221
    353#define _ERPINFO_IE_		42
    354#define _EXT_SUPPORTEDRATES_IE_	50
    355
    356#define _HT_CAPABILITY_IE_	45
    357#define _FTIE_			55
    358#define _TIMEOUT_ITVL_IE_	56
    359#define _SRC_IE_		59
    360#define _HT_EXTRA_INFO_IE_	61
    361#define _HT_ADD_INFO_IE_	61 /* _HT_EXTRA_INFO_IE_ */
    362#define _WAPI_IE_		68
    363
    364#define	EID_BSSCoexistence	72 /*  20/40 BSS Coexistence */
    365#define	EID_BSSIntolerantChlReport	73
    366#define _RIC_Descriptor_IE_	75
    367
    368#define _LINK_ID_IE_		101
    369#define _CH_SWITCH_TIMING_	104
    370#define _PTI_BUFFER_STATUS_	106
    371#define _EXT_CAP_IE_		127
    372#define _VENDOR_SPECIFIC_IE_	221
    373
    374#define	_RESERVED47_		47
    375
    376/* ---------------------------------------------------------------------------
    377					Below is the fixed elements...
    378-----------------------------------------------------------------------------*/
    379#define _AUTH_ALGM_NUM_		2
    380#define _AUTH_SEQ_NUM_		2
    381#define _BEACON_ITERVAL_	2
    382#define _CAPABILITY_		2
    383#define _CURRENT_APADDR_	6
    384#define _LISTEN_INTERVAL_	2
    385#define _RSON_CODE_		2
    386#define _ASOC_ID_		2
    387#define _STATUS_CODE_		2
    388#define _TIMESTAMP_		8
    389
    390#define cap_ESS		BIT(0)
    391#define cap_IBSS	BIT(1)
    392#define cap_CFPollable	BIT(2)
    393#define cap_CFRequest	BIT(3)
    394#define cap_Privacy	BIT(4)
    395#define cap_ShortPremble BIT(5)
    396#define cap_PBCC	BIT(6)
    397#define cap_ChAgility	BIT(7)
    398#define cap_SpecMgmt	BIT(8)
    399#define cap_QoSi	BIT(9)
    400#define cap_ShortSlot	BIT(10)
    401
    402/*-----------------------------------------------------------------------------
    403				Below is the definition for 802.11i / 802.1x
    404------------------------------------------------------------------------------*/
    405#define _IEEE8021X_MGT_			1	/*  WPA */
    406#define _IEEE8021X_PSK_			2	/*  WPA with pre-shared key */
    407
    408/*-----------------------------------------------------------------------------
    409				Below is the definition for WMM
    410------------------------------------------------------------------------------*/
    411#define _WMM_IE_Length_				7  /*  for WMM STA */
    412#define _WMM_Para_Element_Length_		24
    413
    414/*-----------------------------------------------------------------------------
    415				Below is the definition for 802.11n
    416------------------------------------------------------------------------------*/
    417
    418#define SetOrderBit(pbuf)	\
    419	do	{	\
    420		*(unsigned short *)(pbuf) |= cpu_to_le16(_ORDER_); \
    421	} while (0)
    422
    423#define GetOrderBit(pbuf)			\
    424	(((*(unsigned short *)(pbuf)) & le16_to_cpu(_ORDER_)) != 0)
    425
    426/**
    427 * struct rtw_ieee80211_bar - HT Block Ack Request
    428 *
    429 * This structure refers to "HT BlockAckReq" as
    430 * described in 802.11n draft section 7.2.1.7.1
    431 */
    432struct rtw_ieee80211_bar {
    433	__le16 frame_control;
    434	__le16 duration;
    435	unsigned char ra[ETH_ALEN];
    436	unsigned char ta[ETH_ALEN];
    437	__le16 control;
    438	__le16 start_seq_num;
    439} __packed;
    440
    441/**
    442 * struct ieee80211_ht_cap - HT additional information
    443 *
    444 * This structure refers to "HT information element" as
    445 * described in 802.11n draft section 7.3.2.53
    446 */
    447struct ieee80211_ht_addt_info {
    448	unsigned char	control_chan;
    449	unsigned char	ht_param;
    450	__le16	operation_mode;
    451	__le16	stbc_param;
    452	unsigned char	basic_set[16];
    453} __packed;
    454
    455struct HT_caps_element {
    456	union {
    457		struct {
    458			__le16	HT_caps_info;
    459			unsigned char	AMPDU_para;
    460			unsigned char	MCS_rate[16];
    461			__le16	HT_ext_caps;
    462			__le16	Beamforming_caps;
    463			unsigned char	ASEL_caps;
    464		} HT_cap_element;
    465		unsigned char HT_cap[26];
    466	} u;
    467} __packed;
    468
    469struct HT_info_element {
    470	unsigned char	primary_channel;
    471	unsigned char	infos[5];
    472	unsigned char	MCS_rate[16];
    473} __packed;
    474
    475struct AC_param {
    476	unsigned char		ACI_AIFSN;
    477	unsigned char		CW;
    478	__le16	TXOP_limit;
    479} __packed;
    480
    481struct WMM_para_element {
    482	unsigned char		QoS_info;
    483	unsigned char		reserved;
    484	struct AC_param	ac_param[4];
    485} __packed;
    486
    487struct ADDBA_request {
    488	unsigned char	action_code;
    489	unsigned char	dialog_token;
    490	__le16	BA_para_set;
    491	__le16	BA_timeout_value;
    492	__le16	BA_starting_seqctrl;
    493} __packed;
    494
    495#define MAX_AMPDU_FACTOR_64K	3
    496
    497/* Spatial Multiplexing Power Save Modes */
    498#define WLAN_HT_CAP_SM_PS_STATIC	0
    499#define WLAN_HT_CAP_SM_PS_DYNAMIC	1
    500#define WLAN_HT_CAP_SM_PS_INVALID	2
    501#define WLAN_HT_CAP_SM_PS_DISABLED	3
    502
    503#define OP_MODE_PURE                    0
    504#define OP_MODE_MAY_BE_LEGACY_STAS      1
    505#define OP_MODE_20MHZ_HT_STA_ASSOCED    2
    506#define OP_MODE_MIXED                   3
    507
    508#define HT_INFO_HT_PARAM_SECONDARY_CHNL_OFF_MASK	((u8) BIT(0) | BIT(1))
    509#define HT_INFO_HT_PARAM_SECONDARY_CHNL_ABOVE		((u8) BIT(0))
    510#define HT_INFO_HT_PARAM_SECONDARY_CHNL_BELOW		((u8) BIT(0) | BIT(1))
    511#define HT_INFO_HT_PARAM_REC_TRANS_CHNL_WIDTH		((u8) BIT(2))
    512#define HT_INFO_HT_PARAM_RIFS_MODE			((u8) BIT(3))
    513#define HT_INFO_HT_PARAM_CTRL_ACCESS_ONLY		((u8) BIT(4))
    514#define HT_INFO_HT_PARAM_SRV_INTERVAL_GRANULARITY	((u8) BIT(5))
    515
    516#define HT_INFO_OPERATION_MODE_OP_MODE_MASK	\
    517		((u16) (0x0001 | 0x0002))
    518#define HT_INFO_OPERATION_MODE_OP_MODE_OFFSET		0
    519#define HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT	((u8) BIT(2))
    520#define HT_INFO_OPERATION_MODE_TRANSMIT_BURST_LIMIT	((u8) BIT(3))
    521#define HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT	((u8) BIT(4))
    522
    523/*	===============WPS Section=============== */
    524/*	For WPSv1.0 */
    525#define WPSOUI					0x0050f204
    526/*	WPS attribute ID */
    527#define WPS_ATTR_VER1				0x104A
    528#define WPS_ATTR_SIMPLE_CONF_STATE		0x1044
    529#define WPS_ATTR_RESP_TYPE			0x103B
    530#define WPS_ATTR_UUID_E				0x1047
    531#define WPS_ATTR_MANUFACTURER			0x1021
    532#define WPS_ATTR_MODEL_NAME			0x1023
    533#define WPS_ATTR_MODEL_NUMBER			0x1024
    534#define WPS_ATTR_SERIAL_NUMBER			0x1042
    535#define WPS_ATTR_PRIMARY_DEV_TYPE		0x1054
    536#define WPS_ATTR_SEC_DEV_TYPE_LIST		0x1055
    537#define WPS_ATTR_DEVICE_NAME			0x1011
    538#define WPS_ATTR_CONF_METHOD			0x1008
    539#define WPS_ATTR_RF_BANDS			0x103C
    540#define WPS_ATTR_DEVICE_PWID			0x1012
    541#define WPS_ATTR_REQUEST_TYPE			0x103A
    542#define WPS_ATTR_ASSOCIATION_STATE		0x1002
    543#define WPS_ATTR_CONFIG_ERROR			0x1009
    544#define WPS_ATTR_VENDOR_EXT			0x1049
    545#define WPS_ATTR_SELECTED_REGISTRAR		0x1041
    546
    547/*	Value of WPS attribute "WPS_ATTR_DEVICE_NAME */
    548#define WPS_MAX_DEVICE_NAME_LEN			32
    549
    550/*	Value of WPS Request Type Attribute */
    551#define WPS_REQ_TYPE_ENROLLEE_INFO_ONLY		0x00
    552#define WPS_REQ_TYPE_ENROLLEE_OPEN_8021X	0x01
    553#define WPS_REQ_TYPE_REGISTRAR			0x02
    554#define WPS_REQ_TYPE_WLAN_MANAGER_REGISTRAR	0x03
    555
    556/*	Value of WPS Response Type Attribute */
    557#define WPS_RESPONSE_TYPE_INFO_ONLY	0x00
    558#define WPS_RESPONSE_TYPE_8021X		0x01
    559#define WPS_RESPONSE_TYPE_REGISTRAR	0x02
    560#define WPS_RESPONSE_TYPE_AP		0x03
    561
    562/*	Value of WPS WiFi Simple Configuration State Attribute */
    563#define WPS_WSC_STATE_NOT_CONFIG	0x01
    564#define WPS_WSC_STATE_CONFIG		0x02
    565
    566/*	Value of WPS Version Attribute */
    567#define WPS_VERSION_1			0x10
    568
    569/*	Value of WPS Configuration Method Attribute */
    570#define WPS_CONFIG_METHOD_FLASH		0x0001
    571#define WPS_CONFIG_METHOD_ETHERNET	0x0002
    572#define WPS_CONFIG_METHOD_LABEL		0x0004
    573#define WPS_CONFIG_METHOD_DISPLAY	0x0008
    574#define WPS_CONFIG_METHOD_E_NFC		0x0010
    575#define WPS_CONFIG_METHOD_I_NFC		0x0020
    576#define WPS_CONFIG_METHOD_NFC		0x0040
    577#define WPS_CONFIG_METHOD_PBC		0x0080
    578#define WPS_CONFIG_METHOD_KEYPAD	0x0100
    579#define WPS_CONFIG_METHOD_VPBC		0x0280
    580#define WPS_CONFIG_METHOD_PPBC		0x0480
    581#define WPS_CONFIG_METHOD_VDISPLAY	0x2008
    582#define WPS_CONFIG_METHOD_PDISPLAY	0x4008
    583
    584/*	Value of Category ID of WPS Primary Device Type Attribute */
    585#define WPS_PDT_CID_DISPLAYS		0x0007
    586#define WPS_PDT_CID_MULIT_MEDIA		0x0008
    587#define WPS_PDT_CID_RTK_WIDI		WPS_PDT_CID_MULIT_MEDIA
    588
    589/*	Value of Sub Category ID of WPS Primary Device Type Attribute */
    590#define WPS_PDT_SCID_MEDIA_SERVER	0x0005
    591#define WPS_PDT_SCID_RTK_DMP		WPS_PDT_SCID_MEDIA_SERVER
    592
    593/*	Value of Device Password ID */
    594#define WPS_DPID_P			0x0000
    595#define WPS_DPID_USER_SPEC		0x0001
    596#define WPS_DPID_MACHINE_SPEC		0x0002
    597#define WPS_DPID_REKEY			0x0003
    598#define WPS_DPID_PBC			0x0004
    599#define WPS_DPID_REGISTRAR_SPEC		0x0005
    600
    601/*	Value of WPS RF Bands Attribute */
    602#define WPS_RF_BANDS_2_4_GHZ		0x01
    603#define WPS_RF_BANDS_5_GHZ		0x02
    604
    605/*	Value of WPS Association State Attribute */
    606#define WPS_ASSOC_STATE_NOT_ASSOCIATED		0x00
    607#define WPS_ASSOC_STATE_CONNECTION_SUCCESS	0x01
    608#define WPS_ASSOC_STATE_CONFIGURATION_FAILURE	0x02
    609#define WPS_ASSOC_STATE_ASSOCIATION_FAILURE	0x03
    610#define WPS_ASSOC_STATE_IP_FAILURE		0x04
    611
    612/*	=====================P2P Section===================== */
    613/*	For P2P */
    614#define	P2POUI					0x506F9A09
    615
    616/*	P2P Attribute ID */
    617#define	P2P_ATTR_STATUS				0x00
    618#define	P2P_ATTR_MINOR_REASON_CODE		0x01
    619#define	P2P_ATTR_CAPABILITY			0x02
    620#define	P2P_ATTR_DEVICE_ID			0x03
    621#define	P2P_ATTR_GO_INTENT			0x04
    622#define	P2P_ATTR_CONF_TIMEOUT			0x05
    623#define	P2P_ATTR_LISTEN_CH			0x06
    624#define	P2P_ATTR_GROUP_BSSID			0x07
    625#define	P2P_ATTR_EX_LISTEN_TIMING		0x08
    626#define	P2P_ATTR_INTENTED_IF_ADDR		0x09
    627#define	P2P_ATTR_MANAGEABILITY			0x0A
    628#define	P2P_ATTR_CH_LIST			0x0B
    629#define	P2P_ATTR_NOA				0x0C
    630#define	P2P_ATTR_DEVICE_INFO			0x0D
    631#define	P2P_ATTR_GROUP_INFO			0x0E
    632#define	P2P_ATTR_GROUP_ID			0x0F
    633#define	P2P_ATTR_INTERFACE			0x10
    634#define	P2P_ATTR_OPERATING_CH			0x11
    635#define	P2P_ATTR_INVITATION_FLAGS		0x12
    636
    637/*	Value of Status Attribute */
    638#define	P2P_STATUS_SUCCESS				0x00
    639#define	P2P_STATUS_FAIL_INFO_UNAVAILABLE		0x01
    640#define	P2P_STATUS_FAIL_INCOMPATIBLE_PARAM		0x02
    641#define	P2P_STATUS_FAIL_LIMIT_REACHED			0x03
    642#define	P2P_STATUS_FAIL_INVALID_PARAM			0x04
    643#define	P2P_STATUS_FAIL_REQUEST_UNABLE			0x05
    644#define	P2P_STATUS_FAIL_PREVOUS_PROTO_ERR		0x06
    645#define	P2P_STATUS_FAIL_NO_COMMON_CH			0x07
    646#define	P2P_STATUS_FAIL_UNKNOWN_P2PGROUP		0x08
    647#define	P2P_STATUS_FAIL_BOTH_GOINTENT_15		0x09
    648#define	P2P_STATUS_FAIL_INCOMPATIBLE_PROVSION		0x0A
    649#define	P2P_STATUS_FAIL_USER_REJECT			0x0B
    650
    651/*	Value of Inviation Flags Attribute */
    652#define	P2P_INVITATION_FLAGS_PERSISTENT			BIT(0)
    653
    654#define	DMP_P2P_DEVCAP_SUPPORT	(P2P_DEVCAP_SERVICE_DISCOVERY | \
    655				P2P_DEVCAP_CLIENT_DISCOVERABILITY | \
    656				P2P_DEVCAP_CONCURRENT_OPERATION | \
    657				P2P_DEVCAP_INVITATION_PROC)
    658
    659#define	DMP_P2P_GRPCAP_SUPPORT	(P2P_GRPCAP_INTRABSS)
    660
    661/*	Value of Device Capability Bitmap */
    662#define	P2P_DEVCAP_SERVICE_DISCOVERY		BIT(0)
    663#define	P2P_DEVCAP_CLIENT_DISCOVERABILITY	BIT(1)
    664#define	P2P_DEVCAP_CONCURRENT_OPERATION		BIT(2)
    665#define	P2P_DEVCAP_INFRA_MANAGED		BIT(3)
    666#define	P2P_DEVCAP_DEVICE_LIMIT			BIT(4)
    667#define	P2P_DEVCAP_INVITATION_PROC		BIT(5)
    668
    669/*	Value of Group Capability Bitmap */
    670#define	P2P_GRPCAP_GO				BIT(0)
    671#define	P2P_GRPCAP_PERSISTENT_GROUP		BIT(1)
    672#define	P2P_GRPCAP_GROUP_LIMIT			BIT(2)
    673#define	P2P_GRPCAP_INTRABSS			BIT(3)
    674#define	P2P_GRPCAP_CROSS_CONN			BIT(4)
    675#define	P2P_GRPCAP_PERSISTENT_RECONN		BIT(5)
    676#define	P2P_GRPCAP_GROUP_FORMATION		BIT(6)
    677
    678/*	P2P Public Action Frame (Management Frame) */
    679#define	P2P_PUB_ACTION_ACTION			0x09
    680
    681/*	P2P Public Action Frame Type */
    682#define	P2P_GO_NEGO_REQ				0
    683#define	P2P_GO_NEGO_RESP			1
    684#define	P2P_GO_NEGO_CONF			2
    685#define	P2P_INVIT_REQ				3
    686#define	P2P_INVIT_RESP				4
    687#define	P2P_DEVDISC_REQ				5
    688#define	P2P_DEVDISC_RESP			6
    689#define	P2P_PROVISION_DISC_REQ			7
    690#define	P2P_PROVISION_DISC_RESP			8
    691
    692/*	P2P Action Frame Type */
    693#define	P2P_NOTICE_OF_ABSENCE			0
    694#define	P2P_PRESENCE_REQUEST			1
    695#define	P2P_PRESENCE_RESPONSE			2
    696#define	P2P_GO_DISC_REQUEST			3
    697
    698#define	P2P_MAX_PERSISTENT_GROUP_NUM		10
    699
    700#define	P2P_PROVISIONING_SCAN_CNT		3
    701
    702#define	P2P_WILDCARD_SSID_LEN			7
    703
    704/* default value, used when: (1)p2p disabed or (2)p2p enabled
    705 * but only do 1 scan phase */
    706#define	P2P_FINDPHASE_EX_NONE		0
    707/*  used when p2p enabled and want to do 1 scan phase and
    708 *  P2P_FINDPHASE_EX_MAX-1 find phase */
    709#define	P2P_FINDPHASE_EX_FULL		1
    710#define	P2P_FINDPHASE_EX_SOCIAL_FIRST	(P2P_FINDPHASE_EX_FULL+1)
    711#define	P2P_FINDPHASE_EX_MAX		4
    712#define	P2P_FINDPHASE_EX_SOCIAL_LAST	P2P_FINDPHASE_EX_MAX
    713
    714/* 5 seconds timeout for sending the provision discovery request */
    715#define	P2P_PROVISION_TIMEOUT		5000
    716/* 3 seconds timeout for sending the prov disc request concurrent mode */
    717#define	P2P_CONCURRENT_PROVISION_TIME	3000
    718/* 5 seconds timeout for receiving the group negotiation response */
    719#define	P2P_GO_NEGO_TIMEOUT		5000
    720/* 3 seconds timeout for sending the negotiation request under concurrent mode */
    721#define	P2P_CONCURRENT_GO_NEGO_TIME	3000
    722/* 100ms */
    723#define	P2P_TX_PRESCAN_TIMEOUT		100
    724/* 5 seconds timeout for sending the invitation request */
    725#define	P2P_INVITE_TIMEOUT		5000
    726/* 3 seconds timeout for sending the invitation request under concurrent mode */
    727#define	P2P_CONCURRENT_INVITE_TIME	3000
    728/* 25 seconds timeout to reset the scan channel (based on channel plan) */
    729#define	P2P_RESET_SCAN_CH		25000
    730#define	P2P_MAX_INTENT			15
    731
    732#define	P2P_MAX_NOA_NUM			2
    733
    734/*	WPS Configuration Method */
    735#define	WPS_CM_NONE			0x0000
    736#define	WPS_CM_LABEL			0x0004
    737#define	WPS_CM_DISPLYA			0x0008
    738#define	WPS_CM_EXTERNAL_NFC_TOKEN	0x0010
    739#define	WPS_CM_INTEGRATED_NFC_TOKEN	0x0020
    740#define	WPS_CM_NFC_INTERFACE		0x0040
    741#define	WPS_CM_PUSH_BUTTON		0x0080
    742#define	WPS_CM_KEYPAD			0x0100
    743#define	WPS_CM_SW_PUHS_BUTTON		0x0280
    744#define	WPS_CM_HW_PUHS_BUTTON		0x0480
    745#define	WPS_CM_SW_DISPLAY_P		0x2008
    746#define	WPS_CM_LCD_DISPLAY_P		0x4008
    747
    748enum P2P_ROLE {
    749	P2P_ROLE_DISABLE = 0,
    750	P2P_ROLE_DEVICE = 1,
    751	P2P_ROLE_CLIENT = 2,
    752	P2P_ROLE_GO = 3
    753};
    754
    755enum P2P_STATE {
    756	P2P_STATE_NONE = 0,			/* P2P disable */
    757	/* P2P had enabled and do nothing */
    758	P2P_STATE_IDLE = 1,
    759	P2P_STATE_LISTEN = 2,			/* In pure listen state */
    760	P2P_STATE_SCAN = 3,			/* In scan phase */
    761	/* In the listen state of find phase */
    762	P2P_STATE_FIND_PHASE_LISTEN = 4,
    763	/* In the search state of find phase */
    764	P2P_STATE_FIND_PHASE_SEARCH = 5,
    765	/* In P2P provisioning discovery */
    766	P2P_STATE_TX_PROVISION_DIS_REQ = 6,
    767	P2P_STATE_RX_PROVISION_DIS_RSP = 7,
    768	P2P_STATE_RX_PROVISION_DIS_REQ = 8,
    769	/* Doing the group owner negoitation handshake */
    770	P2P_STATE_GONEGO_ING = 9,
    771	/* finish the group negoitation handshake with success */
    772	P2P_STATE_GONEGO_OK = 10,
    773	/* finish the group negoitation handshake with failure */
    774	P2P_STATE_GONEGO_FAIL = 11,
    775	/* receiving the P2P Inviation request and match with the profile. */
    776	P2P_STATE_RECV_INVITE_REQ_MATCH = 12,
    777	/* Doing the P2P WPS */
    778	P2P_STATE_PROVISIONING_ING = 13,
    779	/* Finish the P2P WPS */
    780	P2P_STATE_PROVISIONING_DONE = 14,
    781	/* Transmit the P2P Invitation request */
    782	P2P_STATE_TX_INVITE_REQ = 15,
    783	/* Receiving the P2P Invitation response */
    784	P2P_STATE_RX_INVITE_RESP_OK = 16,
    785	/* receiving the P2P Inviation request and dismatch with the profile. */
    786	P2P_STATE_RECV_INVITE_REQ_DISMATCH = 17,
    787	/* receiving the P2P Inviation request and this wifi is GO. */
    788	P2P_STATE_RECV_INVITE_REQ_GO = 18,
    789	/* receiving the P2P Inviation request to join an existing P2P Group. */
    790	P2P_STATE_RECV_INVITE_REQ_JOIN = 19,
    791	/* recveing the P2P Inviation response with failure */
    792	P2P_STATE_RX_INVITE_RESP_FAIL = 20,
    793	/* receiving p2p negoitation response with information is not available */
    794	P2P_STATE_RX_INFOR_NOREADY = 21,
    795	/* sending p2p negoitation response with information is not available */
    796	P2P_STATE_TX_INFOR_NOREADY = 22,
    797};
    798
    799enum P2P_WPSINFO {
    800	P2P_NO_WPSINFO				= 0,
    801	P2P_GOT_WPSINFO_PEER_DISPLAY_PIN	= 1,
    802	P2P_GOT_WPSINFO_SELF_DISPLAY_PIN	= 2,
    803	P2P_GOT_WPSINFO_PBC			= 3,
    804};
    805
    806#define	P2P_PRIVATE_IOCTL_SET_LEN		64
    807
    808enum P2P_PROTO_WK_ID {
    809	P2P_FIND_PHASE_WK = 0,
    810	P2P_RESTORE_STATE_WK = 1,
    811	P2P_PRE_TX_PROVDISC_PROCESS_WK = 2,
    812	P2P_PRE_TX_NEGOREQ_PROCESS_WK = 3,
    813	P2P_PRE_TX_INVITEREQ_PROCESS_WK = 4,
    814	P2P_AP_P2P_CH_SWITCH_PROCESS_WK = 5,
    815	P2P_RO_CH_WK = 6,
    816};
    817
    818enum P2P_PS_STATE {
    819	P2P_PS_DISABLE = 0,
    820	P2P_PS_ENABLE = 1,
    821	P2P_PS_SCAN = 2,
    822	P2P_PS_SCAN_DONE = 3,
    823	P2P_PS_ALLSTASLEEP = 4, /*  for P2P GO */
    824};
    825
    826enum P2P_PS_MODE {
    827	P2P_PS_NONE = 0,
    828	P2P_PS_CTWINDOW = 1,
    829	P2P_PS_NOA	 = 2,
    830	P2P_PS_MIX = 3, /*  CTWindow and NoA */
    831};
    832
    833#define IP_MCAST_MAC(mac)				\
    834	((mac[0] == 0x01) && (mac[1] == 0x00) && (mac[2] == 0x5e))
    835#define ICMPV6_MCAST_MAC(mac)				\
    836	((mac[0] == 0x33) && (mac[1] == 0x33) && (mac[2] != 0xff))
    837
    838#endif /*  _WIFI_H_ */