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 (25699B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/******************************************************************************
      3 *
      4 * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
      5 *
      6 ******************************************************************************/
      7#ifndef _WIFI_H_
      8#define _WIFI_H_
      9
     10#define WLAN_ETHHDR_LEN		14
     11#define WLAN_ETHADDR_LEN	6
     12#define WLAN_IEEE_OUI_LEN	3
     13#define WLAN_ADDR_LEN		6
     14#define WLAN_CRC_LEN		4
     15#define WLAN_BSSID_LEN		6
     16#define WLAN_BSS_TS_LEN		8
     17#define WLAN_HDR_A3_LEN		24
     18#define WLAN_HDR_A4_LEN		30
     19#define WLAN_HDR_A3_QOS_LEN	26
     20#define WLAN_HDR_A4_QOS_LEN	32
     21#define WLAN_SSID_MAXLEN	32
     22#define WLAN_DATA_MAXLEN	2312
     23
     24#define WLAN_A3_PN_OFFSET	24
     25#define WLAN_A4_PN_OFFSET	30
     26
     27#define WLAN_MIN_ETHFRM_LEN	60
     28#define WLAN_MAX_ETHFRM_LEN	1514
     29#define WLAN_ETHHDR_LEN		14
     30#define WLAN_WMM_LEN		24
     31
     32#define P80211CAPTURE_VERSION	0x80211001
     33
     34/*  This value is tested by WiFi 11n Test Plan 5.2.3. */
     35/*  This test verifies the WLAN NIC can update the NAV through sending the CTS with large duration. */
     36#define	WiFiNavUpperUs				30000	/*  30 ms */
     37
     38enum {
     39	WIFI_MGT_TYPE  =	(0),
     40	WIFI_CTRL_TYPE =	(BIT(2)),
     41	WIFI_DATA_TYPE =	(BIT(3)),
     42	WIFI_QOS_DATA_TYPE	= (BIT(7)|BIT(3)),	/*  QoS Data */
     43};
     44
     45enum {
     46
     47    /*  below is for mgt frame */
     48    WIFI_ASSOCREQ       = (0 | WIFI_MGT_TYPE),
     49    WIFI_ASSOCRSP       = (BIT(4) | WIFI_MGT_TYPE),
     50    WIFI_REASSOCREQ     = (BIT(5) | WIFI_MGT_TYPE),
     51    WIFI_REASSOCRSP     = (BIT(5) | BIT(4) | WIFI_MGT_TYPE),
     52    WIFI_PROBEREQ       = (BIT(6) | WIFI_MGT_TYPE),
     53    WIFI_PROBERSP       = (BIT(6) | BIT(4) | WIFI_MGT_TYPE),
     54    WIFI_BEACON         = (BIT(7) | WIFI_MGT_TYPE),
     55    WIFI_ATIM           = (BIT(7) | BIT(4) | WIFI_MGT_TYPE),
     56    WIFI_DISASSOC       = (BIT(7) | BIT(5) | WIFI_MGT_TYPE),
     57    WIFI_AUTH           = (BIT(7) | BIT(5) | BIT(4) | WIFI_MGT_TYPE),
     58    WIFI_DEAUTH         = (BIT(7) | BIT(6) | WIFI_MGT_TYPE),
     59    WIFI_ACTION         = (BIT(7) | BIT(6) | BIT(4) | WIFI_MGT_TYPE),
     60    WIFI_ACTION_NOACK = (BIT(7) | BIT(6) | BIT(5) | WIFI_MGT_TYPE),
     61
     62    /*  below is for control frame */
     63    WIFI_NDPA         = (BIT(6) | BIT(4) | WIFI_CTRL_TYPE),
     64    WIFI_PSPOLL         = (BIT(7) | BIT(5) | WIFI_CTRL_TYPE),
     65    WIFI_RTS            = (BIT(7) | BIT(5) | BIT(4) | WIFI_CTRL_TYPE),
     66    WIFI_CTS            = (BIT(7) | BIT(6) | WIFI_CTRL_TYPE),
     67    WIFI_ACK            = (BIT(7) | BIT(6) | BIT(4) | WIFI_CTRL_TYPE),
     68    WIFI_CFEND          = (BIT(7) | BIT(6) | BIT(5) | WIFI_CTRL_TYPE),
     69    WIFI_CFEND_CFACK    = (BIT(7) | BIT(6) | BIT(5) | BIT(4) | WIFI_CTRL_TYPE),
     70
     71    /*  below is for data frame */
     72    WIFI_DATA           = (0 | WIFI_DATA_TYPE),
     73    WIFI_DATA_CFACK     = (BIT(4) | WIFI_DATA_TYPE),
     74    WIFI_DATA_CFPOLL    = (BIT(5) | WIFI_DATA_TYPE),
     75    WIFI_DATA_CFACKPOLL = (BIT(5) | BIT(4) | WIFI_DATA_TYPE),
     76    WIFI_DATA_NULL      = (BIT(6) | WIFI_DATA_TYPE),
     77    WIFI_CF_ACK         = (BIT(6) | BIT(4) | WIFI_DATA_TYPE),
     78    WIFI_CF_POLL        = (BIT(6) | BIT(5) | WIFI_DATA_TYPE),
     79    WIFI_CF_ACKPOLL     = (BIT(6) | BIT(5) | BIT(4) | WIFI_DATA_TYPE),
     80    WIFI_QOS_DATA_NULL	= (BIT(6) | WIFI_QOS_DATA_TYPE),
     81};
     82
     83#define _TO_DS_		BIT(8)
     84#define _FROM_DS_	BIT(9)
     85#define _MORE_FRAG_	BIT(10)
     86#define _RETRY_		BIT(11)
     87#define _PWRMGT_	BIT(12)
     88#define _MORE_DATA_	BIT(13)
     89#define _PRIVACY_	BIT(14)
     90#define _ORDER_			BIT(15)
     91
     92#define SetToDs(pbuf)	\
     93	(*(__le16 *)(pbuf) |= cpu_to_le16(_TO_DS_))
     94
     95#define GetToDs(pbuf)	(((*(__le16 *)(pbuf)) & cpu_to_le16(_TO_DS_)) != 0)
     96
     97#define SetFrDs(pbuf)	\
     98	(*(__le16 *)(pbuf) |= cpu_to_le16(_FROM_DS_))
     99
    100#define GetFrDs(pbuf)	(((*(__le16 *)(pbuf)) & cpu_to_le16(_FROM_DS_)) != 0)
    101
    102#define get_tofr_ds(pframe)	((GetToDs(pframe) << 1) | GetFrDs(pframe))
    103
    104#define SetMFrag(pbuf)	\
    105	(*(__le16 *)(pbuf) |= cpu_to_le16(_MORE_FRAG_))
    106
    107#define GetMFrag(pbuf)	(((*(__le16 *)(pbuf)) & cpu_to_le16(_MORE_FRAG_)) != 0)
    108
    109#define ClearMFrag(pbuf)	\
    110	(*(__le16 *)(pbuf) &= (~cpu_to_le16(_MORE_FRAG_)))
    111
    112#define GetRetry(pbuf)	(((*(__le16 *)(pbuf)) & cpu_to_le16(_RETRY_)) != 0)
    113
    114#define ClearRetry(pbuf)	\
    115	(*(__le16 *)(pbuf) &= (~cpu_to_le16(_RETRY_)))
    116
    117#define SetPwrMgt(pbuf)	\
    118	(*(__le16 *)(pbuf) |= cpu_to_le16(_PWRMGT_))
    119
    120#define GetPwrMgt(pbuf)	(((*(__le16 *)(pbuf)) & cpu_to_le16(_PWRMGT_)) != 0)
    121
    122#define ClearPwrMgt(pbuf)	\
    123	(*(__le16 *)(pbuf) &= (~cpu_to_le16(_PWRMGT_)))
    124
    125#define SetMData(pbuf)	\
    126	(*(__le16 *)(pbuf) |= cpu_to_le16(_MORE_DATA_))
    127
    128#define GetMData(pbuf)	(((*(__le16 *)(pbuf)) & cpu_to_le16(_MORE_DATA_)) != 0)
    129
    130#define ClearMData(pbuf)	\
    131	(*(__le16 *)(pbuf) &= (~cpu_to_le16(_MORE_DATA_)))
    132
    133#define SetPrivacy(pbuf)	\
    134	(*(__le16 *)(pbuf) |= cpu_to_le16(_PRIVACY_))
    135
    136#define GetPrivacy(pbuf)					\
    137	(((*(__le16 *)(pbuf)) & cpu_to_le16(_PRIVACY_)) != 0)
    138
    139#define GetOrder(pbuf)					\
    140	(((*(__le16 *)(pbuf)) & cpu_to_le16(_ORDER_)) != 0)
    141
    142#define GetFrameType(pbuf)				\
    143	(le16_to_cpu(*(__le16 *)(pbuf)) & (BIT(3) | BIT(2)))
    144
    145#define SetFrameType(pbuf, type)	\
    146	do {	\
    147		*(unsigned short *)(pbuf) &= cpu_to_le16(~(BIT(3) | BIT(2))); \
    148		*(unsigned short *)(pbuf) |= cpu_to_le16(type); \
    149	} while (0)
    150
    151#define GetFrameSubType(pbuf)	(le16_to_cpu(*(__le16 *)(pbuf)) & (BIT(7) |\
    152	 BIT(6) | BIT(5) | BIT(4) | BIT(3) | BIT(2)))
    153
    154#define SetFrameSubType(pbuf, type) \
    155	do {    \
    156		*(__le16 *)(pbuf) &= cpu_to_le16(~(BIT(7) | BIT(6) |	\
    157		 BIT(5) | BIT(4) | BIT(3) | BIT(2))); \
    158		*(__le16 *)(pbuf) |= cpu_to_le16(type); \
    159	} while (0)
    160
    161#define GetSequence(pbuf)			\
    162	(le16_to_cpu(*(__le16 *)((size_t)(pbuf) + 22)) >> 4)
    163
    164#define GetFragNum(pbuf)			\
    165	(le16_to_cpu(*(__le16 *)((size_t)(pbuf) + 22)) & 0x0f)
    166
    167#define GetTupleCache(pbuf)			\
    168	(cpu_to_le16(*(unsigned short *)((size_t)(pbuf) + 22)))
    169
    170#define SetFragNum(pbuf, num) \
    171	do {    \
    172		*(unsigned short *)((size_t)(pbuf) + 22) = \
    173			((*(unsigned short *)((size_t)(pbuf) + 22)) &	\
    174			le16_to_cpu(~(0x000f))) | \
    175			cpu_to_le16(0x0f & (num));     \
    176	} while (0)
    177
    178#define SetSeqNum(pbuf, num) \
    179	do {    \
    180		*(__le16 *)((size_t)(pbuf) + 22) = \
    181			((*(__le16 *)((size_t)(pbuf) + 22)) & cpu_to_le16((unsigned short)0x000f)) | \
    182			cpu_to_le16((unsigned short)(0xfff0 & (num << 4))); \
    183	} while (0)
    184
    185#define SetDuration(pbuf, dur) \
    186	(*(__le16 *)((size_t)(pbuf) + 2) = cpu_to_le16(0xffff & (dur)))
    187
    188
    189#define SetPriority(pbuf, tid)	\
    190	(*(__le16 *)(pbuf) |= cpu_to_le16(tid & 0xf))
    191
    192#define GetPriority(pbuf)	((le16_to_cpu(*(__le16 *)(pbuf))) & 0xf)
    193
    194#define SetEOSP(pbuf, eosp)	\
    195		(*(__le16 *)(pbuf) |= cpu_to_le16((eosp & 1) << 4))
    196
    197#define SetAckpolicy(pbuf, ack)	\
    198	(*(__le16 *)(pbuf) |= cpu_to_le16((ack & 3) << 5))
    199
    200#define GetAckpolicy(pbuf) (((le16_to_cpu(*(__le16 *)pbuf)) >> 5) & 0x3)
    201
    202#define GetAMsdu(pbuf) (((le16_to_cpu(*(__le16 *)pbuf)) >> 7) & 0x1)
    203
    204#define GetAid(pbuf)	(le16_to_cpu(*(__le16 *)((size_t)(pbuf) + 2)) & 0x3fff)
    205
    206#define GetAddr1Ptr(pbuf)	((unsigned char *)((size_t)(pbuf) + 4))
    207
    208#define GetAddr2Ptr(pbuf)	((unsigned char *)((size_t)(pbuf) + 10))
    209
    210#define GetAddr3Ptr(pbuf)	((unsigned char *)((size_t)(pbuf) + 16))
    211
    212#define GetAddr4Ptr(pbuf)	((unsigned char *)((size_t)(pbuf) + 24))
    213
    214#define MacAddr_isBcst(addr) \
    215	(\
    216	((addr[0] == 0xff) && (addr[1] == 0xff) && \
    217	(addr[2] == 0xff) && (addr[3] == 0xff) && \
    218	(addr[4] == 0xff) && (addr[5] == 0xff))  ? true : false \
    219)
    220
    221static inline int IS_MCAST(unsigned char *da)
    222{
    223	if ((*da) & 0x01)
    224		return true;
    225	else
    226		return false;
    227}
    228
    229static inline unsigned char *rtl8723bs_get_ra(unsigned char *pframe)
    230{
    231	unsigned char *ra;
    232	ra = GetAddr1Ptr(pframe);
    233	return ra;
    234}
    235static inline unsigned char *get_ta(unsigned char *pframe)
    236{
    237	unsigned char *ta;
    238	ta = GetAddr2Ptr(pframe);
    239	return ta;
    240}
    241
    242static inline unsigned char *get_da(unsigned char *pframe)
    243{
    244	unsigned char *da;
    245	unsigned int	to_fr_ds	= (GetToDs(pframe) << 1) | GetFrDs(pframe);
    246
    247	switch (to_fr_ds) {
    248	case 0x00:	/*  ToDs = 0, FromDs = 0 */
    249		da = GetAddr1Ptr(pframe);
    250		break;
    251	case 0x01:	/*  ToDs = 0, FromDs = 1 */
    252		da = GetAddr1Ptr(pframe);
    253		break;
    254	case 0x02:	/*  ToDs = 1, FromDs = 0 */
    255		da = GetAddr3Ptr(pframe);
    256		break;
    257	default:	/*  ToDs = 1, FromDs = 1 */
    258		da = GetAddr3Ptr(pframe);
    259		break;
    260	}
    261
    262	return da;
    263}
    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
    286	return sa;
    287}
    288
    289static inline unsigned char *get_hdr_bssid(unsigned char *pframe)
    290{
    291	unsigned char *sa = NULL;
    292	unsigned int	to_fr_ds	= (GetToDs(pframe) << 1) | GetFrDs(pframe);
    293
    294	switch (to_fr_ds) {
    295	case 0x00:	/*  ToDs = 0, FromDs = 0 */
    296		sa = GetAddr3Ptr(pframe);
    297		break;
    298	case 0x01:	/*  ToDs = 0, FromDs = 1 */
    299		sa = GetAddr2Ptr(pframe);
    300		break;
    301	case 0x02:	/*  ToDs = 1, FromDs = 0 */
    302		sa = GetAddr1Ptr(pframe);
    303		break;
    304	case 0x03:	/*  ToDs = 1, FromDs = 1 */
    305		sa = GetAddr1Ptr(pframe);
    306		break;
    307	}
    308
    309	return sa;
    310}
    311
    312
    313static inline int IsFrameTypeCtrl(unsigned char *pframe)
    314{
    315	if (WIFI_CTRL_TYPE == GetFrameType(pframe))
    316		return true;
    317	else
    318		return false;
    319}
    320/*-----------------------------------------------------------------------------
    321			Below is for the security related definition
    322------------------------------------------------------------------------------*/
    323#define _RESERVED_FRAME_TYPE_	0
    324#define _SKB_FRAME_TYPE_		2
    325#define _PRE_ALLOCMEM_			1
    326#define _PRE_ALLOCHDR_			3
    327#define _PRE_ALLOCLLCHDR_		4
    328#define _PRE_ALLOCICVHDR_		5
    329#define _PRE_ALLOCMICHDR_		6
    330
    331#define _ACKCTSLNG_				14	/* 14 bytes long, including crclng */
    332#define _CRCLNG_				4
    333
    334#define _ASOCREQ_IE_OFFSET_		4	/*  excluding wlan_hdr */
    335#define	_ASOCRSP_IE_OFFSET_		6
    336#define _REASOCREQ_IE_OFFSET_	10
    337#define _REASOCRSP_IE_OFFSET_	6
    338#define _PROBEREQ_IE_OFFSET_	0
    339#define	_PROBERSP_IE_OFFSET_	12
    340#define _AUTH_IE_OFFSET_		6
    341#define _DEAUTH_IE_OFFSET_		0
    342#define _BEACON_IE_OFFSET_		12
    343#define _PUBLIC_ACTION_IE_OFFSET_	8
    344
    345#define _FIXED_IE_LENGTH_			_BEACON_IE_OFFSET_
    346
    347/* ---------------------------------------------------------------------------
    348					Below is the fixed elements...
    349-----------------------------------------------------------------------------*/
    350#define _AUTH_ALGM_NUM_			2
    351#define _AUTH_SEQ_NUM_			2
    352#define _BEACON_ITERVAL_		2
    353#define _CAPABILITY_			2
    354#define _CURRENT_APADDR_		6
    355#define _LISTEN_INTERVAL_		2
    356#define _RSON_CODE_				2
    357#define _ASOC_ID_				2
    358#define _STATUS_CODE_			2
    359#define _TIMESTAMP_				8
    360
    361#define AUTH_ODD_TO				0
    362#define AUTH_EVEN_TO			1
    363
    364#define WLAN_ETHCONV_ENCAP		1
    365#define WLAN_ETHCONV_RFC1042	2
    366#define WLAN_ETHCONV_8021h		3
    367
    368/*-----------------------------------------------------------------------------
    369				Below is the definition for 802.11i / 802.1x
    370------------------------------------------------------------------------------*/
    371#define _IEEE8021X_MGT_			1		/*  WPA */
    372#define _IEEE8021X_PSK_			2		/*  WPA with pre-shared key */
    373
    374#define _MME_IE_LENGTH_  18
    375/*-----------------------------------------------------------------------------
    376				Below is the definition for WMM
    377------------------------------------------------------------------------------*/
    378#define _WMM_IE_Length_				7  /*  for WMM STA */
    379#define _WMM_Para_Element_Length_		24
    380
    381
    382/*-----------------------------------------------------------------------------
    383				Below is the definition for 802.11n
    384------------------------------------------------------------------------------*/
    385
    386#define SetOrderBit(pbuf)	\
    387	do	{	\
    388		*(unsigned short *)(pbuf) |= cpu_to_le16(_ORDER_); \
    389	} while (0)
    390
    391#define GetOrderBit(pbuf)	(((*(unsigned short *)(pbuf)) & cpu_to_le16(_ORDER_)) != 0)
    392
    393#define ACT_CAT_VENDOR				0x7F/* 127 */
    394
    395/**
    396 * struct rtw_ieee80211_ht_cap - HT additional information
    397 *
    398 * This structure refers to "HT information element" as
    399 * described in 802.11n draft section 7.3.2.53
    400 */
    401struct ieee80211_ht_addt_info {
    402	unsigned char control_chan;
    403	unsigned char 	ht_param;
    404	__le16	operation_mode;
    405	__le16	stbc_param;
    406	unsigned char 	basic_set[16];
    407} __attribute__ ((packed));
    408
    409
    410struct HT_caps_element {
    411	union {
    412		struct {
    413			__le16	HT_caps_info;
    414			unsigned char AMPDU_para;
    415			unsigned char MCS_rate[16];
    416			__le16	HT_ext_caps;
    417			__le16	Beamforming_caps;
    418			unsigned char ASEL_caps;
    419		} HT_cap_element;
    420		unsigned char HT_cap[26];
    421	} u;
    422} __attribute__ ((packed));
    423
    424struct HT_info_element {
    425	unsigned char primary_channel;
    426	unsigned char infos[5];
    427	unsigned char MCS_rate[16];
    428}  __attribute__ ((packed));
    429
    430struct AC_param {
    431	unsigned char 	ACI_AIFSN;
    432	unsigned char 	CW;
    433	__le16	TXOP_limit;
    434}  __attribute__ ((packed));
    435
    436struct WMM_para_element {
    437	unsigned char 	QoS_info;
    438	unsigned char 	reserved;
    439	struct AC_param	ac_param[4];
    440}  __attribute__ ((packed));
    441
    442struct ADDBA_request {
    443	unsigned char 	dialog_token;
    444	__le16	BA_para_set;
    445	__le16	BA_timeout_value;
    446	__le16	BA_starting_seqctrl;
    447}  __attribute__ ((packed));
    448
    449/* 802.11n HT capabilities masks */
    450#define IEEE80211_HT_CAP_LDPC_CODING		0x0001
    451#define IEEE80211_HT_CAP_SUP_WIDTH		0x0002
    452#define IEEE80211_HT_CAP_SM_PS			0x000C
    453#define IEEE80211_HT_CAP_GRN_FLD		0x0010
    454#define IEEE80211_HT_CAP_SGI_20			0x0020
    455#define IEEE80211_HT_CAP_SGI_40			0x0040
    456#define IEEE80211_HT_CAP_TX_STBC			0x0080
    457#define IEEE80211_HT_CAP_RX_STBC_1R		0x0100
    458#define IEEE80211_HT_CAP_RX_STBC_2R		0x0200
    459#define IEEE80211_HT_CAP_RX_STBC_3R		0x0300
    460#define IEEE80211_HT_CAP_DELAY_BA		0x0400
    461#define IEEE80211_HT_CAP_MAX_AMSDU		0x0800
    462#define IEEE80211_HT_CAP_DSSSCCK40		0x1000
    463/* 802.11n HT capability AMPDU settings */
    464#define IEEE80211_HT_CAP_AMPDU_FACTOR		0x03
    465#define IEEE80211_HT_CAP_AMPDU_DENSITY		0x1C
    466/* 802.11n HT capability MSC set */
    467#define IEEE80211_SUPP_MCS_SET_UEQM		4
    468#define IEEE80211_HT_CAP_MAX_STREAMS		4
    469#define IEEE80211_SUPP_MCS_SET_LEN		10
    470/* maximum streams the spec allows */
    471#define IEEE80211_HT_CAP_MCS_TX_DEFINED		0x01
    472#define IEEE80211_HT_CAP_MCS_TX_RX_DIFF		0x02
    473#define IEEE80211_HT_CAP_MCS_TX_STREAMS		0x0C
    474#define IEEE80211_HT_CAP_MCS_TX_UEQM		0x10
    475/* 802.11n HT capability TXBF capability */
    476#define IEEE80211_HT_CAP_TXBF_RX_NDP		0x00000008
    477#define IEEE80211_HT_CAP_TXBF_TX_NDP		0x00000010
    478#define IEEE80211_HT_CAP_TXBF_EXPLICIT_COMP_STEERING_CAP	0x00000400
    479
    480/* endif */
    481
    482/* 	===============WPS Section =============== */
    483/* 	For WPSv1.0 */
    484#define WPSOUI							0x0050f204
    485/* 	WPS attribute ID */
    486#define WPS_ATTR_VER1					0x104A
    487#define WPS_ATTR_SIMPLE_CONF_STATE	0x1044
    488#define WPS_ATTR_RESP_TYPE			0x103B
    489#define WPS_ATTR_UUID_E				0x1047
    490#define WPS_ATTR_MANUFACTURER		0x1021
    491#define WPS_ATTR_MODEL_NAME			0x1023
    492#define WPS_ATTR_MODEL_NUMBER		0x1024
    493#define WPS_ATTR_SERIAL_NUMBER		0x1042
    494#define WPS_ATTR_PRIMARY_DEV_TYPE	0x1054
    495#define WPS_ATTR_SEC_DEV_TYPE_LIST	0x1055
    496#define WPS_ATTR_DEVICE_NAME			0x1011
    497#define WPS_ATTR_CONF_METHOD			0x1008
    498#define WPS_ATTR_RF_BANDS				0x103C
    499#define WPS_ATTR_DEVICE_PWID			0x1012
    500#define WPS_ATTR_REQUEST_TYPE			0x103A
    501#define WPS_ATTR_ASSOCIATION_STATE	0x1002
    502#define WPS_ATTR_CONFIG_ERROR			0x1009
    503#define WPS_ATTR_VENDOR_EXT			0x1049
    504#define WPS_ATTR_SELECTED_REGISTRAR	0x1041
    505
    506/* 	Value of WPS attribute "WPS_ATTR_DEVICE_NAME */
    507#define WPS_MAX_DEVICE_NAME_LEN		32
    508
    509/* 	Value of WPS Request Type Attribute */
    510#define WPS_REQ_TYPE_ENROLLEE_INFO_ONLY			0x00
    511#define WPS_REQ_TYPE_ENROLLEE_OPEN_8021X		0x01
    512#define WPS_REQ_TYPE_REGISTRAR					0x02
    513#define WPS_REQ_TYPE_WLAN_MANAGER_REGISTRAR	0x03
    514
    515/* 	Value of WPS Response Type Attribute */
    516#define WPS_RESPONSE_TYPE_INFO_ONLY	0x00
    517#define WPS_RESPONSE_TYPE_8021X		0x01
    518#define WPS_RESPONSE_TYPE_REGISTRAR	0x02
    519#define WPS_RESPONSE_TYPE_AP			0x03
    520
    521/* 	Value of WPS WiFi Simple Configuration State Attribute */
    522#define WPS_WSC_STATE_NOT_CONFIG	0x01
    523#define WPS_WSC_STATE_CONFIG			0x02
    524
    525/* 	Value of WPS Version Attribute */
    526#define WPS_VERSION_1					0x10
    527
    528/* 	Value of WPS Configuration Method Attribute */
    529#define WPS_CONFIG_METHOD_FLASH		0x0001
    530#define WPS_CONFIG_METHOD_ETHERNET	0x0002
    531#define WPS_CONFIG_METHOD_LABEL		0x0004
    532#define WPS_CONFIG_METHOD_DISPLAY	0x0008
    533#define WPS_CONFIG_METHOD_E_NFC		0x0010
    534#define WPS_CONFIG_METHOD_I_NFC		0x0020
    535#define WPS_CONFIG_METHOD_NFC		0x0040
    536#define WPS_CONFIG_METHOD_PBC		0x0080
    537#define WPS_CONFIG_METHOD_KEYPAD	0x0100
    538#define WPS_CONFIG_METHOD_VPBC		0x0280
    539#define WPS_CONFIG_METHOD_PPBC		0x0480
    540#define WPS_CONFIG_METHOD_VDISPLAY	0x2008
    541#define WPS_CONFIG_METHOD_PDISPLAY	0x4008
    542
    543/* 	Value of Category ID of WPS Primary Device Type Attribute */
    544#define WPS_PDT_CID_DISPLAYS			0x0007
    545#define WPS_PDT_CID_MULIT_MEDIA		0x0008
    546#define WPS_PDT_CID_RTK_WIDI			WPS_PDT_CID_MULIT_MEDIA
    547
    548/* 	Value of Sub Category ID of WPS Primary Device Type Attribute */
    549#define WPS_PDT_SCID_MEDIA_SERVER	0x0005
    550#define WPS_PDT_SCID_RTK_DMP			WPS_PDT_SCID_MEDIA_SERVER
    551
    552/* 	Value of Device Password ID */
    553#define WPS_DPID_PIN					0x0000
    554#define WPS_DPID_USER_SPEC			0x0001
    555#define WPS_DPID_MACHINE_SPEC			0x0002
    556#define WPS_DPID_REKEY					0x0003
    557#define WPS_DPID_PBC					0x0004
    558#define WPS_DPID_REGISTRAR_SPEC		0x0005
    559
    560/* 	Value of WPS RF Bands Attribute */
    561#define WPS_RF_BANDS_2_4_GHZ		0x01
    562#define WPS_RF_BANDS_5_GHZ		0x02
    563
    564/* 	Value of WPS Association State Attribute */
    565#define WPS_ASSOC_STATE_NOT_ASSOCIATED			0x00
    566#define WPS_ASSOC_STATE_CONNECTION_SUCCESS		0x01
    567#define WPS_ASSOC_STATE_CONFIGURATION_FAILURE	0x02
    568#define WPS_ASSOC_STATE_ASSOCIATION_FAILURE		0x03
    569#define WPS_ASSOC_STATE_IP_FAILURE				0x04
    570
    571/* 	=====================P2P Section ===================== */
    572/* 	For P2P */
    573#define	P2POUI							0x506F9A09
    574
    575/* 	P2P Attribute ID */
    576#define	P2P_ATTR_STATUS					0x00
    577#define	P2P_ATTR_MINOR_REASON_CODE		0x01
    578#define	P2P_ATTR_CAPABILITY				0x02
    579#define	P2P_ATTR_DEVICE_ID				0x03
    580#define	P2P_ATTR_GO_INTENT				0x04
    581#define	P2P_ATTR_CONF_TIMEOUT			0x05
    582#define	P2P_ATTR_LISTEN_CH				0x06
    583#define	P2P_ATTR_GROUP_BSSID				0x07
    584#define	P2P_ATTR_EX_LISTEN_TIMING		0x08
    585#define	P2P_ATTR_INTENTED_IF_ADDR		0x09
    586#define	P2P_ATTR_MANAGEABILITY			0x0A
    587#define	P2P_ATTR_CH_LIST					0x0B
    588#define	P2P_ATTR_NOA						0x0C
    589#define	P2P_ATTR_DEVICE_INFO				0x0D
    590#define	P2P_ATTR_GROUP_INFO				0x0E
    591#define	P2P_ATTR_GROUP_ID					0x0F
    592#define	P2P_ATTR_INTERFACE				0x10
    593#define	P2P_ATTR_OPERATING_CH			0x11
    594#define	P2P_ATTR_INVITATION_FLAGS		0x12
    595
    596/* 	Value of Status Attribute */
    597#define	P2P_STATUS_SUCCESS						0x00
    598#define	P2P_STATUS_FAIL_INFO_UNAVAILABLE		0x01
    599#define	P2P_STATUS_FAIL_INCOMPATIBLE_PARAM		0x02
    600#define	P2P_STATUS_FAIL_LIMIT_REACHED			0x03
    601#define	P2P_STATUS_FAIL_INVALID_PARAM			0x04
    602#define	P2P_STATUS_FAIL_REQUEST_UNABLE			0x05
    603#define	P2P_STATUS_FAIL_PREVOUS_PROTO_ERR		0x06
    604#define	P2P_STATUS_FAIL_NO_COMMON_CH			0x07
    605#define	P2P_STATUS_FAIL_UNKNOWN_P2PGROUP		0x08
    606#define	P2P_STATUS_FAIL_BOTH_GOINTENT_15		0x09
    607#define	P2P_STATUS_FAIL_INCOMPATIBLE_PROVSION	0x0A
    608#define	P2P_STATUS_FAIL_USER_REJECT				0x0B
    609
    610/* 	Value of Invitation Flags Attribute */
    611#define	P2P_INVITATION_FLAGS_PERSISTENT			BIT(0)
    612
    613#define	DMP_P2P_DEVCAP_SUPPORT	(P2P_DEVCAP_SERVICE_DISCOVERY | \
    614									P2P_DEVCAP_CLIENT_DISCOVERABILITY | \
    615									P2P_DEVCAP_CONCURRENT_OPERATION | \
    616									P2P_DEVCAP_INVITATION_PROC)
    617
    618#define	DMP_P2P_GRPCAP_SUPPORT	(P2P_GRPCAP_INTRABSS)
    619
    620/* 	Value of Device Capability Bitmap */
    621#define	P2P_DEVCAP_SERVICE_DISCOVERY		BIT(0)
    622#define	P2P_DEVCAP_CLIENT_DISCOVERABILITY	BIT(1)
    623#define	P2P_DEVCAP_CONCURRENT_OPERATION	BIT(2)
    624#define	P2P_DEVCAP_INFRA_MANAGED			BIT(3)
    625#define	P2P_DEVCAP_DEVICE_LIMIT				BIT(4)
    626#define	P2P_DEVCAP_INVITATION_PROC			BIT(5)
    627
    628/* 	Value of Group Capability Bitmap */
    629#define	P2P_GRPCAP_GO							BIT(0)
    630#define	P2P_GRPCAP_PERSISTENT_GROUP			BIT(1)
    631#define	P2P_GRPCAP_GROUP_LIMIT				BIT(2)
    632#define	P2P_GRPCAP_INTRABSS					BIT(3)
    633#define	P2P_GRPCAP_CROSS_CONN				BIT(4)
    634#define	P2P_GRPCAP_PERSISTENT_RECONN		BIT(5)
    635#define	P2P_GRPCAP_GROUP_FORMATION			BIT(6)
    636
    637/* 	P2P Public Action Frame (Management Frame) */
    638#define	P2P_PUB_ACTION_ACTION				0x09
    639
    640/* 	P2P Public Action Frame Type */
    641#define	P2P_GO_NEGO_REQ						0
    642#define	P2P_GO_NEGO_RESP						1
    643#define	P2P_GO_NEGO_CONF						2
    644#define	P2P_INVIT_REQ							3
    645#define	P2P_INVIT_RESP							4
    646#define	P2P_DEVDISC_REQ						5
    647#define	P2P_DEVDISC_RESP						6
    648#define	P2P_PROVISION_DISC_REQ				7
    649#define	P2P_PROVISION_DISC_RESP				8
    650
    651/* 	P2P Action Frame Type */
    652#define	P2P_NOTICE_OF_ABSENCE	0
    653#define	P2P_PRESENCE_REQUEST		1
    654#define	P2P_PRESENCE_RESPONSE	2
    655#define	P2P_GO_DISC_REQUEST		3
    656
    657
    658#define	P2P_MAX_PERSISTENT_GROUP_NUM		10
    659
    660#define	P2P_PROVISIONING_SCAN_CNT			3
    661
    662#define	P2P_WILDCARD_SSID_LEN				7
    663
    664#define	P2P_FINDPHASE_EX_NONE				0	/*  default value, used when: (1)p2p disabled or (2)p2p enabled but only do 1 scan phase */
    665#define	P2P_FINDPHASE_EX_FULL				1	/*  used when p2p enabled and want to do 1 scan phase and P2P_FINDPHASE_EX_MAX-1 find phase */
    666#define	P2P_FINDPHASE_EX_SOCIAL_FIRST		(P2P_FINDPHASE_EX_FULL+1)
    667#define	P2P_FINDPHASE_EX_MAX					4
    668#define	P2P_FINDPHASE_EX_SOCIAL_LAST		P2P_FINDPHASE_EX_MAX
    669
    670#define	P2P_PROVISION_TIMEOUT				5000	/* 	5 seconds timeout for sending the provision discovery request */
    671#define	P2P_CONCURRENT_PROVISION_TIMEOUT	3000	/* 	3 seconds timeout for sending the provision discovery request under concurrent mode */
    672#define	P2P_GO_NEGO_TIMEOUT					5000	/* 	5 seconds timeout for receiving the group negotiation response */
    673#define	P2P_CONCURRENT_GO_NEGO_TIMEOUT		3000	/* 	3 seconds timeout for sending the negotiation request under concurrent mode */
    674#define	P2P_TX_PRESCAN_TIMEOUT				100		/* 	100ms */
    675#define	P2P_INVITE_TIMEOUT					5000	/* 	5 seconds timeout for sending the invitation request */
    676#define	P2P_CONCURRENT_INVITE_TIMEOUT		3000	/* 	3 seconds timeout for sending the invitation request under concurrent mode */
    677#define	P2P_RESET_SCAN_CH						25000	/* 	25 seconds timeout to reset the scan channel (based on channel plan) */
    678#define	P2P_MAX_INTENT						15
    679
    680#define	P2P_MAX_NOA_NUM						2
    681
    682/* 	WPS Configuration Method */
    683#define	WPS_CM_NONE							0x0000
    684#define	WPS_CM_LABEL							0x0004
    685#define	WPS_CM_DISPLYA						0x0008
    686#define	WPS_CM_EXTERNAL_NFC_TOKEN			0x0010
    687#define	WPS_CM_INTEGRATED_NFC_TOKEN		0x0020
    688#define	WPS_CM_NFC_INTERFACE					0x0040
    689#define	WPS_CM_PUSH_BUTTON					0x0080
    690#define	WPS_CM_KEYPAD						0x0100
    691#define	WPS_CM_SW_PUHS_BUTTON				0x0280
    692#define	WPS_CM_HW_PUHS_BUTTON				0x0480
    693#define	WPS_CM_SW_DISPLAY_PIN				0x2008
    694#define	WPS_CM_LCD_DISPLAY_PIN				0x4008
    695
    696enum p2p_role {
    697	P2P_ROLE_DISABLE = 0,
    698	P2P_ROLE_DEVICE = 1,
    699	P2P_ROLE_CLIENT = 2,
    700	P2P_ROLE_GO = 3
    701};
    702
    703enum p2p_state {
    704	P2P_STATE_NONE = 0,							/* 	P2P disable */
    705	P2P_STATE_IDLE = 1,								/* 	P2P had enabled and do nothing */
    706	P2P_STATE_LISTEN = 2,							/* 	In pure listen state */
    707	P2P_STATE_SCAN = 3,							/* 	In scan phase */
    708	P2P_STATE_FIND_PHASE_LISTEN = 4,				/* 	In the listen state of find phase */
    709	P2P_STATE_FIND_PHASE_SEARCH = 5,				/* 	In the search state of find phase */
    710	P2P_STATE_TX_PROVISION_DIS_REQ = 6,			/* 	In P2P provisioning discovery */
    711	P2P_STATE_RX_PROVISION_DIS_RSP = 7,
    712	P2P_STATE_RX_PROVISION_DIS_REQ = 8,
    713	P2P_STATE_GONEGO_ING = 9,						/* 	Doing the group owner negotiation handshake */
    714	P2P_STATE_GONEGO_OK = 10,						/* 	finish the group negotiation handshake with success */
    715	P2P_STATE_GONEGO_FAIL = 11,					/* 	finish the group negotiation handshake with failure */
    716	P2P_STATE_RECV_INVITE_REQ_MATCH = 12,		/* 	receiving the P2P Invitation request and match with the profile. */
    717	P2P_STATE_PROVISIONING_ING = 13,				/* 	Doing the P2P WPS */
    718	P2P_STATE_PROVISIONING_DONE = 14,			/* 	Finish the P2P WPS */
    719	P2P_STATE_TX_INVITE_REQ = 15,					/* 	Transmit the P2P Invitation request */
    720	P2P_STATE_RX_INVITE_RESP_OK = 16,				/* 	Receiving the P2P Invitation response */
    721	P2P_STATE_RECV_INVITE_REQ_DISMATCH = 17,	/* 	receiving the P2P Invitation request and mismatch with the profile. */
    722	P2P_STATE_RECV_INVITE_REQ_GO = 18,			/* 	receiving the P2P Invitation request and this wifi is GO. */
    723	P2P_STATE_RECV_INVITE_REQ_JOIN = 19,			/* 	receiving the P2P Invitation request to join an existing P2P Group. */
    724	P2P_STATE_RX_INVITE_RESP_FAIL = 20,			/* 	recveing the P2P Invitation response with failure */
    725	P2P_STATE_RX_INFOR_NOREADY = 21,			/*  receiving p2p negotiation response with information is not available */
    726	P2P_STATE_TX_INFOR_NOREADY = 22,			/*  sending p2p negotiation response with information is not available */
    727};
    728
    729enum p2p_wpsinfo {
    730	P2P_NO_WPSINFO						= 0,
    731	P2P_GOT_WPSINFO_PEER_DISPLAY_PIN	= 1,
    732	P2P_GOT_WPSINFO_SELF_DISPLAY_PIN	= 2,
    733	P2P_GOT_WPSINFO_PBC					= 3,
    734};
    735
    736#define	P2P_PRIVATE_IOCTL_SET_LEN		64
    737
    738/* 	=====================WFD Section ===================== */
    739/* 	For Wi-Fi Display */
    740#define	WFD_ATTR_DEVICE_INFO			0x00
    741#define	WFD_ATTR_ASSOC_BSSID			0x01
    742#define	WFD_ATTR_COUPLED_SINK_INFO	0x06
    743#define	WFD_ATTR_LOCAL_IP_ADDR		0x08
    744#define	WFD_ATTR_SESSION_INFO		0x09
    745#define	WFD_ATTR_ALTER_MAC			0x0a
    746
    747/* 	For WFD Device Information Attribute */
    748#define	WFD_DEVINFO_SOURCE					0x0000
    749#define	WFD_DEVINFO_PSINK					0x0001
    750#define	WFD_DEVINFO_SSINK					0x0002
    751#define	WFD_DEVINFO_DUAL					0x0003
    752
    753#define	WFD_DEVINFO_SESSION_AVAIL			0x0010
    754#define	WFD_DEVINFO_WSD						0x0040
    755#define	WFD_DEVINFO_PC_TDLS					0x0080
    756#define	WFD_DEVINFO_HDCP_SUPPORT			0x0100
    757
    758#define IP_MCAST_MAC(mac)		((mac[0] == 0x01) && (mac[1] == 0x00) && (mac[2] == 0x5e))
    759#define ICMPV6_MCAST_MAC(mac)	((mac[0] == 0x33) && (mac[1] == 0x33) && (mac[2] != 0xff))
    760
    761/* Regulatroy Domain */
    762struct regd_pair_mapping {
    763	u16 reg_dmnenum;
    764	u16 reg_2ghz_ctl;
    765};
    766
    767struct rtw_regulatory {
    768	char alpha2[2];
    769	u16 country_code;
    770	u16 max_power_level;
    771	u32 tp_scale;
    772	u16 current_rd;
    773	u16 current_rd_ext;
    774	int16_t power_limit;
    775	struct regd_pair_mapping *regpair;
    776};
    777
    778#endif /*  _WIFI_H_ */