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