Add qemu 2.4.0
[kvmfornfv.git] / qemu / dtc / tests / tests.h
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                 uint32_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                 uint32_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                 uint64_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 */