1 /*
2  * Copyright (c) 2013-2017,2019 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 #ifndef CDS_COMMON__IEEE80211_I_H_
21 #define CDS_COMMON__IEEE80211_I_H_
22 
23 /**
24  * enum ieee80211_phymode - not really a mode; there are really multiple PHY's
25  * @IEEE80211_MODE_AUTO: autoselect
26  * @IEEE80211_MODE_11A: 5GHz, OFDM
27  * @IEEE80211_MODE_11B: 2GHz, CCK
28  * @IEEE80211_MODE_11G: 2GHz, OFDM
29  * @IEEE80211_MODE_FH: 2GHz, GFSK
30  * @IEEE80211_MODE_TURBO_A: 5GHz, OFDM, 2x clock dynamic turbo
31  * @IEEE80211_MODE_TURBO_G: 2GHz, OFDM, 2x clock dynamic turbo
32  * @IEEE80211_MODE_11NA_HT20: 5Ghz, HT20
33  * @IEEE80211_MODE_11NG_HT20: 2Ghz, HT20
34  * @IEEE80211_MODE_11NA_HT40PLUS: 5Ghz, HT40 (ext ch +1)
35  * @IEEE80211_MODE_11NA_HT40MINUS: 5Ghz, HT40 (ext ch -1)
36  * @IEEE80211_MODE_11NG_HT40PLUS: 2Ghz, HT40 (ext ch +1)
37  * @IEEE80211_MODE_11NG_HT40MINUS: 2Ghz, HT40 (ext ch -1)
38  * @IEEE80211_MODE_11NG_HT40: 2Ghz, Auto HT40
39  * @IEEE80211_MODE_11NA_HT40: 2Ghz, Auto HT40
40  * @IEEE80211_MODE_11AC_VHT20: 5Ghz, VHT20
41  * @IEEE80211_MODE_11AC_VHT40PLUS: 5Ghz, VHT40 (Ext ch +1)
42  * @IEEE80211_MODE_11AC_VHT40MINUS: 5Ghz VHT40 (Ext ch -1)
43  * @IEEE80211_MODE_11AC_VHT40: 5Ghz, VHT40
44  * @IEEE80211_MODE_11AC_VHT80: 5Ghz, VHT80
45  * @IEEE80211_MODE_2G_AUTO: 2G 11 b/g/n autoselect
46  * @IEEE80211_MODE_5G_AUTO: 5G 11 a/n/ac autoselect
47  * @IEEE80211_MODE_11AGN: Support 11N in both 2G and 5G
48  * @IEEE80211_MODE_11AX_HE20: HE20
49  * @IEEE80211_MODE_11AX_HE40: HE40
50  * @IEEE80211_MODE_11AX_HE40PLUS: HE40 (ext ch +1)
51  * @IEEE80211_MODE_11AX_HE40MINUS: HE40 (ext ch -1)
52  * @IEEE80211_MODE_11AX_HE80: HE80
53  * @IEEE80211_MODE_11AX_HE80P80: HE 80P80
54  * @IEEE80211_MODE_11AX_HE160: HE160
55  * @IEEE80211_MODE_MAX: Maximum possible value
56  */
57 enum ieee80211_phymode {
58 	IEEE80211_MODE_AUTO = 0,
59 	IEEE80211_MODE_11A = 1,
60 	IEEE80211_MODE_11B = 2,
61 	IEEE80211_MODE_11G = 3,
62 	IEEE80211_MODE_FH = 4,
63 	IEEE80211_MODE_TURBO_A = 5,
64 	IEEE80211_MODE_TURBO_G = 6,
65 	IEEE80211_MODE_11NA_HT20 = 7,
66 	IEEE80211_MODE_11NG_HT20 = 8,
67 	IEEE80211_MODE_11NA_HT40PLUS = 9,
68 	IEEE80211_MODE_11NA_HT40MINUS = 10,
69 	IEEE80211_MODE_11NG_HT40PLUS = 11,
70 	IEEE80211_MODE_11NG_HT40MINUS = 12,
71 	IEEE80211_MODE_11NG_HT40 = 13,
72 	IEEE80211_MODE_11NA_HT40 = 14,
73 	IEEE80211_MODE_11AC_VHT20 = 15,
74 	IEEE80211_MODE_11AC_VHT40PLUS = 16,
75 	IEEE80211_MODE_11AC_VHT40MINUS = 17,
76 	IEEE80211_MODE_11AC_VHT40 = 18,
77 	IEEE80211_MODE_11AC_VHT80 = 19,
78 	IEEE80211_MODE_2G_AUTO = 20,
79 	IEEE80211_MODE_5G_AUTO = 21,
80 	IEEE80211_MODE_11AGN = 22,
81 	IEEE80211_MODE_11AX_HE20 = 23,
82 	IEEE80211_MODE_11AX_HE40 = 24,
83 	IEEE80211_MODE_11AX_HE40PLUS = 25,
84 	IEEE80211_MODE_11AX_HE40MINUS = 26,
85 	IEEE80211_MODE_11AX_HE80 = 27,
86 	IEEE80211_MODE_11AX_HE80P80 = 28,
87 	IEEE80211_MODE_11AX_HE160 = 29,
88 
89 	/* Do not add after this line */
90 	IEEE80211_MODE_MAX = IEEE80211_MODE_11AX_HE160,
91 };
92 
93 /*
94  * 802.11g protection mode.
95  */
96 enum ieee80211_protmode {
97 	IEEE80211_PROT_NONE = 0,        /* no protection */
98 	IEEE80211_PROT_CTSONLY = 1,     /* CTS to self */
99 	IEEE80211_PROT_RTSCTS = 2,      /* RTS-CTS */
100 };
101 
102 /* bits 0-3 are for private use by drivers */
103 /* channel attributes */
104 #define IEEE80211_CHAN_TURBO            0x00000010      /* Turbo channel */
105 #define IEEE80211_CHAN_CCK              0x00000020      /* CCK channel */
106 #define IEEE80211_CHAN_OFDM             0x00000040      /* OFDM channel */
107 #define IEEE80211_CHAN_2GHZ             0x00000080      /* 2 GHz spectrum channel. */
108 #define IEEE80211_CHAN_5GHZ             0x00000100      /* 5 GHz spectrum channel */
109 #define IEEE80211_CHAN_PASSIVE          0x00000200      /* Only passive scan allowed */
110 #define IEEE80211_CHAN_DYN              0x00000400      /* Dynamic CCK-OFDM channel */
111 #define IEEE80211_CHAN_GFSK             0x00000800      /* GFSK channel (FHSS PHY) */
112 #define IEEE80211_CHAN_RADAR_DFS        0x00001000      /* Radar found on channel */
113 #define IEEE80211_CHAN_STURBO           0x00002000      /* 11a static turbo channel only */
114 #define IEEE80211_CHAN_HALF             0x00004000      /* Half rate channel */
115 #define IEEE80211_CHAN_QUARTER          0x00008000      /* Quarter rate channel */
116 #define IEEE80211_CHAN_HT20             0x00010000      /* HT 20 channel */
117 #define IEEE80211_CHAN_HT40PLUS         0x00020000      /* HT 40 with extension channel above */
118 #define IEEE80211_CHAN_HT40MINUS        0x00040000      /* HT 40 with extension channel below */
119 #define IEEE80211_CHAN_HT40INTOL        0x00080000      /* HT 40 Intolerant */
120 #define IEEE80211_CHAN_VHT20            0x00100000      /* VHT 20 channel */
121 #define IEEE80211_CHAN_VHT40PLUS        0x00200000      /* VHT 40 with extension channel above */
122 #define IEEE80211_CHAN_VHT40MINUS       0x00400000      /* VHT 40 with extension channel below */
123 #define IEEE80211_CHAN_VHT80            0x00800000      /* VHT 80 channel */
124 /* channel temporarily blocked due to noise */
125 #define IEEE80211_CHAN_BLOCKED          0x02000000
126 /* VHT 160 channel */
127 #define IEEE80211_CHAN_VHT160           0x04000000
128 /* VHT 80_80 channel */
129 #define IEEE80211_CHAN_VHT80_80         0x08000000
130 
131 /* flagext */
132 #define IEEE80211_CHAN_DFS              0x0002  /* DFS required on channel */
133 /* DFS required on channel for 2nd band of 80+80*/
134 #define IEEE80211_CHAN_DFS_CFREQ2       0x0004
135 
136 #define IEEE80211_SEQ_MASK      0xfff   /* sequence generator mask */
137 #define MIN_SW_SEQ              0x100   /* minimum sequence for SW generate packect */
138 
139 #endif /* CDS_COMMON__IEEE80211_I_H_ */
140