blob: 5a44259961d76539745c4e03d4c0b09965fda278 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Kiet Lam1ed83fc2014-02-19 01:15:45 -08002 * Copyright (c) 2012-2013 The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
Gopichand Nakkala92f07d82013-01-08 21:16:34 -080020 */
Kiet Lam1ed83fc2014-02-19 01:15:45 -080021
Gopichand Nakkala92f07d82013-01-08 21:16:34 -080022/*
Kiet Lam1ed83fc2014-02-19 01:15:45 -080023 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
26 */
27
28
Jeff Johnson295189b2012-06-20 16:38:30 -070029#if !defined( __VOS_UTILS_H )
30#define __VOS_UTILS_H
31
32/**=========================================================================
33
34 \file vos_utils.h
35
36 \brief virtual Operating System Services (vOSS) utility APIs
37
38 Various utility functions
39
Jeff Johnson295189b2012-06-20 16:38:30 -070040
41 ========================================================================*/
42
43/* $Header$ */
44
45/*--------------------------------------------------------------------------
46 Include Files
47 ------------------------------------------------------------------------*/
48#include <vos_types.h>
49#include <vos_status.h>
50//#include <Wincrypt.h>
51
52/*--------------------------------------------------------------------------
53 Preprocessor definitions and constants
54 ------------------------------------------------------------------------*/
55#define VOS_DIGEST_SHA1_SIZE 20
56#define VOS_DIGEST_MD5_SIZE 16
Abhishek Singhe3fa11f2014-05-13 11:11:10 +053057#define VOS_BAND_2GHZ 1
58#define VOS_BAND_5GHZ 2
Jeff Johnson295189b2012-06-20 16:38:30 -070059
Abhishek Singhe3fa11f2014-05-13 11:11:10 +053060#define VOS_24_GHZ_CHANNEL_14 14
Jeff Johnson295189b2012-06-20 16:38:30 -070061/*--------------------------------------------------------------------------
62 Type declarations
63 ------------------------------------------------------------------------*/
64
65
66/*-------------------------------------------------------------------------
67 Function declarations and documenation
68 ------------------------------------------------------------------------*/
69
70VOS_STATUS vos_crypto_init( v_U32_t *phCryptProv );
71
72VOS_STATUS vos_crypto_deinit( v_U32_t hCryptProv );
73
74
75
76/**
77 * vos_rand_get_bytes
78
79 * FUNCTION:
80 * Returns cryptographically secure pseudo-random bytes.
81 *
82 *
83 * @param pbBuf - the caller allocated location where the bytes should be copied
84 * @param numBytes the number of bytes that should be generated and
85 * copied
86 *
87 * @return VOS_STATUS_SUCCSS if the operation succeeds
88*/
89VOS_STATUS vos_rand_get_bytes( v_U32_t handle, v_U8_t *pbBuf, v_U32_t numBytes );
90
91
92/**
93 * vos_sha1_hmac_str
94 *
95 * FUNCTION:
96 * Generate the HMAC-SHA1 of a string given a key.
97 *
98 * LOGIC:
99 * Standard HMAC processing from RFC 2104. The code is provided in the
100 * appendix of the RFC.
101 *
102 * ASSUMPTIONS:
103 * The RFC is correct.
104 *
105 * @param text text to be hashed
106 * @param textLen length of text
107 * @param key key to use for HMAC
108 * @param keyLen length of key
109 * @param digest holds resultant SHA1 HMAC (20B)
110 *
111 * @return VOS_STATUS_SUCCSS if the operation succeeds
112 *
113 */
114VOS_STATUS vos_sha1_hmac_str(v_U32_t cryptHandle, /* Handle */
115 v_U8_t *text, /* pointer to data stream */
116 v_U32_t textLen, /* length of data stream */
117 v_U8_t *key, /* pointer to authentication key */
118 v_U32_t keyLen, /* length of authentication key */
119 v_U8_t digest[VOS_DIGEST_SHA1_SIZE]);/* caller digest to be filled in */
120
121/**
122 * vos_md5_hmac_str
123 *
124 * FUNCTION:
125 * Generate the HMAC-MD5 of a string given a key.
126 *
127 * LOGIC:
128 * Standard HMAC processing from RFC 2104. The code is provided in the
129 * appendix of the RFC.
130 *
131 * ASSUMPTIONS:
132 * The RFC is correct.
133 *
134 * @param text text to be hashed
135 * @param textLen length of text
136 * @param key key to use for HMAC
137 * @param keyLen length of key
138 * @param digest holds resultant MD5 HMAC (16B)
139 *
140 * @return VOS_STATUS_SUCCSS if the operation succeeds
141 *
142 */
143VOS_STATUS vos_md5_hmac_str(v_U32_t cryptHandle, /* Handle */
144 v_U8_t *text, /* pointer to data stream */
145 v_U32_t textLen, /* length of data stream */
146 v_U8_t *key, /* pointer to authentication key */
147 v_U32_t keyLen, /* length of authentication key */
148 v_U8_t digest[VOS_DIGEST_MD5_SIZE]);/* caller digest to be filled in */
149
150
151
152VOS_STATUS vos_encrypt_AES(v_U32_t cryptHandle, /* Handle */
153 v_U8_t *pText, /* pointer to data stream */
154 v_U8_t *Encrypted,
155 v_U8_t *pKey); /* pointer to authentication key */
156
157
158VOS_STATUS vos_decrypt_AES(v_U32_t cryptHandle, /* Handle */
159 v_U8_t *pText, /* pointer to data stream */
160 v_U8_t *pDecrypted,
161 v_U8_t *pKey); /* pointer to authentication key */
Mukul Sharmad96e5e32014-06-25 17:45:39 +0530162
Abhishek Singhe3fa11f2014-05-13 11:11:10 +0530163v_U8_t vos_chan_to_band(v_U32_t chan);
Hardik Kantilal Patel8c2d5232015-01-08 00:31:38 +0530164void vos_get_wlan_unsafe_channel(v_U16_t *unsafeChannelList,
165 v_U16_t buffer_size, v_U16_t *unsafeChannelCount);
Mukul Sharmad96e5e32014-06-25 17:45:39 +0530166
167#ifdef DEBUG_ROAM_DELAY
168#define ROAM_DELAY_TABLE_SIZE 30
169
170enum e_roaming_event
171{
172 e_HDD_DISABLE_TX_QUEUE = 0,
173 e_SME_PREAUTH_REASSOC_START,
174 e_SME_PREAUTH_CALLBACK_HIT,
175 e_SME_ISSUE_REASSOC_REQ,
176 e_LIM_SEND_REASSOC_REQ,
177 e_HDD_SEND_REASSOC_RSP,
178 e_SME_DISASSOC_ISSUE,
179 e_SME_DISASSOC_COMPLETE,
180 e_LIM_ADD_BS_REQ,
181 e_LIM_ADD_BS_RSP,
182 e_HDD_ENABLE_TX_QUEUE,
183 e_HDD_SET_PTK_REQ,
184 e_HDD_SET_GTK_REQ,
185 e_HDD_SET_PTK_RSP,
186 e_HDD_SET_GTK_RSP,
187 e_HDD_FIRST_XMIT_TIME,
188 e_DXE_FIRST_XMIT_TIME,
189 e_SME_VO_ADDTS_REQ,
190 e_SME_VO_ADDTS_RSP,
191 e_SME_VI_ADDTS_REQ,
192 e_SME_VI_ADDTS_RSP,
193 e_CACHE_ROAM_DELAY_DATA,
194 e_CACHE_ROAM_PEER_MAC,
195 e_TL_FIRST_XMIT_TIME,
196 e_HDD_RX_PKT_CBK_TIME,
197 e_DXE_RX_PKT_TIME,
198
199 e_ROAM_EVENT_MAX
200};
201
202typedef enum
203{
204 eVOS_AUTH_TYPE_NONE, //never used
205 // MAC layer authentication types
206 eVOS_AUTH_TYPE_OPEN_SYSTEM,
207 eVOS_AUTH_TYPE_SHARED_KEY,
208 eVOS_AUTH_TYPE_AUTOSWITCH,
209
210 // Upper layer authentication types
211 eVOS_AUTH_TYPE_WPA,
212 eVOS_AUTH_TYPE_WPA_PSK,
213 eVOS_AUTH_TYPE_WPA_NONE,
214
215 eVOS_AUTH_TYPE_RSN,
216 eVOS_AUTH_TYPE_RSN_PSK,
217#if defined WLAN_FEATURE_VOWIFI_11R
218 eVOS_AUTH_TYPE_FT_RSN,
219 eVOS_AUTH_TYPE_FT_RSN_PSK,
220#endif
221#ifdef FEATURE_WLAN_WAPI
222 eVOS_AUTH_TYPE_WAPI_WAI_CERTIFICATE,
223 eVOS_AUTH_TYPE_WAPI_WAI_PSK,
224#endif /* FEATURE_WLAN_WAPI */
Sachin Ahujaf042c942014-12-15 17:15:10 +0530225#ifdef FEATURE_WLAN_ESE
Mukul Sharmad96e5e32014-06-25 17:45:39 +0530226 eVOS_AUTH_TYPE_CCKM_WPA,
227 eVOS_AUTH_TYPE_CCKM_RSN,
Sachin Ahujaf042c942014-12-15 17:15:10 +0530228#endif /* FEATURE_WLAN_ESE */
Mukul Sharmad96e5e32014-06-25 17:45:39 +0530229#ifdef WLAN_FEATURE_11W
230 eVOS_AUTH_TYPE_RSN_PSK_SHA256,
231#endif
232 eVOS_NUM_OF_SUPPORT_AUTH_TYPE,
233 eVOS_AUTH_TYPE_FAILED = 0xff,
234 eVOS_AUTH_TYPE_UNKNOWN = eVOS_AUTH_TYPE_FAILED,
235
236}eVosAuthType;
237
238
239typedef struct sRoamDelayMetaInfo
240{
241 v_BOOL_t log_tl;
242 v_U8_t hdd_monitor_tx;//monitor the tx @ hdd basically (Eapol , First Tx Data Frame )
243 v_U8_t hdd_monitor_rx;//monitor the rx @ hdd basically (Eapol )
244 v_U8_t dxe_monitor_tx;//monitor the tx @ dxe basically (Eapol , First Tx Data Frame )
245 v_U8_t dxe_monitor_rx;//monitor the rx @ dxe basically (Eapol )
246 v_BOOL_t log_dxe_tx_isr;
247 v_U8_t peer_mac_addr[6];
248 v_ULONG_t hdd_first_xmit_time;
249 v_ULONG_t preauth_reassoc_start_time;
250 v_ULONG_t preauth_cb_time;
251 v_ULONG_t disable_tx_queues_time;
252 v_ULONG_t lim_add_bss_req_time;
253 v_ULONG_t issue_reassoc_req_time;
254 v_ULONG_t hdd_sendassoc_rsp_time;
255 v_ULONG_t enable_tx_queues_reassoc_time;
256 v_ULONG_t set_ptk_roam_key_time;
257 v_ULONG_t set_gtk_roam_key_time;
258 v_ULONG_t complete_ptk_roam_key_time;
259 v_ULONG_t complete_gtk_roam_key_time;
260 v_ULONG_t dxe_first_tx_time;
261 v_ULONG_t send_reassoc_req_time;
262 v_ULONG_t disassoc_comp_time;
263 v_ULONG_t disassoc_issue_time;
264 v_ULONG_t lim_add_bss_rsp_time;
265 v_ULONG_t tl_fetch_pkt_time;
266 v_ULONG_t dxe_tx_isr_time;
267 v_ULONG_t hdd_eapol_m1;
268 v_ULONG_t hdd_eapol_m2;
269 v_ULONG_t hdd_eapol_m3;
270 v_ULONG_t hdd_eapol_m4;
271 v_ULONG_t dxe_eapol_m1;
272 v_ULONG_t dxe_eapol_m2;
273 v_ULONG_t dxe_eapol_m3;
274 v_ULONG_t dxe_eapol_m4;
275 v_ULONG_t hdd_first_pkt_len;
276 v_U8_t hdd_first_pkt_data[50];
277 v_ULONG_t dxe_first_pkt_len;
278 v_U8_t dxe_first_pkt_data[75];
279 v_ULONG_t hdd_addts_vo_req_time;
280 v_ULONG_t hdd_addts_vo_rsp_time;
281 v_ULONG_t hdd_addts_vi_req_time;
282 v_ULONG_t hdd_addts_vi_rsp_time;
283 eVosAuthType hdd_auth_type;
284
285} tRoamDelayMetaInfo, *tpRoamDelayMetaInfo;
286
287extern tRoamDelayMetaInfo gRoamDelayMetaInfo;
288extern tRoamDelayMetaInfo gRoamDelayTable[ROAM_DELAY_TABLE_SIZE];
289extern v_BOOL_t gRoamDelayCurrentIndex;
290
291void vos_reset_roam_timer_log(void);
292void vos_dump_roam_time_log_service(void);
293void vos_record_roam_event(enum e_roaming_event, void *pBuff, v_ULONG_t buff_len);
294#endif //#ifdef DEBUG_ROAM_DELAY
Jeff Johnson295189b2012-06-20 16:38:30 -0700295#endif // #if !defined __VOSS_UTILS_H