1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
/*
* Copyright (c) 2015, 2020 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_RECORD 000100
#define RTEMS_SYSINIT_BSP_EARLY 000140
#define RTEMS_SYSINIT_MEMORY 000180
#define RTEMS_SYSINIT_DIRTY_MEMORY 0001c0
#define RTEMS_SYSINIT_ZERO_MEMORY 0001e0
#define RTEMS_SYSINIT_ISR_STACK 000200
#define RTEMS_SYSINIT_PER_CPU_DATA 000220
#define RTEMS_SYSINIT_SBRK 000240
#define RTEMS_SYSINIT_STACK_ALLOCATOR 000250
#define RTEMS_SYSINIT_WORKSPACE 000260
#define RTEMS_SYSINIT_MALLOC 000280
#define RTEMS_SYSINIT_BSP_START 000300
#define RTEMS_SYSINIT_CPU_COUNTER 000400
#define RTEMS_SYSINIT_TARGET_HASH 000480
#define RTEMS_SYSINIT_INITIAL_EXTENSIONS 000500
#define RTEMS_SYSINIT_MP_EARLY 000600
#define RTEMS_SYSINIT_DATA_STRUCTURES 000700
#define RTEMS_SYSINIT_SCHEDULER 000780
#define RTEMS_SYSINIT_MP 000800
#define RTEMS_SYSINIT_USER_EXTENSIONS 000900
#define RTEMS_SYSINIT_CLASSIC_TASKS 000a00
#define RTEMS_SYSINIT_CLASSIC_TASKS_MP 000a80
#define RTEMS_SYSINIT_CLASSIC_TIMER 000b00
#define RTEMS_SYSINIT_CLASSIC_SIGNAL_MP 000c00
#define RTEMS_SYSINIT_CLASSIC_EVENT_MP 000d00
#define RTEMS_SYSINIT_CLASSIC_MESSAGE_QUEUE 000e00
#define RTEMS_SYSINIT_CLASSIC_MESSAGE_QUEUE_MP 000e80
#define RTEMS_SYSINIT_CLASSIC_SEMAPHORE 000f00
#define RTEMS_SYSINIT_CLASSIC_SEMAPHORE_MP 000f80
#define RTEMS_SYSINIT_CLASSIC_PARTITION 001000
#define RTEMS_SYSINIT_CLASSIC_PARTITION_MP 001080
#define RTEMS_SYSINIT_CLASSIC_REGION 001100
#define RTEMS_SYSINIT_CLASSIC_DUAL_PORTED_MEMORY 001200
#define RTEMS_SYSINIT_CLASSIC_RATE_MONOTONIC 001300
#define RTEMS_SYSINIT_CLASSIC_BARRIER 001400
#define RTEMS_SYSINIT_POSIX_SIGNALS 001500
#define RTEMS_SYSINIT_POSIX_THREADS 001600
#define RTEMS_SYSINIT_POSIX_MESSAGE_QUEUE 001700
#define RTEMS_SYSINIT_POSIX_SEMAPHORE 001800
#define RTEMS_SYSINIT_POSIX_TIMER 001900
#define RTEMS_SYSINIT_POSIX_SHM 001a00
#define RTEMS_SYSINIT_POSIX_KEYS 001b00
#define RTEMS_SYSINIT_POSIX_CLEANUP 001c00
#define RTEMS_SYSINIT_IDLE_THREADS 001d00
#define RTEMS_SYSINIT_LIBIO 001e00
#define RTEMS_SYSINIT_USER_ENVIRONMENT 001e80
#define RTEMS_SYSINIT_ROOT_FILESYSTEM 001f00
#define RTEMS_SYSINIT_DRVMGR 002000
#define RTEMS_SYSINIT_MP_SERVER 002100
#define RTEMS_SYSINIT_BSP_PRE_DRIVERS 002200
#define RTEMS_SYSINIT_DRVMGR_LEVEL_1 002300
#define RTEMS_SYSINIT_DEVICE_DRIVERS 002400
#define RTEMS_SYSINIT_DRVMGR_LEVEL_2 002500
#define RTEMS_SYSINIT_DRVMGR_LEVEL_3 002600
#define RTEMS_SYSINIT_DRVMGR_LEVEL_4 002700
#define RTEMS_SYSINIT_MP_FINALIZE 002800
#define RTEMS_SYSINIT_CLASSIC_USER_TASKS 002900
#define RTEMS_SYSINIT_POSIX_USER_THREADS 002a00
#define RTEMS_SYSINIT_STD_FILE_DESCRIPTORS 002b00
#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_BUT_9 f6
#define RTEMS_SYSINIT_ORDER_LAST_BUT_8 f7
#define RTEMS_SYSINIT_ORDER_LAST_BUT_7 f8
#define RTEMS_SYSINIT_ORDER_LAST_BUT_6 f9
#define RTEMS_SYSINIT_ORDER_LAST_BUT_5 fa
#define RTEMS_SYSINIT_ORDER_LAST_BUT_4 fb
#define RTEMS_SYSINIT_ORDER_LAST_BUT_3 fc
#define RTEMS_SYSINIT_ORDER_LAST_BUT_2 fd
#define RTEMS_SYSINIT_ORDER_LAST_BUT_1 fe
#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 )
/**
* @brief System initialization handler to enable a verbose system
* initialization.
*/
void _Sysinit_Verbose( void );
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _RTEMS_SYSINIT_H */
|