summaryrefslogtreecommitdiffstats
path: root/cpukit/include/rtems/sysinit.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/include/rtems/sysinit.h')
-rw-r--r--cpukit/include/rtems/sysinit.h118
1 files changed, 118 insertions, 0 deletions
diff --git a/cpukit/include/rtems/sysinit.h b/cpukit/include/rtems/sysinit.h
new file mode 100644
index 0000000000..535fb98e2c
--- /dev/null
+++ b/cpukit/include/rtems/sysinit.h
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2015 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Dornierstr. 4
+ * 82178 Puchheim
+ * Germany
+ * <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#ifndef _RTEMS_SYSINIT_H
+#define _RTEMS_SYSINIT_H
+
+#include <rtems/linkersets.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*
+ * The value of each module define must consist of exactly six hexadecimal
+ * digits without a 0x-prefix. A 0x-prefix is concatenated with the module and
+ * order values to form a proper integer literal.
+ */
+#define RTEMS_SYSINIT_BSP_WORK_AREAS 000100
+#define RTEMS_SYSINIT_BSP_START 000200
+#define RTEMS_SYSINIT_INITIAL_EXTENSIONS 000300
+#define RTEMS_SYSINIT_MP_EARLY 000301
+#define RTEMS_SYSINIT_DATA_STRUCTURES 000302
+#define RTEMS_SYSINIT_MP 00030e
+#define RTEMS_SYSINIT_USER_EXTENSIONS 000320
+#define RTEMS_SYSINIT_CLASSIC_TASKS 000340
+#define RTEMS_SYSINIT_CLASSIC_TIMER 000341
+#define RTEMS_SYSINIT_CLASSIC_SIGNAL 000342
+#define RTEMS_SYSINIT_CLASSIC_EVENT 000343
+#define RTEMS_SYSINIT_CLASSIC_MESSAGE_QUEUE 000344
+#define RTEMS_SYSINIT_CLASSIC_SEMAPHORE 000345
+#define RTEMS_SYSINIT_CLASSIC_PARTITION 000346
+#define RTEMS_SYSINIT_CLASSIC_REGION 000347
+#define RTEMS_SYSINIT_CLASSIC_DUAL_PORTED_MEMORY 000348
+#define RTEMS_SYSINIT_CLASSIC_RATE_MONOTONIC 000349
+#define RTEMS_SYSINIT_CLASSIC_BARRIER 00034a
+#define RTEMS_SYSINIT_POSIX_SIGNALS 000360
+#define RTEMS_SYSINIT_POSIX_THREADS 000361
+#define RTEMS_SYSINIT_POSIX_MESSAGE_QUEUE 000364
+#define RTEMS_SYSINIT_POSIX_SEMAPHORE 000365
+#define RTEMS_SYSINIT_POSIX_TIMER 000366
+#define RTEMS_SYSINIT_POSIX_SHM 000369
+#define RTEMS_SYSINIT_POSIX_KEYS 00036a
+#define RTEMS_SYSINIT_POSIX_CLEANUP 00036b
+#define RTEMS_SYSINIT_IDLE_THREADS 000380
+#define RTEMS_SYSINIT_LIBIO 000400
+#define RTEMS_SYSINIT_ROOT_FILESYSTEM 000401
+#define RTEMS_SYSINIT_DRVMGR 000500
+#define RTEMS_SYSINIT_MP_SERVER 000501
+#define RTEMS_SYSINIT_BSP_PRE_DRIVERS 000600
+#define RTEMS_SYSINIT_DRVMGR_LEVEL_1 000700
+#define RTEMS_SYSINIT_DEVICE_DRIVERS 000701
+#define RTEMS_SYSINIT_DRVMGR_LEVEL_2 000702
+#define RTEMS_SYSINIT_DRVMGR_LEVEL_3 000703
+#define RTEMS_SYSINIT_DRVMGR_LEVEL_4 000704
+#define RTEMS_SYSINIT_MP_FINALIZE 000705
+#define RTEMS_SYSINIT_CLASSIC_USER_TASKS 000706
+#define RTEMS_SYSINIT_POSIX_USER_THREADS 000707
+#define RTEMS_SYSINIT_STD_FILE_DESCRIPTORS 000800
+#define RTEMS_SYSINIT_LAST ffffff
+
+/*
+ * The value of each order define must consist of exactly two hexadecimal
+ * digits without a 0x-prefix. A 0x-prefix is concatenated with the module and
+ * order values to form a proper integer literal.
+ */
+#define RTEMS_SYSINIT_ORDER_FIRST 00
+#define RTEMS_SYSINIT_ORDER_SECOND 01
+#define RTEMS_SYSINIT_ORDER_THIRD 02
+#define RTEMS_SYSINIT_ORDER_FOURTH 03
+#define RTEMS_SYSINIT_ORDER_FIFTH 04
+#define RTEMS_SYSINIT_ORDER_SIXTH 05
+#define RTEMS_SYSINIT_ORDER_SEVENTH 06
+#define RTEMS_SYSINIT_ORDER_EIGHTH 07
+#define RTEMS_SYSINIT_ORDER_NINETH 08
+#define RTEMS_SYSINIT_ORDER_TENTH 09
+#define RTEMS_SYSINIT_ORDER_MIDDLE 80
+#define RTEMS_SYSINIT_ORDER_LAST ff
+
+typedef void ( *rtems_sysinit_handler )( void );
+
+typedef struct {
+ rtems_sysinit_handler handler;
+} rtems_sysinit_item;
+
+/* The enum helps to detect typos in the module and order parameters */
+#define _RTEMS_SYSINIT_INDEX_ITEM( handler, index ) \
+ enum { _Sysinit_##handler = index }; \
+ RTEMS_LINKER_ROSET_ITEM_ORDERED( \
+ _Sysinit, \
+ rtems_sysinit_item, \
+ handler, \
+ index \
+ ) = { handler }
+
+/* Create index from module and order */
+#define _RTEMS_SYSINIT_ITEM( handler, module, order ) \
+ _RTEMS_SYSINIT_INDEX_ITEM( handler, 0x##module##order )
+
+/* Perform parameter expansion */
+#define RTEMS_SYSINIT_ITEM( handler, module, order ) \
+ _RTEMS_SYSINIT_ITEM( handler, module, order )
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _RTEMS_SYSINIT_H */