1 #ifndef _TESTS_H
2 #define _TESTS_H
3 /*
4  * libfdt - Flat Device Tree manipulation
5  *	Testcase definitions
6  * Copyright (C) 2006 David Gibson, IBM Corporation.
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public License
10  * as published by the Free Software Foundation; either version 2.1 of
11  * the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22 
23 #define DEBUG
24 
25 /* Test return codes */
26 #define RC_PASS 	0
27 #define RC_CONFIG 	1
28 #define RC_FAIL		2
29 #define RC_BUG		99
30 
31 extern int verbose_test;
32 extern char *test_name;
33 void test_init(int argc, char *argv[]);
34 
35 #define ALIGN(x, a)	(((x) + (a) - 1) & ~((a) - 1))
36 #define PALIGN(p, a)	((void *)ALIGN((unsigned long)(p), (a)))
37 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
38 
39 #define streq(s1, s2)	(strcmp((s1),(s2)) == 0)
40 
41 /* Each test case must define this function */
42 void cleanup(void);
43 
44 #define verbose_printf(...) \
45 	if (verbose_test) { \
46 		printf(__VA_ARGS__); \
47 		fflush(stdout); \
48 	}
49 #define ERR	"ERR: "
50 #define ERROR(fmt, args...)	fprintf(stderr, ERR fmt, ## args)
51 
52 
53 #define	PASS()						\
54 	do {						\
55 		cleanup();				\
56 		printf("PASS\n");			\
57 		exit(RC_PASS);				\
58 	} while (0)
59 
60 #define	PASS_INCONCLUSIVE()				\
61 	do {						\
62 		cleanup();				\
63 		printf("PASS (inconclusive)\n");	\
64 		exit(RC_PASS);				\
65 	} while (0)
66 
67 #define IRRELEVANT()					\
68 	do {						\
69 		cleanup();				\
70 		printf("PASS (irrelevant)\n");		\
71 		exit(RC_PASS);				\
72 	} while (0)
73 
74 /* Look out, gcc extension below... */
75 #define FAIL(fmt, ...)					\
76 	do {						\
77 		cleanup();				\
78 		printf("FAIL\t" fmt "\n", ##__VA_ARGS__);	\
79 		exit(RC_FAIL);				\
80 	} while (0)
81 
82 #define CONFIG(fmt, ...)				\
83 	do {						\
84 		cleanup();				\
85 		printf("Bad configuration: " fmt "\n", ##__VA_ARGS__);	\
86 		exit(RC_CONFIG);			\
87 	} while (0)
88 
89 #define TEST_BUG(fmt, ...)				\
90 	do {						\
91 		cleanup();				\
92 		printf("BUG in testsuite: " fmt "\n", ##__VA_ARGS__);	\
93 		exit(RC_BUG);				\
94 	} while (0)
95 
96 void check_mem_rsv(void *fdt, int n, uint64_t addr, uint64_t size);
97 
98 void check_property(void *fdt, int nodeoffset, const char *name,
99 		    int len, const void *val);
100 #define check_property_cell(fdt, nodeoffset, name, val) \
101 	({ \
102 		fdt32_t x = cpu_to_fdt32(val);			      \
103 		check_property(fdt, nodeoffset, name, sizeof(x), &x); \
104 	})
105 
106 
107 const void *check_getprop(void *fdt, int nodeoffset, const char *name,
108 			  int len, const void *val);
109 #define check_getprop_cell(fdt, nodeoffset, name, val) \
110 	({ \
111 		fdt32_t x = cpu_to_fdt32(val);			     \
112 		check_getprop(fdt, nodeoffset, name, sizeof(x), &x); \
113 	})
114 #define check_getprop_64(fdt, nodeoffset, name, val) \
115 	({ \
116 		fdt64_t x = cpu_to_fdt64(val);			     \
117 		check_getprop(fdt, nodeoffset, name, sizeof(x), &x); \
118 	})
119 #define check_getprop_string(fdt, nodeoffset, name, s) \
120 	check_getprop((fdt), (nodeoffset), (name), strlen(s)+1, (s))
121 int nodename_eq(const char *s1, const char *s2);
122 void *load_blob(const char *filename);
123 void *load_blob_arg(int argc, char *argv[]);
124 void save_blob(const char *filename, void *blob);
125 void *open_blob_rw(void *blob);
126 
127 #include "util.h"
128 
129 #endif /* _TESTS_H */
130