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