aboutsummaryrefslogtreecommitdiffstats
path: root/include/init.h
blob: 79e60f1bedbadf61c80084559e3262a51a7c162a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef __INIT_H
#define __INIT_H

typedef void (*initcall_t)(void);
typedef initcall_t initcall_entry_t;

#define __define_initcall(fn, id) \
    static initcall_t __initcall_##fn##id \
    __attribute__((used)) \
    __attribute__((section(".initcall" #id ".init"))) = fn

#define l1_initcall(fn) __define_initcall(fn, 1)
#define l2_initcall(fn) __define_initcall(fn, 2)
#define l3_initcall(fn) __define_initcall(fn, 3)
#define l4_initcall(fn) __define_initcall(fn, 4)
#define l5_initcall(fn) __define_initcall(fn, 5)

static inline initcall_t initcall_from_entry(initcall_entry_t *entry)
{
    return *entry;
}

#endif