blob: 77d3987d95dafb20bfa4f42eccd7ef220dddae77 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Gopichand Nakkala92f07d82013-01-08 21:16:34 -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.
20 */
21/*
Jeff Johnson32d95a32012-09-10 13:15:23 -070022 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -070023 *
24 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
25 *
26 *
27 * Permission to use, copy, modify, and/or distribute this software for
28 * any purpose with or without fee is hereby granted, provided that the
29 * above copyright notice and this permission notice appear in all
30 * copies.
31 *
32 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
33 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
34 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
35 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
36 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
37 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
38 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
39 * PERFORMANCE OF THIS SOFTWARE.
40 */
41
42#ifndef WLAN_QCT_DXE_I_H
43#define WLAN_QCT_DXE_I_H
44
45/**=========================================================================
46
47 @file wlan_qct_dxe_i.h
48
49 @brief
50
51 This file contains the external API exposed by the wlan data transfer abstraction layer module.
52 Copyright (c) 2011 QUALCOMM Incorporated.
53 All Rights Reserved.
54 Qualcomm Confidential and Proprietary
55========================================================================*/
56
57/*===========================================================================
58
59 EDIT HISTORY FOR FILE
60
61
62 This section contains comments describing changes made to the module.
63 Notice that changes are listed in reverse chronological order.
64
65
66 $Header:$ $DateTime: $ $Author: $
67
68
69when who what, where, why
70-------- --- ----------------------------------------------------------
7108/03/10 schang Created module.
72
73===========================================================================*/
74
75/*===========================================================================
76
77 INCLUDE FILES FOR MODULE
78
79===========================================================================*/
80
81/*----------------------------------------------------------------------------
82 * Include Files
83 * -------------------------------------------------------------------------*/
84#include "wlan_qct_dxe.h"
85#include "wlan_qct_pal_trace.h"
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070086#include "wlan_qct_pal_timer.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070087#include "vos_trace.h"
88/*----------------------------------------------------------------------------
89 * Preprocessor Definitions and Constants
90 * -------------------------------------------------------------------------*/
91#define WLANDXE_CTXT_COOKIE 0xC00CC111
92
93
Jeff Johnsone7245742012-09-05 17:12:55 -070094/* From here WCNSS DXE register information
Jeff Johnson295189b2012-06-20 16:38:30 -070095 * This is temporary definition location to make compile and unit test
96 * If official msmreg.h integrated, this part will be eliminated */
97/* Start with base address */
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070098
Jeff Johnsone7245742012-09-05 17:12:55 -070099#ifdef WCN_PRONTO
100#define WLANDXE_CCU_DXE_INT_SELECT 0xfb2050dc
101#define WLANDXE_CCU_DXE_INT_SELECT_STAT 0xfb2050e0
102#define WLANDXE_CCU_ASIC_INT_ENABLE 0xfb2050e4
103#else
Jeff Johnson295189b2012-06-20 16:38:30 -0700104#define WLANDXE_CCU_DXE_INT_SELECT 0x03200b10
105#define WLANDXE_CCU_DXE_INT_SELECT_STAT 0x03200b14
106#define WLANDXE_CCU_ASIC_INT_ENABLE 0x03200b18
Jeff Johnsone7245742012-09-05 17:12:55 -0700107#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700108
109#ifdef PAL_OS_TYPE_BMP
Jeff Johnsone7245742012-09-05 17:12:55 -0700110#define WLANDXE_WCNSS_BASE_ADDRESS 0xCDD00000
Jeff Johnson295189b2012-06-20 16:38:30 -0700111#else
Jeff Johnsone7245742012-09-05 17:12:55 -0700112#ifdef WCN_PRONTO
113#define WLANDXE_WCNSS_BASE_ADDRESS 0xfb000000
114#else
115#define WLANDXE_WCNSS_BASE_ADDRESS 0x03000000
116#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700117#endif /* PAL_OS_TYPE_BMP */
118
Gopichand Nakkala5ef13c52013-01-07 14:41:35 -0800119#define WLANDXE_BMU_AVAILABLE_BD_PDU (WLANDXE_WCNSS_BASE_ADDRESS + 0x80084)
120
Madan Mohan Koyyalamudia53c4dc2012-11-13 10:35:42 -0800121#define WLANDXE_REGISTER_BASE_ADDRESS (WLANDXE_WCNSS_BASE_ADDRESS + 0x202000)
Jeff Johnson295189b2012-06-20 16:38:30 -0700122
123/* Common over the channels register addresses */
Madan Mohan Koyyalamudia53c4dc2012-11-13 10:35:42 -0800124#define WALNDEX_DMA_CSR_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x00)
125#define WALNDEX_DMA_ENCH_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x04)
126#define WALNDEX_DMA_CH_EN_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x08)
127#define WALNDEX_DMA_CH_DONE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x0C)
128#define WALNDEX_DMA_CH_ERR_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x10)
129#define WALNDEX_DMA_CH_STOP_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x14)
Jeff Johnson295189b2012-06-20 16:38:30 -0700130
131/* Interrupt Control register address */
Madan Mohan Koyyalamudia53c4dc2012-11-13 10:35:42 -0800132#define WLANDXE_INT_MASK_REG_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x18)
133#define WLANDXE_INT_SRC_MSKD_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x1C)
134#define WLANDXE_INT_SRC_RAW_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x20)
135#define WLANDXE_INT_ED_SRC_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x24)
136#define WLANDXE_INT_DONE_SRC_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x28)
137#define WLANDXE_INT_ERR_SRC_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x2C)
138#define WLANDXE_INT_CLR_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x30)
139#define WLANDXE_INT_ED_CLR_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x34)
140#define WLANDXE_INT_DONE_CLR_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x38)
141#define WLANDXE_INT_ERR_CLR_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x3C)
Jeff Johnson295189b2012-06-20 16:38:30 -0700142
Madan Mohan Koyyalamudia53c4dc2012-11-13 10:35:42 -0800143#define WLANDXE_DMA_CH_PRES_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x40)
144#define WLANDXE_ARB_CH_MSK_CLR_ADDRRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x74)
Jeff Johnson295189b2012-06-20 16:38:30 -0700145
146/* Channel Counter register */
Madan Mohan Koyyalamudia53c4dc2012-11-13 10:35:42 -0800147#define WLANDXE_DMA_COUNTER_0 (WLANDXE_REGISTER_BASE_ADDRESS + 0x200)
148#define WLANDXE_DMA_COUNTER_1 (WLANDXE_REGISTER_BASE_ADDRESS + 0x204)
149#define WLANDXE_DMA_COUNTER_2 (WLANDXE_REGISTER_BASE_ADDRESS + 0x208)
150#define WLANDXE_DMA_COUNTER_3 (WLANDXE_REGISTER_BASE_ADDRESS + 0x20C)
151#define WLANDXE_DMA_COUNTER_4 (WLANDXE_REGISTER_BASE_ADDRESS + 0x210)
152#define WLANDXE_DMA_COUNTER_5 (WLANDXE_REGISTER_BASE_ADDRESS + 0x214)
153#define WLANDXE_DMA_COUNTER_6 (WLANDXE_REGISTER_BASE_ADDRESS + 0x218)
Jeff Johnson295189b2012-06-20 16:38:30 -0700154
Madan Mohan Koyyalamudia53c4dc2012-11-13 10:35:42 -0800155#define WLANDXE_ENGINE_STAT_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x64)
156#define WLANDXE_BMU_SB_QDAT_AV_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x5c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700157
158/* Channel Base address */
Madan Mohan Koyyalamudia53c4dc2012-11-13 10:35:42 -0800159#define WLANDXE_DMA_CHAN0_BASE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x400)
160#define WLANDXE_DMA_CHAN1_BASE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x440)
161#define WLANDXE_DMA_CHAN2_BASE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x480)
162#define WLANDXE_DMA_CHAN3_BASE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x4C0)
163#define WLANDXE_DMA_CHAN4_BASE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x500)
164#define WLANDXE_DMA_CHAN5_BASE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x540)
165#define WLANDXE_DMA_CHAN6_BASE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x580)
Jeff Johnson295189b2012-06-20 16:38:30 -0700166
167/* Channel specific register offset */
168#define WLANDXE_DMA_CH_CTRL_REG 0x0000
169#define WLANDXE_DMA_CH_STATUS_REG 0x0004
170#define WLANDXE_DMA_CH_SZ_REG 0x0008
171#define WLANDXE_DMA_CH_SADRL_REG 0x000C
172#define WLANDXE_DMA_CH_SADRH_REG 0x0010
173#define WLANDXE_DMA_CH_DADRL_REG 0x0014
174#define WLANDXE_DMA_CH_DADRH_REG 0x0018
175#define WLANDXE_DMA_CH_DESCL_REG 0x001C
176#define WLANDXE_DMA_CH_DESCH_REG 0x0020
177#define WLANDXE_DMA_CH_LST_DESCL_REG 0x0024
178#define WLANDXE_DMA_CH_LST_DESCH_REG 0x0028
179#define WLANDXE_DMA_CH_BD_REG 0x002C
180#define WLANDXE_DMA_CH_HEAD_REG 0x0030
181#define WLANDXE_DMA_CH_TAIL_REG 0x0034
182#define WLANDXE_DMA_CH_PDU_REG 0x0038
183#define WLANDXE_DMA_CH_TSTMP_REG 0x003C
184
185/* Common CSR Register Contorol mask and offset */
186#define WLANDXE_DMA_CSR_RESERVED_MASK 0xFFFE0000
187#define WLANDXE_DMA_CSR_RESERVED_OFFSET 0x11
188#define WLANDXE_DMA_CSR_RESERVED_DEFAULT 0x0
189
190#define WLANDXE_DMA_CSR_H2H_SYNC_EN_MASK 0x10000
191#define WLANDXE_DMA_CSR_H2H_SYNC_EN_OFFSET 0x10
192#define WLANDXE_DMA_CSR_H2H_SYNC_EN_DEFAULT 0x0
193
194#define WLANDXE_DMA_CSR_PAUSED_MASK 0x8000
195#define WLANDXE_DMA_CSR_PAUSED_OFFSET 0xF
196#define WLANDXE_DMA_CSR_PAUSED_DEFAULT 0x0
197
198#define WLANDXE_DMA_CSR_ECTR_EN_MASK 0x4000
199#define WLANDXE_DMA_CSR_ECTR_EN_OFFSET 0xE
200#define WLANDXE_DMA_CSR_ECTR_EN_DEFAULT 0x4000
201
202#define WLANDXE_DMA_CSR_B2H_TSTMP_OFF_MASK 0x3E00
203#define WLANDXE_DMA_CSR_B2H_TSTMP_OFF_OFFSET 0x9
204#define WLANDXE_DMA_CSR_B2H_TSTMP_OFF_DEFAULT 0xE00
205
206#define WLANDXE_DMA_CSR_H2B_TSTMP_OFF_MASK 0x1F0
207#define WLANDXE_DMA_CSR_H2B_TSTMP_OFF_OFFSET 0x4
208#define WLANDXE_DMA_CSR_H2B_TSTMP_OFF_DEFAULT 0x50
209
210#define WLANDXE_DMA_CSR_TSTMP_EN_MASK 0x8
211#define WLANDXE_DMA_CSR_TSTMP_EN_OFFSET 0x3
212#define WLANDXE_DMA_CSR_TSTMP_EN_DEFAULT 0x0
213
214#define WLANDXE_DMA_CSR_RESET_MASK 0x4
215#define WLANDXE_DMA_CSR_RESET_OFFSET 0x2
216#define WLANDXE_DMA_CSR_RESET_DEFAULT 0x0
217
218#define WLANDXE_DMA_CSR_PAUSE_MASK 0x2
219#define WLANDXE_DMA_CSR_PAUSE_OFFSET 0x1
220#define WLANDXE_DMA_CSR_PAUSE_DEFAULT 0x0
221
222#define WLANDXE_DMA_CSR_EN_MASK 0x1
223#define WLANDXE_DMA_CSR_EN_OFFSET 0x0
224#define WLANDXE_DMA_CSR_EN_DEFAULT 0x0
225#define WLANDXE_DMA_CSR_DEFAULT 0x4E50
226
227/* Channel CTRL Register Control mask and offset */
228#define WLANDXE_CH_CTRL_RSVD_MASK 0x80000000
229#define WLANDXE_CH_CTRL_RSVD_OFFSET 0x1F
230#define WLANDXE_CH_CTRL_RSVD_DEFAULT 0x0
231
232#define WLANDXE_CH_CTRL_SWAP_MASK 0x80000000
233
234#define WLANDXE_CH_CTRL_BDT_IDX_MASK 0x60000000
235#define WLANDXE_CH_CTRL_BDT_IDX_OFFSET 0x1D
236#define WLANDXE_CH_CTRL_BDT_IDX_DEFAULT 0x0
237
238#define WLANDXE_CH_CTRL_DFMT_MASK 0x10000000
239#define WLANDXE_CH_CTRL_DFMT_OFFSET 0x1C
240#define WLANDXE_CH_CTRL_DFMT_DEFAULT 0x10000000
241#define WLANDXE_CH_CTRL_DFMT_ESHORT 0x0
242#define WLANDXE_CH_CTRL_DFMT_ELONG 0x1
243
244#define WLANDXE_CH_CTRL_ABORT_MASK 0x8000000
245#define WLANDXE_CH_CTRL_ABORT_OFFSET 0x1B
246#define WLANDXE_CH_CTRL_ABORT_DEFAULT 0x0
247
248#define WLANDXE_CH_CTRL_ENDIAN_MASK 0x4000000
249
250#define WLANDXE_CH_CTRL_CTR_SEL_MASK 0x3C00000
251#define WLANDXE_CH_CTRL_CTR_SEL_OFFSET 0x16
252#define WLANDXE_CH_CTRL_CTR_SEL_DEFAULT 0x0
253
254#define WLANDXE_CH_CTRL_EDVEN_MASK 0x200000
255#define WLANDXE_CH_CTRL_EDVEN_OFFSET 0x15
256#define WLANDXE_CH_CTRL_EDVEN_DEFAULT 0x0
257
258#define WLANDXE_CH_CTRL_EDEN_MASK 0x100000
259#define WLANDXE_CH_CTRL_EDEN_OFFSET 0x14
260#define WLANDXE_CH_CTRL_EDEN_DEFAULT 0x0
261
262#define WLANDXE_CH_CTRL_INE_DONE_MASK 0x80000
263#define WLANDXE_CH_CTRL_INE_DONE_OFFSET 0x13
264#define WLANDXE_CH_CTRL_INE_DONE_DEFAULT 0x0
265
266#define WLANDXE_CH_CTRL_INE_ERR_MASK 0x40000
267#define WLANDXE_CH_CTRL_INE_ERR_OFFSET 0x12
268#define WLANDXE_CH_CTRL_INE_ERR_DEFAULT 0x0
269
270#define WLANDXE_CH_CTRL_INE_ED_MASK 0x20000
271#define WLANDXE_CH_CTRL_INE_ED_OFFSET 0x11
272#define WLANDXE_CH_CTRL_INE_ED_DEFAULT 0x0
273
274#define WLANDXE_CH_CTRL_STOP_MASK 0x10000
275#define WLANDXE_CH_CTRL_STOP_OFFSET 0x10
276#define WLANDXE_CH_CTRL_STOP_DEFAULT 0x0
277
278#define WLANDXE_CH_CTRL_PRIO_MASK 0xE000
279#define WLANDXE_CH_CTRL_PRIO_OFFSET 0xD
280#define WLANDXE_CH_CTRL_PRIO_DEFAULT 0x0
281
282#define WLANDXE_CH_CTRL_BTHLD_SEL_MASK 0x1E00
283#define WLANDXE_CH_CTRL_BTHLD_SEL_OFFSET 0x9
284#define WLANDXE_CH_CTRL_BTHLD_SEL_DEFAULT 0x600
285#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD0 0x0
286#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD1 0x1
287#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD2 0x2
288#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD3 0x3
289#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD4 0x4
290#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD5 0x5
291#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD6 0x6
292#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD7 0x7
293#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD8 0x8
294#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD9 0x9
295#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD10 0xA
296#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD11 0xB
297#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD12 0xC
298#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD13 0xD
299#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD14 0xE
300#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD15 0xF
301
302#define WLANDXE_CH_CTRL_PDU_REL_MASK 0x100
303#define WLANDXE_CH_CTRL_PDU_REL_OFFSET 0x8
304#define WLANDXE_CH_CTRL_PDU_REL_DEFAULT 0x100
305#define WLANDXE_CH_CTRL_PDU_REL_EKEEP 0x0
306#define WLANDXE_CH_CTRL_PDU_REL_ERELEASE 0x1
307
308#define WLANDXE_CH_CTRL_PIQ_MASK 0x80
309#define WLANDXE_CH_CTRL_PIQ_OFFSET 0x7
310#define WLANDXE_CH_CTRL_PIQ_DEFAULT 0x0
311#define WLANDXE_CH_CTRL_PIQ_EFLAT 0x0
312#define WLANDXE_CH_CTRL_PIQ_EQUEUE 0x1
313
314#define WLANDXE_CH_CTRL_DIQ_MASK 0x40
315#define WLANDXE_CH_CTRL_DIQ_OFFSET 0x6
316#define WLANDXE_CH_CTRL_DIQ_DEFAULT 0x0
317#define WLANDXE_CH_CTRL_DIQ_EFLAT 0x0
318#define WLANDXE_CH_CTRL_DIQ_EQUEUE 0x1
319
320#define WLANDXE_CH_CTRL_SIQ_MASK 0x20
321#define WLANDXE_CH_CTRL_SIQ_OFFSET 0x5
322#define WLANDXE_CH_CTRL_SIQ_DEFAULT 0x0
323#define WLANDXE_CH_CTRL_SIQ_EFLAT 0x0
324#define WLANDXE_CH_CTRL_SIQ_EQUEUE 0x1
325
326#define WLANDXE_CH_CTRL_BDH_MASK 0x10
327#define WLANDXE_CH_CTRL_BDH_OFFSET 0x4
328#define WLANDXE_CH_CTRL_BDH_DEFAULT 0x0
329
330#define WLANDXE_CH_CTRL_EOP_MASK 0x8
331#define WLANDXE_CH_CTRL_EOP_OFFSET 0x3
332#define WLANDXE_CH_CTRL_EOP_DEFAULT 0x8
333
334#define WLANDXE_CH_CTRL_XTYPE_MASK 0x6
335#define WLANDXE_CH_CTRL_XTYPE_OFFSET 0x1
336#define WLANDXE_CH_CTRL_XTYPE_DEFAULT 0x0
337#define WLANDXE_CH_CTRL_XTYPE_EH2H 0x0
338#define WLANDXE_CH_CTRL_XTYPE_EB2B 0x1
339#define WLANDXE_CH_CTRL_XTYPE_EH2B 0x2
340#define WLANDXE_CH_CTRL_XTYPE_EB2H 0x3
341
342#define WLANDXE_CH_CTRL_DONE_MASK 0x4
343
344#define WLANDXE_CH_CTRL_ERR_MASK 0x20
345
346#define WLANDXE_CH_CTRL_MASKED_MASK 0x8
347
348#define WLANDXE_CH_CTRL_EN_MASK 0x1
349#define WLANDXE_CH_CTRL_EN_OFFSET 0x0
350#define WLANDXE_CH_CTRL_EN_DEFAULT 0x0
351#define WLANDXE_CH_CTRL_DEFAULT 0x10000708
352
353
354#define WLANDXE_DESC_CTRL_VALID 0x00000001
355#define WLANDXE_DESC_CTRL_XTYPE_MASK 0x00000006
356#define WLANDXE_DESC_CTRL_XTYPE_H2H 0x00000000
357#define WLANDXE_DESC_CTRL_XTYPE_B2B 0x00000002
358#define WLANDXE_DESC_CTRL_XTYPE_H2B 0x00000004
359#define WLANDXE_DESC_CTRL_XTYPE_B2H 0x00000006
360#define WLANDXE_DESC_CTRL_EOP 0x00000008
361#define WLANDXE_DESC_CTRL_BDH 0x00000010
362#define WLANDXE_DESC_CTRL_SIQ 0x00000020
363#define WLANDXE_DESC_CTRL_DIQ 0x00000040
364#define WLANDXE_DESC_CTRL_PIQ 0x00000080
365#define WLANDXE_DESC_CTRL_PDU_REL 0x00000100
366#define WLANDXE_DESC_CTRL_BTHLD_SEL 0x00001E00
367#define WLANDXE_DESC_CTRL_PRIO 0x0000E000
368#define WLANDXE_DESC_CTRL_STOP 0x00010000
369#define WLANDXE_DESC_CTRL_INT 0x00020000
370#define WLANDXE_DESC_CTRL_BDT_SWAP 0x00100000
371#define WLANDXE_DESC_CTRL_ENDIANNESS 0x00200000
372#define WLANDXE_DESC_CTRL_DFMT 0x10000000
373#define WLANDXE_DESC_CTRL_RSVD 0xfffc0000
374/* CSR Register Control mask and offset */
375
376#define WLANDXE_CH_STAT_INT_DONE_MASK 0x00008000
377#define WLANDXE_CH_STAT_INT_ERR_MASK 0x00004000
378#define WLANDXE_CH_STAT_INT_ED_MASK 0x00002000
379
380#define WLANDXE_CH_STAT_MASKED_MASK 0x00000008
Leo Chang094ece82013-04-23 17:57:41 -0700381#define WLANDXE_CH_STAT_ENABLED_MASK 0x00000001
Jeff Johnsone7245742012-09-05 17:12:55 -0700382/* Till here WCNSS DXE register information
Jeff Johnson295189b2012-06-20 16:38:30 -0700383 * This is temporary definition location to make compile and unit test
384 * If official msmreg.h integrated, this part will be eliminated */
385
386/* Interrupt control channel mask */
387#define WLANDXE_INT_MASK_CHAN_0 0x00000001
388#define WLANDXE_INT_MASK_CHAN_1 0x00000002
389#define WLANDXE_INT_MASK_CHAN_2 0x00000004
390#define WLANDXE_INT_MASK_CHAN_3 0x00000008
391#define WLANDXE_INT_MASK_CHAN_4 0x00000010
392#define WLANDXE_INT_MASK_CHAN_5 0x00000020
393#define WLANDXE_INT_MASK_CHAN_6 0x00000040
394
395#define WLANDXE_TX_LOW_RES_THRESHOLD (5)
396
397/* DXE Descriptor Endian swap macro */
398#ifdef WLANDXE_ENDIAN_SWAP_ENABLE
399#define WLANDXE_U32_SWAP_ENDIAN(a) (((a & 0x000000FF) << 24) | \
400 ((a & 0x0000FF00) << 8) | \
401 ((a & 0x00FF0000) >> 8) | \
402 ((a & 0xFF000000) >> 24))
403#else
404/* If DXE HW does not need endian swap, DO NOTHING */
405#define WLANDXE_U32_SWAP_ENDIAN(a) (a)
406#endif /* WLANDXE_ENDIAN_SWAP_ENABLE */
407
408/* Log Definition will be mappped with PAL MSG */
409#define HDXE_MSG WPAL_TRACE
410#define HDXE_ASSERT(a) VOS_ASSERT(a)
411
412/*----------------------------------------------------------------------------
413 * Type Declarations
414 * -------------------------------------------------------------------------*/
415/* DMA Channel Q handle Method type
416 * Linear handle or circular */
417typedef enum
418{
419 WLANDXE_CHANNEL_HANDLE_LINEAR,
420 WLANDXE_CHANNEL_HANDLE_CIRCULA
421}WLANDXE_ChannelHandleType;
422
423typedef enum
424{
425 WLANDXE_TX_COMP_INT_LR_THRESHOLD,
426 WLANDXE_TX_COMP_INT_PER_K_FRAMES,
427 WLANDXE_TX_COMP_INT_TIMER
428} WLANDXE_TXCompIntEnableType;
429
430typedef enum
431{
432 WLANDXE_SHORT_DESCRIPTOR,
433 WLANDXE_LONG_DESCRIPTOR
434} WLANDXE_DescriptorType;
435
436typedef enum
437{
438 WLANDXE_DMA_CHANNEL_0,
439 WLANDXE_DMA_CHANNEL_1,
440 WLANDXE_DMA_CHANNEL_2,
441 WLANDXE_DMA_CHANNEL_3,
442 WLANDXE_DMA_CHANNEL_4,
443 WLANDXE_DMA_CHANNEL_5,
444 WLANDXE_DMA_CHANNEL_6,
445 WLANDXE_DMA_CHANNEL_MAX
446} WLANDXE_DMAChannelType;
447
448/** DXE HW Long Descriptor format */
449typedef struct
450{
451 wpt_uint32 srcMemAddrL;
452 wpt_uint32 srcMemAddrH;
453 wpt_uint32 dstMemAddrL;
454 wpt_uint32 dstMemAddrH;
455 wpt_uint32 phyNextL;
456 wpt_uint32 phyNextH;
457} WLANDXE_LongDesc;
458
459
460/** DXE HW Short Descriptor format */
461typedef struct tDXEShortDesc
462{
463 wpt_uint32 srcMemAddrL;
464 wpt_uint32 dstMemAddrL;
465 wpt_uint32 phyNextL;
466} WLANDXE_ShortDesc;
467
468
469/* DXE Descriptor Data Type
470 * Pick up from GEN5 */
471typedef struct
472{
473 union
474 {
475 wpt_uint32 ctrl;
476 wpt_uint32 valid :1; //0 = DMA stop, 1 = DMA continue with this descriptor
477 wpt_uint32 transferType :2; //0 = Host to Host space
478 wpt_uint32 eop :1; //End of Packet
479 wpt_uint32 bdHandling :1; //if transferType = Host to BMU, then 0 means first 128 bytes contain BD, and 1 means create new empty BD
480 wpt_uint32 siq :1; // SIQ
481 wpt_uint32 diq :1; // DIQ
482 wpt_uint32 pduRel :1; //0 = don't release BD and PDUs when done, 1 = release them
483 wpt_uint32 bthldSel :4; //BMU Threshold Select
484 wpt_uint32 prio :3; //Specifies the priority level to use for the transfer
485 wpt_uint32 stopChannel :1; //1 = DMA stops processing further, channel requires re-enabling after this
486 wpt_uint32 intr :1; //Interrupt on Descriptor Done
487 wpt_uint32 rsvd :1; //reserved
488 wpt_uint32 transferSize :14; //14 bits used - ignored for BMU transfers, only used for host to host transfers?
489 } descCtrl;
490 wpt_uint32 xfrSize;
491 union
492 {
493 WLANDXE_LongDesc dxe_long_desc;
494 WLANDXE_ShortDesc dxe_short_desc;
495 }dxedesc;
496} WLANDXE_DescType;
497
498typedef struct
499{
500 void *nextCtrlBlk;
501 wpt_packet *xfrFrame;
502 WLANDXE_DescType *linkedDesc;
503 unsigned int linkedDescPhyAddr;
504 wpt_uint32 ctrlBlkOrder;
505#ifdef FEATURE_R33D
506 wpt_uint32 shadowBufferVa;
507#endif /* FEATURE_R33D */
508} WLANDXE_DescCtrlBlkType;
509
510typedef struct
511{
512 /* Q handle method, linear or ring */
513 WLANDXE_ChannelHandleType queueMethod;
514
515 /* Number of descriptors for DXE that can be queued for transfer at one time */
516 wpt_uint32 nDescs;
517
518 /* Maximum number of receive buffers of shared memory to use for this pipe */
519 wpt_uint32 nRxBuffers;
520
521 /* Reference WQ - for H2B and B2H only */
522 wpt_uint32 refWQ;
523
524 /* for usb only, endpoint info for CH_SADR or CH_DADR */
525 wpt_uint32 refEP;
526
527 /* H2B(Tx), B2H(Rx), H2H(SRAM<->HostMem R/W) */
528 wpt_uint32 xfrType;
529
530 /* Channel Priority 7(Highest) - 0(Lowest) */
531 wpt_uint32 chPriority;
532
533 /* 1 = BD attached to frames for this pipe */
534 wpt_boolean bdPresent;
535
536 wpt_uint32 chk_size;
537
538 wpt_uint32 bmuThdSel;
539
540 /* Added in Gen5 for Prefetch */
541 wpt_boolean useLower4G;
542
543 wpt_boolean useShortDescFmt;
544 /* Till here inharited from GEN5 code */
545 /* From now on, added for PRIMA */
546} WLANDXE_ChannelConfigType;
547
548typedef struct
549{
550 wpt_uint32 chDXEBaseAddr;
551 wpt_uint32 chDXEStatusRegAddr;
552 wpt_uint32 chDXEDesclRegAddr;
553 wpt_uint32 chDXEDeschRegAddr;
554 wpt_uint32 chDXELstDesclRegAddr;
555 wpt_uint32 chDXECtrlRegAddr;
556 wpt_uint32 chDXESzRegAddr;
557 wpt_uint32 chDXEDadrlRegAddr;
558 wpt_uint32 chDXEDadrhRegAddr;
559 wpt_uint32 chDXESadrlRegAddr;
560 wpt_uint32 chDXESadrhRegAddr;
561} WLANDXE_ChannelRegisterType;
562
563typedef struct
564{
565 wpt_uint32 refWQ_swapped;
566 wpt_boolean chEnabled;
567 wpt_boolean chConfigured;
568 wpt_uint32 channel;
569 wpt_uint32 chk_size_mask;
570 wpt_uint32 bmuThdSel_mask;
571 wpt_uint32 cw_ctrl_read;
572 wpt_uint32 cw_ctrl_write;
573 wpt_uint32 cw_ctrl_write_valid;
574 wpt_uint32 cw_ctrl_write_eop;
575 wpt_uint32 cw_ctrl_write_eop_int;
576 wpt_uint32 chan_mask;
577 wpt_uint32 chan_mask_read_disable;
578 wpt_uint32 intMask;
579} WLANDXE_ChannelExConfigType;
580
581typedef struct
582{
583 WDTS_ChannelType channelType;
584 WLANDXE_DescCtrlBlkType *headCtrlBlk;
585 WLANDXE_DescCtrlBlkType *tailCtrlBlk;
586#if !(defined(FEATURE_R33D) || defined(WLANDXE_TEST_CHANNEL_ENABLE))
587 WLANDXE_DescType *descriptorAllocation;
588#endif
589 WLANDXE_DescType *DescBottomLoc;
590 unsigned int descBottomLocPhyAddr;
591 wpt_uint32 numDesc;
592 wpt_uint32 numFreeDesc;
593 wpt_uint32 numRsvdDesc;
594 wpt_uint32 maxFrameSize;
595 wpt_uint32 numFragmentCurrentChain;
596 wpt_uint32 numFrameBeforeInt;
597 wpt_uint32 numTotalFrame;
598 wpt_mutex dxeChannelLock;
599 wpt_boolean hitLowResource;
600 WLANDXE_ChannelConfigType channelConfig;
601 WLANDXE_ChannelRegisterType channelRegister;
602 WLANDXE_ChannelExConfigType extraConfig;
603 WLANDXE_DMAChannelType assignedDMAChannel;
604 wpt_uint64 rxDoneHistogram;
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -0700605 wpt_timer healthMonitorTimer;
606 wpt_msg *healthMonitorMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -0700607} WLANDXE_ChannelCBType;
608
609typedef struct
610{
611 WLANDXE_TXCompIntEnableType txIntEnable;
612 unsigned int txLowResourceThreshold_LoPriCh;
613 unsigned int txLowResourceThreshold_HiPriCh;
614 unsigned int rxLowResourceThreshold;
615 unsigned int txInterruptEnableFrameCount;
616 unsigned int txInterruptEnablePeriod;
617} WLANDXE_TxCompIntConfigType;
618
619typedef struct
620{
621 WLANDXE_ChannelCBType dxeChannel[WDTS_CHANNEL_MAX];
622 WLANDXE_RxFrameReadyCbType rxReadyCB;
623 WLANDXE_TxCompleteCbType txCompCB;
624 WLANDXE_LowResourceCbType lowResourceCB;
625 WLANDXE_TxCompIntConfigType txCompInt;
626 void *clientCtxt;
627 wpt_uint32 interruptPath;
628 wpt_msg *rxIsrMsg;
629 wpt_msg *txIsrMsg;
630 wpt_msg *rxPktAvailMsg;
631 volatile WLANDXE_PowerStateType hostPowerState;
632 wpt_boolean rxIntDisabledByIMPS;
633 wpt_boolean txIntDisabledByIMPS;
634 WLANDXE_SetPowerStateCbType setPowerStateCb;
635 volatile WLANDXE_RivaPowerStateType rivaPowerState;
636 wpt_boolean ringNotEmpty;
637 wpt_boolean txIntEnable;
638 wpt_uint32 txCompletedFrames;
639 wpt_uint8 ucTxMsgCnt;
640 wpt_uint16 lastKickOffDxe;
641 wpt_uint32 dxeCookie;
642 wpt_packet *freeRXPacket;
643 wpt_boolean rxPalPacketUnavailable;
Jeff Johnsone7245742012-09-05 17:12:55 -0700644 wpt_boolean driverReloadInProcessing;
Jeff Johnson295189b2012-06-20 16:38:30 -0700645} WLANDXE_CtrlBlkType;
646
647/*==========================================================================
648 @ Function Name
649 dxeCommonDefaultConfig
650
651 @ Description
652
653 @ Parameters
654 WLANDXE_CtrlBlkType *dxeCtrlBlk,
655 DXE host driver main control block
656
657 @ Return
658 wpt_status
659
660===========================================================================*/
661extern wpt_status dxeCommonDefaultConfig
662(
663 WLANDXE_CtrlBlkType *dxeCtrlBlk
664);
665
666/*==========================================================================
667 @ Function Name
668 dxeChannelDefaultConfig
669
670 @ Description
671 Get defualt configuration values from pre defined structure
672 All the channels must have it's own configurations
673
674 @ Parameters
675 WLANDXE_CtrlBlkType *dxeCtrlBlk,
676 DXE host driver main control block
677 WLANDXE_ChannelCBType *channelEntry
678 Channel specific control block
679
680 @ Return
681 wpt_status
682
683===========================================================================*/
684extern wpt_status dxeChannelDefaultConfig
685(
686 WLANDXE_CtrlBlkType *dxeCtrlBlk,
687 WLANDXE_ChannelCBType *channelEntry
688);
689
690#endif /* WLAN_QCT_DXE_I_H */