blob: ec0def27c37516ed1265de3263061894ddbe5380 [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
99#define WLANDXE_BMU_AVAILABLE_BD_PDU 0x03080084
100
Jeff Johnsone7245742012-09-05 17:12:55 -0700101#ifdef WCN_PRONTO
102#define WLANDXE_CCU_DXE_INT_SELECT 0xfb2050dc
103#define WLANDXE_CCU_DXE_INT_SELECT_STAT 0xfb2050e0
104#define WLANDXE_CCU_ASIC_INT_ENABLE 0xfb2050e4
105#else
Jeff Johnson295189b2012-06-20 16:38:30 -0700106#define WLANDXE_CCU_DXE_INT_SELECT 0x03200b10
107#define WLANDXE_CCU_DXE_INT_SELECT_STAT 0x03200b14
108#define WLANDXE_CCU_ASIC_INT_ENABLE 0x03200b18
Jeff Johnsone7245742012-09-05 17:12:55 -0700109#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700110
111#ifdef PAL_OS_TYPE_BMP
Jeff Johnsone7245742012-09-05 17:12:55 -0700112#define WLANDXE_WCNSS_BASE_ADDRESS 0xCDD00000
Jeff Johnson295189b2012-06-20 16:38:30 -0700113#else
Jeff Johnsone7245742012-09-05 17:12:55 -0700114#ifdef WCN_PRONTO
115#define WLANDXE_WCNSS_BASE_ADDRESS 0xfb000000
116#else
117#define WLANDXE_WCNSS_BASE_ADDRESS 0x03000000
118#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700119#endif /* PAL_OS_TYPE_BMP */
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
Jeff Johnsone7245742012-09-05 17:12:55 -0700381/* Till here WCNSS DXE register information
Jeff Johnson295189b2012-06-20 16:38:30 -0700382 * This is temporary definition location to make compile and unit test
383 * If official msmreg.h integrated, this part will be eliminated */
384
385/* Interrupt control channel mask */
386#define WLANDXE_INT_MASK_CHAN_0 0x00000001
387#define WLANDXE_INT_MASK_CHAN_1 0x00000002
388#define WLANDXE_INT_MASK_CHAN_2 0x00000004
389#define WLANDXE_INT_MASK_CHAN_3 0x00000008
390#define WLANDXE_INT_MASK_CHAN_4 0x00000010
391#define WLANDXE_INT_MASK_CHAN_5 0x00000020
392#define WLANDXE_INT_MASK_CHAN_6 0x00000040
393
394#define WLANDXE_TX_LOW_RES_THRESHOLD (5)
395
396/* DXE Descriptor Endian swap macro */
397#ifdef WLANDXE_ENDIAN_SWAP_ENABLE
398#define WLANDXE_U32_SWAP_ENDIAN(a) (((a & 0x000000FF) << 24) | \
399 ((a & 0x0000FF00) << 8) | \
400 ((a & 0x00FF0000) >> 8) | \
401 ((a & 0xFF000000) >> 24))
402#else
403/* If DXE HW does not need endian swap, DO NOTHING */
404#define WLANDXE_U32_SWAP_ENDIAN(a) (a)
405#endif /* WLANDXE_ENDIAN_SWAP_ENABLE */
406
407/* Log Definition will be mappped with PAL MSG */
408#define HDXE_MSG WPAL_TRACE
409#define HDXE_ASSERT(a) VOS_ASSERT(a)
410
411/*----------------------------------------------------------------------------
412 * Type Declarations
413 * -------------------------------------------------------------------------*/
414/* DMA Channel Q handle Method type
415 * Linear handle or circular */
416typedef enum
417{
418 WLANDXE_CHANNEL_HANDLE_LINEAR,
419 WLANDXE_CHANNEL_HANDLE_CIRCULA
420}WLANDXE_ChannelHandleType;
421
422typedef enum
423{
424 WLANDXE_TX_COMP_INT_LR_THRESHOLD,
425 WLANDXE_TX_COMP_INT_PER_K_FRAMES,
426 WLANDXE_TX_COMP_INT_TIMER
427} WLANDXE_TXCompIntEnableType;
428
429typedef enum
430{
431 WLANDXE_SHORT_DESCRIPTOR,
432 WLANDXE_LONG_DESCRIPTOR
433} WLANDXE_DescriptorType;
434
435typedef enum
436{
437 WLANDXE_DMA_CHANNEL_0,
438 WLANDXE_DMA_CHANNEL_1,
439 WLANDXE_DMA_CHANNEL_2,
440 WLANDXE_DMA_CHANNEL_3,
441 WLANDXE_DMA_CHANNEL_4,
442 WLANDXE_DMA_CHANNEL_5,
443 WLANDXE_DMA_CHANNEL_6,
444 WLANDXE_DMA_CHANNEL_MAX
445} WLANDXE_DMAChannelType;
446
447/** DXE HW Long Descriptor format */
448typedef struct
449{
450 wpt_uint32 srcMemAddrL;
451 wpt_uint32 srcMemAddrH;
452 wpt_uint32 dstMemAddrL;
453 wpt_uint32 dstMemAddrH;
454 wpt_uint32 phyNextL;
455 wpt_uint32 phyNextH;
456} WLANDXE_LongDesc;
457
458
459/** DXE HW Short Descriptor format */
460typedef struct tDXEShortDesc
461{
462 wpt_uint32 srcMemAddrL;
463 wpt_uint32 dstMemAddrL;
464 wpt_uint32 phyNextL;
465} WLANDXE_ShortDesc;
466
467
468/* DXE Descriptor Data Type
469 * Pick up from GEN5 */
470typedef struct
471{
472 union
473 {
474 wpt_uint32 ctrl;
475 wpt_uint32 valid :1; //0 = DMA stop, 1 = DMA continue with this descriptor
476 wpt_uint32 transferType :2; //0 = Host to Host space
477 wpt_uint32 eop :1; //End of Packet
478 wpt_uint32 bdHandling :1; //if transferType = Host to BMU, then 0 means first 128 bytes contain BD, and 1 means create new empty BD
479 wpt_uint32 siq :1; // SIQ
480 wpt_uint32 diq :1; // DIQ
481 wpt_uint32 pduRel :1; //0 = don't release BD and PDUs when done, 1 = release them
482 wpt_uint32 bthldSel :4; //BMU Threshold Select
483 wpt_uint32 prio :3; //Specifies the priority level to use for the transfer
484 wpt_uint32 stopChannel :1; //1 = DMA stops processing further, channel requires re-enabling after this
485 wpt_uint32 intr :1; //Interrupt on Descriptor Done
486 wpt_uint32 rsvd :1; //reserved
487 wpt_uint32 transferSize :14; //14 bits used - ignored for BMU transfers, only used for host to host transfers?
488 } descCtrl;
489 wpt_uint32 xfrSize;
490 union
491 {
492 WLANDXE_LongDesc dxe_long_desc;
493 WLANDXE_ShortDesc dxe_short_desc;
494 }dxedesc;
495} WLANDXE_DescType;
496
497typedef struct
498{
499 void *nextCtrlBlk;
500 wpt_packet *xfrFrame;
501 WLANDXE_DescType *linkedDesc;
502 unsigned int linkedDescPhyAddr;
503 wpt_uint32 ctrlBlkOrder;
504#ifdef FEATURE_R33D
505 wpt_uint32 shadowBufferVa;
506#endif /* FEATURE_R33D */
507} WLANDXE_DescCtrlBlkType;
508
509typedef struct
510{
511 /* Q handle method, linear or ring */
512 WLANDXE_ChannelHandleType queueMethod;
513
514 /* Number of descriptors for DXE that can be queued for transfer at one time */
515 wpt_uint32 nDescs;
516
517 /* Maximum number of receive buffers of shared memory to use for this pipe */
518 wpt_uint32 nRxBuffers;
519
520 /* Reference WQ - for H2B and B2H only */
521 wpt_uint32 refWQ;
522
523 /* for usb only, endpoint info for CH_SADR or CH_DADR */
524 wpt_uint32 refEP;
525
526 /* H2B(Tx), B2H(Rx), H2H(SRAM<->HostMem R/W) */
527 wpt_uint32 xfrType;
528
529 /* Channel Priority 7(Highest) - 0(Lowest) */
530 wpt_uint32 chPriority;
531
532 /* 1 = BD attached to frames for this pipe */
533 wpt_boolean bdPresent;
534
535 wpt_uint32 chk_size;
536
537 wpt_uint32 bmuThdSel;
538
539 /* Added in Gen5 for Prefetch */
540 wpt_boolean useLower4G;
541
542 wpt_boolean useShortDescFmt;
543 /* Till here inharited from GEN5 code */
544 /* From now on, added for PRIMA */
545} WLANDXE_ChannelConfigType;
546
547typedef struct
548{
549 wpt_uint32 chDXEBaseAddr;
550 wpt_uint32 chDXEStatusRegAddr;
551 wpt_uint32 chDXEDesclRegAddr;
552 wpt_uint32 chDXEDeschRegAddr;
553 wpt_uint32 chDXELstDesclRegAddr;
554 wpt_uint32 chDXECtrlRegAddr;
555 wpt_uint32 chDXESzRegAddr;
556 wpt_uint32 chDXEDadrlRegAddr;
557 wpt_uint32 chDXEDadrhRegAddr;
558 wpt_uint32 chDXESadrlRegAddr;
559 wpt_uint32 chDXESadrhRegAddr;
560} WLANDXE_ChannelRegisterType;
561
562typedef struct
563{
564 wpt_uint32 refWQ_swapped;
565 wpt_boolean chEnabled;
566 wpt_boolean chConfigured;
567 wpt_uint32 channel;
568 wpt_uint32 chk_size_mask;
569 wpt_uint32 bmuThdSel_mask;
570 wpt_uint32 cw_ctrl_read;
571 wpt_uint32 cw_ctrl_write;
572 wpt_uint32 cw_ctrl_write_valid;
573 wpt_uint32 cw_ctrl_write_eop;
574 wpt_uint32 cw_ctrl_write_eop_int;
575 wpt_uint32 chan_mask;
576 wpt_uint32 chan_mask_read_disable;
577 wpt_uint32 intMask;
578} WLANDXE_ChannelExConfigType;
579
580typedef struct
581{
582 WDTS_ChannelType channelType;
583 WLANDXE_DescCtrlBlkType *headCtrlBlk;
584 WLANDXE_DescCtrlBlkType *tailCtrlBlk;
585#if !(defined(FEATURE_R33D) || defined(WLANDXE_TEST_CHANNEL_ENABLE))
586 WLANDXE_DescType *descriptorAllocation;
587#endif
588 WLANDXE_DescType *DescBottomLoc;
589 unsigned int descBottomLocPhyAddr;
590 wpt_uint32 numDesc;
591 wpt_uint32 numFreeDesc;
592 wpt_uint32 numRsvdDesc;
593 wpt_uint32 maxFrameSize;
594 wpt_uint32 numFragmentCurrentChain;
595 wpt_uint32 numFrameBeforeInt;
596 wpt_uint32 numTotalFrame;
597 wpt_mutex dxeChannelLock;
598 wpt_boolean hitLowResource;
599 WLANDXE_ChannelConfigType channelConfig;
600 WLANDXE_ChannelRegisterType channelRegister;
601 WLANDXE_ChannelExConfigType extraConfig;
602 WLANDXE_DMAChannelType assignedDMAChannel;
603 wpt_uint64 rxDoneHistogram;
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -0700604 wpt_timer healthMonitorTimer;
605 wpt_msg *healthMonitorMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -0700606} WLANDXE_ChannelCBType;
607
608typedef struct
609{
610 WLANDXE_TXCompIntEnableType txIntEnable;
611 unsigned int txLowResourceThreshold_LoPriCh;
612 unsigned int txLowResourceThreshold_HiPriCh;
613 unsigned int rxLowResourceThreshold;
614 unsigned int txInterruptEnableFrameCount;
615 unsigned int txInterruptEnablePeriod;
616} WLANDXE_TxCompIntConfigType;
617
618typedef struct
619{
620 WLANDXE_ChannelCBType dxeChannel[WDTS_CHANNEL_MAX];
621 WLANDXE_RxFrameReadyCbType rxReadyCB;
622 WLANDXE_TxCompleteCbType txCompCB;
623 WLANDXE_LowResourceCbType lowResourceCB;
624 WLANDXE_TxCompIntConfigType txCompInt;
625 void *clientCtxt;
626 wpt_uint32 interruptPath;
627 wpt_msg *rxIsrMsg;
628 wpt_msg *txIsrMsg;
629 wpt_msg *rxPktAvailMsg;
630 volatile WLANDXE_PowerStateType hostPowerState;
631 wpt_boolean rxIntDisabledByIMPS;
632 wpt_boolean txIntDisabledByIMPS;
633 WLANDXE_SetPowerStateCbType setPowerStateCb;
634 volatile WLANDXE_RivaPowerStateType rivaPowerState;
635 wpt_boolean ringNotEmpty;
636 wpt_boolean txIntEnable;
637 wpt_uint32 txCompletedFrames;
638 wpt_uint8 ucTxMsgCnt;
639 wpt_uint16 lastKickOffDxe;
640 wpt_uint32 dxeCookie;
641 wpt_packet *freeRXPacket;
642 wpt_boolean rxPalPacketUnavailable;
Jeff Johnsone7245742012-09-05 17:12:55 -0700643 wpt_boolean driverReloadInProcessing;
Jeff Johnson295189b2012-06-20 16:38:30 -0700644} WLANDXE_CtrlBlkType;
645
646/*==========================================================================
647 @ Function Name
648 dxeCommonDefaultConfig
649
650 @ Description
651
652 @ Parameters
653 WLANDXE_CtrlBlkType *dxeCtrlBlk,
654 DXE host driver main control block
655
656 @ Return
657 wpt_status
658
659===========================================================================*/
660extern wpt_status dxeCommonDefaultConfig
661(
662 WLANDXE_CtrlBlkType *dxeCtrlBlk
663);
664
665/*==========================================================================
666 @ Function Name
667 dxeChannelDefaultConfig
668
669 @ Description
670 Get defualt configuration values from pre defined structure
671 All the channels must have it's own configurations
672
673 @ Parameters
674 WLANDXE_CtrlBlkType *dxeCtrlBlk,
675 DXE host driver main control block
676 WLANDXE_ChannelCBType *channelEntry
677 Channel specific control block
678
679 @ Return
680 wpt_status
681
682===========================================================================*/
683extern wpt_status dxeChannelDefaultConfig
684(
685 WLANDXE_CtrlBlkType *dxeCtrlBlk,
686 WLANDXE_ChannelCBType *channelEntry
687);
688
689#endif /* WLAN_QCT_DXE_I_H */