xref: /netbsd-src/external/gpl2/dtc/dist/tests/tests.h (revision 7cdf52c4e116cff01c811ade809106cc07d84795)
1 /*	$NetBSD: tests.h,v 1.4 2019/12/22 12:38:24 skrll Exp $	*/
2 
3 /* SPDX-License-Identifier: LGPL-2.1-or-later */
4 #ifndef TESTS_H
5 #define TESTS_H
6 /*
7  * libfdt - Flat Device Tree manipulation
8  *	Testcase definitions
9  * Copyright (C) 2006 David Gibson, IBM Corporation.
10  */
11 
12 #define DEBUG
13 
14 /* Test return codes */
15 #define RC_PASS 	0
16 #define RC_CONFIG 	1
17 #define RC_FAIL		2
18 #define RC_BUG		99
19 
20 extern int verbose_test;
21 extern char *test_name;
22 void test_init(int argc, char *argv[]);
23 
24 #define FDTALIGN2(x, a)	(((x) + (a) - 1) & ~((a) - 1))
25 #define PALIGN(p, a)	((void *)FDTALIGN2((unsigned long)(p), (a)))
26 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
27 
28 #define streq(s1, s2)	(strcmp((s1),(s2)) == 0)
29 
30 /* Each test case must define this function */
31 void cleanup(void);
32 
33 #define verbose_printf(...) \
34 	if (verbose_test) { \
35 		printf(__VA_ARGS__); \
36 		fflush(stdout); \
37 	}
38 #define ERR	"ERR: "
39 #define ERROR(fmt, args...)	fprintf(stderr, ERR fmt, ## args)
40 
41 
42 #define	PASS()						\
43 	do {						\
44 		cleanup();				\
45 		printf("PASS\n");			\
46 		exit(RC_PASS);				\
47 	} while (0)
48 
49 #define	PASS_INCONCLUSIVE()				\
50 	do {						\
51 		cleanup();				\
52 		printf("PASS (inconclusive)\n");	\
53 		exit(RC_PASS);				\
54 	} while (0)
55 
56 #define IRRELEVANT()					\
57 	do {						\
58 		cleanup();				\
59 		printf("PASS (irrelevant)\n");		\
60 		exit(RC_PASS);				\
61 	} while (0)
62 
63 /* Look out, gcc extension below... */
64 #define FAIL(fmt, ...)					\
65 	do {						\
66 		cleanup();				\
67 		printf("FAIL\t" fmt "\n", ##__VA_ARGS__);	\
68 		exit(RC_FAIL);				\
69 	} while (0)
70 
71 #define CONFIG(fmt, ...)				\
72 	do {						\
73 		cleanup();				\
74 		printf("Bad configuration: " fmt "\n", ##__VA_ARGS__);	\
75 		exit(RC_CONFIG);			\
76 	} while (0)
77 
78 #define TEST_BUG(fmt, ...)				\
79 	do {						\
80 		cleanup();				\
81 		printf("BUG in testsuite: " fmt "\n", ##__VA_ARGS__);	\
82 		exit(RC_BUG);				\
83 	} while (0)
84 
85 void check_mem_rsv(void *fdt, int n, uint64_t addr, uint64_t size);
86 
87 void check_property(void *fdt, int nodeoffset, const char *name,
88 		    int len, const void *val);
89 #define check_property_cell(fdt, nodeoffset, name, val) \
90 	({ \
91 		fdt32_t x = cpu_to_fdt32(val);			      \
92 		check_property(fdt, nodeoffset, name, sizeof(x), &x); \
93 	})
94 
95 
96 const void *check_getprop(void *fdt, int nodeoffset, const char *name,
97 			  int len, const void *val);
98 #define check_getprop_cell(fdt, nodeoffset, name, val) \
99 	({ \
100 		fdt32_t x = cpu_to_fdt32(val);			     \
101 		check_getprop(fdt, nodeoffset, name, sizeof(x), &x); \
102 	})
103 #define check_getprop_64(fdt, nodeoffset, name, val) \
104 	({ \
105 		fdt64_t x = cpu_to_fdt64(val);			     \
106 		check_getprop(fdt, nodeoffset, name, sizeof(x), &x); \
107 	})
108 #define check_getprop_string(fdt, nodeoffset, name, s) \
109 	check_getprop((fdt), (nodeoffset), (name), strlen(s)+1, (s))
110 
111 /* Returns non-NULL if the property at poffset has the name in_name */
112 const void *check_get_prop_offset(void *fdt, int poffset, const char *in_name,
113 				  int in_len, const void *in_val);
114 #define check_get_prop_offset_cell(fdt, poffset, name, val) \
115 	({ \
116 		fdt32_t x = cpu_to_fdt32(val);			     \
117 		check_get_prop_offset(fdt, poffset, name, sizeof(x), &x); \
118 	})
119 
120 const void *check_getprop_addrrange(void *fdt, int parent, int nodeoffset,
121 				    const char *name, int num);
122 
123 int nodename_eq(const char *s1, const char *s2);
124 void vg_prepare_blob(void *fdt, size_t bufsize);
125 void *load_blob(const char *filename);
126 void *load_blob_arg(int argc, char *argv[]);
127 void save_blob(const char *filename, void *blob);
128 void *open_blob_rw(void *blob);
129 
130 #include "util.h"
131 
132 #endif /* TESTS_H */
133