Xenomai
3.1
setup.h
1
/*
2
* Copyright (C) 2015 Philippe Gerum <rpm@xenomai.org>.
3
*
4
* This library is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU Lesser General Public
6
* License as published by the Free Software Foundation; either
7
* version 2 of the License, or (at your option) any later version.
8
*
9
* This library is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* Lesser General Public License for more details.
13
14
* You should have received a copy of the GNU Lesser General Public
15
* License along with this library; if not, write to the Free Software
16
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
17
*/
18
#ifndef _BOILERPLATE_SETUP_H
19
#define _BOILERPLATE_SETUP_H
20
21
#include <boilerplate/list.h>
22
#include <boilerplate/wrappers.h>
23
#include <string.h>
24
#include <sched.h>
25
26
struct
base_setup_data {
27
cpu_set_t cpu_affinity;
28
int
no_mlock;
29
int
no_sanity;
30
int
verbosity_level;
31
int
trace_level;
32
const
char
*arg0;
33
};
34
35
struct
option;
36
37
struct
setup_descriptor {
38
const
char
*name;
39
int (*tune)(void);
40
int (*parse_option)(
int
optnum,
const
char
*optarg);
41
void (*help)(void);
42
int (*init)(void);
43
const
struct
option *options;
44
struct
{
45
int
id;
46
int
opt_start;
47
int
opt_end;
48
struct
pvholder next;
49
int
done;
50
} __reserved;
51
};
52
53
/*
54
* We have three pre-defined constructor priorities:
55
*
56
* - One for setup calls (__setup_ctor), which are guaranteed to run
57
* prior to the bootstrap code. You should use setup calls for
58
* implementing initialization hooks which depend on a particular call
59
* order. Each Xenomai interface layer is initialized via a dedicated
60
* setup call.
61
*
62
* - A second priority is assigned to early init calls (__early_ctor),
63
* which are also guaranteed to run prior to the bootstrap
64
* code. Whether such early code runs before OR after any setup code
65
* is __UNSPECIFIED__. By design, such code may not invoke any Xenomai
66
* service, and generally speaking, should have no dependencies on
67
* anything else.
68
*
69
* - The last priority level is used for the bootstrap code
70
* (__bootstrap_ctor), which is guaranteed to run after any
71
* setup/early code, provided such bootstrap code is part of the main
72
* executable.
73
*
74
* The guarantees on the init order don't go beyond what is stated
75
* here, do NOT assume more than this.
76
*/
77
#define __setup_ctor __attribute__ ((constructor(200)))
78
#define __early_ctor __attribute__ ((constructor(210)))
79
#define __bootstrap_ctor __attribute__ ((constructor(220)))
80
81
#define __setup_call(__name, __id) \
82
static __setup_ctor void __declare_ ## __name(void) \
83
{ \
84
__register_setup_call(&(__name), __id); \
85
}
86
87
#define core_setup_call(__name) __setup_call(__name, 0)
88
#define boilerplate_setup_call(__name) __setup_call(__name, 1)
89
#define copperplate_setup_call(__name) __setup_call(__name, 2)
90
#define interface_setup_call(__name) __setup_call(__name, 3)
91
#define post_setup_call(__name) __setup_call(__name, 4)
92
#define user_setup_call(__name) __setup_call(__name, 5)
93
94
#ifdef __cplusplus
95
extern
"C"
{
96
#endif
97
98
void
__register_setup_call(
struct
setup_descriptor *p,
int
id
);
99
100
extern
pid_t __node_id;
101
102
extern
int
__config_done;
103
104
extern
struct
base_setup_data __base_setup_data;
105
106
const
char
*get_program_name(
void
);
107
108
void
__trace_me(
const
char
*fmt, ...);
109
110
#define trace_me(__fmt, __args...) \
111
do { \
112
if (__base_setup_data.trace_level > 0) \
113
__trace_me(__fmt, ##__args); \
114
} while (0)
115
116
#ifdef __cplusplus
117
}
118
#endif
119
120
#endif
/* !_BOILERPLATE_SETUP_H */
include
boilerplate
setup.h
Generated by
1.8.14