source: rtems/testsuites/sptests/spsysinit01/init.c @ 5222488

5
Last change on this file since 5222488 was 5222488, checked in by Sebastian Huber <sebastian.huber@…>, on 09/26/17 at 05:49:17

posix: Implement self-contained POSIX condvar

POSIX condition variables are now available in all configurations and no
longer depend on --enable-posix.

Update #2514.
Update #3113.

  • Property mode set to 100644
File size: 15.0 KB
Line 
1/*
2 * Copyright (c) 2015, 2016 embedded brains GmbH.  All rights reserved.
3 *
4 *  embedded brains GmbH
5 *  Dornierstr. 4
6 *  82178 Puchheim
7 *  Germany
8 *  <rtems@embedded-brains.de>
9 *
10 * The license and distribution terms for this file may be
11 * found in the file LICENSE in this distribution or at
12 * http://www.rtems.com/license/LICENSE.
13 */
14
15#ifdef HAVE_CONFIG_H
16  #include "config.h"
17#endif
18
19#define TESTS_USE_PRINTK
20#include "tmacros.h"
21
22#include <sys/types.h>
23#include <sys/stat.h>
24
25#include <assert.h>
26#include <pthread.h>
27#include <string.h>
28#include <stdlib.h>
29#include <unistd.h>
30
31#include <rtems.h>
32#include <rtems/ioimpl.h>
33#include <rtems/libio_.h>
34#include <rtems/sysinit.h>
35
36#include <rtems/extensionimpl.h>
37#ifdef RTEMS_POSIX_API
38#include <rtems/posix/barrierimpl.h>
39#include <rtems/posix/mqueueimpl.h>
40#include <rtems/posix/muteximpl.h>
41#include <rtems/posix/psignalimpl.h>
42#include <rtems/posix/pthreadimpl.h>
43#include <rtems/posix/rwlockimpl.h>
44#include <rtems/posix/semaphoreimpl.h>
45#include <rtems/posix/shmimpl.h>
46#include <rtems/posix/timerimpl.h>
47#endif /* RTEMS_POSIX_API */
48#include <rtems/posix/keyimpl.h>
49#include <rtems/rtems/barrierimpl.h>
50#include <rtems/rtems/dpmemimpl.h>
51#include <rtems/rtems/messageimpl.h>
52#include <rtems/rtems/partimpl.h>
53#include <rtems/rtems/ratemonimpl.h>
54#include <rtems/rtems/regionimpl.h>
55#include <rtems/rtems/semimpl.h>
56#include <rtems/rtems/tasksimpl.h>
57#include <rtems/rtems/timerimpl.h>
58#include <rtems/score/apimutex.h>
59#include <rtems/score/chainimpl.h>
60#include <rtems/score/sysstate.h>
61#include <rtems/score/userextimpl.h>
62#include <rtems/score/wkspace.h>
63
64const char rtems_test_name[] = "SPSYSINIT 1";
65
66typedef enum {
67  BSP_WORK_AREAS_PRE,
68  BSP_WORK_AREAS_POST,
69  BSP_START_PRE,
70  BSP_START_POST,
71  INITIAL_EXTENSIONS_PRE,
72  INITIAL_EXTENSIONS_POST,
73  DATA_STRUCTURES_PRE,
74  DATA_STRUCTURES_POST,
75  CPU_SET_PRE,
76  CPU_SET_POST,
77  USER_EXTENSIONS_PRE,
78  USER_EXTENSIONS_POST,
79  CLASSIC_TASKS_PRE,
80  CLASSIC_TASKS_POST,
81  CLASSIC_TIMER_PRE,
82  CLASSIC_TIMER_POST,
83  CLASSIC_SIGNAL_PRE,
84  CLASSIC_SIGNAL_POST,
85  CLASSIC_EVENT_PRE,
86  CLASSIC_EVENT_POST,
87  CLASSIC_MESSAGE_QUEUE_PRE,
88  CLASSIC_MESSAGE_QUEUE_POST,
89  CLASSIC_SEMAPHORE_PRE,
90  CLASSIC_SEMAPHORE_POST,
91  CLASSIC_PARTITION_PRE,
92  CLASSIC_PARTITION_POST,
93  CLASSIC_REGION_PRE,
94  CLASSIC_REGION_POST,
95  CLASSIC_DUAL_PORTED_MEMORY_PRE,
96  CLASSIC_DUAL_PORTED_MEMORY_POST,
97  CLASSIC_RATE_MONOTONIC_PRE,
98  CLASSIC_RATE_MONOTONIC_POST,
99  CLASSIC_BARRIER_PRE,
100  CLASSIC_BARRIER_POST,
101#ifdef RTEMS_POSIX_API
102  POSIX_SIGNALS_PRE,
103  POSIX_SIGNALS_POST,
104  POSIX_THREADS_PRE,
105  POSIX_THREADS_POST,
106  POSIX_MUTEX_PRE,
107  POSIX_MUTEX_POST,
108  POSIX_MESSAGE_QUEUE_PRE,
109  POSIX_MESSAGE_QUEUE_POST,
110  POSIX_SEMAPHORE_PRE,
111  POSIX_SEMAPHORE_POST,
112  POSIX_TIMER_PRE,
113  POSIX_TIMER_POST,
114  POSIX_SHM_PRE,
115  POSIX_SHM_POST,
116#endif /* RTEMS_POSIX_API */
117  POSIX_KEYS_PRE,
118  POSIX_KEYS_POST,
119#ifdef RTEMS_POSIX_API
120  POSIX_CLEANUP_PRE,
121  POSIX_CLEANUP_POST,
122#endif /* RTEMS_POSIX_API */
123  IDLE_THREADS_PRE,
124  IDLE_THREADS_POST,
125  LIBIO_PRE,
126  LIBIO_POST,
127  ROOT_FILESYSTEM_PRE,
128  ROOT_FILESYSTEM_POST,
129  BSP_PRE_DRIVERS_PRE,
130  BSP_PRE_DRIVERS_POST,
131  DEVICE_DRIVERS_PRE,
132  DEVICE_DRIVERS_POST,
133  CLASSIC_USER_TASKS_PRE,
134  CLASSIC_USER_TASKS_POST,
135#ifdef RTEMS_POSIX_API
136  POSIX_USER_THREADS_PRE,
137  POSIX_USER_THREADS_POST,
138#endif /* RTEMS_POSIX_API */
139  STD_FILE_DESCRIPTORS_PRE,
140  STD_FILE_DESCRIPTORS_POST,
141  LAST_FIRST,
142  LAST_SECOND,
143  LAST_THIRD,
144  LAST_FOURTH,
145  LAST_FIFTH,
146  LAST_SIXTH,
147  LAST_SEVENTH,
148  LAST_EIGHTH,
149  LAST_NINETH,
150  LAST_TENTH,
151  LAST_MIDDLE,
152  LAST_LAST,
153  INIT_TASK,
154  DONE
155} init_step;
156
157#define FIRST(x) \
158  static void x##_first(void); \
159  RTEMS_SYSINIT_ITEM( \
160    x##_first, \
161    x, \
162    RTEMS_SYSINIT_ORDER_FIRST \
163  ); \
164  static void x##_first(void)
165
166#define LAST(x) \
167  static void x##_last(void); \
168  RTEMS_SYSINIT_ITEM( \
169    x##_last, \
170    x, \
171    RTEMS_SYSINIT_ORDER_LAST \
172  ); \
173  static void x##_last(void)
174
175#define LAST_STEP(x) \
176  static void last_##x(void) \
177  { \
178    next_step(LAST_##x); \
179  } \
180  RTEMS_SYSINIT_ITEM( \
181    last_##x, \
182    RTEMS_SYSINIT_LAST, \
183    RTEMS_SYSINIT_ORDER_##x \
184  )
185
186static init_step step;
187
188static void next_step(init_step expected)
189{
190  assert(step == expected);
191  step = expected + 1;
192}
193
194FIRST(RTEMS_SYSINIT_BSP_WORK_AREAS)
195{
196  assert(_Workspace_Area.area_begin == 0);
197  next_step(BSP_WORK_AREAS_PRE);
198}
199
200LAST(RTEMS_SYSINIT_BSP_WORK_AREAS)
201{
202  assert(_Workspace_Area.area_begin != 0);
203  next_step(BSP_WORK_AREAS_POST);
204}
205
206FIRST(RTEMS_SYSINIT_BSP_START)
207{
208  /*
209   * Since the work performed here is BSP-specific, there is no way to test pre
210   * and post conditions.
211   */
212  next_step(BSP_START_PRE);
213}
214
215LAST(RTEMS_SYSINIT_BSP_START)
216{
217  /*
218   * Some BSPs initialize the printk() support in bsp_start().  So, print begin
219   * of test after bsp_start().
220   */
221  TEST_BEGIN();
222
223  next_step(BSP_START_POST);
224}
225
226FIRST(RTEMS_SYSINIT_INITIAL_EXTENSIONS)
227{
228  assert(_Chain_Is_empty(&_User_extensions_Switches_list));
229  next_step(INITIAL_EXTENSIONS_PRE);
230}
231
232LAST(RTEMS_SYSINIT_INITIAL_EXTENSIONS)
233{
234  assert(!_Chain_Is_empty(&_User_extensions_Switches_list));
235  next_step(INITIAL_EXTENSIONS_POST);
236}
237
238FIRST(RTEMS_SYSINIT_DATA_STRUCTURES)
239{
240  assert(_RTEMS_Allocator_Mutex == NULL);
241  next_step(DATA_STRUCTURES_PRE);
242}
243
244LAST(RTEMS_SYSINIT_DATA_STRUCTURES)
245{
246  assert(_RTEMS_Allocator_Mutex != NULL);
247  next_step(DATA_STRUCTURES_POST);
248}
249
250FIRST(RTEMS_SYSINIT_CPU_SET)
251{
252  /* There is nothing to do in case RTEMS_SMP is not defined */
253  next_step(CPU_SET_PRE);
254}
255
256LAST(RTEMS_SYSINIT_CPU_SET)
257{
258  next_step(CPU_SET_POST);
259}
260
261FIRST(RTEMS_SYSINIT_USER_EXTENSIONS)
262{
263  assert(_Extension_Information.maximum == 0);
264  next_step(USER_EXTENSIONS_PRE);
265}
266
267LAST(RTEMS_SYSINIT_USER_EXTENSIONS)
268{
269  assert(_Extension_Information.maximum != 0);
270  next_step(USER_EXTENSIONS_POST);
271}
272
273FIRST(RTEMS_SYSINIT_CLASSIC_TASKS)
274{
275  assert(_RTEMS_tasks_Information.Objects.maximum == 0);
276  next_step(CLASSIC_TASKS_PRE);
277}
278
279LAST(RTEMS_SYSINIT_CLASSIC_TASKS)
280{
281  assert(_RTEMS_tasks_Information.Objects.maximum != 0);
282  next_step(CLASSIC_TASKS_POST);
283}
284
285FIRST(RTEMS_SYSINIT_CLASSIC_TIMER)
286{
287  assert(_Timer_Information.maximum == 0);
288  next_step(CLASSIC_TIMER_PRE);
289}
290
291LAST(RTEMS_SYSINIT_CLASSIC_TIMER)
292{
293  assert(_Timer_Information.maximum != 0);
294  next_step(CLASSIC_TIMER_POST);
295}
296
297FIRST(RTEMS_SYSINIT_CLASSIC_SIGNAL)
298{
299  /* There is nothing to do in case RTEMS_MULTIPROCESSING is not defined */
300  next_step(CLASSIC_SIGNAL_PRE);
301}
302
303LAST(RTEMS_SYSINIT_CLASSIC_SIGNAL)
304{
305  next_step(CLASSIC_SIGNAL_POST);
306}
307
308FIRST(RTEMS_SYSINIT_CLASSIC_EVENT)
309{
310  /* There is nothing to do in case RTEMS_MULTIPROCESSING is not defined */
311  next_step(CLASSIC_EVENT_PRE);
312}
313
314LAST(RTEMS_SYSINIT_CLASSIC_EVENT)
315{
316  next_step(CLASSIC_EVENT_POST);
317}
318
319FIRST(RTEMS_SYSINIT_CLASSIC_MESSAGE_QUEUE)
320{
321  assert(_Message_queue_Information.maximum == 0);
322  next_step(CLASSIC_MESSAGE_QUEUE_PRE);
323}
324
325LAST(RTEMS_SYSINIT_CLASSIC_MESSAGE_QUEUE)
326{
327  assert(_Message_queue_Information.maximum != 0);
328  next_step(CLASSIC_MESSAGE_QUEUE_POST);
329}
330
331FIRST(RTEMS_SYSINIT_CLASSIC_SEMAPHORE)
332{
333  assert(_Semaphore_Information.maximum == 0);
334  next_step(CLASSIC_SEMAPHORE_PRE);
335}
336
337LAST(RTEMS_SYSINIT_CLASSIC_SEMAPHORE)
338{
339  assert(_Semaphore_Information.maximum != 0);
340  next_step(CLASSIC_SEMAPHORE_POST);
341}
342
343FIRST(RTEMS_SYSINIT_CLASSIC_PARTITION)
344{
345  assert(_Partition_Information.maximum == 0);
346  next_step(CLASSIC_PARTITION_PRE);
347}
348
349LAST(RTEMS_SYSINIT_CLASSIC_PARTITION)
350{
351  assert(_Partition_Information.maximum != 0);
352  next_step(CLASSIC_PARTITION_POST);
353}
354
355FIRST(RTEMS_SYSINIT_CLASSIC_REGION)
356{
357  assert(_Region_Information.maximum == 0);
358  next_step(CLASSIC_REGION_PRE);
359}
360
361LAST(RTEMS_SYSINIT_CLASSIC_REGION)
362{
363  assert(_Region_Information.maximum != 0);
364  next_step(CLASSIC_REGION_POST);
365}
366
367FIRST(RTEMS_SYSINIT_CLASSIC_DUAL_PORTED_MEMORY)
368{
369  assert(_Dual_ported_memory_Information.maximum == 0);
370  next_step(CLASSIC_DUAL_PORTED_MEMORY_PRE);
371}
372
373LAST(RTEMS_SYSINIT_CLASSIC_DUAL_PORTED_MEMORY)
374{
375  assert(_Dual_ported_memory_Information.maximum != 0);
376  next_step(CLASSIC_DUAL_PORTED_MEMORY_POST);
377}
378
379FIRST(RTEMS_SYSINIT_CLASSIC_RATE_MONOTONIC)
380{
381  assert(_Rate_monotonic_Information.maximum == 0);
382  next_step(CLASSIC_RATE_MONOTONIC_PRE);
383}
384
385LAST(RTEMS_SYSINIT_CLASSIC_RATE_MONOTONIC)
386{
387  assert(_Rate_monotonic_Information.maximum != 0);
388  next_step(CLASSIC_RATE_MONOTONIC_POST);
389}
390
391FIRST(RTEMS_SYSINIT_CLASSIC_BARRIER)
392{
393  assert(_Barrier_Information.maximum == 0);
394  next_step(CLASSIC_BARRIER_PRE);
395}
396
397LAST(RTEMS_SYSINIT_CLASSIC_BARRIER)
398{
399  assert(_Barrier_Information.maximum != 0);
400  next_step(CLASSIC_BARRIER_POST);
401}
402
403#ifdef RTEMS_POSIX_API
404
405FIRST(RTEMS_SYSINIT_POSIX_SIGNALS)
406{
407  assert(
408    memcmp(
409      &_POSIX_signals_Vectors,
410      _POSIX_signals_Default_vectors,
411      sizeof(_POSIX_signals_Vectors)
412    ) != 0
413  );
414  next_step(POSIX_SIGNALS_PRE);
415}
416
417LAST(RTEMS_SYSINIT_POSIX_SIGNALS)
418{
419  assert(
420    memcmp(
421      &_POSIX_signals_Vectors,
422      _POSIX_signals_Default_vectors,
423      sizeof(_POSIX_signals_Vectors)
424    ) == 0
425  );
426  next_step(POSIX_SIGNALS_POST);
427}
428
429FIRST(RTEMS_SYSINIT_POSIX_THREADS)
430{
431  assert(_POSIX_Threads_Information.Objects.maximum == 0);
432  next_step(POSIX_THREADS_PRE);
433}
434
435LAST(RTEMS_SYSINIT_POSIX_THREADS)
436{
437  assert(_POSIX_Threads_Information.Objects.maximum != 0);
438  next_step(POSIX_THREADS_POST);
439}
440
441FIRST(RTEMS_SYSINIT_POSIX_MUTEX)
442{
443  assert(_POSIX_Mutex_Information.maximum == 0);
444  next_step(POSIX_MUTEX_PRE);
445}
446
447LAST(RTEMS_SYSINIT_POSIX_MUTEX)
448{
449  assert(_POSIX_Mutex_Information.maximum != 0);
450  next_step(POSIX_MUTEX_POST);
451}
452
453FIRST(RTEMS_SYSINIT_POSIX_MESSAGE_QUEUE)
454{
455  assert(_POSIX_Message_queue_Information.maximum == 0);
456  next_step(POSIX_MESSAGE_QUEUE_PRE);
457}
458
459LAST(RTEMS_SYSINIT_POSIX_MESSAGE_QUEUE)
460{
461  assert(_POSIX_Message_queue_Information.maximum != 0);
462  next_step(POSIX_MESSAGE_QUEUE_POST);
463}
464
465FIRST(RTEMS_SYSINIT_POSIX_SEMAPHORE)
466{
467  assert(_POSIX_Semaphore_Information.maximum == 0);
468  next_step(POSIX_SEMAPHORE_PRE);
469}
470
471LAST(RTEMS_SYSINIT_POSIX_SEMAPHORE)
472{
473  assert(_POSIX_Semaphore_Information.maximum != 0);
474  next_step(POSIX_SEMAPHORE_POST);
475}
476
477FIRST(RTEMS_SYSINIT_POSIX_TIMER)
478{
479  assert(_POSIX_Timer_Information.maximum == 0);
480  next_step(POSIX_TIMER_PRE);
481}
482
483LAST(RTEMS_SYSINIT_POSIX_TIMER)
484{
485  assert(_POSIX_Timer_Information.maximum != 0);
486  next_step(POSIX_TIMER_POST);
487}
488
489FIRST(RTEMS_SYSINIT_POSIX_SHM)
490{
491  assert(_POSIX_Shm_Information.maximum == 0);
492  next_step(POSIX_SHM_PRE);
493}
494
495LAST(RTEMS_SYSINIT_POSIX_SHM)
496{
497  assert(_POSIX_Shm_Information.maximum != 0);
498  next_step(POSIX_SHM_POST);
499}
500
501static size_t user_extensions_pre_posix_cleanup;
502
503FIRST(RTEMS_SYSINIT_POSIX_CLEANUP)
504{
505  user_extensions_pre_posix_cleanup =
506    _Chain_Node_count_unprotected(&_User_extensions_List.Active);
507  next_step(POSIX_CLEANUP_PRE);
508}
509
510LAST(RTEMS_SYSINIT_POSIX_CLEANUP)
511{
512  assert(
513    user_extensions_pre_posix_cleanup + 1 ==
514      _Chain_Node_count_unprotected(&_User_extensions_List.Active)
515  );
516  next_step(POSIX_CLEANUP_POST);
517}
518
519#endif /* RTEMS_POSIX_API */
520
521FIRST(RTEMS_SYSINIT_POSIX_KEYS)
522{
523  assert(_POSIX_Keys_Information.maximum == 0);
524  next_step(POSIX_KEYS_PRE);
525}
526
527LAST(RTEMS_SYSINIT_POSIX_KEYS)
528{
529  assert(_POSIX_Keys_Information.maximum != 0);
530  next_step(POSIX_KEYS_POST);
531}
532
533FIRST(RTEMS_SYSINIT_IDLE_THREADS)
534{
535  assert(_System_state_Is_before_initialization(_System_state_Get()));
536  next_step(IDLE_THREADS_PRE);
537}
538
539LAST(RTEMS_SYSINIT_IDLE_THREADS)
540{
541  assert(_System_state_Is_before_multitasking(_System_state_Get()));
542  next_step(IDLE_THREADS_POST);
543}
544
545FIRST(RTEMS_SYSINIT_LIBIO)
546{
547  assert(rtems_libio_semaphore == 0);
548  next_step(LIBIO_PRE);
549}
550
551LAST(RTEMS_SYSINIT_LIBIO)
552{
553  assert(rtems_libio_semaphore != 0);
554  next_step(LIBIO_POST);
555}
556
557FIRST(RTEMS_SYSINIT_ROOT_FILESYSTEM)
558{
559  struct stat st;
560  int rv;
561
562  rv = stat("/", &st);
563  assert(rv == -1);
564  next_step(ROOT_FILESYSTEM_PRE);
565}
566
567LAST(RTEMS_SYSINIT_ROOT_FILESYSTEM)
568{
569  struct stat st;
570  int rv;
571
572  rv = stat("/", &st);
573  assert(rv == 0);
574  next_step(ROOT_FILESYSTEM_POST);
575}
576
577FIRST(RTEMS_SYSINIT_BSP_PRE_DRIVERS)
578{
579  /*
580   * Since the work performed here is BSP-specific, there is no way to test pre
581   * and post conditions.
582   */
583  next_step(BSP_PRE_DRIVERS_PRE);
584}
585
586LAST(RTEMS_SYSINIT_BSP_PRE_DRIVERS)
587{
588  next_step(BSP_PRE_DRIVERS_POST);
589}
590
591FIRST(RTEMS_SYSINIT_DEVICE_DRIVERS)
592{
593  assert(!_IO_All_drivers_initialized);
594  next_step(DEVICE_DRIVERS_PRE);
595}
596
597LAST(RTEMS_SYSINIT_DEVICE_DRIVERS)
598{
599  assert(_IO_All_drivers_initialized);
600  next_step(DEVICE_DRIVERS_POST);
601}
602
603FIRST(RTEMS_SYSINIT_CLASSIC_USER_TASKS)
604{
605  _Objects_Allocator_lock();
606  assert(_Objects_Active_count(&_RTEMS_tasks_Information.Objects) == 0);
607  _Objects_Allocator_unlock();
608  next_step(CLASSIC_USER_TASKS_PRE);
609}
610
611LAST(RTEMS_SYSINIT_CLASSIC_USER_TASKS)
612{
613  _Objects_Allocator_lock();
614  assert(_Objects_Active_count(&_RTEMS_tasks_Information.Objects) == 1);
615  _Objects_Allocator_unlock();
616  next_step(CLASSIC_USER_TASKS_POST);
617}
618
619#ifdef RTEMS_POSIX_API
620
621FIRST(RTEMS_SYSINIT_POSIX_USER_THREADS)
622{
623  _Objects_Allocator_lock();
624  assert(_Objects_Active_count(&_POSIX_Threads_Information.Objects) == 0);
625  _Objects_Allocator_unlock();
626  next_step(POSIX_USER_THREADS_PRE);
627}
628
629LAST(RTEMS_SYSINIT_POSIX_USER_THREADS)
630{
631  _Objects_Allocator_lock();
632  assert(_Objects_Active_count(&_POSIX_Threads_Information.Objects) == 1);
633  _Objects_Allocator_unlock();
634  next_step(POSIX_USER_THREADS_POST);
635}
636
637#endif /* RTEMS_POSIX_API */
638
639FIRST(RTEMS_SYSINIT_STD_FILE_DESCRIPTORS)
640{
641  struct stat st;
642  int rv;
643
644  rv = fstat(0, &st);
645  assert(rv == -1);
646  next_step(STD_FILE_DESCRIPTORS_PRE);
647}
648
649LAST(RTEMS_SYSINIT_STD_FILE_DESCRIPTORS)
650{
651  struct stat st;
652  int rv;
653
654  rv = fstat(0, &st);
655  assert(rv == 0);
656  next_step(STD_FILE_DESCRIPTORS_POST);
657}
658
659LAST_STEP(FIRST);
660LAST_STEP(SECOND);
661LAST_STEP(THIRD);
662LAST_STEP(FOURTH);
663LAST_STEP(FIFTH);
664LAST_STEP(SIXTH);
665LAST_STEP(SEVENTH);
666LAST_STEP(EIGHTH);
667LAST_STEP(NINETH);
668LAST_STEP(TENTH);
669LAST_STEP(MIDDLE);
670LAST_STEP(LAST);
671
672static void Init(rtems_task_argument arg)
673{
674#ifdef RTEMS_POSIX_API
675  pthread_cleanup_push(NULL, NULL);
676  pthread_cleanup_pop(0);
677#endif /* RTEMS_POSIX_API */
678  next_step(INIT_TASK);
679  TEST_END();
680  exit(0);
681}
682
683#ifdef RTEMS_POSIX_API
684
685static void *POSIX_Init(void *arg)
686{
687  return NULL;
688}
689
690#endif /* RTEMS_POSIX_API */
691
692#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
693#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
694
695#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1
696
697#define CONFIGURE_MAXIMUM_BARRIERS 1
698
699#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
700
701#define CONFIGURE_MAXIMUM_PARTITIONS 1
702
703#define CONFIGURE_MAXIMUM_PERIODS 1
704
705#define CONFIGURE_MAXIMUM_PORTS 1
706
707#define CONFIGURE_MAXIMUM_REGIONS 1
708
709#define CONFIGURE_MAXIMUM_SEMAPHORES 1
710
711#define CONFIGURE_MAXIMUM_TASKS 1
712
713#define CONFIGURE_MAXIMUM_TIMERS 1
714
715#ifdef RTEMS_POSIX_API
716
717#define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES 1
718
719#define CONFIGURE_MAXIMUM_POSIX_MUTEXES 1
720
721#define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES 1
722
723#define CONFIGURE_MAXIMUM_POSIX_SHMS 1
724
725#define CONFIGURE_MAXIMUM_POSIX_TIMERS 1
726
727#define CONFIGURE_MAXIMUM_POSIX_THREADS 1
728
729#define CONFIGURE_POSIX_INIT_THREAD_TABLE
730
731#endif /* RTEMS_POSIX_API */
732
733#define CONFIGURE_MAXIMUM_POSIX_KEYS 1
734
735#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
736
737#define CONFIGURE_STACK_CHECKER_ENABLED
738
739#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
740
741#define CONFIGURE_INIT
742
743#include <rtems/confdefs.h>
Note: See TracBrowser for help on using the repository browser.