blob: c6da770b5fff8c8af029fc083c22bdd9643ccbdc [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Abhishek Singh3a93ee42016-09-29 17:00:03 +05302 * Copyright (c) 2012-2013, 2016 The Linux Foundation. All rights reserved.
Kiet Lam0fb93dd2014-02-19 00:32:59 -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.
Gopichand Nakkala92f07d82013-01-08 21:16:34 -080020 */
Kiet Lam0fb93dd2014-02-19 00:32:59 -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/******************************************************************************
29*
30* Name: btcApi.h
31*
32* Description: BTC Events Layer API definitions.
33*
Jeff Johnson295189b2012-06-20 16:38:30 -070034*
35******************************************************************************/
36
37#ifndef __BTC_API_H__
38#define __BTC_API_H__
39
40#include "vos_types.h"
41#include "vos_timer.h"
Leela Venkata Kiran Kumar Reddy Chiralab8dadc22013-11-05 12:34:32 -080042#include "vos_nvitem.h"
Jeff Johnson295189b2012-06-20 16:38:30 -070043
44#define BT_INVALID_CONN_HANDLE (0xFFFF) /**< Invalid connection handle */
45
46/* ACL and Sync connection attempt results */
47#define BT_CONN_STATUS_FAIL (0) /**< Connection failed */
48#define BT_CONN_STATUS_SUCCESS (1) /**< Connection successful */
49#define BT_CONN_STATUS_MAX (2) /**< This and beyond are invalid values */
50
51/** ACL and Sync link types
52 These must match the Bluetooth Spec!
53*/
54#define BT_SCO (0) /**< SCO Link */
55#define BT_ACL (1) /**< ACL Link */
56#define BT_eSCO (2) /**< eSCO Link */
57#define BT_LINK_TYPE_MAX (3) /**< This value and higher are invalid */
58
59/** ACL link modes
60 These must match the Bluetooth Spec!
61*/
62#define BT_ACL_ACTIVE (0) /**< Active mode */
63#define BT_ACL_HOLD (1) /**< Hold mode */
64#define BT_ACL_SNIFF (2) /**< Sniff mode */
65#define BT_ACL_PARK (3) /**< Park mode */
66#define BT_ACL_MODE_MAX (4) /**< This value and higher are invalid */
67
68/**
69 * A2DP BTC max no of BT sub intervals
70 *
71 * **/
72#define BTC_MAX_NUM_ACL_BT_SUB_INTS (7)
73
74/** BTC Executions Modes allowed to be set by user
75*/
76#define BTC_SMART_COEXISTENCE (0) /** BTC Mapping Layer decides whats best */
77#define BTC_WLAN_ONLY (1) /** WLAN takes all mode */
78#define BTC_PTA_ONLY (2) /** Allow only 3 wire protocol in H/W */
79#define BTC_SMART_MAX_WLAN (3) /** BTC Mapping Layer decides whats best, WLAN weighted */
80#define BTC_SMART_MAX_BT (4) /** BTC Mapping Layer decides whats best, BT weighted */
81#define BTC_SMART_BT_A2DP (5) /** BTC Mapping Layer decides whats best, balanced + BT A2DP weight */
82#define BT_EXEC_MODE_MAX (6) /** This and beyond are invalid values */
83
84/** Enumeration of different kinds actions that BTC Mapping Layer
85 can do if PM indication (to AP) fails.
86*/
87#define BTC_RESTART_CURRENT (0) /** Restart the interval we just failed to leave */
88#define BTC_START_NEXT (1) /** Start the next interval even though the PM transition at the AP was unsuccessful */
89#define BTC_ACTION_TYPE_MAX (2) /** This and beyond are invalid values */
90
91#define BTC_BT_INTERVAL_MODE1_DEFAULT (120) /** BT Interval in Mode 1 */
92#define BTC_WLAN_INTERVAL_MODE1_DEFAULT (30) /** WLAN Interval in Mode 1 */
93
94/** Bitmaps used for maintaining various BT events that requires
95 enough time to complete such that it might require disbling of
96 heartbeat monitoring to avoid WLAN link loss with the AP
97*/
98#define BT_INQUIRY_STARTED (1<<0)
99#define BT_PAGE_STARTED (1<<1)
100#define BT_CREATE_ACL_CONNECTION_STARTED (1<<2)
101#define BT_CREATE_SYNC_CONNECTION_STARTED (1<<3)
102
103/** Maximum time duration in milliseconds between a specific BT start event and its
104 respective stop event, before it can be declared timed out on receiving the stop event.
105*/
106#define BT_MAX_EVENT_DONE_TIMEOUT 45000
107
Kanchanapally, Vidyullatha23cea3c2014-11-04 13:05:20 +0530108/*
Jeff Johnson295189b2012-06-20 16:38:30 -0700109 To suppurt multiple SCO connections for BT+UAPSD work
110*/
111#define BT_MAX_SCO_SUPPORT 3
112#define BT_MAX_ACL_SUPPORT 3
113#define BT_MAX_DISCONN_SUPPORT (BT_MAX_SCO_SUPPORT+BT_MAX_ACL_SUPPORT)
114#define BT_MAX_NUM_EVENT_ACL_DEFERRED 4 //We may need to defer these many BT events for ACL
115#define BT_MAX_NUM_EVENT_SCO_DEFERRED 4 //We may need to defer these many BT events for SYNC
116
Jeff Johnson32d95a32012-09-10 13:15:23 -0700117/** Default values for the BTC tunables parameters
118*/
119#define BTC_STATIC_BT_LEN_INQ_DEF (120000) // 120 msec
120#define BTC_STATIC_BT_LEN_PAGE_DEF (10000) // 10 msec (don't care)
121#define BTC_STATIC_BT_LEN_CONN_DEF (10000) // 10 msec (don't care)
122#define BTC_STATIC_BT_LEN_LE_DEF (10000) // 10 msec (don't care)
123#define BTC_STATIC_WLAN_LEN_INQ_DEF (30000) // 30 msec
124#define BTC_STATIC_WLAN_LEN_PAGE_DEF (0) // 0 msec (BT takes all)
125#define BTC_STATIC_WLAN_LEN_CONN_DEF (0) // 0 msec (BT takes all)
126#define BTC_STATIC_WLAN_LEN_LE_DEF (0) // 0 msec (BT takes all)
127#define BTC_DYNAMIC_BT_LEN_MAX_DEF (250000) // 250 msec
128#define BTC_DYNAMIC_WLAN_LEN_MAX_DEF (45000) // 45 msec
129#define BTC_SCO_BLOCK_PERC_DEF (1) // 1 percent
130#define BTC_DHCP_ON_A2DP_DEF (1) // ON
131#define BTC_DHCP_ON_SCO_DEF (0) // OFF
Jeff Johnson295189b2012-06-20 16:38:30 -0700132
Wilson Tsaof8b37942013-09-06 10:49:00 -0700133/*
134 * Number of victim tables and mws coex configurations
135 */
136#define MWS_COEX_MAX_VICTIM_TABLE 10
137#define MWS_COEX_MAX_CONFIG 6
138
Jeff Johnson295189b2012-06-20 16:38:30 -0700139/** Enumeration of all the different kinds of BT events
140*/
141typedef enum eSmeBtEventType
142{
143 BT_EVENT_DEVICE_SWITCHED_ON,
144 BT_EVENT_DEVICE_SWITCHED_OFF,
145 BT_EVENT_INQUIRY_STARTED,
146 BT_EVENT_INQUIRY_STOPPED,
147 BT_EVENT_INQUIRY_SCAN_STARTED,
148 BT_EVENT_INQUIRY_SCAN_STOPPED,
149 BT_EVENT_PAGE_STARTED,
150 BT_EVENT_PAGE_STOPPED,
151 BT_EVENT_PAGE_SCAN_STARTED,
152 BT_EVENT_PAGE_SCAN_STOPPED,
153 BT_EVENT_CREATE_ACL_CONNECTION,
154 BT_EVENT_ACL_CONNECTION_COMPLETE,
155 BT_EVENT_CREATE_SYNC_CONNECTION,
156 BT_EVENT_SYNC_CONNECTION_COMPLETE,
157 BT_EVENT_SYNC_CONNECTION_UPDATED,
158 BT_EVENT_DISCONNECTION_COMPLETE,
159 BT_EVENT_MODE_CHANGED,
160 BT_EVENT_A2DP_STREAM_START,
161 BT_EVENT_A2DP_STREAM_STOP,
162 BT_EVENT_TYPE_MAX, //This and beyond are invalid values
163} tSmeBtEventType;
164
165/** BT-AMP events type
166*/
167typedef enum eSmeBtAmpEventType
168{
169 BTAMP_EVENT_CONNECTION_START,
170 BTAMP_EVENT_CONNECTION_STOP,
171 BTAMP_EVENT_CONNECTION_TERMINATED,
172 BTAMP_EVENT_TYPE_MAX, //This and beyond are invalid values
173} tSmeBtAmpEventType;
174
175
176/**Data structure that specifies the needed event parameters for
177 BT_EVENT_CREATE_ACL_CONNECTION and BT_EVENT_ACL_CONNECTION_COMPLETE
178*/
179typedef struct sSmeBtAclConnectionParam
180{
181 v_U8_t bdAddr[6];
182 v_U16_t connectionHandle;
183 v_U8_t status;
184} tSmeBtAclConnectionParam, *tpSmeBtAclConnectionParam;
185
186/** Data structure that specifies the needed event parameters for
187 BT_EVENT_CREATE_SYNC_CONNECTION, BT_EVENT_SYNC_CONNECTION_COMPLETE
188 and BT_EVENT_SYNC_CONNECTION_UPDATED
189*/
190typedef struct sSmeBtSyncConnectionParam
191{
192 v_U8_t bdAddr[6];
193 v_U16_t connectionHandle;
194 v_U8_t status;
195 v_U8_t linkType;
196 v_U8_t scoInterval; //units in number of 625us slots
197 v_U8_t scoWindow; //units in number of 625us slots
198 v_U8_t retransmisisonWindow; //units in number of 625us slots
199} tSmeBtSyncConnectionParam, *tpSmeBtSyncConnectionParam;
200
201typedef struct sSmeBtSyncUpdateHist
202{
203 tSmeBtSyncConnectionParam btSyncConnection;
204 v_BOOL_t fValid;
205} tSmeBtSyncUpdateHist, *tpSmeBtSyncUpdateHist;
206
207/**Data structure that specifies the needed event parameters for
208 BT_EVENT_MODE_CHANGED
209*/
210typedef struct sSmeBtAclModeChangeParam
211{
212 v_U16_t connectionHandle;
213 v_U8_t mode;
214} tSmeBtAclModeChangeParam, *tpSmeBtAclModeChangeParam;
215
216/*Data structure that specifies the needed event parameters for
217 BT_EVENT_DISCONNECTION_COMPLETE
218*/
219typedef struct sSmeBtDisconnectParam
220{
221 v_U16_t connectionHandle;
222} tSmeBtDisconnectParam, *tpSmeBtDisconnectParam;
223
224/*Data structure that specifies the needed event parameters for
225 BT_EVENT_A2DP_STREAM_START
226 BT_EVENT_A2DP_STREAM_STOP
227*/
228typedef struct sSmeBtA2DPParam
229{
230 v_U8_t bdAddr[6];
231} tSmeBtA2DPParam, *tpSmeBtA2DPParam;
232
233
234/** Generic Bluetooth Event structure for BTC
235*/
236typedef struct sSmeBtcBtEvent
237{
238 tSmeBtEventType btEventType;
239 union
240 {
241 v_U8_t bdAddr[6]; /**< For events with only a BT Addr in event_data */
242 tSmeBtAclConnectionParam btAclConnection;
243 tSmeBtSyncConnectionParam btSyncConnection;
244 tSmeBtDisconnectParam btDisconnect;
245 tSmeBtAclModeChangeParam btAclModeChange;
246 }uEventParam;
247} tSmeBtEvent, *tpSmeBtEvent;
248
249
250/**
251 BT-AMP Event Structure
252*/
253typedef struct sSmeBtAmpEvent
254{
255 tSmeBtAmpEventType btAmpEventType;
256
257} tSmeBtAmpEvent, *tpSmeBtAmpEvent;
258
259
260/** Data structure that specifies the BTC Configuration parameters
261*/
262typedef struct sSmeBtcConfig
263{
264 v_U8_t btcExecutionMode;
265 v_U8_t btcConsBtSlotsToBlockDuringDhcp;
266 v_U8_t btcA2DPBtSubIntervalsDuringDhcp;
267 v_U8_t btcActionOnPmFail;
268 v_U8_t btcBtIntervalMode1;
269 v_U8_t btcWlanIntervalMode1;
270
Jeff Johnson32d95a32012-09-10 13:15:23 -0700271 v_U32_t btcStaticLenInqBt;
272 v_U32_t btcStaticLenPageBt;
273 v_U32_t btcStaticLenConnBt;
274 v_U32_t btcStaticLenLeBt;
275 v_U32_t btcStaticLenInqWlan;
276 v_U32_t btcStaticLenPageWlan;
277 v_U32_t btcStaticLenConnWlan;
278 v_U32_t btcStaticLenLeWlan;
279 v_U32_t btcDynMaxLenBt;
280 v_U32_t btcDynMaxLenWlan;
281 v_U32_t btcMaxScoBlockPerc;
282 v_U32_t btcDhcpProtOnA2dp;
283 v_U32_t btcDhcpProtOnSco;
Wilson Tsaof8b37942013-09-06 10:49:00 -0700284
285 v_U32_t mwsCoexVictimWANFreq[MWS_COEX_MAX_VICTIM_TABLE];
286 v_U32_t mwsCoexVictimWLANFreq[MWS_COEX_MAX_VICTIM_TABLE];
287 v_U32_t mwsCoexVictimConfig[MWS_COEX_MAX_VICTIM_TABLE];
288 v_U32_t mwsCoexVictimConfig2[MWS_COEX_MAX_VICTIM_TABLE];
289 v_U32_t mwsCoexModemBackoff;
290 v_U32_t mwsCoexConfig[MWS_COEX_MAX_CONFIG];
291 v_U32_t SARPowerBackoff;
Jeff Johnson295189b2012-06-20 16:38:30 -0700292} tSmeBtcConfig, *tpSmeBtcConfig;
293
294
295typedef struct sSmeBtAclModeChangeEventHist
296{
297 tSmeBtAclModeChangeParam btAclModeChange;
298 v_BOOL_t fValid;
299} tSmeBtAclModeChangeEventHist, *tpSmeBtAclModeChangeEventHist;
300
301typedef struct sSmeBtAclEventHist
302{
303 //At most, cached events are COMPLETION, DISCONNECT, CREATION, COMPLETION
304 tSmeBtEventType btEventType[BT_MAX_NUM_EVENT_ACL_DEFERRED];
305 tSmeBtAclConnectionParam btAclConnection[BT_MAX_NUM_EVENT_ACL_DEFERRED];
306 //bNextEventIdx == 0 meaning no event cached here
307 tANI_U8 bNextEventIdx;
308} tSmeBtAclEventHist, *tpSmeBtAclEventHist;
309
310typedef struct sSmeBtSyncEventHist
311{
312 //At most, cached events are COMPLETION, DISCONNECT, CREATION, COMPLETION
313 tSmeBtEventType btEventType[BT_MAX_NUM_EVENT_SCO_DEFERRED];
314 tSmeBtSyncConnectionParam btSyncConnection[BT_MAX_NUM_EVENT_SCO_DEFERRED];
315 //bNextEventIdx == 0 meaning no event cached here
316 tANI_U8 bNextEventIdx;
317} tSmeBtSyncEventHist, *tpSmeBtSyncEventHist;
318
319typedef struct sSmeBtDisconnectEventHist
320{
321 tSmeBtDisconnectParam btDisconnect;
322 v_BOOL_t fValid;
323} tSmeBtDisconnectEventHist, *tpSmeBtDisconnectEventHist;
324
325
326/*
327 Data structure for the history of BT events
328*/
329typedef struct sSmeBtcEventHist
330{
331 tSmeBtSyncEventHist btSyncConnectionEvent[BT_MAX_SCO_SUPPORT];
332 tSmeBtAclEventHist btAclConnectionEvent[BT_MAX_ACL_SUPPORT];
333 tSmeBtAclModeChangeEventHist btAclModeChangeEvent[BT_MAX_ACL_SUPPORT];
334 tSmeBtDisconnectEventHist btDisconnectEvent[BT_MAX_DISCONN_SUPPORT];
335 tSmeBtSyncUpdateHist btSyncUpdateEvent[BT_MAX_SCO_SUPPORT];
336 int nInquiryEvent; //>0 for # of outstanding inquiriy starts
337 //<0 for # of outstanding inquiry stops
338 //0 == no inquiry event
339 int nPageEvent; //>0 for # of outstanding page starts
340 //<0 for # of outstanding page stops
341 //0 == no page event
342 v_BOOL_t fA2DPStarted;
343 v_BOOL_t fA2DPStopped;
344} tSmeBtcEventHist, *tpSmeBtcEventHist;
345
346typedef struct sSmeBtcEventReplay
347{
348 tSmeBtcEventHist btcEventHist;
349 v_BOOL_t fBTSwitchOn;
350 v_BOOL_t fBTSwitchOff;
351 //This is not directly tied to BT event so leave it alone when processing BT events
352 v_BOOL_t fRestoreHBMonitor;
353} tSmeBtcEventReplay, *tpSmeBtcEventReplay;
354
355typedef struct sSmeBtcInfo
356{
357 tSmeBtcConfig btcConfig;
358 v_BOOL_t btcReady;
359 v_U8_t btcEventState;
360 v_U8_t btcHBActive; /* Is HB currently active */
361 v_U8_t btcHBCount; /* default HB count */
362 vos_timer_t restoreHBTimer; /* Timer to restore heart beat */
363 tSmeBtcEventReplay btcEventReplay;
364 v_BOOL_t fReplayBTEvents;
365 v_BOOL_t btcUapsdOk; /* Indicate whether BTC is ok with UAPSD */
366 v_BOOL_t fA2DPTrafStop;/*flag to check A2DP_STOP event has come before MODE_CHANGED*/
367 v_U16_t btcScoHandles[BT_MAX_SCO_SUPPORT]; /* Handles for SCO, if any*/
368 v_BOOL_t fA2DPUp; /*remember whether A2DP is in session*/
Abhishek Singh3a93ee42016-09-29 17:00:03 +0530369 /* Scan compromise due to eSCO */
370 bool btc_scan_compromise_esco;
371 /* Scan compromise due to SCO */
372 bool btc_scan_compromise_sco;
Leela Venkata Kiran Kumar Reddy Chiralab8dadc22013-11-05 12:34:32 -0800373 v_U8_t btcBssfordisableaggr[VOS_MAC_ADDRESS_LEN];
Kanchanapally, Vidyullatha23cea3c2014-11-04 13:05:20 +0530374 vos_timer_t enableUapsdTimer;
Jeff Johnson295189b2012-06-20 16:38:30 -0700375} tSmeBtcInfo, *tpSmeBtcInfo;
376
377
378/** Routine definitions
379*/
380
381#ifndef WLAN_MDM_CODE_REDUCTION_OPT
382VOS_STATUS btcOpen (tHalHandle hHal);
383VOS_STATUS btcClose (tHalHandle hHal);
384VOS_STATUS btcReady (tHalHandle hHal);
385VOS_STATUS btcSendCfgMsg(tHalHandle hHal, tpSmeBtcConfig pSmeBtcConfig);
386VOS_STATUS btcSignalBTEvent (tHalHandle hHal, tpSmeBtEvent pBtEvent);
387VOS_STATUS btcSetConfig (tHalHandle hHal, tpSmeBtcConfig pSmeBtcConfig);
388VOS_STATUS btcGetConfig (tHalHandle hHal, tpSmeBtcConfig pSmeBtcConfig);
389/*
390 Caller can check whether BTC's current event allows UAPSD. This doesn't affect
391 BMPS.
392 return: VOS_TRUE -- BTC is ready for UAPSD
393 VOS_FALSE -- certain BT event is active, cannot enter UAPSD
394*/
395v_BOOL_t btcIsReadyForUapsd( tHalHandle hHal );
396eHalStatus btcHandleCoexInd(tHalHandle hHal, void* pMsg);
397#endif /* End of WLAN_MDM_CODE_REDUCTION_OPT */
398
399#endif