blob: e7c0dacd3a21b218ef6819a997c5edf9ab51292b [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Abhishek Singh00b71972016-01-07 10:51:04 +05302 * Copyright (c) 2012-2014, 2016 The Linux Foundation. All rights reserved.
Kiet Lam1ed83fc2014-02-19 01:15:45 -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/*
Kiet Lama7f454d2014-07-24 12:04:06 -070023 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
Gopichand Nakkala92f07d82013-01-08 21:16:34 -080026 */
Kiet Lam1ed83fc2014-02-19 01:15:45 -080027
28
Kiet Lama7f454d2014-07-24 12:04:06 -070029
30
Jeff Johnson295189b2012-06-20 16:38:30 -070031#ifndef WLAN_QCT_WDI_DP_H
32#define WLAN_QCT_WDI_DP_H
33
34/*===========================================================================
35
36 W L A N D E V I C E A B S T R A C T I O N L A Y E R
37 I N T E R N A L A P I F O R T H E
38 D A T A P A T H
39
40
41DESCRIPTION
42 This file contains the internal API exposed by the DAL Control Path Core
43 module to be used by the DAL Data Path Core.
44
45
Jeff Johnson295189b2012-06-20 16:38:30 -070046===========================================================================*/
47
48
49/*===========================================================================
50
51 EDIT HISTORY FOR FILE
52
53
54 This section contains comments describing changes made to the module.
55 Notice that changes are listed in reverse chronological order.
56
57
58 $Header:$ $DateTime: $ $Author: $
59
60
61when who what, where, why
62-------- --- ----------------------------------------------------------
6308/19/10 lti Created module.
64
65===========================================================================*/
66
67#include "wlan_qct_pal_type.h"
68#include "wlan_qct_wdi_i.h"
69#include "wlan_qct_wdi_bd.h"
70
71/*=========================================================================
72 BD Macro Defines
73=========================================================================*/
74
75/*--------------------------------------------------------------------------
76 BD Definitions used by the DAL data path
77--------------------------------------------------------------------------*/
78#define WDI_TXBD_BDRATE_DEFAULT 0
79#define WDI_TXBD_BDRATE_FIRST 1
80#define WDI_TXBD_BDRATE_SECOND 2
81#define WDI_TXBD_BDRATE_THIRD 3
82
83#define WDI_FRAME_TYPE_MASK 0x30
84#define WDI_FRAME_TYPE_OFFSET 0x4
85#define WDI_FRAME_SUBTYPE_MASK 0x0F
86
87#define WDI_TXBD_BD_SSN_FILL_HOST 0
88#define WDI_TXBD_BD_SSN_FILL_DPU_NON_QOS 1
89#define WDI_TXBD_BD_SSN_FILL_DPU_QOS 2
90
91#define WDI_ACKPOLICY_ACK_REQUIRED 0
92#define WDI_ACKPOLICY_ACK_NOTREQUIRED 1
93
94#define WDI_BDRATE_BCDATA_FRAME 1
95#define WDI_BDRATE_BCMGMT_FRAME 2
96#define WDI_BDRATE_CTRL_FRAME 3
97
98/* Default values for FillTx BD */
99#define WDI_DEFAULT_UNICAST_ENABLED 1
100#define WDI_RMF_DISABLED 0
101#define WDI_RMF_ENABLED 1
102#define WDI_NO_ENCRYPTION_DISABLED 0
103#define WDI_NO_ENCRYPTION_ENABLED 1
104
105#define WDI_RX_BD_ADDR3_SELF_IDX 0
106
107#define WDI_TXCOMP_REQUESTED_MASK 0x1 //bit 0 for TxComp intr requested.
108#define WDI_USE_SELF_STA_REQUESTED_MASK 0x2 //bit 1 for STA overwrite with selfSta Requested.
109#define WDI_TX_NO_ENCRYPTION_MASK 0x4 //bit 2. If set, the frame is not to be encrypted
110#if defined(LIBRA_WAPI_SUPPORT)
111#define WDI_WAPI_STA_MASK 0x8 //bit 3. If set, this frame is for WAPI station
112#endif
113
Jeff Johnson295189b2012-06-20 16:38:30 -0700114#define WDI_TRIGGER_ENABLED_AC_MASK 0x10 //bit 4 for data frames belonging to trigger enabled AC
Jeff Johnson295189b2012-06-20 16:38:30 -0700115#define WDI_USE_NO_ACK_REQUESTED_MASK 0x20
116
117#define WDI_USE_BD_RATE2_FOR_MANAGEMENT_FRAME 0x40 // Bit 6 will be used to control BD rate for Management frames
118
Chandrasekaran Manishekar7218fa22014-06-26 10:34:25 +0530119#ifdef FEATURE_WLAN_TDLS
120#define HAL_TDLS_PEER_STA_MASK 0x80 //bit 7 set for TDLS peer station
121#endif
122
Abhishek Singh00b71972016-01-07 10:51:04 +0530123#ifdef WLAN_FEATURE_RMC
124#define WDI_RMC_REQUESTED_MASK 0x100
125#endif
Chandrasekaran Manishekar7218fa22014-06-26 10:34:25 +0530126
Hanumantha Reddy Pothulaee001fc2015-05-26 15:21:53 +0530127#define WDI_USE_BD_RATE_1_MASK 0x1000
128#define WDI_USE_BD_RATE_2_MASK 0x2000
129#define WDI_USE_BD_RATE_3_MASK 0x4000
Kanchanapally, Vidyullathaf9426e52013-12-24 17:28:54 +0530130#define WDI_USE_FW_IN_TX_PATH 0x200 //bit 9 used to route the frames to Work Queue 5
131
Jeff Johnson295189b2012-06-20 16:38:30 -0700132/*Macro for getting the size of the TX BD*/
133#define WDI_TX_BD_HEADER_SIZE sizeof(WDI_TxBdType)
134
135/*Macro for getting the size of the RX BD*/
136#define WDI_RX_BD_HEADER_SIZE sizeof(WDI_RxBdType)
137
138#define WDI_RX_BD_HEADER_OFFSET 0
139
140#define WDI_DPU_FEEDBACK_OFFSET 1
141
Sushant Kaushik33200572015-08-05 16:46:20 +0530142#define WDI_MAC_LLC_HEADER_SIZE 8
143
144
Jeff Johnson295189b2012-06-20 16:38:30 -0700145// Frame Type definitions
146
147#define WDI_MAC_MGMT_FRAME 0x0
148#define WDI_MAC_CTRL_FRAME 0x1
149#define WDI_MAC_DATA_FRAME 0x2
150
151// Data frame subtype definitions
152#define WDI_MAC_DATA_DATA 0
153#define WDI_MAC_DATA_DATA_ACK 1
154#define WDI_MAC_DATA_DATA_POLL 2
155#define WDI_MAC_DATA_DATA_ACK_POLL 3
156#define WDI_MAC_DATA_NULL 4
157#define WDI_MAC_DATA_NULL_ACK 5
158#define WDI_MAC_DATA_NULL_POLL 6
159#define WDI_MAC_DATA_NULL_ACK_POLL 7
160#define WDI_MAC_DATA_QOS_DATA 8
161#define WDI_MAC_DATA_QOS_DATA_ACK 9
162#define WDI_MAC_DATA_QOS_DATA_POLL 10
163#define WDI_MAC_DATA_QOS_DATA_ACK_POLL 11
164#define WDI_MAC_DATA_QOS_NULL 12
165#define WDI_MAC_DATA_QOS_NULL_ACK 13
166#define WDI_MAC_DATA_QOS_NULL_POLL 14
167#define WDI_MAC_DATA_QOS_NULL_ACK_POLL 15
168
169#define WDI_MAC_FRAME_SUBTYPE_START 0
170#define WDI_MAC_FRAME_SUBTYPE_END 16
171
172#define WDI_MAC_DATA_QOS_MASK 8
173#define WDI_MAC_DATA_NULL_MASK 4
174#define WDI_MAC_DATA_POLL_MASK 2
175#define WDI_MAC_DATA_ACK_MASK 1
176
177// Management frame subtype definitions
178
179#define WDI_MAC_MGMT_ASSOC_REQ 0x0
180#define WDI_MAC_MGMT_ASSOC_RSP 0x1
181#define WDI_MAC_MGMT_REASSOC_REQ 0x2
182#define WDI_MAC_MGMT_REASSOC_RSP 0x3
183#define WDI_MAC_MGMT_PROBE_REQ 0x4
184#define WDI_MAC_MGMT_PROBE_RSP 0x5
185#define WDI_MAC_MGMT_BEACON 0x8
186#define WDI_MAC_MGMT_ATIM 0x9
187#define WDI_MAC_MGMT_DISASSOC 0xA
188#define WDI_MAC_MGMT_AUTH 0xB
189#define WDI_MAC_MGMT_DEAUTH 0xC
190#define WDI_MAC_MGMT_ACTION 0xD
191#define WDI_MAC_MGMT_RESERVED15 0xF
192
193// Action frame categories
194
195#define WDI_MAC_ACTION_SPECTRUM_MGMT 0
196#define WDI_MAC_ACTION_QOS_MGMT 1
197#define WDI_MAC_ACTION_DLP 2
198#define WDI_MAC_ACTION_BLKACK 3
199#define WDI_MAC_ACTION_HT 7
200#define WDI_MAC_ACTION_WME 17
201
202// QoS management action codes
203
204#define WDI_MAC_QOS_ADD_TS_REQ 0
205#define WDI_MAC_QOS_ADD_TS_RSP 1
206#define WDI_MAC_QOS_DEL_TS_REQ 2
207#define WDI_MAC_QOS_SCHEDULE 3
208// and these are proprietary
209#define WDI_MAC_QOS_DEF_BA_REQ 4
210#define WDI_MAC_QOS_DEF_BA_RSP 5
211#define WDI_MAC_QOS_DEL_BA_REQ 6
212#define WDI_MAC_QOS_DEL_BA_RSP 7
213
214#ifdef WLAN_PERF
215/* TxBD signature fields
216 * serial(8): a monotonically increasing serial # whenever there is a Add/Del STA or Add/Del Key event
217 * macHash(16): Hash value of DA
218 * tid(4): TID
219 * ucast(1): Unicast or Broadcast data frame
220 */
221#define WDI_TXBD_SIG_SERIAL_OFFSET 0
222#define WDI_TXBD_SIG_TID_OFFSET 8
223#define WDI_TXBD_SIG_UCAST_DATA_OFFSET 9
224#define WDI_TXBD_SIG_MACADDR_HASH_OFFSET 16
225#define WDI_TXBD_SIG_MGMT_MAGIC 0xbdbdbdbd
226
227#endif
228
Agrawal Ashisha8e8a722016-10-18 19:07:45 +0530229#define WDI_RXBD_MLME_STA_STATUS 0x1
Sravan Kumar Kairam0caa5d22016-12-13 16:03:03 +0530230#define WDI_RXBD_SAP_TX_STATS 0x2
Jeff Johnson295189b2012-06-20 16:38:30 -0700231/*--------------------------------------------------------------------------
232 BD header macros - used by the data path to get or set various values
233 inside the packet BD
234--------------------------------------------------------------------------*/
235#define WDI_RX_BD_GET_MPDU_H_OFFSET( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->mpduHeaderOffset)
236
237#define WDI_RX_BD_GET_MPDU_D_OFFSET( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->mpduDataOffset)
238
239#define WDI_RX_BD_GET_MPDU_LEN( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->mpduLength)
240
241#define WDI_RX_BD_GET_MPDU_H_LEN( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->mpduHeaderLength)
242
Jeff Johnson295189b2012-06-20 16:38:30 -0700243#define WDI_RX_BD_GET_FT( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->ft)
244
245#define WDI_RX_BD_GET_DPU_FEEDBACK( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->dpuFeedback)
246
247#define WDI_RX_BD_GET_RX_CHANNEL( _pvBDHeader ) \
248 (( (((WDI_RxBdType*)_pvBDHeader)->reserved0) << 4) | (((WDI_RxBdType*)_pvBDHeader)->rxChannel))
249
250#define WDI_FRAME_TYPE_MASK 0x30
251#define WDI_FRAME_TYPE_OFFSET 0x4
252#define WDI_FRAME_SUBTYPE_MASK 0x0F
253
254#define WDI_RX_BD_GET_SUBTYPE( _pvBDHeader ) ((((WDI_RxBdType*)_pvBDHeader)->frameTypeSubtype) & WDI_FRAME_SUBTYPE_MASK)
255
Madan Mohan Koyyalamudic0d1b3f2012-11-13 10:41:07 -0800256#define WDI_RX_BD_GET_TYPE( _pvBDHeader ) (((((WDI_RxBdType*)_pvBDHeader)->frameTypeSubtype) & WDI_FRAME_TYPE_MASK) >> WDI_FRAME_TYPE_OFFSET)
Jeff Johnson295189b2012-06-20 16:38:30 -0700257
258#define WDI_RX_BD_GET_RTSF( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->rtsf)
259
260#define WDI_RX_BD_GET_BSF( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->bsf)
261
262#define WDI_RX_BD_GET_SCAN( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->scanLearn)
263
264#define WDI_RX_BD_GET_DPU_SIG( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->dpuSignature)
265
266#define WDI_RX_BD_GET_NE( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->dpuNE)
267
Jeff Johnsone7245742012-09-05 17:12:55 -0700268#define WDI_RX_BD_GET_LLCR( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->llcr)
Jeff Johnson295189b2012-06-20 16:38:30 -0700269
270#define WDI_RX_BD_GET_TIMESTAMP( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->mclkRxTimestamp)
271
272#define WDI_RX_BD_GET_RXPFLAGS( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->rxpFlags)
273
274#define WDI_RX_BD_GET_RATEINDEX( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->rateIndex)
275
276#define WDI_RX_BD_GET_AMSDU_SIZE( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->totalMsduSize)
277
278#define WDI_RX_BD_GET_LLC( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->llc)
279
280#define WDI_RX_BD_GET_TID( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->tid)
281
Kiran Kumar Lokere79540f92013-04-25 17:32:16 -0700282#define WDI_RX_BD_GET_RFBAND( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->rfBand)
283
Jeff Johnson295189b2012-06-20 16:38:30 -0700284#define WDI_RX_BD_GET_ASF( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->asf)
285
286#define WDI_RX_BD_GET_AEF( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->aef)
287
288#define WDI_RX_BD_GET_LSF( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->lsf)
289
290#define WDI_RX_BD_GET_ESF( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->esf)
291
292#define WDI_RX_BD_GET_STA_ID( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->addr2Index)
293#define WDI_RX_BD_GET_UB( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->ub)
294#define WDI_RX_BD_GET_ADDR3_IDX( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->addr3Index)
295#define WDI_RX_BD_GET_ADDR1_IDX( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->addr1Index)
296
297#define WDI_TX_BD_GET_TID( _pvBDHeader ) (((WDI_TxBdType*)_pvBDHeader)->tid)
298#define WDI_TX_BD_GET_STA_ID( _pvBDHeader ) (((WDI_TxBdType*)_pvBDHeader)->staIndex)
299
300#define WDI_RX_BD_GET_DPU_SIG( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->dpuSignature)
301
302//flow control related.
303#define WDI_RX_FC_BD_GET_STA_TX_DISABLED_BITMAP( _pvBDHeader ) (((WDI_FcRxBdType*)_pvBDHeader)->fcStaTxDisabledBitmap)
304#define WDI_RX_FC_BD_GET_FC( _pvBDHeader ) (((WDI_FcRxBdType*)_pvBDHeader)->fc)
305#define WDI_RX_FC_BD_GET_STA_VALID_MASK( _pvBDHeader ) (((WDI_FcRxBdType*)_pvBDHeader)->fcSTAValidMask)
306
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700307#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
308//LFR scan related
309#define WDI_RX_BD_GET_OFFLOADSCANLEARN( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->offloadScanLearn)
310#define WDI_RX_BD_GET_ROAMCANDIDATEIND( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->roamCandidateInd)
Kapil Gupta04ab1992016-06-26 13:36:51 +0530311#define WDI_RX_BD_GET_PER_ROAMCANDIDATEIND( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->perRoamCndInd)
Varun Reddy Yeturud0a3f252013-04-15 21:58:13 -0700312#endif
Dino Mycle41bdc942014-06-10 11:30:24 +0530313#ifdef WLAN_FEATURE_EXTSCAN
314#define WDI_RX_BD_GET_EXTSCANFULLSCANRESIND( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->extscanBuffer)
315#endif
Jeff Johnson295189b2012-06-20 16:38:30 -0700316
Agrawal Ashisha8e8a722016-10-18 19:07:45 +0530317#define WDI_RX_BD_GET_PER_SAPOFFLOAD( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->indType)
318
Jeff Johnson295189b2012-06-20 16:38:30 -0700319/*------------ RSSI and SNR Information extraction -------------*/
320#define WDI_RX_BD_GET_RSSI0( _pvBDHeader ) \
321 (((((WDI_RxBdType*)_pvBDHeader)->phyStats0) >> 24) & 0xff)
322#define WDI_RX_BD_GET_RSSI1( _pvBDHeader ) \
323 (((((WDI_RxBdType*)_pvBDHeader)->phyStats0) >> 16) & 0xff)
324#define WDI_RX_BD_GET_RSSI2( _pvBDHeader ) \
325 (((((WDI_RxBdType*)_pvBDHeader)->phyStats0) >> 0) & 0xff)
326#define WDI_RX_BD_GET_RSSI3( _pvBDHeader ) \
327 ((((WDI_RxBdType*)_pvBDHeader)->phyStats0) & 0xff)
328
329// Get the average of the 4 values.
330#define WDI_GET_RSSI_AVERAGE( _pvBDHeader ) \
331 (((WDI_RX_BD_GET_RSSI0(_pvBDHeader)) + \
332 (WDI_RX_BD_GET_RSSI1(_pvBDHeader)) + \
333 (WDI_RX_BD_GET_RSSI2(_pvBDHeader)) + \
334 (WDI_RX_BD_GET_RSSI3(_pvBDHeader))) / 4)
335
336// Get the SNR value from PHY Stats
337#define WDI_RX_BD_GET_SNR( _pvBDHeader ) \
338 (((((WDI_RxBdType*)_pvBDHeader)->phyStats1) >> 24) & 0xff)
339/*-----------------------------------------------------------------*/
340
341#define WDI_TX_BD_SET_MPDU_DATA_OFFSET( _bd, _off ) (((WDI_TxBdType*)_bd)->mpduDataOffset = _off)
342
343#define WDI_TX_BD_SET_MPDU_HEADER_OFFSET( _bd, _off ) (((WDI_TxBdType*)_bd)->mpduHeaderOffset = _off)
344
345#define WDI_TX_BD_SET_MPDU_HEADER_LEN( _bd, _len ) (((WDI_TxBdType*)_bd)->mpduHeaderLength = _len)
346
Sushant Kaushik33200572015-08-05 16:46:20 +0530347#define WDI_TX_BD_GET_MPDU_HEADER_LEN( _bd ) (((WDI_TxBdType*)_bd)->mpduHeaderLength)
348
349
Jeff Johnson295189b2012-06-20 16:38:30 -0700350#define WDI_TX_BD_SET_MPDU_LEN( _bd, _len ) (((WDI_TxBdType*)_bd)->mpduLength = _len)
351
352#define WDI_RX_BD_GET_BA_OPCODE(_pvBDHeader) (((WDI_RxBdType*)_pvBDHeader)->reorderOpcode)
353
354#define WDI_RX_BD_GET_BA_FI(_pvBDHeader) (((WDI_RxBdType*)_pvBDHeader)->reorderFwdIdx)
355
356#define WDI_RX_BD_GET_BA_SI(_pvBDHeader) (((WDI_RxBdType*)_pvBDHeader)->reorderSlotIdx)
357
358#define WDI_RX_BD_GET_BA_CSN(_pvBDHeader) (((WDI_RxBdType*)_pvBDHeader)->currentPktSeqNo)
359
360#define WDI_RX_BD_GET_BA_ESN(_pvBDHeader) (((WDI_RxBdType*)_pvBDHeader)->expectedPktSeqNo)
361
362#define WDI_RX_BD_GET_RXP_FLAGS(_pvBDHeader) (((WDI_RxBdType*)_pvBDHeader)->rxpFlags)
363
364#define WDI_RX_BD_GET_PMICMD_20TO23(_pvBDHeader) (((WDI_RxBdType*)_pvBDHeader)->pmiCmd4to23[4])
365
366#define WDI_RX_BD_GET_PMICMD_24TO25(_pvBDHeader) (((WDI_RxBdType*)_pvBDHeader)->pmiCmd24to25)
367
Chet Lanctot186b5732013-03-18 10:26:30 -0700368#ifdef WLAN_FEATURE_11W
369#define WDI_RX_BD_GET_RMF( _pvBDHeader ) (((WDI_RxBdType*)_pvBDHeader)->rmf)
370#endif
371
Jeff Johnson295189b2012-06-20 16:38:30 -0700372#define WDI_RX_BD_ASF_SET 1 /*The value of the field when set and pkt is AMSDU*/
373
374#define WDI_RX_BD_FSF_SET 1
375
376#define WDI_RX_BD_LSF_SET 1
377
378#define WDI_RX_BD_AEF_SET 1
379
380
381#define WDI_RX_BD_LLC_PRESENT 0 /*The value of the field when LLC is present*/
382
383#define WDI_RX_BD_FT_DONE 1 /* The value of the field when frame xtl was done*/
384
385/*=========================================================================
386 API Definition
387=========================================================================*/
388
389
390/**
391 @brief WDI_RxBD_GetFrameTypeSubType - Called by the data path
392 to retrieve the type/subtype of the received frame.
393
394 @param pvBDHeader: Void pointer to the RxBD buffer.
395 usFrmCtrl: the frame ctrl of the 802.11 header
396
397 @return A byte which contains both type and subtype info. LSB four bytes
398 (b0 to b3)is subtype and b5-b6 is type info.
399*/
400
401wpt_uint8
402WDI_RxBD_GetFrameTypeSubType
403(
404 void* _pvBDHeader,
405 wpt_uint16 usFrmCtrl
406);
407
408
409/**
410 @brief WDI_FillTxBd - Called by the data path to fill the TX BD
411
412 @param pWDICtx: Context to the WDI
413 ucTypeSubtype: of the frame
414 pDestMacAddr: destination MAC address
415 pTid: pointer to the TID (in/out value in case DAL Ctrl causes
416 a TID downgrade - not done for now)
417 ucDisableFrmXtl: set to 1 if this frame is not to be translated by HW
418 pTxBd: pointer to the TX BD
419 ucTxFlag: can have appropriate bit setting as required
Chet Lanctot4b088622013-05-22 16:09:22 -0700420 ucProtMgmtFrame: for management frames, whether the frame is
421 protected (protect bit is set in FC)
Jeff Johnson295189b2012-06-20 16:38:30 -0700422 uTimestamp: pkt timestamp
423
424
425 @return success or not
426*/
427
428WDI_Status
429WDI_FillTxBd
430(
431 WDI_ControlBlockType* pWDICtx,
432 wpt_uint8 ucTypeSubtype,
433 void* pDestMacAddr,
434 void* pAddr2,
435 wpt_uint8* pTid,
436 wpt_uint8 ucDisableFrmXtl,
437 void* pTxBd,
Chandrasekaran Manishekar7218fa22014-06-26 10:34:25 +0530438 wpt_uint32 ucTxFlag,
Chet Lanctot4b088622013-05-22 16:09:22 -0700439 wpt_uint8 ucProtMgmtFrame,
Jeff Johnson295189b2012-06-20 16:38:30 -0700440 wpt_uint32 uTimeStamp,
Kiet Lam9b11b012013-10-24 11:43:30 +0530441 wpt_uint8 isEapol,
Ganesh Kondabattini10e67352015-03-16 17:41:57 +0530442 wpt_uint8* staIndex,
443 wpt_uint32 txBdToken
Jeff Johnson295189b2012-06-20 16:38:30 -0700444);
445
446/**
447 @brief WDI_SwapRxBd swaps the RX BD.
448
449
450 @param pBd - pointer to the BD (in/out)
451
452 @return None
453*/
454void
455WDI_SwapRxBd
456(
457 wpt_uint8 *pBd
458);
459
460/**
461 @brief WDI_SwapTxBd - Swaps the TX BD
462
463 @param pBd - pointer to the BD (in/out)
464
465 @return none
466*/
467void
468WDI_SwapTxBd
469(
470 wpt_uint8 *pBd
471);
472
473/**
474 @brief WDI_RxAmsduBdFix - fix for HW issue for AMSDU
475
476
477 @param pWDICtx: Context to the WDI
478 pBDHeader - pointer to the BD header
479
480 @return None
481*/
482void
483WDI_RxAmsduBdFix
484(
485 WDI_ControlBlockType* pWDICtx,
486 void* pBDHeader
487);
488
489#ifdef WLAN_PERF
490/**
491 @brief WDI_TxBdFastFwd - evaluates if a frame can be fast
492 forwarded
493
494 @param pWDICtx: Context to the WDI
495 pDestMac: Destination MAC
496 ucTid: packet TID pBDHeader
497 ucUnicastDst: is packet unicast
498 pTxBd: pointer to the BD header
499 usMpduLength: len
500
501 @return 1 - if the frame can be fast fwd-ed ; 0 if not
502*/
503wpt_uint32
504WDI_TxBdFastFwd
505(
506 WDI_ControlBlockType* pWDICtx,
507 wpt_uint8* pDestMac,
508 wpt_uint8 ucTid,
509 wpt_uint8 ucUnicastDst,
510 void* pTxBd,
511 wpt_uint16 usMpduLength);
512#endif /*WLAN_PERF*/
513
514/**
515 @brief WDI_DP_UtilsInit - Intializes the parameters required to
516 interact with the data path
517
518 @param pWDICtx: pointer to the main WDI Ctrl Block
519
520 @return success always
521*/
522WDI_Status
523WDI_DP_UtilsInit
524(
525 WDI_ControlBlockType* pWDICtx
526);
527
528/**
529 @brief WDI_DP_UtilsExit - Clears the parameters required to
530 interact with the data path
531
532 @param pWDICtx: pointer to the main WDI Ctrl Block
533
534 @return success always
535*/
536WDI_Status
537WDI_DP_UtilsExit
538(
539 WDI_ControlBlockType* pWDICtx
540);
541
542#endif /*WLAN_QCT_WDI_DP_H*/
543