blob: d706a6539dd091f0ad928d3002cf3f63a646c4cb [file] [log] [blame]
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -08001/*
Houston Hoffmandbfb7ad2015-11-10 16:45:19 -08002 * Copyright (c) 2014-2016 The Linux Foundation. All rights reserved.
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -08003 *
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/*
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
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -080028/**
Chouhan, Anurag57763182016-03-03 18:57:27 +053029 * DOC: qdf_types.h
30 * QCA driver framework (QDF) basic type definitions
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -080031 */
32
Chouhan, Anurag57763182016-03-03 18:57:27 +053033#if !defined(__QDF_TYPES_H)
34#define __QDF_TYPES_H
35
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -080036/* Include Files */
Chouhan, Anurag57763182016-03-03 18:57:27 +053037#include <i_qdf_types.h>
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -080038
39/* Preprocessor definitions and constants */
Chouhan, Anurag57763182016-03-03 18:57:27 +053040#define QDF_MAX_SGLIST 4
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -080041
42/**
Chouhan, Anurag57763182016-03-03 18:57:27 +053043 * struct qdf_sglist - scatter-gather list
44 * @nsegs: total number of segments
45 * struct __sg_segs - scatter-gather segment list
46 * @vaddr: Virtual address of the segment
47 * @len: Length of the segment
48 */
49typedef struct qdf_sglist {
50 uint32_t nsegs;
51 struct __sg_segs {
52 uint8_t *vaddr;
53 uint32_t len;
54 } sg_segs[QDF_MAX_SGLIST];
55} qdf_sglist_t;
56
57#define QDF_MAX_SCATTER __QDF_MAX_SCATTER
58
59/**
Chouhan, Anurag57763182016-03-03 18:57:27 +053060 * QDF_SWAP_U16 - swap input u16 value
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -080061 * @_x: variable to swap
62 */
Chouhan, Anurag57763182016-03-03 18:57:27 +053063#define QDF_SWAP_U16(_x) \
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -080064 ((((_x) << 8) & 0xFF00) | (((_x) >> 8) & 0x00FF))
65
66/**
Chouhan, Anurag57763182016-03-03 18:57:27 +053067 * QDF_SWAP_U32 - swap input u32 value
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -080068 * @_x: variable to swap
69 */
Chouhan, Anurag57763182016-03-03 18:57:27 +053070#define QDF_SWAP_U32(_x) \
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -080071 (((((_x) << 24) & 0xFF000000) | (((_x) >> 24) & 0x000000FF)) | \
72 ((((_x) << 8) & 0x00FF0000) | (((_x) >> 8) & 0x0000FF00)))
73
Chouhan, Anurag57763182016-03-03 18:57:27 +053074/* ticks per second */
75#define QDF_TICKS_PER_SECOND (1000)
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -080076
77/**
Chouhan, Anurag57763182016-03-03 18:57:27 +053078 * QDF_ARRAY_SIZE - get array size
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -080079 * @_arr: array variable name
80 */
Chouhan, Anurag57763182016-03-03 18:57:27 +053081#define QDF_ARRAY_SIZE(_arr) (sizeof(_arr) / sizeof((_arr)[0]))
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -080082
Chouhan, Anurag57763182016-03-03 18:57:27 +053083#define QDF_MAX_SCATTER __QDF_MAX_SCATTER
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -080084
85/**
Chouhan, Anurag57763182016-03-03 18:57:27 +053086 * qdf_packed - denotes structure is packed.
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -080087 */
Chouhan, Anurag57763182016-03-03 18:57:27 +053088#define qdf_packed __qdf_packed
89
90typedef void *qdf_net_handle_t;
91
92typedef void *qdf_netlink_handle_t;
93typedef void *qdf_drv_handle_t;
94typedef void *qdf_os_handle_t;
95typedef void *qdf_pm_t;
96
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -080097
98/**
Chouhan, Anurag57763182016-03-03 18:57:27 +053099 * typedef qdf_handle_t - handles opaque to each other
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800100 */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530101typedef void *qdf_handle_t;
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800102
103/**
Chouhan, Anurag57763182016-03-03 18:57:27 +0530104 * typedef qdf_device_t - Platform/bus generic handle.
105 * Used for bus specific functions.
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800106 */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530107typedef __qdf_device_t qdf_device_t;
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800108
109/**
Chouhan, Anurag57763182016-03-03 18:57:27 +0530110 * typedef qdf_size_t - size of an object
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800111 */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530112typedef __qdf_size_t qdf_size_t;
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800113
114/**
Chouhan, Anurag57763182016-03-03 18:57:27 +0530115 * typedef __qdf_off_t - offset for API's that need them.
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800116 */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530117typedef __qdf_off_t qdf_off_t;
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800118
119/**
Chouhan, Anurag57763182016-03-03 18:57:27 +0530120 * typedef qdf_dma_map_t - DMA mapping object.
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800121 */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530122typedef __qdf_dma_map_t qdf_dma_map_t;
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800123
124/**
Chouhan, Anurag57763182016-03-03 18:57:27 +0530125 * tyepdef qdf_dma_addr_t - DMA address.
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800126 */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530127typedef __qdf_dma_addr_t qdf_dma_addr_t;
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800128
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800129/**
Chouhan, Anurag57763182016-03-03 18:57:27 +0530130 * typedef __qdf_dma_size_t - DMA size.
131 */
132typedef __qdf_dma_size_t qdf_dma_size_t;
133
134/**
135 * tyepdef qdf_dma_context_t - DMA context.
136 */
137typedef __qdf_dma_context_t qdf_dma_context_t;
138
139/**
140 * struct qdf_dma_map_info - Information inside a DMA map.
141 * @nsegs: total number mapped segments
142 * struct __dma_segs - Information of physical address.
143 * @paddr: physical(dam'able) address of the segment
144 * @len: length of the segment
145 */
146typedef struct qdf_dma_map_info {
147 uint32_t nsegs;
148 struct __dma_segs {
149 qdf_dma_addr_t paddr;
150 qdf_dma_size_t len;
151 } dma_segs[QDF_MAX_SCATTER];
152} qdf_dmamap_info_t;
153
154#define qdf_iomem_t __qdf_iomem_t;
155
156/**
157 * typedef enum QDF_TIMER_TYPE - QDF timer type
158 * @QDF_TIMER_TYPE_SW: Deferrable SW timer it will not cause CPU to wake up
159 * on expiry
160 * @QDF_TIMER_TYPE_WAKE_APPS: Non deferrable timer which will cause CPU to
161 * wake up on expiry
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800162 */
163typedef enum {
Chouhan, Anurag57763182016-03-03 18:57:27 +0530164 QDF_TIMER_TYPE_SW,
165 QDF_TIMER_TYPE_WAKE_APPS
166} QDF_TIMER_TYPE;
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800167
168/**
Chouhan, Anurag57763182016-03-03 18:57:27 +0530169 * tyepdef qdf_resource_type_t - hw resources
170 * @QDF_RESOURCE_TYPE_MEM: memory resource
171 * @QDF_RESOURCE_TYPE_IO: io resource
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800172 * Define the hw resources the OS has allocated for the device
173 * Note that start defines a mapped area.
174 */
175typedef enum {
Chouhan, Anurag57763182016-03-03 18:57:27 +0530176 QDF_RESOURCE_TYPE_MEM,
177 QDF_RESOURCE_TYPE_IO,
178} qdf_resource_type_t;
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800179
180/**
Chouhan, Anurag57763182016-03-03 18:57:27 +0530181 * tyepdef qdf_resource_t - representation of a h/w resource.
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800182 * @start: start
183 * @end: end
184 * @type: resource type
185 */
186typedef struct {
187 uint64_t start;
188 uint64_t end;
Chouhan, Anurag57763182016-03-03 18:57:27 +0530189 qdf_resource_type_t type;
190} qdf_resource_t;
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800191
192/**
Chouhan, Anurag57763182016-03-03 18:57:27 +0530193 * typedef qdf_dma_dir_t - DMA directions
194 * @QDF_DMA_BIDIRECTIONAL: bidirectional data
195 * @QDF_DMA_TO_DEVICE: data going from device to memory
196 * @QDF_DMA_FROM_DEVICE: data going from memory to device
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800197 */
198typedef enum {
Chouhan, Anurag57763182016-03-03 18:57:27 +0530199 QDF_DMA_BIDIRECTIONAL = __QDF_DMA_BIDIRECTIONAL,
200 QDF_DMA_TO_DEVICE = __QDF_DMA_TO_DEVICE,
201 QDF_DMA_FROM_DEVICE = __QDF_DMA_FROM_DEVICE,
202} qdf_dma_dir_t;
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800203
204/* work queue(kernel thread)/DPC function callback */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530205typedef void (*qdf_defer_fn_t)(void *);
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800206
Chouhan, Anurag57763182016-03-03 18:57:27 +0530207/*
208 * Prototype of the critical region function that is to be
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800209 * executed with spinlock held and interrupt disalbed
210 */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530211typedef bool (*qdf_irqlocked_func_t)(void *);
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800212
213/* Prototype of timer function */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530214typedef void (*qdf_timer_func_t)(void *);
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800215
Chouhan, Anurag57763182016-03-03 18:57:27 +0530216#define qdf_offsetof(type, field) offsetof(type, field)
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800217
218/**
Chouhan, Anurag57763182016-03-03 18:57:27 +0530219 * typedef QDF_MODULE_ID - QDF Module IDs
220 * @QDF_MODULE_ID_TLSHIM: TLSHIM module ID
221 * @QDF_MODULE_ID_WMI: WMI module ID
222 * @QDF_MODULE_ID_HTT: HTT module ID
223 * @QDF_MODULE_ID_RSV4: Reserved
224 * @QDF_MODULE_ID_HDD: HDD module ID
225 * @QDF_MODULE_ID_SME: SME module ID
226 * @QDF_MODULE_ID_PE: PE module ID
227 * @QDF_MODULE_ID_WMA: WMA module ID
228 * @QDF_MODULE_ID_SYS: SYS module ID
229 * @QDF_MODULE_ID_QDF: QDF module ID
230 * @QDF_MODULE_ID_SAP: SAP module ID
231 * @QDF_MODULE_ID_HDD_SOFTAP: HDD SAP module ID
232 * @QDF_MODULE_ID_HDD_DATA: HDD DATA module ID
233 * @QDF_MODULE_ID_HDD_SAP_DATA: HDD SAP DATA module ID
234 * @QDF_MODULE_ID_HIF: HIF module ID
235 * @QDF_MODULE_ID_HTC: HTC module ID
236 * @QDF_MODULE_ID_TXRX: TXRX module ID
237 * @QDF_MODULE_ID_QDF_DEVICE: QDF DEVICE module ID
238 * @QDF_MODULE_ID_CFG: CFG module ID
239 * @QDF_MODULE_ID_BMI: BMI module ID
240 * @QDF_MODULE_ID_EPPING: EPPING module ID
Rajeev Kumar35375002016-04-15 10:57:41 -0700241 * @QDF_MODULE_ID_QVIT: QVIT module ID
Chouhan, Anurag57763182016-03-03 18:57:27 +0530242 * @QDF_MODULE_ID_MAX: Max place holder module ID
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800243 *
244 * These are generic IDs that identify the various modules in the software
245 * system
246 * 0 is unused for historical purposes
247 * 3 & 4 are unused for historical purposes
248 */
249typedef enum {
Chouhan, Anurag57763182016-03-03 18:57:27 +0530250 QDF_MODULE_ID_TLSHIM = 1,
251 QDF_MODULE_ID_WMI = 2,
252 QDF_MODULE_ID_HTT = 3,
253 QDF_MODULE_ID_RSV4 = 4,
254 QDF_MODULE_ID_HDD = 5,
255 QDF_MODULE_ID_SME = 6,
256 QDF_MODULE_ID_PE = 7,
257 QDF_MODULE_ID_WMA = 8,
258 QDF_MODULE_ID_SYS = 9,
259 QDF_MODULE_ID_QDF = 10,
260 QDF_MODULE_ID_SAP = 11,
261 QDF_MODULE_ID_HDD_SOFTAP = 12,
262 QDF_MODULE_ID_HDD_DATA = 14,
263 QDF_MODULE_ID_HDD_SAP_DATA = 15,
264 QDF_MODULE_ID_HIF = 16,
265 QDF_MODULE_ID_HTC = 17,
266 QDF_MODULE_ID_TXRX = 18,
267 QDF_MODULE_ID_QDF_DEVICE = 19,
268 QDF_MODULE_ID_CFG = 20,
269 QDF_MODULE_ID_BMI = 21,
270 QDF_MODULE_ID_EPPING = 22,
Rajeev Kumar35375002016-04-15 10:57:41 -0700271 QDF_MODULE_ID_QVIT = 23,
Chouhan, Anurag57763182016-03-03 18:57:27 +0530272 QDF_MODULE_ID_MAX
273} QDF_MODULE_ID;
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800274
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800275/**
Chouhan, Anurag57763182016-03-03 18:57:27 +0530276 * enum tQDF_ADAPTER_MODE - Concurrency role.
277 * @QDF_STA_MODE: STA mode
278 * @QDF_SAP_MODE: SAP mode
279 * @QDF_P2P_CLIENT_MODE: P2P client mode
280 * @QDF_P2P_GO_MODE: P2P GO mode
281 * @QDF_FTM_MODE: FTM mode
282 * @QDF_IBSS_MODE: IBSS mode
Manjunathappa Prakash2c3575e2016-04-26 15:59:16 -0700283 * @QDF_MONITOR_MODE: Monitor mode
Chouhan, Anurag57763182016-03-03 18:57:27 +0530284 * @QDF_P2P_DEVICE_MODE: P2P device mode
Chouhan, Anurag57763182016-03-03 18:57:27 +0530285 * @QDF_OCB_MODE: OCB device mode
Naveen Rawat9123c152016-04-14 17:13:19 -0700286 * @QDF_EPPING_MODE: EPPING device mode
Rajeev Kumar35375002016-04-15 10:57:41 -0700287 * @QDF_QVIT_MODE: QVIT device mode
Deepak Dhamdhere987c1fa2016-05-26 02:23:10 -0700288 * @QDF_NDI_MODE: NAN datapath mode
Chouhan, Anurag57763182016-03-03 18:57:27 +0530289 * @QDF_MAX_NO_OF_MODE: Max place holder
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800290 *
291 * These are generic IDs that identify the various roles
292 * in the software system
293 */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530294enum tQDF_ADAPTER_MODE {
Naveen Rawat9123c152016-04-14 17:13:19 -0700295 QDF_STA_MODE,
296 QDF_SAP_MODE,
Chouhan, Anurag57763182016-03-03 18:57:27 +0530297 QDF_P2P_CLIENT_MODE,
298 QDF_P2P_GO_MODE,
299 QDF_FTM_MODE,
300 QDF_IBSS_MODE,
Manjunathappa Prakash2c3575e2016-04-26 15:59:16 -0700301 QDF_MONITOR_MODE,
Chouhan, Anurag57763182016-03-03 18:57:27 +0530302 QDF_P2P_DEVICE_MODE,
Chouhan, Anurag57763182016-03-03 18:57:27 +0530303 QDF_OCB_MODE,
Naveen Rawat9123c152016-04-14 17:13:19 -0700304 QDF_EPPING_MODE,
Rajeev Kumar35375002016-04-15 10:57:41 -0700305 QDF_QVIT_MODE,
Deepak Dhamdhere987c1fa2016-05-26 02:23:10 -0700306 QDF_NDI_MODE,
Chouhan, Anurag57763182016-03-03 18:57:27 +0530307 QDF_MAX_NO_OF_MODE
Peng Xu7b962532015-10-02 17:17:03 -0700308};
309
310/**
Chouhan, Anurag57763182016-03-03 18:57:27 +0530311 * enum tQDF_GLOBAL_CON_MODE - global config mode when
Peng Xu7b962532015-10-02 17:17:03 -0700312 * driver is loaded.
313 *
Chouhan, Anurag57763182016-03-03 18:57:27 +0530314 * @QDF_GLOBAL_MISSION_MODE: mission mode (STA, SAP...)
Manjunathappa Prakash2c3575e2016-04-26 15:59:16 -0700315 * @QDF_GLOBAL_MONITOR_MODE: Monitor Mode
Chouhan, Anurag57763182016-03-03 18:57:27 +0530316 * @QDF_GLOBAL_FTM_MODE: FTM mode
317 * @QDF_GLOBAL_EPPING_MODE: EPPING mode
Rajeev Kumar35375002016-04-15 10:57:41 -0700318 * @QDF_GLOBAL_QVIT_MODE: QVIT global mode
Chouhan, Anurag57763182016-03-03 18:57:27 +0530319 * @QDF_GLOBAL_MAX_MODE: Max place holder
Peng Xu7b962532015-10-02 17:17:03 -0700320 */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530321enum tQDF_GLOBAL_CON_MODE {
322 QDF_GLOBAL_MISSION_MODE,
Manjunathappa Prakash2c3575e2016-04-26 15:59:16 -0700323 QDF_GLOBAL_MONITOR_MODE = 4,
Chouhan, Anurag57763182016-03-03 18:57:27 +0530324 QDF_GLOBAL_FTM_MODE = 5,
325 QDF_GLOBAL_EPPING_MODE = 8,
Rajeev Kumar35375002016-04-15 10:57:41 -0700326 QDF_GLOBAL_QVIT_MODE = 9,
Chouhan, Anurag57763182016-03-03 18:57:27 +0530327 QDF_GLOBAL_MAX_MODE
Peng Xu7b962532015-10-02 17:17:03 -0700328};
329
Houston Hoffman75ef5a52016-04-14 17:15:49 -0700330#define QDF_IS_EPPING_ENABLED(mode) (mode == QDF_GLOBAL_EPPING_MODE)
331
Anurag Chouhanf0825ae2016-05-04 15:15:45 +0530332#ifdef CONFIG_MCL
Anurag Chouhan85bc91a2016-03-21 19:18:37 +0530333#define qdf_print(args...) \
334 QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, ## args)
Anurag Chouhan8bfdee02016-04-04 17:11:39 +0530335
Anurag Chouhan85bc91a2016-03-21 19:18:37 +0530336#else
Anurag Chouhan85bc91a2016-03-21 19:18:37 +0530337#define qdf_print printk
Anurag Chouhan85bc91a2016-03-21 19:18:37 +0530338#endif /* CONFIG_MCL */
339
Anurag Chouhan8bfdee02016-04-04 17:11:39 +0530340#define qdf_vprint __qdf_vprint
341#define qdf_snprint __qdf_snprint
Chouhan, Anurag57763182016-03-03 18:57:27 +0530342
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800343#ifdef WLAN_OPEN_P2P_INTERFACE
344/* This should match with WLAN_MAX_INTERFACES */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530345#define QDF_MAX_CONCURRENCY_PERSONA (4)
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800346#else
Chouhan, Anurag57763182016-03-03 18:57:27 +0530347#define QDF_MAX_CONCURRENCY_PERSONA (3)
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800348#endif
349
Chouhan, Anurag57763182016-03-03 18:57:27 +0530350#define QDF_STA_MASK (1 << QDF_STA_MODE)
351#define QDF_SAP_MASK (1 << QDF_SAP_MODE)
352#define QDF_P2P_CLIENT_MASK (1 << QDF_P2P_CLIENT_MODE)
353#define QDF_P2P_GO_MASK (1 << QDF_P2P_GO_MODE)
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800354
355#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
Chouhan, Anurag57763182016-03-03 18:57:27 +0530356
357/**
358 * typedef tQDF_MCC_TO_SCC_SWITCH_MODE - MCC to SCC switch mode.
359 * @QDF_MCC_TO_SCC_SWITCH_DISABLE: Disable switch
360 * @QDF_MCC_TO_SCC_SWITCH_ENABLE: Enable switch
Manishekar Chandrasekaranbe116242016-05-09 17:30:17 +0530361 * @QDF_MCC_TO_SCC_SWITCH_FORCE: Force switch with SAP restart
362 * @QDF_MCC_TO_SCC_SWITCH_FORCE_WITHOUT_DISCONNECTION: Force switch without
363 * restart of SAP
364 * @QDF_MCC_TO_SCC_SWITCH_WITH_FAVORITE_CHANNEL: Switch using fav channel(s)
365 * without SAP restart
Chouhan, Anurag57763182016-03-03 18:57:27 +0530366 * @QDF_MCC_TO_SCC_SWITCH_MAX: max switch
367 */
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800368typedef enum {
Chouhan, Anurag57763182016-03-03 18:57:27 +0530369 QDF_MCC_TO_SCC_SWITCH_DISABLE = 0,
370 QDF_MCC_TO_SCC_SWITCH_ENABLE,
371 QDF_MCC_TO_SCC_SWITCH_FORCE,
Chandrasekaran Manishekar4758eb42016-04-14 19:01:48 +0530372 QDF_MCC_TO_SCC_SWITCH_FORCE_WITHOUT_DISCONNECTION,
Manishekar Chandrasekaranbe116242016-05-09 17:30:17 +0530373 QDF_MCC_TO_SCC_SWITCH_WITH_FAVORITE_CHANNEL,
Chouhan, Anurag57763182016-03-03 18:57:27 +0530374 QDF_MCC_TO_SCC_SWITCH_MAX
375} tQDF_MCC_TO_SCC_SWITCH_MODE;
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800376#endif
377
378#if !defined(NULL)
379#ifdef __cplusplus
Chouhan, Anurag57763182016-03-03 18:57:27 +0530380#define NULL 0
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800381#else
Chouhan, Anurag57763182016-03-03 18:57:27 +0530382#define NULL ((void *)0)
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800383#endif
384#endif
385
Chouhan, Anurag57763182016-03-03 18:57:27 +0530386/* typedef for QDF Context... */
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800387typedef void *v_CONTEXT_t;
388
Chouhan, Anurag57763182016-03-03 18:57:27 +0530389#define QDF_MAC_ADDR_SIZE (6)
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800390
391/**
Chouhan, Anurag57763182016-03-03 18:57:27 +0530392 * struct qdf_mac_addr - mac address array
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800393 * @bytes: MAC address bytes
394 */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530395struct qdf_mac_addr {
396 uint8_t bytes[QDF_MAC_ADDR_SIZE];
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800397};
398
Chouhan, Anurag57763182016-03-03 18:57:27 +0530399/**
400 * This macro is used to initialize a QDF MacAddress to the broadcast
401 * MacAddress. It is used like this...
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800402 */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530403#define QDF_MAC_ADDR_BROADCAST_INITIALIZER \
404 { { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff } }
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800405
406/**
Chouhan, Anurag57763182016-03-03 18:57:27 +0530407 * This macro is used to initialize a QDF MacAddress to zero
408 * It is used like this...
409 */
410#define QDF_MAC_ADDR_ZERO_INITIALIZER { { 0, 0, 0, 0, 0, 0 } }
411
412#define QDF_IPV4_ADDR_SIZE (4)
413#define QDF_IPV6_ADDR_SIZE (16)
Manishekar Chandrasekaranbe116242016-05-09 17:30:17 +0530414#define QDF_MAX_NUM_CHAN (128)
Chouhan, Anurag57763182016-03-03 18:57:27 +0530415
416/**
417 * struct qdf_tso_frag_t - fragments of a single TCP segment
418 * @paddr_low_32: Lower 32 bits of the buffer pointer
419 * @paddr_upper_16: upper 16 bits of the buffer pointer
420 * @length: length of the buffer
421 * @vaddr: virtual address
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800422 *
423 * This structure holds the fragments of a single TCP segment of a
424 * given jumbo TSO network buffer
425 */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530426struct qdf_tso_frag_t {
Dhanashri Atre5cfd37e2016-06-03 14:20:51 -0700427 uint16_t length;
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800428 unsigned char *vaddr;
Dhanashri Atre5cfd37e2016-06-03 14:20:51 -0700429 qdf_dma_addr_t paddr;
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800430};
431
432#define FRAG_NUM_MAX 6
433
434/**
Chouhan, Anurag57763182016-03-03 18:57:27 +0530435 * struct qdf_tso_flags_t - TSO specific flags
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800436 * @tso_enable: Enable transmit segmentation offload
437 * @tcp_flags_mask: Tcp_flag is inserted into the header based
438 * on the mask
439 * @l2_len: L2 length for the msdu
440 * @ip_len: IP length for the msdu
441 * @tcp_seq_num: TCP sequence number
442 * @ip_id: IP identification number
443 *
444 * This structure holds the TSO specific flags extracted from the TSO network
445 * buffer for a given TCP segment
446 */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530447struct qdf_tso_flags_t {
448 uint32_t tso_enable:1,
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800449 reserved_0a:6,
450 fin:1,
451 syn:1,
452 rst:1,
453 psh:1,
454 ack:1,
455 urg:1,
456 ece:1,
457 cwr:1,
458 ns:1,
459 tcp_flags_mask:9,
460 reserved_0b:7;
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800461
Chouhan, Anurag57763182016-03-03 18:57:27 +0530462 uint32_t l2_len:16,
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800463 ip_len:16;
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800464
Chouhan, Anurag57763182016-03-03 18:57:27 +0530465 uint32_t tcp_seq_num;
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800466
Chouhan, Anurag57763182016-03-03 18:57:27 +0530467 uint32_t ip_id:16,
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800468 ipv4_checksum_en:1,
469 udp_ipv4_checksum_en:1,
470 udp_ipv6_checksum_en:1,
471 tcp_ipv4_checksum_en:1,
472 tcp_ipv6_checksum_en:1,
473 partial_checksum_en:1,
474 reserved_3a:10;
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800475
Chouhan, Anurag57763182016-03-03 18:57:27 +0530476 uint32_t checksum_offset:14,
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800477 reserved_4a:2,
478 payload_start_offset:14,
479 reserved_4b:2;
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800480
Chouhan, Anurag57763182016-03-03 18:57:27 +0530481 uint32_t payload_end_offset:14,
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800482 reserved_5:18;
483};
484
485/**
Chouhan, Anurag57763182016-03-03 18:57:27 +0530486 * struct qdf_tso_seg_t - single TSO segment
487 * @tso_flags: TSO flags
488 * @num_frags: number of fragments
489 * @tso_frags: array holding the fragments
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800490 *
491 * This structure holds the information of a single TSO segment of a jumbo
492 * TSO network buffer
493 */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530494struct qdf_tso_seg_t {
495 struct qdf_tso_flags_t tso_flags;
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800496 uint32_t num_frags;
Chouhan, Anurag57763182016-03-03 18:57:27 +0530497 struct qdf_tso_frag_t tso_frags[FRAG_NUM_MAX];
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800498};
499
500/**
Chouhan, Anurag57763182016-03-03 18:57:27 +0530501 * qdf_tso_seg_elem_t - tso segment element
502 * @seg: instance of segment
503 * @next: pointer to the next segment
504 */
505struct qdf_tso_seg_elem_t {
506 struct qdf_tso_seg_t seg;
507 struct qdf_tso_seg_elem_t *next;
508};
509
510/**
511 * struct qdf_tso_info_t - TSO information extracted
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800512 * @is_tso: is this is a TSO frame
513 * @num_segs: number of segments
514 * @total_len: total length of the packet
515 * @tso_seg_list: list of TSO segments for this jumbo packet
516 * @curr_seg: segment that is currently being processed
517 *
518 * This structure holds the TSO information extracted after parsing the TSO
519 * jumbo network buffer. It contains a chain of the TSO segments belonging to
520 * the jumbo packet
521 */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530522struct qdf_tso_info_t {
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800523 uint8_t is_tso;
524 uint32_t num_segs;
525 uint32_t total_len;
Chouhan, Anurag57763182016-03-03 18:57:27 +0530526 struct qdf_tso_seg_elem_t *tso_seg_list;
527 struct qdf_tso_seg_elem_t *curr_seg;
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800528};
529
530/**
531 * Used to set classify bit in CE desc.
532 */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530533#define QDF_CE_TX_CLASSIFY_BIT_S 5
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800534
535/**
Chouhan, Anurag57763182016-03-03 18:57:27 +0530536 * QDF_CE_TX_PKT_TYPE_BIT_S - 2 bits starting at bit 6 in CE desc.
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800537 */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530538#define QDF_CE_TX_PKT_TYPE_BIT_S 6
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800539
540/**
Chouhan, Anurag57763182016-03-03 18:57:27 +0530541 * QDF_CE_TX_PKT_OFFSET_BIT_S - 12 bits --> 16-27, in the CE desciptor
542 * the length of HTT/HTC descriptor
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800543 */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530544#define QDF_CE_TX_PKT_OFFSET_BIT_S 16
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800545
546/**
Chouhan, Anurag57763182016-03-03 18:57:27 +0530547 * QDF_CE_TX_PKT_OFFSET_BIT_M - Mask for packet offset in the CE descriptor.
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800548 */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530549#define QDF_CE_TX_PKT_OFFSET_BIT_M 0x0fff0000
Prakash Dhavalid5c9f1c2015-11-08 19:04:44 -0800550
Houston Hoffmandbfb7ad2015-11-10 16:45:19 -0800551/**
Chouhan, Anurag57763182016-03-03 18:57:27 +0530552 * enum qdf_suspend_type - type of suspend
553 * @QDF_SYSTEM_SUSPEND: System suspend triggered wlan suspend
554 * @QDF_RUNTIME_SUSPEND: Runtime pm inactivity timer triggered wlan suspend
Houston Hoffmandbfb7ad2015-11-10 16:45:19 -0800555 */
Chouhan, Anurag57763182016-03-03 18:57:27 +0530556enum qdf_suspend_type {
557 QDF_SYSTEM_SUSPEND,
558 QDF_RUNTIME_SUSPEND
Houston Hoffmandbfb7ad2015-11-10 16:45:19 -0800559};
560
Chouhan, Anurag57763182016-03-03 18:57:27 +0530561#endif /* __QDF_TYPES_H */