RTEMS  5.0.0
confdefs.h
Go to the documentation of this file.
1 
13 /*
14  * COPYRIGHT (c) 1989-2015.
15  * On-Line Applications Research Corporation (OAR).
16  *
17  * The license and distribution terms for this file may be
18  * found in the file LICENSE in this distribution or at
19  * http://www.rtems.org/license/LICENSE.
20  */
21 
22 #ifndef __CONFIGURATION_TEMPLATE_h
23 #define __CONFIGURATION_TEMPLATE_h
24 
25 /*
26  * Include the executive's configuration
27  */
28 #include <rtems.h>
29 #include <rtems/extensiondata.h>
30 #include <rtems/ioimpl.h>
31 #include <rtems/sysinit.h>
32 #include <rtems/score/apimutex.h>
33 #include <rtems/score/percpu.h>
35 #include <rtems/score/wkspace.h>
37 #include <rtems/rtems/dpmemdata.h>
39 #include <rtems/rtems/partdata.h>
41 #include <rtems/rtems/regiondata.h>
42 #include <rtems/rtems/semdata.h>
43 #include <rtems/rtems/tasksdata.h>
44 #include <rtems/rtems/timerdata.h>
45 #include <rtems/posix/key.h>
46 #include <rtems/posix/mqueue.h>
47 #include <rtems/posix/psignal.h>
48 #include <rtems/posix/pthread.h>
49 #include <rtems/posix/semaphore.h>
50 #include <rtems/posix/shm.h>
51 #include <rtems/posix/timer.h>
52 
53 #include <limits.h>
54 
55 #ifdef CONFIGURE_DISABLE_BSP_SETTINGS
56  #undef BSP_DEFAULT_UNIFIED_WORK_AREAS
57  #undef BSP_IDLE_TASK_BODY
58  #undef BSP_IDLE_TASK_STACK_SIZE
59  #undef BSP_INITIAL_EXTENSION
60  #undef BSP_INTERRUPT_STACK_SIZE
61  #undef BSP_MAXIMUM_DEVICES
62  #undef BSP_ZERO_WORKSPACE_AUTOMATICALLY
63  #undef CONFIGURE_BSP_PREREQUISITE_DRIVERS
64  #undef CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
65 #else
66  #include <bsp.h>
67 #endif
68 
69 #ifdef RTEMS_NEWLIB
70  #include <sys/reent.h>
71 #endif
72 
73 #ifdef __cplusplus
74 extern "C" {
75 #endif
76 
77 /*
78  * Internal defines must be prefixed with _CONFIGURE to distinguish them from
79  * user-provided options which use a CONFIGURE prefix.
80  */
81 
110 
111 #if defined(RTEMS_MULTIPROCESSING)
112 
115  extern rtems_multiprocessing_table Multiprocessing_configuration;
116 #endif
117 
122 #ifdef RTEMS_SCHEDSIM
123  #undef RTEMS_NEWLIB
124 #endif
125 
126 #if (defined(RTEMS_NEWLIB) && !defined(CONFIGURE_DISABLE_NEWLIB_REENTRANCY))
127  #define _CONFIGURE_NEWLIB_EXTENSION 1
128 #else
129  #define _CONFIGURE_NEWLIB_EXTENSION 0
130 #endif
131 
132 #ifndef RTEMS_SCHEDSIM
133 #include <rtems/libio_.h>
134 
135 #ifdef CONFIGURE_INIT
136  #ifndef CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
137  RTEMS_SYSINIT_ITEM(
139  RTEMS_SYSINIT_ROOT_FILESYSTEM,
140  RTEMS_SYSINIT_ORDER_MIDDLE
141  );
142  #endif
143 #endif
144 #endif
145 
151 #ifndef CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
152  #define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 3
153 #endif
154 
155 /*
156  * POSIX key count used by the IO library.
157  */
158 #define _CONFIGURE_LIBIO_POSIX_KEYS 1
159 
160 #ifdef CONFIGURE_INIT
162 
167  const uint32_t rtems_libio_number_iops = RTEMS_ARRAY_SIZE(rtems_libio_iops);
168 #endif
169 
170 #ifdef CONFIGURE_SMP_MAXIMUM_PROCESSORS
171  #warning "CONFIGURE_SMP_MAXIMUM_PROCESSORS has been renamed to CONFIGURE_MAXIMUM_PROCESSORS since RTEMS 5.1"
172  #define CONFIGURE_MAXIMUM_PROCESSORS CONFIGURE_SMP_MAXIMUM_PROCESSORS
173 #endif
174 
175 /* Ensure that _CONFIGURE_MAXIMUM_PROCESSORS > 1 only in SMP configurations */
176 #if defined(CONFIGURE_MAXIMUM_PROCESSORS) && defined(RTEMS_SMP)
177  #define _CONFIGURE_MAXIMUM_PROCESSORS CONFIGURE_MAXIMUM_PROCESSORS
178 #else
179  #define _CONFIGURE_MAXIMUM_PROCESSORS 1
180 #endif
181 
182 /*
183  * An internal define to indicate that this is an SMP application
184  * configuration.
185  */
186 #ifdef RTEMS_SMP
187  #if !defined(CONFIGURE_DISABLE_SMP_CONFIGURATION)
188  #define _CONFIGURE_SMP_APPLICATION
189  #elif _CONFIGURE_MAXIMUM_PROCESSORS > 1
190  #error "CONFIGURE_DISABLE_SMP_CONFIGURATION and CONFIGURE_MAXIMUM_PROCESSORS > 1 makes no sense"
191  #endif
192 #endif
193 
194 #ifdef CONFIGURE_SMP_APPLICATION
195  #warning "CONFIGURE_SMP_APPLICATION is obsolete since RTEMS 5.1"
196 #endif
197 
198 /*
199  * This sets up the resources for the FIFOs/pipes.
200  */
201 
205 #if !defined(CONFIGURE_MAXIMUM_FIFOS)
206  #define CONFIGURE_MAXIMUM_FIFOS 0
207 #endif
208 
212 #if !defined(CONFIGURE_MAXIMUM_PIPES)
213  #define CONFIGURE_MAXIMUM_PIPES 0
214 #endif
215 
216 /*
217  * This specifies the number of barriers required for the configured
218  * number of FIFOs and named pipes.
219  */
220 #if CONFIGURE_MAXIMUM_FIFOS > 0 || CONFIGURE_MAXIMUM_PIPES > 0
221  #define _CONFIGURE_BARRIERS_FOR_FIFOS \
222  (2 * (CONFIGURE_MAXIMUM_FIFOS + CONFIGURE_MAXIMUM_PIPES))
223 #else
224  #define _CONFIGURE_BARRIERS_FOR_FIFOS 0
225 #endif
226 
266 #ifdef CONFIGURE_INIT
267 
268  /*
269  * Include all file systems. Do this before checking if the filesystem has
270  * been disabled.
271  */
272  #ifdef CONFIGURE_FILESYSTEM_ALL
273  #define CONFIGURE_FILESYSTEM_IMFS
274  #define CONFIGURE_FILESYSTEM_DEVFS
275  #define CONFIGURE_FILESYSTEM_TFTPFS
276  #define CONFIGURE_FILESYSTEM_FTPFS
277  #define CONFIGURE_FILESYSTEM_NFS
278  #define CONFIGURE_FILESYSTEM_DOSFS
279  #define CONFIGURE_FILESYSTEM_RFS
280  #define CONFIGURE_FILESYSTEM_JFFS2
281  #endif
282 
283  /*
284  * If disabling the file system, give a compile error if the user has
285  * configured other filesystem parameters.
286  */
287  #if defined(CONFIGURE_APPLICATION_DISABLE_FILESYSTEM)
288  #if defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM)
289  #error "Filesystem disabled and a base filesystem configured."
290  #endif
291 
292  #if defined(CONFIGURE_FILESYSTEM_IMFS) || \
293  defined(CONFIGURE_FILESYSTEM_DEVFS) || \
294  defined(CONFIGURE_FILESYSTEM_TFTPFS) || \
295  defined(CONFIGURE_FILESYSTEM_FTPFS) || \
296  defined(CONFIGURE_FILESYSTEM_NFS) || \
297  defined(CONFIGURE_FILESYSTEM_DOSFS) || \
298  defined(CONFIGURE_FILESYSTEM_RFS) || \
299  defined(CONFIGURE_FILESYSTEM_JFFS2)
300  #error "Filesystem disabled and a filesystem configured."
301  #endif
302  #endif
303 
304  /*
305  * If the base filesystem is DEVFS define it else define IMFS.
306  * We will have either DEVFS or IMFS defined after this.
307  */
308  #if !defined(CONFIGURE_APPLICATION_DISABLE_FILESYSTEM)
309  #if defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM)
310  #define CONFIGURE_FILESYSTEM_DEVFS
311  #endif
312  #endif
313 
314 #endif
315 
316 #ifndef RTEMS_SCHEDSIM
317 
320 #include <rtems/imfs.h>
321 
328 #ifndef CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
329  #define CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK \
330  IMFS_MEMFILE_DEFAULT_BYTES_PER_BLOCK
331 #endif
332 
336 #if !defined(CONFIGURE_FILESYSTEM_ENTRY_IMFS) && \
337  defined(CONFIGURE_FILESYSTEM_IMFS)
338  #define CONFIGURE_FILESYSTEM_ENTRY_IMFS \
339  { RTEMS_FILESYSTEM_TYPE_IMFS, IMFS_initialize }
340 #endif
341 #endif
342 
343 #ifdef CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
344  #define CONFIGURE_IMFS_DISABLE_CHMOD
345  #define CONFIGURE_IMFS_DISABLE_CHOWN
346  #define CONFIGURE_IMFS_DISABLE_UTIME
347  #define CONFIGURE_IMFS_DISABLE_LINK
348  #define CONFIGURE_IMFS_DISABLE_SYMLINK
349  #define CONFIGURE_IMFS_DISABLE_READLINK
350  #define CONFIGURE_IMFS_DISABLE_RENAME
351  #define CONFIGURE_IMFS_DISABLE_UNMOUNT
352 #endif
353 
357 #if !defined(CONFIGURE_FILESYSTEM_ENTRY_DEVFS) && \
358  defined(CONFIGURE_FILESYSTEM_DEVFS)
359 #include <rtems/devfs.h>
360  #define CONFIGURE_FILESYSTEM_ENTRY_DEVFS \
361  { RTEMS_FILESYSTEM_TYPE_DEVFS, devFS_initialize }
362 #endif
363 
367 #if !defined(CONFIGURE_FILESYSTEM_ENTRY_FTPFS) && \
368  defined(CONFIGURE_FILESYSTEM_FTPFS)
369  #include <rtems/ftpfs.h>
370  #define CONFIGURE_FILESYSTEM_ENTRY_FTPFS \
371  { RTEMS_FILESYSTEM_TYPE_FTPFS, rtems_ftpfs_initialize }
372 #endif
373 
377 #if !defined(CONFIGURE_FILESYSTEM_ENTRY_TFTPFS) && \
378  defined(CONFIGURE_FILESYSTEM_TFTPFS)
379  #include <rtems/tftp.h>
380  #define CONFIGURE_FILESYSTEM_ENTRY_TFTPFS \
381  { RTEMS_FILESYSTEM_TYPE_TFTPFS, rtems_tftpfs_initialize }
382 #endif
383 
387 #if !defined(CONFIGURE_FILESYSTEM_ENTRY_NFS) && \
388  defined(CONFIGURE_FILESYSTEM_NFS)
389  #include <librtemsNfs.h>
390  #define CONFIGURE_FILESYSTEM_ENTRY_NFS \
391  { RTEMS_FILESYSTEM_TYPE_NFS, rtems_nfs_initialize }
392 #endif
393 
397 #if !defined(CONFIGURE_FILESYSTEM_ENTRY_DOSFS) && \
398  defined(CONFIGURE_FILESYSTEM_DOSFS)
399  #include <rtems/dosfs.h>
400  #define CONFIGURE_FILESYSTEM_ENTRY_DOSFS \
401  { RTEMS_FILESYSTEM_TYPE_DOSFS, rtems_dosfs_initialize }
402 #endif
403 
407 #if !defined(CONFIGURE_FILESYSTEM_ENTRY_RFS) && \
408  defined(CONFIGURE_FILESYSTEM_RFS)
409  #include <rtems/rtems-rfs.h>
410  #define CONFIGURE_FILESYSTEM_ENTRY_RFS \
411  { RTEMS_FILESYSTEM_TYPE_RFS, rtems_rfs_rtems_initialise }
412 #endif
413 
417 #if !defined(CONFIGURE_FILESYSTEM_ENTRY_JFFS2) && \
418  defined(CONFIGURE_FILESYSTEM_JFFS2)
419  #include <rtems/jffs2.h>
420  #define CONFIGURE_FILESYSTEM_ENTRY_JFFS2 \
421  { RTEMS_FILESYSTEM_TYPE_JFFS2, rtems_jffs2_initialize }
422 #endif
423 
424 #ifdef CONFIGURE_INIT
425 
435  #ifdef CONFIGURE_FILESYSTEM_DEVFS
436  #ifndef CONFIGURE_MAXIMUM_DEVICES
437  #if defined(BSP_MAXIMUM_DEVICES)
438  #define CONFIGURE_MAXIMUM_DEVICES BSP_MAXIMUM_DEVICES
439  #else
440  #define CONFIGURE_MAXIMUM_DEVICES 4
441  #endif
442  #endif
443  #include <rtems/devfs.h>
444  #endif
445 
449  #define CONFIGURE_FILESYSTEM_NULL { NULL, NULL }
450 
451 #ifndef RTEMS_SCHEDSIM
452  #if !defined(CONFIGURE_APPLICATION_DISABLE_FILESYSTEM) && \
453  !defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM)
454  int imfs_rq_memfile_bytes_per_block =
456  #endif
457 
462  #ifndef CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
464  #if !defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM)
465  { "/", IMFS_initialize_support },
466  #endif
467  #if defined(CONFIGURE_FILESYSTEM_IMFS) && \
468  defined(CONFIGURE_FILESYSTEM_ENTRY_IMFS)
469  CONFIGURE_FILESYSTEM_ENTRY_IMFS,
470  #endif
471  #if defined(CONFIGURE_FILESYSTEM_DEVFS) && \
472  defined(CONFIGURE_FILESYSTEM_ENTRY_DEVFS)
473  CONFIGURE_FILESYSTEM_ENTRY_DEVFS,
474  #endif
475  #if defined(CONFIGURE_FILESYSTEM_TFTPFS) && \
476  defined(CONFIGURE_FILESYSTEM_ENTRY_TFTPFS)
477  CONFIGURE_FILESYSTEM_ENTRY_TFTPFS,
478  #endif
479  #if defined(CONFIGURE_FILESYSTEM_FTPFS) && \
480  defined(CONFIGURE_FILESYSTEM_ENTRY_FTPFS)
481  CONFIGURE_FILESYSTEM_ENTRY_FTPFS,
482  #endif
483  #if defined(CONFIGURE_FILESYSTEM_NFS) && \
484  defined(CONFIGURE_FILESYSTEM_ENTRY_NFS)
485  CONFIGURE_FILESYSTEM_ENTRY_NFS,
486  #endif
487  #if defined(CONFIGURE_FILESYSTEM_DOSFS) && \
488  defined(CONFIGURE_FILESYSTEM_ENTRY_DOSFS)
489  CONFIGURE_FILESYSTEM_ENTRY_DOSFS,
490  #endif
491  #if defined(CONFIGURE_FILESYSTEM_RFS) && \
492  defined(CONFIGURE_FILESYSTEM_ENTRY_RFS)
493  CONFIGURE_FILESYSTEM_ENTRY_RFS,
494  #endif
495  #if defined(CONFIGURE_FILESYSTEM_JFFS2) && \
496  defined(CONFIGURE_FILESYSTEM_ENTRY_JFFS2)
497  CONFIGURE_FILESYSTEM_ENTRY_JFFS2,
498  #endif
499  CONFIGURE_FILESYSTEM_NULL
500  };
501 
502  #if defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM)
503  static devFS_node devFS_root_filesystem_nodes [CONFIGURE_MAXIMUM_DEVICES];
504  static const devFS_data devFS_root_filesystem_data = {
505  devFS_root_filesystem_nodes,
506  CONFIGURE_MAXIMUM_DEVICES
507  };
508  #else
509  static IMFS_fs_info_t _Configure_IMFS_fs_info;
510 
511  static const rtems_filesystem_operations_table _Configure_IMFS_ops = {
515  #ifdef CONFIGURE_IMFS_DISABLE_LINK
517  #else
518  IMFS_link,
519  #endif
521  #ifdef CONFIGURE_IMFS_DISABLE_MKNOD
523  #else
524  IMFS_mknod,
525  #endif
526  #ifdef CONFIGURE_IMFS_DISABLE_RMNOD
528  #else
529  IMFS_rmnod,
530  #endif
531  #ifdef CONFIGURE_IMFS_DISABLE_CHMOD
533  #else
534  IMFS_fchmod,
535  #endif
536  #ifdef CONFIGURE_IMFS_DISABLE_CHOWN
538  #else
539  IMFS_chown,
540  #endif
543  #ifdef CONFIGURE_IMFS_DISABLE_MOUNT
545  #else
546  IMFS_mount,
547  #endif
548  #ifdef CONFIGURE_IMFS_DISABLE_UNMOUNT
550  #else
551  IMFS_unmount,
552  #endif
554  #ifdef CONFIGURE_IMFS_DISABLE_UTIME
556  #else
557  IMFS_utime,
558  #endif
559  #ifdef CONFIGURE_IMFS_DISABLE_SYMLINK
561  #else
562  IMFS_symlink,
563  #endif
564  #ifdef CONFIGURE_IMFS_DISABLE_READLINK
566  #else
568  #endif
569  #ifdef CONFIGURE_IMFS_DISABLE_RENAME
571  #else
572  IMFS_rename,
573  #endif
575  };
576 
577  static const IMFS_mknod_controls _Configure_IMFS_mknod_controls = {
578  #ifdef CONFIGURE_IMFS_DISABLE_READDIR
579  &IMFS_mknod_control_dir_minimal,
580  #else
581  &IMFS_mknod_control_dir_default,
582  #endif
583  &IMFS_mknod_control_device,
584  #ifdef CONFIGURE_IMFS_DISABLE_MKNOD_FILE
585  &IMFS_mknod_control_enosys,
586  #else
587  &IMFS_mknod_control_memfile,
588  #endif
589  #if CONFIGURE_MAXIMUM_FIFOS > 0 || CONFIGURE_MAXIMUM_PIPES > 0
590  &IMFS_mknod_control_fifo
591  #else
592  &IMFS_mknod_control_enosys
593  #endif
594  };
595 
596  static const IMFS_mount_data _Configure_IMFS_mount_data = {
597  &_Configure_IMFS_fs_info,
598  &_Configure_IMFS_ops,
599  &_Configure_IMFS_mknod_controls
600  };
601  #endif
602 
604  rtems_filesystem_root_configuration = {
605  NULL,
606  NULL,
607  #if defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM)
608  RTEMS_FILESYSTEM_TYPE_DEVFS,
609  #else
610  "/",
611  #endif
612  RTEMS_FILESYSTEM_READ_WRITE,
613  #if defined(CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM)
614  &devFS_root_filesystem_data
615  #else
616  &_Configure_IMFS_mount_data
617  #endif
618  };
619  #endif
620 
621 #endif
622 #endif
623  /* end of file system group */
624 
625 /*
626  * STACK_CHECKER_ON was still available in 4.9 so give a warning for now.
627  */
628 #if defined(STACK_CHECKER_ON)
629  #define CONFIGURE_STACK_CHECKER_ENABLED
630  #warning "STACK_CHECKER_ON deprecated -- use CONFIGURE_STACK_CHECKER_ENABLED"
631 #endif
632 
636 #ifdef CONFIGURE_STACK_CHECKER_ENABLED
637  #define _CONFIGURE_STACK_CHECKER_EXTENSION 1
638 #else
639  #define _CONFIGURE_STACK_CHECKER_EXTENSION 0
640 #endif
641 
672 #ifndef CONFIGURE_MAXIMUM_PRIORITY
673  #define CONFIGURE_MAXIMUM_PRIORITY PRIORITY_DEFAULT_MAXIMUM
674 #endif
675 
710 #ifdef CONFIGURE_SCHEDULER_CONTEXT
711  #warning "CONFIGURE_SCHEDULER_CONTEXT has been renamed to CONFIGURE_SCHEDULER since RTEMS 5.1"
712  #define CONFIGURE_SCHEDULER CONFIGURE_SCHEDULER_CONTEXT
713 #endif
714 
715 #ifdef CONFIGURE_SCHEDULER_CONTROLS
716  #warning "CONFIGURE_SCHEDULER_CONTROLS has been renamed to CONFIGURE_SCHEDULER_TABLE_ENTRIES since RTEMS 5.1"
717  #define CONFIGURE_SCHEDULER_TABLE_ENTRIES CONFIGURE_SCHEDULER_CONTROLS
718 #endif
719 
720 #ifdef CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS
721  #warning "CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS has been renamed to CONFIGURE_SCHEDULER_ASSIGNMENTS since RTEMS 5.1"
722  #define CONFIGURE_SCHEDULER_ASSIGNMENTS CONFIGURE_SMP_SCHEDULER_ASSIGNMENTS
723 #endif
724 
725 #if !defined(CONFIGURE_SCHEDULER_USER) && \
726  !defined(CONFIGURE_SCHEDULER_PRIORITY) && \
727  !defined(CONFIGURE_SCHEDULER_PRIORITY_SMP) && \
728  !defined(CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP) && \
729  !defined(CONFIGURE_SCHEDULER_STRONG_APA) && \
730  !defined(CONFIGURE_SCHEDULER_SIMPLE) && \
731  !defined(CONFIGURE_SCHEDULER_SIMPLE_SMP) && \
732  !defined(CONFIGURE_SCHEDULER_EDF) && \
733  !defined(CONFIGURE_SCHEDULER_EDF_SMP) && \
734  !defined(CONFIGURE_SCHEDULER_CBS)
735  #if defined(RTEMS_SMP) && _CONFIGURE_MAXIMUM_PROCESSORS > 1
736 
740  #define CONFIGURE_SCHEDULER_EDF_SMP
741  #else
742 
746  #define CONFIGURE_SCHEDULER_PRIORITY
747  #endif
748 #endif
749 
750 #include <rtems/scheduler.h>
751 
752 /*
753  * If the Priority Scheduler is selected, then configure for it.
754  */
755 #if defined(CONFIGURE_SCHEDULER_PRIORITY)
756  #if !defined(CONFIGURE_SCHEDULER_NAME)
757 
758  #define CONFIGURE_SCHEDULER_NAME rtems_build_name('U', 'P', 'D', ' ')
759  #endif
760 
761  #if !defined(CONFIGURE_SCHEDULER_TABLE_ENTRIES)
762 
763  #define CONFIGURE_SCHEDULER \
764  RTEMS_SCHEDULER_PRIORITY( \
765  dflt, \
766  CONFIGURE_MAXIMUM_PRIORITY + 1 \
767  )
768 
770  #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
771  RTEMS_SCHEDULER_TABLE_PRIORITY(dflt, CONFIGURE_SCHEDULER_NAME)
772  #endif
773 #endif
774 
775 /*
776  * If the Deterministic Priority SMP Scheduler is selected, then configure for
777  * it.
778  */
779 #if defined(CONFIGURE_SCHEDULER_PRIORITY_SMP)
780  #if !defined(CONFIGURE_SCHEDULER_NAME)
781 
782  #define CONFIGURE_SCHEDULER_NAME rtems_build_name('M', 'P', 'D', ' ')
783  #endif
784 
785  #if !defined(CONFIGURE_SCHEDULER_TABLE_ENTRIES)
786 
787  #define CONFIGURE_SCHEDULER \
788  RTEMS_SCHEDULER_PRIORITY_SMP( \
789  dflt, \
790  CONFIGURE_MAXIMUM_PRIORITY + 1 \
791  )
792 
794  #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
795  RTEMS_SCHEDULER_TABLE_PRIORITY_SMP(dflt, CONFIGURE_SCHEDULER_NAME)
796  #endif
797 #endif
798 
799 /*
800  * If the Deterministic Priority Affinity SMP Scheduler is selected, then configure for
801  * it.
802  */
803 #if defined(CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP)
804  #if !defined(CONFIGURE_SCHEDULER_NAME)
805 
806  #define CONFIGURE_SCHEDULER_NAME rtems_build_name('M', 'P', 'A', ' ')
807  #endif
808 
809  #if !defined(CONFIGURE_SCHEDULER_TABLE_ENTRIES)
810 
811  #define CONFIGURE_SCHEDULER \
812  RTEMS_SCHEDULER_PRIORITY_AFFINITY_SMP( \
813  dflt, \
814  CONFIGURE_MAXIMUM_PRIORITY + 1 \
815  )
816 
818  #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
819  RTEMS_SCHEDULER_TABLE_PRIORITY_AFFINITY_SMP( \
820  dflt, \
821  CONFIGURE_SCHEDULER_NAME \
822  )
823  #endif
824 #endif
825 
826 /*
827  * If the Strong APA Scheduler is selected, then configure for
828  * it.
829  */
830 #if defined(CONFIGURE_SCHEDULER_STRONG_APA)
831  #if !defined(CONFIGURE_SCHEDULER_NAME)
832 
833  #define CONFIGURE_SCHEDULER_NAME rtems_build_name('M', 'A', 'P', 'A')
834  #endif
835 
836  #if !defined(CONFIGURE_SCHEDULER_TABLE_ENTRIES)
837 
838  #define CONFIGURE_SCHEDULER \
839  RTEMS_SCHEDULER_STRONG_APA( \
840  dflt, \
841  CONFIGURE_MAXIMUM_PRIORITY + 1 \
842  )
843 
845  #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
846  RTEMS_SCHEDULER_TABLE_STRONG_APA(dflt, CONFIGURE_SCHEDULER_NAME)
847  #endif
848 #endif
849 
850 /*
851  * If the Simple Priority Scheduler is selected, then configure for it.
852  */
853 #if defined(CONFIGURE_SCHEDULER_SIMPLE)
854  #if !defined(CONFIGURE_SCHEDULER_NAME)
855 
856  #define CONFIGURE_SCHEDULER_NAME rtems_build_name('U', 'P', 'S', ' ')
857  #endif
858 
859  #if !defined(CONFIGURE_SCHEDULER_TABLE_ENTRIES)
860 
861  #define CONFIGURE_SCHEDULER RTEMS_SCHEDULER_SIMPLE(dflt)
862 
864  #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
865  RTEMS_SCHEDULER_TABLE_SIMPLE(dflt, CONFIGURE_SCHEDULER_NAME)
866  #endif
867 #endif
868 
869 /*
870  * If the Simple SMP Priority Scheduler is selected, then configure for it.
871  */
872 #if defined(CONFIGURE_SCHEDULER_SIMPLE_SMP)
873  #if !defined(CONFIGURE_SCHEDULER_NAME)
874 
875  #define CONFIGURE_SCHEDULER_NAME rtems_build_name('M', 'P', 'S', ' ')
876  #endif
877 
878  #if !defined(CONFIGURE_SCHEDULER_TABLE_ENTRIES)
879 
880  #define CONFIGURE_SCHEDULER \
881  RTEMS_SCHEDULER_SIMPLE_SMP(dflt)
882 
884  #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
885  RTEMS_SCHEDULER_TABLE_SIMPLE_SMP(dflt, CONFIGURE_SCHEDULER_NAME)
886  #endif
887 #endif
888 
889 /*
890  * If the EDF Scheduler is selected, then configure for it.
891  */
892 #if defined(CONFIGURE_SCHEDULER_EDF)
893  #if !defined(CONFIGURE_SCHEDULER_NAME)
894 
895  #define CONFIGURE_SCHEDULER_NAME rtems_build_name('U', 'E', 'D', 'F')
896  #endif
897 
898  #if !defined(CONFIGURE_SCHEDULER_TABLE_ENTRIES)
899 
900  #define CONFIGURE_SCHEDULER RTEMS_SCHEDULER_EDF(dflt)
901 
903  #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
904  RTEMS_SCHEDULER_TABLE_EDF(dflt, CONFIGURE_SCHEDULER_NAME)
905  #endif
906 #endif
907 
908 /*
909  * If the EDF SMP Scheduler is selected, then configure for it.
910  */
911 #if defined(CONFIGURE_SCHEDULER_EDF_SMP)
912  #if !defined(CONFIGURE_SCHEDULER_NAME)
913 
914  #define CONFIGURE_SCHEDULER_NAME rtems_build_name('M', 'E', 'D', 'F')
915  #endif
916 
917  #if !defined(CONFIGURE_SCHEDULER_TABLE_ENTRIES)
918 
919  #define CONFIGURE_SCHEDULER \
920  RTEMS_SCHEDULER_EDF_SMP(dflt, _CONFIGURE_MAXIMUM_PROCESSORS)
921 
923  #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
924  RTEMS_SCHEDULER_TABLE_EDF_SMP(dflt, CONFIGURE_SCHEDULER_NAME)
925  #endif
926 #endif
927 
928 /*
929  * If the CBS Scheduler is selected, then configure for it.
930  */
931 #if defined(CONFIGURE_SCHEDULER_CBS)
932  #if !defined(CONFIGURE_SCHEDULER_NAME)
933 
934  #define CONFIGURE_SCHEDULER_NAME rtems_build_name('U', 'C', 'B', 'S')
935  #endif
936 
937  #if !defined(CONFIGURE_SCHEDULER_TABLE_ENTRIES)
938 
939  #define CONFIGURE_SCHEDULER RTEMS_SCHEDULER_CBS(dflt)
940 
942  #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
943  RTEMS_SCHEDULER_TABLE_CBS(dflt, CONFIGURE_SCHEDULER_NAME)
944  #endif
945 
946  #ifndef CONFIGURE_CBS_MAXIMUM_SERVERS
947  #define CONFIGURE_CBS_MAXIMUM_SERVERS CONFIGURE_MAXIMUM_TASKS
948  #endif
949 
950  #ifdef CONFIGURE_INIT
951  const uint32_t _Scheduler_CBS_Maximum_servers =
952  CONFIGURE_CBS_MAXIMUM_SERVERS;
953 
955  _Scheduler_CBS_Server_list[ CONFIGURE_CBS_MAXIMUM_SERVERS ];
956  #endif
957 #endif
958 
959 /*
960  * Set up the scheduler entry points table. The scheduling code uses
961  * this code to know which scheduler is configured by the user.
962  */
963 #ifdef CONFIGURE_INIT
964  #if defined(CONFIGURE_SCHEDULER)
966  #endif
967 
970  };
971 
972  #define _CONFIGURE_SCHEDULER_COUNT RTEMS_ARRAY_SIZE( _Scheduler_Table )
973 
974  #if defined(RTEMS_SMP)
975  const size_t _Scheduler_Count = _CONFIGURE_SCHEDULER_COUNT;
976 
977  const Scheduler_Assignment _Scheduler_Initial_assignments[] = {
978  #if defined(CONFIGURE_SCHEDULER_ASSIGNMENTS)
979  CONFIGURE_SCHEDULER_ASSIGNMENTS
980  #else
981  #define _CONFIGURE_SCHEDULER_ASSIGN \
982  RTEMS_SCHEDULER_ASSIGN( \
983  0, \
984  RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL \
985  )
986  _CONFIGURE_SCHEDULER_ASSIGN
987  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 2
988  , _CONFIGURE_SCHEDULER_ASSIGN
989  #endif
990  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 3
991  , _CONFIGURE_SCHEDULER_ASSIGN
992  #endif
993  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 4
994  , _CONFIGURE_SCHEDULER_ASSIGN
995  #endif
996  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 5
997  , _CONFIGURE_SCHEDULER_ASSIGN
998  #endif
999  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 6
1000  , _CONFIGURE_SCHEDULER_ASSIGN
1001  #endif
1002  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 7
1003  , _CONFIGURE_SCHEDULER_ASSIGN
1004  #endif
1005  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 8
1006  , _CONFIGURE_SCHEDULER_ASSIGN
1007  #endif
1008  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 9
1009  , _CONFIGURE_SCHEDULER_ASSIGN
1010  #endif
1011  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 10
1012  , _CONFIGURE_SCHEDULER_ASSIGN
1013  #endif
1014  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 11
1015  , _CONFIGURE_SCHEDULER_ASSIGN
1016  #endif
1017  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 12
1018  , _CONFIGURE_SCHEDULER_ASSIGN
1019  #endif
1020  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 13
1021  , _CONFIGURE_SCHEDULER_ASSIGN
1022  #endif
1023  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 14
1024  , _CONFIGURE_SCHEDULER_ASSIGN
1025  #endif
1026  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 15
1027  , _CONFIGURE_SCHEDULER_ASSIGN
1028  #endif
1029  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 16
1030  , _CONFIGURE_SCHEDULER_ASSIGN
1031  #endif
1032  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 17
1033  , _CONFIGURE_SCHEDULER_ASSIGN
1034  #endif
1035  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 18
1036  , _CONFIGURE_SCHEDULER_ASSIGN
1037  #endif
1038  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 19
1039  , _CONFIGURE_SCHEDULER_ASSIGN
1040  #endif
1041  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 20
1042  , _CONFIGURE_SCHEDULER_ASSIGN
1043  #endif
1044  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 21
1045  , _CONFIGURE_SCHEDULER_ASSIGN
1046  #endif
1047  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 22
1048  , _CONFIGURE_SCHEDULER_ASSIGN
1049  #endif
1050  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 23
1051  , _CONFIGURE_SCHEDULER_ASSIGN
1052  #endif
1053  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 24
1054  , _CONFIGURE_SCHEDULER_ASSIGN
1055  #endif
1056  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 25
1057  , _CONFIGURE_SCHEDULER_ASSIGN
1058  #endif
1059  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 26
1060  , _CONFIGURE_SCHEDULER_ASSIGN
1061  #endif
1062  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 27
1063  , _CONFIGURE_SCHEDULER_ASSIGN
1064  #endif
1065  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 28
1066  , _CONFIGURE_SCHEDULER_ASSIGN
1067  #endif
1068  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 29
1069  , _CONFIGURE_SCHEDULER_ASSIGN
1070  #endif
1071  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 30
1072  , _CONFIGURE_SCHEDULER_ASSIGN
1073  #endif
1074  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 31
1075  , _CONFIGURE_SCHEDULER_ASSIGN
1076  #endif
1077  #if _CONFIGURE_MAXIMUM_PROCESSORS >= 32
1078  , _CONFIGURE_SCHEDULER_ASSIGN
1079  #endif
1080  #undef _CONFIGURE_SCHEDULER_ASSIGN
1081  #endif
1082  };
1083 
1084  RTEMS_STATIC_ASSERT(
1085  _CONFIGURE_MAXIMUM_PROCESSORS
1086  == RTEMS_ARRAY_SIZE( _Scheduler_Initial_assignments ),
1087  _Scheduler_Initial_assignments
1088  );
1089  #endif
1090 #endif
1091  /* end of Scheduler Configuration */
1092 
1103 /*
1104  * If you said the IDLE task was going to do application initialization
1105  * and didn't override the IDLE body, then something is amiss.
1106  */
1107 #if (defined(CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION) && \
1108  !defined(CONFIGURE_IDLE_TASK_BODY))
1109  #error "CONFIGURE_ERROR: You did not override the IDLE task body."
1110 #endif
1111 
1120 #ifndef CONFIGURE_IDLE_TASK_BODY
1121  #if defined(BSP_IDLE_TASK_BODY)
1122  #define CONFIGURE_IDLE_TASK_BODY BSP_IDLE_TASK_BODY
1123  #else
1124  #define CONFIGURE_IDLE_TASK_BODY _CPU_Thread_Idle_body
1125  #endif
1126 #endif
1127  /* end of IDLE thread configuration */
1128 
1140 #ifndef CONFIGURE_MINIMUM_TASK_STACK_SIZE
1141  #define CONFIGURE_MINIMUM_TASK_STACK_SIZE CPU_STACK_MINIMUM_SIZE
1142 #endif
1143 
1148 #ifndef CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
1149 #define CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE \
1150  (2 * CONFIGURE_MINIMUM_TASK_STACK_SIZE)
1151 #endif
1152 
1159 #ifndef CONFIGURE_IDLE_TASK_STACK_SIZE
1160  #ifdef BSP_IDLE_TASK_STACK_SIZE
1161  #define CONFIGURE_IDLE_TASK_STACK_SIZE BSP_IDLE_TASK_STACK_SIZE
1162  #else
1163  #define CONFIGURE_IDLE_TASK_STACK_SIZE CONFIGURE_MINIMUM_TASK_STACK_SIZE
1164  #endif
1165 #endif
1166 #if CONFIGURE_IDLE_TASK_STACK_SIZE < CONFIGURE_MINIMUM_TASK_STACK_SIZE
1167  #error "CONFIGURE_IDLE_TASK_STACK_SIZE less than CONFIGURE_MINIMUM_TASK_STACK_SIZE"
1168 #endif
1169 
1170 /*
1171  * Interrupt stack configuration.
1172  *
1173  * By default, the interrupt stack will be of minimum size.
1174  * The BSP or application may override this value.
1175  */
1176 
1177 #ifndef CONFIGURE_INTERRUPT_STACK_SIZE
1178  #ifdef BSP_INTERRUPT_STACK_SIZE
1179  #define CONFIGURE_INTERRUPT_STACK_SIZE BSP_INTERRUPT_STACK_SIZE
1180  #else
1181  #define CONFIGURE_INTERRUPT_STACK_SIZE CPU_STACK_MINIMUM_SIZE
1182  #endif
1183 #endif
1184 
1185 #if CONFIGURE_INTERRUPT_STACK_SIZE % CPU_INTERRUPT_STACK_ALIGNMENT != 0
1186  #error "CONFIGURE_INTERRUPT_STACK_SIZE fails to meet the CPU port interrupt stack alignment"
1187 #endif
1188 
1189 #ifdef CONFIGURE_INIT
1191  _ISR_Stack_size,
1192  CONFIGURE_INTERRUPT_STACK_SIZE
1193  );
1194 
1195  char _ISR_Stack_area_begin[
1196  _CONFIGURE_MAXIMUM_PROCESSORS * CONFIGURE_INTERRUPT_STACK_SIZE
1198  RTEMS_SECTION( ".rtemsstack.interrupt.begin" );
1199 
1200  const char _ISR_Stack_area_end[ 0 ]
1201  RTEMS_SECTION( ".rtemsstack.interrupt.end" ) = { };
1202 #endif
1203 
1207 #ifndef CONFIGURE_TASK_STACK_ALLOCATOR_INIT
1208  #define CONFIGURE_TASK_STACK_ALLOCATOR_INIT NULL
1209 #endif
1210 
1211 /*
1212  * Configure the very much optional task stack allocator and deallocator.
1213  */
1214 #if !defined(CONFIGURE_TASK_STACK_ALLOCATOR) \
1215  && !defined(CONFIGURE_TASK_STACK_DEALLOCATOR)
1216 
1219  #define CONFIGURE_TASK_STACK_ALLOCATOR _Workspace_Allocate
1220 
1223  #define CONFIGURE_TASK_STACK_DEALLOCATOR _Workspace_Free
1224 #elif (defined(CONFIGURE_TASK_STACK_ALLOCATOR) \
1225  && !defined(CONFIGURE_TASK_STACK_DEALLOCATOR)) \
1226  || (!defined(CONFIGURE_TASK_STACK_ALLOCATOR) \
1227  && defined(CONFIGURE_TASK_STACK_DEALLOCATOR))
1228  #error "CONFIGURE_TASK_STACK_ALLOCATOR and CONFIGURE_TASK_STACK_DEALLOCATOR must be both defined or both undefined"
1229 #endif
1230  /* end of thread/interrupt stack configuration */
1231 
1241 #ifndef CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
1242  #ifdef BSP_ZERO_WORKSPACE_AUTOMATICALLY
1243  #define CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY \
1244  BSP_ZERO_WORKSPACE_AUTOMATICALLY
1245  #else
1246  #define CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY FALSE
1247  #endif
1248 #endif
1249  /* end of add to group Configuration */
1250 
1258 #include <rtems/malloc.h>
1259 
1260 #ifdef CONFIGURE_INIT
1261 
1267  #ifdef CONFIGURE_UNIFIED_WORK_AREAS
1269  #else
1270  Heap_Control RTEMS_Malloc_Area;
1271  Heap_Control *RTEMS_Malloc_Heap = &RTEMS_Malloc_Area;
1272  #endif
1273 #endif
1274 
1275 #ifdef CONFIGURE_INIT
1276 
1282  const rtems_heap_extend_handler rtems_malloc_extend_handler =
1283  #ifdef CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
1285  #else
1286  rtems_heap_null_extend;
1287  #endif
1288 #endif
1289 
1290 #ifdef CONFIGURE_INIT
1291 
1296  rtems_malloc_dirtier_t rtems_malloc_dirty_helper =
1297  #if defined(CONFIGURE_MALLOC_DIRTY)
1299  #else
1300  NULL;
1301  #endif
1302 #endif
1303  /* end of Malloc Configuration */
1304 
1318 #define _Configure_Zero_or_One(_number) ((_number) != 0 ? 1 : 0)
1319 
1323 #define _Configure_Align_up(_val, _align) \
1324  (((_val) + (_align) - 1) - ((_val) + (_align) - 1) % (_align))
1325 
1326 #define _CONFIGURE_HEAP_MIN_BLOCK_SIZE \
1327  _Configure_Align_up(sizeof(Heap_Block), CPU_HEAP_ALIGNMENT)
1328 
1335 #define _Configure_From_workspace(_size) \
1336  (ssize_t) (_Configure_Zero_or_One(_size) * \
1337  _Configure_Align_up(_size + HEAP_BLOCK_HEADER_SIZE, \
1338  _CONFIGURE_HEAP_MIN_BLOCK_SIZE))
1339 
1345 #ifdef CONFIGURE_TASK_STACK_FROM_ALLOCATOR
1346  #define _Configure_From_stackspace(_stack_size) \
1347  CONFIGURE_TASK_STACK_FROM_ALLOCATOR(_stack_size)
1348 #else
1349  #define _Configure_From_stackspace(_stack_size) \
1350  _Configure_From_workspace(_stack_size)
1351 #endif
1352 
1357 #define _Configure_Max_Objects(_max) \
1358  (_Configure_Zero_or_One(_max) * rtems_resource_maximum_per_allocation(_max))
1359 
1376 #if defined(CONFIGURE_RTEMS_INIT_TASKS_TABLE) && \
1377  !defined(CONFIGURE_HAS_OWN_INIT_TASK_TABLE)
1378 
1383 #ifndef CONFIGURE_INIT_TASK_NAME
1384  #define CONFIGURE_INIT_TASK_NAME rtems_build_name('U', 'I', '1', ' ')
1385 #endif
1386 
1391 #ifndef CONFIGURE_INIT_TASK_STACK_SIZE
1392  #define CONFIGURE_INIT_TASK_STACK_SIZE CONFIGURE_MINIMUM_TASK_STACK_SIZE
1393 #endif
1394 
1399 #ifndef CONFIGURE_INIT_TASK_PRIORITY
1400  #define CONFIGURE_INIT_TASK_PRIORITY 1
1401 #endif
1402 
1407 #ifndef CONFIGURE_INIT_TASK_ATTRIBUTES
1408  #define CONFIGURE_INIT_TASK_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES
1409 #endif
1410 
1415 #ifndef CONFIGURE_INIT_TASK_ENTRY_POINT
1416  #ifdef __cplusplus
1417  extern "C" {
1418  #endif
1420  #ifdef __cplusplus
1421  }
1422  #endif
1423  #define CONFIGURE_INIT_TASK_ENTRY_POINT Init
1424  extern const char* bsp_boot_cmdline;
1425  #define CONFIGURE_INIT_TASK_ARGUMENTS ((rtems_task_argument) &bsp_boot_cmdline)
1426 #endif
1427 
1432 #ifndef CONFIGURE_INIT_TASK_INITIAL_MODES
1433  #ifdef _CONFIGURE_SMP_APPLICATION
1434  #define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_DEFAULT_MODES
1435  #else
1436  #define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_NO_PREEMPT
1437  #endif
1438 #endif
1439 
1444 #ifndef CONFIGURE_INIT_TASK_ARGUMENTS
1445  #define CONFIGURE_INIT_TASK_ARGUMENTS 0
1446 #endif
1447 
1448 #ifdef CONFIGURE_INIT
1449  rtems_initialization_tasks_table Initialization_tasks[] = {
1450  { CONFIGURE_INIT_TASK_NAME,
1451  CONFIGURE_INIT_TASK_STACK_SIZE,
1452  CONFIGURE_INIT_TASK_PRIORITY,
1453  CONFIGURE_INIT_TASK_ATTRIBUTES,
1454  CONFIGURE_INIT_TASK_ENTRY_POINT,
1455  CONFIGURE_INIT_TASK_INITIAL_MODES,
1456  CONFIGURE_INIT_TASK_ARGUMENTS
1457  }
1458  };
1459 #endif
1460 
1464 #define CONFIGURE_INIT_TASK_TABLE Initialization_tasks
1465 
1466 /*
1467  * This is the size of the Initialization Tasks Table generated.
1468  */
1469 #define CONFIGURE_INIT_TASK_TABLE_SIZE \
1470  RTEMS_ARRAY_SIZE(CONFIGURE_INIT_TASK_TABLE)
1471 
1472 #else /* CONFIGURE_RTEMS_INIT_TASKS_TABLE */
1473 #ifdef CONFIGURE_HAS_OWN_INIT_TASK_TABLE
1474 
1475 /*
1476  * The user application is responsible for defining everything
1477  * when CONFIGURE_HAS_OWN_INIT_TABLE is defined.
1478  */
1479 #else /* not using standard or providing own Init Task Table */
1480 
1481 /*
1482  * This is the name of the Initialization Task when none is configured.
1483  */
1484 #define CONFIGURE_INIT_TASK_TABLE NULL
1485 
1486 /*
1487  * This is the size of the Initialization Task when none is configured.
1488  */
1489 #define CONFIGURE_INIT_TASK_TABLE_SIZE 0
1490 
1491 /*
1492  * This is the stack size of the Initialization Task when none is configured.
1493  */
1494 #define CONFIGURE_INIT_TASK_STACK_SIZE 0
1495 
1496 #endif /* CONFIGURE_HAS_OWN_INIT_TASK_TABLE */
1497 
1498 #endif
1499  /* end of Classic API Initialization Tasks Table */
1500 
1517 #define NULL_DRIVER_TABLE_ENTRY \
1518  { NULL, NULL, NULL, NULL, NULL, NULL }
1519 
1520 #if (defined(CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER) && \
1521  defined(CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER)) || \
1522  (defined(CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER) && \
1523  defined(CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER)) || \
1524  (defined(CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER) && \
1525  defined(CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER))
1526 #error "CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER, CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER, and CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER are mutually exclusive"
1527 #endif
1528 
1529 #ifdef CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
1530  #include <rtems/console.h>
1531 #endif
1532 
1533 #ifdef CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
1534  #include <rtems/console.h>
1535 
1536  #ifdef CONFIGURE_INIT
1537  RTEMS_SYSINIT_ITEM(
1539  RTEMS_SYSINIT_DEVICE_DRIVERS,
1540  RTEMS_SYSINIT_ORDER_SECOND
1541  );
1542  #endif
1543 #endif
1544 
1545 #ifdef CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
1546  #include <rtems/console.h>
1547 
1548  #ifdef CONFIGURE_INIT
1549  RTEMS_SYSINIT_ITEM(
1551  RTEMS_SYSINIT_DEVICE_DRIVERS,
1552  RTEMS_SYSINIT_ORDER_SECOND
1553  );
1554  #endif
1555 #endif
1556 
1557 #ifdef CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
1558  #include <rtems/clockdrv.h>
1559 #endif
1560 
1561 #ifdef CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
1562  #include <rtems/btimer.h>
1563 #endif
1564 
1565 #ifdef CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
1566  #include <rtems/rtc.h>
1567 #endif
1568 
1569 #ifdef CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
1570  #include <rtems/watchdogdrv.h>
1571 #endif
1572 
1573 #ifdef CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
1574  #include <rtems/framebuffer.h>
1575 #endif
1576 
1577 #ifdef CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
1578  #include <rtems/devnull.h>
1579 #endif
1580 
1581 #ifdef CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
1582  #include <rtems/devzero.h>
1583 #endif
1584 
1585 #ifdef CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER
1586  /* the ide driver needs the ATA driver */
1587  #ifndef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
1588  #define CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
1589  #endif
1590  #include <libchip/ide_ctrl.h>
1591 #endif
1592 
1593 #ifdef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
1594  #include <libchip/ata.h>
1595 #endif
1596 
1597 #ifndef CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
1598 
1604 #ifndef CONFIGURE_MAXIMUM_DRIVERS
1605  #define CONFIGURE_MAXIMUM_DRIVERS
1606 #endif
1607 
1608 #ifdef CONFIGURE_INIT
1610  _IO_Driver_address_table[ CONFIGURE_MAXIMUM_DRIVERS ] = {
1611  #ifdef CONFIGURE_BSP_PREREQUISITE_DRIVERS
1612  CONFIGURE_BSP_PREREQUISITE_DRIVERS,
1613  #endif
1614  #ifdef CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
1615  CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS,
1616  #endif
1617  #ifdef CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
1619  #endif
1620  #ifdef CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
1621  CLOCK_DRIVER_TABLE_ENTRY,
1622  #endif
1623  #ifdef CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
1625  #endif
1626  #ifdef CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
1628  #endif
1629  #ifdef CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
1630  DEVNULL_DRIVER_TABLE_ENTRY,
1631  #endif
1632  #ifdef CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
1633  DEVZERO_DRIVER_TABLE_ENTRY,
1634  #endif
1635  #ifdef CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER
1636  IDE_CONTROLLER_DRIVER_TABLE_ENTRY,
1637  #endif
1638  #ifdef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
1639  ATA_DRIVER_TABLE_ENTRY,
1640  #endif
1641  #ifdef CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
1643  #endif
1644  #ifdef CONFIGURE_APPLICATION_EXTRA_DRIVERS
1645  CONFIGURE_APPLICATION_EXTRA_DRIVERS,
1646  #endif
1647  #ifdef CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
1649  #elif !defined(CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER) && \
1650  !defined(CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER) && \
1651  !defined(CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER) && \
1652  !defined(CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER) && \
1653  !defined(CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER) && \
1654  !defined(CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER) && \
1655  !defined(CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER) && \
1656  !defined(CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER) && \
1657  !defined(CONFIGURE_APPLICATION_EXTRA_DRIVERS)
1659  #endif
1660  };
1661 
1662  const size_t _IO_Number_of_drivers =
1663  RTEMS_ARRAY_SIZE( _IO_Driver_address_table );
1664 #endif
1665 
1666 #endif /* CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE */
1667 
1668 #ifdef CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
1669  /*
1670  * configure the priority of the ATA driver task
1671  */
1672  #ifndef CONFIGURE_ATA_DRIVER_TASK_PRIORITY
1673  #define CONFIGURE_ATA_DRIVER_TASK_PRIORITY ATA_DRIVER_TASK_DEFAULT_PRIORITY
1674  #endif
1675  #ifdef CONFIGURE_INIT
1676  rtems_task_priority rtems_ata_driver_task_priority
1677  = CONFIGURE_ATA_DRIVER_TASK_PRIORITY;
1678  #endif /* CONFIGURE_INIT */
1679 #endif
1680  /* end of Device Driver Table Configuration */
1681 
1692 #ifdef CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
1693  #include <rtems/bdbuf.h>
1694  /*
1695  * configure the bdbuf cache parameters
1696  */
1697  #ifndef CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
1698  #define CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS \
1699  RTEMS_BDBUF_MAX_READ_AHEAD_BLOCKS_DEFAULT
1700  #endif
1701  #ifndef CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
1702  #define CONFIGURE_BDBUF_MAX_WRITE_BLOCKS \
1703  RTEMS_BDBUF_MAX_WRITE_BLOCKS_DEFAULT
1704  #endif
1705  #ifndef CONFIGURE_SWAPOUT_TASK_PRIORITY
1706  #define CONFIGURE_SWAPOUT_TASK_PRIORITY \
1707  RTEMS_BDBUF_SWAPOUT_TASK_PRIORITY_DEFAULT
1708  #endif
1709  #ifndef CONFIGURE_SWAPOUT_SWAP_PERIOD
1710  #define CONFIGURE_SWAPOUT_SWAP_PERIOD \
1711  RTEMS_BDBUF_SWAPOUT_TASK_SWAP_PERIOD_DEFAULT
1712  #endif
1713  #ifndef CONFIGURE_SWAPOUT_BLOCK_HOLD
1714  #define CONFIGURE_SWAPOUT_BLOCK_HOLD \
1715  RTEMS_BDBUF_SWAPOUT_TASK_BLOCK_HOLD_DEFAULT
1716  #endif
1717  #ifndef CONFIGURE_SWAPOUT_WORKER_TASKS
1718  #define CONFIGURE_SWAPOUT_WORKER_TASKS \
1719  RTEMS_BDBUF_SWAPOUT_WORKER_TASKS_DEFAULT
1720  #endif
1721  #ifndef CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
1722  #define CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY \
1723  RTEMS_BDBUF_SWAPOUT_WORKER_TASK_PRIORITY_DEFAULT
1724  #endif
1725  #ifndef CONFIGURE_BDBUF_TASK_STACK_SIZE
1726  #define CONFIGURE_BDBUF_TASK_STACK_SIZE \
1727  RTEMS_BDBUF_TASK_STACK_SIZE_DEFAULT
1728  #endif
1729  #ifndef CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
1730  #define CONFIGURE_BDBUF_CACHE_MEMORY_SIZE \
1731  RTEMS_BDBUF_CACHE_MEMORY_SIZE_DEFAULT
1732  #endif
1733  #ifndef CONFIGURE_BDBUF_BUFFER_MIN_SIZE
1734  #define CONFIGURE_BDBUF_BUFFER_MIN_SIZE \
1735  RTEMS_BDBUF_BUFFER_MIN_SIZE_DEFAULT
1736  #endif
1737  #ifndef CONFIGURE_BDBUF_BUFFER_MAX_SIZE
1738  #define CONFIGURE_BDBUF_BUFFER_MAX_SIZE \
1739  RTEMS_BDBUF_BUFFER_MAX_SIZE_DEFAULT
1740  #endif
1741  #ifndef CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
1742  #define CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY \
1743  RTEMS_BDBUF_READ_AHEAD_TASK_PRIORITY_DEFAULT
1744  #endif
1745  #ifdef CONFIGURE_INIT
1747  CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS,
1748  CONFIGURE_BDBUF_MAX_WRITE_BLOCKS,
1749  CONFIGURE_SWAPOUT_TASK_PRIORITY,
1750  CONFIGURE_SWAPOUT_SWAP_PERIOD,
1751  CONFIGURE_SWAPOUT_BLOCK_HOLD,
1752  CONFIGURE_SWAPOUT_WORKER_TASKS,
1753  CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY,
1754  CONFIGURE_BDBUF_TASK_STACK_SIZE,
1755  CONFIGURE_BDBUF_CACHE_MEMORY_SIZE,
1756  CONFIGURE_BDBUF_BUFFER_MIN_SIZE,
1757  CONFIGURE_BDBUF_BUFFER_MAX_SIZE,
1758  CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
1759  };
1760  #endif
1761 
1762  #define _CONFIGURE_LIBBLOCK_TASKS \
1763  (1 + CONFIGURE_SWAPOUT_WORKER_TASKS + \
1764  (CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS != 0))
1765 
1766  #define _CONFIGURE_LIBBLOCK_TASK_EXTRA_STACKS \
1767  (_CONFIGURE_LIBBLOCK_TASKS * \
1768  (CONFIGURE_BDBUF_TASK_STACK_SIZE <= CONFIGURE_MINIMUM_TASK_STACK_SIZE ? \
1769  0 : CONFIGURE_BDBUF_TASK_STACK_SIZE - CONFIGURE_MINIMUM_TASK_STACK_SIZE))
1770 
1771  #if defined(CONFIGURE_HAS_OWN_BDBUF_TABLE) || \
1772  defined(CONFIGURE_BDBUF_BUFFER_SIZE) || \
1773  defined(CONFIGURE_BDBUF_BUFFER_COUNT)
1774  #error BDBUF Cache does not use a buffer configuration table. Please remove.
1775  #endif
1776 #else
1777 
1778  #define _CONFIGURE_LIBBLOCK_TASKS 0
1779 
1780  #define _CONFIGURE_LIBBLOCK_TASK_EXTRA_STACKS 0
1781 
1782 #endif /* CONFIGURE_APPLICATION_NEEDS_LIBBLOCK */
1783 
1802 #ifndef CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK
1803  #define CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK 0
1804 #endif
1805 
1806 #if defined(RTEMS_MULTIPROCESSING)
1807  /*
1808  * Default Multiprocessing Configuration Table. The defaults are
1809  * appropriate for most of the RTEMS Multiprocessor Test Suite. Each
1810  * value may be overridden within each test to customize the environment.
1811  */
1812 
1813  #ifdef CONFIGURE_MP_APPLICATION
1814  #define _CONFIGURE_TIMER_FOR_SHARED_MEMORY_DRIVER 1
1815 
1816  #ifndef CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
1817 
1818  #ifndef CONFIGURE_MP_NODE_NUMBER
1819  #define CONFIGURE_MP_NODE_NUMBER NODE_NUMBER
1820  #endif
1821 
1822  #ifndef CONFIGURE_MP_MAXIMUM_NODES
1823  #define CONFIGURE_MP_MAXIMUM_NODES 2
1824  #endif
1825 
1826  #ifndef CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
1827  #define CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS 32
1828  #endif
1829  #define _CONFIGURE_MEMORY_FOR_GLOBAL_OBJECTS(_global_objects) \
1830  _Configure_From_workspace( \
1831  (_global_objects) * sizeof(Objects_MP_Control) \
1832  )
1833 
1834  #ifndef CONFIGURE_MP_MAXIMUM_PROXIES
1835  #define CONFIGURE_MP_MAXIMUM_PROXIES 32
1836  #endif
1837  #define _CONFIGURE_MEMORY_FOR_PROXIES(_proxies) \
1838  _Configure_From_workspace((_proxies) \
1839  * (sizeof(Thread_Proxy_control) \
1840  + sizeof(Thread_queue_Configured_heads)))
1841 
1842  #ifndef CONFIGURE_MP_MPCI_TABLE_POINTER
1843  #include <mpci.h>
1844  #define CONFIGURE_MP_MPCI_TABLE_POINTER &MPCI_table
1845  #endif
1846 
1847  #ifdef CONFIGURE_INIT
1848  rtems_multiprocessing_table Multiprocessing_configuration = {
1849  CONFIGURE_MP_NODE_NUMBER, /* local node number */
1850  CONFIGURE_MP_MAXIMUM_NODES, /* maximum # nodes */
1851  CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS, /* maximum # global objects */
1852  CONFIGURE_MP_MAXIMUM_PROXIES, /* maximum # proxies */
1853  CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK, /* MPCI stack > minimum */
1854  CONFIGURE_MP_MPCI_TABLE_POINTER /* ptr to MPCI config table */
1855  };
1856  #endif
1857 
1858  #define CONFIGURE_MULTIPROCESSING_TABLE &Multiprocessing_configuration
1859 
1860  #define _CONFIGURE_MPCI_RECEIVE_SERVER_COUNT 1
1861 
1862  #endif /* CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE */
1863  #else
1864  #define CONFIGURE_MULTIPROCESSING_TABLE NULL
1865  #define _CONFIGURE_TIMER_FOR_SHARED_MEMORY_DRIVER 0
1866  #define _CONFIGURE_MPCI_RECEIVE_SERVER_COUNT 0
1867  #endif /* CONFIGURE_MP_APPLICATION */
1868 #else
1869  #define _CONFIGURE_TIMER_FOR_SHARED_MEMORY_DRIVER 0
1870  #define _CONFIGURE_MPCI_RECEIVE_SERVER_COUNT 0
1871 #endif /* RTEMS_MULTIPROCESSING */
1872  /* end of Multiprocessing Configuration */
1873 
1878 #if defined(CONFIGURE_UNLIMITED_OBJECTS)
1879  #if !defined(CONFIGURE_UNIFIED_WORK_AREAS) && \
1880  !defined(CONFIGURE_EXECUTIVE_RAM_SIZE) && \
1881  !defined(CONFIGURE_MEMORY_OVERHEAD)
1882  #error "CONFIGURE_UNLIMITED_OBJECTS requires a unified work area, an executive RAM size, or a defined workspace memory overhead"
1883  #endif
1884 
1885  #if !defined(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)
1886 
1890  #define CONFIGURE_UNLIMITED_ALLOCATION_SIZE 8
1891  #endif
1892  #if !defined(CONFIGURE_MAXIMUM_TASKS)
1893  #define CONFIGURE_MAXIMUM_TASKS \
1894  rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)
1895  #endif
1896  #if !defined(CONFIGURE_MAXIMUM_TIMERS)
1897  #define CONFIGURE_MAXIMUM_TIMERS \
1898  rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)
1899  #endif
1900  #if !defined(CONFIGURE_MAXIMUM_SEMAPHORES)
1901  #define CONFIGURE_MAXIMUM_SEMAPHORES \
1902  rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)
1903  #endif
1904  #if !defined(CONFIGURE_MAXIMUM_MESSAGE_QUEUES)
1905  #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES \
1906  rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)
1907  #endif
1908  #if !defined(CONFIGURE_MAXIMUM_PARTITIONS)
1909  #define CONFIGURE_MAXIMUM_PARTITIONS \
1910  rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)
1911  #endif
1912  #if !defined(CONFIGURE_MAXIMUM_REGIONS)
1913  #define CONFIGURE_MAXIMUM_REGIONS \
1914  rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)
1915  #endif
1916  #if !defined(CONFIGURE_MAXIMUM_PORTS)
1917  #define CONFIGURE_MAXIMUM_PORTS \
1918  rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)
1919  #endif
1920  #if !defined(CONFIGURE_MAXIMUM_PERIODS)
1921  #define CONFIGURE_MAXIMUM_PERIODS \
1922  rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)
1923  #endif
1924  #if !defined(CONFIGURE_MAXIMUM_BARRIERS)
1925  #define CONFIGURE_MAXIMUM_BARRIERS \
1926  rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)
1927  #endif
1928  #if !defined(CONFIGURE_MAXIMUM_POSIX_KEYS)
1929  #define CONFIGURE_MAXIMUM_POSIX_KEYS \
1930  rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)
1931  #endif
1932  #if !defined(CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS)
1933  #define CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS \
1934  rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)
1935  #endif
1936  #if !defined(CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES)
1937  #define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES \
1938  rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)
1939  #endif
1940  #if !defined(CONFIGURE_MAXIMUM_POSIX_SEMAPHORES)
1941  #define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES \
1942  rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)
1943  #endif
1944  #if !defined(CONFIGURE_MAXIMUM_POSIX_SHMS)
1945  #define CONFIGURE_MAXIMUM_POSIX_SHMS \
1946  rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)
1947  #endif
1948  #if !defined(CONFIGURE_MAXIMUM_POSIX_THREADS)
1949  #define CONFIGURE_MAXIMUM_POSIX_THREADS \
1950  rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)
1951  #endif
1952 
1953  #ifdef RTEMS_POSIX_API
1954  #if !defined(CONFIGURE_MAXIMUM_POSIX_TIMERS)
1955  #define CONFIGURE_MAXIMUM_POSIX_TIMERS \
1956  rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)
1957  #endif
1958  #endif /* RTEMS_POSIX_API */
1959 #endif /* CONFIGURE_UNLIMITED_OBJECTS */
1960 
1961 
1973 #ifndef CONFIGURE_MAXIMUM_TASKS
1974  #define CONFIGURE_MAXIMUM_TASKS 0
1975 #endif
1976 
1977 /*
1978  * This is calculated to account for the maximum number of Classic API
1979  * tasks used by the application and configured RTEMS capabilities.
1980  */
1981 #define _CONFIGURE_TASKS \
1982  (CONFIGURE_MAXIMUM_TASKS + _CONFIGURE_LIBBLOCK_TASKS)
1983 
1984 #ifndef CONFIGURE_MAXIMUM_TIMERS
1985 
1986  #define CONFIGURE_MAXIMUM_TIMERS 0
1987 #endif
1988 
1989 #define _CONFIGURE_TIMERS \
1990  (CONFIGURE_MAXIMUM_TIMERS + _CONFIGURE_TIMER_FOR_SHARED_MEMORY_DRIVER)
1991 
1992 #ifndef CONFIGURE_MAXIMUM_SEMAPHORES
1993 
1994  #define CONFIGURE_MAXIMUM_SEMAPHORES 0
1995 #endif
1996 
1997 /*
1998  * This macro is calculated to specify the memory required for
1999  * Classic API Semaphores using MRSP. This is only available in
2000  * SMP configurations.
2001  */
2002 #if !defined(RTEMS_SMP) || \
2003  !defined(CONFIGURE_MAXIMUM_MRSP_SEMAPHORES)
2004  #define _CONFIGURE_MEMORY_FOR_MRSP_SEMAPHORES 0
2005 #else
2006  #define _CONFIGURE_MEMORY_FOR_MRSP_SEMAPHORES \
2007  CONFIGURE_MAXIMUM_MRSP_SEMAPHORES * \
2008  _Configure_From_workspace( \
2009  RTEMS_ARRAY_SIZE(_Scheduler_Table) * sizeof(Priority_Control) \
2010  )
2011 #endif
2012 
2013 #ifndef CONFIGURE_MAXIMUM_MESSAGE_QUEUES
2014 
2018  #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 0
2019 #endif
2020 
2021 #ifndef CONFIGURE_MAXIMUM_PARTITIONS
2022 
2026  #define CONFIGURE_MAXIMUM_PARTITIONS 0
2027 #endif
2028 
2029 #ifndef CONFIGURE_MAXIMUM_REGIONS
2030 
2034  #define CONFIGURE_MAXIMUM_REGIONS 0
2035 #endif
2036 
2037 #ifndef CONFIGURE_MAXIMUM_PORTS
2038 
2042  #define CONFIGURE_MAXIMUM_PORTS 0
2043 #endif
2044 
2045 #ifndef CONFIGURE_MAXIMUM_PERIODS
2046 
2050  #define CONFIGURE_MAXIMUM_PERIODS 0
2051 #endif
2052 
2057 #ifndef CONFIGURE_MAXIMUM_BARRIERS
2058  #define CONFIGURE_MAXIMUM_BARRIERS 0
2059 #endif
2060 
2061 /*
2062  * This macro is calculated to specify the number of Classic API
2063  * Barriers required by the application and configured capabilities.
2064  */
2065 #define _CONFIGURE_BARRIERS \
2066  (CONFIGURE_MAXIMUM_BARRIERS + _CONFIGURE_BARRIERS_FOR_FIFOS)
2067 
2068 #ifndef CONFIGURE_MAXIMUM_USER_EXTENSIONS
2069 
2073  #define CONFIGURE_MAXIMUM_USER_EXTENSIONS 0
2074 #endif
2075  /* end of Classic API Configuration */
2077 
2089 #ifndef CONFIGURE_MICROSECONDS_PER_TICK
2090  #define CONFIGURE_MICROSECONDS_PER_TICK \
2091  RTEMS_MILLISECONDS_TO_MICROSECONDS(10)
2092 #endif
2093 
2094 #if 1000000 % CONFIGURE_MICROSECONDS_PER_TICK != 0
2095  #warning "The clock ticks per second is not an integer"
2096 #endif
2097 
2098 #if CONFIGURE_MICROSECONDS_PER_TICK <= 0
2099  #error "The CONFIGURE_MICROSECONDS_PER_TICK must be positive"
2100 #endif
2101 
2102 #define _CONFIGURE_TICKS_PER_SECOND (1000000 / CONFIGURE_MICROSECONDS_PER_TICK)
2103 
2105 #ifndef CONFIGURE_TICKS_PER_TIMESLICE
2106  #define CONFIGURE_TICKS_PER_TIMESLICE 50
2107 #endif
2108  /* end of General Configuration */
2110 
2111 /*
2112  * Initial Extension Set
2113  */
2114 
2115 #ifdef CONFIGURE_INIT
2116 #ifdef CONFIGURE_STACK_CHECKER_ENABLED
2117 #include <rtems/stackchk.h>
2118 #endif
2119 #include <rtems/libcsupport.h>
2120 
2121 #if defined(BSP_INITIAL_EXTENSION) || \
2122  defined(CONFIGURE_INITIAL_EXTENSIONS) || \
2123  defined(CONFIGURE_STACK_CHECKER_ENABLED) || \
2124  (defined(RTEMS_NEWLIB) && !defined(CONFIGURE_DISABLE_NEWLIB_REENTRANCY))
2125  static const rtems_extensions_table Configuration_Initial_Extensions[] = {
2126  #if CONFIGURE_RECORD_PER_PROCESSOR_ITEMS > 0 && \
2127  defined(CONFIGURE_RECORD_EXTENSIONS_ENABLED)
2128  RECORD_EXTENSION,
2129  #endif
2130  #if !defined(CONFIGURE_DISABLE_NEWLIB_REENTRANCY)
2131  RTEMS_NEWLIB_EXTENSION,
2132  #endif
2133  #if defined(CONFIGURE_STACK_CHECKER_ENABLED)
2135  #endif
2136  #if defined(CONFIGURE_INITIAL_EXTENSIONS)
2137  CONFIGURE_INITIAL_EXTENSIONS,
2138  #endif
2139  #if defined(BSP_INITIAL_EXTENSION)
2140  BSP_INITIAL_EXTENSION
2141  #endif
2142  };
2143 
2144  #define _CONFIGURE_INITIAL_EXTENSION_TABLE Configuration_Initial_Extensions
2145  #define _CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS \
2146  RTEMS_ARRAY_SIZE(Configuration_Initial_Extensions)
2147 
2148  RTEMS_SYSINIT_ITEM(
2149  _User_extensions_Handler_initialization,
2150  RTEMS_SYSINIT_INITIAL_EXTENSIONS,
2151  RTEMS_SYSINIT_ORDER_MIDDLE
2152  );
2153 #else
2154  #define _CONFIGURE_INITIAL_EXTENSION_TABLE NULL
2155  #define _CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS 0
2156 #endif
2157 
2158 #if defined(RTEMS_NEWLIB) && !defined(CONFIGURE_DISABLE_NEWLIB_REENTRANCY)
2159 struct _reent *__getreent(void)
2160 {
2162 }
2163 #endif
2164 
2165 #endif
2166 
2181 #ifndef CONFIGURE_MAXIMUM_POSIX_KEYS
2182  #define CONFIGURE_MAXIMUM_POSIX_KEYS 0
2183 #endif
2184 
2185 /*
2186  * This macro is calculated to specify the memory required for
2187  * POSIX API key/value pairs.
2188  */
2189 #ifndef CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS
2190  #define CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS \
2191  (CONFIGURE_MAXIMUM_POSIX_KEYS * \
2192  (CONFIGURE_MAXIMUM_POSIX_THREADS + CONFIGURE_MAXIMUM_TASKS))
2193 #endif
2194 
2195 /*
2196  * This macro is calculated to specify the total number of
2197  * POSIX API keys required by the application and configured
2198  * system capabilities.
2199  */
2200 #define _CONFIGURE_POSIX_KEYS \
2201  (CONFIGURE_MAXIMUM_POSIX_KEYS + _CONFIGURE_LIBIO_POSIX_KEYS)
2202 
2207 #ifndef CONFIGURE_MAXIMUM_POSIX_THREADS
2208  #define CONFIGURE_MAXIMUM_POSIX_THREADS 0
2209 #endif
2210 
2211 /*
2212  * Account for the object control structures plus the name
2213  * of the object to be duplicated.
2214  */
2215 #define _Configure_POSIX_Named_Object_RAM(_number, _size) \
2216  (_Configure_Max_Objects(_number) \
2217  * _Configure_From_workspace(_POSIX_PATH_MAX + 1))
2218 
2223 #ifndef CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
2224  #define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES 0
2225 #endif
2226 
2227 /*
2228  * This macro is calculated to specify the memory required for
2229  * POSIX API message queues.
2230  */
2231 #define _CONFIGURE_MEMORY_FOR_POSIX_MESSAGE_QUEUES(_message_queues) \
2232  _Configure_POSIX_Named_Object_RAM( \
2233  _message_queues, sizeof(POSIX_Message_queue_Control) )
2234 
2239 #ifndef CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
2240  #define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES 0
2241 #endif
2242 
2243 /*
2244  * This macro is calculated to specify the memory required for
2245  * POSIX API semaphores.
2246  */
2247 #define _CONFIGURE_MEMORY_FOR_POSIX_SEMAPHORES(_semaphores) \
2248  _Configure_POSIX_Named_Object_RAM( \
2249  _semaphores, sizeof(POSIX_Semaphore_Control) )
2250 
2254 #ifndef CONFIGURE_MAXIMUM_POSIX_SHMS
2255  #define CONFIGURE_MAXIMUM_POSIX_SHMS 0
2256 #endif
2257 
2258 /*
2259  * This macro is calculated to specify the memory required for
2260  * POSIX API shared memory.
2261  */
2262 #define _CONFIGURE_MEMORY_FOR_POSIX_SHMS(_shms) \
2263  _Configure_POSIX_Named_Object_RAM(_shms, sizeof(POSIX_Shm_Control) )
2264 
2269 #ifndef CONFIGURE_MAXIMUM_POSIX_TIMERS
2270  #define CONFIGURE_MAXIMUM_POSIX_TIMERS 0
2271 #endif
2272 
2273 #if !defined(RTEMS_POSIX_API) && CONFIGURE_MAXIMUM_POSIX_TIMERS != 0
2274  #error "CONFIGURE_MAXIMUM_POSIX_TIMERS must be zero if POSIX API is disabled"
2275 #endif
2276 
2281 #ifndef CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
2282  #define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS 0
2283 #endif
2284 
2285 #if !defined(RTEMS_POSIX_API) && CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS != 0
2286  #error "CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS must be zero if POSIX API is disabled"
2287 #endif
2288 
2289 #if CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS > 0
2290  #define _CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS \
2291  _Configure_From_workspace( (CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS) * \
2292  sizeof( POSIX_signals_Siginfo_node ) )
2293 #else
2294  #define _CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS 0
2295 #endif
2296 
2297 #ifdef CONFIGURE_POSIX_INIT_THREAD_TABLE
2298  #ifndef CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
2299  #ifndef CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
2300  #define CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT POSIX_Init
2301  #endif
2302 
2303  #ifndef CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
2304  #define CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE \
2305  CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
2306  #endif
2307 
2308  #ifdef CONFIGURE_INIT
2309  posix_initialization_threads_table POSIX_Initialization_threads[] = {
2310  { CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT,
2312  };
2313  #endif
2314 
2315  #define CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME \
2316  POSIX_Initialization_threads
2317 
2318  #define CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE \
2319  RTEMS_ARRAY_SIZE(CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME)
2320  #endif /* !CONFIGURE_POSIX_HAS_OWN_INIT_TASK_TABLE */
2321 #else /* !CONFIGURE_POSIX_INIT_THREAD_TABLE */
2322  #define CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME NULL
2323  #define CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE 0
2324 #endif /* CONFIGURE_POSIX_INIT_THREAD_TABLE */
2325 
2330 #ifndef CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
2331  #define CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE 0
2332 #endif
2333  /* end of POSIX API Configuration */
2334 
2344 #ifdef CONFIGURE_GNAT_RTEMS
2345 
2350  #ifndef CONFIGURE_MAXIMUM_ADA_TASKS
2351  #define CONFIGURE_MAXIMUM_ADA_TASKS 20
2352  #endif
2353 
2357  #ifndef CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
2358  #define CONFIGURE_MAXIMUM_FAKE_ADA_TASKS 0
2359  #endif
2360 #else
2361 
2363  #define CONFIGURE_MAXIMUM_ADA_TASKS 0
2364 
2368  #define CONFIGURE_MAXIMUM_FAKE_ADA_TASKS 0
2369 #endif
2370  /* end of GNAT Configuration */
2371 
2381 #ifdef CONFIGURE_ENABLE_GO
2382 
2383  #ifndef CONFIGURE_MAXIMUM_POSIX_THREADS
2384  #define CONFIGURE_MAXIMUM_POSIX_THREADS 1
2385  #endif
2386 
2387  #ifndef CONFIGURE_MAXIMUM_GOROUTINES
2388  #define CONFIGURE_MAXIMUM_GOROUTINES 400
2389  #endif
2390 
2391  #ifndef CONFIGURE_MAXIMUM_GO_CHANNELS
2392  #define CONFIGURE_MAXIMUM_GO_CHANNELS 500
2393  #endif
2394 
2395 #else
2396 
2397  #define CONFIGURE_MAXIMUM_GOROUTINES 0
2398 
2400  #define CONFIGURE_MAXIMUM_GO_CHANNELS 0
2401 #endif
2402  /* end of Go Configuration */
2403 
2408 #ifndef CONFIGURE_EXTRA_TASK_STACKS
2409  #define CONFIGURE_EXTRA_TASK_STACKS 0
2410 #endif
2411 
2415 #define _CONFIGURE_POSIX_THREADS \
2416  (CONFIGURE_MAXIMUM_POSIX_THREADS + \
2417  CONFIGURE_MAXIMUM_ADA_TASKS + \
2418  CONFIGURE_MAXIMUM_GOROUTINES)
2419 
2420 /*
2421  * We must be able to split the free block used for the second last allocation
2422  * into two parts so that we have a free block for the last allocation. See
2423  * _Heap_Block_split().
2424  */
2425 #define _CONFIGURE_HEAP_HANDLER_OVERHEAD \
2426  _Configure_Align_up( HEAP_BLOCK_HEADER_SIZE, CPU_HEAP_ALIGNMENT )
2427 
2432 #define _CONFIGURE_IDLE_TASKS_COUNT _CONFIGURE_MAXIMUM_PROCESSORS
2433 
2434 /*
2435  * Calculate the RAM size based on the maximum number of objects configured.
2436  */
2437 #ifndef CONFIGURE_EXECUTIVE_RAM_SIZE
2438 
2439 /*
2440  * Account for allocating the following per object
2441  * + array of object control structures
2442  * + local pointer table -- pointer per object plus a zero'th
2443  * entry in the local pointer table.
2444  */
2445 #define _CONFIGURE_MEMORY_FOR_TASKS(_tasks, _number_FP_tasks) \
2446  (_Configure_Max_Objects(_number_FP_tasks) \
2447  * _Configure_From_workspace(CONTEXT_FP_SIZE))
2448 
2449 /*
2450  * This defines the amount of memory configured for the multiprocessing
2451  * support required by this application.
2452  */
2453 #ifdef CONFIGURE_MP_APPLICATION
2454  #define _CONFIGURE_MEMORY_FOR_MP \
2455  (_CONFIGURE_MEMORY_FOR_PROXIES(CONFIGURE_MP_MAXIMUM_PROXIES) + \
2456  _CONFIGURE_MEMORY_FOR_GLOBAL_OBJECTS(CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS))
2457 #else
2458  #define _CONFIGURE_MEMORY_FOR_MP 0
2459 #endif
2460 
2466 #define CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(_messages, _size) \
2467  _Configure_From_workspace( \
2468  (_messages) * (_Configure_Align_up(_size, sizeof(uintptr_t)) \
2469  + sizeof(CORE_message_queue_Buffer_control)))
2470 
2471 /*
2472  * This macro is set to the amount of memory required for pending message
2473  * buffers in bytes. It should be constructed by adding together a
2474  * set of values determined by CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE.
2475  */
2476 #ifndef CONFIGURE_MESSAGE_BUFFER_MEMORY
2477  #define CONFIGURE_MESSAGE_BUFFER_MEMORY 0
2478 #endif
2479 
2492 #ifndef CONFIGURE_MEMORY_OVERHEAD
2493  #define CONFIGURE_MEMORY_OVERHEAD 0
2494 #endif
2495 
2500 #if CPU_IDLE_TASK_IS_FP == TRUE
2501  #define _CONFIGURE_MEMORY_FOR_INTERNAL_TASKS \
2502  _CONFIGURE_MEMORY_FOR_TASKS( \
2503  _CONFIGURE_IDLE_TASKS_COUNT + _CONFIGURE_MPCI_RECEIVE_SERVER_COUNT, \
2504  _CONFIGURE_IDLE_TASKS_COUNT + _CONFIGURE_MPCI_RECEIVE_SERVER_COUNT \
2505  )
2506 #else
2507  #define _CONFIGURE_MEMORY_FOR_INTERNAL_TASKS \
2508  _CONFIGURE_MEMORY_FOR_TASKS( \
2509  _CONFIGURE_IDLE_TASKS_COUNT + _CONFIGURE_MPCI_RECEIVE_SERVER_COUNT, \
2510  _CONFIGURE_MPCI_RECEIVE_SERVER_COUNT \
2511  )
2512 #endif
2513 
2517 #define _CONFIGURE_MEMORY_FOR_SYSTEM_OVERHEAD \
2518  _CONFIGURE_MEMORY_FOR_INTERNAL_TASKS
2519 
2524 #define _CONFIGURE_MEMORY_FOR_STATIC_EXTENSIONS \
2525  (_CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS == 0 ? 0 : \
2526  _Configure_From_workspace( \
2527  _CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS \
2528  * sizeof(User_extensions_Switch_control) \
2529  ))
2530 
2536 #define CONFIGURE_EXECUTIVE_RAM_SIZE \
2537 ( \
2538  _CONFIGURE_MEMORY_FOR_SYSTEM_OVERHEAD + \
2539  _CONFIGURE_MEMORY_FOR_TASKS( \
2540  _CONFIGURE_TASKS, _CONFIGURE_TASKS) + \
2541  _CONFIGURE_MEMORY_FOR_TASKS( \
2542  _CONFIGURE_POSIX_THREADS, _CONFIGURE_POSIX_THREADS) + \
2543  _CONFIGURE_MEMORY_FOR_MRSP_SEMAPHORES + \
2544  _CONFIGURE_MEMORY_FOR_POSIX_MESSAGE_QUEUES( \
2545  CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES) + \
2546  _CONFIGURE_MEMORY_FOR_POSIX_SEMAPHORES( \
2547  CONFIGURE_MAXIMUM_POSIX_SEMAPHORES) + \
2548  _CONFIGURE_MEMORY_FOR_POSIX_SHMS( \
2549  CONFIGURE_MAXIMUM_POSIX_SHMS) + \
2550  _CONFIGURE_MEMORY_FOR_POSIX_QUEUED_SIGNALS + \
2551  _CONFIGURE_MEMORY_FOR_STATIC_EXTENSIONS + \
2552  _CONFIGURE_MEMORY_FOR_MP + \
2553  CONFIGURE_MESSAGE_BUFFER_MEMORY + \
2554  (CONFIGURE_MEMORY_OVERHEAD * 1024) + \
2555  _CONFIGURE_HEAP_HANDLER_OVERHEAD \
2556 )
2557 
2558 /*
2559  * Now account for any extra memory that initialization tasks or threads
2560  * may have requested.
2561  */
2562 
2563 /*
2564  * This accounts for any extra memory required by the Classic API
2565  * Initialization Task.
2566  */
2567 #if (CONFIGURE_INIT_TASK_STACK_SIZE > CONFIGURE_MINIMUM_TASK_STACK_SIZE)
2568  #define _CONFIGURE_INITIALIZATION_THREADS_STACKS_CLASSIC_PART \
2569  (CONFIGURE_INIT_TASK_STACK_SIZE - CONFIGURE_MINIMUM_TASK_STACK_SIZE)
2570 #else
2571  #define _CONFIGURE_INITIALIZATION_THREADS_STACKS_CLASSIC_PART 0
2572 #endif
2573 
2574 /*
2575  * This accounts for any extra memory required by the POSIX API
2576  * Initialization Thread.
2577  */
2578 #if (CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE > \
2579  CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE)
2580  #define _CONFIGURE_INITIALIZATION_THREADS_STACKS_POSIX_PART \
2581  (CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE - \
2582  CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE)
2583 #else
2584  #define _CONFIGURE_INITIALIZATION_THREADS_STACKS_POSIX_PART 0
2585 #endif
2586 
2587 /*
2588  * This macro provides a summation of the various initialization task
2589  * and thread stack requirements.
2590  */
2591 #define _CONFIGURE_INITIALIZATION_THREADS_EXTRA_STACKS \
2592  (_CONFIGURE_INITIALIZATION_THREADS_STACKS_CLASSIC_PART + \
2593  _CONFIGURE_INITIALIZATION_THREADS_STACKS_POSIX_PART)
2594 
2595 /*
2596  * This macro is calculated to specify the memory required for
2597  * the Idle tasks(s) stack.
2598  */
2599 #define _CONFIGURE_IDLE_TASKS_STACK \
2600  (_CONFIGURE_IDLE_TASKS_COUNT * \
2601  _Configure_From_stackspace( CONFIGURE_IDLE_TASK_STACK_SIZE ) )
2602 
2603 /*
2604  * This macro is calculated to specify the stack memory required for the MPCI
2605  * task.
2606  */
2607 #define _CONFIGURE_MPCI_RECEIVE_SERVER_STACK \
2608  (_CONFIGURE_MPCI_RECEIVE_SERVER_COUNT * \
2609  _Configure_From_stackspace(CONFIGURE_MINIMUM_TASK_STACK_SIZE))
2610 
2611 /*
2612  * This macro is calculated to specify the memory required for
2613  * the stacks of all tasks.
2614  */
2615 #define _CONFIGURE_TASKS_STACK \
2616  (_Configure_Max_Objects( _CONFIGURE_TASKS ) * \
2617  _Configure_From_stackspace( CONFIGURE_MINIMUM_TASK_STACK_SIZE ) )
2618 
2619 /*
2620  * This macro is calculated to specify the memory required for
2621  * the stacks of all POSIX threads.
2622  */
2623 #define _CONFIGURE_POSIX_THREADS_STACK \
2624  (_Configure_Max_Objects( CONFIGURE_MAXIMUM_POSIX_THREADS ) * \
2625  _Configure_From_stackspace( CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE ) )
2626 
2627 /*
2628  * This macro is calculated to specify the memory required for
2629  * the stacks of all Ada tasks.
2630  */
2631 #define _CONFIGURE_ADA_TASKS_STACK \
2632  (_Configure_Max_Objects( CONFIGURE_MAXIMUM_ADA_TASKS ) * \
2633  _Configure_From_stackspace( CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE ) )
2634 
2635 /*
2636  * This macro is calculated to specify the memory required for
2637  * the stacks of all Go routines.
2638  */
2639 #define _CONFIGURE_GOROUTINES_STACK \
2640  (_Configure_Max_Objects( CONFIGURE_MAXIMUM_GOROUTINES ) * \
2641  _Configure_From_stackspace( CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE ) )
2642 
2643 #else /* CONFIGURE_EXECUTIVE_RAM_SIZE */
2644 
2645 #define _CONFIGURE_IDLE_TASKS_STACK 0
2646 #define _CONFIGURE_MPCI_RECEIVE_SERVER_STACK 0
2647 #define _CONFIGURE_INITIALIZATION_THREADS_EXTRA_STACKS 0
2648 #define _CONFIGURE_TASKS_STACK 0
2649 #define _CONFIGURE_POSIX_THREADS_STACK 0
2650 #define _CONFIGURE_GOROUTINES_STACK 0
2651 #define _CONFIGURE_ADA_TASKS_STACK 0
2652 
2653 #if CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK != 0
2654  #error "CONFIGURE_EXECUTIVE_RAM_SIZE defined with request for CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK"
2655 #endif
2656 
2657 #if CONFIGURE_EXTRA_TASK_STACKS != 0
2658  #error "CONFIGURE_EXECUTIVE_RAM_SIZE defined with request for CONFIGURE_EXTRA_TASK_STACKS"
2659 #endif
2660 
2661 #endif /* CONFIGURE_EXECUTIVE_RAM_SIZE */
2662 
2663 /*
2664  * This macro is calculated to specify the memory required for
2665  * all tasks and threads of all varieties.
2666  */
2667 #define _CONFIGURE_STACK_SPACE_SIZE \
2668  ( \
2669  _CONFIGURE_IDLE_TASKS_STACK + \
2670  _CONFIGURE_MPCI_RECEIVE_SERVER_STACK + \
2671  _CONFIGURE_INITIALIZATION_THREADS_EXTRA_STACKS + \
2672  _CONFIGURE_TASKS_STACK + \
2673  _CONFIGURE_POSIX_THREADS_STACK + \
2674  _CONFIGURE_GOROUTINES_STACK + \
2675  _CONFIGURE_ADA_TASKS_STACK + \
2676  CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK + \
2677  _CONFIGURE_LIBBLOCK_TASK_EXTRA_STACKS + \
2678  CONFIGURE_EXTRA_TASK_STACKS + \
2679  _CONFIGURE_HEAP_HANDLER_OVERHEAD \
2680  )
2681 
2682 #ifndef CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
2683  #define CONFIGURE_MAXIMUM_THREAD_NAME_SIZE 16
2684 #endif
2685 
2686 #ifdef CONFIGURE_INIT
2687  typedef union {
2688  Scheduler_Node Base;
2689  #ifdef CONFIGURE_SCHEDULER_CBS
2690  Scheduler_CBS_Node CBS;
2691  #endif
2692  #ifdef CONFIGURE_SCHEDULER_EDF
2693  Scheduler_EDF_Node EDF;
2694  #endif
2695  #ifdef CONFIGURE_SCHEDULER_EDF_SMP
2696  Scheduler_EDF_SMP_Node EDF_SMP;
2697  #endif
2698  #ifdef CONFIGURE_SCHEDULER_PRIORITY
2699  Scheduler_priority_Node Priority;
2700  #endif
2701  #ifdef CONFIGURE_SCHEDULER_SIMPLE_SMP
2702  Scheduler_SMP_Node Simple_SMP;
2703  #endif
2704  #ifdef CONFIGURE_SCHEDULER_PRIORITY_SMP
2705  Scheduler_priority_SMP_Node Priority_SMP;
2706  #endif
2707  #ifdef CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
2708  Scheduler_priority_affinity_SMP_Node Priority_affinity_SMP;
2709  #endif
2710  #ifdef CONFIGURE_SCHEDULER_STRONG_APA
2711  Scheduler_strong_APA_Node Strong_APA;
2712  #endif
2713  #ifdef CONFIGURE_SCHEDULER_USER_PER_THREAD
2714  CONFIGURE_SCHEDULER_USER_PER_THREAD User;
2715  #endif
2716  } Configuration_Scheduler_node;
2717 
2718  #ifdef RTEMS_SMP
2719  const size_t _Scheduler_Node_size = sizeof( Configuration_Scheduler_node );
2720  #endif
2721 
2722  const size_t _Thread_Maximum_name_size = CONFIGURE_MAXIMUM_THREAD_NAME_SIZE;
2723 
2724  struct Thread_Configured_control {
2725  Thread_Control Control;
2726  #if CONFIGURE_MAXIMUM_USER_EXTENSIONS > 0
2727  void *extensions[ CONFIGURE_MAXIMUM_USER_EXTENSIONS + 1 ];
2728  #endif
2729  Configuration_Scheduler_node Scheduler_nodes[ _CONFIGURE_SCHEDULER_COUNT ];
2730  RTEMS_API_Control API_RTEMS;
2731  #ifdef RTEMS_POSIX_API
2732  POSIX_API_Control API_POSIX;
2733  #endif
2734  #if CONFIGURE_MAXIMUM_THREAD_NAME_SIZE > 1
2735  char name[ CONFIGURE_MAXIMUM_THREAD_NAME_SIZE ];
2736  #endif
2737  #if !defined(RTEMS_SCHEDSIM) \
2738  && defined(RTEMS_NEWLIB) \
2739  && !defined(CONFIGURE_DISABLE_NEWLIB_REENTRANCY)
2740  struct _reent Newlib;
2741  #else
2742  struct { /* Empty */ } Newlib;
2743  #endif
2744  };
2745 
2747  {
2748  offsetof( Thread_Configured_control, Control.Scheduler.nodes ),
2749  offsetof( Thread_Configured_control, Scheduler_nodes )
2750  }, {
2751  offsetof(
2753  Control.API_Extensions[ THREAD_API_RTEMS ]
2754  ),
2755  offsetof( Thread_Configured_control, API_RTEMS )
2756  }, {
2757  offsetof(
2759  Control.libc_reent
2760  ),
2761  offsetof( Thread_Configured_control, Newlib )
2762  }
2763  #if CONFIGURE_MAXIMUM_THREAD_NAME_SIZE > 1
2764  , {
2765  offsetof(
2767  Control.Join_queue.Queue.name
2768  ),
2769  offsetof( Thread_Configured_control, name )
2770  }
2771  #endif
2772  #ifdef RTEMS_POSIX_API
2773  , {
2774  offsetof(
2776  Control.API_Extensions[ THREAD_API_POSIX ]
2777  ),
2778  offsetof( Thread_Configured_control, API_POSIX )
2779  }
2780  #endif
2781  };
2782 
2783  const size_t _Thread_Control_add_on_count =
2784  RTEMS_ARRAY_SIZE( _Thread_Control_add_ons );
2785 
2786  #if defined(RTEMS_SMP)
2788  Thread_queue_Heads Heads;
2789  Thread_queue_Priority_queue Priority[ _CONFIGURE_SCHEDULER_COUNT ];
2790  };
2791 
2792  const size_t _Thread_queue_Heads_size =
2794  #endif
2795 
2796  const uint32_t _Watchdog_Nanoseconds_per_tick =
2797  (uint32_t) 1000 * CONFIGURE_MICROSECONDS_PER_TICK;
2798 
2799  const uint32_t _Watchdog_Ticks_per_second = _CONFIGURE_TICKS_PER_SECOND;
2800 
2802  _CONFIGURE_MPCI_RECEIVE_SERVER_COUNT +
2803  rtems_resource_maximum_per_allocation( _CONFIGURE_TASKS ) +
2804  rtems_resource_maximum_per_allocation( _CONFIGURE_POSIX_THREADS );
2805 
2806  THREAD_INFORMATION_DEFINE(
2807  _Thread,
2808  OBJECTS_INTERNAL_API,
2809  OBJECTS_INTERNAL_THREADS,
2810  _CONFIGURE_IDLE_TASKS_COUNT + _CONFIGURE_MPCI_RECEIVE_SERVER_COUNT
2811  );
2812 
2813  #if _CONFIGURE_BARRIERS > 0
2814  BARRIER_INFORMATION_DEFINE( _CONFIGURE_BARRIERS );
2815  #endif
2816 
2817  #if CONFIGURE_MAXIMUM_MESSAGE_QUEUES > 0
2819  #endif
2820 
2821  #if CONFIGURE_MAXIMUM_PARTITIONS > 0
2823  #endif
2824 
2825  #if CONFIGURE_MAXIMUM_PERIODS > 0
2827  #endif
2828 
2829  #if CONFIGURE_MAXIMUM_PORTS > 0
2831  #endif
2832 
2833  #if CONFIGURE_MAXIMUM_REGIONS > 0
2835  #endif
2836 
2837  #if CONFIGURE_MAXIMUM_SEMAPHORES > 0
2839  #endif
2840 
2841  #if _CONFIGURE_TIMERS > 0
2842  TIMER_INFORMATION_DEFINE( _CONFIGURE_TIMERS );
2843  #endif
2844 
2845  #if _CONFIGURE_TASKS > 0
2846  THREAD_INFORMATION_DEFINE(
2847  _RTEMS_tasks,
2848  OBJECTS_CLASSIC_API,
2849  OBJECTS_RTEMS_TASKS,
2850  _CONFIGURE_TASKS
2851  );
2852  #endif
2853 
2854  #if CONFIGURE_MAXIMUM_USER_EXTENSIONS > 0
2856  #endif
2857 
2862  CONFIGURE_INIT_TASK_TABLE_SIZE,
2863  CONFIGURE_INIT_TASK_TABLE
2864  };
2865 
2866  #if CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS > 0
2868  rtems_resource_maximum_per_allocation(
2869  CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS
2870  )
2871  ];
2872 
2873  const uint32_t _POSIX_Keys_Key_value_pair_maximum =
2874  CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS;
2875  #endif
2876 
2877  #if _CONFIGURE_POSIX_KEYS > 0
2878  POSIX_KEYS_INFORMATION_DEFINE( _CONFIGURE_POSIX_KEYS );
2879  #endif
2880 
2881  #if CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES > 0
2884  );
2885  #endif
2886 
2887  #if CONFIGURE_MAXIMUM_POSIX_SEMAPHORES > 0
2889  #endif
2890 
2891  #if CONFIGURE_MAXIMUM_POSIX_SHMS > 0
2893  #endif
2894 
2895  #if _CONFIGURE_POSIX_THREADS > 0
2896  THREAD_INFORMATION_DEFINE(
2897  _POSIX_Threads,
2898  OBJECTS_POSIX_API,
2899  OBJECTS_POSIX_THREADS,
2901  );
2902  #endif
2903 
2904  #ifdef RTEMS_POSIX_API
2905  #if CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS > 0
2906  const uint32_t _Configuration_POSIX_Maximum_queued_signals =
2908  #endif
2909 
2910  #if CONFIGURE_MAXIMUM_POSIX_TIMERS > 0
2912  #endif
2913  #endif
2914 
2915  const size_t _Configuration_POSIX_Minimum_stack_size =
2917 
2926  uint32_t rtems_minimum_stack_size =
2928 
2933  CONFIGURE_EXECUTIVE_RAM_SIZE, /* required RTEMS workspace */
2934  _CONFIGURE_STACK_SPACE_SIZE, /* required stack space */
2935  CONFIGURE_MAXIMUM_USER_EXTENSIONS, /* maximum dynamic extensions */
2936  CONFIGURE_MICROSECONDS_PER_TICK, /* microseconds per clock tick */
2937  CONFIGURE_TICKS_PER_TIMESLICE, /* ticks per timeslice quantum */
2938  CONFIGURE_IDLE_TASK_BODY, /* user's IDLE task */
2939  CONFIGURE_IDLE_TASK_STACK_SIZE, /* IDLE task stack size */
2940  CONFIGURE_TASK_STACK_ALLOCATOR_INIT, /* stack allocator init */
2941  CONFIGURE_TASK_STACK_ALLOCATOR, /* stack allocator */
2942  CONFIGURE_TASK_STACK_DEALLOCATOR, /* stack deallocator */
2943  CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY, /* true to clear memory */
2944  #ifdef CONFIGURE_UNIFIED_WORK_AREAS /* true for unified work areas */
2945  true,
2946  #else
2947  false,
2948  #endif
2949  #ifdef CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE /* true to avoid
2950  work space for thread stack
2951  allocation */
2952  true,
2953  #else
2954  false,
2955  #endif
2956  #ifdef RTEMS_SMP
2957  #ifdef _CONFIGURE_SMP_APPLICATION
2958  true,
2959  #else
2960  false,
2961  #endif
2962  #endif
2963  _CONFIGURE_NUMBER_OF_INITIAL_EXTENSIONS, /* number of static extensions */
2964  _CONFIGURE_INITIAL_EXTENSION_TABLE, /* pointer to static extensions */
2965  #if defined(RTEMS_MULTIPROCESSING)
2966  CONFIGURE_MULTIPROCESSING_TABLE, /* pointer to MP config table */
2967  #endif
2968  #ifdef RTEMS_SMP
2969  _CONFIGURE_MAXIMUM_PROCESSORS,
2970  #endif
2971  };
2972 
2973  #if CONFIGURE_RECORD_PER_PROCESSOR_ITEMS > 0
2974  #include <rtems/record.h>
2975 
2976  #if (CONFIGURE_RECORD_PER_PROCESSOR_ITEMS & (CONFIGURE_RECORD_PER_PROCESSOR_ITEMS - 1)) != 0
2977  #error "CONFIGURE_RECORD_PER_PROCESSOR_ITEMS must be a power of two"
2978  #endif
2979 
2980  #if CONFIGURE_RECORD_PER_PROCESSOR_ITEMS < 16
2981  #error "CONFIGURE_RECORD_PER_PROCESSOR_ITEMS must be at least 16"
2982  #endif
2983 
2984  const unsigned int _Record_Item_count = CONFIGURE_RECORD_PER_PROCESSOR_ITEMS;
2985 
2986  struct Record_Configured_control {
2987  Record_Control Control;
2988  rtems_record_item Items[ CONFIGURE_RECORD_PER_PROCESSOR_ITEMS ];
2989  };
2990 
2991  PER_CPU_DATA_ITEM( Record_Configured_control, _Record_Per_CPU );
2992 
2993  RTEMS_SYSINIT_ITEM(
2994  _Record_Initialize,
2995  RTEMS_SYSINIT_RECORD,
2996  RTEMS_SYSINIT_ORDER_MIDDLE
2997  );
2998  #endif
2999 #endif
3000 
3001 #if defined(RTEMS_SMP)
3002  /*
3003  * Instantiate the Per CPU information based upon the user configuration.
3004  */
3005  #if defined(CONFIGURE_INIT)
3006  Per_CPU_Control_envelope _Per_CPU_Information[_CONFIGURE_MAXIMUM_PROCESSORS];
3007  #endif
3008 
3009 #endif
3010 
3011 /*
3012  * If the user has configured a set of Classic API Initialization Tasks,
3013  * then we need to install the code that runs that loop.
3014  */
3015 #ifdef CONFIGURE_INIT
3016  #if defined(CONFIGURE_RTEMS_INIT_TASKS_TABLE) || \
3017  defined(CONFIGURE_HAS_OWN_INIT_TASK_TABLE)
3018  RTEMS_SYSINIT_ITEM(
3020  RTEMS_SYSINIT_CLASSIC_USER_TASKS,
3021  RTEMS_SYSINIT_ORDER_MIDDLE
3022  );
3023  #endif
3024 #endif
3025 
3026 /*
3027  * If the user has configured a set of POSIX Initialization Threads,
3028  * then we need to install the code that runs that loop.
3029  */
3030 #ifdef CONFIGURE_INIT
3031  #if defined(CONFIGURE_POSIX_INIT_THREAD_TABLE) || \
3032  defined(CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE)
3034  _Configuration_POSIX_Initialization_threads =
3035  CONFIGURE_POSIX_INIT_THREAD_TABLE_NAME;
3036 
3037  const size_t _Configuration_POSIX_Initialization_thread_count =
3038  CONFIGURE_POSIX_INIT_THREAD_TABLE_SIZE;
3039 
3040  RTEMS_SYSINIT_ITEM(
3042  RTEMS_SYSINIT_POSIX_USER_THREADS,
3043  RTEMS_SYSINIT_ORDER_MIDDLE
3044  );
3045  #endif
3046 #endif
3047 
3048 /*
3049  * Select PCI Configuration Library
3050  */
3051 #ifdef RTEMS_PCI_CONFIG_LIB
3052  #ifdef CONFIGURE_INIT
3053  #define PCI_LIB_NONE 0
3054  #define PCI_LIB_AUTO 1
3055  #define PCI_LIB_STATIC 2
3056  #define PCI_LIB_READ 3
3057  #define PCI_LIB_PERIPHERAL 4
3058  #if CONFIGURE_PCI_LIB == PCI_LIB_AUTO
3059  #define PCI_CFG_AUTO_LIB
3060  #include <pci/cfg.h>
3061  struct pci_bus pci_hb;
3062  #define PCI_LIB_INIT pci_config_auto
3063  #define PCI_LIB_CONFIG pci_config_auto_register
3064  #elif CONFIGURE_PCI_LIB == PCI_LIB_STATIC
3065  #define PCI_CFG_STATIC_LIB
3066  #include <pci/cfg.h>
3067  #define PCI_LIB_INIT pci_config_static
3068  #define PCI_LIB_CONFIG NULL
3069  /* Let user define PCI configuration (struct pci_bus pci_hb) */
3070  #elif CONFIGURE_PCI_LIB == PCI_LIB_READ
3071  #define PCI_CFG_READ_LIB
3072  #include <pci/cfg.h>
3073  #define PCI_LIB_INIT pci_config_read
3074  #define PCI_LIB_CONFIG NULL
3075  struct pci_bus pci_hb;
3076  #elif CONFIGURE_PCI_LIB == PCI_LIB_PERIPHERAL
3077  #define PCI_LIB_INIT pci_config_peripheral
3078  #define PCI_LIB_CONFIG NULL
3079  /* Let user define PCI configuration (struct pci_bus pci_hb) */
3080  #elif CONFIGURE_PCI_LIB == PCI_LIB_NONE
3081  #define PCI_LIB_INIT NULL
3082  #define PCI_LIB_CONFIG NULL
3083  /* No PCI Configuration at all, user can use/debug access routines */
3084  #else
3085  #error NO PCI LIBRARY DEFINED
3086  #endif
3087 
3088  const int pci_config_lib_type = CONFIGURE_PCI_LIB;
3089  int (*pci_config_lib_init)(void) = PCI_LIB_INIT;
3090  void (*pci_config_lib_register)(void *config) = PCI_LIB_CONFIG;
3091  #endif
3092 #endif
3093 
3094 #ifdef __cplusplus
3095 }
3096 #endif
3097 
3098 /******************************************************************
3099  ******************************************************************
3100  ******************************************************************
3101  * CONFIGURATION WARNINGS AND ERROR CHECKING *
3102  ******************************************************************
3103  ******************************************************************
3104  ******************************************************************
3105  */
3106 
3107 /*
3108  * Make sure a task/thread of some sort is configured.
3109  *
3110  * When analyzing RTEMS to find the smallest possible of memory
3111  * that must be allocated, you probably do want to configure 0
3112  * tasks/threads so there is a smaller set of calls to _Workspace_Allocate
3113  * to analyze.
3114  */
3115 #if !defined(CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION)
3116  #if (CONFIGURE_MAXIMUM_TASKS == 0) && \
3117  (CONFIGURE_MAXIMUM_POSIX_THREADS == 0) && \
3118  (CONFIGURE_MAXIMUM_ADA_TASKS == 0) && \
3119  (CONFIGURE_MAXIMUM_GOROUTINES == 0)
3120  #error "CONFIGURATION ERROR: No tasks or threads configured!!"
3121  #endif
3122 #endif
3123 
3124 #ifndef RTEMS_SCHEDSIM
3125 /*
3126  * Make sure at least one of the initialization task/thread
3127  * tables was defined.
3128  */
3129 #if !defined(CONFIGURE_RTEMS_INIT_TASKS_TABLE) && \
3130  !defined(CONFIGURE_POSIX_INIT_THREAD_TABLE) && \
3131  !defined(CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION)
3132 #error "CONFIGURATION ERROR: No initialization tasks or threads configured!!"
3133 #endif
3134 #endif
3135 
3136 /*
3137  * If the user is trying to configure a multiprocessing application and
3138  * RTEMS was not configured and built multiprocessing, then error out.
3139  */
3140 #if defined(CONFIGURE_MP_APPLICATION) && \
3141  !defined(RTEMS_MULTIPROCESSING)
3142 #error "CONFIGURATION ERROR: RTEMS not configured for multiprocessing!!"
3143 #endif
3144 
3145 #if !defined(RTEMS_SCHEDSIM)
3146  #if !defined(CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE)
3147  /*
3148  * You must either explicity include or exclude the clock driver.
3149  * It is such a common newbie error to leave it out. Maybe this
3150  * will put an end to it.
3151  *
3152  * NOTE: If you are using the timer driver, it is considered
3153  * mutually exclusive with the clock driver because the
3154  * drivers are assumed to use the same "timer" hardware
3155  * on many boards.
3156  */
3157  #if !defined(CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER) && \
3158  !defined(CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER) && \
3159  !defined(CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER)
3160  #error "CONFIGURATION ERROR: Do you want the clock driver or not?!?"
3161  #endif
3162 
3163  /*
3164  * Only one of the following three configuration parameters should be
3165  * defined at a time.
3166  */
3167  #if ((defined(CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER) + \
3168  defined(CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER) + \
3169  defined(CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER)) > 1)
3170  #error "CONFIGURATION ERROR: More than one clock/timer driver configuration parameter specified?!?"
3171  #endif
3172  #endif /* !defined(CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE) */
3173 #endif /* !defined(RTEMS_SCHEDSIM) */
3174 
3175 /*
3176  * These names have been obsoleted so make the user application stop compiling
3177  */
3178 #if defined(CONFIGURE_TEST_NEEDS_TIMER_DRIVER) || \
3179  defined(CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER) || \
3180  defined(CONFIGURE_TEST_NEEDS_CLOCK_DRIVER) || \
3181  defined(CONFIGURE_TEST_NEEDS_RTC_DRIVER) || \
3182  defined(CONFIGURE_TEST_NEEDS_STUB_DRIVER)
3183 #error "CONFIGURATION ERROR: CONFIGURE_TEST_XXX constants are obsolete"
3184 #endif
3185 
3186 /*
3187  * Validate the configured maximum priority
3188  */
3189 #if ((CONFIGURE_MAXIMUM_PRIORITY != 3) && \
3190  (CONFIGURE_MAXIMUM_PRIORITY != 7) && \
3191  (CONFIGURE_MAXIMUM_PRIORITY != 15) && \
3192  (CONFIGURE_MAXIMUM_PRIORITY != 31) && \
3193  (CONFIGURE_MAXIMUM_PRIORITY != 63) && \
3194  (CONFIGURE_MAXIMUM_PRIORITY != 127) && \
3195  (CONFIGURE_MAXIMUM_PRIORITY != 255))
3196  #error "Maximum priority is not 1 less than a power of 2 between 4 and 256"
3197 #endif
3198 
3199 #if (CONFIGURE_MAXIMUM_PRIORITY > PRIORITY_DEFAULT_MAXIMUM)
3200  #error "Maximum priority configured higher than supported by target."
3201 #endif
3202 
3203 #ifdef CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
3204  #warning "The CONFIGURE_HAS_OWN_CONFIGURATION_TABLE configuration option is obsolete since RTEMS 5.1"
3205 #endif
3206 
3207 #ifdef CONFIGURE_HAS_OWN_FILESYSTEM_TABLE
3208  #warning "The CONFIGURE_HAS_OWN_FILESYSTEM_TABLE configuration option is obsolete since RTEMS 5.1"
3209 #endif
3210 
3211 #ifdef CONFIGURE_HAS_OWN_MOUNT_TABLE
3212  #warning "The CONFIGURE_HAS_OWN_MOUNT_TABLE configuration option is obsolete since RTEMS 5.1"
3213 #endif
3214 
3215 #ifdef CONFIGURE_NUMBER_OF_TERMIOS_PORTS
3216  #warning "The CONFIGURE_NUMBER_OF_TERMIOS_PORTS configuration option is obsolete since RTEMS 5.1"
3217 #endif
3218 
3219 #ifdef CONFIGURE_MAXIMUM_POSIX_BARRIERS
3220  #warning "The CONFIGURE_MAXIMUM_POSIX_BARRIERS configuration option is obsolete since RTEMS 5.1"
3221 #endif
3222 
3223 #ifdef CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
3224  #warning "The CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES configuration option is obsolete since RTEMS 5.1"
3225 #endif
3226 
3227 #ifdef CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS
3228  #warning "The CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS configuration option is obsolete since RTEMS 5.1"
3229 #endif
3230 
3231 #ifdef CONFIGURE_MAXIMUM_POSIX_MUTEXES
3232  #warning "The CONFIGURE_MAXIMUM_POSIX_MUTEXES configuration option is obsolete since RTEMS 5.1"
3233 #endif
3234 
3235 #ifdef CONFIGURE_MAXIMUM_POSIX_RWLOCKS
3236  #warning "The CONFIGURE_MAXIMUM_POSIX_RWLOCKS configuration option is obsolete since RTEMS 5.1"
3237 #endif
3238 
3239 #ifdef CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
3240  #warning "The CONFIGURE_MAXIMUM_POSIX_SPINLOCKS configuration option is obsolete since RTEMS 5.1"
3241 #endif
3242 
3243 #ifdef CONFIGURE_MAXIMUM_PTYS
3244  #warning "The CONFIGURE_MAXIMUM_PTYS configuration option is obsolete since RTEMS 5.1"
3245 #endif
3246 
3247 #ifdef CONFIGURE_TERMIOS_DISABLED
3248  #warning "The CONFIGURE_TERMIOS_DISABLED configuration option is obsolete since RTEMS 5.1"
3249 #endif
3250 
3251 /*
3252  * POSIX Key pair shouldn't be less than POSIX Key, which is highly
3253  * likely to be error.
3254  */
3255 #if (CONFIGURE_MAXIMUM_POSIX_KEYS != 0) && \
3256  (CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS != 0)
3257  #if (CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS < CONFIGURE_MAXIMUM_POSIX_KEYS)
3258  #error "Fewer POSIX Key pairs than POSIX Key!"
3259  #endif
3260 #endif
3261 
3262 /*
3263  * IMFS block size for in memory files (memfiles) must be a power of
3264  * two between 16 and 512 inclusive.
3265  */
3266 #if ((CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK != 16) && \
3267  (CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK != 32) && \
3268  (CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK != 64) && \
3269  (CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK != 128) && \
3270  (CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK != 256) && \
3271  (CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK != 512))
3272  #error "IMFS Memfile block size must be a power of 2 between 16 and 512"
3273 #endif
3274 
3275 
3276 #endif
3277 /* end of include file */
void _Console_simple_Initialize(void)
Initializes a simple console device.
Definition: consolesimple.c:65
const uint32_t _Watchdog_Nanoseconds_per_tick
The watchdog nanoseconds per tick.
const char * bsp_boot_cmdline
Global pointer to the command line of boot_card().
Definition: bootcard.c:25
Frame Buffer Device Driver for all Boards.
const size_t _Thread_Control_add_on_count
Thread control add-on count.
void rtems_filesystem_initialize(void)
Base File System Initialization.
Definition: base_fs.c:32
int rtems_filesystem_default_utime(const rtems_filesystem_location_info_t *loc, time_t actime, time_t modtime)
Definition: default_utime.c:24
void _Console_simple_task_Initialize(void)
Initializes a simple task console device.
Definition: consolesimpletask.c:190
RFS File system InitializationRTEMS File System.
#define CONFIGURE_IDLE_TASK_BODY
Idle task body configuration.
Definition: confdefs.h:1124
bool rtems_filesystem_default_are_nodes_equal(const rtems_filesystem_location_info_t *a, const rtems_filesystem_location_info_t *b)
Tests if the node access pointer of one location is equal to the node access pointer of the other loc...
Definition: default_are_nodes_equal.c:28
int rtems_filesystem_default_link(const rtems_filesystem_location_info_t *parentloc, const rtems_filesystem_location_info_t *targetloc, const char *name, size_t namelen)
Definition: default_link.c:23
#define POSIX_SHM_INFORMATION_DEFINE(max)
Macro to define the objects information for the POSIX Shared Memory objects.
Definition: shm.h:143
Definition: imfs.h:384
#define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
Definition: confdefs.h:2240
#define CONFIGURE_IDLE_TASK_STACK_SIZE
Idle task stack size configuration.
Definition: confdefs.h:1163
int IMFS_link(const rtems_filesystem_location_info_t *parentloc, const rtems_filesystem_location_info_t *targetloc, const char *name, size_t namelen)
Create a new IMFS link node.
Definition: imfs_link.c:25
#define _CONFIGURE_IDLE_TASKS_COUNT
Definition: confdefs.h:2432
RTEMS /dev/zero Device Driver.
#define REGION_INFORMATION_DEFINE(max)
Macro to define the objects information for the Classic Region objects.
Definition: regiondata.h:63
#define CONFIGURE_MAXIMUM_PORTS
Definition: confdefs.h:2042
Definition: tasksdata.h:41
POSIX_Keys_Key_value_pair _POSIX_Keys_Key_value_pairs[]
The initial set of POSIX key and value pairs.
Definition: keyzerokvp.c:34
#define CONFIGURE_TASK_STACK_ALLOCATOR
Definition: confdefs.h:1219
const char _ISR_Stack_area_end[]
The interrupt stack area end.
Header File for the In-Memory File System.
Scheduler node specialization for EDF schedulers.
Definition: scheduleredf.h:85
const rtems_filesystem_table_t rtems_filesystem_table[]
Static table of file systems.
#define TIMER_INFORMATION_DEFINE(max)
Macro to define the objects information for the Classic Timer objects.
Definition: timerdata.h:74
int rtems_filesystem_default_unmount(rtems_filesystem_mount_table_entry_t *mt_entry)
Definition: default_unmount.c:21
Internal Support for POSIX Shared Memory.
Definition: record.h:45
int IMFS_mount(rtems_filesystem_mount_table_entry_t *mt_entry)
Mount an IMFS.
Definition: imfs_mount.c:26
#define CONFIGURE_MAXIMUM_REGIONS
Definition: confdefs.h:2034
#define CONFIGURE_MAXIMUM_POSIX_TIMERS
Definition: confdefs.h:2270
void rtems_task
Definition: tasks.h:100
#define CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
Definition: confdefs.h:1149
Classic Dual Ported Memory Manager Data Structures.
#define CONFIGURE_MAXIMUM_DRIVERS
Definition: confdefs.h:1605
void IMFS_node_free(const rtems_filesystem_location_info_t *loc)
Free an IMFS node.
Definition: imfs_node.c:90
Classic User Extensions Data Structures.
void rtems_filesystem_default_unlock(const rtems_filesystem_mount_table_entry_t *mt_entry)
Releases the IO library mutex.
Definition: default_lock_and_unlock.c:35
Definition: config.h:46
Thread priority queue.
Definition: threadq.h:319
#define CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
Definition: confdefs.h:1246
#define CONSOLE_DRIVER_TABLE_ENTRY
Definition: console.h:38
#define CONFIGURE_EXECUTIVE_RAM_SIZE
Definition: confdefs.h:2536
Represents POSIX key and value pair.
Definition: key.h:46
Classic Semaphore Manager Data Structures.
File system table entry.
Definition: libio.h:1658
POSIX Threads Private Support.
rtems_api_configuration_table Configuration_RTEMS_API
RTEMS API Configuration Table.
Definition: bdbuf.h:358
ssize_t rtems_filesystem_default_readlink(const rtems_filesystem_location_info_t *loc, char *buf, size_t bufsize)
Definition: default_readlink.c:24
#define CPU_INTERRUPT_STACK_ALIGNMENT
Definition: cpu.h:597
#define DUAL_PORTED_MEMORY_INFORMATION_DEFINE(max)
Macro to define the objects information for the Classic Dual Ported Memory objects.
Definition: dpmemdata.h:63
Definition: thread.h:587
User Extension Handler API.
int rtems_filesystem_default_fchmod(const rtems_filesystem_location_info_t *loc, mode_t mode)
Definition: default_fchmod.c:23
#define CONFIGURE_MICROSECONDS_PER_TICK
Definition: confdefs.h:2090
void * rtems_heap_extend_via_sbrk(Heap_Control *heap, size_t alloc_size)
RTEMS Extend Heap via Sbrk.
Definition: rtems_heap_extend_via_sbrk.c:34
#define RTEMS_STACK_CHECKER_EXTENSION
Stack Checker Extension Set Definition.
Definition: stackchk.h:123
Definition: imfs.h:389
const uint32_t _Scheduler_CBS_Maximum_servers
Internal Information about POSIX Signals.
#define POSIX_TIMER_INFORMATION_DEFINE(max)
Macro to define the objects information for the POSIX Timer objects.
Definition: timer.h:66
Scheduler Configuration API.
Classic Partition Manager Data Structures.
const size_t _Thread_Initial_thread_count
Count of configured threads.
Thread_queue_Heads Thread_queue_Configured_heads
The configured thread queue heads.
Definition: thread.h:958
void IMFS_eval_path(rtems_filesystem_eval_path_context_t *ctx)
IMFS evaluation node support.
Definition: imfs_eval.c:175
#define CONFIGURE_MAXIMUM_SEMAPHORES
Definition: confdefs.h:1994
Definition: io.h:48
struct _reent * libc_reent
Definition: thread.h:841
Definition: percpu.h:530
int IMFS_node_clone(rtems_filesystem_location_info_t *loc)
Clone an IMFS node.
Definition: imfs_node.c:74
#define NULL_DRIVER_TABLE_ENTRY
Definition: confdefs.h:1517
#define WATCHDOG_DRIVER_TABLE_ENTRY
Definition: watchdogdrv.h:30
#define CONFIGURE_SCHEDULER_TABLE_ENTRIES
Definition: confdefs.h:770
#define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
Definition: confdefs.h:2282
Thread queue heads.
Definition: threadq.h:355
Definition: scheduleredfsmp.h:36
#define CONFIGURE_MINIMUM_TASK_STACK_SIZE
Definition: confdefs.h:1141
void _RTEMS_tasks_Initialize_user_tasks_body(void)
_RTEMS_tasks_Initialize_user_tasks_body
Definition: taskinitusers.c:42
Classic Rate Monotonic Scheduler Data Structures.
Definition: config.h:119
#define POSIX_KEYS_INFORMATION_DEFINE(max)
Macro to define the objects information for the POSIX Key objects.
Definition: key.h:119
Definition: thread.h:728
const size_t _Thread_Maximum_name_size
Maximum size of a thread name in characters (including the terminating &#39;\0&#39; character).
RTEMS Benchmark Timer API for all Boards.
#define RTEMS_DEFINE_GLOBAL_SYMBOL(_name, _value)
Defines a global symbol with the specified name and value.
Definition: basedefs.h:331
Definition: pci.h:75
struct rtems_bsdnet_ifconfig * config
Network driver configuration.
void rtems_malloc_dirty_memory(void *start, size_t size)
Dirty Memory Function.
Definition: malloc_dirtier.c:28
char _ISR_Stack_area_begin[]
The interrupt stack area begin.
#define CONFIGURE_MAXIMUM_PARTITIONS
Definition: confdefs.h:2026
Information Related to the RAM Workspace.
Thread control add-on.
Definition: thread.h:887
Console Driver for all Boards.
#define CONFIGURE_MAXIMUM_USER_EXTENSIONS
Definition: confdefs.h:2073
int rtems_filesystem_default_symlink(const rtems_filesystem_location_info_t *parentloc, const char *name, size_t namelen, const char *target)
Definition: default_symlink.c:24
API Mutex Handler API.
void _POSIX_Threads_Initialize_user_threads_body(void)
POSIX threads initialize user threads body.
Definition: pthreadinitthreads.c:34
Classic Input/Output Manager Implementation API.
#define RTEMS_SECTION(_section)
Instructs the compiler to place a specific variable or function in the specified section.
Definition: basedefs.h:142
int IMFS_mknod(const rtems_filesystem_location_info_t *parentloc, const char *name, size_t namelen, mode_t mode, dev_t dev)
Create an IMFS node.
Definition: imfs_mknod.c:43
const uint32_t _Watchdog_Ticks_per_second
The watchdog ticks per second.
Heap_Control _Workspace_Area
Executive workspace control.
Definition: wkspace.c:43
int rtems_filesystem_default_rmnod(const rtems_filesystem_location_info_t *parentloc, const rtems_filesystem_location_info_t *loc)
Definition: default_rmnod.c:24
int IMFS_fchmod(const rtems_filesystem_location_info_t *loc, mode_t mode)
Change the IMFS file mode.
Definition: imfs_fchmod.c:23
Control block used to manage a heap.
Definition: heap.h:255
Scheduler node specialization for SMP schedulers.
Definition: schedulersmp.h:98
Real-Time Clock Driver Interface.
#define PER_CPU_DATA_ITEM(type, item)
Defines a per-CPU item of the specified type.
Definition: percpudata.h:59
Scheduler node specialization for Deterministic Priority schedulers.
Definition: schedulerpriority.h:96
Scheduler_CBS_Server _Scheduler_CBS_Server_list[]
POSIX Message Queues Private Private Support.
int IMFS_chown(const rtems_filesystem_location_info_t *loc, uid_t owner, gid_t group)
Change the owner of IMFS.
Definition: imfs_chown.c:27
Per Device Node Control Structure.
Definition: devfs.h:33
Device Only File System.
int IMFS_symlink(const rtems_filesystem_location_info_t *parentloc, const char *name, size_t namelen, const char *target)
Create a new IMFS symbolic link node.
Definition: imfs_symlink.c:27
uint32_t rtems_minimum_stack_size
Definition: schedulercbs.h:110
#define CONFIGURE_MAXIMUM_POSIX_THREADS
Definition: confdefs.h:2208
#define EXTENSION_INFORMATION_DEFINE(max)
Macro to define the objects information for the Classic Extensions objects.
Definition: extensiondata.h:54
Heap_Control * RTEMS_Malloc_Heap
C program heap control.
#define BARRIER_INFORMATION_DEFINE(max)
Macro to define the objects information for the Classic Barrier objects.
Definition: barrierdata.h:61
Standard C Library Support.
#define CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK
Definition: confdefs.h:1803
Application Interface to FAT Filesystem.
#define CONFIGURE_TASK_STACK_DEALLOCATOR
Definition: confdefs.h:1223
int IMFS_unmount(rtems_filesystem_mount_table_entry_t *mt_entry)
Unmount an IMFS.
Definition: imfs_unmount.c:26
const rtems_bdbuf_config rtems_bdbuf_configuration
#define _Thread_queue_Heads_size
Size of the thread queue heads of a particular application.
Definition: thread.h:969
File system operations table.
Definition: libio.h:472
Private Support Information for POSIX Semaphores.
Definition: libio.h:1861
Definition: thread.h:589
#define _CONFIGURE_POSIX_THREADS
Definition: confdefs.h:2415
LibIO Internal Interface.
int IMFS_rmnod(const rtems_filesystem_location_info_t *parentloc, const rtems_filesystem_location_info_t *loc)
IMFS node removal handler.
Definition: imfs_rmnod.c:26
Classic Message Queue Manager API.
int rtems_filesystem_default_mount(rtems_filesystem_mount_table_entry_t *mt_entry)
Definition: default_mount.c:21
ssize_t IMFS_readlink(const rtems_filesystem_location_info_t *loc, char *buf, size_t bufsize)
Put IMFS symbolic link into buffer.
Definition: imfs_symlink.c:56
#define MESSAGE_QUEUE_INFORMATION_DEFINE(max)
Macro to define the objects information for the Classic Message Queue objects.
Definition: messagedata.h:75
File Transfer Protocol file system (FTP client).
int IMFS_utime(const rtems_filesystem_location_info_t *loc, time_t actime, time_t modtime)
Set IMFS file access and modification times.
Definition: imfs_utime.c:25
#define CONFIGURE_TASK_STACK_ALLOCATOR_INIT
Definition: confdefs.h:1208
#define RATE_MONOTONIC_INFORMATION_DEFINE(max)
Macro to define the objects information for the Classic Rate Monotonic objects.
Definition: ratemondata.h:147
Definition: devfs.h:46
#define RTEMS_ALIGNED(_alignment)
Instructs the compiler to enforce the specified alignment.
Definition: basedefs.h:204
Definition: imfs.h:377
Scheduler node specialization for Strong APA schedulers.
Definition: schedulerstrongapa.h:64
void rtems_filesystem_default_fsunmount(rtems_filesystem_mount_table_entry_t *mt_entry)
Definition: default_fsunmount.c:20
struct Thread_Configured_control Thread_Configured_control
The configured thread control block.
Definition: thread.h:947
Classic Partition Manager Data Structures.
rtems_initialization_tasks_table Initialization_tasks[]
int rtems_filesystem_default_statvfs(const rtems_filesystem_location_info_t *loc, struct statvfs *buf)
Definition: default_statvfs.c:23
POSIX Timers Internal Support.
RTEMS_INLINE_ROUTINE struct _Thread_Control * _Thread_Get_executing(void)
Returns the thread control block of the executing thread.
Definition: percpu.h:784
Classic Barrier Manager Data Structures.
Scheduler control.
Definition: scheduler.h:266
Scheduler node for per-thread data.
Definition: schedulernode.h:65
Scheduler node specialization for Deterministic Priority SMP schedulers.
Definition: schedulerprioritysmp.h:64
#define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
Definition: confdefs.h:2224
const Scheduler_Control _Scheduler_Table[]
Registered schedulers.
#define CONFIGURE_TICKS_PER_TIMESLICE
Definition: confdefs.h:2106
#define POSIX_SEMAPHORE_INFORMATION_DEFINE(max)
Macro to define the objects information for the POSIX Semaphore objects.
Definition: semaphore.h:65
An open file data structure.
Definition: libio.h:1320
CPU_Uint32ptr rtems_task_argument
Definition: tasks.h:105
const rtems_configuration_table Configuration
Clock Driver for all Boards.
#define CONFIGURE_MAXIMUM_POSIX_SHMS
Definition: confdefs.h:2255
User extension table.
Definition: userext.h:232
int rtems_filesystem_default_rename(const rtems_filesystem_location_info_t *oldparentloc, const rtems_filesystem_location_info_t *oldloc, const rtems_filesystem_location_info_t *newparentloc, const char *name, size_t namelen)
Definition: default_rename.c:24
Classic Region Manager Data Structures.
Definition: schedulercbs.h:133
#define CONFIGURE_MAXIMUM_PERIODS
Definition: confdefs.h:2050
#define PARTITION_INFORMATION_DEFINE(max)
Macro to define the objects information for the Classic Partition objects.
Definition: partdata.h:84
#define RTC_DRIVER_TABLE_ENTRY
Definition: rtc.h:43
POSIX Key Private Support.
const uint32_t _POSIX_Keys_Key_value_pair_maximum
The POSIX key and value pairs maximum.
Definition: keyzerokvp.c:36
Definition: tasks.h:120
#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
Definition: confdefs.h:152
int rtems_filesystem_default_mknod(const rtems_filesystem_location_info_t *parentloc, const char *name, size_t namelen, mode_t mode, dev_t dev)
Definition: default_mknod.c:24
const Thread_Control_add_on _Thread_Control_add_ons[]
Thread control add-ons.
#define CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
Definition: confdefs.h:2331
#define POSIX_MESSAGE_QUEUE_INFORMATION_DEFINE(max)
Macro to define the objects information for the POSIX Message Queue objects.
Definition: mqueue.h:80
RTEMS /dev/null Device Driver.
int rtems_filesystem_default_chown(const rtems_filesystem_location_info_t *loc, uid_t owner, gid_t group)
Definition: default_chown.c:23
Definition: config.h:42
void rtems_filesystem_default_lock(const rtems_filesystem_mount_table_entry_t *mt_entry)
Obtains the IO library mutex.
Definition: default_lock_and_unlock.c:28
#define CONFIGURE_SCHEDULER
Definition: confdefs.h:763
Scheduler node specialization for Deterministic Priority Affinity SMP schedulers. ...
Definition: schedulerpriorityaffinitysmp.h:165
#define SEMAPHORE_INFORMATION_DEFINE(max)
Macro to define the objects information for the Classic Semaphore objects.
Definition: semdata.h:123
int IMFS_rename(const rtems_filesystem_location_info_t *oldparentloc, const rtems_filesystem_location_info_t *oldloc, const rtems_filesystem_location_info_t *newparentloc, const char *name, size_t namelen)
Rename the IMFS.
Definition: imfs_rename.c:26
Block Device Buffer Management.
#define FRAME_BUFFER_DRIVER_TABLE_ENTRY
Definition: framebuffer.h:45
#define NULL
Requests a GPIO pin group configuration.
Definition: bestcomm_api.h:77
#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES
Definition: confdefs.h:2018
#define CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
Definition: confdefs.h:329
Classic Tasks Manager Data Structures.
#define _Scheduler_Count
Count of registered schedulers.
Definition: scheduler.h:314
uint32_t rtems_task_priority
Definition: tasks.h:54