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
279 extern "C"
280 {
281 #endif
282 
283 extern void LogMsg (UINT32 trace_set_mask, const char *fmt_str, ...);
284 
285 #ifdef __cplusplus
286 }
287 #endif
288 
289 #endif  /* GKI_TARGET_H */
290