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 226 of TX buffers based on active instances. OBX will only use these if packet size 227 requires it. In most cases the large packets are used in only one direction so 228 the other direction will use smaller buffers. 229 Devices 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. 247 eL2CAP requires Pool ID 5 248 If BTM_SCO_HCI_INCLUDED is FALSE, Pool ID 6 is unnecessary, otherwise set to 7 249 If BTA_HL_INCLUDED is FALSE then Pool ID 7 is uncessary and set the following to 7, otherwise set to 8 250 If BLE_INCLUDED is FALSE then Pool ID 8 is uncessary and set the following to 8, otherwise set to 9 251 POOL_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 271 Flow control and retransmissions and intentionally kept out 272 of 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 325 over 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 (10240 + 24) 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 423 extern "C" 424 { 425 #endif 426 427 EXPORT_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