1/******************************************************************************
2 *
3 *  Copyright (C) 2012-2014 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
19#ifndef GKI_HAL_TARGET_H
20#define GKI_HAL_TARGET_H
21
22#ifdef BUILDCFG
23#include "buildcfg_hal.h"
24#endif
25
26#include "data_types.h"
27
28/* Define export prefixes for modules exported by HAL */
29#ifndef GKI_API
30#define GKI_API
31#endif
32
33#ifndef UDRV_API
34#define UDRV_API
35#endif
36
37#ifndef EXPORT_API
38#define EXPORT_API
39#endif
40
41
42/******************************************************************************
43**
44** Task configuration
45**
46******************************************************************************/
47
48/* Definitions of task IDs for inter-task messaging */
49#ifndef NFC_HAL_TASK
50#define NFC_HAL_TASK                0
51#endif
52
53/* The number of GKI tasks in the software system. */
54#ifndef GKI_MAX_TASKS
55#define GKI_MAX_TASKS               1
56#endif
57
58
59/******************************************************************************
60**
61** Buffer pool assignment
62**
63******************************************************************************/
64
65/* GKI pool for NCI messages */
66#ifndef NFC_HAL_NCI_POOL_ID
67#define NFC_HAL_NCI_POOL_ID         GKI_POOL_ID_1
68#endif
69
70#ifndef NFC_HAL_NCI_POOL_BUF_SIZE
71#define NFC_HAL_NCI_POOL_BUF_SIZE   GKI_BUF1_SIZE
72#endif
73
74
75/******************************************************************************
76**
77** Timer configuration
78**
79******************************************************************************/
80
81/* The number of GKI timers in the software system. */
82#ifndef GKI_NUM_TIMERS
83#define GKI_NUM_TIMERS              2
84#endif
85
86/* A conversion value for translating ticks to calculate GKI timer.  */
87#ifndef TICKS_PER_SEC
88#define TICKS_PER_SEC               100
89#endif
90
91/************************************************************************
92**  Utility macros converting ticks to time with user define OS ticks per sec
93**/
94#ifndef GKI_MS_TO_TICKS
95#define GKI_MS_TO_TICKS(x)   ((x) / (1000 / TICKS_PER_SEC))
96#endif
97
98#ifndef GKI_SECS_TO_TICKS
99#define GKI_SECS_TO_TICKS(x)   ((x) * (TICKS_PER_SEC))
100#endif
101
102#ifndef GKI_TICKS_TO_MS
103#define GKI_TICKS_TO_MS(x)   ((x) * 1000 / TICKS_PER_SEC)
104#endif
105
106#ifndef GKI_TICKS_TO_SECS
107#define GKI_TICKS_TO_SECS(x)   ((x) / TICKS_PER_SEC)
108#endif
109
110
111
112/* TICK per second from OS (OS dependent change this macro accordingly to various OS) */
113#ifndef OS_TICKS_PER_SEC
114#define OS_TICKS_PER_SEC               1000
115#endif
116
117/************************************************************************
118**  Utility macros converting ticks to time with user define OS ticks per sec
119**/
120
121#ifndef GKI_OS_TICKS_TO_MS
122#define GKI_OS_TICKS_TO_MS(x)   ((x) * 1000 / OS_TICKS_PER_SEC)
123#endif
124
125
126#ifndef GKI_OS_TICKS_TO_SECS
127#define GKI_OS_TICKS_TO_SECS(x)   ((x) / OS_TICKS_PER_SEC))
128#endif
129
130
131/* delay in ticks before stopping system tick. */
132#ifndef GKI_DELAY_STOP_SYS_TICK
133#define GKI_DELAY_STOP_SYS_TICK     10
134#endif
135
136/* Option to guarantee no preemption during timer expiration (most system don't need this) */
137#ifndef GKI_TIMER_LIST_NOPREEMPT
138#define GKI_TIMER_LIST_NOPREEMPT    FALSE
139#endif
140
141/******************************************************************************
142**
143** Buffer configuration
144**
145******************************************************************************/
146
147/* TRUE if GKI uses dynamic buffers. */
148#ifndef GKI_USE_DYNAMIC_BUFFERS
149#define GKI_USE_DYNAMIC_BUFFERS     FALSE
150#endif
151
152/* The size of the buffers in pool 0. */
153#ifndef GKI_BUF0_SIZE
154#define GKI_BUF0_SIZE               64
155#endif
156
157/* The number of buffers in buffer pool 0. */
158#ifndef GKI_BUF0_MAX
159#define GKI_BUF0_MAX                8
160#endif
161
162/* The ID of buffer pool 0. */
163#ifndef GKI_POOL_ID_0
164#define GKI_POOL_ID_0               0
165#endif
166
167/* The size of the buffers in pool 1. */
168#ifndef GKI_BUF1_SIZE
169#define GKI_BUF1_SIZE               288
170#endif
171
172/* The number of buffers in buffer pool 1. */
173#ifndef GKI_BUF1_MAX
174#define GKI_BUF1_MAX                8
175#endif
176
177/* The ID of buffer pool 1. */
178#ifndef GKI_POOL_ID_1
179#define GKI_POOL_ID_1               1
180#endif
181
182/* The size of the largest PUBLIC fixed buffer in system. */
183#ifndef GKI_MAX_BUF_SIZE
184#define GKI_MAX_BUF_SIZE            GKI_BUF1_SIZE
185#endif
186
187/* The pool ID of the largest PUBLIC fixed buffer in system. */
188#ifndef GKI_MAX_BUF_SIZE_POOL_ID
189#define GKI_MAX_BUF_SIZE_POOL_ID    GKI_POOL_ID_1
190#endif
191
192/* buffer size for USERIAL, it must large enough to hold NFC_HDR and max packet size */
193#ifndef USERIAL_POOL_BUF_SIZE
194#define USERIAL_POOL_BUF_SIZE       GKI_BUF1_SIZE
195#endif
196
197/* buffer pool ID for USERIAL */
198#ifndef USERIAL_POOL_ID
199#define USERIAL_POOL_ID             GKI_POOL_ID_1
200#endif
201
202#ifndef GKI_NUM_FIXED_BUF_POOLS
203#define GKI_NUM_FIXED_BUF_POOLS     2
204#endif
205
206/* The number of fixed and dynamic buffer pools */
207#ifndef GKI_NUM_TOTAL_BUF_POOLS
208#define GKI_NUM_TOTAL_BUF_POOLS     2
209#endif
210
211/* The buffer pool usage mask. */
212#ifndef GKI_DEF_BUFPOOL_PERM_MASK
213#define GKI_DEF_BUFPOOL_PERM_MASK   0xfff0
214#endif
215
216/* The buffer corruption check flag. */
217#ifndef GKI_ENABLE_BUF_CORRUPTION_CHECK
218#define GKI_ENABLE_BUF_CORRUPTION_CHECK TRUE
219#endif
220
221/* The GKI severe error macro. */
222#ifndef GKI_SEVERE
223#define GKI_SEVERE(code)
224#endif
225
226/* TRUE if GKI includes debug functionality. */
227#ifndef GKI_DEBUG
228#define GKI_DEBUG                   FALSE
229#endif
230
231/* Maximum number of exceptions logged. */
232#ifndef GKI_MAX_EXCEPTION
233#define GKI_MAX_EXCEPTION           8
234#endif
235
236/* Maximum number of chars stored for each exception message. */
237#ifndef GKI_MAX_EXCEPTION_MSGLEN
238#define GKI_MAX_EXCEPTION_MSGLEN    64
239#endif
240
241#ifndef GKI_SEND_MSG_FROM_ISR
242#define GKI_SEND_MSG_FROM_ISR    FALSE
243#endif
244
245
246#if defined(GKI_DEBUG) && (GKI_DEBUG == TRUE)
247#ifdef LOG_TAG
248#undef LOG_TAG
249#endif
250#define LOG_TAG "GKI_LINUX"
251/* GKI Trace Macros */
252#define GKI_TRACE_0(m)                          LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC,m)
253#define GKI_TRACE_1(m,p1)                       LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC,m,p1)
254#define GKI_TRACE_2(m,p1,p2)                    LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC,m,p1,p2)
255#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)
256#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)
257#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)
258#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)
259#else
260#define GKI_TRACE_0(m)
261#define GKI_TRACE_1(m,p1)
262#define GKI_TRACE_2(m,p1,p2)
263#define GKI_TRACE_3(m,p1,p2,p3)
264#define GKI_TRACE_4(m,p1,p2,p3,p4)
265#define GKI_TRACE_5(m,p1,p2,p3,p4,p5)
266#define GKI_TRACE_6(m,p1,p2,p3,p4,p5,p6)
267
268#endif
269
270#define GKI_TRACE_ERROR_0(m)                    LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m)
271#define GKI_TRACE_ERROR_1(m,p1)                 LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m,p1)
272#define GKI_TRACE_ERROR_2(m,p1,p2)              LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m,p1,p2)
273#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)
274#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)
275#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)
276#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)
277
278#ifdef __cplusplus
279extern "C"
280{
281#endif
282
283extern void LogMsg (UINT32 trace_set_mask, const char *fmt_str, ...);
284
285#ifdef __cplusplus
286}
287#endif
288
289#endif  /* GKI_TARGET_H */
290