1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************
2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
3e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  Copyright (C) 1999-2012 Broadcom Corporation
4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  you may not use this file except in compliance with the License.
7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  You may obtain a copy of the License at:
8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  See the License for the specific language governing permissions and
15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  limitations under the License.
16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/
18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_H
19e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define GKI_H
20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifdef BUILDCFG
22303fec1d79b7ac30a09713e5db9fff299f7227fbRuchi Kandoi#if (NFC_HAL_TARGET == FALSE)
236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "buildcfg.h"
24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi/* Build config when building HAL */
266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "buildcfg_hal.h"
27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
30303fec1d79b7ac30a09713e5db9fff299f7227fbRuchi Kandoi#ifndef NFC_STANDALONE
31303fec1d79b7ac30a09713e5db9fff299f7227fbRuchi Kandoi#define NFC_STANDALONE FALSE
32303fec1d79b7ac30a09713e5db9fff299f7227fbRuchi Kandoi#endif
33303fec1d79b7ac30a09713e5db9fff299f7227fbRuchi Kandoi
34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Include platform-specific over-rides */
35303fec1d79b7ac30a09713e5db9fff299f7227fbRuchi Kandoi#if (NFC_STANDALONE == TRUE)
366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "bt_types.h"
376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "gki_target.h"
38303fec1d79b7ac30a09713e5db9fff299f7227fbRuchi Kandoi#elif (NFC_HAL_TARGET == TRUE)
396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi/* If building NFC HAL, then use hal target file */
406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "gki_hal_target.h"
416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "nfc_types.h"
42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi/* For non-nfc_standalone, include Bluetooth definitions */
446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "bt_types.h"
45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_BUFFER_DEBUG FALSE
48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Error codes */
506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_SUCCESS 0x00
516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_FAILURE 0x01
526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_INVALID_TASK 0xF0
536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_INVALID_POOL 0xFF
54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/************************************************************************
56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Mailbox definitions. Each task has 4 mailboxes that are used to
57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** send buffers to the task.
58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TASK_MBOX_0 0
606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TASK_MBOX_1 1
616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TASK_MBOX_2 2
626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TASK_MBOX_3 3
63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NUM_TASK_MBOX 4
65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/************************************************************************
67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Event definitions.
68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**
69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** There are 4 reserved events used to signal messages rcvd in task mailboxes.
70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** There are 4 reserved events used to signal timeout events.
71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** There are 8 general purpose events available for applications.
72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define MAX_EVENTS 16
746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TASK_MBOX_0_EVT_MASK 0x0001
766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TASK_MBOX_1_EVT_MASK 0x0002
776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TASK_MBOX_2_EVT_MASK 0x0004
786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TASK_MBOX_3_EVT_MASK 0x0008
796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TIMER_0 0
816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TIMER_1 1
826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TIMER_2 2
836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TIMER_3 3
846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TIMER_0_EVT_MASK 0x0010
866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TIMER_1_EVT_MASK 0x0020
876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TIMER_2_EVT_MASK 0x0040
886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define TIMER_3_EVT_MASK 0x0080
896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define APPL_EVT_0 8
916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define APPL_EVT_1 9
926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define APPL_EVT_2 10
936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define APPL_EVT_3 11
946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define APPL_EVT_4 12
956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define APPL_EVT_5 13
966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define APPL_EVT_6 14
976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define APPL_EVT_7 15
986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define EVENT_MASK(evt) ((uint16_t)(0x0001 << (evt)))
100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/************************************************************************
102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**  Max Time Queue
103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**/
104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_MAX_TIMER_QUEUES
1056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_MAX_TIMER_QUEUES 3
106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/************************************************************************
1096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi**  Macro to determine the pool buffer size based on the GKI POOL ID at compile
1106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi*time.
111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**  Pool IDs index from 0 to GKI_NUM_FIXED_BUF_POOLS - 1
112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (GKI_NUM_FIXED_BUF_POOLS < 1)
115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_POOL_ID_0
1176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_POOL_ID_0 0
118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_POOL_ID_0 */
119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_BUF0_SIZE
1216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_BUF0_SIZE 0
122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_BUF0_SIZE */
123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* GKI_NUM_FIXED_BUF_POOLS < 1 */
125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (GKI_NUM_FIXED_BUF_POOLS < 2)
127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_POOL_ID_1
1296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_POOL_ID_1 0
130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_POOL_ID_1 */
131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_BUF1_SIZE
1336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_BUF1_SIZE 0
134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_BUF1_SIZE */
135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* GKI_NUM_FIXED_BUF_POOLS < 2 */
137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (GKI_NUM_FIXED_BUF_POOLS < 3)
139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_POOL_ID_2
1416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_POOL_ID_2 0
142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_POOL_ID_2 */
143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_BUF2_SIZE
1456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_BUF2_SIZE 0
146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_BUF2_SIZE */
147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* GKI_NUM_FIXED_BUF_POOLS < 3 */
149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (GKI_NUM_FIXED_BUF_POOLS < 4)
151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_POOL_ID_3
1536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_POOL_ID_3 0
154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_POOL_ID_4 */
155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_BUF3_SIZE
1576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_BUF3_SIZE 0
158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_BUF3_SIZE */
159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* GKI_NUM_FIXED_BUF_POOLS < 4 */
161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (GKI_NUM_FIXED_BUF_POOLS < 5)
163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_POOL_ID_4
1656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_POOL_ID_4 0
166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_POOL_ID_4 */
167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_BUF4_SIZE
1696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_BUF4_SIZE 0
170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_BUF4_SIZE */
171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* GKI_NUM_FIXED_BUF_POOLS < 5 */
173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (GKI_NUM_FIXED_BUF_POOLS < 6)
175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_POOL_ID_5
1776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_POOL_ID_5 0
178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_POOL_ID_5 */
179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_BUF5_SIZE
1816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_BUF5_SIZE 0
182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_BUF5_SIZE */
183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* GKI_NUM_FIXED_BUF_POOLS < 6 */
185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (GKI_NUM_FIXED_BUF_POOLS < 7)
187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_POOL_ID_6
1896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_POOL_ID_6 0
190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_POOL_ID_6 */
191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_BUF6_SIZE
1936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_BUF6_SIZE 0
194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_BUF6_SIZE */
195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* GKI_NUM_FIXED_BUF_POOLS < 7 */
197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (GKI_NUM_FIXED_BUF_POOLS < 8)
199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_POOL_ID_7
2016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_POOL_ID_7 0
202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_POOL_ID_7 */
203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_BUF7_SIZE
2056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_BUF7_SIZE 0
206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_BUF7_SIZE */
207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* GKI_NUM_FIXED_BUF_POOLS < 8 */
209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (GKI_NUM_FIXED_BUF_POOLS < 9)
211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_POOL_ID_8
2136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_POOL_ID_8 0
214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_POOL_ID_8 */
215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_BUF8_SIZE
2176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_BUF8_SIZE 0
218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_BUF8_SIZE */
219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* GKI_NUM_FIXED_BUF_POOLS < 9 */
221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (GKI_NUM_FIXED_BUF_POOLS < 10)
223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_POOL_ID_9
2256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_POOL_ID_9 0
226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_POOL_ID_9 */
227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_BUF9_SIZE
2296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_BUF9_SIZE 0
230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_BUF9_SIZE */
231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* GKI_NUM_FIXED_BUF_POOLS < 10 */
233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (GKI_NUM_FIXED_BUF_POOLS < 11)
235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_POOL_ID_10
2376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_POOL_ID_10 0
238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_POOL_ID_10 */
239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_BUF10_SIZE
2416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_BUF10_SIZE 0
242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_BUF10_SIZE */
243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* GKI_NUM_FIXED_BUF_POOLS < 11 */
245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (GKI_NUM_FIXED_BUF_POOLS < 12)
247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_POOL_ID_11
2496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_POOL_ID_11 0
250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_POOL_ID_11 */
251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_BUF11_SIZE
2536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_BUF11_SIZE 0
254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_BUF11_SIZE */
255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* GKI_NUM_FIXED_BUF_POOLS < 12 */
257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (GKI_NUM_FIXED_BUF_POOLS < 13)
259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_POOL_ID_12
2616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_POOL_ID_12 0
262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_POOL_ID_12 */
263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_BUF12_SIZE
2656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_BUF12_SIZE 0
266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_BUF12_SIZE */
267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* GKI_NUM_FIXED_BUF_POOLS < 13 */
269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (GKI_NUM_FIXED_BUF_POOLS < 14)
271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_POOL_ID_13
2736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_POOL_ID_13 0
274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_POOL_ID_13 */
275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_BUF13_SIZE
2776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_BUF13_SIZE 0
278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_BUF13_SIZE */
279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* GKI_NUM_FIXED_BUF_POOLS < 14 */
281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (GKI_NUM_FIXED_BUF_POOLS < 15)
283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_POOL_ID_14
2856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_POOL_ID_14 0
286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_POOL_ID_14 */
287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_BUF14_SIZE
2896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_BUF14_SIZE 0
290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_BUF14_SIZE */
291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* GKI_NUM_FIXED_BUF_POOLS < 15 */
293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (GKI_NUM_FIXED_BUF_POOLS < 16)
295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_POOL_ID_15
2976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_POOL_ID_15 0
298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_POOL_ID_15 */
299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef GKI_BUF15_SIZE
3016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_BUF15_SIZE 0
302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* ifndef GKI_BUF15_SIZE */
303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* GKI_NUM_FIXED_BUF_POOLS < 16 */
305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Timer list entry callback type
307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
3086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef void(TIMER_CBACK)(void* p_tle);
309c2c337f02f62a0c2763bc36a8cbb3126dd443595Ruchi Kandoi
310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Define a timer list entry
311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
3126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct _tle {
3136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  struct _tle* p_next;
3146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  struct _tle* p_prev;
3156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  TIMER_CBACK* p_cback;
3166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  int32_t ticks;
3176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uintptr_t param;
3186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t event;
3196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t in_use;
320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} TIMER_LIST_ENT;
321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Define a timer list queue
323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
3246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
3256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  TIMER_LIST_ENT* p_first;
3266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  TIMER_LIST_ENT* p_last;
3276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  int32_t last_ticks;
328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} TIMER_LIST_Q;
329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/***********************************************************************
331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** This queue is a general purpose buffer queue, for application use.
332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
3336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
3346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  void* p_first;
3356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  void* p_last;
3366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t count;
337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} BUFFER_Q;
338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define GKI_IS_QUEUE_EMPTY(p_q) ((p_q)->count == 0)
340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Task constants
342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef TASKPTR
344512ee63c7cc8feb016863e507a5d33cd0f4242bfRuchi Kandoitypedef void (*TASKPTR)(uint32_t);
345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
34746e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* General pool accessible to GKI_getbuf() */
34846e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define GKI_PUBLIC_POOL 0
3496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_RESTRICTED_POOL 1 /* Inaccessible pool to GKI_getbuf() */
350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/***********************************************************************
352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function prototypes
353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifdef __cplusplus
356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectextern "C" {
357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Task management
360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
3616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern uint8_t GKI_create_task(TASKPTR, uint8_t, int8_t*, uint16_t*, uint16_t,
3626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                               void*, void*);
3636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_exit_task(uint8_t);
3644182dab9b5de4222ffd4a539fa084cb2b56bc6a1Ruchi Kandoiextern uint8_t GKI_get_taskid(void);
3656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_init(void);
3661e67a856a17ee5200cc2b8a4757e8b474ba89da6George Burgess IVextern int8_t* GKI_map_taskname(uint8_t);
3674182dab9b5de4222ffd4a539fa084cb2b56bc6a1Ruchi Kandoiextern uint8_t GKI_resume_task(uint8_t);
3686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_run(void*);
3696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_stop(void);
3704182dab9b5de4222ffd4a539fa084cb2b56bc6a1Ruchi Kandoiextern uint8_t GKI_suspend_task(uint8_t);
3714182dab9b5de4222ffd4a539fa084cb2b56bc6a1Ruchi Kandoiextern uint8_t GKI_is_task_running(uint8_t);
3726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_shutdown(void);
373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* memory management
375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
3766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_shiftdown(uint8_t* p_mem, uint32_t len, uint32_t shift_amount);
3776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_shiftup(uint8_t* p_dest, uint8_t* p_src, uint32_t len);
378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* To send buffers and events between tasks
380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
3816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern uint8_t GKI_isend_event(uint8_t, uint16_t);
3826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_isend_msg(uint8_t, uint8_t, void*);
3836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void* GKI_read_mbox(uint8_t);
3846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_send_msg(uint8_t, uint8_t, void*);
3856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern uint8_t GKI_send_event(uint8_t, uint16_t);
386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* To get and release buffers, change owner and get size
388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
3896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_change_buf_owner(void*, uint8_t);
3906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern uint8_t GKI_create_pool(uint16_t, uint16_t, uint8_t, void*);
3916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_delete_pool(uint8_t);
3926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void* GKI_find_buf_start(void*);
3936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_freebuf(void*);
394303fec1d79b7ac30a09713e5db9fff299f7227fbRuchi Kandoi#if (GKI_BUFFER_DEBUG == TRUE)
3956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_getbuf(size) GKI_getbuf_debug(size, __func__, __LINE__)
3966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void* GKI_getbuf_debug(uint16_t, const char*, int);
397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
3986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void* GKI_getbuf(uint16_t);
399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
4006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern uint16_t GKI_get_buf_size(void*);
401303fec1d79b7ac30a09713e5db9fff299f7227fbRuchi Kandoi#if (GKI_BUFFER_DEBUG == TRUE)
4026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define GKI_getpoolbuf(id) GKI_getpoolbuf_debug(id, __func__, __LINE__)
4036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void* GKI_getpoolbuf_debug(uint8_t, const char*, int);
404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
4056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void* GKI_getpoolbuf(uint8_t);
406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
4086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern uint16_t GKI_poolcount(uint8_t);
4096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern uint16_t GKI_poolfreecount(uint8_t);
4106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern uint16_t GKI_poolutilization(uint8_t);
4116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_register_mempool(void* p_mem);
4124182dab9b5de4222ffd4a539fa084cb2b56bc6a1Ruchi Kandoiextern uint8_t GKI_set_pool_permission(uint8_t, uint8_t);
413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* User buffer queue management
415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
4166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void* GKI_dequeue(BUFFER_Q*);
4176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_enqueue(BUFFER_Q*, void*);
4186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_enqueue_head(BUFFER_Q*, void*);
4196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void* GKI_getfirst(BUFFER_Q*);
4206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void* GKI_getlast(BUFFER_Q*);
4216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void* GKI_getnext(void*);
4226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_init_q(BUFFER_Q*);
4236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern bool GKI_queue_is_empty(BUFFER_Q*);
4246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void* GKI_remove_from_queue(BUFFER_Q*, void*);
4256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern uint16_t GKI_get_pool_bufsize(uint8_t);
426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Timer management
428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
4296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_add_to_timer_list(TIMER_LIST_Q*, TIMER_LIST_ENT*);
4306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_delay(uint32_t);
4316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern uint32_t GKI_get_tick_count(void);
4326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern int8_t* GKI_get_time_stamp(int8_t*);
4336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_init_timer_list(TIMER_LIST_Q*);
4346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_init_timer_list_entry(TIMER_LIST_ENT*);
4356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern int32_t GKI_ready_to_sleep(void);
4366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_remove_from_timer_list(TIMER_LIST_Q*, TIMER_LIST_ENT*);
4376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_start_timer(uint8_t, int32_t, bool);
4386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_stop_timer(uint8_t);
4396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_timer_update(int32_t);
4406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern uint16_t GKI_update_timer_list(TIMER_LIST_Q*, int32_t);
4416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern uint32_t GKI_get_remaining_ticks(TIMER_LIST_Q*, TIMER_LIST_ENT*);
4426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern uint16_t GKI_wait(uint16_t, uint32_t);
443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Start and Stop system time tick callback
445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * true for start system tick if time queue is not empty
446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * false to stop system tick if time queue is empty
447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
4486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef void(SYSTEM_TICK_CBACK)(bool);
449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Time queue management for system ticks
451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
4526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern bool GKI_timer_queue_empty(void);
4536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_timer_queue_register_callback(SYSTEM_TICK_CBACK*);
454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Disable Interrupts, Enable Interrupts
456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
4576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_enable(void);
4586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_disable(void);
4596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_sched_lock(void);
4606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_sched_unlock(void);
461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Allocate (Free) memory from an OS
463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
4646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void* GKI_os_malloc(uint32_t);
4656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_os_free(void*);
466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* os timer operation */
4684182dab9b5de4222ffd4a539fa084cb2b56bc6a1Ruchi Kandoiextern uint32_t GKI_get_os_tick_count(void);
469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Exception handling
471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*/
4726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_exception(uint16_t, char*);
473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
474303fec1d79b7ac30a09713e5db9fff299f7227fbRuchi Kandoi#if (GKI_DEBUG == TRUE)
4756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_PrintBufferUsage(uint8_t* p_num_pools, uint16_t* p_cur_used);
4766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_PrintBuffer(void);
4776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void GKI_print_task(void);
478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#undef GKI_PrintBufferUsage
480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define GKI_PrintBuffer() NULL
481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifdef __cplusplus
484e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
488