1/******************************************************************************
2 *
3 *  Copyright (C) 1999-2012 Broadcom Corporation
4 *
5 *  Licensed under the Apache License, Version 2.0 (the "License");
6 *  you may not use this file except in compliance with the License.
7 *  You may obtain a copy of the License at:
8 *
9 *  http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *  Unless required by applicable law or agreed to in writing, software
12 *  distributed under the License is distributed on an "AS IS" BASIS,
13 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *  See the License for the specific language governing permissions and
15 *  limitations under the License.
16 *
17 ******************************************************************************/
18#ifndef GKI_TARGET_H
19#define GKI_TARGET_H
20
21/* Operating System Selection */
22#ifndef BTE_SIM_APP
23#define _GKI_ARM
24#define _GKI_STANDALONE
25#else
26#define _BT_WIN32
27#endif
28
29/* define prefix for exporting APIs from libraries */
30#define EXPORT_API
31
32#ifndef BTE_BSE_WRAPPER
33#ifdef  BTE_SIM_APP
34#undef  EXPORT_API
35#define EXPORT_API  __declspec(dllexport)
36#endif
37#endif
38
39#define GKI_API EXPORT_API
40#define UDRV_API EXPORT_API
41
42#ifndef GKI_DEBUG
43#define GKI_DEBUG FALSE
44#endif
45
46
47#if defined (GKI_DEBUG) && (GKI_DEBUG == TRUE)
48#define GKI_TRACE(fmt, ...)     ALOGI ("%s: " fmt, __FUNCTION__, ## __VA_ARGS__)
49#else
50#define GKI_TRACE(fmt, ...)
51#endif
52
53/******************************************************************************
54**
55** Task configuration
56**
57******************************************************************************/
58
59/* Definitions of task IDs for inter-task messaging */
60#ifndef BTU_TASK
61#define BTU_TASK                0
62#endif
63
64#ifndef BTIF_TASK
65#define BTIF_TASK               1
66#endif
67
68#ifndef A2DP_MEDIA_TASK
69#define A2DP_MEDIA_TASK         2
70#endif
71
72/* The number of GKI tasks in the software system. */
73#ifndef GKI_MAX_TASKS
74#define GKI_MAX_TASKS               3
75#endif
76
77/******************************************************************************
78**
79** Timer configuration
80**
81******************************************************************************/
82
83/* The number of GKI timers in the software system. */
84#ifndef GKI_NUM_TIMERS
85#define GKI_NUM_TIMERS              3
86#endif
87
88/* A conversion value for translating ticks to calculate GKI timer.  */
89#ifndef TICKS_PER_SEC
90#define TICKS_PER_SEC               100
91#endif
92
93/************************************************************************
94**  Utility macros converting ticks to time with user define OS ticks per sec
95**/
96#ifndef GKI_MS_TO_TICKS
97#define GKI_MS_TO_TICKS(x)   ((x) / (1000 / TICKS_PER_SEC))
98#endif
99
100#ifndef GKI_SECS_TO_TICKS
101#define GKI_SECS_TO_TICKS(x)   ((x) * (TICKS_PER_SEC))
102#endif
103
104#ifndef GKI_TICKS_TO_MS
105#define GKI_TICKS_TO_MS(x)   ((x) * 1000 / TICKS_PER_SEC)
106#endif
107
108#ifndef GKI_TICKS_TO_SECS
109#define GKI_TICKS_TO_SECS(x)   ((x) / TICKS_PER_SEC)
110#endif
111
112
113
114/* TICK per second from OS (OS dependent change this macro accordingly to various OS) */
115#ifndef OS_TICKS_PER_SEC
116#define OS_TICKS_PER_SEC               1000
117#endif
118
119/************************************************************************
120**  Utility macros converting ticks to time with user define OS ticks per sec
121**/
122
123#ifndef GKI_OS_TICKS_TO_MS
124#define GKI_OS_TICKS_TO_MS(x)   ((x) * 1000 / OS_TICKS_PER_SEC)
125#endif
126
127
128#ifndef GKI_OS_TICKS_TO_SECS
129#define GKI_OS_TICKS_TO_SECS(x)   ((x) / OS_TICKS_PER_SEC))
130#endif
131
132
133/* delay in ticks before stopping system tick. */
134#ifndef GKI_DELAY_STOP_SYS_TICK
135#define GKI_DELAY_STOP_SYS_TICK     10
136#endif
137
138/* Option to guarantee no preemption during timer expiration (most system don't need this) */
139#ifndef GKI_TIMER_LIST_NOPREEMPT
140#define GKI_TIMER_LIST_NOPREEMPT    FALSE
141#endif
142
143/******************************************************************************
144**
145** Buffer configuration
146**
147******************************************************************************/
148
149/* TRUE if GKI uses dynamic buffers. */
150#ifndef GKI_USE_DYNAMIC_BUFFERS
151#define GKI_USE_DYNAMIC_BUFFERS     FALSE
152#endif
153
154/* The size of the buffers in pool 0. */
155#ifndef GKI_BUF0_SIZE
156#define GKI_BUF0_SIZE               64
157#endif
158
159/* The number of buffers in buffer pool 0. */
160#ifndef GKI_BUF0_MAX
161#define GKI_BUF0_MAX                48
162#endif
163
164/* The ID of buffer pool 0. */
165#ifndef GKI_POOL_ID_0
166#define GKI_POOL_ID_0               0
167#endif
168
169/* The size of the buffers in pool 1. */
170#ifndef GKI_BUF1_SIZE
171#define GKI_BUF1_SIZE               288
172#endif
173
174/* The number of buffers in buffer pool 1. */
175#ifndef GKI_BUF1_MAX
176#define GKI_BUF1_MAX                26
177#endif
178
179/* The ID of buffer pool 1. */
180#ifndef GKI_POOL_ID_1
181#define GKI_POOL_ID_1               1
182#endif
183
184/* The size of the buffers in pool 2. */
185#ifndef GKI_BUF2_SIZE
186#define GKI_BUF2_SIZE               660
187#endif
188
189/* The number of buffers in buffer pool 2. */
190#ifndef GKI_BUF2_MAX
191#define GKI_BUF2_MAX                45
192#endif
193
194/* The ID of buffer pool 2. */
195#ifndef GKI_POOL_ID_2
196#define GKI_POOL_ID_2               2
197#endif
198
199/* The size of the buffers in pool 3. */
200#ifndef GKI_BUF3_SIZE
201#define GKI_BUF3_SIZE               (4096+16)
202#endif
203
204/* The number of buffers in buffer pool 3. */
205#ifndef GKI_BUF3_MAX
206#define GKI_BUF3_MAX                200
207#endif
208
209/* The ID of buffer pool 3. */
210#ifndef GKI_POOL_ID_3
211#define GKI_POOL_ID_3               3
212#endif
213
214/* The size of the largest PUBLIC fixed buffer in system. */
215#ifndef GKI_MAX_BUF_SIZE
216#define GKI_MAX_BUF_SIZE            GKI_BUF3_SIZE
217#endif
218
219/* The pool ID of the largest PUBLIC fixed buffer in system. */
220#ifndef GKI_MAX_BUF_SIZE_POOL_ID
221#define GKI_MAX_BUF_SIZE_POOL_ID    GKI_POOL_ID_3
222#endif
223
224/* RESERVED buffer pool for OBX */
225/* Ideally there should be 1 buffer for each instance for RX data, and some number
226of TX buffers based on active instances. OBX will only use these if packet size
227requires it. In most cases the large packets are used in only one direction so
228the other direction will use smaller buffers.
229Devices with small amount of RAM should limit the number of active obex objects.
230*/
231/* The size of the buffers in pool 4. */
232#ifndef GKI_BUF4_SIZE
233#define GKI_BUF4_SIZE               (8080+26)
234#endif
235
236/* The number of buffers in buffer pool 4. */
237#ifndef GKI_BUF4_MAX
238#define GKI_BUF4_MAX                (OBX_NUM_SERVERS + OBX_NUM_CLIENTS)
239#endif
240
241/* The ID of buffer pool 4. */
242#ifndef GKI_POOL_ID_4
243#define GKI_POOL_ID_4               4
244#endif
245
246/* The number of fixed GKI buffer pools.
247eL2CAP requires Pool ID 5
248If BTM_SCO_HCI_INCLUDED is FALSE, Pool ID 6 is unnecessary, otherwise set to 7
249If BTA_HL_INCLUDED is FALSE then Pool ID 7 is uncessary and set the following to 7, otherwise set to 8
250If BLE_INCLUDED is FALSE then Pool ID 8 is uncessary and set the following to 8, otherwise set to 9
251POOL_ID 9 is a public pool meant for large buffer needs such as SDP_DB
252*/
253// btla-specific ++
254#ifndef GKI_NUM_FIXED_BUF_POOLS
255#define GKI_NUM_FIXED_BUF_POOLS     10
256#endif
257
258/* The buffer pool usage mask. */
259#ifndef GKI_DEF_BUFPOOL_PERM_MASK
260/* Setting POOL_ID 9 as a public pool meant for large buffers such as SDP_DB */
261#define GKI_DEF_BUFPOOL_PERM_MASK   0xfdf0
262#endif
263// btla-specific --
264
265/* The number of fixed and dynamic buffer pools */
266#ifndef GKI_NUM_TOTAL_BUF_POOLS
267#define GKI_NUM_TOTAL_BUF_POOLS     10
268#endif
269
270/* The following is intended to be a reserved pool for L2CAP
271Flow control and retransmissions and intentionally kept out
272of order */
273
274/* The number of buffers in buffer pool 5. */
275#ifndef GKI_BUF5_MAX
276#define GKI_BUF5_MAX                64
277#endif
278
279/* The ID of buffer pool 5. */
280#ifndef GKI_POOL_ID_5
281#define GKI_POOL_ID_5               5
282#endif
283
284/* The size of the buffers in pool 5
285** Special pool used by l2cap retransmissions only.  This size based on segment
286** that will fit into both DH5 and 2-DH3 packet types after accounting for GKI
287** header.  13 bytes of max headers allows us a 339 payload max. (in btui_app.txt)
288** Note: 748 used for insight scriptwrapper with CAT-2 scripts.
289*/
290#ifndef GKI_BUF5_SIZE
291#define GKI_BUF5_SIZE               748
292#endif
293
294/* The buffer corruption check flag. */
295#ifndef GKI_ENABLE_BUF_CORRUPTION_CHECK
296#define GKI_ENABLE_BUF_CORRUPTION_CHECK TRUE
297#endif
298
299/* The GKI severe error macro. */
300#ifndef GKI_SEVERE
301#define GKI_SEVERE(code)
302#endif
303
304/* TRUE if GKI includes debug functionality. */
305#ifndef GKI_DEBUG
306#define GKI_DEBUG                   FALSE
307#endif
308
309/* Maximum number of exceptions logged. */
310#ifndef GKI_MAX_EXCEPTION
311#define GKI_MAX_EXCEPTION           8
312#endif
313
314/* Maximum number of chars stored for each exception message. */
315#ifndef GKI_MAX_EXCEPTION_MSGLEN
316#define GKI_MAX_EXCEPTION_MSGLEN    64
317#endif
318
319#ifndef GKI_SEND_MSG_FROM_ISR
320#define GKI_SEND_MSG_FROM_ISR    FALSE
321#endif
322
323
324/* The following is intended to be a reserved pool for SCO
325over HCI data and intentionally kept out of order */
326
327/* The ID of buffer pool 6. */
328#ifndef GKI_POOL_ID_6
329#define GKI_POOL_ID_6               6
330#endif
331
332/* The size of the buffers in pool 6,
333  BUF_SIZE = max SCO data 255 + sizeof(BT_HDR) = 8 + SCO packet header 3 + padding 2 = 268 */
334#ifndef GKI_BUF6_SIZE
335#define GKI_BUF6_SIZE               268
336#endif
337
338/* The number of buffers in buffer pool 6. */
339#ifndef GKI_BUF6_MAX
340#define GKI_BUF6_MAX                60
341#endif
342
343
344/* The following pool is a dedicated pool for HDP
345   If a shared pool is more desirable then
346   1. set BTA_HL_LRG_DATA_POOL_ID to the desired Gki Pool ID
347   2. make sure that the shared pool size is larger than 9472
348   3. adjust GKI_NUM_FIXED_BUF_POOLS accordingly since
349      POOL ID 7 is not needed
350*/
351
352/* The ID of buffer pool 7. */
353#ifndef GKI_POOL_ID_7
354#define GKI_POOL_ID_7               7
355#endif
356
357/* The size of the buffers in pool 7 */
358#ifndef GKI_BUF7_SIZE
359#define GKI_BUF7_SIZE               9472
360#endif
361
362/* The number of buffers in buffer pool 7. */
363#ifndef GKI_BUF7_MAX
364#define GKI_BUF7_MAX                2
365#endif
366
367/* The following pool is a dedicated pool for GATT
368   If a shared pool is more desirable then
369   1. set GATT_DB_POOL_ID to the desired Gki Pool ID
370   2. make sure that the shared pool size fit a common GATT database needs
371   3. adjust GKI_NUM_FIXED_BUF_POOLS accordingly since
372      POOL ID 8 is not needed
373*/
374
375/* The ID of buffer pool 8. */
376#ifndef GKI_POOL_ID_8
377#define GKI_POOL_ID_8               8
378#endif
379
380/* The size of the buffers in pool 8 */
381#ifndef GKI_BUF8_SIZE
382#define GKI_BUF8_SIZE               128
383#endif
384
385/* The number of buffers in buffer pool 8. */
386#ifndef GKI_BUF8_MAX
387#define GKI_BUF8_MAX                30
388#endif
389
390// btla-specific ++
391/* The following pool is  meant for large allocations such as SDP_DB */
392#ifndef GKI_POOL_ID_9
393#define GKI_POOL_ID_9              9
394#endif
395
396#ifndef GKI_BUF9_SIZE
397#define GKI_BUF9_SIZE            8192
398#endif
399
400#ifndef GKI_BUF9_MAX
401#define GKI_BUF9_MAX           5
402#endif
403// btla-specific --
404
405/* GKI Trace Macros */
406#define GKI_TRACE_0(m)                          LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC,m)
407#define GKI_TRACE_1(m,p1)                       LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC,m,p1)
408#define GKI_TRACE_2(m,p1,p2)                    LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC,m,p1,p2)
409#define GKI_TRACE_3(m,p1,p2,p3)                 LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC,m,p1,p2,p3)
410#define GKI_TRACE_4(m,p1,p2,p3,p4)              LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC,m,p1,p2,p3,p4)
411#define GKI_TRACE_5(m,p1,p2,p3,p4,p5)           LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC,m,p1,p2,p3,p4,p5)
412#define GKI_TRACE_6(m,p1,p2,p3,p4,p5,p6)        LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC,m,p1,p2,p3,p4,p5,p6)
413
414#define GKI_TRACE_ERROR_0(m)                    LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m)
415#define GKI_TRACE_ERROR_1(m,p1)                 LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m,p1)
416#define GKI_TRACE_ERROR_2(m,p1,p2)              LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m,p1,p2)
417#define GKI_TRACE_ERROR_3(m,p1,p2,p3)           LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m,p1,p2,p3)
418#define GKI_TRACE_ERROR_4(m,p1,p2,p3,p4)        LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m,p1,p2,p3,p4)
419#define GKI_TRACE_ERROR_5(m,p1,p2,p3,p4,p5)     LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m,p1,p2,p3,p4,p5)
420#define GKI_TRACE_ERROR_6(m,p1,p2,p3,p4,p5,p6)  LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m,p1,p2,p3,p4,p5,p6)
421
422#ifdef __cplusplus
423extern "C"
424{
425#endif
426
427EXPORT_API extern void LogMsg (UINT32 trace_set_mask, const char *fmt_str, ...);
428
429#ifdef __cplusplus
430}
431#endif
432
433#endif  /* GKI_TARGET_H */
434