summaryrefslogtreecommitdiff
path: root/minix/include/ddekit/initcall.h
blob: e1f6c7b70cacec7e541070cc9296fb56ceae5820 (plain)
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
#ifndef _DDEKIT_INITCALL_H
#define _DDEKIT_INITCALL_H
#include <ddekit/ddekit.h>
#include <ddekit/attribs.h>

typedef void (*ddekit_initcall_t)(void);

struct __ddekit_initcall_s { 
	ddekit_initcall_t func;
	int prio;
	struct __ddekit_initcall_s *next;	
};

void __ddekit_add_initcall(struct __ddekit_initcall_s *dis);

/* Define a function to be a DDEKit initcall. 
 * This is the right place to place Linux' module_init functions & Co.
 */
#define DDEKIT_INITCALL(fn)	DDEKIT_CTOR(fn, 1)

#define DDEKIT_CTOR(fn, prio) \
	 static void __attribute__((used)) __attribute__((constructor))\
	__ddekit_initcall_##fn() { \
	static struct __ddekit_initcall_s dis = {(ddekit_initcall_t)fn, prio, 0}; \
	__ddekit_add_initcall(&dis); }

/* Runs all registered initcalls. */
void ddekit_do_initcalls(void);

#endif