Home | History | Annotate | Line # | Download | only in tests
      1 #include <fdt.h>
      2 #include "testdata.h"
      3 
      4 #define FDTLONG(val) \
      5 	.byte	((val) >> 24) & 0xff ; \
      6 	.byte	((val) >> 16) & 0xff ; \
      7 	.byte	((val) >> 8) & 0xff ; \
      8 	.byte	(val) & 0xff	;
      9 
     10 #define TREE_HDR(tree) \
     11 	.balign	8		; \
     12 	.globl	tree		; \
     13 tree:	\
     14 	FDTLONG(FDT_MAGIC)	; \
     15 	FDTLONG(tree##_end - tree) ; \
     16 	FDTLONG(tree##_struct - tree) ; \
     17 	FDTLONG(tree##_strings - tree) ; \
     18 	FDTLONG(tree##_rsvmap - tree) ; \
     19 	FDTLONG(0x11)		; \
     20 	FDTLONG(0x10)		; \
     21 	FDTLONG(0)		; \
     22 	FDTLONG(tree##_strings_end - tree##_strings) ; \
     23 	FDTLONG(tree##_struct_end - tree##_struct) ;
     24 
     25 #define RSVMAP_ENTRY(addrh, addrl, lenh, lenl) \
     26 	FDTLONG(addrh)		; \
     27 	FDTLONG(addrl)		; \
     28 	FDTLONG(lenh)		; \
     29 	FDTLONG(lenl)
     30 
     31 #define EMPTY_RSVMAP(tree) \
     32 	.balign	8		; \
     33 tree##_rsvmap:			; \
     34 	RSVMAP_ENTRY(0, 0, 0, 0) \
     35 tree##_rsvmap_end:		;
     36 
     37 #define PROPHDR(tree, name, len) \
     38 	FDTLONG(FDT_PROP)	; \
     39 	FDTLONG(len)		; \
     40 	FDTLONG(tree##_##name - tree##_strings) ;
     41 
     42 #define PROP_EMPTY(tree, name) \
     43 	PROPHDR(tree, name, 0)	;
     44 
     45 #define PROP_INT(tree, name, val) \
     46 	PROPHDR(tree, name, 4) \
     47 	FDTLONG(val)		;
     48 
     49 #define PROP_INT64(tree, name, valh, vall) \
     50 	PROPHDR(tree, name, 8) \
     51 	FDTLONG(valh)		; \
     52 	FDTLONG(vall)		;
     53 
     54 #define PROP_STR(tree, name, str) \
     55 	PROPHDR(tree, name, 55f - 54f) \
     56 54:	\
     57 	.string	str		; \
     58 55:	\
     59 	.balign	4		;
     60 
     61 #define BEGIN_NODE(name) \
     62 	FDTLONG(FDT_BEGIN_NODE)	; \
     63 	.string	name		; \
     64 	.balign 4		;
     65 
     66 #define END_NODE \
     67 	FDTLONG(FDT_END_NODE)	;
     68 
     69 #define STRING(tree, name, str) \
     70 tree##_##name:			; \
     71 	.string	str		;
     72 
     73 	.data
     74 
     75 	TREE_HDR(test_tree1)
     76 
     77 	.balign	8
     78 test_tree1_rsvmap:
     79 	RSVMAP_ENTRY(TEST_ADDR_1H, TEST_ADDR_1L, TEST_SIZE_1H, TEST_SIZE_1L)
     80 	RSVMAP_ENTRY(TEST_ADDR_2H, TEST_ADDR_2L, TEST_SIZE_2H, TEST_SIZE_2L)
     81 	RSVMAP_ENTRY(0, 0, 0, 0)
     82 test_tree1_rsvmap_end:
     83 
     84 test_tree1_struct:
     85 	BEGIN_NODE("")
     86 	PROP_STR(test_tree1, compatible, "test_tree1")
     87 	PROP_INT(test_tree1, prop_int, TEST_VALUE_1)
     88 	PROP_INT64(test_tree1, prop_int64, TEST_VALUE64_1H, TEST_VALUE64_1L)
     89 	PROP_STR(test_tree1, prop_str, TEST_STRING_1)
     90 	PROP_INT(test_tree1, address_cells, 1)
     91 	PROP_INT(test_tree1, size_cells, 0)
     92 
     93 	BEGIN_NODE("subnode@1")
     94 	PROP_STR(test_tree1, compatible, "subnode1")
     95 	PROP_INT(test_tree1, reg, 1)
     96 	PROP_INT(test_tree1, prop_int, TEST_VALUE_1)
     97 
     98 	BEGIN_NODE("subsubnode")
     99 	PROP_STR(test_tree1, compatible, "subsubnode1\0subsubnode")
    100 	PROP_STR(test_tree1, placeholder, "this is a placeholder string\0string2")
    101 	PROP_INT(test_tree1, prop_int, TEST_VALUE_1)
    102 	END_NODE
    103 
    104 	BEGIN_NODE("ss1")
    105 	END_NODE
    106 
    107 	END_NODE
    108 
    109 	BEGIN_NODE("subnode@2")
    110 	PROP_INT(test_tree1, reg, 2)
    111 	PROP_INT(test_tree1, linux_phandle, PHANDLE_1)
    112 	PROP_INT(test_tree1, prop_int, TEST_VALUE_2)
    113 	PROP_INT(test_tree1, address_cells, 1)
    114 	PROP_INT(test_tree1, size_cells, 0)
    115 
    116 	BEGIN_NODE("subsubnode@0")
    117 	PROP_INT(test_tree1, reg, 0)
    118 	PROP_INT(test_tree1, phandle, PHANDLE_2)
    119 	PROP_STR(test_tree1, compatible, "subsubnode2\0subsubnode")
    120 	PROP_INT(test_tree1, prop_int, TEST_VALUE_2)
    121 	END_NODE
    122 
    123 	BEGIN_NODE("ss2")
    124 	END_NODE
    125 
    126 	END_NODE
    127 
    128 	END_NODE
    129 	FDTLONG(FDT_END)
    130 test_tree1_struct_end:
    131 
    132 test_tree1_strings:
    133 	STRING(test_tree1, compatible, "compatible")
    134 	STRING(test_tree1, prop_int, "prop-int")
    135 	STRING(test_tree1, prop_int64, "prop-int64")
    136 	STRING(test_tree1, prop_str, "prop-str")
    137 	STRING(test_tree1, linux_phandle, "linux,phandle")
    138 	STRING(test_tree1, phandle, "phandle")
    139 	STRING(test_tree1, reg, "reg")
    140 	STRING(test_tree1, placeholder, "placeholder")
    141 	STRING(test_tree1, address_cells, "#address-cells")
    142 	STRING(test_tree1, size_cells, "#size-cells")
    143 test_tree1_strings_end:
    144 test_tree1_end:
    145 
    146 
    147 	TREE_HDR(truncated_property)
    148 	EMPTY_RSVMAP(truncated_property)
    149 
    150 truncated_property_struct:
    151 	BEGIN_NODE("")
    152 	PROPHDR(truncated_property, prop_truncated, 4)
    153 	/* Oops, no actual property data here */
    154 truncated_property_struct_end:
    155 
    156 truncated_property_strings:
    157 	STRING(truncated_property, prop_truncated, "truncated")
    158 truncated_property_strings_end:
    159 
    160 truncated_property_end:
    161 
    162 
    163 	TREE_HDR(bad_node_char)
    164 	EMPTY_RSVMAP(bad_node_char)
    165 
    166 bad_node_char_struct:
    167 	BEGIN_NODE("")
    168 	BEGIN_NODE("sub$node")
    169 	END_NODE
    170 	END_NODE
    171 	FDTLONG(FDT_END)
    172 bad_node_char_struct_end:
    173 
    174 bad_node_char_strings:
    175 bad_node_char_strings_end:
    176 bad_node_char_end:
    177 
    178 
    179 	TREE_HDR(bad_node_format)
    180 	EMPTY_RSVMAP(bad_node_format)
    181 
    182 bad_node_format_struct:
    183 	BEGIN_NODE("")
    184 	BEGIN_NODE("subnode@1@2")
    185 	END_NODE
    186 	END_NODE
    187 	FDTLONG(FDT_END)
    188 bad_node_format_struct_end:
    189 
    190 bad_node_format_strings:
    191 bad_node_format_strings_end:
    192 bad_node_format_end:
    193 
    194 
    195 	TREE_HDR(bad_prop_char)
    196 	EMPTY_RSVMAP(bad_prop_char)
    197 
    198 bad_prop_char_struct:
    199 	BEGIN_NODE("")
    200 	PROP_INT(bad_prop_char, prop, TEST_VALUE_1)
    201 	END_NODE
    202 	FDTLONG(FDT_END)
    203 bad_prop_char_struct_end:
    204 
    205 bad_prop_char_strings:
    206 	STRING(bad_prop_char, prop, "prop$erty")
    207 bad_prop_char_strings_end:
    208 bad_prop_char_end:
    209 
    210 
    211 	/* overflow_size_strings */
    212 	.balign	8
    213 	.globl	ovf_size_strings
    214 ovf_size_strings:
    215 	FDTLONG(FDT_MAGIC)
    216 	FDTLONG(ovf_size_strings_end - ovf_size_strings)
    217 	FDTLONG(ovf_size_strings_struct - ovf_size_strings)
    218 	FDTLONG(ovf_size_strings_strings - ovf_size_strings)
    219 	FDTLONG(ovf_size_strings_rsvmap - ovf_size_strings)
    220 	FDTLONG(0x11)
    221 	FDTLONG(0x10)
    222 	FDTLONG(0)
    223 	FDTLONG(0xffffffff)
    224 	FDTLONG(ovf_size_strings_struct_end - ovf_size_strings_struct)
    225 	EMPTY_RSVMAP(ovf_size_strings)
    226 
    227 ovf_size_strings_struct:
    228 	BEGIN_NODE("")
    229 	PROP_INT(ovf_size_strings, bad_string, 0)
    230 	END_NODE
    231 	FDTLONG(FDT_END)
    232 ovf_size_strings_struct_end:
    233 
    234 ovf_size_strings_strings:
    235 	STRING(ovf_size_strings, x, "x")
    236 	ovf_size_strings_bad_string = ovf_size_strings_strings + 0x10000000
    237 ovf_size_strings_strings_end:
    238 ovf_size_strings_end:
    239 
    240 
    241 	/* truncated_string */
    242 	TREE_HDR(truncated_string)
    243 	EMPTY_RSVMAP(truncated_string)
    244 
    245 truncated_string_struct:
    246 	BEGIN_NODE("")
    247 	PROP_EMPTY(truncated_string, good_string)
    248 	PROP_EMPTY(truncated_string, bad_string)
    249 	END_NODE
    250 	FDTLONG(FDT_END)
    251 truncated_string_struct_end:
    252 
    253 truncated_string_strings:
    254 	STRING(truncated_string, good_string, "good")
    255 truncated_string_bad_string:
    256 	.byte	'b'
    257 	.byte	'a'
    258 	.byte	'd'
    259 	/* NOTE: terminating \0 deliberately missing */
    260 truncated_string_strings_end:
    261 truncated_string_end:
    262 
    263 
    264 	/* truncated_memrsv */
    265 	TREE_HDR(truncated_memrsv)
    266 
    267 truncated_memrsv_struct:
    268 	BEGIN_NODE("")
    269 	END_NODE
    270 	FDTLONG(FDT_END)
    271 truncated_memrsv_struct_end:
    272 
    273 truncated_memrsv_strings:
    274 truncated_memrsv_strings_end:
    275 
    276 	.balign	8
    277 truncated_memrsv_rsvmap:
    278 	RSVMAP_ENTRY(TEST_ADDR_1H, TEST_ADDR_1L, TEST_SIZE_1H, TEST_SIZE_1L)
    279 truncated_memrsv_rsvmap_end:
    280 
    281 truncated_memrsv_end:
    282