1 /******************************************************************************
2  *
3  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of version 2 of the GNU General Public License as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12  * more details.
13  *
14  ******************************************************************************/
15 #ifndef __WLAN_BSSDEF_H__
16 #define __WLAN_BSSDEF_H__
17 
18 
19 #define MAX_IE_SZ	768
20 
21 
22 #define NDIS_802_11_LENGTH_SSID         32
23 #define NDIS_802_11_LENGTH_RATES        8
24 #define NDIS_802_11_LENGTH_RATES_EX     16
25 
26 typedef unsigned char   NDIS_802_11_MAC_ADDRESS[6];
27 typedef unsigned char   NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES];        /*  Set of 8 data rates */
28 typedef unsigned char   NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX];  /*  Set of 16 data rates */
29 
30 struct ndis_802_11_ssid {
31 	u32  SsidLength;
32 	u8  Ssid[32];
33 };
34 
35 enum NDIS_802_11_NETWORK_TYPE {
36 	Ndis802_11FH,
37 	Ndis802_11DS,
38 	Ndis802_11OFDM5,
39 	Ndis802_11OFDM24,
40 	Ndis802_11NetworkTypeMax    /*  not a real type, defined as an upper bound */
41 };
42 
43 struct ndis_802_11_conf_fh {
44 	u32 Length;             /*  Length of structure */
45 	u32 HopPattern;         /*  As defined by 802.11, MSB set */
46 	u32 HopSet;             /*  to one if non-802.11 */
47 	u32 DwellTime;          /*  units are Kusec */
48 };
49 
50 /*
51 	FW will only save the channel number in DSConfig.
52 	ODI Handler will convert the channel number to freq. number.
53 */
54 struct ndis_802_11_conf {
55 	u32 Length;             /*  Length of structure */
56 	u32 BeaconPeriod;       /*  units are Kusec */
57 	u32 ATIMWindow;         /*  units are Kusec */
58 	u32 DSConfig;           /*  Frequency, units are kHz */
59 	struct ndis_802_11_conf_fh    FHConfig;
60 };
61 
62 enum NDIS_802_11_NETWORK_INFRASTRUCTURE {
63 	Ndis802_11IBSS,
64 	Ndis802_11Infrastructure,
65 	Ndis802_11AutoUnknown,
66 	Ndis802_11InfrastructureMax,     /*  Not a real value, defined as upper bound */
67 	Ndis802_11APMode,
68 };
69 
70 struct ndis_802_11_fix_ie {
71 	u8  Timestamp[8];
72 	u16  BeaconInterval;
73 	u16  Capabilities;
74 };
75 
76 struct ndis_80211_var_ie {
77 	u8  ElementID;
78 	u8  Length;
79 	u8  data[1];
80 };
81 
82 /* Length is the 4 bytes multiples of the sum of
83  * sizeof (NDIS_802_11_MAC_ADDRESS) + 2 +
84  * sizeof (struct ndis_802_11_ssid) + sizeof (u32) +
85  * sizeof (long) + sizeof (enum NDIS_802_11_NETWORK_TYPE) +
86  * sizeof (struct ndis_802_11_conf) + sizeof (NDIS_802_11_RATES_EX) + IELength
87  *
88  * Except for IELength, all other fields are fixed length. Therefore, we can
89  * define a macro to present the partial sum.
90  */
91 enum NDIS_802_11_AUTHENTICATION_MODE {
92 	Ndis802_11AuthModeOpen,
93 	Ndis802_11AuthModeShared,
94 	Ndis802_11AuthModeAutoSwitch,
95 	Ndis802_11AuthModeWPA,
96 	Ndis802_11AuthModeWPAPSK,
97 	Ndis802_11AuthModeWPANone,
98 	Ndis802_11AuthModeWAPI,
99 	Ndis802_11AuthModeMax   /*  Not a real mode, defined as upper bound */
100 };
101 
102 enum NDIS_802_11_WEP_STATUS {
103 	Ndis802_11WEPEnabled,
104 	Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled,
105 	Ndis802_11WEPDisabled,
106 	Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled,
107 	Ndis802_11WEPKeyAbsent,
108 	Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent,
109 	Ndis802_11WEPNotSupported,
110 	Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported,
111 	Ndis802_11Encryption2Enabled,
112 	Ndis802_11Encryption2KeyAbsent,
113 	Ndis802_11Encryption3Enabled,
114 	Ndis802_11Encryption3KeyAbsent,
115 	Ndis802_11_EncrypteionWAPI
116 };
117 
118 #define NDIS_802_11_AI_REQFI_CAPABILITIES      1
119 #define NDIS_802_11_AI_REQFI_LISTENINTERVAL    2
120 #define NDIS_802_11_AI_REQFI_CURRENTAPADDRESS  4
121 
122 #define NDIS_802_11_AI_RESFI_CAPABILITIES      1
123 #define NDIS_802_11_AI_RESFI_STATUSCODE        2
124 #define NDIS_802_11_AI_RESFI_ASSOCIATIONID     4
125 
126 struct ndis_802_11_ai_reqfi {
127 	u16 Capabilities;
128 	u16 ListenInterval;
129 	NDIS_802_11_MAC_ADDRESS  CurrentAPAddress;
130 };
131 
132 struct ndis_801_11_ai_resfi {
133 	u16 Capabilities;
134 	u16 StatusCode;
135 	u16 AssociationId;
136 };
137 
138 typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION
139 {
140     u32                   Length;
141     u16                  AvailableRequestFixedIEs;
142     struct ndis_802_11_ai_reqfi    RequestFixedIEs;
143     u32                   RequestIELength;
144     u32                   OffsetRequestIEs;
145     u16                  AvailableResponseFixedIEs;
146     struct ndis_801_11_ai_resfi    ResponseFixedIEs;
147     u32                   ResponseIELength;
148     u32                   OffsetResponseIEs;
149 } NDIS_802_11_ASSOCIATION_INFORMATION, *PNDIS_802_11_ASSOCIATION_INFORMATION;
150 
151 enum NDIS_802_11_RELOAD_DEFAULTS {
152 	Ndis802_11ReloadWEPKeys
153 };
154 
155 
156 /*  Key mapping keys require a BSSID */
157 typedef struct _NDIS_802_11_KEY
158 {
159     u32           Length;             /*  Length of this structure */
160     u32           KeyIndex;
161     u32           KeyLength;          /*  length of key in bytes */
162     NDIS_802_11_MAC_ADDRESS BSSID;
163     unsigned long long KeyRSC;
164     u8           KeyMaterial[32];     /*  variable length depending on above field */
165 } NDIS_802_11_KEY, *PNDIS_802_11_KEY;
166 
167 typedef struct _NDIS_802_11_REMOVE_KEY
168 {
169     u32                   Length;        /*  Length of this structure */
170     u32                   KeyIndex;
171     NDIS_802_11_MAC_ADDRESS BSSID;
172 } NDIS_802_11_REMOVE_KEY, *PNDIS_802_11_REMOVE_KEY;
173 
174 struct ndis_802_11_wep {
175 	u32 Length;        /*  Length of this structure */
176 	u32 KeyIndex;      /*  0 is the per-client key, 1-N are the global keys */
177 	u32 KeyLength;     /*  length of key in bytes */
178 	u8 KeyMaterial[16];/*  variable length depending on above field */
179 };
180 
181 /*  mask for authentication/integrity fields */
182 #define NDIS_802_11_AUTH_REQUEST_AUTH_FIELDS        0x0f
183 #define NDIS_802_11_AUTH_REQUEST_REAUTH			0x01
184 #define NDIS_802_11_AUTH_REQUEST_KEYUPDATE		0x02
185 #define NDIS_802_11_AUTH_REQUEST_PAIRWISE_ERROR		0x06
186 #define NDIS_802_11_AUTH_REQUEST_GROUP_ERROR		0x0E
187 
188 /*  MIC check time, 60 seconds. */
189 #define MIC_CHECK_TIME	60000000
190 
191 #ifndef Ndis802_11APMode
192 #define Ndis802_11APMode (Ndis802_11InfrastructureMax+1)
193 #endif
194 
195 struct wlan_phy_info {
196 	u8 SignalStrength;/* in percentage) */
197 	u8 SignalQuality;/* in percentage) */
198 	u8 Optimum_antenna;  /* for Antenna diversity */
199 	u8 Reserved_0;
200 };
201 
202 struct wlan_bcn_info {
203 	/* these infor get from rtw_get_encrypt_info when
204 	 * * translate scan to UI */
205 	u8 encryp_protocol;/* ENCRYP_PROTOCOL_E: OPEN/WEP/WPA/WPA2/WAPI */
206 	int group_cipher; /* WPA/WPA2 group cipher */
207 	int pairwise_cipher;/* WPA/WPA2/WEP pairwise cipher */
208 	int is_8021x;
209 
210 	/* bwmode 20/40 and ch_offset UP/LOW */
211 	unsigned short	ht_cap_info;
212 	unsigned char ht_info_infos_0;
213 };
214 
215 /* temporally add #pragma pack for structure alignment issue of
216 *   struct wlan_bssid_ex and get_wlan_bssid_ex_sz()
217 */
218 struct wlan_bssid_ex {
219 	u32  Length;
220 	NDIS_802_11_MAC_ADDRESS  MacAddress;
221 	u8  Reserved[2];/* 0]: IS beacon frame */
222 	struct ndis_802_11_ssid  Ssid;
223 	u32  Privacy;
224 	long  Rssi;/* in dBM, raw data , get from PHY) */
225 	enum NDIS_802_11_NETWORK_TYPE  NetworkTypeInUse;
226 	struct ndis_802_11_conf  Configuration;
227 	enum NDIS_802_11_NETWORK_INFRASTRUCTURE  InfrastructureMode;
228 	NDIS_802_11_RATES_EX  SupportedRates;
229 	struct wlan_phy_info PhyInfo;
230 	u32  IELength;
231 	u8  IEs[MAX_IE_SZ];	/* timestamp, beacon interval, and capability information) */
232 } __packed;
233 
234 __inline  static uint get_wlan_bssid_ex_sz(struct wlan_bssid_ex *bss)
235 {
236 	return (sizeof(struct wlan_bssid_ex) - MAX_IE_SZ + bss->IELength);
237 }
238 
239 struct	wlan_network {
240 	struct list_head	list;
241 	int	network_type;	/* refer to ieee80211.h for WIRELESS_11A/B/G */
242 	int	fixed;			/*  set to fixed when not to be removed as site-surveying */
243 	unsigned long	last_scanned; /* timestamp for the network */
244 	int	aid;			/* will only be valid when a BSS is joinned. */
245 	int	join_res;
246 	struct wlan_bssid_ex	network; /* must be the last item */
247 	struct wlan_bcn_info	BcnInfo;
248 };
249 
250 enum VRTL_CARRIER_SENSE {
251     DISABLE_VCS,
252     ENABLE_VCS,
253     AUTO_VCS
254 };
255 
256 enum VCS_TYPE {
257     NONE_VCS,
258     RTS_CTS,
259     CTS_TO_SELF
260 };
261 
262 #define PWR_CAM 0
263 #define PWR_MINPS 1
264 #define PWR_MAXPS 2
265 #define PWR_UAPSD 3
266 #define PWR_VOIP 4
267 
268 enum UAPSD_MAX_SP {
269 	NO_LIMIT,
270        TWO_MSDU,
271        FOUR_MSDU,
272        SIX_MSDU
273 };
274 
275 #define NUM_PRE_AUTH_KEY 16
276 #define NUM_PMKID_CACHE NUM_PRE_AUTH_KEY
277 
278 #endif /* ifndef WLAN_BSSDEF_H_ */
279