source: rtems/c/src/exec/sapi/include/confdefs.h @ 1fba44d

4.104.114.84.95
Last change on this file since 1fba44d was 563ed95, checked in by Joel Sherrill <joel.sherrill@…>, on 10/12/00 at 19:44:30

2000-10-12 Joel Sherrill <joel@…>

  • include/confdefs.h: Account for initialization tasks and threads which use larger than minimum stack sizes.
  • Property mode set to 100644
File size: 28.9 KB
Line 
1/*  confdefs.h
2 *
3 *  This include file contains the configuration table template that will
4 *  be instantiated by an application based on the setting of a number
5 *  of macros.  The macros are documented in the Configuring a System
6 *  chapter of the Classic API User's Guide
7 *
8 *  The model is to estimate the memory required for each configured item
9 *  and sum those estimates.  The estimate can be too high or too low for
10 *  a variety of reasons:
11 *
12 *  Reasons estimate is too high:
13 *    + FP contexts (not all tasks are FP)
14 *
15 *  Reasons estimate is too low:
16 *    + stacks greater than minimum size
17 *    + messages
18 *    + application must account for device driver resources
19 *    + application must account for add-on library resource requirements
20 *
21 *  NOTE:  Eventually this may be able to take into account some of
22 *         the above.  This procedure has evolved from just enough to
23 *         support the RTEMS Test Suites into something that can be
24 *         used remarkably reliably by most applications.
25 *  COPYRIGHT (c) 1989-1999.
26 *  On-Line Applications Research Corporation (OAR).
27 *
28 *  The license and distribution terms for this file may be
29 *  found in the file LICENSE in this distribution or at
30 *  http://www.OARcorp.com/rtems/license.html.
31 *
32 *  $Id$
33 */
34
35#ifndef __CONFIGURATION_TEMPLATE_h
36#define __CONFIGURATION_TEMPLATE_h
37 
38#ifdef __cplusplus
39extern "C" {
40#endif
41 
42extern rtems_initialization_tasks_table Initialization_tasks[];
43extern rtems_driver_address_table       Device_drivers[];
44extern rtems_configuration_table        Configuration;
45extern rtems_multiprocessing_table      Multiprocessing_configuration;
46#ifdef RTEMS_POSIX_API
47extern posix_api_configuration_table    Configuration_POSIX_API;
48#endif
49#ifdef RTEMS_ITRON_API
50extern itron_api_configuration_table    Configuration_ITRON_API;
51#endif
52
53/*
54 *  RTEMS C Library and Newlib support
55 *
56 *  NOTE:  This ends up defining these even when newlib is not used.
57 */
58
59#define CONFIGURE_NEWLIB_EXTENSION 1
60#define CONFIGURE_MALLOC_REGION 1
61
62/*
63 *  File descriptors managed by libio
64 */
65
66#ifndef CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
67#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 3
68#endif
69
70#define CONFIGURE_LIBIO_SEMAPHORES \
71  (CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS + 1)
72
73#ifdef CONFIGURE_INIT
74unsigned32 rtems_libio_number_iops = CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS;
75#endif
76
77/*
78 *  Termios resources
79 */
80
81#ifdef CONFIGURE_TERMIOS_DISABLED
82#define CONFIGURE_TERMIOS_SEMAPHORES 0
83#else
84
85#ifndef CONFIGURE_NUMBER_OF_TERMIOS_PORTS
86#define CONFIGURE_NUMBER_OF_TERMIOS_PORTS 1
87#endif
88
89#define CONFIGURE_TERMIOS_SEMAPHORES \
90  ((CONFIGURE_NUMBER_OF_TERMIOS_PORTS * 4) + 1)
91#endif
92
93/*
94 *  Mount Table Configuration
95 */
96
97#include <imfs.h>
98
99#ifdef CONFIGURE_INIT
100
101#ifndef CONFIGURE_HAS_OWN_MOUNT_TABLE
102rtems_filesystem_mount_table_t configuration_mount_table = {
103#ifdef CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
104  &IMFS_ops,
105#else  /* using miniIMFS as base filesystem */
106  &miniIMFS_ops,
107#endif
108  RTEMS_FILESYSTEM_READ_WRITE,
109  NULL,
110  NULL
111};
112
113rtems_filesystem_mount_table_t
114    *rtems_filesystem_mount_table = &configuration_mount_table;
115int rtems_filesystem_mount_table_size = 1;
116#endif
117
118#endif
119
120
121/*
122 *  Stack Checker Requirements
123 *
124 *  NOTE: This does not automatically enable reporting at program exit.
125 */
126
127#ifdef STACK_CHECKER_ON
128#define CONFIGURE_STACK_CHECKER_EXTENSION 1
129#else
130#define CONFIGURE_STACK_CHECKER_EXTENSION 0
131#endif
132
133/*
134 *  Interrupt Stack Space
135 *
136 *  NOTE: There is currently no way for the application to override
137 *        the interrupt stack size set by the BSP.
138 */
139
140#if (CPU_ALLOCATE_INTERRUPT_STACK == 0)
141#undef CONFIGURE_INTERRUPT_STACK_MEMORY
142#define CONFIGURE_INTERRUPT_STACK_MEMORY 0
143#else
144  #ifndef CONFIGURE_INTERRUPT_STACK_MEMORY
145  #define CONFIGURE_INTERRUPT_STACK_MEMORY RTEMS_MINIMUM_STACK_SIZE
146  #endif
147#endif
148
149/*
150 *  Default User Initialization Task Table.  This table guarantees that
151 *  one user initialization table is defined.
152 */
153
154#ifdef CONFIGURE_RTEMS_INIT_TASKS_TABLE
155
156#ifdef CONFIGURE_HAS_OWN_INIT_TASK_TABLE
157
158/*
159 *  The user is defining their own table information and setting the
160 *  appropriate variables.
161 */
162
163#else
164
165#ifndef CONFIGURE_INIT_TASK_NAME
166#define CONFIGURE_INIT_TASK_NAME          rtems_build_name( 'U', 'I', '1', ' ' )
167#endif
168
169#ifndef CONFIGURE_INIT_TASK_STACK_SIZE
170#define CONFIGURE_INIT_TASK_STACK_SIZE    RTEMS_MINIMUM_STACK_SIZE
171#endif
172
173#ifndef CONFIGURE_INIT_TASK_PRIORITY
174#define CONFIGURE_INIT_TASK_PRIORITY      1
175#endif
176
177#ifndef CONFIGURE_INIT_TASK_ATTRIBUTES
178#define CONFIGURE_INIT_TASK_ATTRIBUTES    RTEMS_DEFAULT_ATTRIBUTES
179#endif
180
181#ifndef CONFIGURE_INIT_TASK_ENTRY_POINT
182#define CONFIGURE_INIT_TASK_ENTRY_POINT   Init
183#endif
184
185#ifndef CONFIGURE_INIT_TASK_INITIAL_MODES
186#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_NO_PREEMPT
187#endif
188
189#ifndef CONFIGURE_INIT_TASK_ARGUMENTS
190#define CONFIGURE_INIT_TASK_ARGUMENTS     0
191#endif
192
193#ifdef CONFIGURE_INIT
194rtems_initialization_tasks_table Initialization_tasks[] = {
195  { CONFIGURE_INIT_TASK_NAME,
196    CONFIGURE_INIT_TASK_STACK_SIZE,
197    CONFIGURE_INIT_TASK_PRIORITY,
198    CONFIGURE_INIT_TASK_ATTRIBUTES,
199    CONFIGURE_INIT_TASK_ENTRY_POINT,
200    CONFIGURE_INIT_TASK_INITIAL_MODES,
201    CONFIGURE_INIT_TASK_ARGUMENTS
202  }
203};
204#endif
205
206#define CONFIGURE_INIT_TASK_TABLE Initialization_tasks
207
208#define CONFIGURE_INIT_TASK_TABLE_SIZE \
209  sizeof(CONFIGURE_INIT_TASK_TABLE) / sizeof(rtems_initialization_tasks_table)
210
211#endif    /* CONFIGURE_HAS_OWN_INIT_TASK_TABLE */
212
213#else     /* CONFIGURE_RTEMS_INIT_TASKS_TABLE */
214
215#define CONFIGURE_INIT_TASK_TABLE      NULL
216#define CONFIGURE_INIT_TASK_TABLE_SIZE 0
217
218#endif
219
220/*
221 *  Map obsolete names to current ones
222 *
223 *  NOTE: These should be obsoleted in a future release.
224 */
225
226#ifdef CONFIGURE_TEST_NEEDS_TIMER_DRIVER
227#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
228#endif
229#ifdef CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER
230#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
231#endif
232#ifdef CONFIGURE_TEST_NEEDS_CLOCK_DRIVER
233#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
234#endif
235#ifdef CONFIGURE_TEST_NEEDS_RTC_DRIVER
236#define CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
237#endif
238#ifdef CONFIGURE_TEST_NEEDS_STUB_DRIVER
239#define CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
240#endif
241
242
243/*
244 *  Default Device Driver Table.  Each driver needed by the test is explicitly
245 *  choosen by that test.  There is always a null driver entry.
246 */
247
248#define NULL_DRIVER_TABLE_ENTRY \
249 { NULL, NULL, NULL, NULL, NULL, NULL }
250
251#ifdef CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
252#include <console.h>
253#endif
254
255#ifdef CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
256#include <clockdrv.h>
257#endif
258
259#ifdef CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
260#include <timerdrv.h>
261#endif
262
263#ifdef CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
264#include <stubdrv.h>
265#endif
266
267#ifndef CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
268
269#ifdef CONFIGURE_INIT
270rtems_driver_address_table Device_drivers[] = {
271#ifdef CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
272  CONSOLE_DRIVER_TABLE_ENTRY,
273#endif
274#ifdef CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
275  CLOCK_DRIVER_TABLE_ENTRY,
276#endif
277#ifdef CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
278  STUB_DRIVER_TABLE_ENTRY,
279#endif
280  NULL_DRIVER_TABLE_ENTRY
281};
282#endif
283
284#endif  /* CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE */
285
286/*
287 *  Default the number of devices per device driver.  This value may be
288 *  overridden by the user.
289 */
290
291#ifndef CONFIGURE_MAXIMUM_DEVICES
292#define CONFIGURE_MAXIMUM_DEVICES   20
293#endif
294
295/*
296 *  Default Multiprocessing Configuration Table.  The defaults are
297 *  appropriate for most of the RTEMS Multiprocessor Test Suite.  Each
298 *  value may be overridden within each test to customize the environment.
299 */
300
301#ifdef CONFIGURE_MP_APPLICATION
302#ifndef CONFIGURE_HAS_OWN_MULTIPROCESING_TABLE
303
304#ifndef CONFIGURE_MP_NODE_NUMBER
305#define CONFIGURE_MP_NODE_NUMBER                NODE_NUMBER
306#endif
307
308#ifndef CONFIGURE_MP_MAXIMUM_NODES
309#define CONFIGURE_MP_MAXIMUM_NODES              2
310#endif
311
312#ifndef CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
313#define CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS     32
314#endif
315
316#ifndef CONFIGURE_MP_MAXIMUM_PROXIES
317#define CONFIGURE_MP_MAXIMUM_PROXIES            32
318#endif
319
320#ifndef CONFIGURE_MP_MPCI_TABLE_POINTER
321#include <mpci.h>
322#define CONFIGURE_MP_MPCI_TABLE_POINTER         &MPCI_table
323#endif
324
325#ifdef CONFIGURE_INIT
326rtems_multiprocessing_table Multiprocessing_configuration = {
327  CONFIGURE_MP_NODE_NUMBER,              /* local node number */
328  CONFIGURE_MP_MAXIMUM_NODES,            /* maximum # nodes in system */
329  CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS,   /* maximum # global objects */
330  CONFIGURE_MP_MAXIMUM_PROXIES,          /* maximum # proxies */
331  CONFIGURE_MP_MPCI_TABLE_POINTER        /* pointer to MPCI config table */
332};
333#endif
334
335#define CONFIGURE_MULTIPROCESSING_TABLE    &Multiprocessing_configuration
336
337#endif /* CONFIGURE_HAS_OWN_MULTIPROCESING_TABLE */
338
339#else
340
341#define CONFIGURE_MULTIPROCESSING_TABLE    NULL
342
343#endif /* CONFIGURE_MP_APPLICATION */
344 
345/*
346 *  Default Configuration Table. 
347 */
348
349#ifndef CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
350 
351#ifndef CONFIGURE_EXECUTIVE_RAM_WORK_AREA
352#define CONFIGURE_EXECUTIVE_RAM_WORK_AREA     NULL
353#endif
354
355#ifndef CONFIGURE_MAXIMUM_TASKS
356#define CONFIGURE_MAXIMUM_TASKS               0
357#endif
358
359#ifndef CONFIGURE_MAXIMUM_TIMERS
360#define CONFIGURE_MAXIMUM_TIMERS              0
361#endif
362
363#ifndef CONFIGURE_MAXIMUM_SEMAPHORES
364#define CONFIGURE_MAXIMUM_SEMAPHORES          0
365#endif
366
367#ifndef CONFIGURE_MAXIMUM_MESSAGE_QUEUES
368#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES      0
369#endif
370
371#ifndef CONFIGURE_MAXIMUM_PARTITIONS
372#define CONFIGURE_MAXIMUM_PARTITIONS          0
373#endif
374
375#ifndef CONFIGURE_MAXIMUM_REGIONS
376#define CONFIGURE_MAXIMUM_REGIONS             0
377#endif
378
379#ifndef CONFIGURE_MAXIMUM_PORTS
380#define CONFIGURE_MAXIMUM_PORTS               0
381#endif
382
383#ifndef CONFIGURE_MAXIMUM_PERIODS
384#define CONFIGURE_MAXIMUM_PERIODS             0
385#endif
386
387#ifndef CONFIGURE_MAXIMUM_USER_EXTENSIONS
388#define CONFIGURE_MAXIMUM_USER_EXTENSIONS     0
389#endif
390
391#ifndef CONFIGURE_MICROSECONDS_PER_TICK
392#define CONFIGURE_MICROSECONDS_PER_TICK RTEMS_MILLISECONDS_TO_MICROSECONDS(10)
393#endif
394
395#ifndef CONFIGURE_TICKS_PER_TIMESLICE
396#define CONFIGURE_TICKS_PER_TIMESLICE        50
397#endif
398
399/*
400 *  Initial Extension Set
401 */
402
403#ifdef CONFIGURE_INIT
404#ifdef STACK_CHECKER_ON
405#include <rtems/stackchk.h>
406#endif
407
408rtems_extensions_table Configuration_Initial_Extensions[] = {
409#ifdef CONFIGURE_INITIAL_EXTENSIONS
410    CONFIGURE_INITIAL_EXTENSIONS,
411#endif
412#ifdef STACK_CHECKER_ON
413    STACK_CHECKER_EXTENSION,
414#endif
415    { NULL, NULL, NULL, NULL, NULL, NULL, NULL }
416};
417
418#define CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS \
419  ((sizeof(Configuration_Initial_Extensions) / \
420    sizeof(rtems_extensions_table)) - 1)
421
422#endif
423
424/*
425 *  POSIX API Configuration Parameters
426 */
427
428#ifdef RTEMS_POSIX_API
429
430#include <sys/types.h>
431#include <sys/siginfo.h>
432#include <mqueue.h>
433#include <rtems/posix/cond.h>
434#include <rtems/posix/mqueue.h>
435#include <rtems/posix/mutex.h>
436#include <rtems/posix/key.h>
437#include <rtems/posix/psignal.h>
438#include <rtems/posix/semaphore.h>
439#include <rtems/posix/threadsup.h>
440
441#ifndef CONFIGURE_MAXIMUM_POSIX_THREADS
442#define CONFIGURE_MAXIMUM_POSIX_THREADS      0
443#endif
444
445#ifndef CONFIGURE_MAXIMUM_POSIX_MUTEXES
446#define CONFIGURE_MAXIMUM_POSIX_MUTEXES      0
447#endif
448
449#ifndef CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
450#define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES  0
451#endif
452
453#ifndef CONFIGURE_MAXIMUM_POSIX_KEYS
454#define CONFIGURE_MAXIMUM_POSIX_KEYS         0
455#endif
456
457#ifndef CONFIGURE_MAXIMUM_POSIX_TIMERS
458#define CONFIGURE_MAXIMUM_POSIX_TIMERS 0
459#endif
460
461#ifndef CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
462#define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS 0
463#endif
464
465#ifndef CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
466#define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES 0
467#endif
468
469#ifndef CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
470#define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES 0
471#endif
472
473#ifdef CONFIGURE_POSIX_INIT_THREAD_TABLE
474
475#ifdef CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
476
477/*
478 *  The user is defining their own table information and setting the
479 *  appropriate variables for the POSIX Initialization Thread Table.
480 */
481 
482#else
483
484#ifndef CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
485#define CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT   POSIX_Init
486#endif
487
488#ifndef CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
489#define CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE    (RTEMS_MINIMUM_STACK_SIZE * 2)
490#endif
491
492#ifdef CONFIGURE_INIT
493posix_initialization_threads_table POSIX_Initialization_threads[] = {
494  { CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT, \
495      CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE }
496};
497#endif
498
499#define CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME POSIX_Initialization_threads
500 
501#define CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE \
502  sizeof(CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME) / \
503      sizeof(posix_initialization_threads_table)
504
505#endif    /* CONFIGURE_POSIX_HAS_OWN_INIT_TASK_TABLE */
506
507#else     /* CONFIGURE_POSIX_INIT_THREAD_TABLE */
508
509#define CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME NULL
510#define CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE 0
511
512#endif
513
514#define CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API \
515  ( \
516    sizeof (POSIX_API_Control) + \
517   (sizeof (void *) * (CONFIGURE_GNAT_KEYS + CONFIGURE_MAXIMUM_POSIX_KEYS)) \
518  )
519
520#define CONFIGURE_MEMORY_FOR_POSIX_MUTEXES(_mutexes) \
521  ((_mutexes) * \
522   ( sizeof(POSIX_Mutex_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
523
524#define CONFIGURE_MEMORY_FOR_POSIX_CONDITION_VARIABLES(_condition_variables) \
525  ((_condition_variables) * \
526   ( sizeof(POSIX_Condition_variables_Control) + \
527        CONFIGURE_OBJECT_TABLE_STUFF ) )
528
529#define CONFIGURE_MEMORY_FOR_POSIX_KEYS(_keys) \
530  ((_keys) * \
531   ( sizeof(POSIX_Keys_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
532
533#define CONFIGURE_MEMORY_FOR_POSIX_TIMERS(_timers) \
534  ((_timers) * \
535   ( 0 ) )
536
537#define CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS(_queued_signals) \
538  ((_queued_signals) * \
539   ( sizeof(POSIX_signals_Siginfo_node) + CONFIGURE_OBJECT_TABLE_STUFF ) )
540
541#define CONFIGURE_MEMORY_FOR_POSIX_MESSAGE_QUEUES(_message_queues) \
542  ((_message_queues) * \
543   ( sizeof( POSIX_Message_queue_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
544#define CONFIGURE_MEMORY_FOR_POSIX_SEMAPHORES(_semaphores) \
545  ((_semaphores) * \
546   ( sizeof( POSIX_Semaphore_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
547 
548
549#define CONFIGURE_MEMORY_FOR_POSIX \
550  ( \
551    CONFIGURE_MEMORY_FOR_POSIX_MUTEXES( CONFIGURE_MAXIMUM_POSIX_MUTEXES ) + \
552    CONFIGURE_MEMORY_FOR_POSIX_CONDITION_VARIABLES( \
553        CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES ) + \
554    CONFIGURE_MEMORY_FOR_POSIX_KEYS( CONFIGURE_MAXIMUM_POSIX_KEYS ) + \
555    CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS( \
556        CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS ) + \
557    CONFIGURE_MEMORY_FOR_POSIX_MESSAGE_QUEUES( \
558        CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES ) + \
559    CONFIGURE_MEMORY_FOR_POSIX_SEMAPHORES( \
560        CONFIGURE_MAXIMUM_POSIX_SEMAPHORES ) + \
561    (CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE) \
562   )
563
564
565#else
566
567#define CONFIGURE_MAXIMUM_POSIX_THREADS         0
568#define CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API 0
569#define CONFIGURE_MEMORY_FOR_POSIX              0
570
571
572#endif    /* RTEMS_POSIX_API */
573
574#ifndef CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
575#define CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE    0
576#endif
577
578/*
579 *  ITRON API Configuration Parameters
580 */
581
582#ifdef RTEMS_ITRON_API
583
584#include <itron.h>
585#include <rtems/itron/config.h>
586#include <rtems/itron/eventflags.h>
587#include <rtems/itron/fmempool.h>
588#include <rtems/itron/mbox.h>
589#include <rtems/itron/msgbuffer.h>
590#include <rtems/itron/port.h>
591#include <rtems/itron/semaphore.h>
592#include <rtems/itron/task.h>
593#include <rtems/itron/vmempool.h>
594
595#ifndef CONFIGURE_MAXIMUM_ITRON_TASKS
596#define CONFIGURE_MAXIMUM_ITRON_TASKS      0
597#endif
598
599#ifndef CONFIGURE_MAXIMUM_ITRON_SEMAPHORES
600#define CONFIGURE_MAXIMUM_ITRON_SEMAPHORES   0
601#endif
602
603#ifndef CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS
604#define CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS   0
605#endif
606
607#ifndef CONFIGURE_MAXIMUM_ITRON_MAILBOXES
608#define CONFIGURE_MAXIMUM_ITRON_MAILBOXES   0
609#endif
610
611#ifndef CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS
612#define CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS   0
613#endif
614
615#ifndef CONFIGURE_MAXIMUM_ITRON_PORTS
616#define CONFIGURE_MAXIMUM_ITRON_PORTS   0
617#endif
618
619#ifndef CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS
620#define CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS   0
621#endif
622
623#ifndef CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS
624#define CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS   0
625#endif
626
627#ifdef CONFIGURE_ITRON_INIT_TASK_TABLE
628
629#ifdef CONFIGURE_ITRON_HAS_OWN_INIT_TASK_TABLE
630
631/*
632 *  The user is defining their own table information and setting the
633 *  appropriate variables for the ITRON Initialization Task Table.
634 */
635
636#else
637
638#ifndef CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT
639#define CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT   ITRON_Init
640#endif
641
642#ifndef CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES
643#define CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES    TA_HLNG
644#endif
645
646#ifndef CONFIGURE_ITRON_INIT_TASK_PRIORITY
647#define CONFIGURE_ITRON_INIT_TASK_PRIORITY      1
648#endif
649
650#ifndef CONFIGURE_ITRON_INIT_TASK_STACK_SIZE
651#define CONFIGURE_ITRON_INIT_TASK_STACK_SIZE    RTEMS_MINIMUM_STACK_SIZE
652#endif
653
654#ifdef CONFIGURE_INIT
655itron_initialization_tasks_table ITRON_Initialization_tasks[] = {
656  { 1,                                    /* ID */
657    { (VP) 0,                                /* exinfo */
658      CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES,  /* task attributes */
659      CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT, /* task start address */
660      CONFIGURE_ITRON_INIT_TASK_PRIORITY,    /* initial task priority */
661      CONFIGURE_ITRON_INIT_TASK_STACK_SIZE   /* stack size */
662    }
663  }
664};
665#endif
666
667#define CONFIGURE_ITRON_INIT_TASK_TABLE_NAME ITRON_Initialization_tasks
668
669#define CONFIGURE_ITRON_INIT_TASK_TABLE_SIZE \
670  sizeof(CONFIGURE_ITRON_INIT_TASK_TABLE_NAME) / \
671      sizeof(itron_initialization_tasks_table)
672
673#endif    /* CONFIGURE_ITRON_HAS_OWN_INIT_TASK_TABLE */
674
675#else     /* CONFIGURE_ITRON_INIT_TASK_TABLE */
676
677#define CONFIGURE_ITRON_INIT_TASK_TABLE_NAME NULL
678#define CONFIGURE_ITRON_INIT_TASK_TABLE_SIZE 0
679
680#endif
681
682#define CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API \
683  ( \
684    sizeof (ITRON_API_Control) \
685  )
686
687#define CONFIGURE_MEMORY_FOR_ITRON_SEMAPHORES(_semaphores) \
688  ((_semaphores) * \
689   ( sizeof(ITRON_Semaphore_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
690
691#define CONFIGURE_MEMORY_FOR_ITRON_EVENTFLAGS(_eventflags) \
692  ((_eventflags) * \
693   ( sizeof(ITRON_Eventflags_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
694
695#define CONFIGURE_MEMORY_FOR_ITRON_MAILBOXES(_mailboxes) \
696  ((_mailboxes) * \
697   ( sizeof(ITRON_Mailbox_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
698
699#define CONFIGURE_MEMORY_FOR_ITRON_MESSAGE_BUFFERS(_message_buffers) \
700  ((_message_buffers) * \
701   ( sizeof(ITRON_Message_buffer_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
702
703#define CONFIGURE_MEMORY_FOR_ITRON_PORTS(_ports) \
704  ((_ports) * \
705   ( sizeof(ITRON_Port_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
706
707#define CONFIGURE_MEMORY_FOR_ITRON_MEMORY_POOLS(_memory_pools) \
708  ((_memory_pools) * \
709   (sizeof(ITRON_Variable_memory_pool_Control) + CONFIGURE_OBJECT_TABLE_STUFF))
710
711#define CONFIGURE_MEMORY_FOR_ITRON_FIXED_MEMORY_POOLS(_fixed_memory_pools) \
712  ((_fixed_memory_pools) * \
713   ( sizeof(ITRON_Fixed_memory_pool_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
714
715#ifndef CONFIGURE_ITRON_INIT_TASK_STACK_SIZES
716#define CONFIGURE_ITRON_INIT_TASK_STACK_SIZES (RTEMS_MINIMUM_STACK_SIZE * 2)
717#endif
718
719
720#define CONFIGURE_MEMORY_FOR_ITRON \
721  ( \
722    CONFIGURE_MEMORY_FOR_ITRON_SEMAPHORES( \
723        CONFIGURE_MAXIMUM_ITRON_SEMAPHORES ) + \
724    CONFIGURE_MEMORY_FOR_ITRON_EVENTFLAGS( \
725        CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS ) + \
726    CONFIGURE_MEMORY_FOR_ITRON_MAILBOXES( \
727        CONFIGURE_MAXIMUM_ITRON_MAILBOXES ) + \
728    CONFIGURE_MEMORY_FOR_ITRON_MESSAGE_BUFFERS( \
729        CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS ) + \
730    CONFIGURE_MEMORY_FOR_ITRON_PORTS( \
731        CONFIGURE_MAXIMUM_ITRON_PORTS ) + \
732    CONFIGURE_MEMORY_FOR_ITRON_MEMORY_POOLS( \
733        CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS ) + \
734    CONFIGURE_MEMORY_FOR_ITRON_FIXED_MEMORY_POOLS( \
735        CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS ) + \
736    CONFIGURE_ITRON_INIT_TASK_STACK_SIZES \
737   )
738
739
740#else
741
742#define CONFIGURE_MAXIMUM_ITRON_TASKS               0
743#define CONFIGURE_MAXIMUM_ITRON_SEMAPHORES          0
744#define CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS          0
745#define CONFIGURE_MAXIMUM_ITRON_MAILBOXES           0
746#define CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS     0
747#define CONFIGURE_MAXIMUM_ITRON_PORTS               0
748#define CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS        0
749#define CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS  0
750#define CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API     0
751#define CONFIGURE_MEMORY_FOR_ITRON                  0
752
753#endif    /* RTEMS_ITRON_API */
754
755
756/*
757 *  Calculate the RAM size based on the maximum number of objects configured.
758 */
759
760#ifndef CONFIGURE_EXECUTIVE_RAM_SIZE
761
762#define CONFIGURE_OBJECT_TABLE_STUFF \
763  ( sizeof(Objects_Control *) + sizeof(rtems_name *) + sizeof(rtems_name) )
764
765#define CONFIGURE_MEMORY_FOR_TASKS(_tasks) \
766  (((_tasks) + 1 ) * \
767   ((sizeof(Thread_Control) + CONTEXT_FP_SIZE + \
768      STACK_MINIMUM_SIZE + sizeof( RTEMS_API_Control ) + \
769      CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API + \
770      CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API + \
771      CONFIGURE_OBJECT_TABLE_STUFF)) \
772  )
773
774#define CONFIGURE_MEMORY_FOR_TIMERS(_timers) \
775  ((_timers) * ( sizeof(Timer_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
776
777#define CONFIGURE_MEMORY_FOR_SEMAPHORES(_semaphores) \
778  ((_semaphores) * \
779   ( sizeof(Semaphore_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
780
781#define CONFIGURE_MEMORY_FOR_MESSAGE_QUEUES(_queues) \
782  ( (_queues) * \
783    ( sizeof(Message_queue_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
784
785#define CONFIGURE_MEMORY_FOR_PARTITIONS(_partitions) \
786  ( (_partitions) * \
787    ( sizeof(Partition_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
788
789#define CONFIGURE_MEMORY_FOR_REGIONS(_regions) \
790  ( (_regions) * \
791    ( sizeof(Region_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
792
793#define CONFIGURE_MEMORY_FOR_PORTS(_ports) \
794  ( (_ports) * \
795    ( sizeof(Dual_ported_memory_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
796
797#define CONFIGURE_MEMORY_FOR_PERIODS(_periods) \
798  ( (_periods) * \
799    ( sizeof(Rate_monotonic_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
800
801#define CONFIGURE_MEMORY_FOR_USER_EXTENSIONS(_extensions) \
802  ( (_extensions) * \
803    ( sizeof(Extension_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
804
805#define CONFIGURE_MEMORY_FOR_DEVICES(_devices) \
806  (((_devices) + 1) * ( sizeof(rtems_driver_name_t) ) )
807
808#ifdef CONFIGURE_MP_APPLICATION
809
810#ifndef CONFIGURE_HAS_OWN_MULTIPROCESING_TABLE
811
812#define CONFIGURE_MEMORY_FOR_PROXIES(_proxies) \
813  ( ((_proxies) + 1) * ( sizeof(Thread_Proxy_control) )  )
814
815#define CONFIGURE_MEMORY_FOR_GLOBAL_OBJECTS(_global_objects) \
816  ((_global_objects)  * ( sizeof(Objects_MP_Control) )  )
817
818#define CONFIGURE_MEMORY_FOR_MP \
819  ( CONFIGURE_MEMORY_FOR_PROXIES(CONFIGURE_MP_MAXIMUM_PROXIES) + \
820    CONFIGURE_MEMORY_FOR_GLOBAL_OBJECTS(CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS) + \
821    CONFIGURE_MEMORY_FOR_TASKS(1) \
822  )
823
824#endif  /* CONFIGURE_HAS_OWN_MULTIPROCESING_TABLE */
825
826#else
827
828#define CONFIGURE_MEMORY_FOR_MP  0
829
830#endif
831
832#ifndef CONFIGURE_MEMORY_OVERHEAD
833#define CONFIGURE_MEMORY_OVERHEAD 0
834#endif
835
836#ifndef CONFIGURE_EXTRA_TASK_STACKS
837#define CONFIGURE_EXTRA_TASK_STACKS 0
838#endif
839
840#define CONFIGURE_MEMORY_FOR_SYSTEM_OVERHEAD \
841  ( CONFIGURE_MEMORY_FOR_TASKS(1) +    /* IDLE */ \
842    (256 * 12) +                       /* Ready chains */ \
843    256        +                       /* name/ptr table overhead */ \
844    CONFIGURE_INTERRUPT_STACK_MEMORY   /* interrupt stack */ \
845  )
846
847#define CONFIGURE_INITIALIZATION_THREADS_STACKS \
848   ((CONFIGURE_INIT_TASK_STACK_SIZE - RTEMS_MINIMUM_STACK_SIZE) + \
849    (CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE - RTEMS_MINIMUM_STACK_SIZE) + \
850    (CONFIGURE_ITRON_INIT_TASK_STACK_SIZE - RTEMS_MINIMUM_STACK_SIZE))
851
852#define CONFIGURE_EXECUTIVE_RAM_SIZE \
853(( CONFIGURE_MEMORY_FOR_POSIX + \
854   CONFIGURE_MEMORY_FOR_ITRON + \
855   CONFIGURE_MEMORY_FOR_TASKS(CONFIGURE_MAXIMUM_TASKS + \
856      CONFIGURE_MAXIMUM_POSIX_THREADS + CONFIGURE_MAXIMUM_ADA_TASKS + \
857      CONFIGURE_MAXIMUM_ITRON_TASKS ) + \
858   CONFIGURE_INITIALIZATION_THREADS_STACKS + \
859   CONFIGURE_MEMORY_FOR_TIMERS(CONFIGURE_MAXIMUM_TIMERS) + \
860   CONFIGURE_MEMORY_FOR_SEMAPHORES(CONFIGURE_MAXIMUM_SEMAPHORES + \
861     CONFIGURE_LIBIO_SEMAPHORES + CONFIGURE_TERMIOS_SEMAPHORES) + \
862   CONFIGURE_MEMORY_FOR_MESSAGE_QUEUES(CONFIGURE_MAXIMUM_MESSAGE_QUEUES) + \
863   CONFIGURE_MEMORY_FOR_PARTITIONS(CONFIGURE_MAXIMUM_PARTITIONS) + \
864   CONFIGURE_MEMORY_FOR_REGIONS( \
865      CONFIGURE_MAXIMUM_REGIONS + CONFIGURE_MALLOC_REGION ) + \
866   CONFIGURE_MEMORY_FOR_PORTS(CONFIGURE_MAXIMUM_PORTS) + \
867   CONFIGURE_MEMORY_FOR_PERIODS(CONFIGURE_MAXIMUM_PERIODS) + \
868   CONFIGURE_MEMORY_FOR_USER_EXTENSIONS( \
869      CONFIGURE_MAXIMUM_USER_EXTENSIONS + CONFIGURE_NEWLIB_EXTENSION + \
870      CONFIGURE_STACK_CHECKER_EXTENSION ) + \
871   CONFIGURE_MEMORY_FOR_DEVICES(CONFIGURE_MAXIMUM_DEVICES) + \
872   CONFIGURE_MEMORY_FOR_MP + \
873   CONFIGURE_MEMORY_FOR_SYSTEM_OVERHEAD + \
874   (((CONFIGURE_MEMORY_OVERHEAD)+1) * 1024) + \
875   (CONFIGURE_EXTRA_TASK_STACKS) + (CONFIGURE_ADA_TASKS_STACK) \
876) & 0xfffffc00)
877#endif
878
879#ifdef CONFIGURE_GNAT_RTEMS
880#define CONFIGURE_GNAT_MUTEXES 10
881#define CONFIGURE_GNAT_KEYS    1
882
883/* 20 are required to run all tests in the ACVC */
884#ifndef CONFIGURE_MAXIMUM_ADA_TASKS
885#define CONFIGURE_MAXIMUM_ADA_TASKS  20
886#endif
887
888/* This is the number of non-Ada tasks which invoked Ada code. */
889#ifndef CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
890#define CONFIGURE_MAXIMUM_FAKE_ADA_TASKS 0
891#endif
892
893/* Ada tasks are allocated twice the minimum stack space */
894#define CONFIGURE_ADA_TASKS_STACK \
895  (CONFIGURE_MAXIMUM_ADA_TASKS * (RTEMS_MINIMUM_STACK_SIZE + (6 * 1024)))
896
897#else
898#define CONFIGURE_GNAT_MUTEXES           0
899#define CONFIGURE_GNAT_KEYS              0
900#define CONFIGURE_MAXIMUM_ADA_TASKS      0
901#define CONFIGURE_MAXIMUM_FAKE_ADA_TASKS 0
902#define CONFIGURE_ADA_TASKS_STACK        0
903#endif
904
905
906#ifdef CONFIGURE_INIT
907
908rtems_api_configuration_table Configuration_RTEMS_API = {
909  CONFIGURE_MAXIMUM_TASKS,
910  CONFIGURE_MAXIMUM_TIMERS,
911  CONFIGURE_MAXIMUM_SEMAPHORES + CONFIGURE_LIBIO_SEMAPHORES +
912    CONFIGURE_TERMIOS_SEMAPHORES,
913  CONFIGURE_MAXIMUM_MESSAGE_QUEUES,
914  CONFIGURE_MAXIMUM_PARTITIONS,
915  CONFIGURE_MAXIMUM_REGIONS + CONFIGURE_MALLOC_REGION,
916  CONFIGURE_MAXIMUM_PORTS,
917  CONFIGURE_MAXIMUM_PERIODS,
918  CONFIGURE_INIT_TASK_TABLE_SIZE,
919  CONFIGURE_INIT_TASK_TABLE
920};
921
922#ifdef RTEMS_POSIX_API
923posix_api_configuration_table Configuration_POSIX_API = {
924  CONFIGURE_MAXIMUM_POSIX_THREADS + CONFIGURE_MAXIMUM_ADA_TASKS,
925  CONFIGURE_MAXIMUM_POSIX_MUTEXES + CONFIGURE_GNAT_MUTEXES +
926    CONFIGURE_MAXIMUM_ADA_TASKS + CONFIGURE_MAXIMUM_FAKE_ADA_TASKS,
927  CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES +
928    CONFIGURE_MAXIMUM_ADA_TASKS + CONFIGURE_MAXIMUM_FAKE_ADA_TASKS,
929  CONFIGURE_MAXIMUM_POSIX_KEYS + CONFIGURE_GNAT_KEYS,
930  CONFIGURE_MAXIMUM_POSIX_TIMERS,
931  CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS,
932  CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES,
933  CONFIGURE_MAXIMUM_POSIX_SEMAPHORES,
934  CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE,
935  CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME
936};
937#endif
938
939#ifdef RTEMS_ITRON_API
940itron_api_configuration_table Configuration_ITRON_API = {
941  CONFIGURE_MAXIMUM_ITRON_TASKS,
942  CONFIGURE_MAXIMUM_ITRON_SEMAPHORES,
943  CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS,
944  CONFIGURE_MAXIMUM_ITRON_MAILBOXES,
945  CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS,
946  CONFIGURE_MAXIMUM_ITRON_PORTS,
947  CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS,
948  CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS,
949  CONFIGURE_ITRON_INIT_TASK_TABLE_SIZE,
950  CONFIGURE_ITRON_INIT_TASK_TABLE_NAME
951};
952#endif
953
954rtems_configuration_table Configuration = {
955  CONFIGURE_EXECUTIVE_RAM_WORK_AREA,
956  CONFIGURE_EXECUTIVE_RAM_SIZE,
957  CONFIGURE_MAXIMUM_USER_EXTENSIONS + CONFIGURE_NEWLIB_EXTENSION +
958      CONFIGURE_STACK_CHECKER_EXTENSION,
959  CONFIGURE_MICROSECONDS_PER_TICK,
960  CONFIGURE_TICKS_PER_TIMESLICE,
961  CONFIGURE_MAXIMUM_DEVICES,
962  sizeof (Device_drivers)/
963    sizeof(rtems_driver_address_table),      /* number of device drivers */
964  Device_drivers,                            /* pointer to driver table */
965  CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS,    /* number of initial extensions */
966  Configuration_Initial_Extensions,          /* pointer to initial extensions */
967  CONFIGURE_MULTIPROCESSING_TABLE,           /* pointer to MP config table */
968  &Configuration_RTEMS_API,                  /* pointer to RTEMS API config */
969#ifdef RTEMS_POSIX_API
970  &Configuration_POSIX_API,                  /* pointer to POSIX API config */
971#else
972  NULL,                                      /* pointer to POSIX API config */
973#endif
974#ifdef RTEMS_ITRON_API
975  &Configuration_ITRON_API                   /* pointer to ITRON API config */
976#else
977  NULL                                       /* pointer to ITRON API config */
978#endif
979};
980#endif
981
982#endif /* CONFIGURE_HAS_OWN_CONFIGURATION_TABLE */
983
984#ifdef __cplusplus
985}
986#endif
987 
988/*
989 *  Some warnings and error checking
990 */
991
992/*
993 *  Make sure a task/thread of some sort is configured
994 */
995
996#if (CONFIGURE_MAXIMUM_TASKS == 0) && \
997    (CONFIGURE_MAXIMUM_POSIX_THREADS == 0) && \
998    (CONFIGURE_MAXIMUM_ADA_TASKS == 0) &&  \
999    (CONFIGURE_MAXIMUM_ITRON_TASKS == 0)
1000#error "CONFIGURATION ERROR: No tasks or threads configured!!"
1001#endif
1002
1003/*
1004 *  Make sure at least one of the initialization task/thread
1005 *  tables was defined.
1006 */
1007
1008#if !defined(CONFIGURE_RTEMS_INIT_TASKS_TABLE) && \
1009    !defined(CONFIGURE_POSIX_INIT_THREAD_TABLE) && \
1010    !defined(CONFIGURE_ITRON_INIT_TASK_TABLE)
1011#error "CONFIGURATION ERROR: No initialization tasks or threads configured!!"
1012#endif
1013
1014#endif
1015/* end of include file */
Note: See TracBrowser for help on using the repository browser.