aboutsummaryrefslogtreecommitdiff
path: root/keyboards/projectkb/alice/chconf.h
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/projectkb/alice/chconf.h')
-rw-r--r--keyboards/projectkb/alice/chconf.h202
1 files changed, 198 insertions, 4 deletions
diff --git a/keyboards/projectkb/alice/chconf.h b/keyboards/projectkb/alice/chconf.h
index 89388dd5a..4640ff533 100644
--- a/keyboards/projectkb/alice/chconf.h
+++ b/keyboards/projectkb/alice/chconf.h
@@ -1,5 +1,5 @@
1/* 1/*
2 ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio 2 ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
3 3
4 Licensed under the Apache License, Version 2.0 (the "License"); 4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License. 5 you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
15*/ 15*/
16 16
17/** 17/**
18 * @file templates/chconf.h 18 * @file rt/templates/chconf.h
19 * @brief Configuration file template. 19 * @brief Configuration file template.
20 * @details A copy of this file must be placed in each project directory, it 20 * @details A copy of this file must be placed in each project directory, it
21 * contains the application specific kernel settings. 21 * contains the application specific kernel settings.
@@ -29,6 +29,7 @@
29#define CHCONF_H 29#define CHCONF_H
30 30
31#define _CHIBIOS_RT_CONF_ 31#define _CHIBIOS_RT_CONF_
32#define _CHIBIOS_RT_CONF_VER_6_0_
32 33
33/*===========================================================================*/ 34/*===========================================================================*/
34/** 35/**
@@ -41,14 +42,34 @@
41 * @brief System time counter resolution. 42 * @brief System time counter resolution.
42 * @note Allowed values are 16 or 32 bits. 43 * @note Allowed values are 16 or 32 bits.
43 */ 44 */
45#if !defined(CH_CFG_ST_RESOLUTION)
44#define CH_CFG_ST_RESOLUTION 32 46#define CH_CFG_ST_RESOLUTION 32
47#endif
45 48
46/** 49/**
47 * @brief System tick frequency. 50 * @brief System tick frequency.
48 * @details Frequency of the system timer that drives the system ticks. This 51 * @details Frequency of the system timer that drives the system ticks. This
49 * setting also defines the system tick time unit. 52 * setting also defines the system tick time unit.
50 */ 53 */
54#if !defined(CH_CFG_ST_FREQUENCY)
51#define CH_CFG_ST_FREQUENCY 10000 55#define CH_CFG_ST_FREQUENCY 10000
56#endif
57
58/**
59 * @brief Time intervals data size.
60 * @note Allowed values are 16, 32 or 64 bits.
61 */
62#if !defined(CH_CFG_INTERVALS_SIZE)
63#define CH_CFG_INTERVALS_SIZE 32
64#endif
65
66/**
67 * @brief Time types data size.
68 * @note Allowed values are 16 or 32 bits.
69 */
70#if !defined(CH_CFG_TIME_TYPES_SIZE)
71#define CH_CFG_TIME_TYPES_SIZE 32
72#endif
52 73
53/** 74/**
54 * @brief Time delta constant for the tick-less mode. 75 * @brief Time delta constant for the tick-less mode.
@@ -58,7 +79,9 @@
58 * The value one is not valid, timeouts are rounded up to 79 * The value one is not valid, timeouts are rounded up to
59 * this value. 80 * this value.
60 */ 81 */
82#if !defined(CH_CFG_ST_TIMEDELTA)
61#define CH_CFG_ST_TIMEDELTA 2 83#define CH_CFG_ST_TIMEDELTA 2
84#endif
62 85
63/** @} */ 86/** @} */
64 87
@@ -81,7 +104,9 @@
81 * @note The round robin preemption is not supported in tickless mode and 104 * @note The round robin preemption is not supported in tickless mode and
82 * must be set to zero in that case. 105 * must be set to zero in that case.
83 */ 106 */
107#if !defined(CH_CFG_TIME_QUANTUM)
84#define CH_CFG_TIME_QUANTUM 0 108#define CH_CFG_TIME_QUANTUM 0
109#endif
85 110
86/** 111/**
87 * @brief Managed RAM size. 112 * @brief Managed RAM size.
@@ -94,7 +119,9 @@
94 * provide the @p __heap_base__ and @p __heap_end__ symbols. 119 * provide the @p __heap_base__ and @p __heap_end__ symbols.
95 * @note Requires @p CH_CFG_USE_MEMCORE. 120 * @note Requires @p CH_CFG_USE_MEMCORE.
96 */ 121 */
122#if !defined(CH_CFG_MEMCORE_SIZE)
97#define CH_CFG_MEMCORE_SIZE 0 123#define CH_CFG_MEMCORE_SIZE 0
124#endif
98 125
99/** 126/**
100 * @brief Idle thread automatic spawn suppression. 127 * @brief Idle thread automatic spawn suppression.
@@ -103,7 +130,9 @@
103 * function becomes the idle thread and must implement an 130 * function becomes the idle thread and must implement an
104 * infinite loop. 131 * infinite loop.
105 */ 132 */
133#if !defined(CH_CFG_NO_IDLE_THREAD)
106#define CH_CFG_NO_IDLE_THREAD FALSE 134#define CH_CFG_NO_IDLE_THREAD FALSE
135#endif
107 136
108/** @} */ 137/** @} */
109 138
@@ -122,7 +151,9 @@
122 * @note This is not related to the compiler optimization options. 151 * @note This is not related to the compiler optimization options.
123 * @note The default is @p TRUE. 152 * @note The default is @p TRUE.
124 */ 153 */
154#if !defined(CH_CFG_OPTIMIZE_SPEED)
125#define CH_CFG_OPTIMIZE_SPEED FALSE 155#define CH_CFG_OPTIMIZE_SPEED FALSE
156#endif
126 157
127/** @} */ 158/** @} */
128 159
@@ -140,7 +171,9 @@
140 * 171 *
141 * @note The default is @p TRUE. 172 * @note The default is @p TRUE.
142 */ 173 */
174#if !defined(CH_CFG_USE_TM)
143#define CH_CFG_USE_TM FALSE 175#define CH_CFG_USE_TM FALSE
176#endif
144 177
145/** 178/**
146 * @brief Threads registry APIs. 179 * @brief Threads registry APIs.
@@ -148,7 +181,9 @@
148 * 181 *
149 * @note The default is @p TRUE. 182 * @note The default is @p TRUE.
150 */ 183 */
184#if !defined(CH_CFG_USE_REGISTRY)
151#define CH_CFG_USE_REGISTRY TRUE 185#define CH_CFG_USE_REGISTRY TRUE
186#endif
152 187
153/** 188/**
154 * @brief Threads synchronization APIs. 189 * @brief Threads synchronization APIs.
@@ -157,7 +192,9 @@
157 * 192 *
158 * @note The default is @p TRUE. 193 * @note The default is @p TRUE.
159 */ 194 */
195#if !defined(CH_CFG_USE_WAITEXIT)
160#define CH_CFG_USE_WAITEXIT TRUE 196#define CH_CFG_USE_WAITEXIT TRUE
197#endif
161 198
162/** 199/**
163 * @brief Semaphores APIs. 200 * @brief Semaphores APIs.
@@ -165,7 +202,9 @@
165 * 202 *
166 * @note The default is @p TRUE. 203 * @note The default is @p TRUE.
167 */ 204 */
205#if !defined(CH_CFG_USE_SEMAPHORES)
168#define CH_CFG_USE_SEMAPHORES TRUE 206#define CH_CFG_USE_SEMAPHORES TRUE
207#endif
169 208
170/** 209/**
171 * @brief Semaphores queuing mode. 210 * @brief Semaphores queuing mode.
@@ -176,7 +215,9 @@
176 * requirements. 215 * requirements.
177 * @note Requires @p CH_CFG_USE_SEMAPHORES. 216 * @note Requires @p CH_CFG_USE_SEMAPHORES.
178 */ 217 */
218#if !defined(CH_CFG_USE_SEMAPHORES_PRIORITY)
179#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE 219#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
220#endif
180 221
181/** 222/**
182 * @brief Mutexes APIs. 223 * @brief Mutexes APIs.
@@ -184,7 +225,9 @@
184 * 225 *
185 * @note The default is @p TRUE. 226 * @note The default is @p TRUE.
186 */ 227 */
228#if !defined(CH_CFG_USE_MUTEXES)
187#define CH_CFG_USE_MUTEXES TRUE 229#define CH_CFG_USE_MUTEXES TRUE
230#endif
188 231
189/** 232/**
190 * @brief Enables recursive behavior on mutexes. 233 * @brief Enables recursive behavior on mutexes.
@@ -194,7 +237,9 @@
194 * @note The default is @p FALSE. 237 * @note The default is @p FALSE.
195 * @note Requires @p CH_CFG_USE_MUTEXES. 238 * @note Requires @p CH_CFG_USE_MUTEXES.
196 */ 239 */
240#if !defined(CH_CFG_USE_MUTEXES_RECURSIVE)
197#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE 241#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
242#endif
198 243
199/** 244/**
200 * @brief Conditional Variables APIs. 245 * @brief Conditional Variables APIs.
@@ -204,7 +249,9 @@
204 * @note The default is @p TRUE. 249 * @note The default is @p TRUE.
205 * @note Requires @p CH_CFG_USE_MUTEXES. 250 * @note Requires @p CH_CFG_USE_MUTEXES.
206 */ 251 */
252#if !defined(CH_CFG_USE_CONDVARS)
207#define CH_CFG_USE_CONDVARS TRUE 253#define CH_CFG_USE_CONDVARS TRUE
254#endif
208 255
209/** 256/**
210 * @brief Conditional Variables APIs with timeout. 257 * @brief Conditional Variables APIs with timeout.
@@ -214,7 +261,9 @@
214 * @note The default is @p TRUE. 261 * @note The default is @p TRUE.
215 * @note Requires @p CH_CFG_USE_CONDVARS. 262 * @note Requires @p CH_CFG_USE_CONDVARS.
216 */ 263 */
264#if !defined(CH_CFG_USE_CONDVARS_TIMEOUT)
217#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE 265#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE
266#endif
218 267
219/** 268/**
220 * @brief Events Flags APIs. 269 * @brief Events Flags APIs.
@@ -222,7 +271,9 @@
222 * 271 *
223 * @note The default is @p TRUE. 272 * @note The default is @p TRUE.
224 */ 273 */
274#if !defined(CH_CFG_USE_EVENTS)
225#define CH_CFG_USE_EVENTS TRUE 275#define CH_CFG_USE_EVENTS TRUE
276#endif
226 277
227/** 278/**
228 * @brief Events Flags APIs with timeout. 279 * @brief Events Flags APIs with timeout.
@@ -232,7 +283,9 @@
232 * @note The default is @p TRUE. 283 * @note The default is @p TRUE.
233 * @note Requires @p CH_CFG_USE_EVENTS. 284 * @note Requires @p CH_CFG_USE_EVENTS.
234 */ 285 */
286#if !defined(CH_CFG_USE_EVENTS_TIMEOUT)
235#define CH_CFG_USE_EVENTS_TIMEOUT TRUE 287#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
288#endif
236 289
237/** 290/**
238 * @brief Synchronous Messages APIs. 291 * @brief Synchronous Messages APIs.
@@ -241,7 +294,9 @@
241 * 294 *
242 * @note The default is @p TRUE. 295 * @note The default is @p TRUE.
243 */ 296 */
297#if !defined(CH_CFG_USE_MESSAGES)
244#define CH_CFG_USE_MESSAGES TRUE 298#define CH_CFG_USE_MESSAGES TRUE
299#endif
245 300
246/** 301/**
247 * @brief Synchronous Messages queuing mode. 302 * @brief Synchronous Messages queuing mode.
@@ -252,7 +307,9 @@
252 * requirements. 307 * requirements.
253 * @note Requires @p CH_CFG_USE_MESSAGES. 308 * @note Requires @p CH_CFG_USE_MESSAGES.
254 */ 309 */
310#if !defined(CH_CFG_USE_MESSAGES_PRIORITY)
255#define CH_CFG_USE_MESSAGES_PRIORITY FALSE 311#define CH_CFG_USE_MESSAGES_PRIORITY FALSE
312#endif
256 313
257/** 314/**
258 * @brief Mailboxes APIs. 315 * @brief Mailboxes APIs.
@@ -262,7 +319,9 @@
262 * @note The default is @p TRUE. 319 * @note The default is @p TRUE.
263 * @note Requires @p CH_CFG_USE_SEMAPHORES. 320 * @note Requires @p CH_CFG_USE_SEMAPHORES.
264 */ 321 */
322#if !defined(CH_CFG_USE_MAILBOXES)
265#define CH_CFG_USE_MAILBOXES TRUE 323#define CH_CFG_USE_MAILBOXES TRUE
324#endif
266 325
267/** 326/**
268 * @brief Core Memory Manager APIs. 327 * @brief Core Memory Manager APIs.
@@ -271,7 +330,9 @@
271 * 330 *
272 * @note The default is @p TRUE. 331 * @note The default is @p TRUE.
273 */ 332 */
333#if !defined(CH_CFG_USE_MEMCORE)
274#define CH_CFG_USE_MEMCORE FALSE 334#define CH_CFG_USE_MEMCORE FALSE
335#endif
275 336
276/** 337/**
277 * @brief Heap Allocator APIs. 338 * @brief Heap Allocator APIs.
@@ -283,7 +344,9 @@
283 * @p CH_CFG_USE_SEMAPHORES. 344 * @p CH_CFG_USE_SEMAPHORES.
284 * @note Mutexes are recommended. 345 * @note Mutexes are recommended.
285 */ 346 */
347#if !defined(CH_CFG_USE_HEAP)
286#define CH_CFG_USE_HEAP FALSE 348#define CH_CFG_USE_HEAP FALSE
349#endif
287 350
288/** 351/**
289 * @brief Memory Pools Allocator APIs. 352 * @brief Memory Pools Allocator APIs.
@@ -292,7 +355,31 @@
292 * 355 *
293 * @note The default is @p TRUE. 356 * @note The default is @p TRUE.
294 */ 357 */
358#if !defined(CH_CFG_USE_MEMPOOLS)
295#define CH_CFG_USE_MEMPOOLS FALSE 359#define CH_CFG_USE_MEMPOOLS FALSE
360#endif
361
362/**
363 * @brief Objects FIFOs APIs.
364 * @details If enabled then the objects FIFOs APIs are included
365 * in the kernel.
366 *
367 * @note The default is @p TRUE.
368 */
369#if !defined(CH_CFG_USE_OBJ_FIFOS)
370#define CH_CFG_USE_OBJ_FIFOS FALSE
371#endif
372
373/**
374 * @brief Pipes APIs.
375 * @details If enabled then the pipes APIs are included
376 * in the kernel.
377 *
378 * @note The default is @p TRUE.
379 */
380#if !defined(CH_CFG_USE_PIPES)
381#define CH_CFG_USE_PIPES FALSE
382#endif
296 383
297/** 384/**
298 * @brief Dynamic Threads APIs. 385 * @brief Dynamic Threads APIs.
@@ -303,7 +390,80 @@
303 * @note Requires @p CH_CFG_USE_WAITEXIT. 390 * @note Requires @p CH_CFG_USE_WAITEXIT.
304 * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS. 391 * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
305 */ 392 */
393#if !defined(CH_CFG_USE_DYNAMIC)
306#define CH_CFG_USE_DYNAMIC FALSE 394#define CH_CFG_USE_DYNAMIC FALSE
395#endif
396
397/** @} */
398
399/*===========================================================================*/
400/**
401 * @name Objects factory options
402 * @{
403 */
404/*===========================================================================*/
405
406/**
407 * @brief Objects Factory APIs.
408 * @details If enabled then the objects factory APIs are included in the
409 * kernel.
410 *
411 * @note The default is @p FALSE.
412 */
413#if !defined(CH_CFG_USE_FACTORY)
414#define CH_CFG_USE_FACTORY FALSE
415#endif
416
417/**
418 * @brief Maximum length for object names.
419 * @details If the specified length is zero then the name is stored by
420 * pointer but this could have unintended side effects.
421 */
422#if !defined(CH_CFG_FACTORY_MAX_NAMES_LENGTH)
423#define CH_CFG_FACTORY_MAX_NAMES_LENGTH 8
424#endif
425
426/**
427 * @brief Enables the registry of generic objects.
428 */
429#if !defined(CH_CFG_FACTORY_OBJECTS_REGISTRY)
430#define CH_CFG_FACTORY_OBJECTS_REGISTRY FALSE
431#endif
432
433/**
434 * @brief Enables factory for generic buffers.
435 */
436#if !defined(CH_CFG_FACTORY_GENERIC_BUFFERS)
437#define CH_CFG_FACTORY_GENERIC_BUFFERS FALSE
438#endif
439
440/**
441 * @brief Enables factory for semaphores.
442 */
443#if !defined(CH_CFG_FACTORY_SEMAPHORES)
444#define CH_CFG_FACTORY_SEMAPHORES FALSE
445#endif
446
447/**
448 * @brief Enables factory for mailboxes.
449 */
450#if !defined(CH_CFG_FACTORY_MAILBOXES)
451#define CH_CFG_FACTORY_MAILBOXES FALSE
452#endif
453
454/**
455 * @brief Enables factory for objects FIFOs.
456 */
457#if !defined(CH_CFG_FACTORY_OBJ_FIFOS)
458#define CH_CFG_FACTORY_OBJ_FIFOS FALSE
459#endif
460
461/**
462 * @brief Enables factory for Pipes.
463 */
464#if !defined(CH_CFG_FACTORY_PIPES) || defined(__DOXYGEN__)
465#define CH_CFG_FACTORY_PIPES FALSE
466#endif
307 467
308/** @} */ 468/** @} */
309 469
@@ -319,7 +479,9 @@
319 * 479 *
320 * @note The default is @p FALSE. 480 * @note The default is @p FALSE.
321 */ 481 */
482#if !defined(CH_DBG_STATISTICS)
322#define CH_DBG_STATISTICS FALSE 483#define CH_DBG_STATISTICS FALSE
484#endif
323 485
324/** 486/**
325 * @brief Debug option, system state check. 487 * @brief Debug option, system state check.
@@ -328,7 +490,9 @@
328 * 490 *
329 * @note The default is @p FALSE. 491 * @note The default is @p FALSE.
330 */ 492 */
493#if !defined(CH_DBG_SYSTEM_STATE_CHECK)
331#define CH_DBG_SYSTEM_STATE_CHECK FALSE 494#define CH_DBG_SYSTEM_STATE_CHECK FALSE
495#endif
332 496
333/** 497/**
334 * @brief Debug option, parameters checks. 498 * @brief Debug option, parameters checks.
@@ -337,7 +501,9 @@
337 * 501 *
338 * @note The default is @p FALSE. 502 * @note The default is @p FALSE.
339 */ 503 */
504#if !defined(CH_DBG_ENABLE_CHECKS)
340#define CH_DBG_ENABLE_CHECKS FALSE 505#define CH_DBG_ENABLE_CHECKS FALSE
506#endif
341 507
342/** 508/**
343 * @brief Debug option, consistency checks. 509 * @brief Debug option, consistency checks.
@@ -347,7 +513,9 @@
347 * 513 *
348 * @note The default is @p FALSE. 514 * @note The default is @p FALSE.
349 */ 515 */
516#if !defined(CH_DBG_ENABLE_ASSERTS)
350#define CH_DBG_ENABLE_ASSERTS FALSE 517#define CH_DBG_ENABLE_ASSERTS FALSE
518#endif
351 519
352/** 520/**
353 * @brief Debug option, trace buffer. 521 * @brief Debug option, trace buffer.
@@ -355,14 +523,18 @@
355 * 523 *
356 * @note The default is @p CH_DBG_TRACE_MASK_DISABLED. 524 * @note The default is @p CH_DBG_TRACE_MASK_DISABLED.
357 */ 525 */
526#if !defined(CH_DBG_TRACE_MASK)
358#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED 527#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
528#endif
359 529
360/** 530/**
361 * @brief Trace buffer entries. 531 * @brief Trace buffer entries.
362 * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is 532 * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
363 * different from @p CH_DBG_TRACE_MASK_DISABLED. 533 * different from @p CH_DBG_TRACE_MASK_DISABLED.
364 */ 534 */
535#if !defined(CH_DBG_TRACE_BUFFER_SIZE)
365#define CH_DBG_TRACE_BUFFER_SIZE 128 536#define CH_DBG_TRACE_BUFFER_SIZE 128
537#endif
366 538
367/** 539/**
368 * @brief Debug option, stack checks. 540 * @brief Debug option, stack checks.
@@ -374,7 +546,9 @@
374 * @note The default failure mode is to halt the system with the global 546 * @note The default failure mode is to halt the system with the global
375 * @p panic_msg variable set to @p NULL. 547 * @p panic_msg variable set to @p NULL.
376 */ 548 */
549#if !defined(CH_DBG_ENABLE_STACK_CHECK)
377#define CH_DBG_ENABLE_STACK_CHECK FALSE 550#define CH_DBG_ENABLE_STACK_CHECK FALSE
551#endif
378 552
379/** 553/**
380 * @brief Debug option, stacks initialization. 554 * @brief Debug option, stacks initialization.
@@ -384,7 +558,9 @@
384 * 558 *
385 * @note The default is @p FALSE. 559 * @note The default is @p FALSE.
386 */ 560 */
561#if !defined(CH_DBG_FILL_THREADS)
387#define CH_DBG_FILL_THREADS FALSE 562#define CH_DBG_FILL_THREADS FALSE
563#endif
388 564
389/** 565/**
390 * @brief Debug option, threads profiling. 566 * @brief Debug option, threads profiling.
@@ -395,7 +571,9 @@
395 * @note This debug option is not currently compatible with the 571 * @note This debug option is not currently compatible with the
396 * tickless mode. 572 * tickless mode.
397 */ 573 */
574#if !defined(CH_DBG_THREADS_PROFILING)
398#define CH_DBG_THREADS_PROFILING FALSE 575#define CH_DBG_THREADS_PROFILING FALSE
576#endif
399 577
400/** @} */ 578/** @} */
401 579
@@ -407,6 +585,22 @@
407/*===========================================================================*/ 585/*===========================================================================*/
408 586
409/** 587/**
588 * @brief System structure extension.
589 * @details User fields added to the end of the @p ch_system_t structure.
590 */
591#define CH_CFG_SYSTEM_EXTRA_FIELDS \
592 /* Add threads custom fields here.*/
593
594/**
595 * @brief System initialization hook.
596 * @details User initialization code added to the @p chSysInit() function
597 * just before interrupts are enabled globally.
598 */
599#define CH_CFG_SYSTEM_INIT_HOOK() { \
600 /* Add threads initialization code here.*/ \
601}
602
603/**
410 * @brief Threads descriptor structure extension. 604 * @brief Threads descriptor structure extension.
411 * @details User fields added to the end of the @p thread_t structure. 605 * @details User fields added to the end of the @p thread_t structure.
412 */ 606 */
@@ -415,9 +609,9 @@
415 609
416/** 610/**
417 * @brief Threads initialization hook. 611 * @brief Threads initialization hook.
418 * @details User initialization code added to the @p chThdInit() API. 612 * @details User initialization code added to the @p _thread_init() function.
419 * 613 *
420 * @note It is invoked from within @p chThdInit() and implicitly from all 614 * @note It is invoked from within @p _thread_init() and implicitly from all
421 * the threads creation APIs. 615 * the threads creation APIs.
422 */ 616 */
423#define CH_CFG_THREAD_INIT_HOOK(tp) { \ 617#define CH_CFG_THREAD_INIT_HOOK(tp) { \