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