xref: /minix3/minix/usr.bin/trace/type.h (revision b58e161ccb9bcc2008a44da1b8ee01a0a6f2990e)
1521fa314SDavid van Moolenbroek 
2*b58e161cSDavid van Moolenbroek #define COUNT(s) (__arraycount(s))
3521fa314SDavid van Moolenbroek 
4521fa314SDavid van Moolenbroek struct call_handler {
5521fa314SDavid van Moolenbroek 	const char *name;
6521fa314SDavid van Moolenbroek 	const char *(*namefunc)(const message *m_out);
7521fa314SDavid van Moolenbroek 	int (*outfunc)(struct trace_proc *proc, const message *m_out);
8521fa314SDavid van Moolenbroek 	void (*infunc)(struct trace_proc *proc, const message *m_out,
9521fa314SDavid van Moolenbroek 	    const message *m_in, int failed);
10521fa314SDavid van Moolenbroek };
11521fa314SDavid van Moolenbroek #define HANDLER(n,o,i) { .name = n, .outfunc = o, .infunc = i }
12521fa314SDavid van Moolenbroek #define HANDLER_NAME(n,o,i) { .namefunc = n, .outfunc = o, .infunc = i }
13521fa314SDavid van Moolenbroek 
14521fa314SDavid van Moolenbroek struct calls {
15521fa314SDavid van Moolenbroek 	endpoint_t endpt;
16521fa314SDavid van Moolenbroek 	unsigned int base;
17521fa314SDavid van Moolenbroek 	const struct call_handler *map;
18521fa314SDavid van Moolenbroek 	unsigned int count;
19521fa314SDavid van Moolenbroek };
20521fa314SDavid van Moolenbroek 
21521fa314SDavid van Moolenbroek struct flags {
22521fa314SDavid van Moolenbroek 	unsigned int mask;
23521fa314SDavid van Moolenbroek 	unsigned int value;
24521fa314SDavid van Moolenbroek 	const char *name;
25521fa314SDavid van Moolenbroek };
26521fa314SDavid van Moolenbroek #define FLAG(f) { f, f, #f }
27521fa314SDavid van Moolenbroek #define FLAG_MASK(m,f) { m, f, #f }
28521fa314SDavid van Moolenbroek #define FLAG_ZERO(f) { ~0, f, #f }
29521fa314SDavid van Moolenbroek 
30521fa314SDavid van Moolenbroek /* not great, but it prevents a massive potential for typos.. */
31521fa314SDavid van Moolenbroek #define NAME(r) case r: return #r
32521fa314SDavid van Moolenbroek #define TEXT(v) case v: text = #v; break
33