source: rtems/c/src/exec/sapi/include/confdefs.h @ 2fbdbd4

Last change on this file since 2fbdbd4 was 2fbdbd4, checked in by Joel Sherrill <joel.sherrill@…>, on 05/24/00 at 14:36:52

Significantly lowered the default memory requirements:

  • CONFIGURE_RTEMS_INIT_TASKS_TABLE was 10 now 0
  • CONFIGURE_POSIX_INIT_THREAD_TABLE was 10 now 0
  • CONFIGURE_ITRON_INIT_TASK_TABLE was 10 now 0
  • CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS was 20 now 3
  • added CONFIGURE_NUMBER_OF_TERMIOS_PORTS and defaulted to 1
  • added CONFIGURE_TERMIOS_DISABLED defaulted to "enabled"
  • miniIMFS is now the default

Added configuration error checks that:

+ Ensure > 0 tasks/threads are configured
+ Ensure at least one inititalization task/thread is defined

bsp.h now defines so BSP specific requirements are accounted for:

+ CONFIGURE_NUMBER_OF_TERMIOS_PORTS
+ CONFIGURE_INTERRUPT_STACK_MEMORY

console_reserve_resources and rtems_termios_reserve_resources
are no longer required and considered obsolete. Calls to
rtems_termios_reserve_resources have been eliminated although
the routine is still there and the body "if 0'ed".

We are very close to having NO reason to modify the
configuration tables in the BSP. Be warned that eventually
we would like to see the need for BSP_Configuration
eliminated!

  • Property mode set to 100644
File size: 28.4 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_TIMER_DRIVER
252#include <timerdrv.h>
253#endif
254
255#ifdef CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
256#include <stubdrv.h>
257#endif
258
259#ifndef CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
260
261#ifdef CONFIGURE_INIT
262rtems_driver_address_table Device_drivers[] = {
263#ifdef CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
264  CONSOLE_DRIVER_TABLE_ENTRY,
265#endif
266#ifdef CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
267  CLOCK_DRIVER_TABLE_ENTRY,
268#endif
269#ifdef CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
270  STUB_DRIVER_TABLE_ENTRY,
271#endif
272  NULL_DRIVER_TABLE_ENTRY
273};
274#endif
275
276#endif  /* CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE */
277
278/*
279 *  Default the number of devices per device driver.  This value may be
280 *  overridden by the user.
281 */
282
283#ifndef CONFIGURE_MAXIMUM_DEVICES
284#define CONFIGURE_MAXIMUM_DEVICES   20
285#endif
286
287/*
288 *  Default Multiprocessing Configuration Table.  The defaults are
289 *  appropriate for most of the RTEMS Multiprocessor Test Suite.  Each
290 *  value may be overridden within each test to customize the environment.
291 */
292
293#ifdef CONFIGURE_MP_APPLICATION
294#ifndef CONFIGURE_HAS_OWN_MULTIPROCESING_TABLE
295
296#ifndef CONFIGURE_MP_NODE_NUMBER
297#define CONFIGURE_MP_NODE_NUMBER                NODE_NUMBER
298#endif
299
300#ifndef CONFIGURE_MP_MAXIMUM_NODES
301#define CONFIGURE_MP_MAXIMUM_NODES              2
302#endif
303
304#ifndef CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
305#define CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS     32
306#endif
307
308#ifndef CONFIGURE_MP_MAXIMUM_PROXIES
309#define CONFIGURE_MP_MAXIMUM_PROXIES            32
310#endif
311
312#ifndef CONFIGURE_MP_MPCI_TABLE_POINTER
313#include <mpci.h>
314#define CONFIGURE_MP_MPCI_TABLE_POINTER         &MPCI_table
315#endif
316
317#ifdef CONFIGURE_INIT
318rtems_multiprocessing_table Multiprocessing_configuration = {
319  CONFIGURE_MP_NODE_NUMBER,              /* local node number */
320  CONFIGURE_MP_MAXIMUM_NODES,            /* maximum # nodes in system */
321  CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS,   /* maximum # global objects */
322  CONFIGURE_MP_MAXIMUM_PROXIES,          /* maximum # proxies */
323  CONFIGURE_MP_MPCI_TABLE_POINTER        /* pointer to MPCI config table */
324};
325#endif
326
327#define CONFIGURE_MULTIPROCESSING_TABLE    &Multiprocessing_configuration
328
329#endif /* CONFIGURE_HAS_OWN_MULTIPROCESING_TABLE */
330
331#else
332
333#define CONFIGURE_MULTIPROCESSING_TABLE    NULL
334
335#endif /* CONFIGURE_MP_APPLICATION */
336 
337/*
338 *  Default Configuration Table. 
339 */
340
341#ifndef CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
342 
343#ifndef CONFIGURE_EXECUTIVE_RAM_WORK_AREA
344#define CONFIGURE_EXECUTIVE_RAM_WORK_AREA     NULL
345#endif
346
347#ifndef CONFIGURE_MAXIMUM_TASKS
348#define CONFIGURE_MAXIMUM_TASKS               0
349#endif
350
351#ifndef CONFIGURE_MAXIMUM_TIMERS
352#define CONFIGURE_MAXIMUM_TIMERS              0
353#endif
354
355#ifndef CONFIGURE_MAXIMUM_SEMAPHORES
356#define CONFIGURE_MAXIMUM_SEMAPHORES          0
357#endif
358
359#ifndef CONFIGURE_MAXIMUM_MESSAGE_QUEUES
360#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES      0
361#endif
362
363#ifndef CONFIGURE_MAXIMUM_PARTITIONS
364#define CONFIGURE_MAXIMUM_PARTITIONS          0
365#endif
366
367#ifndef CONFIGURE_MAXIMUM_REGIONS
368#define CONFIGURE_MAXIMUM_REGIONS             0
369#endif
370
371#ifndef CONFIGURE_MAXIMUM_PORTS
372#define CONFIGURE_MAXIMUM_PORTS               0
373#endif
374
375#ifndef CONFIGURE_MAXIMUM_PERIODS
376#define CONFIGURE_MAXIMUM_PERIODS             0
377#endif
378
379#ifndef CONFIGURE_MAXIMUM_USER_EXTENSIONS
380#define CONFIGURE_MAXIMUM_USER_EXTENSIONS     0
381#endif
382
383#ifndef CONFIGURE_MICROSECONDS_PER_TICK
384#define CONFIGURE_MICROSECONDS_PER_TICK RTEMS_MILLISECONDS_TO_MICROSECONDS(10)
385#endif
386
387#ifndef CONFIGURE_TICKS_PER_TIMESLICE
388#define CONFIGURE_TICKS_PER_TIMESLICE        50
389#endif
390
391/*
392 *  Initial Extension Set
393 */
394
395#ifdef CONFIGURE_INIT
396#ifdef STACK_CHECKER_ON
397#include <rtems/stackchk.h>
398#endif
399
400rtems_extensions_table Configuration_Initial_Extensions[] = {
401#ifdef CONFIGURE_INITIAL_EXTENSIONS
402    CONFIGURE_INITIAL_EXTENSIONS,
403#endif
404#ifdef STACK_CHECKER_ON
405    STACK_CHECKER_EXTENSION,
406#endif
407    { NULL, NULL, NULL, NULL, NULL, NULL, NULL }
408};
409
410#define CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS \
411  ((sizeof(Configuration_Initial_Extensions) / \
412    sizeof(rtems_extensions_table)) - 1)
413
414#endif
415
416/*
417 *  POSIX API Configuration Parameters
418 */
419
420#ifdef RTEMS_POSIX_API
421
422#include <sys/types.h>
423#include <sys/siginfo.h>
424#include <mqueue.h>
425#include <rtems/posix/cond.h>
426#include <rtems/posix/mqueue.h>
427#include <rtems/posix/mutex.h>
428#include <rtems/posix/key.h>
429#include <rtems/posix/psignal.h>
430#include <rtems/posix/semaphore.h>
431#include <rtems/posix/threadsup.h>
432
433#ifndef CONFIGURE_MAXIMUM_POSIX_THREADS
434#define CONFIGURE_MAXIMUM_POSIX_THREADS      0
435#endif
436
437#ifndef CONFIGURE_MAXIMUM_POSIX_MUTEXES
438#define CONFIGURE_MAXIMUM_POSIX_MUTEXES      0
439#endif
440
441#ifndef CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
442#define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES  0
443#endif
444
445#ifndef CONFIGURE_MAXIMUM_POSIX_KEYS
446#define CONFIGURE_MAXIMUM_POSIX_KEYS         0
447#endif
448
449#ifndef CONFIGURE_MAXIMUM_POSIX_TIMERS
450#define CONFIGURE_MAXIMUM_POSIX_TIMERS 0
451#endif
452
453#ifndef CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
454#define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS 0
455#endif
456
457#ifndef CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
458#define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES 0
459#endif
460
461#ifndef CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
462#define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES 0
463#endif
464
465#ifdef CONFIGURE_POSIX_INIT_THREAD_TABLE
466
467#ifdef CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
468
469/*
470 *  The user is defining their own table information and setting the
471 *  appropriate variables for the POSIX Initialization Thread Table.
472 */
473 
474#else
475
476#ifndef CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
477#define CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT   POSIX_Init
478#endif
479
480#ifndef CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
481#define CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE    (RTEMS_MINIMUM_STACK_SIZE * 2)
482#endif
483
484#ifdef CONFIGURE_INIT
485posix_initialization_threads_table POSIX_Initialization_threads[] = {
486  { CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT, \
487      CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE }
488};
489#endif
490
491#define CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME POSIX_Initialization_threads
492 
493#define CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE \
494  sizeof(CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME) / \
495      sizeof(posix_initialization_threads_table)
496
497#endif    /* CONFIGURE_POSIX_HAS_OWN_INIT_TASK_TABLE */
498
499#else     /* CONFIGURE_POSIX_INIT_THREAD_TABLE */
500
501#define CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME NULL
502#define CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE 0
503
504#endif
505
506#define CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API \
507  ( \
508    sizeof (POSIX_API_Control) + \
509   (sizeof (void *) * (CONFIGURE_GNAT_KEYS + CONFIGURE_MAXIMUM_POSIX_KEYS)) \
510  )
511
512#define CONFIGURE_MEMORY_FOR_POSIX_MUTEXES(_mutexes) \
513  ((_mutexes) * \
514   ( sizeof(POSIX_Mutex_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
515
516#define CONFIGURE_MEMORY_FOR_POSIX_CONDITION_VARIABLES(_condition_variables) \
517  ((_condition_variables) * \
518   ( sizeof(POSIX_Condition_variables_Control) + \
519        CONFIGURE_OBJECT_TABLE_STUFF ) )
520
521#define CONFIGURE_MEMORY_FOR_POSIX_KEYS(_keys) \
522  ((_keys) * \
523   ( sizeof(POSIX_Keys_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
524
525#define CONFIGURE_MEMORY_FOR_POSIX_TIMERS(_timers) \
526  ((_timers) * \
527   ( 0 ) )
528
529#define CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS(_queued_signals) \
530  ((_queued_signals) * \
531   ( sizeof(POSIX_signals_Siginfo_node) + CONFIGURE_OBJECT_TABLE_STUFF ) )
532
533#define CONFIGURE_MEMORY_FOR_POSIX_MESSAGE_QUEUES(_message_queues) \
534  ((_message_queues) * \
535   ( sizeof( POSIX_Message_queue_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
536#define CONFIGURE_MEMORY_FOR_POSIX_SEMAPHORES(_semaphores) \
537  ((_semaphores) * \
538   ( sizeof( POSIX_Semaphore_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
539 
540
541#define CONFIGURE_MEMORY_FOR_POSIX \
542  ( \
543    CONFIGURE_MEMORY_FOR_POSIX_MUTEXES( CONFIGURE_MAXIMUM_POSIX_MUTEXES ) + \
544    CONFIGURE_MEMORY_FOR_POSIX_CONDITION_VARIABLES( \
545        CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES ) + \
546    CONFIGURE_MEMORY_FOR_POSIX_KEYS( CONFIGURE_MAXIMUM_POSIX_KEYS ) + \
547    CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS( \
548        CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS ) + \
549    CONFIGURE_MEMORY_FOR_POSIX_MESSAGE_QUEUES( \
550        CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES ) + \
551    CONFIGURE_MEMORY_FOR_POSIX_SEMAPHORES( \
552        CONFIGURE_MAXIMUM_POSIX_SEMAPHORES ) + \
553    (CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE) \
554   )
555
556
557#else
558
559#define CONFIGURE_MAXIMUM_POSIX_THREADS         0
560#define CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API 0
561#define CONFIGURE_MEMORY_FOR_POSIX              0
562
563
564#endif    /* RTEMS_POSIX_API */
565
566#ifndef CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
567#define CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE    0
568#endif
569
570/*
571 *  ITRON API Configuration Parameters
572 */
573
574#ifdef RTEMS_ITRON_API
575
576#include <itron.h>
577#include <rtems/itron/config.h>
578#include <rtems/itron/eventflags.h>
579#include <rtems/itron/fmempool.h>
580#include <rtems/itron/mbox.h>
581#include <rtems/itron/msgbuffer.h>
582#include <rtems/itron/port.h>
583#include <rtems/itron/semaphore.h>
584#include <rtems/itron/task.h>
585#include <rtems/itron/vmempool.h>
586
587#ifndef CONFIGURE_MAXIMUM_ITRON_TASKS
588#define CONFIGURE_MAXIMUM_ITRON_TASKS      0
589#endif
590
591#ifndef CONFIGURE_MAXIMUM_ITRON_SEMAPHORES
592#define CONFIGURE_MAXIMUM_ITRON_SEMAPHORES   0
593#endif
594
595#ifndef CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS
596#define CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS   0
597#endif
598
599#ifndef CONFIGURE_MAXIMUM_ITRON_MAILBOXES
600#define CONFIGURE_MAXIMUM_ITRON_MAILBOXES   0
601#endif
602
603#ifndef CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS
604#define CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS   0
605#endif
606
607#ifndef CONFIGURE_MAXIMUM_ITRON_PORTS
608#define CONFIGURE_MAXIMUM_ITRON_PORTS   0
609#endif
610
611#ifndef CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS
612#define CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS   0
613#endif
614
615#ifndef CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS
616#define CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS   0
617#endif
618
619#ifdef CONFIGURE_ITRON_INIT_TASK_TABLE
620
621#ifdef CONFIGURE_ITRON_HAS_OWN_INIT_TASK_TABLE
622
623/*
624 *  The user is defining their own table information and setting the
625 *  appropriate variables for the ITRON Initialization Task Table.
626 */
627
628#else
629
630#ifndef CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT
631#define CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT   ITRON_Init
632#endif
633
634#ifndef CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES
635#define CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES    TA_HLNG
636#endif
637
638#ifndef CONFIGURE_ITRON_INIT_TASK_PRIORITY
639#define CONFIGURE_ITRON_INIT_TASK_PRIORITY      1
640#endif
641
642#ifndef CONFIGURE_ITRON_INIT_TASK_STACK_SIZE
643#define CONFIGURE_ITRON_INIT_TASK_STACK_SIZE    RTEMS_MINIMUM_STACK_SIZE
644#endif
645
646#ifdef CONFIGURE_INIT
647itron_initialization_tasks_table ITRON_Initialization_tasks[] = {
648  { 1,                                    /* ID */
649    { (VP) 0,                                /* exinfo */
650      CONFIGURE_ITRON_INIT_TASK_ATTRIBUTES,  /* task attributes */
651      CONFIGURE_ITRON_INIT_TASK_ENTRY_POINT, /* task start address */
652      CONFIGURE_ITRON_INIT_TASK_PRIORITY,    /* initial task priority */
653      CONFIGURE_ITRON_INIT_TASK_STACK_SIZE   /* stack size */
654    }
655  }
656};
657#endif
658
659#define CONFIGURE_ITRON_INIT_TASK_TABLE_NAME ITRON_Initialization_tasks
660
661#define CONFIGURE_ITRON_INIT_TASK_TABLE_SIZE \
662  sizeof(CONFIGURE_ITRON_INIT_TASK_TABLE_NAME) / \
663      sizeof(itron_initialization_tasks_table)
664
665#endif    /* CONFIGURE_ITRON_HAS_OWN_INIT_TASK_TABLE */
666
667#else     /* CONFIGURE_ITRON_INIT_TASK_TABLE */
668
669#define CONFIGURE_ITRON_INIT_TASK_TABLE_NAME NULL
670#define CONFIGURE_ITRON_INIT_TASK_TABLE_SIZE 0
671
672#endif
673
674#define CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API \
675  ( \
676    sizeof (ITRON_API_Control) \
677  )
678
679#define CONFIGURE_MEMORY_FOR_ITRON_SEMAPHORES(_semaphores) \
680  ((_semaphores) * \
681   ( sizeof(ITRON_Semaphore_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
682
683#define CONFIGURE_MEMORY_FOR_ITRON_EVENTFLAGS(_eventflags) \
684  ((_eventflags) * \
685   ( sizeof(ITRON_Eventflags_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
686
687#define CONFIGURE_MEMORY_FOR_ITRON_MAILBOXES(_mailboxes) \
688  ((_mailboxes) * \
689   ( sizeof(ITRON_Mailbox_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
690
691#define CONFIGURE_MEMORY_FOR_ITRON_MESSAGE_BUFFERS(_message_buffers) \
692  ((_message_buffers) * \
693   ( sizeof(ITRON_Message_buffer_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
694
695#define CONFIGURE_MEMORY_FOR_ITRON_PORTS(_ports) \
696  ((_ports) * \
697   ( sizeof(ITRON_Port_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
698
699#define CONFIGURE_MEMORY_FOR_ITRON_MEMORY_POOLS(_memory_pools) \
700  ((_memory_pools) * \
701   (sizeof(ITRON_Variable_memory_pool_Control) + CONFIGURE_OBJECT_TABLE_STUFF))
702
703#define CONFIGURE_MEMORY_FOR_ITRON_FIXED_MEMORY_POOLS(_fixed_memory_pools) \
704  ((_fixed_memory_pools) * \
705   ( sizeof(ITRON_Fixed_memory_pool_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
706
707#ifndef CONFIGURE_ITRON_INIT_TASK_STACK_SIZES
708#define CONFIGURE_ITRON_INIT_TASK_STACK_SIZES (RTEMS_MINIMUM_STACK_SIZE * 2)
709#endif
710
711
712#define CONFIGURE_MEMORY_FOR_ITRON \
713  ( \
714    CONFIGURE_MEMORY_FOR_ITRON_SEMAPHORES( \
715        CONFIGURE_MAXIMUM_ITRON_SEMAPHORES ) + \
716    CONFIGURE_MEMORY_FOR_ITRON_EVENTFLAGS( \
717        CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS ) + \
718    CONFIGURE_MEMORY_FOR_ITRON_MAILBOXES( \
719        CONFIGURE_MAXIMUM_ITRON_MAILBOXES ) + \
720    CONFIGURE_MEMORY_FOR_ITRON_MESSAGE_BUFFERS( \
721        CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS ) + \
722    CONFIGURE_MEMORY_FOR_ITRON_PORTS( \
723        CONFIGURE_MAXIMUM_ITRON_PORTS ) + \
724    CONFIGURE_MEMORY_FOR_ITRON_MEMORY_POOLS( \
725        CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS ) + \
726    CONFIGURE_MEMORY_FOR_ITRON_FIXED_MEMORY_POOLS( \
727        CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS ) + \
728    CONFIGURE_ITRON_INIT_TASK_STACK_SIZES \
729   )
730
731
732#else
733
734#define CONFIGURE_MAXIMUM_ITRON_TASKS               0
735#define CONFIGURE_MAXIMUM_ITRON_SEMAPHORES          0
736#define CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS          0
737#define CONFIGURE_MAXIMUM_ITRON_MAILBOXES           0
738#define CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS     0
739#define CONFIGURE_MAXIMUM_ITRON_PORTS               0
740#define CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS        0
741#define CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS  0
742#define CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API     0
743#define CONFIGURE_MEMORY_FOR_ITRON                  0
744
745#endif    /* RTEMS_ITRON_API */
746
747
748/*
749 *  Calculate the RAM size based on the maximum number of objects configured.
750 */
751
752#ifndef CONFIGURE_EXECUTIVE_RAM_SIZE
753
754#define CONFIGURE_OBJECT_TABLE_STUFF \
755  ( sizeof(Objects_Control *) + sizeof(rtems_name *) + sizeof(rtems_name) )
756
757#define CONFIGURE_MEMORY_FOR_TASKS(_tasks) \
758  (((_tasks) + 1 ) * \
759   ((sizeof(Thread_Control) + CONTEXT_FP_SIZE + \
760      STACK_MINIMUM_SIZE + sizeof( RTEMS_API_Control ) + \
761      CONFIGURE_MEMORY_PER_TASK_FOR_POSIX_API + \
762      CONFIGURE_MEMORY_PER_TASK_FOR_ITRON_API + \
763      CONFIGURE_OBJECT_TABLE_STUFF)) \
764  )
765
766#define CONFIGURE_MEMORY_FOR_TIMERS(_timers) \
767  ((_timers) * ( sizeof(Timer_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
768
769#define CONFIGURE_MEMORY_FOR_SEMAPHORES(_semaphores) \
770  ((_semaphores) * \
771   ( sizeof(Semaphore_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
772
773#define CONFIGURE_MEMORY_FOR_MESSAGE_QUEUES(_queues) \
774  ( (_queues) * \
775    ( sizeof(Message_queue_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
776
777#define CONFIGURE_MEMORY_FOR_PARTITIONS(_partitions) \
778  ( (_partitions) * \
779    ( sizeof(Partition_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
780
781#define CONFIGURE_MEMORY_FOR_REGIONS(_regions) \
782  ( (_regions) * \
783    ( sizeof(Region_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
784
785#define CONFIGURE_MEMORY_FOR_PORTS(_ports) \
786  ( (_ports) * \
787    ( sizeof(Dual_ported_memory_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
788
789#define CONFIGURE_MEMORY_FOR_PERIODS(_periods) \
790  ( (_periods) * \
791    ( sizeof(Rate_monotonic_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
792
793#define CONFIGURE_MEMORY_FOR_USER_EXTENSIONS(_extensions) \
794  ( (_extensions) * \
795    ( sizeof(Extension_Control) + CONFIGURE_OBJECT_TABLE_STUFF ) )
796
797#define CONFIGURE_MEMORY_FOR_DEVICES(_devices) \
798  (((_devices) + 1) * ( sizeof(rtems_driver_name_t) ) )
799
800#ifdef CONFIGURE_MP_APPLICATION
801
802#ifndef CONFIGURE_HAS_OWN_MULTIPROCESING_TABLE
803
804#define CONFIGURE_MEMORY_FOR_PROXIES(_proxies) \
805  ( ((_proxies) + 1) * ( sizeof(Thread_Proxy_control) )  )
806
807#define CONFIGURE_MEMORY_FOR_GLOBAL_OBJECTS(_global_objects) \
808  ((_global_objects)  * ( sizeof(Objects_MP_Control) )  )
809
810#define CONFIGURE_MEMORY_FOR_MP \
811  ( CONFIGURE_MEMORY_FOR_PROXIES(CONFIGURE_MP_MAXIMUM_PROXIES) + \
812    CONFIGURE_MEMORY_FOR_GLOBAL_OBJECTS(CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS) + \
813    CONFIGURE_MEMORY_FOR_TASKS(1) \
814  )
815
816#endif  /* CONFIGURE_HAS_OWN_MULTIPROCESING_TABLE */
817
818#else
819
820#define CONFIGURE_MEMORY_FOR_MP  0
821
822#endif
823
824#ifndef CONFIGURE_MEMORY_OVERHEAD
825#define CONFIGURE_MEMORY_OVERHEAD 0
826#endif
827
828#ifndef CONFIGURE_EXTRA_TASK_STACKS
829#define CONFIGURE_EXTRA_TASK_STACKS 0
830#endif
831
832#define CONFIGURE_MEMORY_FOR_SYSTEM_OVERHEAD \
833  ( CONFIGURE_MEMORY_FOR_TASKS(1) +    /* IDLE */ \
834    (256 * 12) +                       /* Ready chains */ \
835    256        +                       /* name/ptr table overhead */ \
836    CONFIGURE_INTERRUPT_STACK_MEMORY   /* interrupt stack */ \
837  )
838
839#define CONFIGURE_EXECUTIVE_RAM_SIZE \
840(( CONFIGURE_MEMORY_FOR_POSIX + \
841   CONFIGURE_MEMORY_FOR_ITRON + \
842   CONFIGURE_MEMORY_FOR_TASKS(CONFIGURE_MAXIMUM_TASKS + \
843      CONFIGURE_MAXIMUM_POSIX_THREADS + CONFIGURE_MAXIMUM_ADA_TASKS + \
844      CONFIGURE_MAXIMUM_ITRON_TASKS ) + \
845   CONFIGURE_MEMORY_FOR_TIMERS(CONFIGURE_MAXIMUM_TIMERS) + \
846   CONFIGURE_MEMORY_FOR_SEMAPHORES(CONFIGURE_MAXIMUM_SEMAPHORES + \
847     CONFIGURE_LIBIO_SEMAPHORES + CONFIGURE_TERMIOS_SEMAPHORES) + \
848   CONFIGURE_MEMORY_FOR_MESSAGE_QUEUES(CONFIGURE_MAXIMUM_MESSAGE_QUEUES) + \
849   CONFIGURE_MEMORY_FOR_PARTITIONS(CONFIGURE_MAXIMUM_PARTITIONS) + \
850   CONFIGURE_MEMORY_FOR_REGIONS( \
851      CONFIGURE_MAXIMUM_REGIONS + CONFIGURE_MALLOC_REGION ) + \
852   CONFIGURE_MEMORY_FOR_PORTS(CONFIGURE_MAXIMUM_PORTS) + \
853   CONFIGURE_MEMORY_FOR_PERIODS(CONFIGURE_MAXIMUM_PERIODS) + \
854   CONFIGURE_MEMORY_FOR_USER_EXTENSIONS( \
855      CONFIGURE_MAXIMUM_USER_EXTENSIONS + CONFIGURE_NEWLIB_EXTENSION + \
856      CONFIGURE_STACK_CHECKER_EXTENSION ) + \
857   CONFIGURE_MEMORY_FOR_DEVICES(CONFIGURE_MAXIMUM_DEVICES) + \
858   CONFIGURE_MEMORY_FOR_MP + \
859   CONFIGURE_MEMORY_FOR_SYSTEM_OVERHEAD + \
860   (((CONFIGURE_MEMORY_OVERHEAD)+1) * 1024) + \
861   (CONFIGURE_EXTRA_TASK_STACKS) + (CONFIGURE_ADA_TASKS_STACK) \
862) & 0xfffffc00)
863#endif
864
865#ifdef CONFIGURE_GNAT_RTEMS
866#define CONFIGURE_GNAT_MUTEXES 10
867#define CONFIGURE_GNAT_KEYS    1
868
869/* 20 are required to run all tests in the ACVC */
870#ifndef CONFIGURE_MAXIMUM_ADA_TASKS
871#define CONFIGURE_MAXIMUM_ADA_TASKS  20
872#endif
873
874/* This is the number of non-Ada tasks which invoked Ada code. */
875#ifndef CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
876#define CONFIGURE_MAXIMUM_FAKE_ADA_TASKS 0
877#endif
878
879/* Ada tasks are allocated twice the minimum stack space */
880#define CONFIGURE_ADA_TASKS_STACK \
881  (CONFIGURE_MAXIMUM_ADA_TASKS * (RTEMS_MINIMUM_STACK_SIZE + (6 * 1024)))
882
883#else
884#define CONFIGURE_GNAT_MUTEXES           0
885#define CONFIGURE_GNAT_KEYS              0
886#define CONFIGURE_MAXIMUM_ADA_TASKS      0
887#define CONFIGURE_MAXIMUM_FAKE_ADA_TASKS 0
888#define CONFIGURE_ADA_TASKS_STACK        0
889#endif
890
891
892#ifdef CONFIGURE_INIT
893
894rtems_api_configuration_table Configuration_RTEMS_API = {
895  CONFIGURE_MAXIMUM_TASKS,
896  CONFIGURE_MAXIMUM_TIMERS,
897  CONFIGURE_MAXIMUM_SEMAPHORES + CONFIGURE_LIBIO_SEMAPHORES +
898    CONFIGURE_TERMIOS_SEMAPHORES,
899  CONFIGURE_MAXIMUM_MESSAGE_QUEUES,
900  CONFIGURE_MAXIMUM_PARTITIONS,
901  CONFIGURE_MAXIMUM_REGIONS + CONFIGURE_MALLOC_REGION,
902  CONFIGURE_MAXIMUM_PORTS,
903  CONFIGURE_MAXIMUM_PERIODS,
904  CONFIGURE_INIT_TASK_TABLE_SIZE,
905  CONFIGURE_INIT_TASK_TABLE
906};
907
908#ifdef RTEMS_POSIX_API
909posix_api_configuration_table Configuration_POSIX_API = {
910  CONFIGURE_MAXIMUM_POSIX_THREADS + CONFIGURE_MAXIMUM_ADA_TASKS,
911  CONFIGURE_MAXIMUM_POSIX_MUTEXES + CONFIGURE_GNAT_MUTEXES +
912    CONFIGURE_MAXIMUM_ADA_TASKS + CONFIGURE_MAXIMUM_FAKE_ADA_TASKS,
913  CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES +
914    CONFIGURE_MAXIMUM_ADA_TASKS + CONFIGURE_MAXIMUM_FAKE_ADA_TASKS,
915  CONFIGURE_MAXIMUM_POSIX_KEYS + CONFIGURE_GNAT_KEYS,
916  CONFIGURE_MAXIMUM_POSIX_TIMERS,
917  CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS,
918  CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES,
919  CONFIGURE_MAXIMUM_POSIX_SEMAPHORES,
920  CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE,
921  CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME
922};
923#endif
924
925#ifdef RTEMS_ITRON_API
926itron_api_configuration_table Configuration_ITRON_API = {
927  CONFIGURE_MAXIMUM_ITRON_TASKS,
928  CONFIGURE_MAXIMUM_ITRON_SEMAPHORES,
929  CONFIGURE_MAXIMUM_ITRON_EVENTFLAGS,
930  CONFIGURE_MAXIMUM_ITRON_MAILBOXES,
931  CONFIGURE_MAXIMUM_ITRON_MESSAGE_BUFFERS,
932  CONFIGURE_MAXIMUM_ITRON_PORTS,
933  CONFIGURE_MAXIMUM_ITRON_MEMORY_POOLS,
934  CONFIGURE_MAXIMUM_ITRON_FIXED_MEMORY_POOLS,
935  CONFIGURE_ITRON_INIT_TASK_TABLE_SIZE,
936  CONFIGURE_ITRON_INIT_TASK_TABLE_NAME
937};
938#endif
939
940rtems_configuration_table Configuration = {
941  CONFIGURE_EXECUTIVE_RAM_WORK_AREA,
942  CONFIGURE_EXECUTIVE_RAM_SIZE,
943  CONFIGURE_MAXIMUM_USER_EXTENSIONS + CONFIGURE_NEWLIB_EXTENSION +
944      CONFIGURE_STACK_CHECKER_EXTENSION,
945  CONFIGURE_MICROSECONDS_PER_TICK,
946  CONFIGURE_TICKS_PER_TIMESLICE,
947  CONFIGURE_MAXIMUM_DEVICES,
948  sizeof (Device_drivers)/
949    sizeof(rtems_driver_address_table),      /* number of device drivers */
950  Device_drivers,                            /* pointer to driver table */
951  CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS,    /* number of initial extensions */
952  Configuration_Initial_Extensions,          /* pointer to initial extensions */
953  CONFIGURE_MULTIPROCESSING_TABLE,           /* pointer to MP config table */
954  &Configuration_RTEMS_API,                  /* pointer to RTEMS API config */
955#ifdef RTEMS_POSIX_API
956  &Configuration_POSIX_API,                  /* pointer to POSIX API config */
957#else
958  NULL,                                      /* pointer to POSIX API config */
959#endif
960#ifdef RTEMS_ITRON_API
961  &Configuration_ITRON_API                   /* pointer to ITRON API config */
962#else
963  NULL                                       /* pointer to ITRON API config */
964#endif
965};
966#endif
967
968#endif /* CONFIGURE_HAS_OWN_CONFIGURATION_TABLE */
969
970#ifdef __cplusplus
971}
972#endif
973 
974/*
975 *  Some warnings and error checking
976 */
977
978/*
979 *  Make sure a task/thread of some sort is configured
980 */
981
982#if (CONFIGURE_MAXIMUM_TASKS == 0) && \
983    (CONFIGURE_MAXIMUM_POSIX_THREADS == 0) && \
984    (CONFIGURE_MAXIMUM_ADA_TASKS == 0) &&  \
985    (CONFIGURE_MAXIMUM_ITRON_TASKS == 0)
986#error "CONFIGURATION ERROR: No tasks or threads configured!!
987#endif
988
989/*
990 *  Make sure at least one of the initialization task/thread
991 *  tables was defined.
992 */
993
994#if !defined(CONFIGURE_RTEMS_INIT_TASKS_TABLE) && \
995    !defined(CONFIGURE_POSIX_INIT_THREAD_TABLE) && \
996    !defined(CONFIGURE_ITRON_INIT_TASK_TABLE)
997#error "CONFIGURATION ERROR: No initialization tasks or threads configured!!
998#endif
999
1000#endif
1001/* end of include file */
Note: See TracBrowser for help on using the repository browser.