/*-
 * Copyright (c) 2001 Atsushi Onoe
 * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 *
 * Alternatively, this software may be distributed under the terms of the
 * GNU General Public License ("GPL") version 2 as published by the Free
 * Software Foundation.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 */
#ifndef _NET80211_IEEE80211_H_
#define _NET80211_IEEE80211_H_
#include <compat.h>
#include "net80211/_ieee80211.h"
#include "net80211/ieee80211_qos.h"
#include "net80211/ieee80211_dfs_reentry.h"

/*
 * 802.11 protocol definitions.
 */

#define	IEEE80211_ADDR_LEN	6		/* size of 802.11 address */
/* is 802.11 address multicast/broadcast? */
#define	IEEE80211_IS_MULTICAST(_a)	(*(_a) & 0x01)

/* IEEE 802.11 PLCP header */
struct ieee80211_plcp_hdr {
	uint16_t	i_sfd;
	uint8_t	i_signal;
	uint8_t	i_service;
	uint16_t	i_length;
	uint16_t	i_crc;
} __packed;

#define IEEE80211_PLCP_SFD	0xF3A0
#define IEEE80211_PLCP_SERVICE  0x00

struct ieee80211_mac_addr {
	uint8_t addr[IEEE80211_ADDR_LEN];
};

/*
 * generic definitions for IEEE 802.11 frames
 */
struct ieee80211_frame {
	uint8_t i_fc[2];
	uint8_t i_dur[2];
	uint8_t i_addr1[IEEE80211_ADDR_LEN];
	uint8_t i_addr2[IEEE80211_ADDR_LEN];
	uint8_t i_addr3[IEEE80211_ADDR_LEN];
	uint8_t i_seq[2];
	/* possibly followed by addr4[IEEE80211_ADDR_LEN]; */
	/* see below */
} __packed;

struct ieee80211_qosframe {
	uint8_t i_fc[2];
	uint8_t i_dur[2];
	uint8_t i_addr1[IEEE80211_ADDR_LEN];
	uint8_t i_addr2[IEEE80211_ADDR_LEN];
	uint8_t i_addr3[IEEE80211_ADDR_LEN];
	uint8_t i_seq[2];
	uint8_t i_qos[2];
	/* possibly followed by addr4[IEEE80211_ADDR_LEN]; */
	/* see below */
} __packed;

struct ieee80211_htframe {
	uint8_t	i_fc[2];
	uint8_t	i_dur[2];
	uint8_t	i_addr1[IEEE80211_ADDR_LEN];
	uint8_t	i_addr2[IEEE80211_ADDR_LEN];
	uint8_t	i_addr3[IEEE80211_ADDR_LEN];
	uint8_t	i_seq[2];
	uint8_t	i_qos[2];
	uint8_t	i_ht[4];
	/* possibly followed by addr4[IEEE80211_ADDR_LEN]; */
	/* see below */
} __packed;

struct ieee80211_qoscntl {
	uint8_t i_qos[2];
};

struct ieee80211_ht_qosframe {
	uint8_t	i_fc[2];
	uint8_t	i_dur[2];
	uint8_t	i_addr1[IEEE80211_ADDR_LEN];
	uint8_t	i_addr2[IEEE80211_ADDR_LEN];
	uint8_t	i_addr3[IEEE80211_ADDR_LEN];
	uint8_t	i_seq[2];
	uint8_t	i_qos[2];
	uint8_t	i_ht[4];
	/* possibly followed by addr4[IEEE80211_ADDR_LEN]; */
	/* see below */
} __packed;

struct ieee80211_htcntl {
	uint8_t	i_ht[4];
};

struct ieee80211_frame_addr4 {
	uint8_t i_fc[2];
	uint8_t i_dur[2];
	uint8_t i_addr1[IEEE80211_ADDR_LEN];
	uint8_t i_addr2[IEEE80211_ADDR_LEN];
	uint8_t i_addr3[IEEE80211_ADDR_LEN];
	uint8_t i_seq[2];
	uint8_t i_addr4[IEEE80211_ADDR_LEN];
} __packed;


struct ieee80211_qosframe_addr4 {
	uint8_t i_fc[2];
	uint8_t i_dur[2];
	uint8_t i_addr1[IEEE80211_ADDR_LEN];
	uint8_t i_addr2[IEEE80211_ADDR_LEN];
	uint8_t i_addr3[IEEE80211_ADDR_LEN];
	uint8_t i_seq[2];
	uint8_t i_addr4[IEEE80211_ADDR_LEN];
	uint8_t i_qos[2];
} __packed;

#define IEEE80211_HT_CAPABLE		1
#define IEEE80211_NON_HT_CAPABLE	0

struct ieee80211_htframe_addr4 {
	uint8_t	i_fc[2];
	uint8_t	i_dur[2];
	uint8_t	i_addr1[IEEE80211_ADDR_LEN];
	uint8_t	i_addr2[IEEE80211_ADDR_LEN];
	uint8_t	i_addr3[IEEE80211_ADDR_LEN];
	uint8_t	i_seq[2];
	uint8_t	i_addr4[IEEE80211_ADDR_LEN];
	uint8_t	i_ht[4];
} __packed;

struct ieee80211_ht_qosframe_addr4 {
	uint8_t	i_fc[2];
	uint8_t	i_dur[2];
	uint8_t	i_addr1[IEEE80211_ADDR_LEN];
	uint8_t	i_addr2[IEEE80211_ADDR_LEN];
	uint8_t	i_addr3[IEEE80211_ADDR_LEN];
	uint8_t	i_seq[2];
	uint8_t	i_addr4[IEEE80211_ADDR_LEN];
	uint8_t	i_qos[2];
	uint8_t	i_ht[4];
} __packed;

#define IEEE80211_IS_4ADDRESS(__wh)	\
		(((__wh)->i_fc[1] & IEEE80211_FC1_DIR_MASK) == IEEE80211_FC1_DIR_DSTODS)

struct ieee80211_ctlframe_addr2 {
	uint8_t i_fc[2];
	__le16 i_aidordur; /* AID or duration */
	uint8_t i_addr1[IEEE80211_ADDR_LEN];
	uint8_t i_addr2[IEEE80211_ADDR_LEN];
} __packed;

struct ieee80211_vht_su_ndpa {
	uint8_t i_fc[2];
	uint8_t i_dur[2];
	uint8_t i_addr1[IEEE80211_ADDR_LEN];
	uint8_t i_addr2[IEEE80211_ADDR_LEN];
	uint8_t i_diagtoken;
	uint8_t i_sta1_info[2];
} __packed;

struct ieee80211_bar_frame {
        u_int8_t i_fc[2];
        u_int8_t i_dur[2];
        u_int8_t i_addr1[IEEE80211_ADDR_LEN];
        u_int8_t i_addr2[IEEE80211_ADDR_LEN];
        u_int8_t i_bar_ctl[2];
        __le16   i_back_seq;
} __packed;

struct ieee80211_vht_mu_ndpa {
	uint8_t i_fc[2];
	__le16 i_dur;
	uint8_t i_addr1[IEEE80211_ADDR_LEN];
	uint8_t i_addr2[IEEE80211_ADDR_LEN];
	uint8_t i_diagtoken;
	uint8_t data[0];
} __packed;

struct ieee80211_vht_mu_rpt_poll {
	uint8_t i_fc[2];
	__le16 i_dur;
	uint8_t i_addr1[IEEE80211_ADDR_LEN];
	uint8_t i_addr2[IEEE80211_ADDR_LEN];
	uint8_t i_fbseg_map;
} __packed;

struct ieee80211_auth {
	uint16_t auth_alg;
	uint16_t auth_transaction;
	uint16_t status_code;
	/* possibly followed by Challenge text */
	uint8_t variable[0];
} __packed;

struct ieee80211_assoc {
	uint16_t assoc_cap_info;
	uint16_t assoc_status_code;
	uint16_t assoc_aid;
	/* information elements */
	uint8_t variable[0];
} __packed;

#define	IEEE80211_FC0_VERSION_MASK		0x03
#define	IEEE80211_FC0_VERSION_SHIFT		0
#define	IEEE80211_FC0_VERSION_0			0x00
#define	IEEE80211_FC0_TYPE_MASK			0x0c
#define	IEEE80211_FC0_TYPE_SHIFT		2
#define	IEEE80211_FC0_TYPE_MGT			0x00
#define	IEEE80211_FC0_TYPE_CTL			0x04
#define	IEEE80211_FC0_TYPE_DATA			0x08

#define	IEEE80211_FC0_SUBTYPE_MASK		0xf0
#define	IEEE80211_FC0_SUBTYPE_SHIFT		4
/* for TYPE_MGT */
#define	IEEE80211_FC0_SUBTYPE_ASSOC_REQ		0x00
#define	IEEE80211_FC0_SUBTYPE_ASSOC_RESP	0x10
#define	IEEE80211_FC0_SUBTYPE_REASSOC_REQ	0x20
#define	IEEE80211_FC0_SUBTYPE_REASSOC_RESP	0x30
#define	IEEE80211_FC0_SUBTYPE_PROBE_REQ		0x40
#define	IEEE80211_FC0_SUBTYPE_PROBE_RESP	0x50
#define	IEEE80211_FC0_SUBTYPE_BEACON		0x80
#define	IEEE80211_FC0_SUBTYPE_ATIM		0x90
#define	IEEE80211_FC0_SUBTYPE_DISASSOC		0xa0
#define	IEEE80211_FC0_SUBTYPE_AUTH		0xb0
#define	IEEE80211_FC0_SUBTYPE_DEAUTH		0xc0
#define IEEE80211_FC0_SUBTYPE_ACTION		0xd0
#define IEEE80211_FC0_SUBTYPE_ACTION_NOACK	0xe0
/* for TYPE_CTL */
#define	IEEE80211_FC0_SUBTYPE_VHT_RPT_POLL      0x40
#define	IEEE80211_FC0_SUBTYPE_VHT_NDPA		0x50
#define	IEEE80211_FC0_SUBTYPE_BAR		0x80
#define	IEEE80211_FC0_SUBTYPE_BA		0x90
#define	IEEE80211_FC0_SUBTYPE_PS_POLL		0xa0
#define	IEEE80211_FC0_SUBTYPE_RTS		0xb0
#define	IEEE80211_FC0_SUBTYPE_CTS		0xc0
#define	IEEE80211_FC0_SUBTYPE_ACK		0xd0
#define	IEEE80211_FC0_SUBTYPE_CF_END		0xe0
#define	IEEE80211_FC0_SUBTYPE_CF_END_ACK	0xf0
/* for TYPE_DATA (bit combination) */
#define	IEEE80211_FC0_SUBTYPE_DATA		0x00
#define	IEEE80211_FC0_SUBTYPE_CF_ACK		0x10
#define	IEEE80211_FC0_SUBTYPE_CF_POLL		0x20
#define	IEEE80211_FC0_SUBTYPE_CF_ACPL		0x30
#define	IEEE80211_FC0_SUBTYPE_NODATA		0x40
#define	IEEE80211_FC0_SUBTYPE_CFACK		0x50
#define	IEEE80211_FC0_SUBTYPE_CFPOLL		0x60
#define	IEEE80211_FC0_SUBTYPE_CF_ACK_CF_ACK	0x70
#define	IEEE80211_FC0_SUBTYPE_QOS		0x80
#define	IEEE80211_FC0_SUBTYPE_QOS_NULL		0xc0

#define	IEEE80211_FC1_DIR_MASK			0x03
#define	IEEE80211_FC1_DIR_NODS			0x00	/* STA->STA */
#define	IEEE80211_FC1_DIR_TODS			0x01	/* STA->AP  */
#define	IEEE80211_FC1_DIR_FROMDS		0x02	/* AP ->STA */
#define	IEEE80211_FC1_DIR_DSTODS		0x03	/* AP ->AP  */

#define	IEEE80211_FC1_MORE_FRAG			0x04
#define	IEEE80211_FC1_RETRY			0x08
#define	IEEE80211_FC1_PWR_MGT			0x10
#define	IEEE80211_FC1_MORE_DATA			0x20
#define	IEEE80211_FC1_PROT			0x40
#define	IEEE80211_FC1_WEP			0x40
#define	IEEE80211_FC1_ORDER			0x80

#define	IEEE80211_SEQ_FRAG_MASK			0x000f
#define	IEEE80211_SEQ_FRAG_SHIFT		0
#define	IEEE80211_SEQ_SEQ_MASK			0xfff0
#define	IEEE80211_SEQ_SEQ_SHIFT			4
#define IEEE80211_SEQ_RANGE			4096
#define IEEE80211_SEQ_ORDERLAG			64

#define IEEE80211_MU_NDPA_TOKEN_MASK		0xFC
#define IEEE80211_MU_NDPA_TOKEN_SHIFT		2
#define IEEE80211_MU_NDPA_RSRV_MASK		0x03
#define IEEE80211_MU_NDPA_RSRV_SHIFT		0

#define IEEE80211_SEQ_ADD(seq, offset)  \
	(((seq) + (offset)) & (IEEE80211_SEQ_RANGE - 1))
#define IEEE80211_SEQ_SUB(seq, offset)					\
	(((seq) + IEEE80211_SEQ_RANGE - (offset)) & (IEEE80211_SEQ_RANGE - 1))
#define IEEE80211_SEQ_DIFF(seq_front, seq_back)				\
	(((seq_front) + IEEE80211_SEQ_RANGE - (seq_back)) & (IEEE80211_SEQ_RANGE - 1))
#define IEEE80211_SEQ_INORDER_LAG(seq_front, seq_back, seq_lag)		\
	(IEEE80211_SEQ_DIFF((seq_front), (seq_back)) < (seq_lag))
#define IEEE80211_SEQ_INORDER(seq_front, seq_back)			\
	IEEE80211_SEQ_INORDER_LAG((seq_front), (seq_back), IEEE80211_SEQ_ORDERLAG)

#define	IEEE80211_SEQ_LEQ(a,b)	((int)((a)-(b)) <= 0)
#define	IEEE80211_SEQ_EQ(a,b)	((a) == (b))

#define	IEEE80211_NWID_LEN			32

#define	IEEE80211_QOS_TXOP			0x00ff
/* bit 8 is reserved */
#define	IEEE80211_QOS_ACKPOLICY			0x60
#define	IEEE80211_QOS_ACKPOLICY_S		5
#define	IEEE80211_QOS_EOSP			0x10
#define	IEEE80211_QOS_EOSP_S			4
#define	IEEE80211_QOS_TID			0x0f
#define IEEE80211_QOS_A_MSDU_PRESENT 		0x80
#define IEEE80211_QOS_BLOCK_ACK_POLICY          0x60

/* bit 1 is reserved */
#define IEEE80211_HTC0_TRQ				0x02
#define IEEE80211_HTC0_MAI_MASK			0x3C
#define IEEE80211_HTC0_MAI_SHIFT		2
#define IEEE80211_HTC0_MFSI_LOW_MASK	0xC0
#define IEEE80211_HTC0_MFSI_LOW_SHIFT	6

#define IEEE80211_HTC1_MFSI_HIGH		0x01
#define IEEE80211_HTC1_MFB_ASEL_MASK	0xFE
#define IEEE80211_HTC1_MFB_ASEL_SHIFT	1

#define IEEE80211_HTC2_CALIB_POS_MASK	0x03
#define IEEE80211_HTC2_CALIB_POS_SHIFT	0
#define IEEE80211_HTC2_CALIB_SEQ_MASK	0x0C
#define IEEE80211_HTC2_CALIB_SEQ_SHIFT	2
/* bits 4-5 are reserved */
#define IEEE80211_HTC2_CSI_STEER_MASK	0xC0
#define IEEE80211_HTC2_CSI_STEER_SHIFT	6

#define IEEE80211_HTC3_NDP_ANNOUNCE		0x01
/* bits 1-5 are reserved */
#define IEEE80211_HTC3_AC_CONSTRAINT	0x40
#define IEEE80211_HTC3_MORE_PPDU_RDG	0x80

#define IEEE80211_BW_RANGE		25
#define IEEE80211_CHAN_SPACE		5
#define IEEE80211_SEC_CHAN_OFFSET	4
#define IEEE80211_40M_CENT_FREQ_OFFSET	2

/*
 * Country/Region Codes from MS WINNLS.H
 * Numbering from ISO 3166
 * XXX belongs elsewhere
 *
 * First 2 entries taken from ieee80211.c ...
 */
enum CountryCode {
    CTRY_DEBUG                = 0x1ff,   /* debug, = 511 radix 10 */
    CTRY_DEFAULT              = 0,       /* default or not defined */

    CTRY_AFGHANISTAN          = 4,       /* Afghanistan */
    CTRY_ALBANIA              = 8,       /* Albania */
    CTRY_ALGERIA              = 12,      /* Algeria */
    CTRY_AMERICAN_SAMOA	      = 16,      /* American Samoa */
    CTRY_ANDORRA              = 20,      /* Andorra */
    CTRY_ANGOLA               = 24,      /* Angola */
    CTRY_ANGUILLA             = 660,
    CTRY_ANTARTICA            = 10,      /* Antartica */
    CTRY_ANTIGUA              = 28,	     /* Antigua and Barbuda */
    CTRY_ARGENTINA            = 32,      /* Argentina */
    CTRY_ARMENIA              = 51,      /* Armenia */
    CTRY_ARUBA                = 533,	 /* Aruba */
    CTRY_AUSTRALIA            = 36,      /* Australia */
    CTRY_AUSTRIA              = 40,      /* Austria */
    CTRY_AZERBAIJAN           = 31,      /* Azerbaijan */
    CTRY_BAHAMAS              = 44,	     /* Bahamas */
    CTRY_BAHRAIN              = 48,      /* Bahrain */
    CTRY_BANGLADESH           = 50,	     /* Bangladesh */
    CTRY_BARBADOS             = 52,
    CTRY_BELARUS              = 112,     /* Belarus */
    CTRY_BELGIUM              = 56,      /* Belgium */
    CTRY_BELIZE               = 84,      /* Belize */
    CTRY_BENIN                = 204,
    CTRY_BERMUDA              = 60,
    CTRY_BHUTAN               = 64,
    CTRY_BOLIVIA              = 68,      /* Bolivia */
    CTRY_BOSNIA_AND_HERZEGOWINA = 70,
    CTRY_BOTSWANA             = 72,
    CTRY_BOUVET_ISLAND	      = 74,
    CTRY_BRAZIL               = 76,      /* Brazil */
    CTRY_BRITISH_INDIAN_OCEAN_TERRITORY = 86,
    CTRY_BRUNEI_DARUSSALAM    = 96,      /* Brunei Darussalam */
    CTRY_BULGARIA             = 100,     /* Bulgaria */
    CTRY_BURKINA_FASO         = 854,
    CTRY_BURUNDI              = 108,
    CTRY_CAMBODIA             = 116,
    CTRY_CAMEROON             = 120,
    CTRY_CANADA               = 124,     /* Canada */
    CTRY_CAPE_VERDE           = 132,
    CTRY_CAYMAN_ISLANDS	      = 136,
    CTRY_CENTRAL_AFRICAN_REPUBLIC = 140,
    CTRY_CHAD                 = 148,
    CTRY_CHILE                = 152,     /* Chile */
    CTRY_CHINA                = 156,     /* People's Republic of China */
    CTRY_CHRISTMAS_ISLAND     = 162,
    CTRY_COCOS_ISLANDS	      = 166,
    CTRY_COLOMBIA             = 170,     /* Colombia */
    CTRY_COMOROS              = 174,
    CTRY_CONGO                = 178,
    CTRY_COOK_ISLANDS	      = 184,
    CTRY_COSTA_RICA           = 188,     /* Costa Rica */
    CTRY_COTE_DIVOIRE	      = 384,
    CTRY_CROATIA              = 191,     /* Croatia */
    CTRY_CYPRUS               = 196,
    CTRY_CZECH                = 203,     /* Czech Republic */
    CTRY_DENMARK              = 208,     /* Denmark */
    CTRY_DJIBOUTI             = 262,
    CTRY_DOMINICA             = 212,
    CTRY_DOMINICAN_REPUBLIC   = 214,     /* Dominican Republic */
    CTRY_ECUADOR              = 218,     /* Ecuador */
    CTRY_EUROPE               = 200,     /* European Union */
    CTRY_EGYPT                = 818,     /* Egypt */
    CTRY_EL_SALVADOR          = 222,     /* El Salvador */
    CTRY_EQUATORIAL_GUINEA    = 226,
    CTRY_ERITREA              = 232,
    CTRY_ESTONIA              = 233,     /* Estonia */
    CTRY_ETHIOPIA             = 210,
    CTRY_FALKLAND_ISLANDS     = 238,	 /* (Malvinas) */
    CTRY_FAEROE_ISLANDS       = 234,     /* Faeroe Islands */
    CTRY_FIJI                 = 242,
    CTRY_FINLAND              = 246,     /* Finland */
    CTRY_FRANCE               = 250,     /* France */
    CTRY_FRANCE2              = 255,     /* France2 */
    CTRY_FRENCH_GUIANA	      = 254,
    CTRY_FRENCH_POLYNESIA     = 258,
    CTRY_FRENCH_SOUTHERN_TERRITORIES	= 260,
    CTRY_GABON                = 266,
    CTRY_GAMBIA               = 270,
    CTRY_GEORGIA              = 268,     /* Georgia */
    CTRY_GERMANY              = 276,     /* Germany */
    CTRY_GHANA                = 288,
    CTRY_GIBRALTAR            = 292,
    CTRY_GREECE               = 300,     /* Greece */
    CTRY_GREENLAND            = 304,
    CTRY_GRENADA              = 308,
    CTRY_GUADELOUPE           = 312,
    CTRY_GUAM                 = 316,
    CTRY_GUATEMALA            = 320,     /* Guatemala */
    CTRY_GUINEA               = 324,
    CTRY_GUINEA_BISSAU	      = 624,
    CTRY_GUYANA               = 328,
    CTRY_HAITI                = 332,
    CTRY_HONDURAS             = 340,     /* Honduras */
    CTRY_HONG_KONG            = 344,     /* Hong Kong S.A.R., P.R.C. */
    CTRY_HUNGARY              = 348,     /* Hungary */
    CTRY_ICELAND              = 352,     /* Iceland */
    CTRY_INDIA                = 356,     /* India */
    CTRY_INDONESIA            = 360,     /* Indonesia */
    CTRY_IRAN                 = 364,     /* Iran */
    CTRY_IRAQ                 = 368,     /* Iraq */
    CTRY_IRELAND              = 372,     /* Ireland */
    CTRY_ISRAEL               = 376,     /* Israel */
    CTRY_ITALY                = 380,     /* Italy */
    CTRY_JAMAICA              = 388,     /* Jamaica */
    CTRY_JAPAN                = 392,     /* Japan */
    CTRY_JAPAN1               = 393,     /* Japan (JP1) */
    CTRY_JAPAN2               = 394,     /* Japan (JP0) */
    CTRY_JAPAN3               = 395,     /* Japan (JP1-1) */
    CTRY_JAPAN4               = 396,     /* Japan (JE1) */
    CTRY_JAPAN5               = 397,     /* Japan (JE2) */
    CTRY_JAPAN6               = 399,	 /* Japan (JP6) */
    CTRY_JAPAN7               = 900,	 /* Japan */
    CTRY_JAPAN8               = 901,	 /* Japan */
    CTRY_JAPAN9               = 902,	 /* Japan */
    CTRY_JAPAN10	      = 903,	 /* Japan */
    CTRY_JAPAN11	      = 904,	 /* Japan */
    CTRY_JAPAN12	      = 905,	 /* Japan */
    CTRY_JAPAN13	      = 906,	 /* Japan */
    CTRY_JAPAN14	      = 907,	 /* Japan */
    CTRY_JAPAN15	      = 908,	 /* Japan */
    CTRY_JAPAN16	      = 909,	 /* Japan */
    CTRY_JAPAN17	      = 910,	 /* Japan */
    CTRY_JAPAN18	      = 911,	 /* Japan */
    CTRY_JAPAN19	      = 912,	 /* Japan */
    CTRY_JAPAN20	      = 913,	 /* Japan */
    CTRY_JAPAN21	      = 914,	 /* Japan */
    CTRY_JAPAN22	      = 915,	 /* Japan */
    CTRY_JAPAN23	      = 916,	 /* Japan */
    CTRY_JAPAN24	      = 917,	 /* Japan */
    CTRY_JAPAN25	      = 918,	 /* Japan */
    CTRY_JAPAN26	      = 919,	 /* Japan */
    CTRY_JAPAN27	      = 920,	 /* Japan */
    CTRY_JAPAN28	      = 921,	 /* Japan */
    CTRY_JAPAN29	      = 922,	 /* Japan */
    CTRY_JAPAN30	      = 923,	 /* Japan */
    CTRY_JAPAN31	      = 924,	 /* Japan */
    CTRY_JAPAN32	      = 925,	 /* Japan */
    CTRY_JAPAN33	      = 926,	 /* Japan */
    CTRY_JAPAN34	      = 927,	 /* Japan */
    CTRY_JAPAN35	      = 928,	 /* Japan */
    CTRY_JAPAN36	      = 929,	 /* Japan */
    CTRY_JAPAN37	      = 930,	 /* Japan */
    CTRY_JAPAN38	      = 931,	 /* Japan */
    CTRY_JAPAN39	      = 932,	 /* Japan */
    CTRY_JAPAN40	      = 933,	 /* Japan */
    CTRY_JAPAN41	      = 934,	 /* Japan */
    CTRY_JAPAN42	      = 935,	 /* Japan */
    CTRY_JAPAN43	      = 936,	 /* Japan */
    CTRY_JAPAN44	      = 937,	 /* Japan */
    CTRY_JAPAN45	      = 938,	 /* Japan */
    CTRY_JAPAN46	      = 939,	 /* Japan */
    CTRY_JAPAN47	      = 940,	 /* Japan */
    CTRY_JAPAN48	      = 941,	 /* Japan */
    CTRY_JORDAN               = 400,     /* Jordan */
    CTRY_KAZAKHSTAN           = 398,     /* Kazakhstan */
    CTRY_KENYA                = 404,     /* Kenya */
    CTRY_KOREA_NORTH          = 408,     /* North Korea */
    CTRY_KOREA_ROC            = 410,     /* South Korea */
    CTRY_KOREA_ROC2           = 411,     /* South Korea */
    CTRY_KUWAIT               = 414,     /* Kuwait */
    CTRY_LATVIA               = 428,     /* Latvia */
    CTRY_LEBANON              = 422,     /* Lebanon */
    CTRY_LIBYA                = 434,     /* Libya */
    CTRY_LIECHTENSTEIN        = 438,     /* Liechtenstein */
    CTRY_LITHUANIA            = 440,     /* Lithuania */
    CTRY_LUXEMBOURG           = 442,     /* Luxembourg */
    CTRY_MACAU                = 446,     /* Macau */
    CTRY_MACEDONIA            = 807,     /* the Former Yugoslav Republic of Macedonia */
    CTRY_MALAYSIA             = 458,     /* Malaysia */
    CTRY_MEXICO               = 484,     /* Mexico */
    CTRY_MONACO               = 492,     /* Principality of Monaco */
    CTRY_MOROCCO              = 504,     /* Morocco */
    CTRY_NEPAL                = 524,	 /* Nepal */
    CTRY_NETHERLANDS          = 528,     /* Netherlands */
    CTRY_NEW_ZEALAND          = 554,     /* New Zealand */
    CTRY_NICARAGUA            = 558,     /* Nicaragua */
    CTRY_NORWAY               = 578,     /* Norway */
    CTRY_OMAN                 = 512,     /* Oman */
    CTRY_PAKISTAN             = 586,     /* Islamic Republic of Pakistan */
    CTRY_PANAMA               = 591,     /* Panama */
    CTRY_PARAGUAY             = 600,     /* Paraguay */
    CTRY_PERU                 = 604,     /* Peru */
    CTRY_PHILIPPINES          = 608,     /* Republic of the Philippines */
    CTRY_POLAND               = 616,     /* Poland */
    CTRY_PORTUGAL             = 620,     /* Portugal */
    CTRY_PUERTO_RICO          = 630,     /* Puerto Rico */
    CTRY_QATAR                = 634,     /* Qatar */
    CTRY_ROMANIA              = 642,     /* Romania */
    CTRY_RUSSIA               = 643,     /* Russia */
    CTRY_SAUDI_ARABIA         = 682,     /* Saudi Arabia */
    CTRY_SINGAPORE            = 702,     /* Singapore */
    CTRY_SLOVAKIA             = 703,     /* Slovak Republic */
    CTRY_SLOVENIA             = 705,     /* Slovenia */
    CTRY_SOUTH_AFRICA         = 710,     /* South Africa */
    CTRY_SPAIN                = 724,     /* Spain */
    CTRY_SRILANKA             = 144,	 /* Sri Lanka */
    CTRY_SWEDEN               = 752,     /* Sweden */
    CTRY_SWITZERLAND          = 756,     /* Switzerland */
    CTRY_SYRIA                = 760,     /* Syria */
    CTRY_TAIWAN               = 158,     /* Taiwan */
    CTRY_THAILAND             = 764,     /* Thailand */
    CTRY_TRINIDAD_Y_TOBAGO    = 780,     /* Trinidad y Tobago */
    CTRY_TUNISIA              = 788,     /* Tunisia */
    CTRY_TURKEY               = 792,     /* Turkey */
    CTRY_UAE                  = 784,     /* U.A.E. */
    CTRY_UKRAINE              = 804,     /* Ukraine */
    CTRY_UNITED_KINGDOM       = 826,     /* United Kingdom */
    CTRY_UNITED_STATES        = 840,     /* United States */
    CTRY_UNITED_STATES_FCC49  = 842,     /* United States (Public Safety)*/
    CTRY_URUGUAY              = 858,     /* Uruguay */
    CTRY_UZBEKISTAN           = 860,     /* Uzbekistan */
    CTRY_VENEZUELA            = 862,     /* Venezuela */
    CTRY_VIET_NAM             = 704,     /* Viet Nam */
    CTRY_YEMEN                = 887,     /* Yemen */
    CTRY_ZIMBABWE             = 716      /* Zimbabwe */
};

#define IEEE80211_IE_ID_LEN_SIZE 2

/*
 * Generic information element
 */
struct ieee80211_ie {
	uint8_t id;
	uint8_t len;
	uint8_t info[0];
} __packed;

/*
 * Country information element.
 */
#define IEEE80211_COUNTRY_MAX_TRIPLETS (83)
struct ieee80211_ie_country {
	uint8_t country_id;
	uint8_t country_len;
	uint8_t country_str[3];
	uint8_t country_triplet[IEEE80211_COUNTRY_MAX_TRIPLETS * 3];
} __packed;

/*
 * Channel Switch Announcement information element.
 */
struct ieee80211_ie_csa {
	uint8_t csa_id;	/* IEEE80211_ELEMID_CHANSWITCHANN */
	uint8_t csa_len;	/* == 3 */
	uint8_t csa_mode;	/* Channel Switch Mode: 1 == stop transmission until CS */
	uint8_t csa_chan;	/* New Channel Number */
	uint8_t csa_count;	/* TBTTs until Channel Switch happens */
} __packed;

/* for Spectrum Management Actions. Table 20e in 802.11h $7.4.1 */
#define IEEE80211_ACTION_S_MEASUREMENT_REQUEST 0
#define IEEE80211_ACTION_S_MEASUREMENT_REPORT  1
#define IEEE80211_ACTION_S_TPC_REQUEST         2
#define IEEE80211_ACTION_S_TPC_REPORT          3
#define IEEE80211_ACTION_S_CHANSWITCHANN       4

/* for csa_mode. It must be either 0 or 1. 1 means that the receiver shall stop
 * sending until CS. 0 imposes no requirement. See 7.3.2.20 */
#define IEEE80211_CSA_CAN_STOP_TX       0
#define IEEE80211_CSA_MUST_STOP_TX      1

/* minimal Channel Switch Count in the initial announcement */
#define IEEE80211_CSA_PROTECTION_PERIOD 3

/* maximum allowed deviance of measurement of intervals between CSA in Beacons */
#define IEEE80211_CSA_SANITY_THRESHOLD 100

/* Quantenna CSA tsf ie, to complement an 802.11h CSA ie. More timing precision */
struct ieee80211_ie_qtn_csa_tsf {
	uint8_t id;	/* IEEE80211_ELEMID_VENDOR */
	uint8_t len;   /* length in bytes */
	uint8_t qtn_ie_oui[3];		/* QTN_OUI - 0x00, 0x26, 0x86*/
	uint8_t qtn_ie_type;		/* IE type */
	uint64_t tsf;			/* TSF at which channel change happens. */
} __packed;

/* Quantenna SCS IE */
#define QTN_SCS_IE_TYPE_STA_INTF_RPT		0x1
#define QTN_SCS_IE_TYPE_STA_DFS_RPT		0x2
#define QTN_SCS_IE_TYPE_STA_FAT_RPT		0x3
#pragma pack(push)
#pragma pack(1)
struct ieee80211_ie_qtn_scs {
	uint8_t id;			/* IEEE80211_ELEMID_VENDOR */
	uint8_t len;                    /* length in bytes */
	uint8_t qtn_ie_oui[3];		/* QTN_OUI - 0x00, 0x26, 0x86*/
	uint8_t qtn_ie_type;		/* IE type */
	uint8_t scs_ie_type;            /* for future expansion and backward compatibility */
	/* following depends on scs_ie_type */
	union {
		struct {
			uint32_t sp_fail;		/* short preamble failure in last second */
			uint32_t lp_fail;		/* long preamble failure in last second */
			uint16_t others_time;		/* rx + tx time for all nodes */
		} cca_info;
		struct {
			uint16_t free_airtime;		/* free air time */
		} fat_info;
		struct {
			uint16_t dfs_enabled;		/* whether station's DFS feature enabled */
			uint8_t max_txpower;		/* station's tx power */
		} dfs_info;
	} u;
	/* Warning: using this variable length field would cause backward compatibility issue
	 * in future if want to add new fields */
	uint16_t extra_ie_len;		/* extra ie len */
	uint8_t extra_ie[0];		/* tdls stats */
};
#pragma pack(pop)
#define QTN_SCS_IE_LEN_MIN			7    /* till scs ie type */
#define QTN_SCS_IE_STA_INTF_RPT_LEN_MIN		(QTN_SCS_IE_LEN_MIN + 8)
#define QTN_SCS_IE_STA_DFS_RPT_LEN_MIN		(QTN_SCS_IE_LEN_MIN + 3)
#define QTN_SCS_IE_STA_FAT_RPT_LEN_MIN		(QTN_SCS_IE_LEN_MIN + 2)

#define IEEE80211_IS_ALL_SET(__flags__, __msb__)	\
	(((__flags__) & ((1 << ((__msb__)+1)) - 1)) == ((1 << ((__msb__)+1)) - 1))

/* does frame have QoS sequence control data */
#define	IEEE80211_QOS_HAS_SEQ(wh) \
	(((wh)->i_fc[0] & \
	  (IEEE80211_FC0_TYPE_MASK | IEEE80211_FC0_SUBTYPE_QOS)) == \
	  (IEEE80211_FC0_TYPE_DATA | IEEE80211_FC0_SUBTYPE_QOS))

#define WME_QOSINFO_COUNT	0x0f  /* Mask for Param Set Count field */
#define	WMM_OUI_BYTES		0x00, 0x50, 0xf2
/*
 * WME/802.11e information element.
 */
struct ieee80211_ie_wme {
	uint8_t wme_id;		/* IEEE80211_ELEMID_VENDOR */
	uint8_t wme_len;	/* length in bytes */
	uint8_t wme_oui[3];	/* 0x00, 0x50, 0xf2 */
	uint8_t wme_type;	/* OUI type */
	uint8_t wme_subtype;	/* OUI subtype */
	uint8_t wme_version;	/* spec revision */
	uint8_t wme_info;	/* QoS info */
} __packed;

/*
 * WME/802.11e Tspec Element
 */
struct ieee80211_wme_tspec {
	uint8_t ts_id;
	uint8_t ts_len;
	uint8_t ts_oui[3];
	uint8_t ts_oui_type;
	uint8_t ts_oui_subtype;
	uint8_t ts_version;
	uint8_t ts_tsinfo[3];
	uint8_t ts_nom_msdu[2];
	uint8_t ts_max_msdu[2];
	uint8_t ts_min_svc[4];
	uint8_t ts_max_svc[4];
	uint8_t ts_inactv_intv[4];
	uint8_t ts_susp_intv[4];
	uint8_t ts_start_svc[4];
	uint8_t ts_min_rate[4];
	uint8_t ts_mean_rate[4];
	uint8_t ts_max_burst[4];
	uint8_t ts_min_phy[4];
	uint8_t ts_peak_rate[4];
	uint8_t ts_delay[4];
	uint8_t ts_surplus[2];
	uint8_t ts_medium_time[2];
} __packed;

/*
 * WME AC parameter field
 */

struct ieee80211_wme_acparams {
	uint8_t acp_aci_aifsn;
	uint8_t acp_logcwminmax;
	uint16_t acp_txop;
} __packed;

#define IEEE80211_WME_PARAM_LEN	24
#define WME_NUM_TID		16	/* 16 tids */
#define WME_NUM_AC		4	/* 4 AC categories */
#define WME_TID_UNKNOWN		(-1)
#define WME_TID_NONQOS		(-2)
#define WME_TID_VALID(_tid)	(((_tid) >= 0) && ((_tid) < WME_NUM_TID))

#define WME_PARAM_ACI		0x60	/* Mask for ACI field */
#define WME_PARAM_ACI_S		5	/* Shift for ACI field */
#define WME_PARAM_ACM		0x10	/* Mask for ACM bit */
#define WME_PARAM_ACM_S		4	/* Shift for ACM bit */
#define WME_PARAM_AIFSN		0x0f	/* Mask for aifsn field */
#define WME_PARAM_AIFSN_S	0	/* Shift for aifsn field */
#define WME_PARAM_LOGCWMIN	0x0f	/* Mask for CwMin field (in log) */
#define WME_PARAM_LOGCWMIN_S	0	/* Shift for CwMin field */
#define WME_PARAM_LOGCWMAX	0xf0	/* Mask for CwMax field (in log) */
#define WME_PARAM_LOGCWMAX_S	4	/* Shift for CwMax field */

#define WME_AC_TO_TID(_ac) (       \
	((_ac) == WME_AC_VO) ? 6 : \
	((_ac) == WME_AC_VI) ? 5 : \
	((_ac) == WME_AC_BK) ? 1 : \
	0)

#define TID_TO_WME_AC(_tid)				\
	((((_tid) == 0) || ((_tid) == 3)) ? WME_AC_BE :	\
	 ((_tid) < 3) ? WME_AC_BK :	\
	 ((_tid) < 6) ? WME_AC_VI :	\
	 WME_AC_VO)

/*
 * WME Parameter Element
 */
struct ieee80211_wme_param {
	uint8_t param_id;
	uint8_t param_len;
	uint8_t param_oui[3];
	uint8_t param_oui_type;
	uint8_t param_oui_sybtype;
	uint8_t param_version;
	uint8_t param_qosInfo;
	uint8_t param_reserved;
	struct ieee80211_wme_acparams	params_acParams[WME_NUM_AC];
} __packed;

/*
 * WME U-APSD qos info field defines
 */
#define WME_CAPINFO_UAPSD_EN			0x00000080
#define WME_CAPINFO_UAPSD_VO			0x00000001
#define WME_CAPINFO_UAPSD_VI			0x00000002
#define WME_CAPINFO_UAPSD_BK			0x00000004
#define WME_CAPINFO_UAPSD_BE			0x00000008
#define WME_CAPINFO_UAPSD_ACFLAGS_SHIFT		0
#define WME_CAPINFO_UAPSD_ACFLAGS_MASK		0xF
#define WME_CAPINFO_UAPSD_MAXSP_SHIFT		5
#define WME_CAPINFO_UAPSD_MAXSP_MASK		0x3
#define WME_CAPINFO_IE_OFFSET			8
#define WME_UAPSD_MAXSP(_qosinfo) (((_qosinfo) >> WME_CAPINFO_UAPSD_MAXSP_SHIFT) & WME_CAPINFO_UAPSD_MAXSP_MASK)
#define WME_UAPSD_AC_ENABLED(_ac, _qosinfo) ( (1<<(3 - (_ac))) &   \
		(((_qosinfo) >> WME_CAPINFO_UAPSD_ACFLAGS_SHIFT) & WME_CAPINFO_UAPSD_ACFLAGS_MASK) )

struct ieee80211_extcap_param {
	u_int8_t param_id;
	u_int8_t param_len;
	u_int8_t ext_cap[8];
} __packed;


#define IEEE8021P_PRIORITY_NUM			8
#define IEEE80211_DSCP_MAX_EXCEPTIONS		21
#define IP_DSCP_NUM				64

/* byte 0 */
#define IEEE80211_EXTCAP_20_40_COEXISTENCE      0x1
/* byte 3 */
#define IEEE80211_EXTCAP_BTM			0x08
/* byte 7 */
#define IEEE80211_EXTCAP_OPMODE_NOTIFICATION	0x40
#define IEEE80211_EXTCAP_MAX_MSDU_IN_AMSDU	0xC0
#define IEEE80211_EXTCAP_MAX_MSDU_IN_AMSDU_S	6

/*
 * 20/40 MHZ BSS coexistence information element.
 */
struct ieee80211_20_40_coex_param {
	u_int8_t param_id;
	u_int8_t param_len;
	u_int8_t coex_param;
} __packed;

#define WLAN_20_40_BSS_COEX_INFO_REQ            BIT(0)
#define WLAN_20_40_BSS_COEX_40MHZ_INTOL         BIT(1)
#define WLAN_20_40_BSS_COEX_20MHZ_WIDTH_REQ     BIT(2)
#define WLAN_20_40_BSS_COEX_OBSS_EXEMPT_REQ     BIT(3)
#define WLAN_20_40_BSS_COEX_OBSS_EXEMPT_GRNT    BIT(4)

/*
 * 20/40 MHZ BSS intolerant channel report information element.
 */
struct ieee80211_20_40_in_ch_rep {
	u_int8_t param_id;
	u_int8_t param_len;
	u_int8_t reg;
	u_int8_t chan[0];
} __packed;

/*
 * Overlapping BSS Scan Parameter information element.
 */
struct ieee80211_obss_scan_ie {
	u_int8_t param_id;
	u_int8_t param_len;
	u_int16_t obss_passive_dwell;
	u_int16_t obss_active_dwell;
	u_int16_t obss_trigger_interval;
	u_int16_t obss_passive_total;
	u_int16_t obss_active_total;
	u_int16_t obss_channel_width_delay;
	u_int16_t obss_activity_threshold;
} __packed;

/*
 * Atheros Advanced Capability information element.
 */
struct ieee80211_ie_athAdvCap {
	uint8_t athAdvCap_id;		/* IEEE80211_ELEMID_VENDOR */
	uint8_t athAdvCap_len;		/* length in bytes */
	uint8_t athAdvCap_oui[3];	/* 0x00, 0x03, 0x7f */
	uint8_t athAdvCap_type;		/* OUI type */
	uint8_t athAdvCap_subtype;	/* OUI subtype */
	uint8_t athAdvCap_version;	/* spec revision */
	uint8_t athAdvCap_capability;	/* Capability info */
	uint16_t athAdvCap_defKeyIndex;
} __packed;

/*
 * Atheros XR information element.
 */
struct ieee80211_xr_param {
	uint8_t param_id;
	uint8_t param_len;
	uint8_t param_oui[3];
	uint8_t param_oui_type;
	uint8_t param_oui_sybtype;
	uint8_t param_version;
	uint8_t param_Info;
	uint8_t param_base_bssid[IEEE80211_ADDR_LEN];
	uint8_t param_xr_bssid[IEEE80211_ADDR_LEN];
	uint16_t param_xr_beacon_interval;
	uint8_t param_base_ath_capability;
	uint8_t param_xr_ath_capability;
} __packed;

/* Atheros capabilities */
#define IEEE80211_ATHC_TURBOP	0x0001		/* Turbo Prime */
#define IEEE80211_ATHC_COMP	0x0002		/* Compression */
#define IEEE80211_ATHC_FF	0x0004		/* Fast Frames */
#define IEEE80211_ATHC_XR	0x0008		/* Xtended Range support */
#define IEEE80211_ATHC_AR	0x0010		/* Advanced Radar support */
#define IEEE80211_ATHC_BURST	0x0020		/* Bursting - not negotiated */
#define IEEE80211_ATHC_WME	0x0040		/* CWMin tuning */
#define IEEE80211_ATHC_BOOST	0x0080		/* Boost */

/*
 * Quantenna Flags information element.
 * Fields up to qtn_ie_implicit_ba_tid are backwards-compatible with Envy images.
 */
struct ieee80211_ie_qtn {
	uint8_t qtn_ie_id;		/* IEEE80211_ELEMID_VENDOR */
	uint8_t qtn_ie_len;		/* length in bytes */
	uint8_t qtn_ie_oui[3];		/* QTN_OUI - 0x00, 0x26, 0x86 */
	uint8_t qtn_ie_type;		/* IE type */
	uint8_t qtn_ie_flags;		/* See below */

	/* V2 fields */
	uint8_t qtn_ie_implicit_ba_tid;/* Implicit block ACKs, set up directly after assoc */
	uint8_t qtn_ie_my_flags;	/* See below */

	/* V3 fields */
	/* Implicit block ACK with variable size - overrides v2 implicit BA field. */
	uint8_t qtn_ie_implicit_ba_tid_h;
	uint8_t qtn_ie_implicit_ba_size; /* Size of implicit BA >> 2 */

	/* V4 fields */
	uint8_t qtn_ie_vsp_version;	/* VSP version */

	/* V5 fields */
	uint32_t qtn_ie_ver_sw;
	uint16_t qtn_ie_ver_hw;
	uint16_t qtn_ie_ver_platform_id;
	uint32_t qtn_ie_ver_timestamp;
	uint32_t qtn_ie_ver_flags;
	uint32_t qtn_ie_rate_train;
} __packed;

#ifdef CONFIG_QVSP
/*
 * Quantenna WME information element.
 */
struct ieee80211_ie_qtn_wme {
	uint8_t qtn_ie_id;		/* IEEE80211_ELEMID_VENDOR */
	uint8_t qtn_ie_len;		/* length in bytes */
	uint8_t qtn_ie_oui[3];		/* QTN_OUI - 0x00, 0x26, 0x86*/
	uint8_t qtn_ie_type;		/* IE type */
	uint8_t qtn_wme_ie_version;
	struct ieee80211_wme_param qtn_wme_ie;
} __packed;
#endif

#define QTN_PAIRING_TLV_HASH_LEN 32
/*
 * QTN Pairing TLV element.
 *  Format:
 *   Type(1byte)   |   len(2bytes)    |  SHA-256 hash(32bytes)
 *      0x1        |        35        |     SHA-256 hash material of pairing
 */
struct ieee80211_ie_qtn_pairing_tlv {
	uint8_t qtn_pairing_tlv_type;
	uint16_t qtn_pairing_tlv_len;
	uint8_t qtn_pairing_tlv_hash[QTN_PAIRING_TLV_HASH_LEN];
} __packed;

/*
 * QTN Pairing IE
 *  Format:
 *  IE ID(1byte)    |     IE len(1byte)    |     IE OUI(3bytes)    | IE content(pairing)
 *     0xdd         |       38             |        00 26 86       |     Pairing TLV
 *
 */
struct ieee80211_ie_qtn_pairing {
	uint8_t qtn_pairing_ie_id;
	uint8_t qtn_pairing_ie_len;
	uint8_t qtn_pairing_ie_oui[3];
	struct ieee80211_ie_qtn_pairing_tlv qtn_pairing_tlv;
} __packed;

#define IEEE80211_QTN_IE_BA_SIZE_SH 2

enum ieee80211_vsp_version {
	IEEE80211_QTN_VSP_V_NONE,
	IEEE80211_QTN_VSP_V1,
};

#ifdef CONFIG_QVSP

/* Disable Station side control for QTM-Lite */
#define IEEE80211_QTN_VSP_VERSION	IEEE80211_QTN_VSP_V_NONE
struct ieee80211_ie_vsp_item {
	uint8_t	index;
	uint32_t	value;
} __packed;

struct ieee80211_ie_vsp {
	uint8_t	id;
	uint8_t	len;
	uint8_t	oui[3];
	uint8_t	type;
	uint8_t	item_cnt;
	struct ieee80211_ie_vsp_item item[0];
} __packed;

#else /* not CONFIG_QVSP */

#define IEEE80211_QTN_VSP_VERSION	IEEE80211_QTN_VSP_V_NONE

#endif /* CONFIG_QVSP */

#define IEEE80211_QTN_TYPE_ENVY_LEGACY(qtnie) \
	((qtnie)->qtn_ie_len <= (&(qtnie)->qtn_ie_my_flags - &(qtnie)->qtn_ie_oui[0]))
#define IEEE80211_QTN_TYPE_ENVY(qtnie) \
	((IEEE80211_QTN_TYPE_ENVY_LEGACY(qtnie)) || \
	 ((qtnie)->qtn_ie_my_flags & IEEE80211_QTN_ENVY))

#define IEEE80211_QTN_FLAGS_ENVY	(IEEE80211_QTN_BRIDGEMODE | IEEE80211_QTN_BF_VER1)
#define IEEE80211_QTN_FLAGS_ENVY_DFLT	IEEE80211_QTN_BF_VER1
#define IEEE80211_QTN_CAPS_DFLT		IEEE80211_QTN_BF_VER2 | IEEE80211_QTN_BF_VER3 | \
					IEEE80211_QTN_BF_VER4 | IEEE80211_QTN_TX_AMSDU
/*
 * These flags are used in the following two fields.
 * - qtn_ie_flags contains the sender's settings, except in an association response, where
 *   it contains confirmation of the settings received from the peer station.  These flags
 *   must remain backwards-compatible with Envy images.
 * - qtn_ie_my_flags always contains the sender's settings.  It is not sent by Envy systems.
 */
#define IEEE80211_QTN_BRIDGEMODE	0x01		/* Use 4-addr headers */
#define IEEE80211_QTN_BF_VER1		0x02		/* Envy beamforming */
#define IEEE80211_QTN_BF_VER2		0x04		/* Ruby 2 stream beamforming */
#define IEEE80211_QTN_LNCB		0x08		/* Multicast packets in the local network
							 * control block are 4 address encapsulated.
							 */
#define IEEE80211_QTN_BF_VER3		0x10		/* Ruby 4 stream non-standard beamforming */
#define IEEE80211_QTN_ENVY		0x20		/* Envy with 'my flags' field in the IE. */
#define IEEE80211_QTN_BF_VER4		0x40		/* 4 strm standard bf with tone grouping */
#define IEEE80211_QTN_TX_AMSDU		0x80		/* Ruby TX AMSDU */

#define IEEE80211_QTN_IE_GE_V2(_qtnie)	((_qtnie->qtn_ie_len + IEEE80211_IE_ID_LEN_SIZE) >	\
					offsetof(struct ieee80211_ie_qtn, qtn_ie_my_flags))
#define IEEE80211_QTN_IE_GE_V3(_qtnie)	((_qtnie->qtn_ie_len + IEEE80211_IE_ID_LEN_SIZE) >	\
					offsetof(struct ieee80211_ie_qtn, qtn_ie_implicit_ba_size))
#define IEEE80211_QTN_IE_GE_V4(_qtnie)	((_qtnie->qtn_ie_len + IEEE80211_IE_ID_LEN_SIZE) >	\
					offsetof(struct ieee80211_ie_qtn, qtn_ie_vsp_version))
#define IEEE80211_QTN_IE_GE_V5(_qtnie)	((_qtnie->qtn_ie_len + IEEE80211_IE_ID_LEN_SIZE) >	\
					offsetof(struct ieee80211_ie_qtn, qtn_ie_rate_train))

/* Quantenna TDLS Discovery Response clients information element */
struct ieee80211_ie_qtn_tdls_clients {
	uint8_t        qtn_ie_id;              /* IEEE80211_ELEMID_VENDOR */
	uint8_t        qtn_ie_len;
	uint8_t        qtn_ie_oui[3];          /* 0x00, 0x26, 0x86 */
	uint8_t        qtn_ie_type;            /* IEEE_QTN_IE_TYPE_TDLS_CLIENTS */
	uint8_t        qtn_ie_mac_cnt;         /* Number of downstream MAC addresses */
#define IEEE80211_QTN_IE_DOWNSTREAM_MAC_MAX    16
	uint8_t        qtn_ie_mac[0];          /* Start of downstream MAC addresses */
} __packed;

/*
 * Management Notification Frame
 */
struct ieee80211_mnf {
	uint8_t mnf_category;
	uint8_t mnf_action;
	uint8_t mnf_dialog;
	uint8_t mnf_status;
} __packed;
#define	MNF_SETUP_REQ	0
#define	MNF_SETUP_RESP	1
#define	MNF_TEARDOWN	2

/*
 * Management Action Frames
 */

/* generic frame format */
struct ieee80211_action {
	uint8_t	ia_category;
	uint8_t	ia_action;
} __packed;

/* categories */
#define IEEE80211_ACTION_CAT_SPEC_MGMT		0	/* Spectrum MGMT */
#define IEEE80211_ACTION_CAT_QOS		1	/* qos */
#define IEEE80211_ACTION_CAT_DLS		2	/* dls */
#define IEEE80211_ACTION_CAT_BA			3	/* block ack */
#define IEEE80211_ACTION_CAT_PUBLIC		4	/* Public */
#define IEEE80211_ACTION_CAT_RM			5	/* Radio measurement */
#define IEEE80211_ACTION_CAT_FBSS		6	/* Fast BSS */
#define IEEE80211_ACTION_CAT_HT			7	/* HT */
#define IEEE80211_ACTION_CAT_SA_QUERY		8	/* SA Query */
#define IEEE80211_ACTION_CAT_PROT_DUAL_PA	9	/* Protected Dual of Public Action */
#define IEEE80211_ACTION_CAT_WNM		10	/* WNM */
#define IEEE80211_ACTION_CAT_UNPROT_WNM		11	/* Unprotected WNM */
#define IEEE80211_ACTION_CAT_TDLS		12	/* TDLS */
#define IEEE80211_ACTION_CAT_MESH		13	/* Mesh */
#define IEEE80211_ACTION_CAT_MULTIHOP		14	/* Multihop */
#define IEEE80211_ACTION_CAT_SELF_PROT		15	/* self protected */

#define IEEE80211_ACTION_CAT_VHT		21	/* VHT */
#define IEEE80211_ACTION_CAT_VEND_PROT	126	/* Protected Vendor specific Action frame */
#define IEEE80211_ACTION_CAT_VENDOR		0x7F	/* Vendor specific Action frame */

/* Public Action Frames (7.4.7.1) */
#define IEEE80211_ACTION_PUB_GAS_IREQ		10  /* GAS Service Initial Request */
#define IEEE80211_ACTION_PUB_GAS_IRESP		11  /* GAS Service Initial Response */
#define IEEE80211_ACTION_PUB_GAS_CREQ		12  /* GAS Comeback Request */
#define IEEE80211_ACTION_PUB_GAS_CRESP		13  /* GAS Comeback Response */
#define IEEE80211_ACTION_PUB_TDLS_DISC_RESP	14  /* TDLS Discovery Response */
#define IEEE80211_ACTION_PUB_20_40_COEX         0  /* 20/40 coex */

static __inline__ int ieee80211_action_is_a_gas(const struct ieee80211_action *ia)
{
	return (ia->ia_category == IEEE80211_ACTION_CAT_PUBLIC) &&
		(ia->ia_action >= IEEE80211_ACTION_PUB_GAS_IREQ) &&
		(ia->ia_action <= IEEE80211_ACTION_PUB_GAS_CRESP);
}

/* TDLS Action Frame details (7.4.11) */
#define IEEE80211_ACTION_TDLS_SETUP_REQ        0   /* Setup Request */
#define IEEE80211_ACTION_TDLS_SETUP_RESP       1   /* Setup Response */
#define IEEE80211_ACTION_TDLS_SETUP_CONFIRM    2   /* Setup Confirm */
#define IEEE80211_ACTION_TDLS_TEARDOWN         3   /* Teardown */
#define IEEE80211_ACTION_TDLS_PTI              4   /* Peer Traffic Indication */
#define IEEE80211_ACTION_TDLS_CS_REQ           5   /* Channel Switch Request */
#define IEEE80211_ACTION_TDLS_CS_RESP          6   /* Channel Switch Response */
#define IEEE80211_ACTION_TDLS_PEER_PSM_REQ     7   /* Peer PSM Request */
#define IEEE80211_ACTION_TDLS_PEER_PSM_RESP    8   /* Peer PSM Response */
#define IEEE80211_ACTION_TDLS_PEER_TRAF_RESP   9   /* Peer Traffic Response */
#define IEEE80211_ACTION_TDLS_DISC_REQ         10  /* Discovery Request */

struct ieee80211_ie_power_capability {
	uint8_t	id;
	uint8_t	len;
	uint8_t	min_txpwr;
	uint8_t	max_txpwr;
} __packed;

struct ieee80211_ie_tpc_report {
	uint8_t	id;
	uint8_t	len;
	uint8_t tran_power;
	uint8_t link_margin;
} __packed;

#define IEEE80211_CCA_REQMODE_PARALLEL	(1 << 0)
#define IEEE80211_CCA_REQMODE_ENABLE	(1 << 1)
#define IEEE80211_CCA_REQMODE_REQUEST	(1 << 2)
#define IEEE80211_CCA_REQMODE_REPORT	(1 << 3)
#define IEEE80211_CCA_REQMODE_DURA_MAN	(1 << 4)

#define IEEE80211_CCA_REPMODE_LATE	(1 << 0)
#define IEEE80211_CCA_REPMODE_INCAP	(1 << 1)
#define IEEE80211_CCA_REPMODE_REFUSE	(1 << 2)

/* Spectrum Management */
#define IEEE80211_CCA_MEASTYPE_BASIC	0x00	/* Basic Request */
#define IEEE80211_CCA_MEASTYPE_CCA	0x01	/* Clear Channel Assessment Request */
#define IEEE80211_CCA_MEASTYPE_RPI	0x02	/* Receiver Power Indicator (RPI) histogram Request */
/* Radio Measurement */
#define IEEE80211_RM_MEASTYPE_CH_LOAD	0x03	/* Channel Load Request */
#define IEEE80211_RM_MEASTYPE_NOISE	0x04	/* Noise histogram Request */
#define IEEE80211_RM_MEASTYPE_BEACON	0x05	/* Beacon Request */
#define IEEE80211_RM_MEASTYPE_FRAME	0x06	/* Frame Request */
#define IEEE80211_RM_MEASTYPE_STA	0x07	/* STA statistics Request */
#define IEEE80211_RM_MEASTYPE_LCI	0x08	/* LCI Request */
#define IEEE80211_RM_MEASTYPE_CATEGORY	0x09	/* Transmit stream/Category Request */
#define IEEE80211_RM_MEASTYPE_MUL_DIAG	0x0A	/* Multicast diagnostics request */
#define IEEE80211_RM_MEASTYPE_LOC_CIVIC	0x0B	/* Location Civic request */
#define IEEE80211_RM_MEASTYPE_LOC_ID	0x0C	/* Location Identifier request */
#define IEEE80211_RM_MEASTYPE_QTN_CCA	0xFE	/* QTN CCA extension */
#define IEEE80211_RM_MEASTYPE_PAUSE	0xFF	/* Measurement Pause Request */

/* for Radio Measurement Actions. Table 7-57a in 802.11k $7.4.6 */
#define IEEE80211_ACTION_R_MEASUREMENT_REQUEST	0
#define IEEE80211_ACTION_R_MEASUREMENT_REPORT	1
#define IEEE80211_ACTION_R_LINKMEASURE_REQUEST	2
#define IEEE80211_ACTION_R_LINKMEASURE_REPORT	3
#define IEEE80211_ACTION_R_NEIGHBOR_REQUEST	4
#define IEEE80211_ACTION_R_NEIGHBOR_REPORT	5

struct ieee80211_action_sm_measurement_header {
	uint8_t	ia_category;
	uint8_t	ia_action;
	uint8_t	am_token;
	uint8_t	am_data[0];
}__packed;

/* RM measurement capabiltiy bits */
/* byte 0 */
#define IEEE80211_RM_LINK_REPORT_CAP		0x01
#define IEEE80211_RM_NEIGH_REPORT_CAP		0x02
#define	IEEE80211_RM_BEACON_PASSIVE_REPORT_CAP	0x10
#define	IEEE80211_RM_BEACON_ACTIVE_REPORT_CAP	0x20
#define	IEEE80211_RM_BEACON_TABLE_REPORT_CAP	0x40
/* RRM - radio resource measurement enabled capabilities element */
struct ieee80211_ie_rrm {
	uint8_t id;
	uint8_t len;
	uint8_t cap[5];
}__packed;

/* RM - radio measurement request */
struct ieee80211_action_radio_measure_request {
	struct ieee80211_action	am_header;
	uint8_t	am_token;
	uint16_t	am_rep_num;
	uint8_t	am_data[0];
}__packed;

/* RM - radio measurement report */
struct ieee80211_action_radio_measure_report {
	struct ieee80211_action	am_header;
	uint8_t	am_token;
	uint8_t	am_data[0];
}__packed;

/*
 * 802.11h measurement request/report element
 * 802.11k measurement request/report element
 * common part
 */
struct ieee80211_ie_measure_comm {
	uint8_t id;		/* IEEE80211_ELEMID_MEASREQ = 38 */
	uint8_t len;		/* 14 for known types */
	uint8_t token;	/* Non-zero number for diff. measurement reqs. */
	uint8_t mode;	/* bits: 1 enable, 2 req, 3 report, 0,4-7 reserved */
	uint8_t type;	/* basic = 0, cca = 1, rpi histogram = 2 */
	uint8_t data[0];	/* variable format according to meas_type */
} __packed;

struct ieee80211_ie_measreq {
	uint8_t chan_num;	/* channel number */
	uint64_t start_tsf;	/* starting time in tsf */
	uint16_t duration_tu;	/* measurement duration in TU */
} __packed;

/*
 * 802.11k measurement request element of sta statistics
 * for PM module collect sta statistics
 * See 802.11k 2003 7.3.2.21.8
 */
struct ieee80211_ie_measreq_sta_stat {
	uint8_t peer_mac[IEEE80211_ADDR_LEN];	/* Peer Mac Address */
	uint16_t random_interval;	/* randomization interval */
	uint16_t duration_tu;	/* measurement duration in TU */
	uint8_t group_id;		/*	group identity	*/
	uint8_t data[0];	/*	Optional sub-elements in variable length	*/
} __packed;

struct ieee80211_ie_measreq_chan_load {
	uint8_t operating_class;
	uint8_t channel_num;
	uint16_t random_interval_tu;
	uint16_t duration_tu;
	uint8_t data[0];
} __packed;

struct ieee80211_ie_measreq_noise_his {
	uint8_t operating_class;
	uint8_t channel_num;
	uint16_t random_interval_tu;
	uint16_t duration_tu;
	uint8_t data[0];
} __packed;

struct ieee80211_ie_measreq_beacon {
	uint8_t operating_class;
	uint8_t channel_num;
	uint16_t random_interval_tu;
	uint16_t duration_tu;
	uint8_t measure_mode;
	uint8_t bssid[IEEE80211_ADDR_LEN];
	uint8_t data[0];
} __packed;

struct ieee80211_ie_measreq_frame {
	uint8_t operating_class;
	uint8_t channel_num;
	uint16_t random_interval_tu;
	uint16_t duration_tu;
	uint8_t frame_request_type;
#define FRAME_COUNT_REPORT	1

	uint8_t mac_addr[IEEE80211_ADDR_LEN];
	uint8_t data[0];
} __packed;

struct ieee80211_ie_measreq_trans_stream_cat {
	uint16_t random_interval_tu;
	uint16_t duration_tu;
	uint8_t peer_sta_addr[IEEE80211_ADDR_LEN];
	uint8_t tid;
	uint8_t bin0_range;
	uint8_t data[0];
} __packed;

struct ieee80211_ie_measreq_multicast_diag {
	uint16_t random_interval_tu;
	uint16_t duration_tu;
	uint8_t group_mac_addr[IEEE80211_ADDR_LEN];
	uint8_t data[0];
} __packed;

struct ieee80211_subie_multicast_triggered_reporting {
	uint8_t sub_id;
	uint8_t len;
	uint8_t condition;
	uint8_t inactivity_timeout;
	uint8_t reactivation_delay;
} __packed;

struct ieee80211_action_rm_link_measure_request {
	struct ieee80211_action	at_header;
	uint8_t token;
	uint8_t tran_power_used;
	uint8_t max_tran_power;
	uint8_t data[0];
} __packed;

struct ieee80211_action_rm_neighbor_report_request {
	struct ieee80211_action	at_header;
	uint8_t token;
	uint8_t data[0];
} __packed;

/*
 * 802.11h measurement report element
 * see 8.4.2.24 IEEE 802.11-2012
 */
struct ieee80211_ie_measrep_basic {
	uint8_t	chan_num;	/* channel number */
	uint64_t start_tsf;	/* starting time in tsf */
	uint16_t duration_tu;	/* measurement duration in TU */
	uint8_t	basic_report;	/* basic report data */
} __packed;

struct ieee80211_ie_measrep_cca {
	uint8_t	chan_num;	/* channel number */
	uint64_t start_tsf;	/* starting time in tsf */
	uint16_t duration_tu;	/* measurement duration in TU */
	uint8_t	cca_report;	/* cca report data */
#define IEEE80211_MEASURE_BASIC_REPORT_BSS		(1 << 0)
#define IEEE80211_MEASURE_BASIC_REPORT_OFDM_PRE		(1 << 1)
#define IEEE80211_MEASURE_BASIC_REPORT_UNDEF		(1 << 2)
#define IEEE80211_MEASURE_BASIC_REPORT_RADAR		(1 << 3)
#define IEEE80211_MEASURE_BASIC_REPORT_UMMEASURE	(1 << 4)
} __packed;

struct ieee80211_ie_measrep_rpi {
	uint8_t	chan_num;	/* channel number */
	uint64_t start_tsf;	/* starting time in tsf */
	uint16_t duration_tu;	/* measurement duration in TU */
	uint8_t	rpi_report[8];	/* rpi report data */
} __packed;

/*
 * 802.11k measurement report element of sta statistics
 * for PM module collect sta statistics
 * See 802.11k 2003 7.3.2.22.8
 */
struct ieee80211_ie_measrep_sta_stat {
	uint16_t duration_tu;	/* measurement duration in TU */
	uint8_t group_id;		/*	group identity	*/
	uint8_t data[0];	/*	Optional sub-elements in variable length	*/
} __packed;

#define IEEE80211_RM_MEAS_SUBTYPE_LEN_MIN	2

/* Quantenna RM group ie, to complement an 802.11k group ie. Node statistics & parameters */
struct ieee80211_ie_qtn_rm_measure_sta {
	uint8_t id;	/* IEEE80211_ELEMID_VENDOR */
	uint8_t len;   /* length in bytes */
	uint8_t qtn_ie_oui[3];		/* QTN_OUI - 0x00, 0x26, 0x86*/
	uint8_t seq;	/* sequence */
	uint8_t type;				/* Which group (special or all) contains in the data. */
	uint8_t data[0];
} __packed;

struct ieee80211_ie_qtn_rm_txstats {
	uint64_t tx_bytes;
	uint32_t tx_pkts;
	uint32_t tx_discard;
	/**
	 * The number of dropped data packets failed to transmit through
	 * wireless media for each traffic category(TC).
	 */
	uint32_t tx_wifi_drop[WME_AC_NUM];
	uint32_t tx_err;
	uint32_t tx_ucast;		/* unicast */
	uint32_t tx_mcast;		/* multicast */
	uint32_t tx_bcast;		/* broadcast */
} __packed;

struct ieee80211_ie_qtn_rm_rxstats {
	uint64_t rx_bytes;
	uint32_t rx_pkts;
	uint32_t rx_discard;
	uint32_t rx_err;
	uint32_t rx_ucast;		/* unicast */
	uint32_t rx_mcast;		/* multicast */
	uint32_t rx_bcast;		/* broadcast */
} __packed;

struct ieee80211_ie_qtn_rm_sta_all {
	struct ieee80211_ie_qtn_rm_txstats tx_stats;
	struct ieee80211_ie_qtn_rm_rxstats rx_stats;
	u_int32_t max_queued;
	u_int32_t link_quality;
	u_int32_t rssi_dbm;
	u_int32_t bandwidth;
	u_int32_t snr;
	u_int32_t tx_phy_rate;
	u_int32_t rx_phy_rate;
	u_int32_t cca;	/* Reserved for cca */
	u_int32_t br_ip;
	u_int32_t rssi;
	u_int32_t hw_noise;
	u_int8_t soc_macaddr[IEEE80211_ADDR_LEN];
	u_int32_t soc_ipaddr;
} __packed;

/*
 * Statistics Group data format for STB
 */
struct ieee80211_ie_rm_sta_grp221 {
	uint8_t soc_macaddr[IEEE80211_ADDR_LEN];
	uint8_t rssi;
	uint8_t phy_noise;
} __packed;

/* dot11Counters Group */
struct ieee80211_rm_sta_stats_group0 {
	uint32_t dot11TransmittedFragmentCount;
	uint32_t dot11MulticastTransmittedFrameCount;
	uint32_t dot11FailedCount;
	uint32_t dot11ReceivedFragmentCount;
	uint32_t dot11MulticastReceivedFrameCount;
	uint32_t dot11FCSErrorCount;
	uint32_t dot11TransmittedFrameCount;
} __packed;

/* dot11MACStatistics Group */
struct ieee80211_rm_sta_stats_group1 {
	uint32_t dot11RetryCount;
	uint32_t dot11MultipleRetryCount;
	uint32_t dot11FrameDuplicateCount;
	uint32_t dot11RTSSuccessCount;
	uint32_t dot11RTSFailureCount;
	uint32_t dot11ACKFailureCount;
} __packed;

/* dot11QosCounters Group for UP0-UP7 */
struct ieee80211_rm_sta_stats_group2to9 {
	uint32_t dot11QosTransmittedFragmentCount;
	uint32_t dot11QosFailedCount;
	uint32_t dot11QosRetryCount;
	uint32_t dot11QosMultipleRetryCount;
	uint32_t dot11QosFrameDuplicateCount;
	uint32_t dot11QosRTSSuccessCount;
	uint32_t dot11QosRTSFailureCount;
	uint32_t dot11QosACKFailureCount;
	uint32_t dot11QosReceivedFragmentCount;
	uint32_t dot11QosTransmittedFrameCount;
	uint32_t dot11QosDiscardedFrameCount;
	uint32_t dot11QosMPDUsReceivedCount;
	uint32_t dot11QosRetriesReceivedCount;
} __packed;

/* dot11BSSAverageAccessDelay Group (only available at an AP) */
struct ieee80211_rm_sta_stats_group10 {
	uint32_t dot11STAStatisticsAPAverageAccessDelay;
	uint32_t dot11STAStatisticsAverageAccessDelayBestEffort;
	uint32_t dot11STAStatisticsAverageAccessDelayBackGround;
	uint32_t dot11STAStatisticsAverageAccessDelayVideo;
	uint32_t dot11STAStatisticsAverageAccessDelayVoice;
	uint32_t dot11STAStatisticsStationCount;
	uint32_t dot11STAStatisticsChannelUtilization;
} __packed;

struct ieee80211_rm_sta_stats_group11 {
	uint32_t dot11TransmittedAMSDUCount;
	uint32_t dot11FailedAMSDUCount;
	uint32_t dot11RetryAMSDUCount;
	uint32_t dot11MultipleRetryAMSDUCount;
	uint32_t dot11TransmittedOctetsInAMSDUCount;
	uint32_t dot11AMSDUAckFailureCounnt;
	uint32_t dot11ReceivedAMSDUCount;
	uint32_t dot11ReceivedOctetsInAMSDUCount;
} __packed;

struct ieee80211_rm_sta_stats_group12 {
	uint32_t dot11TransmittedAMPDUCount;
	uint32_t dot11TransmittedMPDUsInAMPDUCount;
	uint64_t dot11TransmittedOctetsInAMPDUCount;
	uint32_t dot11AMPDUReceivedCount;
	uint32_t dot11MPDUInReceivedAMPDUCount;
	uint64_t dot11ReceivedOctetsInAMPDUCount;
	uint32_t dot11AMPDUDelimiterCRCErrorCount;
} __packed;

struct ieee80211_rm_sta_stats_group13 {
	uint32_t dot11ImplicitBARFailureCount;
	uint32_t dot11ExplicitBARFailureCount;
	uint32_t dot11ChannelWidthSwitchCount;
	uint32_t dot11TwentyMHzFrameTransmittedCount;
	uint32_t dot11FortyMHzFrameTransmittedCount;
	uint32_t dot11TwentyMHzFrameReceivedCount;
	uint32_t dot11FortyMHzFrameReceivedCount;
	uint32_t dot11PSMPUTTGrantDuration;
	uint32_t dot11PSMPUTTUsedDuration;
} __packed;

struct ieee80211_rm_sta_stats_group14 {
	uint32_t dot11GrantedRDGUsedCount;
	uint32_t dot11GrantedRDGUnusedCount;
	uint32_t dot11TransmittedFramesInGrantedRDGCount;
	uint64_t dot11TransmittedOctetsInGrantedRDGCount;
	uint32_t dot11DualCTSSuccessCount;
	uint32_t dot11DualCTSFailureCount;
	uint32_t dot11RTSLSIGSuccessCount;
	uint32_t dot11RTSLSIGFailureCount;
} __packed;

struct ieee80211_rm_sta_stats_group15 {
	uint32_t dot11BeamformingFrameCount;
	uint32_t dot11STBCCTSSuccessCount;
	uint32_t dot11STBCCTSFailureCount;
	uint32_t dot11nonSTBCCTSSuccessCount;
	uint32_t dot11nonSTBCCTSFailureCount;
} __packed;

struct ieee80211_rm_sta_stats_group16 {
	uint32_t dot11RSNAStatsCMACICVErrors;
	uint32_t dot11RSNAStatsCMACReplays;
	uint32_t dot11RSNAStatsRobustMgmtCCMPReplays;
	uint32_t dot11RSNAStatsTKIPICVErrors;
	uint32_t dot11RSNAStatsTKIPReplays;
	uint32_t dot11RSNAStatsCCMPDecryptErrors;
	uint32_t dot11RSNAStatsCCMPReplays;
} __packed;

/*
 * STA Statistics QTN specific
 */
enum RadioMeasureQTNElementID {
	RM_QTN_TX_STATS			=	0,
	RM_QTN_RX_STATS			=	1,
	RM_QTN_MAX_QUEUED		=	2,
	RM_QTN_LINK_QUALITY		=	3,
	RM_QTN_RSSI_DBM			=	4,
	RM_QTN_BANDWIDTH		=	5,
	RM_QTN_SNR			=	6,
	RM_QTN_TX_PHY_RATE		=	7,
	RM_QTN_RX_PHY_RATE		=	8,
	RM_QTN_CCA			=	9,
	RM_QTN_BR_IP			=	10,
	RM_QTN_RSSI			=	11,
	RM_QTN_HW_NOISE			=	12,
	RM_QTN_SOC_MACADDR		=	13,
	RM_QTN_SOC_IPADDR		=	14,
	RM_QTN_MAX			=	RM_QTN_SOC_IPADDR,
	RM_QTN_UNKNOWN			=	15,
	RM_QTN_CTRL_START		=	16,
	RM_QTN_RESET_CNTS		=	16,
	RM_QTN_RESET_QUEUED		=	17,
	RM_QTN_CTRL_END			=	17,
};
#define RM_QTN_MEASURE_MASK ((1 << (RM_QTN_CTRL_END + 1)) - 1)

/*
 * STA Statistic for Group221 specific
 */
enum RadioMeasureGrp221ElementID {
	RM_GRP221_RSSI			=	(RM_QTN_CTRL_END + 1),
	RM_GRP221_PHY_NOISE		=	(RM_QTN_CTRL_END + 2),
	RM_GRP221_SOC_MAC		=	(RM_QTN_CTRL_END + 3),
};

extern const uint8_t ieee80211_meas_sta_qtn_report_subtype_len[RM_QTN_CTRL_END + 1];

/* Standard CCA Flag to used */
#define RM_STANDARD_CCA 0x1009
#define IEEE80211_11K_CCA_INTF_SCALE 255
/*
 * CCA radio measurement report field
 */
struct cca_rm_rep_data {
	uint8_t ch_num;
	uint8_t tm_start[8];
	uint8_t m_duration[2];
	uint8_t busy_frac;
} __packed;

/* CCA report IE*/
struct ieee80211_ie_rm_measure_cca_rep {
	uint8_t id;
	uint8_t len;
	uint8_t rm_token;
	uint8_t rm_rep_mode;
	uint8_t rm_rep_type;
	struct cca_rm_rep_data rep_data;
	struct ieee80211_ie_qtn_scs scs_data;
} __packed;

struct ieee80211_ie_measrep_chan_load {
	uint8_t operating_class;
	uint8_t channel_num;
	uint8_t start_time[8];
	uint16_t duration_tu;
	uint8_t channel_load;
	uint8_t data[0];
} __packed;

struct ieee80211_ie_measrep_noise_his {
	uint8_t operating_class;
	uint8_t channel_num;
	uint8_t start_time[8];
	uint16_t duration_tu;
	uint8_t antenna_id;
	uint8_t anpi;
	uint8_t ipi[11];
	uint8_t data[0];
} __packed;

struct ieee80211_ie_measrep_beacon {
	uint8_t operating_class;
	uint8_t channel_num;
	uint8_t start_time[8];
	uint16_t duration_tu;
	uint8_t reported_frame_info;
	uint8_t rcpi;
	uint8_t rsni;
	uint8_t bssid[IEEE80211_ADDR_LEN];
	uint8_t antenna_id;
	uint8_t parent_tsf[4];
	uint8_t data[0];
} __packed;

struct ieee80211_ie_measrep_frame {
	uint8_t operating_class;
	uint8_t channel_num;
	uint8_t start_time[8];
	uint16_t duration_tu;
	uint8_t data[0];
} __packed;

#define IEEE80211_FRAME_REPORT_SUBELE_FRAME_COUNT_REPORT	1

struct ieee80211_subie_section_frame_entry {
	uint8_t id;
	uint8_t len;
	uint8_t transmit_address[IEEE80211_ADDR_LEN];
	uint8_t bssid[IEEE80211_ADDR_LEN];
	uint8_t phy_type;
	uint8_t avg_rcpi;
	uint8_t last_rsni;
	uint8_t last_rcpi;
	uint8_t anntenna_id;
	uint16_t frame_cnt;
	uint8_t data[0];
} __packed;

struct ieee80211_ie_measrep_trans_stream_cat {
	uint8_t start_time[8];
	uint16_t duration_tu;
	uint8_t peer_sta_address[IEEE80211_ADDR_LEN];
	uint8_t tid;
	uint8_t reason;
	uint32_t tran_msdu_cnt;
	uint32_t msdu_discarded_cnt;
	uint32_t msdu_failed_cnt;
	uint32_t msdu_mul_retry_cnt;
	uint32_t qos_cf_lost_cnt;
	uint32_t avg_queue_delay;
	uint32_t avg_trans_delay;
	uint8_t bin0_range;
	uint32_t bin0;
	uint32_t bin1;
	uint32_t bin2;
	uint32_t bin3;
	uint32_t bin4;
	uint32_t bin5;
} __packed;

struct ieee80211_ie_measrep_multicast_diag {
	uint8_t measure_time[8];
	uint16_t duration_tu;
	uint8_t group_mac_addr[IEEE80211_ADDR_LEN];
	uint8_t reason;
	uint32_t mul_rx_msdu_cnt;
	uint16_t first_seq_num;
	uint16_t last_seq_num;
	uint16_t mul_rate;
} __packed;

struct ieee80211_action_rm_link_measure_report {
	struct ieee80211_action at_header;
	uint8_t token;
	struct ieee80211_ie_tpc_report tpc_report;
	uint8_t recv_antenna_id;
	uint8_t tran_antenna_id;
	uint8_t rcpi;
	uint8_t rsni;
	uint8_t data[0];
} __packed;

struct ieee80211_action_rm_neighbor_report_response {
	struct ieee80211_action at_header;
	uint8_t token;
	uint8_t data[0];
} __packed;

struct ieee80211_ie_neighbor_report {
	uint8_t id;
	uint8_t len;
	uint8_t bssid[IEEE80211_ADDR_LEN];
	uint32_t bssid_info;
#define BSSID_INFO_AP_NOT_REACHABLE		(1 << 0)
#define BSSID_INFO_AP_UNKNOWN			(2 << 0)
#define BSSID_INFO_AP_REACHABLE			(3 << 0)
#define BSSID_INFO_SECURITY_COPY		(1 << 2)
#define BSSID_INFO_KEY_SCOPE_COPY		(1 << 3)
#define BSSID_INFO_CAP_SPECTRUM_MANAGEMENT	(1 << 4)
#define BSSID_INFO_CAP_QOS			(1 << 5)
#define BSSID_INFO_CAP_APSD			(1 << 6)
#define BSSID_INFO_CAP_RADIO_MEASUREMENT	(1 << 7)
#define BSSID_INFO_CAP_DELAYED_BA		(1 << 8)
#define BSSID_INFO_CAP_IMMEDIATE_BA		(1 << 9)
#define BSSID_INFO_MOBILITY_DOMAIN		(1 << 10)
#define BSSID_INFO_HIGH_THROUGHPUT		(1 << 11)
#define BSSID_INFO_VERY_HIGH_THROUGHPUT		(1 << 12)
	uint8_t operating_class;
	uint8_t channel;
	uint8_t phy_type;
	uint8_t data[0];
} __packed;

/* HT actions */
#define IEEE80211_ACTION_HT_TXCHWIDTH		0	/* recommended transmission channel width */
#define IEEE80211_ACTION_HT_MIMOPWRSAVE		1	/* MIMO power save */
#define IEEE80211_ACTION_HT_NCBEAMFORMING	5	/* HT non compressed beamforming report */
#define IEEE80211_ACTION_HT_CBEAMFORMING	6	/* HT compressed beamforming report */

/* VHT actions */
#define IEEE80211_ACTION_VHT_CBEAMFORMING	0	/* VHT compressed beamforming report */
#define IEEE80211_ACTION_VHT_MU_GRP_ID          1       /* VHT MU GRP ID mgmt */
#define IEEE80211_ACTION_VHT_OPMODE_NOTIFICATION	2	/* VHT Operating mode Notification */

/* HT - recommended transmission channel width */
struct ieee80211_action_ht_txchwidth {
	struct ieee80211_action		at_header;
	u_int8_t			at_chwidth;
} __packed;

#define IEEE80211_A_HT_TXCHWIDTH_20	0
#define IEEE80211_A_HT_TXCHWIDTH_2040	1


/* HT - MIMO Power Save */
struct ieee80211_action_ht_mimopowersave {
	struct ieee80211_action		am_header;
	uint8_t				am_enable_mode;
} __packed;

/* HT - Non compressed beam forming */

struct ht_mimo_ctrl {
	uint16_t			am_mimoctrl;
	uint32_t			am_timestamp;
} __packed;

#define IEEE80211_HT_MIMO_CTRL_NC_M			0x0003
#define IEEE80211_HT_MIMO_CTRL_NC_S			0
#define IEEE80211_HT_MIMO_CTRL_NR_M			0x000C
#define IEEE80211_HT_MIMO_CTRL_NR_S			2
#define IEEE80211_HT_MIMO_CTRL_CH_WIDTH_20	0x0000
#define IEEE80211_HT_MIMO_CTRL_CH_WIDTH_40	0x0010
#define IEEE80211_HT_MIMO_CTRL_NG_M			0x0060
#define IEEE80211_HT_MIMO_CTRL_NG_S			5
#define IEEE80211_HT_MIMO_CTRL_NB_M		0x0180
#define IEEE80211_HT_MIMO_CTRL_NB_S		7
#define IEEE80211_HT_MIMO_CTRL_CODEBOOK_M	0x0600
#define IEEE80211_HT_MIMO_CTRL_CODEBOOK_S	9
#define IEEE80211_HT_MIMO_CTRL_SEG_M		0x3800
#define IEEE80211_HT_MIMO_CTRL_SEG_S		11


enum {
	IEEE80211_HT_MIMO_CTRL_NC_1 = 0,
	IEEE80211_HT_MIMO_CTRL_NC_2,
	IEEE80211_HT_MIMO_CTRL_NC_3,
	IEEE80211_HT_MIMO_CTRL_NC_4,
};

enum {
	IEEE80211_HT_MIMO_CTRL_NR_1 = 0,
	IEEE80211_HT_MIMO_CTRL_NR_2,
	IEEE80211_HT_MIMO_CTRL_NR_3,
	IEEE80211_HT_MIMO_CTRL_NR_4,
};

enum {
	IEEE80211_HT_MIMO_CTRL_NG_NONE = 0,
	IEEE80211_HT_MIMO_CTRL_NG_2,
	IEEE80211_HT_MIMO_CTRL_NG_4,
	IEEE80211_HT_MIMO_CTRL_NG_RESERVED,
};

enum {
	IEEE80211_HT_MIMO_CTRL_NB_4 = 0,
	IEEE80211_HT_MIMO_CTRL_NB_2,
	IEEE80211_HT_MIMO_CTRL_NB_6,
	IEEE80211_HT_MIMO_CTRL_NB_8,
};

struct ieee80211_action_ht_bf {
	struct ieee80211_action	am_header;
	struct ht_mimo_ctrl	am_mimo_ctrl;
	uint8_t			am_bf_report[0]; /* start of beamforming report */
} __packed;

/* VHT - Tx Beamforming */
struct vht_mimo_ctrl {
	uint8_t		am_mimoctrl[3];
} __packed;

/* VHT - Operating mode notification */
struct ieee80211_action_vht_opmode_notification {
	struct ieee80211_action		am_header;
	u_int8_t			am_opmode;
} __packed;

#define IEEE80211_VHT_OPMODE_CHWIDTH		0x03
#define IEEE80211_VHT_OPMODE_CHWIDTH_S		0
#define IEEE80211_VHT_OPMODE_RXNSS		0x70
#define IEEE80211_VHT_OPMODE_RXNSS_S		4
#define IEEE80211_VHT_OPMODE_RXNSS_TYPE		0x80
#define IEEE80211_VHT_OPMODE_RXNSS_TYPE_S	7

#define IEEE80211_VHT_MIMO_CTRL_NC_M		0x000007
#define IEEE80211_VHT_MIMO_CTRL_NC_S		0
#define IEEE80211_VHT_MIMO_CTRL_NR_M		0x000038
#define IEEE80211_VHT_MIMO_CTRL_NR_S		3
#define IEEE80211_VHT_MIMO_CTRL_CH_BW_M		0x0000C0
#define IEEE80211_VHT_MIMO_CTRL_CH_BW_S		6
#define IEEE80211_VHT_MIMO_CTRL_CH_WIDTH_20	0x000000
#define IEEE80211_VHT_MIMO_CTRL_CH_WIDTH_40	0x000040
#define IEEE80211_VHT_MIMO_CTRL_CH_WIDTH_80	0x000080
#define IEEE80211_VHT_MIMO_CTRL_CH_WIDTH_160	0x0000C0
#define IEEE80211_VHT_MIMO_CTRL_NG_M		0x000300
#define IEEE80211_VHT_MIMO_CTRL_NG_S		8
#define IEEE80211_VHT_MIMO_CTRL_CODEBOOK_M	0x000400
#define IEEE80211_VHT_MIMO_CTRL_CODEBOOK_S	10
#define IEEE80211_VHT_MIMO_CTRL_FBTYPE_M	0x000800
#define IEEE80211_VHT_MIMO_CTRL_FBTYPE_S	11
#define IEEE80211_VHT_MIMO_CTRL_R_FB_M          0x007000
#define IEEE80211_VHT_MIMO_CTRL_R_FB_S          12
#define IEEE80211_VHT_MIMO_CTRL_FIRSTFB_M       0x008000
#define IEEE80211_VHT_MIMO_CTRL_FIRSTFB_S       15
#define IEEE80211_VHT_MIMO_CTRL_DTOKEN_M        0xFC0000
#define IEEE80211_VHT_MIMO_CTRL_DTOKEN_S        18

/* Block Ack actions */
#define IEEE80211_ACTION_BA_ADDBA_REQ		0	/* Add block ack request */
#define IEEE80211_ACTION_BA_ADDBA_RESP		1	/* Add block ack response */
#define IEEE80211_ACTION_BA_DELBA			2	/* delete block ack */

/* BA - Add block ack request */
struct ieee80211_action_ba_addba_req {
	struct ieee80211_action		am_header;
	uint8_t	am_dlg;
	uint16_t	am_ba_params;
	uint16_t	am_ba_to;
	uint16_t	am_ba_seq;
} __packed;

#define IEEE80211_A_BA_AMSDU_SUPPORTED		0x0001
#define IEEE80211_A_BA_IMMEDIATE			0x0002
#define IEEE80211_A_BA_DELAYED				0x0000
#define IEEE80211_A_BA_TID_M				0x003C
#define IEEE80211_A_BA_TID_S				2
#define IEEE80211_A_BA_BUFF_SIZE_M			0xFFC0
#define IEEE80211_A_BA_BUFF_SIZE_S			6
#define IEEE80211_A_BA_FRAG_M				0x000F
#define IEEE80211_A_BA_FRAG_S				0
#define IEEE80211_A_BA_SEQ_M				0xFFF0
#define IEEE80211_A_BA_SEQ_S				4
#define IEEE80211_IOT_INTEL_AGG_MAX_FRAMES_NUM          16

/* BA - Add block ack response */
struct ieee80211_action_ba_addba_resp {
	struct ieee80211_action		am_header;
	uint8_t	am_dlg;
	__le16		am_status;
	__le16		am_ba_params;
	__le16		am_ba_to;
} __packed;

/* BA - delete block ack request */
struct ieee80211_action_ba_delba {
	struct ieee80211_action		am_header;
	__le16		am_delba_params;
	__le16		am_reason;
}__packed;

#define IEEE80211_A_BA_INITIATOR			0x0800
#define IEEE80211_A_BA_INITIATOR_S			11
#define IEEE80211_A_BA_DELBA_TID			0xF000
#define IEEE80211_A_BA_DELBA_TID_S			12

/* Move to a .config file later. */
#define CONFIG_QHOP 1

#ifdef CONFIG_QHOP
#define QDRV_ACTION_TYPE_QHOP        0x19
#define QDRV_ACTION_QHOP_DFS_REPORT  0x1
#define QDRV_ACTION_QHOP_SCS_REPORT  0x2

struct qdrv_vendor_action_header {
	uint8_t category;
	uint8_t oui[3];
	uint8_t type;
	uint8_t action;
} __packed;

struct qdrv_vendor_action_qhop_dfs_data {
	uint8_t cur_chan;
} __packed;

#endif

#ifdef CONFIG_QVSP

/**
 * Structures for action frames used to set stream states and configure VSP.
 *
 * These structures are the ones that go over the medium, so must be packed.
 */
#define QVSP_ACTION_TYPE_VSP 0x1
#define QVSP_ACTION_STRM_CTRL 0x1
#define QVSP_ACTION_VSP_CTRL 0x2

/**
 * Common header for all VSP action frames.
 */
struct ieee80211_qvsp_act_header_s {
	uint8_t category;
	uint8_t oui[3];
	uint8_t type;
	uint8_t action;
} __packed;

struct ieee80211_qvsp_act_frm_dis_attr_s {
	uint32_t throt_policy;
	uint32_t throt_rate;
	uint32_t demote_rule;
	uint32_t demote_state;
} __packed;

/**
 * Stream control action frame.
 */
struct ieee80211_qvsp_act_strm_ctrl_s {
	struct ieee80211_qvsp_act_header_s header;
	uint8_t strm_state;
	uint8_t count;
	struct ieee80211_qvsp_act_frm_dis_attr_s dis_attr;
	struct ieee80211_qvsp_strm_id strm_items[0]; /* One or more of these entries */
} __packed;

/**
 * Single VSP control item - set a parameter remotely.
 */
struct ieee80211_qvsp_act_vsp_ctrl_item_s {
	uint32_t index;
	uint32_t value;
} __packed;

/**
 * VSP configuration/control action frame.
 */
struct ieee80211_qvsp_act_vsp_ctrl_s {
	struct ieee80211_qvsp_act_header_s header;
	uint8_t count;
	uint8_t pad[3]; /* Pad for 32-bit alignment */
	struct ieee80211_qvsp_act_vsp_ctrl_item_s ctrl_items[0]; /* One or more of these entries */
} __packed;

#endif

/*
 * 802.11w / PMF SA Query Action Frame
 */
#define IEEE80211_ACTION_W_SA_QUERY_REQ		0
#define IEEE80211_ACTION_W_SA_QUERY_RESP	1

struct ieee80211_action_sa_query {
	struct ieee80211_action		at_header;
	u_int16_t			at_tid;
} __packed;

/*
 * Control frames.
 */
struct ieee80211_frame_min {
	uint8_t i_fc[2];
	uint8_t i_dur[2];
	uint8_t i_addr1[IEEE80211_ADDR_LEN];
	uint8_t i_addr2[IEEE80211_ADDR_LEN];
	/* FCS */
} __packed;

/* 80211.v WNM */
#define	IEEE80211_WNM_BSS_TM_CAP 19

/* IEEE 802.11v - WNM Action field values */
#define IEEE80211_WNM_EVENT_REQ				0
#define	IEEE80211_WNM_EVENT_REPORT			1
#define	IEEE80211_WNM_DIAGNOSTIC_REQ			2
#define	IEEE80211_WNM_DIAGNOSTIC_REPORT			3
#define	IEEE80211_WNM_LOCATION_CFG_REQ			4
#define	IEEE80211_WNM_LOCATION_CFG_RESP			5
#define	IEEE80211_WNM_BSS_TRANS_MGMT_QUERY		6
#define	IEEE80211_WNM_BSS_TRANS_MGMT_REQ		7
#define	IEEE80211_WNM_BSS_TRANS_MGMT_RESP		8
#define	IEEE80211_WNM_FMS_REQ				9
#define	IEEE80211_WNM_FMS_RESP				10
#define	IEEE80211_WNM_COLLOCATED_INTERFERENCE_REQ	11
#define	IEEE80211_WNM_COLLOCATED_INTERFERENCE_REPORT	12
#define	IEEE80211_WNM_TFS_REQ				13
#define	IEEE80211_WNM_TFS_RESP				14
#define	IEEE80211_WNM_TFS_NOTIFY			15
#define	IEEE80211_WNM_SLEEP_MODE_REQ			16
#define	IEEE80211_WNM_SLEEP_MODE_RESP			17
#define	IEEE80211_WNM_TIM_BROADCAST_REQ			18
#define	IEEE80211_WNM_TIM_BROADCAST_RESP		19
#define	IEEE80211_WNM_QOS_TRAFFIC_CAPAB_UPDATE		20
#define	IEEE80211_WNM_CHANNEL_USAGE_REQ			21
#define	IEEE80211_WNM_CHANNEL_USAGE_RESP		22
#define	IEEE80211_WNM_DMS_REQ				23
#define	IEEE80211_WNM_DMS_RESP				24
#define	IEEE80211_WNM_TIMING_MEASUREMENT_REQ		25
#define	IEEE80211_WNM_NOTIFICATION_REQ			26
#define	IEE8E0211_WNM_NOTIFICATION_RESP			27

/* IEEE 802.11v - BSS Transition Management Request - Request Mode */
#define BTM_REQ_PREF_CAND_LIST_INCLUDED		BIT(0)
#define BTM_REQ_ABRIDGED			BIT(1)
#define BTM_REQ_DISASSOC_IMMINENT		BIT(2)
#define BTM_REQ_BSS_TERMINATION_INCLUDED	BIT(3)
#define BTM_REQ_ESS_DISASSOC_IMMINENT		BIT(4)

/* IEEE Std 802.11-2012 - Table 8-253 */
/* BTM response status codes */
#define	BTM_RSP_ACCEPT					0
#define	BTM_RSP_REJECT_UNSPECIFIED			1
#define	BTM_RSP_REJECT_INSUFFICIENT_BEACON		2
#define	BTM_RSP_REJECT_INSUFFICIENT_CAPABITY		3
#define	BTM_RSP_REJECT_UNDESIRED			4
#define	BTM_RSP_REJECT_DELAY_REQUEST			5
#define	BTM_RSP_REJECT_STA_CANDIDATE_LIST_PROVIDED	6
#define	BTM_RSP_REJECT_NO_SUITABLE_CANDIDATES		7
#define	BTM_RSP_REJECT_LEAVING_ESS			8

/* Neighbor report and BTM subelements */
#define WNM_NEIGHBOR_TSF				1
#define WNM_NEIGHBOR_CONDENSED_COUNTRY_STRING		2
#define WNM_NEIGHBOR_BTM_CANDIDATE_PREFERENCE		3
#define WNM_NEIGHBOR_BTM_TERMINATION_DURATION		4
#define WNM_NEIGHBOR_BEARING				5
#define WNM_NEIGHBOR_MEASUREMENT_PILOT			66
#define WNM_NEIGHBOR_RRM_ENABLED_CAPABILITIES		70
#define WNM_NEIGHBOR_MULTIPLE_BSSID			71

/* some of BTM related values */
#define WNM_BTM_DEFAULT_VAL_INTVAL		15
#define WNM_BTM_DISASSOC_TIMER_VALUE		15
#define WNM_BTM_BSS_TERMINATION_DURATION	5 /* 1 minute */


/* prefrence sub element  */
struct ieee80211_subie_pref {
	uint8_t    subelem_id;
	uint8_t    length;
	uint8_t    pref;
}__packed;

/* BSS Termination duration */
struct ieee80211_ie_btm_bss_termdur {
	uint8_t    subelem_id;
	uint8_t    length;
	uint64_t   bss_term_tsf;
	uint16_t   duration;
}__packed;

struct ieee80211_btm_query_paramset {
	uint8_t dialog_token;
	uint8_t reason;
	uint8_t data[0]; /* optional prefered BSS candidate list */
}__packed;

struct ieee80211_action_btm_query {
	struct ieee80211_action btm_header;
	struct ieee80211_btm_query_paramset btm_query_param;
}__packed;

struct btm_request_params {
	uint8_t		dialog_token;
	uint8_t		request_mode;
	uint16_t	disassoc_timer;
	uint8_t		validity_interval;
	uint8_t		*bss_term_dur;
	char		*url;
	uint8_t		*neigh_reports;
	int		neigh_reports_length;
};

struct ieee80211_btm_req_paramset {
	uint8_t		dialog_token;
	uint8_t		request_mode;
	uint16_t	disassoc_timer;
	uint8_t		validity_interval;
	uint8_t		info[0];
	/* Optional BSS termination duration */
	/* Optional session information URL */
	/* Optional BSS Transition Candidate list (neighbor report) */
}__packed;

struct ieee80211_action_btm_req {
	struct ieee80211_action			btm_header;
	struct ieee80211_btm_req_paramset	btm_req_param;
}__packed;

struct ieee80211_btm_rsp_paramset {
	uint8_t	dialog_token;
	uint8_t status_code;
	uint8_t bss_term_delay;
	uint8_t data[0];
	/* Optional Target BSSID */
	/* Optional BSS Transition Candidate list (neighbor report) */
}__packed;

struct ieee80211_action_btm_rsp {
	struct ieee80211_action			btm_header;
	struct ieee80211_btm_rsp_paramset	btm_rsp_param;
}__packed;

/* ieee80211r  related*/
/*
 * mobility domain information element.
 */
struct ieee80211_md_ie {
	uint8_t		md_id;		/* IEEE80211_ELEMID_MOBILITY_DOMAIN */
	uint8_t		md_len;		/* length in bytes */
	uint16_t	md_info;	/* mobility domain id */
	uint8_t		md_cap;		/* capability */
}__packed;

#define IEEE80211_MDIE_LEN	3

/*
 * BAR frame format
 */
#define IEEE80211_BAR_CTL_TID		0xF000      /* tid mask             */
#define IEEE80211_BAR_CTL_TID_S         12      /* tid shift            */
#define IEEE80211_BAR_CTL_NOACK		0x0001      /* no-ack policy        */
#define IEEE80211_BAR_CTL_COMBA		0x0004      /* compressed block-ack */
#define IEEE80211_BAR_CTL_MULTIBA	0x0006		/* Multi TID Block Ack */
#define IEEE80211_BAR_INFO_FRAG_M	0x000F		/* fragment mask */
#define IEEE80211_BAR_CTL_FRAG_S	0			/* fragment shift */
#define IEEE80211_BAR_CTL_SEQ		0xFFF0		/* sequence number mask */
#define IEEE80211_BAR_CTL_SEQ_S		4			/* sequence number shift */


struct ieee80211_frame_bar {
	uint8_t	i_fc[2];
	uint8_t	i_dur[2];
	uint8_t	i_ra[IEEE80211_ADDR_LEN];
	uint8_t	i_ta[IEEE80211_ADDR_LEN];
	uint16_t	i_ctl;
	uint8_t	i_info[0];						/* variable length */
	/* FCS */
} __packed;

struct ieee80211_frame_bar_info_simple {
	uint16_t	i_seq;
} __packed;

struct ieee80211_frame_bar_info_tid {
	uint16_t	i_tid;
	uint16_t	i_seq;
} __packed;

#define IEEE80211_BAR_HDR_LEN		16
#define IEEE80211_BAR_COMPRESSED_LEN	(sizeof(struct ieee80211_frame_bar) + \
						sizeof(struct ieee80211_frame_bar_info_simple))

/*
 * BA frame format
 */
struct ieee80211_frame_ba {
	uint8_t	i_fc[2];
	uint8_t	i_dur[2];
	uint8_t	i_ra[IEEE80211_ADDR_LEN];
	uint8_t	i_ta[IEEE80211_ADDR_LEN];
	uint16_t	i_ctl;
	uint8_t	i_info[0];						/* variable length */
	/* FCS */
} __packed;

struct ieee80211_frame_ba_simple {
	uint16_t	i_seq;
	uint8_t	i_bm[128];
} __packed;

struct ieee80211_frame_ba_comp {
	uint16_t	i_seq;
	uint8_t	i_bm[8];
} __packed;

struct ieee80211_frame_ba_tid {
	uint16_t	i_tid;
	uint16_t	i_seq;
	uint8_t	i_bm[8];
} __packed;

struct ieee80211_frame_rts {
	uint8_t i_fc[2];
	uint8_t i_dur[2];
	uint8_t i_ra[IEEE80211_ADDR_LEN];
	uint8_t i_ta[IEEE80211_ADDR_LEN];
	/* FCS */
} __packed;

struct ieee80211_frame_cts {
	uint8_t i_fc[2];
	uint8_t i_dur[2];
	uint8_t i_ra[IEEE80211_ADDR_LEN];
	/* FCS */
} __packed;

struct ieee80211_frame_ack {
	uint8_t i_fc[2];
	uint8_t i_dur[2];
	uint8_t i_ra[IEEE80211_ADDR_LEN];
	/* FCS */
} __packed;

struct ieee80211_frame_pspoll {
	uint8_t i_fc[2];
	uint8_t i_aid[2];
	uint8_t i_bssid[IEEE80211_ADDR_LEN];
	uint8_t i_ta[IEEE80211_ADDR_LEN];
	/* FCS */
} __packed;

struct ieee80211_frame_cfend {		/* NB: also CF-End+CF-Ack */
	uint8_t i_fc[2];
	uint8_t i_dur[2];	/* should be zero */
	uint8_t i_ra[IEEE80211_ADDR_LEN];
	uint8_t i_bssid[IEEE80211_ADDR_LEN];
	/* FCS */
} __packed;

struct ieee80211_frame_cw {
	uint8_t	i_fc[2];
	uint8_t	i_dur[2];
	uint8_t	i_ra[IEEE80211_ADDR_LEN];
	uint8_t	i_cfc[2]; /* carried frame control */
	/* variable control frame */
	/* FCS */
} __packed;

/* 802.11 Management over Ethernet Payload Types (Annex U.1) */
#define IEEE80211_SNAP_TYPE_REMOTE             1   /* Remote request/response */
#define IEEE80211_SNAP_TYPE_TDLS               2   /* TDLS */

#define IEEE80211_FCS_LEN		4
#define IEEE80211_ENCR_HDR_AES_LEN	16

/*
 * BEACON management packets
 *
 *	octet timestamp[8]
 *	octet beacon interval[2]
 *	octet capability information[2]
 *	information element
 *		octet elemid
 *		octet length
 *		octet information[length]
 */

typedef uint8_t *ieee80211_mgt_beacon_t;

#define	IEEE80211_BEACON_INTERVAL(beacon) \
	((beacon)[8] | ((beacon)[9] << 8))
#define	IEEE80211_BEACON_CAPABILITY(beacon) \
	((beacon)[10] | ((beacon)[11] << 8))

#define	IEEE80211_CAPINFO_ESS			0x0001
#define	IEEE80211_CAPINFO_IBSS			0x0002
#define	IEEE80211_CAPINFO_CF_POLLABLE		0x0004
#define	IEEE80211_CAPINFO_CF_POLLREQ		0x0008
#define	IEEE80211_CAPINFO_PRIVACY		0x0010
#define	IEEE80211_CAPINFO_SHORT_PREAMBLE	0x0020
#define	IEEE80211_CAPINFO_PBCC			0x0040
#define	IEEE80211_CAPINFO_CHNL_AGILITY		0x0080
#define IEEE80211_CAPINFO_SPECTRUM_MGMT		0x0100
#define	IEEE80211_CAPINFO_WME			0x0200
#define	IEEE80211_CAPINFO_SHORT_SLOTTIME	0x0400
#define	IEEE80211_CAPINFO_APSD			0x0800
#define	IEEE80211_CAPINFO_RM			0x1000
#define	IEEE80211_CAPINFO_DSSSOFDM		0x2000
#define	IEEE80211_CAPINFO_DELAYED_BA		0x4000
#define	IEEE80211_CAPINFO_IMMEDIATE_BA		0x8000

/* Extended Capabilities element (8.4.2.29) - bits 0 to 31 */
#define IEEE80211_EXTCAP1_TDLS_UAPSD		0x10000000UL	/* TDLS peer U-APSD buf STA support */
#define IEEE80211_EXTCAP1_TDLS_PSM		0x20000000UL	/* Peer PSM Support */
#define IEEE80211_EXTCAP1_TDLS_CS		0x40000000UL	/* channel switching */
#define IEEE80211_EXTCAP1_BSS_TRANSITION	0x00080000UL	/* bss transition */

/* Extended Capabilities element (8.4.2.29) - bits 32 to 63 */
#define IEEE80211_EXTCAP2_TDLS			0x00000020UL	/* TDLS supported */
#define IEEE80211_EXTCAP2_TDLS_PROHIB		0x00000040UL	/* TDLS prohibited */
#define IEEE80211_EXTCAP2_TDLS_CS_PROHIB	0x00000080UL	/* TDLS channel switch prohibited */
#define IEEE80211_EXTCAP2_OP_MODE_NOTI		0x40000000UL	/* Operation mode notification supporting */

#define IEEE8211_EXTCAP_LENGTH	8	/* Extended capabilities element length */

/*
 * 802.11i/WPA information element (maximally sized).
 */
struct ieee80211_ie_wpa {
	uint8_t wpa_id;			/* IEEE80211_ELEMID_VENDOR */
	uint8_t wpa_len;		/* length in bytes */
	uint8_t wpa_oui[3];		/* 0x00, 0x50, 0xf2 */
	uint8_t wpa_type;		/* OUI type */
	uint16_t wpa_version;		/* spec revision */
	uint32_t wpa_mcipher[1];	/* multicast/group key cipher */
	uint16_t wpa_uciphercnt;	/* # pairwise key ciphers */
	uint32_t wpa_uciphers[8];	/* ciphers */
	uint16_t wpa_authselcnt;	/* authentication selector cnt*/
	uint32_t wpa_authsels[8];	/* selectors */
	uint16_t wpa_caps;		/* 802.11i capabilities */
	uint16_t wpa_pmkidcnt;		/* 802.11i pmkid count */
	uint16_t wpa_pmkids[8];		/* 802.11i pmkids */
} __packed;

/* TDLS Link Identifier element (7.3.2.62) */
struct ieee80211_tdls_link_id {
	uint8_t        id;                             /* IEEE80211_ELEMID_TDLS_LINK_ID */
	uint8_t        len;                            /* 20 */
	uint8_t        bssid[IEEE80211_ADDR_LEN];      /* BSSID */
	uint8_t        init_sa[IEEE80211_ADDR_LEN];    /* Initiator STA MAC address */
	uint8_t        resp_sa[IEEE80211_ADDR_LEN];    /* Responder STA MAC address */
} __packed;

/* TDLS Wakeup Schedule information element (7.3.2.63) */
struct ieee80211_tdls_wkup_sched {
	uint8_t        id;             /* IEEE80211_ELEMID_TDLS_WKUP_SCHED */
	uint8_t        len;            /* 20 */
	uint32_t       offset;         /* Offset from TSF 0 */
	uint32_t       interval;       /* Microsecs between awake windows */
	uint32_t       awake_slots;    /* Awake window slots */
	uint32_t       awake_dur;      /* Max Awake Window Duration */
	uint16_t       idle_count;     /* Idle Count */
} __packed;

/* Extender Role IE */
struct ieee80211_ie_qtn_extender {
	uint8_t id;		/* IEEE80211_ELEMID_VENDOR */
	uint8_t len;		/* 5 */
	uint8_t qtn_ie_oui[3];	/* QTN_OUI - 0x00, 0x26, 0x86*/
	uint8_t qtn_ie_type;	/* QTN_OUI_EXTENDER_ROLE */
	uint8_t role;		/* extender device role */
} __packed;

/* TDLS IE */
struct ieee80211_ie_qtn_tdls_sta_info {
	uint8_t id;		/* IEEE80211_ELEMID_VENDOR */
	uint8_t len;		/* 6 */
	uint8_t qtn_ie_oui[3];	/* QTN_OUI - 0x00, 0x26, 0x86 */
	uint8_t qtn_ie_type;	/* QTN_OUI_TDLS */
	uint16_t sta_associd;	/* station's AID, unique value at BSS */
} __packed;

/* TDLS Channel Switch Timing element (7.3.2.64) */
struct ieee80211_tdls_cs_timing {
	uint8_t        id;             /* IEEE80211_ELEMID_TDLS_CS_TIMING */
	uint8_t        len;            /* 6 */
	uint16_t       switch_time;    /* Microsecs to switch channels */
	uint16_t       switch_timeout; /* Microsecs to timeout channel switch */
} __packed;

/* TDLS PTI Control element (7.3.2.65) */
struct ieee80211_tdls_pti_ctrl {
	uint8_t        id;             /* IEEE80211_ELEMID_TDLS_PTI_CTRL */
	uint8_t        len;            /* 5 */
	uint16_t       tid;            /* TID in last mpdu to pu sleep sta */
	uint16_t       seq_ctrl;       /* Seq ctrl in last mpdu to sleep sta */
} __packed;

/* TDLS PU Buffer Status element (7.3.2.66) */
struct ieee80211_tdls_pu_buf_stat {
	uint8_t        id;             /* IEEE80211_ELEMID_TDLS_PU_BUF_STAT */
	uint8_t        len;            /* 3 */
	uint8_t        pu_buf_stat;    /* PU buffer status flags */
} __packed;

/* Extender Role IE */
struct ieee80211_qtn_ext_role {
	uint8_t id;				/* IEEE80211_ELEMID_VENDOR */
	uint8_t len;				/* 5 */
	uint8_t qtn_ie_oui[3];			/* QTN_OUI - 0x00, 0x26, 0x86*/
	uint8_t qtn_ie_type;			/* QTN_OUI_EXTENDER_ROLE */
	uint8_t role;				/* extender device role: MBS, RBS, NONE */
} __packed;

#define QTN_MAX_RBS_NUM		8
struct ieee80211_qtn_ext_bssid {
	uint8_t id;				/* IEEE80211_ELEMID_VENDOR */
	uint8_t len;				/* 59 */
	uint8_t qtn_ie_oui[3];			/* QTN_OUI - 0x00, 0x26, 0x86*/
	uint8_t qtn_ie_type;			/* QTN_OUI_EXTENDER_BSSID */
	uint8_t mbs_bssid[IEEE80211_ADDR_LEN];	/* BSSID of mbs */
	uint8_t rbs_num;
	uint8_t rbs_bssid[QTN_MAX_RBS_NUM][IEEE80211_ADDR_LEN]; /* BSSID of rbs */
} __packed;

struct ieee80211_qtn_ext_state {
	uint8_t id;				/* IEEE80211_ELEMID_VENDOR */
	uint8_t len;				/* 8 */
	uint8_t qtn_ie_oui[3];			/* QTN_OUI - 0x00, 0x26, 0x86 */
	uint8_t qtn_ie_type;			/* QTN_OUI_EXTENDER_STATE */
#define QTN_EXT_MBS_OCAC	BIT(0)		/* MBS OCAC on-going */
	uint8_t state1;				/* record extender specific states */
	uint8_t __rsvd[3];
} __packed;

struct ieee80211_ie_qtn_ocac_state {
	uint8_t id;				/* IEEE80211_ELEMID_VENDOR */
#define OCAC_STATE_IE_LEN	6
	uint8_t len;				/* 6 - QTN_OCAC_STATE_IE_LEN */
	uint8_t qtn_ie_oui[3];			/* QTN_OUI - 0x00, 0x26, 0x86 */
	uint8_t qtn_ie_type;			/* IE type - QTN_OUI_OCAC_STATE */
#define OCAC_STATE_NONE		0
#define OCAC_STATE_BACKOFF	1
#define OCAC_STATE_ONGOING	2
	uint8_t state;
	uint8_t param;				/* Use of params depends on the current stage
						 * OCAC_STATE_NONE   : Not used (set as 0)
						 * OCAC_STATE_BACKOFF: Backoff before OCAC would start (in beacon count)
						 * OCAC_STATE_ONGOING: Not used (set as 0)
						 */
} __packed;

/*
 * 802.11n AMPDU delimiters and frame structure
 */

/* XXX - Endianness?  */
struct ieee80211_ampdu_delim {
	uint8_t	dl_mpdulen[2];		/* only 12 bits */
	uint8_t	dl_crc;
	uint8_t	dl_uniquepat;
} __packed;

#define IEEE80211_AMPDU_DLPAT		0x4E	/* ASCII for char 'N' */
#define	IEEE80211_AMPDU_PADMAX		3

/*
 * 802.11n HT Capability IE
 */
struct ieee80211_ie_htcap {
	uint8_t	hc_id;			/* element ID */
	uint8_t	hc_len;			/* length in bytes */
	uint8_t	hc_cap[2];			/* HT capabilities */
	uint8_t	hc_ampdu;		/* A-MPDU parameters */
	uint8_t	hc_mcsset[16];		/* supported MCS set */
	uint8_t	hc_extcap[2];		/* extended HT capabilities */
	uint8_t	hc_txbf[4];		/* txbf capabilities */
	uint8_t	hc_antenna;		/* antenna capabilities */
} __packed;


/* HT capability flags */
#define	IEEE80211_HTCAP_C_LDPCCODING		0x0001
#define	IEEE80211_HTCAP_C_CHWIDTH40		0x0002
#define	IEEE80211_HTCAP_C_GREENFIELD		0x0010
#define IEEE80211_HTCAP_C_SHORTGI20		0x0020
#define IEEE80211_HTCAP_C_SHORTGI40		0x0040
#define IEEE80211_HTCAP_C_TXSTBC		0x0080
#define IEEE80211_HTCAP_C_RXSTBC		0x0100
#define IEEE80211_HTCAP_C_DELAYEDBLKACK		0x0400
#define IEEE80211_HTCAP_C_MAXAMSDUSIZE_8K	0x0800  /* 1 = 8K, 0 = 3839 bytes */
#define IEEE80211_HTCAP_C_DSSSCCK40		0x1000
#define IEEE80211_HTCAP_C_PSMP			0x2000
#define IEEE80211_HTCAP_C_40_INTOLERANT		0x4000
#define IEEE80211_HTCAP_C_LSIGTXOPPROT		0x8000

/* STBC defines */
#define IEEE80211_MAX_TX_STBC_SS		2

/* MCS set flags */
#define IEEE80211_HTCAP_MCS_TX_SET_DEFINED	0x01
#define IEEE80211_HTCAP_MCS_TX_RX_SET_NEQ	0x02
#define IEEE80211_HTCAP_MCS_TX_UNEQ_MOD		0x10

/* Maximum MSDU sizes */
#define	IEEE80211_MSDU_SIZE_7935			7935
#define	IEEE80211_MSDU_SIZE_3839			3839


#define IEEE80211_HT_MCS_SET_BPSK_CR_HALF		0x01
#define IEEE80211_HT_MCS_SET_QPSK_CR_HALF		0x02
#define IEEE80211_HT_MCS_SET_QPSK_CR_THREEFORTH	0x04
#define IEEE80211_HT_MCS_SET_16QAM_CR_HALF		0x08
#define IEEE80211_HT_MCS_SET_16QAM_CR_THREEFORTH	0x10
#define IEEE80211_HT_MCS_SET_64QAM_CR_TWOTHIRD	0x20
#define IEEE80211_HT_MCS_SET_64QAM_CR_THREEFORTH	0x40
#define IEEE80211_HT_MCS_SET_64QAM_CR_FIVESIXTH	0x80

/* Extended capabilities flags */
#define IEEE80211_HTCAP_E_PCO				0x0001
#define IEEE80211_HTCAP_E_PLUS_HTC			0x0400
#define IEEE80211_HTCAP_E_RD_RESPONSE		0x0800

/* Tx Beamforming flags */
#define IEEE80211_HTCAP_B_IMP_TXBF_RX		0x00000001
#define IEEE80211_HTCAP_B_STAG_SOUNDING_RX	0x00000002
#define IEEE80211_HTCAP_B_STAG_SOUNDING_TX	0x00000004
#define IEEE80211_HTCAP_B_NDP_RX			0x00000008
#define IEEE80211_HTCAP_B_NDP_TX			0x00000010
#define IEEE80211_HTCAP_B_IMP_TXBF_TX		0x00000020
#define IEEE80211_HTCAP_B_EXP_CSI_TXBF		0x00000100
#define IEEE80211_HTCAP_B_EXP_NCOMP_STEER	0x00000200
#define IEEE80211_HTCAP_B_EXP_COMP_STEER	0x00000400

/* Antenna selection flags */
#define IEEE80211_HTCAP_A_ASEL_CAPABLE		0x01
#define IEEE80211_HTCAP_A_EXP_CSI_FB_ASEL	0x02
#define IEEE80211_HTCAP_A_ANT_IND_FB_ASEL	0x04
#define IEEE80211_HTCAP_A_EXP_CSI_FB		0x08
#define IEEE80211_HTCAP_A_ANT_IND_FB		0x10
#define IEEE80211_HTCAP_A_RX_ASEL			0x20
#define IEEE80211_HTCAP_A_TX_SOUNDING_PPDU	0x40

/* 11 AC related defines */
#define IEEE80211_11AC_MCS_VAL_ERR		-1
#define IEEE80211_HT_EQUAL_MCS_START		0
#define IEEE80211_HT_EQUAL_MCS_2SS_MAX		15
#define IEEE80211_HT_EQUAL_MCS_3SS_MAX		23
#define IEEE80211_EQUAL_MCS_32			32
#define IEEE80211_UNEQUAL_MCS_START		33
#define IEEE80211_HT_UNEQUAL_MCS_2SS_MAX	38
#define IEEE80211_HT_UNEQUAL_MCS_3SS_MAX	52
#define IEEE80211_UNEQUAL_MCS_MAX		76
#define IEEE80211_UNEQUAL_MCS_BIT		0x40
#define IEEE80211_AC_MCS_MASK			0xFF
#define IEEE80211_AC_MCS_SHIFT			8
#define IEEE80211_AC_MCS_VAL_MASK		0x0F
#define IEEE80211_AC_MCS_NSS_MASK		0xF0
#define IEEE80211_11AC_MCS_NSS_SHIFT		4
#define IEEE80211_AC_MCS_MAX			10
#define IEEE80211_AC_MCS_NSS_MAX		4

/* B0-1 maximum rx A-MPDU factor 2^(13+Max Rx A-MPDU Factor) - 1 */
enum {
	IEEE80211_HTCAP_MAXRXAMPDU_8191,	/* (2 ^ 13) - 1*/
	IEEE80211_HTCAP_MAXRXAMPDU_16383,   /* (2 ^ 14) - 1 */
	IEEE80211_HTCAP_MAXRXAMPDU_32767,   /* (2 ^ 15) - 1*/
	IEEE80211_HTCAP_MAXRXAMPDU_65535,   /* (2 ^ 16) - 1*/
};

/* B2-4 MPDU spacing (usec) */
enum {
	IEEE80211_HTCAP_MPDUSPACING_NA,		/* No time restriction */
	IEEE80211_HTCAP_MPDUSPACING_0_25,   /* 1/4 usec */
	IEEE80211_HTCAP_MPDUSPACING_0_5,    /* 1/2 usec */
	IEEE80211_HTCAP_MPDUSPACING_1,      /* 1 usec */
	IEEE80211_HTCAP_MPDUSPACING_2,      /* 2 usec */
	IEEE80211_HTCAP_MPDUSPACING_4,      /* 4 usec */
	IEEE80211_HTCAP_MPDUSPACING_8,      /* 8 usec */
	IEEE80211_HTCAP_MPDUSPACING_16,     /* 16 usec */
};

/*
 * Rx MCS set
 * # Supported rates IE is a 10 octet bitmap - also see mcs_stream_map[]
 * Octet: 0        1        2        3        4 UEQM1  5 UEQM2  6 UEQM3  7 UEQM4  8 UEQM5  9 UEQM6
 * NSS:   11111111 22222222 33333333 44444444 02222223 33333333 33333444 44444444 44444444 44444...
 * MCS:   0        8        16       24       32       40       48       56       64       72  76
 */
enum {
	IEEE80211_HT_MCSSET_20_40_NSS1,		/* CBW = 20/40 MHz, Nss = 1, Nes = 1, EQM/ No EQM */
	IEEE80211_HT_MCSSET_20_40_NSS2,		/* CBW = 20/40 MHz, Nss = 2, Nes = 1, EQM */
	IEEE80211_HT_MCSSET_20_40_NSS3,		/* CBW = 20/40 MHz, Nss = 3, Nes = 1, EQM */
	IEEE80211_HT_MCSSET_20_40_NSS4,		/* CBW = 20/40 MHz, Nss = 4, Nes = 1, EQM */
	IEEE80211_HT_MCSSET_20_40_UEQM1,	/* MCS 32 and UEQM MCSs 33 - 39 */
	IEEE80211_HT_MCSSET_20_40_UEQM2,	/* UEQM MCSs 40 - 47 */
	IEEE80211_HT_MCSSET_20_40_UEQM3,        /* UEQM MCSs 48 - 55 */
	IEEE80211_HT_MCSSET_20_40_UEQM4,        /* UEQM MCSs 56 - 63 */
	IEEE80211_HT_MCSSET_20_40_UEQM5,        /* UEQM MCSs 64 - 71 */
	IEEE80211_HT_MCSSET_20_40_UEQM6,        /* UEQM MCSs 72 - 76 plus 3 reserved bits */
};

#define IEEE80211_HT_MCSSET_20_40_UEQM1_2SS	0x7E

#define IEEE80211_HT_MCSSET_20_40_UEQM1_3SS	0x80
#define IEEE80211_HT_MCSSET_20_40_UEQM2_3SS	0xFF
#define IEEE80211_HT_MCSSET_20_40_UEQM3_3SS	0x1F

#define IEEE80211_HT_MCSSET_20_40_UEQM3_4SS	0xE0
#define IEEE80211_HT_MCSSET_20_40_UEQM4_4SS	0xFF
#define IEEE80211_HT_MCSSET_20_40_UEQM5_4SS	0xFF
#define IEEE80211_HT_MCSSET_20_40_UEQM6_4SS	0x1F

#define IEEE80211_HT_HAS_2SS_UEQM_MCS(mcsset) \
		(mcsset[IEEE80211_HT_MCSSET_20_40_UEQM1] &	\
			IEEE80211_HT_MCSSET_20_40_UEQM1_2SS)

#define IEEE80211_HT_HAS_3SS_UEQM_MCS(mcsset) \
		((mcsset[IEEE80211_HT_MCSSET_20_40_UEQM1] &	\
			IEEE80211_HT_MCSSET_20_40_UEQM1_3SS) ||	\
		 (mcsset[IEEE80211_HT_MCSSET_20_40_UEQM2] &	\
			IEEE80211_HT_MCSSET_20_40_UEQM2_3SS) ||	\
		 (mcsset[IEEE80211_HT_MCSSET_20_40_UEQM3] &	\
			IEEE80211_HT_MCSSET_20_40_UEQM3_3SS))

#define IEEE80211_HT_HAS_4SS_UEQM_MCS(mcsset) \
		((mcsset[IEEE80211_HT_MCSSET_20_40_UEQM3] &	\
			IEEE80211_HT_MCSSET_20_40_UEQM3_4SS) ||	\
		 (mcsset[IEEE80211_HT_MCSSET_20_40_UEQM4] &	\
			IEEE80211_HT_MCSSET_20_40_UEQM4_4SS) ||	\
		 (mcsset[IEEE80211_HT_MCSSET_20_40_UEQM5] &	\
			IEEE80211_HT_MCSSET_20_40_UEQM5_4SS) ||	\
		 (mcsset[IEEE80211_HT_MCSSET_20_40_UEQM6] &	\
			IEEE80211_HT_MCSSET_20_40_UEQM6_4SS))

#define IEEE80211_HT_IS_1SS_NODE(mcsset) \
		((mcsset[IEEE80211_HT_MCSSET_20_40_NSS1] != 0) && \
		(mcsset[IEEE80211_HT_MCSSET_20_40_NSS2] == 0))

#define IEEE80211_HT_IS_2SS_NODE(mcsset) \
		((mcsset[IEEE80211_HT_MCSSET_20_40_NSS2] != 0) && \
		(mcsset[IEEE80211_HT_MCSSET_20_40_NSS3] == 0))

#define IEEE80211_HT_IS_3SS_NODE(mcsset) \
		((mcsset[IEEE80211_HT_MCSSET_20_40_NSS3] != 0) && \
		(mcsset[IEEE80211_HT_MCSSET_20_40_NSS4] == 0))

#define IEEE80211_HT_IS_4SS_NODE(mcsset) \
		(mcsset[IEEE80211_HT_MCSSET_20_40_NSS4] != 0)

/* B2-3 Maximum Tx spatial streams */
enum {
	IEEE80211_HTCAP_MCS_ONE_TX_SS,		/* One spatial stream */
	IEEE80211_HTCAP_MCS_TWO_TX_SS,		/* Two spatial streams */
	IEEE80211_HTCAP_MCS_THREE_TX_SS,	/* Three spatial streams */
	IEEE80211_HTCAP_MCS_FOUR_TX_SS		/* Four spatial streams */
};

/* B2-3 power save mode */
enum {
	IEEE80211_HTCAP_C_MIMOPWRSAVE_STATIC = 0,	/* No MIMO (static mode) */
	IEEE80211_HTCAP_C_MIMOPWRSAVE_DYNAMIC,		/* Precede MIMO with RTS */
	IEEE80211_HTCAP_C_MIMOPWRSAVE_NA,		/* Not applicable        */
	IEEE80211_HTCAP_C_MIMOPWRSAVE_NONE		/* No limitation on MIMO (SM power save disabled) */
};

/* B8-9 Rx STBC Mode */
enum {
	IEEE80211_HTCAP_C_RXSTBC_NONE,			/* No STBC SS */
	IEEE80211_HTCAP_C_RXSTBC_ONE_SS,		/* One STBC SS */
	IEEE80211_HTCAP_C_RXSTBC_TWO_SS,		/* Two STBC SS */
	IEEE80211_HTCAP_C_RXSTBC_THREE_SS		/* Three STBC SS */
};

/* B1-2 PCO transition time */
enum {
	IEEE80211_HTCAP_E_PCO_NONE,				/* No transition */
	IEEE80211_HTCAP_E_PCO_FOUR_HUNDRED_US,	/* 400 us */
	IEEE80211_HTCAP_E_PCO_ONE_HALF_MS,		/* 1.5 ms */
	IEEE80211_HTCAP_E_PCO_FIVE_MS			/* 5 ms */
};

/* B8-9 MCS feedback */
enum {
	IEEE80211_HTCAP_E_MCS_FB_NONE,			/* No feedback */
	IEEE80211_HTCAP_E_MCS_FB_NA,			/* Reserved */
	IEEE80211_HTCAP_E_MCS_FB_UNSOLICITED,	/* Unsolicited feedback only*/
	IEEE80211_HTCAP_E_MCS_FB_SOLICITED		/* Solicited and unsolicited feedback */
};

/* B6-7 Calibration */
enum {
	IEEE80211_HTCAP_B_CALIBRATION_NONE,			/* No support */
	IEEE80211_HTCAP_B_CALIBRATION_RESP_ONLY,	/* Response only */
	IEEE80211_HTCAP_B_CALIBRATION_NA,			/* Reserved */
	IEEE80211_HTCAP_B_CALIBRATION_REQ_RESP		/* Request and response */
};

/* B11-12 explicit CSI TxBF feedback, B13-14 explicit non compressed TxBF,
 * B15-16 explicit compressed TxBF
 */
enum {
	IEEE80211_HTCAP_B_CAPABLE_NONE,			/* No support */
	IEEE80211_HTCAP_B_CAPABLE_DELAYED,		/* delayed response only */
	IEEE80211_HTCAP_B_CAPABLE_IMMEDIATE,	/* immediate response only */
	IEEE80211_HTCAP_B_CAPABLE_BOTH			/* both delayed and immediate response */
};

/* B17-18 Grouping */
enum {
	IEEE80211_HTCAP_B_GROUPING_NONE,		/* No support */
	IEEE80211_HTCAP_B_GROUPING_ONE_TWO,		/* groups 1 and 2 */
	IEEE80211_HTCAP_B_GROUPING_ONE_FOUR,	/* groups 1 and 4 */
	IEEE80211_HTCAP_B_GROUPING_ONE_TWO_FOUR	/* groups 1, 2 and 4 */
};

/* B19-20 CSI number of beamforming antennas, B21-22 non compressed number of beamforming
 * antennas, B23-24 compressed number of beamforming antennas
 */
enum {
	IEEE80211_HTCAP_B_ANTENNAS_ONE,		/* Single antenna sounding */
	IEEE80211_HTCAP_B_ANTENNAS_TWO,		/* 2 antenna sounding */
	IEEE80211_HTCAP_B_ANTENNAS_THREE,	/* 3 antenna sounding */
	IEEE80211_HTCAP_B_ANTENNAS_FOUR		/* 4 antenna sounding */
};

/* B25-26 CSI Max number of beamformer rows */
enum {
	IEEE80211_HTCAP_B_CSI_ONE_ROW,
	IEEE80211_HTCAP_B_CSI_TWO_ROWS,
	IEEE80211_HTCAP_B_CSI_THREE_ROWS,
	IEEE80211_HTCAP_B_CSI_FOUR_ROWS
};

/* B27-28 channel estimation capability */
enum {
	IEEE80211_HTCAP_B_ST_STREAM_ONE,	/* one space time stream */
	IEEE80211_HTCAP_B_ST_STREAM_TWO,	/* two space time streams */
	IEEE80211_HTCAP_B_ST_STREAM_THREE,	/* three space time streams */
	IEEE80211_HTCAP_B_ST_STREAM_FOUR	/* four space time streams */
};

/* HT NSS */
enum ieee80211_ht_nss {
	IEEE80211_HT_NSS1 = 1,
	IEEE80211_HT_NSS2 = 2,
	IEEE80211_HT_NSS3 = 3,
	IEEE80211_HT_NSS4 = 4
};

/* HT capability macros */

/* get macros */
/* A-MPDU spacing  B2-B4 */
#define IEEE80211_HTCAP_MIN_AMPDU_SPACING(htcap) \
	(((htcap)->hc_ampdu & 0x1c) >> 2)
/* max RX A-MPDU length  B0-B1 */
#define IEEE80211_HTCAP_MAX_AMPDU_LEN(htcap) \
	(((htcap)->hc_ampdu & 0x03))
/* highest supported data rate, B0-B7 in set 10, B0-B1 in set 11 */
#define IEEE80211_HTCAP_HIGHEST_DATA_RATE(htcap) \
	(((htcap)->hc_mcsset[10]) | (((htcap)->hc_mcsset[11] & 0x3) << 8))
/* MCS parameters (all bits)*/
#define IEEE80211_HTCAP_MCS_PARAMS(htcap) \
	((htcap)->hc_mcsset[12] & 0x1F)
/* MCS maximum spatial streams, B2-B3 in set 12 */
#define IEEE80211_HTCAP_MCS_STREAMS(htcap) \
	(((htcap)->hc_mcsset[12] & 0xC) >> 2)
/* MCS set value (all bits) */
#define IEEE80211_HTCAP_MCS_VALUE(htcap,_set) \
	((htcap)->hc_mcsset[_set])
/* HT capabilities (all bits) */
#define IEEE80211_HTCAP_CAPABILITIES(htcap) \
	(((htcap)->hc_cap[0]) | ((htcap)->hc_cap[1] << 8))
/* B3-4 power save mode */
#define IEEE80211_HTCAP_PWRSAVE_MODE(htcap) \
	(((htcap)->hc_cap[0] & 0x0C) >> 2)
/* B8-9 Rx STBC MODE */
#define IEEE80211_HTCAP_RX_STBC_MODE(htcap) \
	((htcap)->hc_cap[1] & 0x3)
/* HT extended capabilities (all bits) */
#define IEEE80211_HTCAP_EXT_CAPABILITIES(htcap) \
	((htcap)->hc_extcap)
/* B1-2 PCO transition time */
#define IEEE80211_HTCAP_PCO_TRANSITION(htcap) \
	(((htcap)->hc_extcap & 0x6) >> 1)
/* B8-9 MCS feedback type */
#define IEEE80211_HTCAP_MCS_FEEDBACK_TYPE(htcap) \
	(((htcap)->hc_extcap & 0x300) >> 8)
/* HT TxBeamForming (bits 0-13) */
#define IEEE80211_HTCAP_TXBF_CAPABILITIES(htcap) \
	((htcap)->hc_txbf[0] | ((htcap)->hc_txbf[1] << 8))
/* HT TxBeamForming (bits 14-31) */
#define IEEE80211_HTCAP_TXBF_CAPABILITIES_EXTN(htcap) \
	((htcap)->hc_txbf[2] | ((htcap)->hc_txbf[3] << 8))
/* B6-7 Calibration */
#define IEEE80211_HTCAP_CALIBRATION(htcap) \
	(((htcap)->hc_txbf[0] & 0xC0) >> 6)
/* B11-12 explicit CSI TxBF feedback*/
#define IEEE80211_HTCAP_EXP_CSI_TXBF(htcap) \
	(((htcap)->hc_txbf[1] & 0x18) >> 3)
/* B13-14 explicit non compressed TxBF */
#define IEEE80211_HTCAP_EXP_NCOMP_TXBF(htcap) \
	(((htcap)->hc_txbf[1] & 0x60) >> 5)
/* B15-16 explicit compressed TxBF */
#define IEEE80211_HTCAP_EXP_COMP_TXBF(htcap) \
	((((htcap)->hc_txbf[1] & 0x80) >> 7) | (((htcap)->hc_txbf[2] & 0x01) << 1))
/* B17-18 Grouping */
#define IEEE80211_HTCAP_GROUPING(htcap) \
	(((htcap)->hc_txbf[2] & 0x6) >> 1)
/* B19-20 CSI number of beamforming antennas */
#define IEEE80211_HTCAP_CSI_NUM_BF(htcap) \
	(((htcap)->hc_txbf[2] & 0x18) >> 3)
/* B21-22 non compressed number of beamforming antennas */
#define IEEE80211_HTCAP_NCOM_NUM_BF(htcap) \
	(((htcap)->hc_txbf[2] & 0x60) >> 5)
/* B23-24 compressed number of beamforming antennas */
#define IEEE80211_HTCAP_COMP_NUM_BF(htcap) \
	((((htcap)->hc_txbf[2] & 0x80) >> 7) | (((htcap)->hc_txbf[3] & 0x01) << 1))
/* B25-26 CSI Max number of beamformer rows */
#define IEEE80211_HTCAP_CSI_BF_ROWS(htcap) \
	(((htcap)->hc_txbf[3] & 0x6) >> 1)
/* B27-28 channel estimation capability */
#define IEEE80211_HTCAP_CHAN_EST(htcap) \
	(((htcap)->hc_txbf[3] & 0x18) >> 3)

/* set macros */
/* A-MPDU spacing  B2-B4 */
#define IEEE80211_HTCAP_SET_AMPDU_SPACING(htcap,_d) \
	((htcap)->hc_ampdu = (((htcap)->hc_ampdu & ~0x1c)  | ((_d) << 2)))
/* max RX A-MPDU length  B0-B1 */
#define IEEE80211_HTCAP_SET_AMPDU_LEN(htcap,_f)	\
	((htcap)->hc_ampdu = (((htcap)->hc_ampdu & ~0x03)  | (_f)))
/* highest supported data rate, B0-B7 in set 10, B0-B1 in set 11) */
#define IEEE80211_HTCAP_SET_HIGHEST_DATA_RATE(htcap,_r) \
	((htcap)->hc_mcsset[10] = ((_r) & 0xFF)); \
	((htcap)->hc_mcsset[11] = ((_r) & 0x3FF) >> 8)
/* MCS set parameters (all bits) */
#define IEEE80211_HTCAP_SET_MCS_PARAMS(htcap,_p) \
	((htcap)->hc_mcsset[12] = (_p & 0x1F))
/* MCS maximum spatial streams, B2-B3 in set 12 */
#define IEEE80211_HTCAP_SET_MCS_STREAMS(htcap,_s) \
	((htcap)->hc_mcsset[12] = ((htcap)->hc_mcsset[12] & ~0xC)| (_s << 2))
/* MCS set value (all bits) */
#define IEEE80211_HTCAP_SET_MCS_VALUE(htcap,_set,_value) \
	((htcap)->hc_mcsset[_set] = (_value & 0xFF))
/* HT capabilities (all bits) */
#define IEEE80211_HTCAP_SET_CAPABILITIES(htcap,_cap) \
	(htcap)->hc_cap[0] = (_cap & 0x00FF); \
	(htcap)->hc_cap[1] = ((_cap & 0xFF00) >> 8)
/* B2-B3 power save mode */
#define IEEE80211_HTCAP_SET_PWRSAVE_MODE(htcap,_m) \
	((htcap)->hc_cap[0] = (((htcap)->hc_cap[0] & ~0xC) | ((_m) << 2)))
/* B8-9 Rx STBC MODE */
#define IEEE80211_HTCAP_SET_RX_STBC_MODE(htcap,_m) \
	((htcap)->hc_cap[1] = (((htcap)->hc_cap[1] & ~0x3) | (_m) ))
/* HT extended capabilities (all bits) */
#define IEEE80211_HTCAP_SET_EXT_CAPABILITIES(htcap,_cap) \
	((htcap)->hc_extcap = (_cap & 0xFFFF))
/* B1-2 PCO transition time */
#define IEEE80211_HTCAP_SET_PCO_TRANSITION(htcap,_t) \
	((htcap)->hc_extcap = (((htcap)->hc_extcap & ~0x6) | ((_t) << 1)))
/* B8-9 MCS feedback type */
#define IEEE80211_HTCAP_SET_MCS_FEEDBACK_TYPE(htcap,_t) \
	((htcap)->hc_extcap = (((htcap)->hc_extcap & ~0x300) | ((_t) << 8)))
/* HT TxBeamForming (all bits ) */
#define IEEE80211_HTCAP_SET_TXBF_CAPABILITIES(htcap,_cap) \
	(htcap)->hc_txbf[0] = ((_cap) & 0x00FF); \
	(htcap)->hc_txbf[1] = (((_cap) & 0xFF00) >> 8)
/* B6-7 Calibration */
#define IEEE80211_HTCAP_SET_CALIBRATION(htcap,_t) \
	((htcap)->hc_txbf[0] = (((htcap)->hc_txbf[0] & ~0xC0) | ((_t) << 6)))
/* B11-12 explicit CSI TxBF feedback*/
#define IEEE80211_HTCAP_SET_EXP_CSI_TXBF(htcap,_t) \
	((htcap)->hc_txbf[1] = (((htcap)->hc_txbf[1] & ~0x18) | ((_t) << 3)))
/* B13-14 explicit non compressed TxBF */
#define IEEE80211_HTCAP_SET_EXP_NCOMP_TXBF(htcap,_t) \
	((htcap)->hc_txbf[1] = (((htcap)->hc_txbf[1] & ~0x60) | ((_t) << 5)))
/* B15-16 explicit compressed TxBF */
#define IEEE80211_HTCAP_SET_EXP_COMP_TXBF(htcap,_t) \
	(htcap)->hc_txbf[1] = (((htcap)->hc_txbf[1] & ~0x80) | ((((_t) & 0x01) << 7))); \
	(htcap)->hc_txbf[2] = (((htcap)->hc_txbf[2] & ~0x01) | ((_t) >> 1))
/* B17-18 Grouping */
#define IEEE80211_HTCAP_SET_GROUPING(htcap,_t) \
	((htcap)->hc_txbf[2] = (((htcap)->hc_txbf[2] & ~0x6) | ((_t) << 1)))
/* B19-20 CSI number of beamforming antennas */
#define IEEE80211_HTCAP_SET_CSI_NUM_BF(htcap,_t) \
	((htcap)->hc_txbf[2] = (((htcap)->hc_txbf[2] & ~0x18) | ((_t) << 3)))
/* B21-22 non compressed number of beamforming antennas */
#define IEEE80211_HTCAP_SET_NCOMP_NUM_BF(htcap,_t) \
	((htcap)->hc_txbf[2] = (((htcap)->hc_txbf[2] & ~0x60) | ((_t) << 5)))
/* B23-24 compressed number of beamforming antennas */
#define IEEE80211_HTCAP_SET_COMP_NUM_BF(htcap,_t) \
	(htcap)->hc_txbf[2] = (((htcap)->hc_txbf[2] & ~0x80) | (((_t) & 0x01) << 7)); \
	(htcap)->hc_txbf[3] = (((htcap)->hc_txbf[3] & ~0x01) | ((_t) >> 1))
/* B25-26 CSI Max number of beamformer rows */
#define IEEE80211_HTCAP_SET_CSI_BF_ROWS(htcap,_t) \
	((htcap)->hc_txbf[3] = (((htcap)->hc_txbf[3] & ~0x6) | ((_t) << 1)))
/* B27-28 channel estimation capability */
#define IEEE80211_HTCAP_SET_CHAN_EST(htcap,_t) \
	((htcap)->hc_txbf[3] = (((htcap)->hc_txbf[3] & ~0x18) | ((_t) << 3)))

/*
 * 802.11n HT Information IE
 */
struct ieee80211_ie_htinfo {
	uint8_t	hi_id;			/* element ID */
	uint8_t	hi_len;			/* length in bytes */
	uint8_t	hi_ctrlchannel;	/* control channel */
	uint8_t	hi_byte1;		/* ht ie byte 1 */
	uint8_t	hi_byte2;		/* ht ie byte 2 */
	uint8_t	hi_byte3;		/* ht ie byte 3 */
	uint8_t	hi_byte4;		/* ht ie byte 4 */
	uint8_t	hi_byte5;		/* ht ie byte 5 */
	uint8_t	hi_basicmcsset[16];	/* basic MCS set */
} __packed;

#define	IEEE80211_HTINFO_CHOFF_SCN			0
#define	IEEE80211_HTINFO_CHOFF_SCA			1
#define	IEEE80211_HTINFO_CHOFF_SCB			3

#define IEEE80211_HTINFO_B1_SEC_CHAN_OFFSET		0x03
#define IEEE80211_HTINFO_B1_REC_TXCHWIDTH_40		0x04
#define IEEE80211_HTINFO_B1_RIFS_MODE			0x08
#define IEEE80211_HTINFO_B1_CONTROLLED_ACCESS		0x10
#define IEEE80211_HTINFO_B2_NON_GF_PRESENT		0x04
#define IEEE80211_HTINFO_B2_OBSS_PROT			0x10
#define IEEE80211_HTINFO_B4_DUAL_BEACON			0x40
#define IEEE80211_HTINFO_B4_DUAL_CTS			0x80
#define IEEE80211_HTINFO_B5_STBC_BEACON			0x01
#define IEEE80211_HTINFO_B5_LSIGTXOPPROT		0x02
#define IEEE80211_HTINFO_B5_PCO_ACTIVE			0x04
#define IEEE80211_HTINFO_B5_40MHZPHASE			0x08

/* get macros */
/* control channel (all bits) */
#define IEEE80211_HTINFO_PRIMARY_CHANNEL(htie) \
	(htie->hi_ctrlchannel)
/* byte 1 (all bits) */
#define IEEE80211_HTINFO_BYTE_ONE(htie) \
	(htie->hi_byte1)
/* byte 2 (all bits) */
#define IEEE80211_HTINFO_BYTE_TWO(htie) \
	(htie->hi_byte2)
/* byte 3 (all bits) */
#define IEEE80211_HTINFO_BYTE_THREE(htie) \
	(htie->hi_byte3)
/* byte 4 (all bits) */
#define IEEE80211_HTINFO_BYTE_FOUR(htie) \
	(htie->hi_byte4)
/* byte 5 (all bits) */
#define IEEE80211_HTINFO_BYTE_FIVE(htie) \
	(htie->hi_byte5)
/* B5-B7, byte 1 */
#define IEEE80211_HTINFO_B1_SIGRANULARITY(htie) \
	(((htie)->hi_byte1 & 0xe0) >> 5)
/* B0-B1, byte 1 */
#define IEEE80211_HTINFO_B1_EXT_CHOFFSET(htie) \
	(((htie)->hi_byte1 & 0x3))
/* B0-B1, byte 2 */
#define IEEE80211_HTINFO_B2_OP_MODE(htie) \
	(((htie)->hi_byte2 & 0x3))
/* MCS set value (all bits) */
#define IEEE80211_HTINFO_BASIC_MCS_VALUE(htie,_set) \
	((htie)->hi_basicmcsset[_set])

/* set macros */
/* control channel (all bits) */
#define IEEE80211_HTINFO_SET_PRIMARY_CHANNEL(htie,_c) \
	(htie->hi_ctrlchannel = _c)
/* byte 1 (all bits) */
#define IEEE80211_HTINFO_SET_BYTE_ONE(htie,_b) \
	(htie->hi_byte1 = _b)
/* byte 2 (all bits) */
#define IEEE80211_HTINFO_SET_BYTE_TWO(htie,_b) \
	(htie->hi_byte2 = _b)
/* byte 3 (all bits) */
#define IEEE80211_HTINFO_SET_BYTE_THREE(htie,_b) \
	(htie->hi_byte3 = _b)
/* byte 4 (all bits) */
#define IEEE80211_HTINFO_SET_BYTE_FOUR(htie,_b) \
	(htie->hi_byte4 = _b)
/* byte 5 (all bits) */
#define IEEE80211_HTINFO_SET_BYTE_FIVE(htie,_b) \
	(htie->hi_byte5 = _b)
/* B5-B7, byte 1 */
#define IEEE80211_HTINFO_B1_SET_SIGRANULARITY(htie,_g)			\
	((htie)->hi_byte1 = (((htie)->hi_byte1 & ~0xe0)  |((_g) << 5) ))
/* B0-B1, byte 1 */
#define IEEE80211_HTINFO_B1_SET_EXT_CHOFFSET(htie,_off)					\
	((htie)->hi_byte1 = (((htie)->hi_byte1 & ~0x03)  |(_off)))
/* B0-B1, byte 2 */
#define IEEE80211_HTINFO_B2_SET_OP_MODE(htie,_m)									\
	((htie)->hi_byte2 = (((htie)->hi_byte2 & ~0x3) | ((_m) )))
/* Basic MCS set value (all bits) */
#define IEEE80211_HTINFO_SET_BASIC_MCS_VALUE(htie,_set,_value) \
	((htie)->hi_basicmcsset[_set] = (_value & 0xFF))


/* extension channel offset (2 bit signed number) */
enum {
	IEEE80211_HTINFO_EXTOFFSET_NA	 = 0,	/* 0  no extension channel is present */
	IEEE80211_HTINFO_EXTOFFSET_ABOVE = 1,   /* +1 extension channel above control channel */
	IEEE80211_HTINFO_EXTOFFSET_UNDEF = 2,   /* -2 undefined */
	IEEE80211_HTINFO_EXTOFFSET_BELOW = 3	/* -1 extension channel below control channel*/
};

/* operating mode */
enum {
	IEEE80211_HTINFO_OPMODE_NO_PROT,			/* no protection */
	IEEE80211_HTINFO_OPMODE_HT_PROT_NON_MEM,	/* protection required (Legacy device present in other BSS) */
	IEEE80211_HTINFO_OPMODE_HT_PROT_20_ONLY,	/* protection required ( One 20 MHZ only HT device is present in 20/40 BSS) */
	IEEE80211_HTINFO_OPMODE_HT_PROT_MIXED,		/* protection required (Legacy device is present in this BSS) */
};

/* signal granularity */
enum {
	IEEE80211_HTINFO_SIGRANULARITY_5,	/* 5 ms */
	IEEE80211_HTINFO_SIGRANULARITY_10,	/* 10 ms */
	IEEE80211_HTINFO_SIGRANULARITY_15,	/* 15 ms */
	IEEE80211_HTINFO_SIGRANULARITY_20,	/* 20 ms */
	IEEE80211_HTINFO_SIGRANULARITY_25,	/* 25 ms */
	IEEE80211_HTINFO_SIGRANULARITY_30,	/* 30 ms */
	IEEE80211_HTINFO_SIGRANULARITY_35,	/* 35 ms */
	IEEE80211_HTINFO_SIGRANULARITY_40,	/* 40 ms */
};

/*
 * Management information element payloads.
 */

enum {
	IEEE80211_ELEMID_SSID		= 0,
	IEEE80211_ELEMID_RATES		= 1,
	IEEE80211_ELEMID_FHPARMS	= 2,
	IEEE80211_ELEMID_DSPARMS	= 3,
	IEEE80211_ELEMID_CFPARMS	= 4,
	IEEE80211_ELEMID_TIM		= 5,
	IEEE80211_ELEMID_IBSSPARMS	= 6,
	IEEE80211_ELEMID_COUNTRY	= 7,
	IEEE80211_ELEMID_REQINFO	= 10,
	IEEE80211_ELEMID_BSS_LOAD	= 11,
	IEEE80211_ELEMID_EDCA		= 12,
	IEEE80211_ELEMID_CHALLENGE	= 16,
	/* 17-31 reserved for challenge text extension */
	IEEE80211_ELEMID_PWRCNSTR	= 32,
	IEEE80211_ELEMID_PWRCAP		= 33,
	IEEE80211_ELEMID_TPCREQ		= 34,
	IEEE80211_ELEMID_TPCREP		= 35,
	IEEE80211_ELEMID_SUPPCHAN	= 36,
	IEEE80211_ELEMID_CHANSWITCHANN	= 37,
	IEEE80211_ELEMID_MEASREQ	= 38,
	IEEE80211_ELEMID_MEASREP	= 39,
	IEEE80211_ELEMID_QUIET		= 40,
	IEEE80211_ELEMID_IBSSDFS	= 41,
	IEEE80211_ELEMID_ERP		= 42,
	IEEE80211_ELEMID_HTCAP		= 45,
	IEEE80211_ELEMID_QOSCAP		= 46,
	IEEE80211_ELEMID_RSN		= 48,
	IEEE80211_ELEMID_XRATES		= 50,
	IEEE80211_ELEMID_NEIGHBOR_REP	= 52,
	IEEE80211_ELEMID_MOBILITY_DOMAIN = 54,
	IEEE80211_ELEMID_FTIE		= 55,
	IEEE80211_ELEMID_TIMEOUT_INT	= 56,
	IEEE80211_ELEMID_REG_CLASSES	= 59,
	IEEE80211_ELEMID_HTINFO		= 61,
	IEEE80211_ELEMID_SEC_CHAN_OFF	= 62,	/* Secondary Channel Offset */
	IEEE80211_ELEMID_RRM_ENABLED	= 70,	/* RM enabled capabilities */
	IEEE80211_ELEMID_20_40_BSS_COEX = 72,	/* 20/40 BSS Coexistence */
	IEEE80211_ELEMID_20_40_IT_CH_REP   = 73,  /* 20/40 BSS Intolerant channel report */
	IEEE80211_ELEMID_OBSS_SCAN	   = 74,   /* Overlapping BSS scan parameter  */
	IEEE80211_ELEMID_TDLS_LINK_ID	   = 101, /* TDLS Link Identifier */
	IEEE80211_ELEMID_TDLS_WKUP_SCHED   = 102, /* TDLS Wakeup Schedule */
	IEEE80211_ELEMID_TDLS_CS_TIMING    = 104, /* TDLS Channel Switch Timing */
	IEEE80211_ELEMID_TDLS_PTI_CTRL	   = 105, /* TDLS PTI Control */
	IEEE80211_ELEMID_TDLS_PU_BUF_STAT  = 106, /* TDLS PU Buffer Status */
	IEEE80211_ELEMID_INTERWORKING	= 107,
	IEEE80211_ELEMID_EXTCAP		= 127,
	/* 128-129 proprietary elements used by Agere chipsets */
	IEEE80211_ELEMID_AGERE1		= 128,
	IEEE80211_ELEMID_AGERE2		= 129,
	IEEE80211_ELEMID_TPC		= 150,
	IEEE80211_ELEMID_CCKM		= 156,
	/* 191-199 Table 8-54-Element IDs in Std 802.11ac-2013 */
	IEEE80211_ELEMID_VHTCAP		= 191,
	IEEE80211_ELEMID_VHTOP		= 192,
	IEEE80211_ELEMID_EXTBSSLOAD	= 193,
	IEEE80211_ELEMID_WBWCHANSWITCH	= 194,
	IEEE80211_ELEMID_VHTXMTPWRENVLP	= 195,
	IEEE80211_ELEMID_CHANSWITCHWRP	= 196,
	IEEE80211_ELEMID_AID		= 197,
	IEEE80211_ELEMID_QUIETCHAN	= 198,
	IEEE80211_ELEMID_OPMOD_NOTIF	= 199,
	/* Vendor Specific */
	IEEE80211_ELEMID_VENDOR		= 221,	/* vendor private */
};

#define IEEE80211_2040BSSCOEX_INFO_REQ	0x01
#define IEEE80211_2040BSSCOEX_40_intol	0x02
#define IEEE80211_2040BSSCOEX_20_REQ	0x04
#define IEEE80211_2040BSSCOEX_SCAN_EXEP_REQ	0x08
#define IEEE80211_2040BSSCOEX_SCAN_EXEP_GRA	0x10

#define IEEE80211_CHANSWITCHANN_BYTES 5
#define QTN_CHANSWITCHANN_TSF_BYTES 10
#define IEEE80211_CSA_LEN	7
#define IEEE80211_CSA_TSF_LEN	(IEEE80211_CSA_LEN + 10)
#define IEEE80211_SEC_CHAN_OFF_IE_LEN 3
#define IEEE80211_WBAND_CHANSWITCH_IE_LEN 5
#define IEEE80211_NCW_ACT_LEN   3      /* Notify Channel Width Action size */
#define IEEE80211_MU_GRP_ID_ACT_LEN 26 /* MU grp id mgmt action size */

#define IEEE80211_NODE_IDX_UNMAP(x)	(BR_SUBPORT_UNMAP(x))
#define IEEE80211_NODE_IDX_MAP(x)	(BR_SUBPORT_MAP(x))
#define IEEE80211_NODE_IDX_VALID(x)	((x) & 0x8000)
#define IEEE80211_NODE_IDX_INVALID(x)	(!IEEE80211_NODE_IDX_VALID(x))

/*
 * The 802.11 spec says at most 2007 stations may be
 * associated at once.  For most AP's this is way more
 * than is feasible so we use a default of 128.  This
 * number may be overridden by the driver and/or by
 * user configuration.
 */
#define	IEEE80211_AID_MAX		2007
#define	IEEE80211_AID_DEF		128

#define	IEEE80211_AID(b)	((b) &~ 0xc000)

struct ieee80211_tim_ie {
	uint8_t	tim_ie;			/* IEEE80211_ELEMID_TIM */
	uint8_t	tim_len;
	uint8_t	tim_count;		/* DTIM count */
	uint8_t	tim_period;		/* DTIM period */
	uint8_t	tim_bitctl;		/* bitmap control */
	uint8_t	tim_bitmap[IEEE80211_AID_DEF / NBBY];		/* variable-length bitmap */
} __packed;

struct ieee80211_ie_sec_chan_off {
	uint8_t	sco_id;			/* IEEE80211_ELEMID_SEC_CHAN_OFF */
	uint8_t	sco_len;
	uint8_t	sco_off;		/* offset */
} __packed;

struct ieee80211_country_ie {
	uint8_t	ie;			/* IEEE80211_ELEMID_COUNTRY */
	uint8_t	len;
	uint8_t	cc[3];			/* ISO CC+(I)ndoor/(O)utdoor */
	struct {
		uint8_t schan;			/* starting channel */
		uint8_t nchan;			/* number channels */
		uint8_t maxtxpwr;		/* tx power cap */
	} __packed band[4];			/* up to 4 sub bands */
} __packed;

#define IEEE80211_CHALLENGE_LEN		128

#define IEEE80211_SUPPCHAN_LEN		52

#define	IEEE80211_RATE_BASIC		0x80
#define	IEEE80211_RATE_VAL			0x7f
#define IEEE80211_BSS_MEMBERSHIP_SELECTOR_HT_PHY 0x7F

/* EPR information element flags */
#define	IEEE80211_ERP_NON_ERP_PRESENT	0x01
#define	IEEE80211_ERP_USE_PROTECTION	0x02
#define	IEEE80211_ERP_LONG_PREAMBLE	0x04

/* Atheros private advanced capabilities info */
#define	ATHEROS_CAP_TURBO_PRIME		0x01
#define	ATHEROS_CAP_COMPRESSION		0x02
#define	ATHEROS_CAP_FAST_FRAME		0x04
/* bits 3-6 reserved */
#define	ATHEROS_CAP_BOOST		0x80

#define IEEE80211_OUI_LEN	3

#define	ATH_OUI			0x7f0300	/* Atheros OUI */
#define	ATH_OUI_TYPE		0x01
#define	ATH_OUI_SUBTYPE		0x01
#define ATH_OUI_VERSION		0x00
#define	ATH_OUI_TYPE_XR		0x03
#define	ATH_OUI_VER_XR		0x01

#define	QTN_OUI			0x862600	/* Quantenna OUI */
#define	QTN_OUI_CFG		0x01
#define QTN_OUI_PAIRING		0x02		/* Pairing Protection */
#define	QTN_OUI_VSP_CTRL	0x03		/* VSP configuration */
#define	QTN_OUI_TDLS_BRMACS	0x04		/* TDLS */
#define QTN_OUI_TDLS		0x05		/* TDLS Information */
#define	QTN_OUI_RM_SPCIAL	0x10		/* Radio measurement special group */
#define	QTN_OUI_RM_ALL		0x11		/* Radio measurement all group */
#define QTN_OUI_SCS             0x12            /* SCS status report and control */
#define QTN_OUI_QWME            0x13            /* WME IE between QSTA */
#define QTN_OUI_EXTENDER_ROLE	0x14		/* WDS Extender Role */
#define QTN_OUI_EXTENDER_BSSID	0x15		/* Extender BSSID */
#define QTN_OUI_EXTENDER_STATE	0x16		/* Extender specific states */
#define QTN_OUI_OCAC_STATE	0x17		/* APs OCAC state - NONE, BACKOFF or ONGOING */

#define QTN_OUI_EXTENDER_ROLE_NONE	0x00	/* NONE Role */
#define QTN_OUI_EXTENDER_ROLE_MBS	0x01	/* MBS Role */
#define QTN_OUI_EXTENDER_ROLE_RBS	0x02	/* RBS Role */

#define QTN_QWME_IE_VERSION	1

#define	WPA_OUI			0xf25000
#define	WPA_RSN_OUI_TYPE	0x01
#define	WSC_OUI_TYPE		0x04
#define	WPA_VERSION		1		/* current supported version */

#define	WPA_CSE_NULL		0x00
#define	WPA_CSE_WEP40		0x01
#define	WPA_CSE_TKIP		0x02
#define	WPA_CSE_CCMP		0x04
#define	WPA_CSE_WEP104		0x05
#define	RSN_CSE_GROUP_NOT_ALLOW 0x07  /* Group addressed traffic not allowed */

#define	WPA_ASE_NONE		0x00
#define	WPA_ASE_8021X_UNSPEC	0x01
#define	WPA_ASE_8021X_PSK	0x02
#define	IEEE80211_RSN_ASE_TPK	0x07  /* TDLS TPK Handshake */

#define	RSN_OUI			0xac0f00
#define	RSN_VERSION		1		/* current supported version */

#define WFA_OUI			0x9A6F50
#define WFA_TYPE_OSEN		0x12
#define WFA_AKM_TYPE_OSEN	0x1

#define	BCM_OUI			0x4C9000	/* Apple Products */
#define	BCM_OUI_TYPE		0x01
#define BCM_OUI_VHT_TYPE	0x0804

#define	BCM_OUI_2		0x181000	/* iPad */
#define	BCM_OUI_2_TYPE		0x02


#define	RSN_CSE_NULL		0x00
#define	RSN_CSE_WEP40		0x01
#define	RSN_CSE_TKIP		0x02
#define	RSN_CSE_WRAP		0x03
#define	RSN_CSE_CCMP		0x04
#define	RSN_CSE_WEP104		0x05
#define	RSN_CSE_BIP		0x06

#define	RSN_ASE_NONE		0x00
#define	RSN_ASE_8021X_UNSPEC	0x01
#define	RSN_ASE_8021X_PSK	0x02
#define RSN_ASE_FT_8021X	0x03
#define RSN_ASE_FT_PSK		0x04
#define	RSN_ASE_8021X_SHA256	0x05
#define	RSN_ASE_8021X_PSK_SHA256 0x06

#define	RSN_CAP_PREAUTH		0x01
#define	RSN_CAP_MFP_REQ		0x0040
#define	RSN_CAP_MFP_CAP		0x0080
#define	RSN_CAP_SPP_CAP		0x0400
#define	RSN_CAP_SPP_REQ		0x0800

#define RSN_IS_MFP(_rsn_caps) (((_rsn_caps) & RSN_CAP_MFP_REQ) || ((_rsn_caps) & RSN_CAP_MFP_CAP))

#define	WME_OUI			0xf25000
#define	WME_OUI_TYPE		0x02
#define	WME_INFO_OUI_SUBTYPE	0x00
#define	WME_PARAM_OUI_SUBTYPE	0x01
#define	WME_VERSION		1
#define	WME_UAPSD_MASK		0x0f

#define RLNK_OUI		0x430C00	/* Ralink OUI */

#define RTK_OUI			0x4ce000	/* Realtek OUI */
#define EDIMAX_OUI		0x021f80	/* Edimax OUI */

#define PEER_VENDOR_NONE	0x00
#define PEER_VENDOR_QTN		0x01
#define PEER_VENDOR_BRCM	0x02
#define PEER_VENDOR_ATH		0x04
#define PEER_VENDOR_RLNK	0x08
#define PEER_VENDOR_RTK		0x10
#define PEER_VENDOR_INTEL	0x20

#define PEER_VENDOR_MASK	(PEER_VENDOR_BRCM | PEER_VENDOR_ATH | PEER_VENDOR_RLNK \
				| PEER_VENDOR_RTK | PEER_VENDOR_INTEL)

/*
 * 802.11ac VHT Capabilities element
 */
struct ieee80211_ie_vhtcap {
	u_int8_t	vht_id;			/* element ID */
	u_int8_t	vht_len;		/* length in bytes */
	u_int8_t	vht_cap[4];		/* VHT capabilities info */
	u_int8_t	vht_mcs_nss_set[8];	/* supported MSC and NSS set */
} __packed;

/* VHT capabilities flags */
#define IEEE80211_VHTCAP_C_CHWIDTH			0x0000000C
#define IEEE80211_VHTCAP_C_RX_LDPC			0x00000010
#define IEEE80211_VHTCAP_C_SHORT_GI_80			0x00000020
#define IEEE80211_VHTCAP_C_SHORT_GI_160			0x00000040
#define IEEE80211_VHTCAP_C_TX_STBC			0x00000080
#define IEEE80211_VHTCAP_C_SU_BEAM_FORMER_CAP		0x00000800
#define IEEE80211_VHTCAP_C_SU_BEAM_FORMEE_CAP		0x00001000
#define IEEE80211_VHTCAP_C_MU_BEAM_FORMER_CAP		0x00080000
#define IEEE80211_VHTCAP_C_MU_BEAM_FORMEE_CAP		0x00100000
#define IEEE80211_VHTCAP_C_VHT_TXOP_PS			0x00200000
#define IEEE80211_VHTCAP_C_PLUS_HTC_MINUS_VHT_CAP	0x00400000
#define IEEE80211_VHTCAP_C_RX_ATN_PATTERN_CONSISTNCY	0x10000000
#define IEEE80211_VHTCAP_C_TX_ATN_PATTERN_CONSISTNCY	0x20000000

#define IEEE80211_VHTCAP_C_MU_BEAM_FORMXX_CAP_MASK	(IEEE80211_VHTCAP_C_MU_BEAM_FORMER_CAP | \
							 IEEE80211_VHTCAP_C_MU_BEAM_FORMEE_CAP)

/* VHT mcs info extras */
#define IEEE80211_VHTCAP_MCS_MAX			8
#define IEEE80211_VHTCAP_MCS_DISABLED			0x03

/* VHT capability macro */
/* get macros */
/* VHT capabilities (all bits) */
#define IEEE80211_VHTCAP_GET_CAPFLAGS(vhtcap) \
	(u_int32_t)((vhtcap)->vht_cap[0] | \
	((vhtcap)->vht_cap[1] << 8) | \
	((vhtcap)->vht_cap[2] << 16) | \
	((vhtcap)->vht_cap[3] << 24))

/* B0-1 Max. MPDU Length */
#define IEEE80211_VHTCAP_GET_MAXMPDU(vhtcap) \
	(enum ieee80211_vht_maxmpdu)((vhtcap)->vht_cap[0] & 0x03)

/* B2-3 Supported channel width */
#define IEEE80211_VHTCAP_GET_CHANWIDTH(vhtcap) \
	(enum ieee80211_vht_chanwidth)(((vhtcap)->vht_cap[0] & 0x0C) >> 2)

/* B4 RX LDPC support */
#define IEEE80211_VHTCAP_GET_RXLDPC(vhtcap) \
	(((vhtcap)->vht_cap[0] & 0x10) >> 4)

/* B5 Short GI for 80MHz support */
#define IEEE80211_VHTCAP_GET_SGI_80MHZ(vhtcap) \
	(((vhtcap)->vht_cap[0] & 0x20) >> 5)

/* B6 Short GI for 160MHz support */
#define IEEE80211_VHTCAP_GET_SGI_160MHZ(vhtcap) \
	(((vhtcap)->vht_cap[0] & 0x40) >> 6)

/* B7 TX STBC */
#define IEEE80211_VHTCAP_GET_TXSTBC(vhtcap) \
	(((vhtcap)->vht_cap[0] & 0x80) >> 7)

/* B8-10 RX STBC */
#define IEEE80211_VHTCAP_GET_RXSTBC(vhtcap) \
	(enum ieee80211_vht_rxstbc)((vhtcap)->vht_cap[1] & 0x07)

/* B11 SU Beam-former */
#define IEEE80211_VHTCAP_GET_SU_BEAMFORMER(vhtcap) \
	(((vhtcap)->vht_cap[1] & 0x08) >> 3)

/* B12 SU Beam-formee */
#define IEEE80211_VHTCAP_GET_SU_BEAMFORMEE(vhtcap) \
	(((vhtcap)->vht_cap[1] & 0x10) >> 4)

/* B13-15 Beamformee STS capability */
#define IEEE80211_VHTCAP_GET_BFSTSCAP(vhtcap) \
	(u_int8_t)(((vhtcap)->vht_cap[1] & 0xE0) >> 5)

/* B16-18 Number of sounding Dimensions */
#define IEEE80211_VHTCAP_GET_NUMSOUND(vhtcap) \
	(u_int8_t)((vhtcap)->vht_cap[2] & 0x07)

/* B19 MU Beam-formee VHT capability */
#define IEEE80211_VHTCAP_GET_MU_BEAMFORMER(vhtcap) \
	(((vhtcap)->vht_cap[2] & 0x08) >> 3)

/* B20 MU Beam-former VHT capability */
#define IEEE80211_VHTCAP_GET_MU_BEAMFORMEE(vhtcap) \
	(((vhtcap)->vht_cap[2] & 0x10) >> 4)

/* B22 VHT variant HT control field */
#define IEEE80211_VHTCAP_GET_HTC_VHT(vhtcap) \
	(((vhtcap)->vht_cap[2] & 0x40) >> 6)

/* B23-25 Max. A-MPDU Length Exponent */
#define IEEE80211_VHTCAP_GET_MAXAMPDUEXP(vhtcap) \
	(enum ieee80211_vht_maxampduexp)((((vhtcap)->vht_cap[2] & 0x80) >> 7) | \
	(((vhtcap)->vht_cap[3] & 0x03) << 1))

/* B26-27 VHT Link Adaptation capable */
#define IEEE80211_VHTCAP_GET_LNKADPTCAP(vhtcap) \
	(enum ieee80211_vht_lnkadptcap)(((vhtcap)->vht_cap[3] & 0x0C) >> 2)

/* B28 Rx Antenna pattern consistency */
#define IEEE80211_VHTCAP_GET_RXANTPAT(vhtcap) \
	(((vhtcap)->vht_cap[3] & 0x10) >> 4)

/* B29 Tx Antenna pattern consistency */
#define IEEE80211_VHTCAP_GET_TXANTPAT(vhtcap) \
	(((vhtcap)->vht_cap[3] & 0x20) >> 5)

/* B0-B15 RX VHT-MCS MAP for Spatial streams 1-8 */
#define IEEE80211_VHTCAP_GET_RX_MCS_NSS(vhtcap) \
	(((vhtcap)->vht_mcs_nss_set[1] << 8) | \
	((vhtcap)->vht_mcs_nss_set[0]))

/* B32-B47 TX VHT-MCS MAP for Spatial streams 1-8 */
#define IEEE80211_VHTCAP_GET_TX_MCS_NSS(vhtcap) \
	(((vhtcap)->vht_mcs_nss_set[5] << 8) | \
	((vhtcap)->vht_mcs_nss_set[4]))

/* VHT-MCS MAP entry for RX or TX MAP */
#define IEEE80211_VHTCAP_GET_MCS_MAP_ENTRY(mcsmap, idx) \
	((mcsmap >> (idx * 2)) & 0x3)

/* B16-B28 RX Highest supported Long GI data rates */
#define IEEE80211_VHTCAP_GET_RX_LGIMAXRATE(vhtcap) \
	(u_int16_t)(((vhtcap)->vht_mcs_nss_set[2]) | \
	((vhtcap)->vht_mcs_nss_set[3] << 8))

/* B48-B60 TX Highest supported Long GI data rates */
#define IEEE80211_VHTCAP_GET_TX_LGIMAXRATE(vhtcap) \
	(u_int16_t)(((vhtcap)->vht_mcs_nss_set[6]) | \
	((vhtcap)->vht_mcs_nss_set[7] << 8))

/* set macros */
/* VHT capabilities (all bits) */
#define IEEE80211_VHTCAP_SET_CAPFLAGS(vhtcap, _cap) \
	(vhtcap)->vht_cap[0] = ((_cap) & 0x000000FF); \
	(vhtcap)->vht_cap[1] = (((_cap) & 0x0000FF00) >> 8); \
	(vhtcap)->vht_cap[2] = (((_cap) & 0x00FF0000) >> 16); \
	(vhtcap)->vht_cap[3] = (((_cap) & 0xFF000000) >> 24)

/* B0-1 Max. MPDU Length */
#define IEEE80211_VHTCAP_SET_MAXMPDU(vhtcap, _m) \
	(vhtcap)->vht_cap[0] = (((vhtcap)->vht_cap[0] & ~0x03) | ((_m) & 0x03))

/* B2-3 Supported channel width */
#define IEEE80211_VHTCAP_SET_CHANWIDTH(vhtcap, _m) \
	(vhtcap)->vht_cap[0] = (((vhtcap)->vht_cap[0] & ~0x0C) | ((_m) & 0x03) << 2)

/* B8-10 RX STBC */
#define IEEE80211_VHTCAP_SET_RXSTBC(vhtcap, _m) \
	(vhtcap)->vht_cap[1] = (((vhtcap)->vht_cap[1] & ~0x07) | ((_m) & 0x07))

/* B13-15 Beamformee STS capability */
#define IEEE80211_VHTCAP_SET_BFSTSCAP(vhtcap, _m) \
	(vhtcap)->vht_cap[1] = (((vhtcap)->vht_cap[1] & ~0xE0) | ((_m) & 0x07) << 5)

/* B16-18 Number of sounding Dimensions */
#define IEEE80211_VHTCAP_SET_NUMSOUND(vhtcap, _m) \
	(vhtcap)->vht_cap[2] = (((vhtcap)->vht_cap[2] & ~0x07) | ((_m) & 0x07))

/* B23-25 Max. A-MPDU Length Exponent */
#define IEEE80211_VHTCAP_SET_MAXAMPDUEXP(vhtcap, _m) \
	(vhtcap)->vht_cap[2] = (((vhtcap)->vht_cap[2] & ~0x80) | ((_m) & 0x01) << 7); \
	(vhtcap)->vht_cap[3] = (((vhtcap)->vht_cap[3] & ~0x03) | ((_m) & 0x06) >> 1)

/* B26-27 VHT Link Adaptation capable */
#define IEEE80211_VHTCAP_SET_LNKADPTCAP(vhtcap, _m) \
	(vhtcap)->vht_cap[3] = (((vhtcap)->vht_cap[3] & ~0x0C) | ((_m) & 0x03) << 2)

/* B0-B15 RX VHT-MCS MAP for Spatial streams 1-8 */
#define IEEE80211_VHTCAP_SET_RX_MCS_NSS(vhtcap, _m) \
	(vhtcap)->vht_mcs_nss_set[1] = (((_m) & 0xFF00) >> 8); \
	(vhtcap)->vht_mcs_nss_set[0] = ((_m) & 0x00FF)

/* B16-B28 RX Highest supported Long GI data rates */
#define IEEE80211_VHTCAP_SET_RX_LGIMAXRATE(vhtcap, _m) \
	(vhtcap)->vht_mcs_nss_set[2] = ((_m) & 0x00FF); \
	(vhtcap)->vht_mcs_nss_set[3] = (((_m) & 0x1F00) >> 8)

/* B32-B47 TX VHT-MCS MAP for Spatial streams 1-8 */
#define IEEE80211_VHTCAP_SET_TX_MCS_NSS(vhtcap, _m) \
	(vhtcap)->vht_mcs_nss_set[5] = (((_m) & 0xFF00) >> 8); \
	(vhtcap)->vht_mcs_nss_set[4] = ((_m) & 0x00FF)

/* B48-B60 TX Highest supported Long GI data rates */
#define IEEE80211_VHTCAP_SET_TX_LGIMAXRATE(vhtcap, _m) \
	(vhtcap)->vht_mcs_nss_set[6] = ((_m) & 0x00FF); \
	(vhtcap)->vht_mcs_nss_set[7] = (((_m) & 0x1F00) >> 8)

/* VHT MCS MAP */
#define	IEEE80211_VHTMCS_ALL_DISABLE	(0xFFFF)

/* VHT capabilities options */
/* Defined in _ieee80211.h file */
/*
 * 802.11ac VHT Operation element
 */
struct ieee80211_ie_vhtop {
	u_int8_t	vhtop_id;		/* element ID */
	u_int8_t	vhtop_len;		/* length in bytes */
	u_int8_t	vhtop_info[3];		/* VHT Operation info */
	u_int8_t	vhtop_bvhtmcs[2];	/* basic VHT MSC and NSS set */
} __packed;

/* VHT Operation Information */
/* Channel width Octet 1 */
#define IEEE80211_VHTOP_SET_CHANWIDTH(vhtop, _m) \
	(vhtop)->vhtop_info[0] = (_m)

/* Channel Center Frequency Segment 0 */
#define IEEE80211_VHTOP_SET_CENTERFREQ0(vhtop, _m) \
	(vhtop)->vhtop_info[1] = (_m)

/* Channel Center Frequency Segment 1 */
#define IEEE80211_VHTOP_SET_CENTERFREQ1(vhtop, _m) \
	(vhtop)->vhtop_info[2] = (_m)

/* Basic VHT-MCS and NSS Set  */
#define IEEE80211_VHTOP_SET_BASIC_MCS_NSS(vhtop, _m) \
	(vhtop)->vhtop_bvhtmcs[0] = ((_m) & 0xFF00) >> 8; \
	(vhtop)->vhtop_bvhtmcs[1] = ((_m) & 0x00FF)

/* Get macros */
/* Channel width Octet 1 */
#define IEEE80211_VHTOP_GET_CHANWIDTH(vhtop) \
	(vhtop)->vhtop_info[0]

/* Channel Center Frequency Segment 0 */
#define IEEE80211_VHTOP_GET_CENTERFREQ0(vhtop) \
	(vhtop)->vhtop_info[1]

/* Channel Center Frequency Segment 1 */
#define IEEE80211_VHTOP_GET_CENTERFREQ1(vhtop) \
	(vhtop)->vhtop_info[2]

/* Basic VHT-MCS and NSS Set  */
#define IEEE80211_VHTOP_GET_BASIC_MCS_NSS(vhtop) \
	(((vhtop)->vhtop_bvhtmcs[0] << 8) | \
	((vhtop)->vhtop_bvhtmcs[1]))

/*
 * 802.11ac VHT Operating mode notification element
 */
struct ieee80211_ie_vhtop_notif {
	uint8_t	id;
	uint8_t	len;
	uint8_t	vhtop_notif_mode;
} __packed;

/*
 * 802.11ac Extended BSS Load element
 */
struct ieee80211_ie_ebssload {
	u_int8_t	ebl_id;			/* element ID */
	u_int8_t	ebl_len;		/* length in bytes */
	u_int8_t	ebl_mumimo_cnt[2];	/* MU-MIMO Capable station count */
	u_int8_t	ebl_ss_underuse;	/* Spatial Stream Underutilization */
	u_int8_t	ebl_20mhz_use;		/* Observable Secondary 20Mhz use */
	u_int8_t	ebl_40mhz_use;		/* Observable Secondary 40Mhz use */
	u_int8_t	ebl_80mhz_use;		/* Observable Secondary 80Mhz use */
} __packed;


/*
 * 802.11ac Wide Bandwidth Channel Switch element
 */
struct ieee80211_ie_wbchansw {
	u_int8_t	wbcs_id;		/* element ID */
	u_int8_t	wbcs_len;		/* length in bytes */
	u_int8_t	wbcs_newchanw;		/* New Channel Width */
	u_int8_t	wbcs_newchancf0;	/* New Channel Center Freq 0 */
	u_int8_t	wbcs_newchancf1;	/* New Channel Center Freq 1 */
} __packed;


/*
 * 802.11ac VHT Transmit Power Envelope element
 */
enum {
	IEEE80211_TX_POW_FOR_20MHZ,
	IEEE80211_TX_POW_FOR_40MHZ,
	IEEE80211_TX_POW_FOR_80MHZ,
	IEEE80211_TX_POW_FOR_160MHZ
};

struct ieee80211_ie_vtxpwren {
	u_int8_t	vtxpwren_id;		/* element ID */
	u_int8_t	vtxpwren_len;		/* length in byte */
	u_int8_t	vtxpwren_txpwr_info;	/* tx power info */
	u_int8_t	vtxpwren_tp20;		/* local max tx power for 20Mhz */
	u_int8_t	vtxpwren_tp40;		/* local max tx power for 40Mhz */
	u_int8_t	vtxpwren_tp80;		/* local max tx power for 80Mhz */
	u_int8_t	vtxpwren_tp160;		/* local max tx power for 160Mhz */
} __packed;

/*
 * 802.11ac Channel Switch Wrapper element
 */
struct ieee80211_ie_chsw_wrapper {
	u_int8_t			chsw_id;		/* element ID */
	u_int8_t			chsw_len;		/* length in byte */
} __packed;

/*
 * 802.11ac AID element
 */
struct ieee80211_ie_aid {
	u_int8_t	aid_id;		/* element ID */
	u_int8_t	aid_len;	/* length in byte */
	u_int16_t	aid;		/* aid */
} __packed;

/*
 * 802.11ac Quiet Channel element
 */
struct ieee80211_ie_quietchan {
	u_int8_t	qc_id;		/* element ID */
	u_int8_t	qc_len;		/* length in byte */
	u_int8_t	qc_qmode;	/* AP Quite Mode */
	u_int8_t	qc_qcnt;	/* AP Quite Count */
	u_int8_t	qc_qperiod;	/* AP Quite Period */
	u_int8_t	qc_qduration;	/* AP Quite Duration */
	u_int8_t	qc_qoffset;	/* AP Quite Offset */
} __packed;


/*
 * 802.11ac Operating Mode Notification element
 */
struct ieee80211_ie_opmodenotice {
	u_int8_t	omn_id;		/* element ID */
	u_int8_t	omn_len;	/* length in byte */
	u_int8_t	opn_opmode;	/* Op Mode */
} __packed;

enum {
	IEEE80211_TIMEOUT_REASSOC_DEADLINE		= 1,
	IEEE80211_TIMEOUT_KEY_LIFETIME			= 2,
	IEEE80211_TIMEOUT_ASSOC_COMEBACK		= 3,
};

#define IEEE80211_W_ASSOC_COMEBACK_TO		1000

/*
 * 802.11w timeout information IE
 */
struct ieee80211_timout_int_ie {
	u_int8_t	timout_int_ie;			/* IEEE80211_ELEMID_TIMEOUT_INT */
	u_int8_t	timout_int_len;
	u_int8_t	timout_int_type;		/* Timeout Interval Type */
	u_int32_t	timout_int_value;		/* in tus */
} __packed;

struct ieee80211_ie_brcm_vht {
	uint8_t id;
	uint8_t len;
	uint8_t brcm_vht_oui[3];
	uint16_t brcm_vht_type;
	uint8_t vht_ies[0];
}__packed;

/*
 * Add the Quantenna OUI to a frame
 */
uint8_t ieee80211_oui_add_qtn(uint8_t *oui);

/*
 * AUTH management packets
 *
 *	octet algo[2]
 *	octet seq[2]
 *	octet status[2]
 *	octet chal.id
 *	octet chal.length
 *	octet chal.text[253]
 */

typedef uint8_t *ieee80211_mgt_auth_t;

#define	IEEE80211_AUTH_ALGORITHM(auth) \
	((auth)[0] | ((auth)[1] << 8))
#define	IEEE80211_AUTH_TRANSACTION(auth) \
	((auth)[2] | ((auth)[3] << 8))
#define	IEEE80211_AUTH_STATUS(auth) \
	((auth)[4] | ((auth)[5] << 8))

#define	IEEE80211_AUTH_ALG_OPEN		0x0000
#define	IEEE80211_AUTH_ALG_SHARED	0x0001
#define	IEEE80211_AUTH_ALG_FT		0x0002
#define	IEEE80211_AUTH_ALG_LEAP		0x0080

enum {
	IEEE80211_AUTH_OPEN_REQUEST		= 1,
	IEEE80211_AUTH_OPEN_RESPONSE		= 2,
};

enum {
	IEEE80211_AUTH_SHARED_REQUEST		= 1,
	IEEE80211_AUTH_SHARED_CHALLENGE		= 2,
	IEEE80211_AUTH_SHARED_RESPONSE		= 3,
	IEEE80211_AUTH_SHARED_PASS		= 4,
};

#define	IEEE80211_AUTH_FT	5

/*
 * Reason codes
 *
 * Unlisted codes are reserved
 */

enum {
	IEEE80211_REASON_UNSPECIFIED			= 1,
	IEEE80211_REASON_AUTH_EXPIRE			= 2,
	IEEE80211_REASON_AUTH_LEAVE			= 3,
	IEEE80211_REASON_ASSOC_EXPIRE			= 4,
	IEEE80211_REASON_ASSOC_TOOMANY			= 5,
	IEEE80211_REASON_NOT_AUTHED			= 6,
	IEEE80211_REASON_NOT_ASSOCED			= 7,
	IEEE80211_REASON_ASSOC_LEAVE			= 8,
	IEEE80211_REASON_ASSOC_NOT_AUTHED		= 9,
	IEEE80211_REASON_DISASSOC_BAD_POWER		= 10,
	IEEE80211_REASON_DISASSOC_BAD_SUPP_CHAN		= 11,
	IEEE80211_REASON_IE_INVALID			= 13,
	IEEE80211_REASON_MIC_FAILURE			= 14,
	IEEE80211_REASON_4WAY_HANDSHAKE_TIMEOUT		= 15,
	IEEE80211_REASON_GROUP_KEY_HANDSHAKE_TIMEOUT	= 16,
	IEEE80211_REASON_IE_DIFFERENT			= 17,
	IEEE80211_REASON_INVALID_GROUP_CIPHER		= 18,
	IEEE80211_REASON_INVALID_PAIRWISE_CIPHER	= 19,
	IEEE80211_REASON_INVALID_AKMP			= 20,
	IEEE80211_REASON_UNSUPP_RSN_VERSION		= 21,
	IEEE80211_REASON_INVALID_RSN_IE_CAP		= 22,
	IEEE80211_REASON_IEEE8021X_FAILED		= 23,
	IEEE80211_REASON_CIPHER_SUITE_REJECTED		= 24,
	IEEE80211_REASON_TDLS_UNREACH			= 25, /* TDLS teardown due to peer unreachable */
	IEEE80211_REASON_TDLS_UNSPEC			= 26, /* TDLS teardown for unspecified reason */
	IEEE80211_REASON_DISASSOC_UNSPECIFIED_QOS	= 32,
	IEEE80211_REASON_DISASSOC_QOS_AP_NO_BANDWIDTH	= 33,
	IEEE80211_REASON_DISASSOC_LOW_ACK		= 34,
	IEEE80211_REASON_DISASSOC_STA_EXCEED_TXOP	= 35,
	IEEE80211_REASON_STA_LEAVE_BSS			= 36,
	IEEE80211_REASON_STA_NOT_USE			= 37,
	IEEE80211_REASON_STA_REQUIRE_SETUP		= 38,
	IEEE80211_REASON_STA_TIMEOUT			= 39,
	IEEE80211_REASON_STA_CIPHER_NOT_SUPP		= 45,


	IEEE80211_STATUS_SUCCESS		= 0,
	IEEE80211_STATUS_UNSPECIFIED		= 1,
	IEEE80211_STATUS_TDLS_WKUP_REJ_ALT	= 2,  /* Wakeup sched rejected/alternative */
	IEEE80211_STATUS_TDLS_WKUP_REJ		= 3,  /* Wakeup sched rejected */
	IEEE80211_STATUS_SEC_DIS		= 5,  /* Security disabled */
	IEEE80211_STATUS_LIFETIME_NOTOK		= 6,  /* Unacceptable lifetime */
	IEEE80211_STATUS_BSS_INVALID		= 7,  /* Not in same BSS */
	IEEE80211_STATUS_CAPINFO		= 10,
	IEEE80211_STATUS_NOT_ASSOCED		= 11,
	IEEE80211_STATUS_OTHER			= 12,
	IEEE80211_STATUS_ALG			= 13,
	IEEE80211_STATUS_SEQUENCE		= 14,
	IEEE80211_STATUS_CHALLENGE		= 15,
	IEEE80211_STATUS_TIMEOUT		= 16,
	IEEE80211_STATUS_TOOMANY		= 17,
	IEEE80211_STATUS_BASIC_RATE		= 18,
	IEEE80211_STATUS_SP_REQUIRED		= 19,
	IEEE80211_STATUS_PBCC_REQUIRED		= 20,
	IEEE80211_STATUS_CA_REQUIRED		= 21,
	IEEE80211_STATUS_TOO_MANY_STATIONS	= 22,
	IEEE80211_STATUS_RATES			= 23,
	IEEE80211_STATUS_SHORTSLOT_REQUIRED	= 25,
	IEEE80211_STATUS_DSSSOFDM_REQUIRED	= 26,
	IEEE80211_STATUS_HT_FEATURE		= 27,
	IEEE80211_STATUS_PMF_REJECT_RETRY		= 30,
	IEEE80211_STATUS_PMF_VIOLATION		= 31,
	IEEE80211_STATUS_PEER_MECHANISM_REJECT	= 37,
	IEEE80211_STATUS_TDLS_RSNIE_INVALID	= 72, /* Invalid contents of RSNIE */

	/* Quantenna */
	IEEE80211_STATUS_DENIED			= 100,
};

#define	IEEE80211_WEP_KEYLEN		5	/* 40bit */
#define	IEEE80211_WEP_IVLEN		3	/* 24bit */
#define	IEEE80211_WEP_KIDLEN		1	/* 1 octet */
#define	IEEE80211_WEP_CRCLEN		4	/* CRC-32 */
#define	IEEE80211_WEP_NKID		4	/* number of key ids */

/*
 * 802.11i defines an extended IV for use with non-WEP ciphers.
 * When the EXTIV bit is set in the key id byte an additional
 * 4 bytes immediately follow the IV for TKIP.  For CCMP the
 * EXTIV bit is likewise set but the 8 bytes represent the
 * CCMP header rather than IV+extended-IV.
 */
#define	IEEE80211_WEP_EXTIV		0x20
#define	IEEE80211_WEP_EXTIVLEN		4	/* extended IV length */
#define	IEEE80211_WEP_CCMPLEN		8	/* CCMP header */
#define	IEEE80211_WEP_MICLEN		8	/* trailing MIC */
#define	IEEE80211_WEP_ICVLEN		4	/* ICV */

#define	IEEE80211_CRC_LEN		4
#define IEEE80211_MAX_IE_LEN		257

/*
 * Maximum acceptable MTU is:
 *	IEEE80211_MAX_LEN - WEP overhead - CRC -
 *		QoS overhead - RSN/WPA overhead
 * Min is arbitrarily chosen > IEEE80211_MIN_LEN.  The default
 * mtu is Ethernet-compatible; it's set by ether_ifattach.
 */
#define	IEEE80211_MTU_MAX		3500
#define	IEEE80211_MTU_MIN		32

#define	IEEE80211_MAX_LEN		(2300 + IEEE80211_CRC_LEN + \
	(IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN + IEEE80211_WEP_CRCLEN))
#define	IEEE80211_ACK_LEN \
	(sizeof(struct ieee80211_frame_ack) + IEEE80211_CRC_LEN)
#define	IEEE80211_MIN_LEN \
	(sizeof(struct ieee80211_frame_min) + IEEE80211_CRC_LEN)

/*
 * RTS frame length parameters.  The default is specified in
 * the 802.11 spec.  The max may be wrong for jumbo frames.
 */
#define	IEEE80211_RTS_DEFAULT		512
#define	IEEE80211_RTS_MIN		0
#define	IEEE80211_RTS_MAX		65536
#define	IEEE80211_RTS_THRESH_OFF	(IEEE80211_RTS_MAX + 1)

/*
 * Regulatory extension identifier for country IE.
 */
#define IEEE80211_REG_EXT_ID		201

/*
 * IEEE 802.11 timer synchronization function (TSF) timestamp length
 */
#define IEEE80211_TSF_LEN		8
/*
 * 802.11n defines
 */
#define IEEE80211_11N_BAWLEN		64
#define IEEE80211_11N_QLENLIM		(64*1024)

#define IEEE80211_11N_SEQINORDER_BAW(seq_front, seq_back)       \
        IEEE80211_SEQ_INORDER_LAG((seq_front), (seq_back), IEEE80211_11N_BAWLEN)

struct wmm_params {
	uint8_t wmm_acm;		/* ACM parameter */
	uint8_t wmm_aifsn;		/* AIFSN parameters */
	uint8_t wmm_logcwmin;		/* cwmin in exponential form */
	uint8_t wmm_logcwmax;		/* cwmax in exponential form */
	uint16_t wmm_txopLimit;		/* txopLimit */
	uint8_t wmm_noackPolicy;	/* No-Ack Policy: 0=ack, 1=no-ack */
};

#define IEEE80211_DEFAULT_BA_WINSIZE	64	/* use for explicit BA establishing, size and throughput is moderate */
#define IEEE80211_DEFAULT_BA_WINSIZE_H	256	/* use for implicit BA, large size to support large aggregates and high throughput */
#define IEEE80211_MAX_BA_WINSIZE	0x3FF

/*value assignment for the little-endian*/
#define	ADDINT16LE(frm, v) do {			\
	frm[0] = (v) & 0xff;				\
	frm[1] = ((v) >> 8) & 0xff;			\
	frm += 2;							\
} while (0)
/* 32 bits to 32 bits */
#define	ADDINT32LE(frm, v) do {			\
	frm[0] = (v) & 0xff;				\
	frm[1] = ((v) >> 8) & 0xff;			\
	frm[2] = ((v) >> 16) & 0xff;		\
	frm[3] = ((v) >> 24) & 0xff;		\
	frm += 4;							\
} while (0)


/* value assignment */
/* 16 bits to 16 bits */
#define	ADDINT16(frm, v) do {			\
	frm[1] = (v) & 0xff;				\
	frm[0] = ((v) >> 8) & 0xff;			\
	frm += 2;							\
} while (0)
/* 32 bits to 32 bits */
#define	ADDINT32(frm, v) do {			\
	frm[3] = (v) & 0xff;				\
	frm[2] = ((v) >> 8) & 0xff;			\
	frm[1] = ((v) >> 16) & 0xff;		\
	frm[0] = ((v) >> 24) & 0xff;		\
	frm += 4;							\
} while (0)
/* 8 bits to 32 bits */
#define	ADDINT8TO32(frm, v) do {			\
	frm[3] = (v) & 0xff;				\
	frm[2] = 0;					\
	frm[1] = 0;					\
	frm[0] = 0;					\
	frm += 4;							\
} while (0)
/* 16 bits to 32 bits */
#define	ADDINT16TO32(frm, v) do {			\
	frm[3] = (v) & 0xff;				\
	frm[2] = ((v) >> 8) & 0xff;			\
	frm[1] = 0;					\
	frm[0] = 0;					\
	frm += 4;							\
} while (0)
/* 32 bits to 64 bits */
#define	ADDINT32TO64(frm, v) do {			\
	frm[7] = (v) & 0xff;				\
	frm[6] = ((v) >> 8) & 0xff;			\
	frm[5] = ((v) >> 16) & 0xff;		\
	frm[4] = ((v) >> 24) & 0xff;		\
	frm[3] = 0;							\
	frm[2] = 0;							\
	frm[1] = 0;							\
	frm[0] = 0;							\
	frm += 8;							\
} while (0)

#define IEEE80211_IE_LEADER_STR_VHTCAP	"vhtcap_ie="
#define IEEE80211_IE_LEADER_STR_HTCAP	"htcap_ie="
#define IEEE80211_IE_LEADER_STR_RSN	"rsn_ie="
#define IEEE80211_IE_LEADER_STR_WPA	"wpa_ie="
#define IEEE80211_IE_LEADER_STR_WME	"wme_ie="
#define IEEE80211_IE_LEADER_STR_ATH	"ath_ie="
#define IEEE80211_IE_LEADER_STR_EXT_ROLE	"qtn_extender_role="

#ifndef DSP_BUILD
static __inline__ int ieee80211_is_bcst(const void *p)
{
	const uint16_t *p16 = p;

	return (p16[0] == 0xFFFF) && (p16[1] == 0xFFFF) && (p16[2] == 0xFFFF);
}

/*
 * IEEE802.11w spec - Table 8-38 and section 11.1.7
 */
static __inline__ int ieee80211_mgmt_is_robust(const struct ieee80211_frame *wh) {

	int is_robust_mgmt = 0;
	const uint8_t subtype = wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK;

	switch (subtype){
		case IEEE80211_FC0_SUBTYPE_DEAUTH:
		case IEEE80211_FC0_SUBTYPE_DISASSOC:
			is_robust_mgmt = 1;
			break;
		case IEEE80211_FC0_SUBTYPE_ACTION:
		{
			const struct ieee80211_action *ia;
			ia = (const struct ieee80211_action *) (const void*)&wh[1];

			switch (ia->ia_category) {
				case IEEE80211_ACTION_CAT_SPEC_MGMT:
				case IEEE80211_ACTION_CAT_QOS:
				case IEEE80211_ACTION_CAT_DLS:
				case IEEE80211_ACTION_CAT_BA:
				case IEEE80211_ACTION_CAT_RM:
				case IEEE80211_ACTION_CAT_FBSS:
				case IEEE80211_ACTION_CAT_SA_QUERY:
				case IEEE80211_ACTION_CAT_PROT_DUAL_PA:
				case IEEE80211_ACTION_CAT_WNM:
				case IEEE80211_ACTION_CAT_MESH:
				case IEEE80211_ACTION_CAT_MULTIHOP:
				case IEEE80211_ACTION_CAT_VEND_PROT:
					is_robust_mgmt = 1;
					break;
				default:
					is_robust_mgmt = 0;
					break;
			}
			break;
		}
		default:
			break;

	}

	return is_robust_mgmt;
}
#endif

/* QTN Extender */
#define	IEEE80211_QTN_WDS_MASK		0x0003
#define	IEEE80211_QTN_EXTDR_ALLMASK	0xFFFF
#define	IEEE80211_QTN_EXTDR_MASK_SHIFT	16

#define	IEEE80211_QTN_WDS_ONLY		0x0000	/* 0 = Plain WDS; No WDS Extender */
#define	IEEE80211_QTN_WDS_MBS		0x0001	/* 1 = MBS-Master Base Station */
#define	IEEE80211_QTN_WDS_RBS		0x0002	/* 2 = RBS-Repeater/Remote Base Station */

static __inline__ uint32_t ieee80211_extdr_combinate(uint16_t flags, uint16_t mask)
{
	return (mask << IEEE80211_QTN_EXTDR_MASK_SHIFT) | flags;
}

#define IEEE80211_N_RATE_PREFIX 0x7F000000
#define IEEE80211_AC_RATE_PREFIX 0x7E000000
#define IEEE80211_RATE_PREFIX_MASK 0xFF000000

#define IEEE80211U_PARAM_IPV4ADDRTYPE_MIN	0
#define IEEE80211U_PARAM_IPV4ADDRTYPE_MAX	7
#define IEEE80211U_PARAM_IPV6ADDRTYPE_MIN	0
#define IEEE80211U_PARAM_IPV6ADDRTYPE_MAX	2
#define IEEE80211U_PARAM_IP_STATUS_MAX		2
/* MU MIMO */
#define IEEE80211_MU_GRP_VALID(_grp)		\
	(((_grp) > 0) && ((_grp) < (IEEE80211_VHT_GRP_MAX_BIT_OFFSET+1)))

#define IEEE80211_MU_POS_VALID(_pos) ((_pos) < 4)

#define IEEE80211_MU_DEL_GRP(mu_grp, _grp) do {		\
	(mu_grp).member[(_grp) >> 3] &= ~(1 << ((_grp) & 0x7)); \
} while (0)

#define IEEE80211_MU_ADD_GRP(mu_grp, _grp, _pos) do {	\
	(mu_grp).member[(_grp) >> 3] |= (1 << ((_grp) & 0x7)); \
	(mu_grp).pos[(_grp) >> 2] &= ~((0x03 << (((_grp) & 0x3) << 1))); \
	(mu_grp).pos[(_grp) >> 2] |= (((_pos) << (((_grp) & 0x3) << 1))); \
} while (0)

#define IEEE80211_MU_IS_GRP_MBR(mu_grp, _grp)	\
	((mu_grp).member[(_grp) >> 3] & (1 << ((_grp) & 0x7)))

#define IEEE80211_MU_GRP_POS(mu_grp, _grp)	\
	(((mu_grp).pos[(_grp) >> 2] >> (((_grp) & 0x3) << 1)) & 0x3)

#define	IEEE80211_VAP_STATE_DISABLED			0
#define	IEEE80211_VAP_STATE_ENABLED			1

#define IEEE80211_MIN_BSS_GROUP	1 /* 0 - Default internal group. 1 - 31 User configurable group id */
#define IEEE80211_MAX_BSS_GROUP	32

#endif /* _NET80211_IEEE80211_H_ */

