digraph {
rankdir=LR;
node [shape=plaintext];
subgraph cluster__dtb {
label="Dtb";
graph[style=dotted];
dtb__seq [label=<
pos | size | type | id |
0 | 4 | | magic |
4 | 4 | u4be | total_size |
8 | 4 | u4be | ofs_structure_block |
12 | 4 | u4be | ofs_strings_block |
16 | 4 | u4be | ofs_memory_reservation_block |
20 | 4 | u4be | version |
24 | 4 | u4be | min_compatible_version |
28 | 4 | u4be | boot_cpuid_phys |
32 | 4 | u4be | len_strings_block |
36 | 4 | u4be | len_structure_block |
>];
dtb__inst__memory_reservation_block [label=<
pos | size | type | id |
ofs_memory_reservation_block | (ofs_structure_block - ofs_memory_reservation_block) | MemoryBlock | memory_reservation_block |
>];
dtb__inst__structure_block [label=<
pos | size | type | id |
ofs_structure_block | len_structure_block | FdtBlock | structure_block |
>];
dtb__inst__strings_block [label=<
pos | size | type | id |
ofs_strings_block | len_strings_block | Strings | strings_block |
>];
subgraph cluster__memory_block {
label="Dtb::MemoryBlock";
graph[style=dotted];
memory_block__seq [label=<
pos | size | type | id |
0 | 16 | MemoryBlockEntry | entries |
repeat to end of stream |
>];
}
subgraph cluster__fdt_block {
label="Dtb::FdtBlock";
graph[style=dotted];
fdt_block__seq [label=<
pos | size | type | id |
0 | ... | FdtNode | nodes |
repeat until _.type == :fdt_end |
>];
}
subgraph cluster__memory_block_entry {
label="Dtb::MemoryBlockEntry";
graph[style=dotted];
memory_block_entry__seq [label=<
pos | size | type | id |
0 | 8 | u8be | address |
8 | 8 | u8be | size |
>];
}
subgraph cluster__strings {
label="Dtb::Strings";
graph[style=dotted];
strings__seq [label=<
pos | size | type | id |
0 | ... | str(ASCII) | strings |
repeat to end of stream |
>];
}
subgraph cluster__fdt_prop {
label="Dtb::FdtProp";
graph[style=dotted];
fdt_prop__seq [label=<
pos | size | type | id |
0 | 4 | u4be | len_property |
4 | 4 | u4be | ofs_name |
8 | len_property | | property |
... | (-(_io.pos) % 4) | | padding |
>];
fdt_prop__inst__name [label=<
pos | size | type | id |
ofs_name | ... | str(ASCII) | name |
>];
}
subgraph cluster__fdt_node {
label="Dtb::FdtNode";
graph[style=dotted];
fdt_node__seq [label=<
pos | size | type | id |
0 | 4 | u4be→Fdt | type |
4 | ... | switch (type) | body |
>];
fdt_node__seq_body_switch [label=<
case | type |
:fdt_begin_node | FdtBeginNode |
:fdt_prop | FdtProp |
>];
}
subgraph cluster__fdt_begin_node {
label="Dtb::FdtBeginNode";
graph[style=dotted];
fdt_begin_node__seq [label=<
pos | size | type | id |
0 | ... | str(ASCII) | name |
... | (-(_io.pos) % 4) | | padding |
>];
}
}
dtb__seq:ofs_memory_reservation_block_type -> dtb__inst__memory_reservation_block:memory_reservation_block_pos [color="#404040"];
dtb__seq:ofs_structure_block_type -> dtb__inst__memory_reservation_block:memory_reservation_block_size [color="#404040"];
dtb__seq:ofs_memory_reservation_block_type -> dtb__inst__memory_reservation_block:memory_reservation_block_size [color="#404040"];
dtb__inst__memory_reservation_block:memory_reservation_block_type -> memory_block__seq [style=bold];
dtb__seq:ofs_structure_block_type -> dtb__inst__structure_block:structure_block_pos [color="#404040"];
dtb__seq:len_structure_block_type -> dtb__inst__structure_block:structure_block_size [color="#404040"];
dtb__inst__structure_block:structure_block_type -> fdt_block__seq [style=bold];
dtb__seq:ofs_strings_block_type -> dtb__inst__strings_block:strings_block_pos [color="#404040"];
dtb__seq:len_strings_block_type -> dtb__inst__strings_block:strings_block_size [color="#404040"];
dtb__inst__strings_block:strings_block_type -> strings__seq [style=bold];
memory_block__seq:entries_type -> memory_block_entry__seq [style=bold];
fdt_block__seq:nodes_type -> fdt_node__seq [style=bold];
fdt_node__seq:type_type -> fdt_block__seq:nodes__repeat [color="#404040"];
fdt_prop__seq:len_property_type -> fdt_prop__seq:property_size [color="#404040"];
fdt_prop__seq:ofs_name_type -> fdt_prop__inst__name:name_pos [color="#404040"];
fdt_node__seq:body_type -> fdt_node__seq_body_switch [style=bold];
fdt_node__seq_body_switch:case0 -> fdt_begin_node__seq [style=bold];
fdt_node__seq_body_switch:case1 -> fdt_prop__seq [style=bold];
fdt_node__seq:type_type -> fdt_node__seq:body_type [color="#404040"];
}