blob: 517b88348753e6b342446e7bf2e392b8058d9b2e [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Kiet Lam842dad02014-02-18 18:44:02 -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 Lam842dad02014-02-18 18:44:02 -080021
22/*
23 * 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
Jeff Johnson295189b2012-06-20 16:38:30 -070028#ifndef WLAN_QCT_DXE_I_H
29#define WLAN_QCT_DXE_I_H
30
31/**=========================================================================
32
33 @file wlan_qct_dxe_i.h
34
35 @brief
36
37 This file contains the external API exposed by the wlan data transfer abstraction layer module.
Jeff Johnson295189b2012-06-20 16:38:30 -070038========================================================================*/
39
40/*===========================================================================
41
42 EDIT HISTORY FOR FILE
43
44
45 This section contains comments describing changes made to the module.
46 Notice that changes are listed in reverse chronological order.
47
48
49 $Header:$ $DateTime: $ $Author: $
50
51
52when who what, where, why
53-------- --- ----------------------------------------------------------
5408/03/10 schang Created module.
55
56===========================================================================*/
57
58/*===========================================================================
59
60 INCLUDE FILES FOR MODULE
61
62===========================================================================*/
63
64/*----------------------------------------------------------------------------
65 * Include Files
66 * -------------------------------------------------------------------------*/
67#include "wlan_qct_dxe.h"
68#include "wlan_qct_pal_trace.h"
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -070069#include "wlan_qct_pal_timer.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070070#include "vos_trace.h"
71/*----------------------------------------------------------------------------
72 * Preprocessor Definitions and Constants
73 * -------------------------------------------------------------------------*/
74#define WLANDXE_CTXT_COOKIE 0xC00CC111
75
76
Jeff Johnsone7245742012-09-05 17:12:55 -070077/* From here WCNSS DXE register information
Jeff Johnson295189b2012-06-20 16:38:30 -070078 * This is temporary definition location to make compile and unit test
79 * If official msmreg.h integrated, this part will be eliminated */
80/* Start with base address */
Madan Mohan Koyyalamudi8cb53982012-09-28 14:34:47 -070081
Jeff Johnsone7245742012-09-05 17:12:55 -070082#ifdef WCN_PRONTO
Hardik Kantilal Patel7d143922014-03-06 10:07:52 +053083#define WLANDXE_CCU_DXE_INT_SELECT 0x2050dc
84#define WLANDXE_CCU_DXE_INT_SELECT_STAT 0x2050e0
85#define WLANDXE_CCU_ASIC_INT_ENABLE 0x2050e4
86#define WLANDXE_CCU_SOFT_RESET 0x204010
Mihir Shete41c41bb2014-08-18 17:37:12 +053087#define WLANDXE_BMU_AVAILABLE_BD_PDU_LOCAL 0x80260
Jeff Johnsone7245742012-09-05 17:12:55 -070088#else
Hardik Kantilal Patel7d143922014-03-06 10:07:52 +053089#define WLANDXE_CCU_DXE_INT_SELECT 0x200b10
90#define WLANDXE_CCU_DXE_INT_SELECT_STAT 0x200b14
91#define WLANDXE_CCU_ASIC_INT_ENABLE 0x200b18
Jeff Johnsone7245742012-09-05 17:12:55 -070092#endif
Jeff Johnson295189b2012-06-20 16:38:30 -070093
Hardik Kantilal Patel7d143922014-03-06 10:07:52 +053094#define WLANDXE_BMU_AVAILABLE_BD_PDU 0x80084
Jeff Johnson295189b2012-06-20 16:38:30 -070095
Hardik Kantilal Patel7d143922014-03-06 10:07:52 +053096#define WLANDXE_REGISTER_BASE_ADDRESS 0x202000
Jeff Johnson295189b2012-06-20 16:38:30 -070097
98/* Common over the channels register addresses */
Madan Mohan Koyyalamudia53c4dc2012-11-13 10:35:42 -080099#define WALNDEX_DMA_CSR_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x00)
100#define WALNDEX_DMA_ENCH_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x04)
101#define WALNDEX_DMA_CH_EN_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x08)
102#define WALNDEX_DMA_CH_DONE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x0C)
103#define WALNDEX_DMA_CH_ERR_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x10)
104#define WALNDEX_DMA_CH_STOP_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x14)
Jeff Johnson295189b2012-06-20 16:38:30 -0700105
106/* Interrupt Control register address */
Madan Mohan Koyyalamudia53c4dc2012-11-13 10:35:42 -0800107#define WLANDXE_INT_MASK_REG_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x18)
108#define WLANDXE_INT_SRC_MSKD_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x1C)
109#define WLANDXE_INT_SRC_RAW_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x20)
110#define WLANDXE_INT_ED_SRC_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x24)
111#define WLANDXE_INT_DONE_SRC_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x28)
112#define WLANDXE_INT_ERR_SRC_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x2C)
113#define WLANDXE_INT_CLR_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x30)
114#define WLANDXE_INT_ED_CLR_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x34)
115#define WLANDXE_INT_DONE_CLR_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x38)
116#define WLANDXE_INT_ERR_CLR_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x3C)
Jeff Johnson295189b2012-06-20 16:38:30 -0700117
Madan Mohan Koyyalamudia53c4dc2012-11-13 10:35:42 -0800118#define WLANDXE_DMA_CH_PRES_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x40)
119#define WLANDXE_ARB_CH_MSK_CLR_ADDRRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x74)
Jeff Johnson295189b2012-06-20 16:38:30 -0700120
121/* Channel Counter register */
Madan Mohan Koyyalamudia53c4dc2012-11-13 10:35:42 -0800122#define WLANDXE_DMA_COUNTER_0 (WLANDXE_REGISTER_BASE_ADDRESS + 0x200)
123#define WLANDXE_DMA_COUNTER_1 (WLANDXE_REGISTER_BASE_ADDRESS + 0x204)
124#define WLANDXE_DMA_COUNTER_2 (WLANDXE_REGISTER_BASE_ADDRESS + 0x208)
125#define WLANDXE_DMA_COUNTER_3 (WLANDXE_REGISTER_BASE_ADDRESS + 0x20C)
126#define WLANDXE_DMA_COUNTER_4 (WLANDXE_REGISTER_BASE_ADDRESS + 0x210)
127#define WLANDXE_DMA_COUNTER_5 (WLANDXE_REGISTER_BASE_ADDRESS + 0x214)
128#define WLANDXE_DMA_COUNTER_6 (WLANDXE_REGISTER_BASE_ADDRESS + 0x218)
Jeff Johnson295189b2012-06-20 16:38:30 -0700129
Madan Mohan Koyyalamudia53c4dc2012-11-13 10:35:42 -0800130#define WLANDXE_ENGINE_STAT_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x64)
131#define WLANDXE_BMU_SB_QDAT_AV_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x5c)
Jeff Johnson295189b2012-06-20 16:38:30 -0700132
133/* Channel Base address */
Madan Mohan Koyyalamudia53c4dc2012-11-13 10:35:42 -0800134#define WLANDXE_DMA_CHAN0_BASE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x400)
135#define WLANDXE_DMA_CHAN1_BASE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x440)
136#define WLANDXE_DMA_CHAN2_BASE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x480)
137#define WLANDXE_DMA_CHAN3_BASE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x4C0)
138#define WLANDXE_DMA_CHAN4_BASE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x500)
139#define WLANDXE_DMA_CHAN5_BASE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x540)
140#define WLANDXE_DMA_CHAN6_BASE_ADDRESS (WLANDXE_REGISTER_BASE_ADDRESS + 0x580)
Jeff Johnson295189b2012-06-20 16:38:30 -0700141
142/* Channel specific register offset */
143#define WLANDXE_DMA_CH_CTRL_REG 0x0000
144#define WLANDXE_DMA_CH_STATUS_REG 0x0004
145#define WLANDXE_DMA_CH_SZ_REG 0x0008
146#define WLANDXE_DMA_CH_SADRL_REG 0x000C
147#define WLANDXE_DMA_CH_SADRH_REG 0x0010
148#define WLANDXE_DMA_CH_DADRL_REG 0x0014
149#define WLANDXE_DMA_CH_DADRH_REG 0x0018
150#define WLANDXE_DMA_CH_DESCL_REG 0x001C
151#define WLANDXE_DMA_CH_DESCH_REG 0x0020
152#define WLANDXE_DMA_CH_LST_DESCL_REG 0x0024
153#define WLANDXE_DMA_CH_LST_DESCH_REG 0x0028
154#define WLANDXE_DMA_CH_BD_REG 0x002C
155#define WLANDXE_DMA_CH_HEAD_REG 0x0030
156#define WLANDXE_DMA_CH_TAIL_REG 0x0034
157#define WLANDXE_DMA_CH_PDU_REG 0x0038
158#define WLANDXE_DMA_CH_TSTMP_REG 0x003C
159
160/* Common CSR Register Contorol mask and offset */
Leo Chang00708f62013-12-03 20:21:51 -0800161#ifdef WCN_PRONTO
162#define WLANDXE_DMA_CSR_RESERVED_MASK 0xFFFF0000
163#define WLANDXE_DMA_CSR_RESERVED_OFFSET 0x10
164#define WLANDXE_DMA_CSR_RESERVED_DEFAULT 0x0
165
166#define WLANDXE_DMA_CSR_H2H_SYNC_EN_MASK 0x8000
167#define WLANDXE_DMA_CSR_H2H_SYNC_EN_OFFSET 0x0F
168#define WLANDXE_DMA_CSR_H2H_SYNC_EN_DEFAULT 0x0
169
170#define WLANDXE_DMA_CSR_PAUSED_MASK 0x4000
171#define WLANDXE_DMA_CSR_PAUSED_OFFSET 0x0E
172#define WLANDXE_DMA_CSR_PAUSED_DEFAULT 0x0
173
174#define WLANDXE_DMA_CSR_ECTR_EN_MASK 0x2000
175#define WLANDXE_DMA_CSR_ECTR_EN_OFFSET 0x0D
176#define WLANDXE_DMA_CSR_ECTR_EN_DEFAULT 0x2000
177
178#define WLANDXE_DMA_CSR_B2H_TSTMP_OFF_MASK 0x1F00
179#define WLANDXE_DMA_CSR_B2H_TSTMP_OFF_OFFSET 0x08
180#define WLANDXE_DMA_CSR_B2H_TSTMP_OFF_DEFAULT 0x0F00
181
182#define WLANDXE_DMA_CSR_H2B_TSTMP_OFF_MASK 0xF8
183#define WLANDXE_DMA_CSR_H2B_TSTMP_OFF_OFFSET 0x03
184#define WLANDXE_DMA_CSR_H2B_TSTMP_OFF_DEFAULT 0x28
185
186#define WLANDXE_DMA_CSR_TSTMP_EN_MASK 0x04
187#define WLANDXE_DMA_CSR_TSTMP_EN_OFFSET 0x02
188#define WLANDXE_DMA_CSR_TSTMP_EN_DEFAULT 0x0
189
190#define WLANDXE_DMA_CCU_DXE_RESET_MASK 0x4
191#else
Jeff Johnson295189b2012-06-20 16:38:30 -0700192#define WLANDXE_DMA_CSR_RESERVED_MASK 0xFFFE0000
193#define WLANDXE_DMA_CSR_RESERVED_OFFSET 0x11
194#define WLANDXE_DMA_CSR_RESERVED_DEFAULT 0x0
195
196#define WLANDXE_DMA_CSR_H2H_SYNC_EN_MASK 0x10000
197#define WLANDXE_DMA_CSR_H2H_SYNC_EN_OFFSET 0x10
198#define WLANDXE_DMA_CSR_H2H_SYNC_EN_DEFAULT 0x0
199
200#define WLANDXE_DMA_CSR_PAUSED_MASK 0x8000
201#define WLANDXE_DMA_CSR_PAUSED_OFFSET 0xF
202#define WLANDXE_DMA_CSR_PAUSED_DEFAULT 0x0
203
204#define WLANDXE_DMA_CSR_ECTR_EN_MASK 0x4000
205#define WLANDXE_DMA_CSR_ECTR_EN_OFFSET 0xE
206#define WLANDXE_DMA_CSR_ECTR_EN_DEFAULT 0x4000
207
208#define WLANDXE_DMA_CSR_B2H_TSTMP_OFF_MASK 0x3E00
209#define WLANDXE_DMA_CSR_B2H_TSTMP_OFF_OFFSET 0x9
210#define WLANDXE_DMA_CSR_B2H_TSTMP_OFF_DEFAULT 0xE00
211
212#define WLANDXE_DMA_CSR_H2B_TSTMP_OFF_MASK 0x1F0
213#define WLANDXE_DMA_CSR_H2B_TSTMP_OFF_OFFSET 0x4
214#define WLANDXE_DMA_CSR_H2B_TSTMP_OFF_DEFAULT 0x50
215
216#define WLANDXE_DMA_CSR_TSTMP_EN_MASK 0x8
217#define WLANDXE_DMA_CSR_TSTMP_EN_OFFSET 0x3
218#define WLANDXE_DMA_CSR_TSTMP_EN_DEFAULT 0x0
219
220#define WLANDXE_DMA_CSR_RESET_MASK 0x4
221#define WLANDXE_DMA_CSR_RESET_OFFSET 0x2
222#define WLANDXE_DMA_CSR_RESET_DEFAULT 0x0
Leo Chang00708f62013-12-03 20:21:51 -0800223#endif /* WCN_PRONTO */
Jeff Johnson295189b2012-06-20 16:38:30 -0700224
225#define WLANDXE_DMA_CSR_PAUSE_MASK 0x2
226#define WLANDXE_DMA_CSR_PAUSE_OFFSET 0x1
227#define WLANDXE_DMA_CSR_PAUSE_DEFAULT 0x0
228
229#define WLANDXE_DMA_CSR_EN_MASK 0x1
230#define WLANDXE_DMA_CSR_EN_OFFSET 0x0
231#define WLANDXE_DMA_CSR_EN_DEFAULT 0x0
Leo Chang00708f62013-12-03 20:21:51 -0800232
233/* DXE CSR Master enable register value */
234#define WLANDXE_CSR_DEFAULT_ENABLE (WLANDXE_DMA_CSR_H2H_SYNC_EN_MASK | \
235 WLANDXE_DMA_CSR_ECTR_EN_MASK | \
236 WLANDXE_DMA_CSR_EN_MASK)
Jeff Johnson295189b2012-06-20 16:38:30 -0700237
238/* Channel CTRL Register Control mask and offset */
239#define WLANDXE_CH_CTRL_RSVD_MASK 0x80000000
240#define WLANDXE_CH_CTRL_RSVD_OFFSET 0x1F
241#define WLANDXE_CH_CTRL_RSVD_DEFAULT 0x0
242
243#define WLANDXE_CH_CTRL_SWAP_MASK 0x80000000
244
245#define WLANDXE_CH_CTRL_BDT_IDX_MASK 0x60000000
246#define WLANDXE_CH_CTRL_BDT_IDX_OFFSET 0x1D
247#define WLANDXE_CH_CTRL_BDT_IDX_DEFAULT 0x0
248
249#define WLANDXE_CH_CTRL_DFMT_MASK 0x10000000
250#define WLANDXE_CH_CTRL_DFMT_OFFSET 0x1C
251#define WLANDXE_CH_CTRL_DFMT_DEFAULT 0x10000000
252#define WLANDXE_CH_CTRL_DFMT_ESHORT 0x0
253#define WLANDXE_CH_CTRL_DFMT_ELONG 0x1
254
255#define WLANDXE_CH_CTRL_ABORT_MASK 0x8000000
256#define WLANDXE_CH_CTRL_ABORT_OFFSET 0x1B
257#define WLANDXE_CH_CTRL_ABORT_DEFAULT 0x0
258
259#define WLANDXE_CH_CTRL_ENDIAN_MASK 0x4000000
260
261#define WLANDXE_CH_CTRL_CTR_SEL_MASK 0x3C00000
262#define WLANDXE_CH_CTRL_CTR_SEL_OFFSET 0x16
263#define WLANDXE_CH_CTRL_CTR_SEL_DEFAULT 0x0
264
265#define WLANDXE_CH_CTRL_EDVEN_MASK 0x200000
266#define WLANDXE_CH_CTRL_EDVEN_OFFSET 0x15
267#define WLANDXE_CH_CTRL_EDVEN_DEFAULT 0x0
268
269#define WLANDXE_CH_CTRL_EDEN_MASK 0x100000
270#define WLANDXE_CH_CTRL_EDEN_OFFSET 0x14
271#define WLANDXE_CH_CTRL_EDEN_DEFAULT 0x0
272
273#define WLANDXE_CH_CTRL_INE_DONE_MASK 0x80000
274#define WLANDXE_CH_CTRL_INE_DONE_OFFSET 0x13
275#define WLANDXE_CH_CTRL_INE_DONE_DEFAULT 0x0
276
277#define WLANDXE_CH_CTRL_INE_ERR_MASK 0x40000
278#define WLANDXE_CH_CTRL_INE_ERR_OFFSET 0x12
279#define WLANDXE_CH_CTRL_INE_ERR_DEFAULT 0x0
280
281#define WLANDXE_CH_CTRL_INE_ED_MASK 0x20000
282#define WLANDXE_CH_CTRL_INE_ED_OFFSET 0x11
283#define WLANDXE_CH_CTRL_INE_ED_DEFAULT 0x0
284
285#define WLANDXE_CH_CTRL_STOP_MASK 0x10000
286#define WLANDXE_CH_CTRL_STOP_OFFSET 0x10
287#define WLANDXE_CH_CTRL_STOP_DEFAULT 0x0
288
289#define WLANDXE_CH_CTRL_PRIO_MASK 0xE000
290#define WLANDXE_CH_CTRL_PRIO_OFFSET 0xD
291#define WLANDXE_CH_CTRL_PRIO_DEFAULT 0x0
292
293#define WLANDXE_CH_CTRL_BTHLD_SEL_MASK 0x1E00
294#define WLANDXE_CH_CTRL_BTHLD_SEL_OFFSET 0x9
295#define WLANDXE_CH_CTRL_BTHLD_SEL_DEFAULT 0x600
296#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD0 0x0
297#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD1 0x1
298#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD2 0x2
299#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD3 0x3
300#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD4 0x4
301#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD5 0x5
302#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD6 0x6
303#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD7 0x7
304#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD8 0x8
305#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD9 0x9
306#define WLANDXE_CH_CTRL_BTHLD_SEL_ETHLD10 0xA
307#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD11 0xB
308#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD12 0xC
309#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD13 0xD
310#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD14 0xE
311#define WLANDXE_CH_CTRL_BTHLD_SEL_ERSVD15 0xF
312
313#define WLANDXE_CH_CTRL_PDU_REL_MASK 0x100
314#define WLANDXE_CH_CTRL_PDU_REL_OFFSET 0x8
315#define WLANDXE_CH_CTRL_PDU_REL_DEFAULT 0x100
316#define WLANDXE_CH_CTRL_PDU_REL_EKEEP 0x0
317#define WLANDXE_CH_CTRL_PDU_REL_ERELEASE 0x1
318
319#define WLANDXE_CH_CTRL_PIQ_MASK 0x80
320#define WLANDXE_CH_CTRL_PIQ_OFFSET 0x7
321#define WLANDXE_CH_CTRL_PIQ_DEFAULT 0x0
322#define WLANDXE_CH_CTRL_PIQ_EFLAT 0x0
323#define WLANDXE_CH_CTRL_PIQ_EQUEUE 0x1
324
325#define WLANDXE_CH_CTRL_DIQ_MASK 0x40
326#define WLANDXE_CH_CTRL_DIQ_OFFSET 0x6
327#define WLANDXE_CH_CTRL_DIQ_DEFAULT 0x0
328#define WLANDXE_CH_CTRL_DIQ_EFLAT 0x0
329#define WLANDXE_CH_CTRL_DIQ_EQUEUE 0x1
330
331#define WLANDXE_CH_CTRL_SIQ_MASK 0x20
332#define WLANDXE_CH_CTRL_SIQ_OFFSET 0x5
333#define WLANDXE_CH_CTRL_SIQ_DEFAULT 0x0
334#define WLANDXE_CH_CTRL_SIQ_EFLAT 0x0
335#define WLANDXE_CH_CTRL_SIQ_EQUEUE 0x1
336
337#define WLANDXE_CH_CTRL_BDH_MASK 0x10
338#define WLANDXE_CH_CTRL_BDH_OFFSET 0x4
339#define WLANDXE_CH_CTRL_BDH_DEFAULT 0x0
340
341#define WLANDXE_CH_CTRL_EOP_MASK 0x8
342#define WLANDXE_CH_CTRL_EOP_OFFSET 0x3
343#define WLANDXE_CH_CTRL_EOP_DEFAULT 0x8
344
345#define WLANDXE_CH_CTRL_XTYPE_MASK 0x6
346#define WLANDXE_CH_CTRL_XTYPE_OFFSET 0x1
347#define WLANDXE_CH_CTRL_XTYPE_DEFAULT 0x0
348#define WLANDXE_CH_CTRL_XTYPE_EH2H 0x0
349#define WLANDXE_CH_CTRL_XTYPE_EB2B 0x1
350#define WLANDXE_CH_CTRL_XTYPE_EH2B 0x2
351#define WLANDXE_CH_CTRL_XTYPE_EB2H 0x3
352
353#define WLANDXE_CH_CTRL_DONE_MASK 0x4
354
355#define WLANDXE_CH_CTRL_ERR_MASK 0x20
356
357#define WLANDXE_CH_CTRL_MASKED_MASK 0x8
358
359#define WLANDXE_CH_CTRL_EN_MASK 0x1
360#define WLANDXE_CH_CTRL_EN_OFFSET 0x0
361#define WLANDXE_CH_CTRL_EN_DEFAULT 0x0
362#define WLANDXE_CH_CTRL_DEFAULT 0x10000708
363
364
365#define WLANDXE_DESC_CTRL_VALID 0x00000001
366#define WLANDXE_DESC_CTRL_XTYPE_MASK 0x00000006
367#define WLANDXE_DESC_CTRL_XTYPE_H2H 0x00000000
368#define WLANDXE_DESC_CTRL_XTYPE_B2B 0x00000002
369#define WLANDXE_DESC_CTRL_XTYPE_H2B 0x00000004
370#define WLANDXE_DESC_CTRL_XTYPE_B2H 0x00000006
371#define WLANDXE_DESC_CTRL_EOP 0x00000008
372#define WLANDXE_DESC_CTRL_BDH 0x00000010
373#define WLANDXE_DESC_CTRL_SIQ 0x00000020
374#define WLANDXE_DESC_CTRL_DIQ 0x00000040
375#define WLANDXE_DESC_CTRL_PIQ 0x00000080
376#define WLANDXE_DESC_CTRL_PDU_REL 0x00000100
377#define WLANDXE_DESC_CTRL_BTHLD_SEL 0x00001E00
378#define WLANDXE_DESC_CTRL_PRIO 0x0000E000
379#define WLANDXE_DESC_CTRL_STOP 0x00010000
380#define WLANDXE_DESC_CTRL_INT 0x00020000
381#define WLANDXE_DESC_CTRL_BDT_SWAP 0x00100000
382#define WLANDXE_DESC_CTRL_ENDIANNESS 0x00200000
383#define WLANDXE_DESC_CTRL_DFMT 0x10000000
384#define WLANDXE_DESC_CTRL_RSVD 0xfffc0000
385/* CSR Register Control mask and offset */
386
387#define WLANDXE_CH_STAT_INT_DONE_MASK 0x00008000
388#define WLANDXE_CH_STAT_INT_ERR_MASK 0x00004000
389#define WLANDXE_CH_STAT_INT_ED_MASK 0x00002000
Mihir Shete79d6b582014-03-12 17:54:07 +0530390#define WLANDXE_CH_STAT_ERR_CODE_MASK 0x000007c0
391#define WLANDXE_CH_STAT_ERR_CODE_OFFSET (6)
Jeff Johnson295189b2012-06-20 16:38:30 -0700392
393#define WLANDXE_CH_STAT_MASKED_MASK 0x00000008
Leo Chang094ece82013-04-23 17:57:41 -0700394#define WLANDXE_CH_STAT_ENABLED_MASK 0x00000001
Jeff Johnsone7245742012-09-05 17:12:55 -0700395/* Till here WCNSS DXE register information
Jeff Johnson295189b2012-06-20 16:38:30 -0700396 * This is temporary definition location to make compile and unit test
397 * If official msmreg.h integrated, this part will be eliminated */
398
399/* Interrupt control channel mask */
400#define WLANDXE_INT_MASK_CHAN_0 0x00000001
401#define WLANDXE_INT_MASK_CHAN_1 0x00000002
402#define WLANDXE_INT_MASK_CHAN_2 0x00000004
403#define WLANDXE_INT_MASK_CHAN_3 0x00000008
404#define WLANDXE_INT_MASK_CHAN_4 0x00000010
405#define WLANDXE_INT_MASK_CHAN_5 0x00000020
406#define WLANDXE_INT_MASK_CHAN_6 0x00000040
407
408#define WLANDXE_TX_LOW_RES_THRESHOLD (5)
409
Mihir Shete79d6b582014-03-12 17:54:07 +0530410typedef enum {
411 WLANDXE_ERROR_NONE = 0,
412 WLANDXE_ERROR_SAHB_ERR = 1,
413 WLANDXE_ERROR_H2H_RD_BUS_ERR = 2,
414 WLANDXE_ERROR_H2H_WR_BUS_ERR = 3,
415 WLANDXE_ERROR_PRG_INV_XTYPE = 4,
416 WLANDXE_ERROR_BERR_POPWQ = 5,
417 WLANDXE_ERROR_BERR_PUSHWQ = 6,
418 WLANDXE_ERROR_BERR_RLSS = 7,
419 WLANDXE_ERROR_BERR_GETPDU = 8,
420 WLANDXE_ERROR_PRG_INV_WQ = 9,
421 WLANDXE_ERROR_PRG_INV_H2H_SRC_QID = 10,
422 WLANDXE_ERROR_PRG_INV_H2H_DST_QID = 11,
423 WLANDXE_ERROR_PRG_INV_B2H_SRC_QID = 12,
424 WLANDXE_ERROR_PRG_INV_B2H_DST_QID = 13,
425 WLANDXE_ERROR_PRG_INV_B2H_SRC_IDX = 14,
426 WLANDXE_ERROR_PRG_INV_H2B_SRC_QID = 15,
427 WLANDXE_ERROR_PRG_INV_H2B_DST_QID = 16,
428 WLANDXE_ERROR_PRG_INV_H2B_DST_IDX = 17,
429 WLANDXE_ERROR_PRG_INV_H2B_SZ = 18,
430 WLANDXE_ERROR_PRG_INV_SADR = 19,
431 WLANDXE_ERROR_PRG_INV_DADR = 20,
432 WLANDXE_ERROR_PRG_INV_EDADR = 21,
433 WLANDXE_ERROR_PRG_INV_SRC_WQID = 22,
434 WLANDXE_ERROR_PRG_INV_DST_WQID = 23,
435 WLANDXE_ERROR_PRG_XTYPE_MSMTCH = 24,
436 WLANDXE_ERROR_PKT_ERR = 25,
437 WLANDXE_ERROR_ABORT = 26,
438 WLANDXE_ERROR_PDU_CNT_OVFL = 27,
439}WLANDXE_ErrorCode;
440
Jeff Johnson295189b2012-06-20 16:38:30 -0700441/* DXE Descriptor Endian swap macro */
442#ifdef WLANDXE_ENDIAN_SWAP_ENABLE
443#define WLANDXE_U32_SWAP_ENDIAN(a) (((a & 0x000000FF) << 24) | \
444 ((a & 0x0000FF00) << 8) | \
445 ((a & 0x00FF0000) >> 8) | \
446 ((a & 0xFF000000) >> 24))
447#else
448/* If DXE HW does not need endian swap, DO NOTHING */
449#define WLANDXE_U32_SWAP_ENDIAN(a) (a)
450#endif /* WLANDXE_ENDIAN_SWAP_ENABLE */
451
452/* Log Definition will be mappped with PAL MSG */
453#define HDXE_MSG WPAL_TRACE
454#define HDXE_ASSERT(a) VOS_ASSERT(a)
455
Siddharth Bhalb7e8e882014-10-10 16:27:47 +0530456#define WLANDXE_PRONTO_TX_WQ 0x6
Jeff Johnson295189b2012-06-20 16:38:30 -0700457/*----------------------------------------------------------------------------
458 * Type Declarations
459 * -------------------------------------------------------------------------*/
460/* DMA Channel Q handle Method type
461 * Linear handle or circular */
462typedef enum
463{
464 WLANDXE_CHANNEL_HANDLE_LINEAR,
465 WLANDXE_CHANNEL_HANDLE_CIRCULA
466}WLANDXE_ChannelHandleType;
467
468typedef enum
469{
470 WLANDXE_TX_COMP_INT_LR_THRESHOLD,
471 WLANDXE_TX_COMP_INT_PER_K_FRAMES,
472 WLANDXE_TX_COMP_INT_TIMER
473} WLANDXE_TXCompIntEnableType;
474
475typedef enum
476{
477 WLANDXE_SHORT_DESCRIPTOR,
478 WLANDXE_LONG_DESCRIPTOR
479} WLANDXE_DescriptorType;
480
481typedef enum
482{
483 WLANDXE_DMA_CHANNEL_0,
484 WLANDXE_DMA_CHANNEL_1,
485 WLANDXE_DMA_CHANNEL_2,
486 WLANDXE_DMA_CHANNEL_3,
487 WLANDXE_DMA_CHANNEL_4,
488 WLANDXE_DMA_CHANNEL_5,
489 WLANDXE_DMA_CHANNEL_6,
490 WLANDXE_DMA_CHANNEL_MAX
491} WLANDXE_DMAChannelType;
492
493/** DXE HW Long Descriptor format */
494typedef struct
495{
496 wpt_uint32 srcMemAddrL;
497 wpt_uint32 srcMemAddrH;
498 wpt_uint32 dstMemAddrL;
499 wpt_uint32 dstMemAddrH;
500 wpt_uint32 phyNextL;
501 wpt_uint32 phyNextH;
502} WLANDXE_LongDesc;
503
504
505/** DXE HW Short Descriptor format */
506typedef struct tDXEShortDesc
507{
508 wpt_uint32 srcMemAddrL;
509 wpt_uint32 dstMemAddrL;
510 wpt_uint32 phyNextL;
511} WLANDXE_ShortDesc;
512
513
514/* DXE Descriptor Data Type
515 * Pick up from GEN5 */
516typedef struct
517{
518 union
519 {
520 wpt_uint32 ctrl;
521 wpt_uint32 valid :1; //0 = DMA stop, 1 = DMA continue with this descriptor
522 wpt_uint32 transferType :2; //0 = Host to Host space
523 wpt_uint32 eop :1; //End of Packet
524 wpt_uint32 bdHandling :1; //if transferType = Host to BMU, then 0 means first 128 bytes contain BD, and 1 means create new empty BD
525 wpt_uint32 siq :1; // SIQ
526 wpt_uint32 diq :1; // DIQ
527 wpt_uint32 pduRel :1; //0 = don't release BD and PDUs when done, 1 = release them
528 wpt_uint32 bthldSel :4; //BMU Threshold Select
529 wpt_uint32 prio :3; //Specifies the priority level to use for the transfer
530 wpt_uint32 stopChannel :1; //1 = DMA stops processing further, channel requires re-enabling after this
531 wpt_uint32 intr :1; //Interrupt on Descriptor Done
532 wpt_uint32 rsvd :1; //reserved
533 wpt_uint32 transferSize :14; //14 bits used - ignored for BMU transfers, only used for host to host transfers?
534 } descCtrl;
535 wpt_uint32 xfrSize;
536 union
537 {
538 WLANDXE_LongDesc dxe_long_desc;
539 WLANDXE_ShortDesc dxe_short_desc;
540 }dxedesc;
541} WLANDXE_DescType;
542
543typedef struct
544{
545 void *nextCtrlBlk;
546 wpt_packet *xfrFrame;
547 WLANDXE_DescType *linkedDesc;
Arun Kumar Khandavalli6119f7d2013-12-18 00:16:17 +0530548 wpt_uint32 linkedDescPhyAddr;
Jeff Johnson295189b2012-06-20 16:38:30 -0700549 wpt_uint32 ctrlBlkOrder;
550#ifdef FEATURE_R33D
551 wpt_uint32 shadowBufferVa;
552#endif /* FEATURE_R33D */
553} WLANDXE_DescCtrlBlkType;
554
555typedef struct
556{
557 /* Q handle method, linear or ring */
558 WLANDXE_ChannelHandleType queueMethod;
559
560 /* Number of descriptors for DXE that can be queued for transfer at one time */
561 wpt_uint32 nDescs;
562
563 /* Maximum number of receive buffers of shared memory to use for this pipe */
564 wpt_uint32 nRxBuffers;
565
566 /* Reference WQ - for H2B and B2H only */
567 wpt_uint32 refWQ;
568
569 /* for usb only, endpoint info for CH_SADR or CH_DADR */
570 wpt_uint32 refEP;
571
572 /* H2B(Tx), B2H(Rx), H2H(SRAM<->HostMem R/W) */
573 wpt_uint32 xfrType;
574
575 /* Channel Priority 7(Highest) - 0(Lowest) */
576 wpt_uint32 chPriority;
577
578 /* 1 = BD attached to frames for this pipe */
579 wpt_boolean bdPresent;
580
581 wpt_uint32 chk_size;
582
583 wpt_uint32 bmuThdSel;
584
585 /* Added in Gen5 for Prefetch */
586 wpt_boolean useLower4G;
587
588 wpt_boolean useShortDescFmt;
589 /* Till here inharited from GEN5 code */
590 /* From now on, added for PRIMA */
591} WLANDXE_ChannelConfigType;
592
593typedef struct
594{
595 wpt_uint32 chDXEBaseAddr;
596 wpt_uint32 chDXEStatusRegAddr;
597 wpt_uint32 chDXEDesclRegAddr;
598 wpt_uint32 chDXEDeschRegAddr;
599 wpt_uint32 chDXELstDesclRegAddr;
600 wpt_uint32 chDXECtrlRegAddr;
601 wpt_uint32 chDXESzRegAddr;
602 wpt_uint32 chDXEDadrlRegAddr;
603 wpt_uint32 chDXEDadrhRegAddr;
604 wpt_uint32 chDXESadrlRegAddr;
605 wpt_uint32 chDXESadrhRegAddr;
606} WLANDXE_ChannelRegisterType;
607
608typedef struct
609{
610 wpt_uint32 refWQ_swapped;
611 wpt_boolean chEnabled;
612 wpt_boolean chConfigured;
613 wpt_uint32 channel;
614 wpt_uint32 chk_size_mask;
615 wpt_uint32 bmuThdSel_mask;
616 wpt_uint32 cw_ctrl_read;
617 wpt_uint32 cw_ctrl_write;
618 wpt_uint32 cw_ctrl_write_valid;
619 wpt_uint32 cw_ctrl_write_eop;
620 wpt_uint32 cw_ctrl_write_eop_int;
621 wpt_uint32 chan_mask;
622 wpt_uint32 chan_mask_read_disable;
623 wpt_uint32 intMask;
624} WLANDXE_ChannelExConfigType;
625
626typedef struct
627{
628 WDTS_ChannelType channelType;
629 WLANDXE_DescCtrlBlkType *headCtrlBlk;
630 WLANDXE_DescCtrlBlkType *tailCtrlBlk;
631#if !(defined(FEATURE_R33D) || defined(WLANDXE_TEST_CHANNEL_ENABLE))
632 WLANDXE_DescType *descriptorAllocation;
633#endif
634 WLANDXE_DescType *DescBottomLoc;
Arun Kumar Khandavalli6119f7d2013-12-18 00:16:17 +0530635 wpt_uint32 descBottomLocPhyAddr;
Jeff Johnson295189b2012-06-20 16:38:30 -0700636 wpt_uint32 numDesc;
637 wpt_uint32 numFreeDesc;
638 wpt_uint32 numRsvdDesc;
639 wpt_uint32 maxFrameSize;
640 wpt_uint32 numFragmentCurrentChain;
641 wpt_uint32 numFrameBeforeInt;
642 wpt_uint32 numTotalFrame;
Mihir Sheted183cef2014-09-26 19:17:56 +0530643 wpt_uint32 doneIntDisabled;
Jeff Johnson295189b2012-06-20 16:38:30 -0700644 wpt_mutex dxeChannelLock;
645 wpt_boolean hitLowResource;
646 WLANDXE_ChannelConfigType channelConfig;
647 WLANDXE_ChannelRegisterType channelRegister;
648 WLANDXE_ChannelExConfigType extraConfig;
649 WLANDXE_DMAChannelType assignedDMAChannel;
650 wpt_uint64 rxDoneHistogram;
Madan Mohan Koyyalamudiea777012012-10-31 14:22:34 -0700651 wpt_timer healthMonitorTimer;
652 wpt_msg *healthMonitorMsg;
Jeff Johnson295189b2012-06-20 16:38:30 -0700653} WLANDXE_ChannelCBType;
654
655typedef struct
656{
657 WLANDXE_TXCompIntEnableType txIntEnable;
658 unsigned int txLowResourceThreshold_LoPriCh;
659 unsigned int txLowResourceThreshold_HiPriCh;
660 unsigned int rxLowResourceThreshold;
661 unsigned int txInterruptEnableFrameCount;
662 unsigned int txInterruptEnablePeriod;
663} WLANDXE_TxCompIntConfigType;
664
665typedef struct
666{
667 WLANDXE_ChannelCBType dxeChannel[WDTS_CHANNEL_MAX];
668 WLANDXE_RxFrameReadyCbType rxReadyCB;
669 WLANDXE_TxCompleteCbType txCompCB;
670 WLANDXE_LowResourceCbType lowResourceCB;
671 WLANDXE_TxCompIntConfigType txCompInt;
672 void *clientCtxt;
673 wpt_uint32 interruptPath;
674 wpt_msg *rxIsrMsg;
675 wpt_msg *txIsrMsg;
676 wpt_msg *rxPktAvailMsg;
677 volatile WLANDXE_PowerStateType hostPowerState;
678 wpt_boolean rxIntDisabledByIMPS;
679 wpt_boolean txIntDisabledByIMPS;
680 WLANDXE_SetPowerStateCbType setPowerStateCb;
681 volatile WLANDXE_RivaPowerStateType rivaPowerState;
682 wpt_boolean ringNotEmpty;
683 wpt_boolean txIntEnable;
684 wpt_uint32 txCompletedFrames;
685 wpt_uint8 ucTxMsgCnt;
686 wpt_uint16 lastKickOffDxe;
687 wpt_uint32 dxeCookie;
688 wpt_packet *freeRXPacket;
689 wpt_boolean rxPalPacketUnavailable;
Jeff Johnsone7245742012-09-05 17:12:55 -0700690 wpt_boolean driverReloadInProcessing;
Leo Changac1d3612013-07-01 15:15:51 -0700691 wpt_boolean smsmToggled;
Mihir Shete68ed77a2014-10-10 10:47:12 +0530692 wpt_boolean txRingsEmpty;
Mihir Shete44547fb2014-03-10 14:15:42 +0530693#ifdef WLAN_DXE_LOW_RESOURCE_TIMER
Leo Chang72cdfd32013-10-17 20:36:30 -0700694 wpt_timer rxResourceAvailableTimer;
Mihir Shete44547fb2014-03-10 14:15:42 +0530695#endif
Mihir Shetefdc9f532014-01-09 15:03:02 +0530696 wpt_timer dxeSSRTimer;
Jeff Johnson295189b2012-06-20 16:38:30 -0700697} WLANDXE_CtrlBlkType;
698
699/*==========================================================================
700 @ Function Name
701 dxeCommonDefaultConfig
702
703 @ Description
704
705 @ Parameters
706 WLANDXE_CtrlBlkType *dxeCtrlBlk,
707 DXE host driver main control block
708
709 @ Return
710 wpt_status
711
712===========================================================================*/
713extern wpt_status dxeCommonDefaultConfig
714(
715 WLANDXE_CtrlBlkType *dxeCtrlBlk
716);
717
718/*==========================================================================
719 @ Function Name
720 dxeChannelDefaultConfig
721
722 @ Description
723 Get defualt configuration values from pre defined structure
724 All the channels must have it's own configurations
725
726 @ Parameters
727 WLANDXE_CtrlBlkType *dxeCtrlBlk,
728 DXE host driver main control block
729 WLANDXE_ChannelCBType *channelEntry
730 Channel specific control block
731
732 @ Return
733 wpt_status
734
735===========================================================================*/
736extern wpt_status dxeChannelDefaultConfig
737(
738 WLANDXE_CtrlBlkType *dxeCtrlBlk,
739 WLANDXE_ChannelCBType *channelEntry
740);
741
742#endif /* WLAN_QCT_DXE_I_H */