Merge branch 'master' into isa/arm64
[lunaix-os.git] / lunaix-os / tests / units / device-tree / test-intrmap.c
1 #include "common.h"
2 #include <testing/basic.h>
3
4 extern void *calloc(size_t, size_t);
5 extern void  free(void *);
6
7 #define be(v) ((((v) & 0x000000ff) << 24)  |\
8                (((v) & 0x00ff0000) >> 8 )  |\
9                (((v) & 0x0000ff00) << 8 )  |\
10                (((v) & 0xff000000) >> 24))
11
12 static void
13 map_and_mask_test(struct dtn* node)
14 {
15     struct dtn_intr* intrn;
16     struct dtspec_map *map;
17     struct dtspec_key *mask, *key, test_key;
18
19     intrn = &node->intr;
20     map = intrn->map;
21     mask = &map->mask;
22
23     test_key.val = calloc(4, sizeof(int));
24     test_key.size = 4;
25     test_key.bval->raw[0] = 0xf200;
26     test_key.bval->raw[1] = 0x22;
27     test_key.bval->raw[2] = 0x0;
28     test_key.bval->raw[3] = 0x16;
29
30     testcase("map", { expect_notnull(map); });
31
32     testcase("mask-value", {
33         expect_int(mask->bval->raw[0], 0xf800);
34         expect_int(mask->bval->raw[1], 0);
35         expect_int(mask->bval->raw[2], 0);
36         expect_int(mask->bval->raw[3], 7);
37     });
38
39     testcase("key-copy", {
40         struct dtspec_key tmp_key;        
41         dtspec_cpykey(&tmp_key, &test_key);
42
43         expect_int(tmp_key.bval->raw[0], 0xf200);
44         expect_int(tmp_key.bval->raw[1], 0x22);
45         expect_int(tmp_key.bval->raw[2], 0);
46         expect_int(tmp_key.bval->raw[3], 0x16);
47         expect_int(tmp_key.size, test_key.size);
48
49         dtspec_freekey(&tmp_key);
50         expect_true(dtspec_nullkey(&tmp_key));
51     });
52
53     testcase("mask-ops", {
54         struct dtspec_key tmp_key;
55         dtspec_cpykey(&tmp_key, &test_key);
56
57         dtspec_applymask(map, &tmp_key);
58
59         expect_int(tmp_key.bval->raw[0], 0xf000);
60         expect_int(tmp_key.bval->raw[1], 0);
61         expect_int(tmp_key.bval->raw[2], 0);
62         expect_int(tmp_key.bval->raw[3], 6);
63
64         dtspec_freekey(&tmp_key);
65     });
66
67     testcase("map-get", {
68         struct dtspec_mapent* ent;
69
70         test_key.bval->raw[0] = 0x8820;
71         test_key.bval->raw[1] = 0x22;
72         test_key.bval->raw[2] = 0x0;
73         test_key.bval->raw[3] = 0x14;
74
75         ent = dtspec_lookup(map, &test_key);
76         expect_notnull(ent);
77
78         expect_int(ent->child_spec.bval->raw[0], 0x8800);
79         expect_int(ent->child_spec.bval->raw[1], 0);
80         expect_int(ent->child_spec.bval->raw[2], 0);
81         expect_int(ent->child_spec.bval->raw[3], 4);
82
83         expect_notnull(ent->parent);
84         expect_str(morpher_name(dt_mobj(ent->parent)), "pic@1");
85
86         expect_int(ent->parent_spec.bval->raw[0], 1);
87         expect_int(ent->parent_spec.bval->raw[1], 1);
88     });
89
90     free(test_key.val);
91 }
92
93 void
94 run_test(int argc, const char* argv[])
95 {
96     struct dt_context* ctx;
97     struct dtn* node;
98     struct dtn_iter it;
99     
100     my_load_dtb();
101
102     ctx = dt_main_context();
103
104     dt_begin_find_byname(&it, ctx->root, "pci");
105     node = (struct dtn*)it.matched;
106
107     testcase("root", {
108         expect_notnull(node);
109         expect_int(node->base.addr_c, 3);
110         expect_int(node->base.sz_c, 2);
111         expect_int(node->base.intr_c, 1);
112     });
113
114     map_and_mask_test(node);
115 }