blob: a6aa2e355857e2921d6a3c1be529360f94d61d6e [file] [log] [blame]
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -08001/******************************************************************************
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_H
19#define GKI_H
20
21#ifdef BUILDCFG
22#include "buildcfg.h"
23#endif
24
Ruchi Kandoi303fec12016-12-14 13:22:38 -080025#ifndef NFC_STANDALONE
26#define NFC_STANDALONE FALSE
27#endif
28
Ruchi Kandoi7dab0e52017-08-03 13:09:49 -070029#include <string>
30
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080031#include "bt_types.h"
Ruchi Kandoi3e626d82017-01-09 15:59:06 -080032#include "gki_target.h"
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080033
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080034/* Error codes */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080035#define GKI_SUCCESS 0x00
36#define GKI_FAILURE 0x01
37#define GKI_INVALID_TASK 0xF0
38#define GKI_INVALID_POOL 0xFF
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080039
40/************************************************************************
41** Mailbox definitions. Each task has 4 mailboxes that are used to
42** send buffers to the task.
43*/
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080044#define TASK_MBOX_0 0
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080045#define TASK_MBOX_2 2
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080046
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080047#define NUM_TASK_MBOX 4
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080048
49/************************************************************************
50** Event definitions.
51**
52** There are 4 reserved events used to signal messages rcvd in task mailboxes.
53** There are 4 reserved events used to signal timeout events.
54** There are 8 general purpose events available for applications.
55*/
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080056
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080057#define TASK_MBOX_0_EVT_MASK 0x0001
58#define TASK_MBOX_1_EVT_MASK 0x0002
59#define TASK_MBOX_2_EVT_MASK 0x0004
60#define TASK_MBOX_3_EVT_MASK 0x0008
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080061
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080062#define TIMER_0 0
63#define TIMER_1 1
64#define TIMER_2 2
65#define TIMER_3 3
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080066
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080067#define TIMER_0_EVT_MASK 0x0010
68#define TIMER_1_EVT_MASK 0x0020
69#define TIMER_2_EVT_MASK 0x0040
70#define TIMER_3_EVT_MASK 0x0080
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080071
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080072#define APPL_EVT_0 8
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080073#define APPL_EVT_7 15
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080074
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080075#define EVENT_MASK(evt) ((uint16_t)(0x0001 << (evt)))
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080076
77/************************************************************************
78** Max Time Queue
79**/
80#ifndef GKI_MAX_TIMER_QUEUES
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080081#define GKI_MAX_TIMER_QUEUES 3
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080082#endif
83
84/************************************************************************
85** Utility macros for timer conversion
86**/
87#ifdef TICKS_PER_SEC
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080088#define GKI_MS_TO_TICKS(x) ((x) / (1000 / TICKS_PER_SEC))
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080089#define GKI_SECS_TO_TICKS(x) ((x) * (TICKS_PER_SEC))
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -080090#define GKI_TICKS_TO_MS(x) ((x) * (1000 / TICKS_PER_SEC))
91#define GKI_TICKS_TO_SECS(x) ((x) * (1 / TICKS_PER_SEC))
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080092#endif
93
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080094/************************************************************************
Ruchi Kandoi552f2b72017-01-28 16:22:55 -080095** Macro to determine the pool buffer size based on the GKI POOL ID at compile
96** time. Pool IDs index from 0 to GKI_NUM_FIXED_BUF_POOLS - 1
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -080097*/
98
99#if (GKI_NUM_FIXED_BUF_POOLS < 1)
100
101#ifndef GKI_POOL_ID_0
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800102#define GKI_POOL_ID_0 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800103#endif /* ifndef GKI_POOL_ID_0 */
104
105#ifndef GKI_BUF0_SIZE
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800106#define GKI_BUF0_SIZE 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800107#endif /* ifndef GKI_BUF0_SIZE */
108
109#endif /* GKI_NUM_FIXED_BUF_POOLS < 1 */
110
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800111#if (GKI_NUM_FIXED_BUF_POOLS < 2)
112
113#ifndef GKI_POOL_ID_1
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800114#define GKI_POOL_ID_1 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800115#endif /* ifndef GKI_POOL_ID_1 */
116
117#ifndef GKI_BUF1_SIZE
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800118#define GKI_BUF1_SIZE 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800119#endif /* ifndef GKI_BUF1_SIZE */
120
121#endif /* GKI_NUM_FIXED_BUF_POOLS < 2 */
122
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800123#if (GKI_NUM_FIXED_BUF_POOLS < 3)
124
125#ifndef GKI_POOL_ID_2
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800126#define GKI_POOL_ID_2 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800127#endif /* ifndef GKI_POOL_ID_2 */
128
129#ifndef GKI_BUF2_SIZE
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800130#define GKI_BUF2_SIZE 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800131#endif /* ifndef GKI_BUF2_SIZE */
132
133#endif /* GKI_NUM_FIXED_BUF_POOLS < 3 */
134
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800135#if (GKI_NUM_FIXED_BUF_POOLS < 4)
136
137#ifndef GKI_POOL_ID_3
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800138#define GKI_POOL_ID_3 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800139#endif /* ifndef GKI_POOL_ID_4 */
140
141#ifndef GKI_BUF3_SIZE
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800142#define GKI_BUF3_SIZE 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800143#endif /* ifndef GKI_BUF3_SIZE */
144
145#endif /* GKI_NUM_FIXED_BUF_POOLS < 4 */
146
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800147#if (GKI_NUM_FIXED_BUF_POOLS < 5)
148
149#ifndef GKI_POOL_ID_4
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800150#define GKI_POOL_ID_4 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800151#endif /* ifndef GKI_POOL_ID_4 */
152
153#ifndef GKI_BUF4_SIZE
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800154#define GKI_BUF4_SIZE 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800155#endif /* ifndef GKI_BUF4_SIZE */
156
157#endif /* GKI_NUM_FIXED_BUF_POOLS < 5 */
158
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800159#if (GKI_NUM_FIXED_BUF_POOLS < 6)
160
161#ifndef GKI_POOL_ID_5
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800162#define GKI_POOL_ID_5 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800163#endif /* ifndef GKI_POOL_ID_5 */
164
165#ifndef GKI_BUF5_SIZE
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800166#define GKI_BUF5_SIZE 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800167#endif /* ifndef GKI_BUF5_SIZE */
168
169#endif /* GKI_NUM_FIXED_BUF_POOLS < 6 */
170
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800171#if (GKI_NUM_FIXED_BUF_POOLS < 7)
172
173#ifndef GKI_POOL_ID_6
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800174#define GKI_POOL_ID_6 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800175#endif /* ifndef GKI_POOL_ID_6 */
176
177#ifndef GKI_BUF6_SIZE
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800178#define GKI_BUF6_SIZE 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800179#endif /* ifndef GKI_BUF6_SIZE */
180
181#endif /* GKI_NUM_FIXED_BUF_POOLS < 7 */
182
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800183#if (GKI_NUM_FIXED_BUF_POOLS < 8)
184
185#ifndef GKI_POOL_ID_7
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800186#define GKI_POOL_ID_7 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800187#endif /* ifndef GKI_POOL_ID_7 */
188
189#ifndef GKI_BUF7_SIZE
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800190#define GKI_BUF7_SIZE 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800191#endif /* ifndef GKI_BUF7_SIZE */
192
193#endif /* GKI_NUM_FIXED_BUF_POOLS < 8 */
194
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800195#if (GKI_NUM_FIXED_BUF_POOLS < 9)
196
197#ifndef GKI_POOL_ID_8
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800198#define GKI_POOL_ID_8 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800199#endif /* ifndef GKI_POOL_ID_8 */
200
201#ifndef GKI_BUF8_SIZE
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800202#define GKI_BUF8_SIZE 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800203#endif /* ifndef GKI_BUF8_SIZE */
204
205#endif /* GKI_NUM_FIXED_BUF_POOLS < 9 */
206
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800207#if (GKI_NUM_FIXED_BUF_POOLS < 10)
208
209#ifndef GKI_POOL_ID_9
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800210#define GKI_POOL_ID_9 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800211#endif /* ifndef GKI_POOL_ID_9 */
212
213#ifndef GKI_BUF9_SIZE
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800214#define GKI_BUF9_SIZE 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800215#endif /* ifndef GKI_BUF9_SIZE */
216
217#endif /* GKI_NUM_FIXED_BUF_POOLS < 10 */
218
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800219#if (GKI_NUM_FIXED_BUF_POOLS < 11)
220
221#ifndef GKI_POOL_ID_10
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800222#define GKI_POOL_ID_10 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800223#endif /* ifndef GKI_POOL_ID_10 */
224
225#ifndef GKI_BUF10_SIZE
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800226#define GKI_BUF10_SIZE 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800227#endif /* ifndef GKI_BUF10_SIZE */
228
229#endif /* GKI_NUM_FIXED_BUF_POOLS < 11 */
230
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800231#if (GKI_NUM_FIXED_BUF_POOLS < 12)
232
233#ifndef GKI_POOL_ID_11
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800234#define GKI_POOL_ID_11 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800235#endif /* ifndef GKI_POOL_ID_11 */
236
237#ifndef GKI_BUF11_SIZE
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800238#define GKI_BUF11_SIZE 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800239#endif /* ifndef GKI_BUF11_SIZE */
240
241#endif /* GKI_NUM_FIXED_BUF_POOLS < 12 */
242
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800243#if (GKI_NUM_FIXED_BUF_POOLS < 13)
244
245#ifndef GKI_POOL_ID_12
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800246#define GKI_POOL_ID_12 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800247#endif /* ifndef GKI_POOL_ID_12 */
248
249#ifndef GKI_BUF12_SIZE
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800250#define GKI_BUF12_SIZE 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800251#endif /* ifndef GKI_BUF12_SIZE */
252
253#endif /* GKI_NUM_FIXED_BUF_POOLS < 13 */
254
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800255#if (GKI_NUM_FIXED_BUF_POOLS < 14)
256
257#ifndef GKI_POOL_ID_13
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800258#define GKI_POOL_ID_13 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800259#endif /* ifndef GKI_POOL_ID_13 */
260
261#ifndef GKI_BUF13_SIZE
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800262#define GKI_BUF13_SIZE 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800263#endif /* ifndef GKI_BUF13_SIZE */
264
265#endif /* GKI_NUM_FIXED_BUF_POOLS < 14 */
266
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800267#if (GKI_NUM_FIXED_BUF_POOLS < 15)
268
269#ifndef GKI_POOL_ID_14
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800270#define GKI_POOL_ID_14 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800271#endif /* ifndef GKI_POOL_ID_14 */
272
273#ifndef GKI_BUF14_SIZE
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800274#define GKI_BUF14_SIZE 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800275#endif /* ifndef GKI_BUF14_SIZE */
276
277#endif /* GKI_NUM_FIXED_BUF_POOLS < 15 */
278
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800279#if (GKI_NUM_FIXED_BUF_POOLS < 16)
280
281#ifndef GKI_POOL_ID_15
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800282#define GKI_POOL_ID_15 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800283#endif /* ifndef GKI_POOL_ID_15 */
284
285#ifndef GKI_BUF15_SIZE
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800286#define GKI_BUF15_SIZE 0
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800287#endif /* ifndef GKI_BUF15_SIZE */
288
289#endif /* GKI_NUM_FIXED_BUF_POOLS < 16 */
290
Ruchi Kandoi114909c2017-04-25 14:27:59 -0700291#ifndef GKI_SHUTDOWN_EVT
292#define GKI_SHUTDOWN_EVT APPL_EVT_7
293#endif
294
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800295/* Timer list entry callback type
296*/
Vishwath Mohan24d616f2018-02-23 11:08:25 -0800297struct TIMER_LIST_ENT;
298typedef void(TIMER_CBACK)(TIMER_LIST_ENT* p_tle);
Ruchi Kandoic2c337f2016-12-12 16:45:31 -0800299
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800300/* Define a timer list entry
301*/
Vishwath Mohan24d616f2018-02-23 11:08:25 -0800302struct TIMER_LIST_ENT {
303 TIMER_LIST_ENT* p_next;
304 TIMER_LIST_ENT* p_prev;
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800305 TIMER_CBACK* p_cback;
306 int32_t ticks;
307 uintptr_t param;
308 uint16_t event;
309 uint8_t in_use;
Vishwath Mohan24d616f2018-02-23 11:08:25 -0800310};
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800311
312/* Define a timer list queue
313*/
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800314typedef struct {
315 TIMER_LIST_ENT* p_first;
316 TIMER_LIST_ENT* p_last;
317 int32_t last_ticks;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800318} TIMER_LIST_Q;
319
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800320/***********************************************************************
321** This queue is a general purpose buffer queue, for application use.
322*/
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800323typedef struct {
324 void* p_first;
325 void* p_last;
326 uint16_t count;
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800327} BUFFER_Q;
328
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800329/* Task constants
330*/
331#ifndef TASKPTR
Vishwath Mohanb46fe8b2017-11-02 07:17:38 -0700332typedef uint32_t (*TASKPTR)(uint32_t);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800333#endif
334
Ruchi Kandoi46e6e282017-01-30 14:26:10 -0800335/* General pool accessible to GKI_getbuf() */
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800336#define GKI_RESTRICTED_POOL 1 /* Inaccessible pool to GKI_getbuf() */
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800337
338/***********************************************************************
339** Function prototypes
340*/
341
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800342/* Task management
343*/
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800344extern uint8_t GKI_create_task(TASKPTR, uint8_t, int8_t*, uint16_t*, uint16_t,
345 void*, void*);
346extern void GKI_exit_task(uint8_t);
Ruchi Kandoi4182dab2017-01-10 13:25:53 -0800347extern uint8_t GKI_get_taskid(void);
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800348extern void GKI_init(void);
349extern int8_t* GKI_map_taskname(uint8_t);
Ruchi Kandoi4182dab2017-01-10 13:25:53 -0800350extern uint8_t GKI_resume_task(uint8_t);
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800351extern void GKI_run(void*);
352extern void GKI_stop(void);
Ruchi Kandoi4182dab2017-01-10 13:25:53 -0800353extern uint8_t GKI_suspend_task(uint8_t);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800354
355/* memory management
356*/
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800357extern void GKI_shiftdown(uint8_t* p_mem, uint32_t len, uint32_t shift_amount);
358extern void GKI_shiftup(uint8_t* p_dest, uint8_t* p_src, uint32_t len);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800359
360/* To send buffers and events between tasks
361*/
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800362extern uint8_t GKI_isend_event(uint8_t, uint16_t);
363extern void GKI_isend_msg(uint8_t, uint8_t, void*);
364extern void* GKI_read_mbox(uint8_t);
365extern void GKI_send_msg(uint8_t, uint8_t, void*);
366extern uint8_t GKI_send_event(uint8_t, uint16_t);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800367
368/* To get and release buffers, change owner and get size
369*/
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800370extern void GKI_change_buf_owner(void*, uint8_t);
371extern uint8_t GKI_create_pool(uint16_t, uint16_t, uint8_t, void*);
372extern void GKI_delete_pool(uint8_t);
373extern void* GKI_find_buf_start(void*);
374extern void GKI_freebuf(void*);
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800375extern void* GKI_getbuf(uint16_t);
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800376extern uint16_t GKI_get_buf_size(void*);
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800377extern void* GKI_getpoolbuf(uint8_t);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800378
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800379extern uint16_t GKI_poolcount(uint8_t);
380extern uint16_t GKI_poolfreecount(uint8_t);
381extern uint16_t GKI_poolutilization(uint8_t);
382extern void GKI_register_mempool(void* p_mem);
Ruchi Kandoi4182dab2017-01-10 13:25:53 -0800383extern uint8_t GKI_set_pool_permission(uint8_t, uint8_t);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800384
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800385/* User buffer queue management
386*/
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800387extern void* GKI_dequeue(BUFFER_Q*);
388extern void GKI_enqueue(BUFFER_Q*, void*);
389extern void GKI_enqueue_head(BUFFER_Q*, void*);
390extern void* GKI_getfirst(BUFFER_Q*);
391extern void* GKI_getlast(BUFFER_Q*);
392extern void* GKI_getnext(void*);
393extern void GKI_init_q(BUFFER_Q*);
394extern bool GKI_queue_is_empty(BUFFER_Q*);
395extern void* GKI_remove_from_queue(BUFFER_Q*, void*);
396extern uint16_t GKI_get_pool_bufsize(uint8_t);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800397
398/* Timer management
399*/
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800400extern void GKI_add_to_timer_list(TIMER_LIST_Q*, TIMER_LIST_ENT*);
401extern void GKI_delay(uint32_t);
402extern uint32_t GKI_get_tick_count(void);
403extern int8_t* GKI_get_time_stamp(int8_t*);
404extern void GKI_init_timer_list(TIMER_LIST_Q*);
405extern void GKI_init_timer_list_entry(TIMER_LIST_ENT*);
406extern int32_t GKI_ready_to_sleep(void);
407extern void GKI_remove_from_timer_list(TIMER_LIST_Q*, TIMER_LIST_ENT*);
408extern void GKI_start_timer(uint8_t, int32_t, bool);
409extern void GKI_stop_timer(uint8_t);
410extern void GKI_timer_update(int32_t);
411extern uint16_t GKI_update_timer_list(TIMER_LIST_Q*, int32_t);
412extern uint32_t GKI_get_remaining_ticks(TIMER_LIST_Q*, TIMER_LIST_ENT*);
413extern uint16_t GKI_wait(uint16_t, uint32_t);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800414
415/* Start and Stop system time tick callback
416 * true for start system tick if time queue is not empty
417 * false to stop system tick if time queue is empty
418*/
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800419typedef void(SYSTEM_TICK_CBACK)(bool);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800420
421/* Time queue management for system ticks
422*/
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800423extern bool GKI_timer_queue_empty(void);
424extern void GKI_timer_queue_register_callback(SYSTEM_TICK_CBACK*);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800425
426/* Disable Interrupts, Enable Interrupts
427*/
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800428extern void GKI_enable(void);
429extern void GKI_disable(void);
430extern void GKI_sched_lock(void);
431extern void GKI_sched_unlock(void);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800432
433/* Allocate (Free) memory from an OS
434*/
Ruchi Kandoi6fca02d2017-01-30 14:28:16 -0800435extern void* GKI_os_malloc(uint32_t);
436extern void GKI_os_free(void*);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800437
438/* os timer operation */
Ruchi Kandoi4182dab2017-01-10 13:25:53 -0800439extern uint32_t GKI_get_os_tick_count(void);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800440
441/* Exception handling
442*/
Ruchi Kandoi7dab0e52017-08-03 13:09:49 -0700443extern void GKI_exception(uint16_t, std::string);
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800444
The Android Open Source Projecte9df6ba2012-12-13 14:55:37 -0800445#endif