1*4882a593Smuzhiyun /* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */ 2*4882a593Smuzhiyun #ifndef FDT_H 3*4882a593Smuzhiyun #define FDT_H 4*4882a593Smuzhiyun /* 5*4882a593Smuzhiyun * libfdt - Flat Device Tree manipulation 6*4882a593Smuzhiyun * Copyright (C) 2006 David Gibson, IBM Corporation. 7*4882a593Smuzhiyun * Copyright 2012 Kim Phillips, Freescale Semiconductor. 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun struct fdt_header { 13*4882a593Smuzhiyun fdt32_t magic; /* magic word FDT_MAGIC */ 14*4882a593Smuzhiyun fdt32_t totalsize; /* total size of DT block */ 15*4882a593Smuzhiyun fdt32_t off_dt_struct; /* offset to structure */ 16*4882a593Smuzhiyun fdt32_t off_dt_strings; /* offset to strings */ 17*4882a593Smuzhiyun fdt32_t off_mem_rsvmap; /* offset to memory reserve map */ 18*4882a593Smuzhiyun fdt32_t version; /* format version */ 19*4882a593Smuzhiyun fdt32_t last_comp_version; /* last compatible version */ 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun /* version 2 fields below */ 22*4882a593Smuzhiyun fdt32_t boot_cpuid_phys; /* Which physical CPU id we're 23*4882a593Smuzhiyun booting on */ 24*4882a593Smuzhiyun /* version 3 fields below */ 25*4882a593Smuzhiyun fdt32_t size_dt_strings; /* size of the strings block */ 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun /* version 17 fields below */ 28*4882a593Smuzhiyun fdt32_t size_dt_struct; /* size of the structure block */ 29*4882a593Smuzhiyun }; 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun struct fdt_reserve_entry { 32*4882a593Smuzhiyun fdt64_t address; 33*4882a593Smuzhiyun fdt64_t size; 34*4882a593Smuzhiyun }; 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun struct fdt_node_header { 37*4882a593Smuzhiyun fdt32_t tag; 38*4882a593Smuzhiyun char name[0]; 39*4882a593Smuzhiyun }; 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun struct fdt_property { 42*4882a593Smuzhiyun fdt32_t tag; 43*4882a593Smuzhiyun fdt32_t len; 44*4882a593Smuzhiyun fdt32_t nameoff; 45*4882a593Smuzhiyun char data[0]; 46*4882a593Smuzhiyun }; 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun #endif /* !__ASSEMBLY */ 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun #define FDT_MAGIC 0xd00dfeed /* 4: version, 4: total size */ 51*4882a593Smuzhiyun #define FDT_TAGSIZE sizeof(fdt32_t) 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun #define FDT_BEGIN_NODE 0x1 /* Start node: full name */ 54*4882a593Smuzhiyun #define FDT_END_NODE 0x2 /* End node */ 55*4882a593Smuzhiyun #define FDT_PROP 0x3 /* Property: name off, 56*4882a593Smuzhiyun size, content */ 57*4882a593Smuzhiyun #define FDT_NOP 0x4 /* nop */ 58*4882a593Smuzhiyun #define FDT_END 0x9 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun #define FDT_V1_SIZE (7*sizeof(fdt32_t)) 61*4882a593Smuzhiyun #define FDT_V2_SIZE (FDT_V1_SIZE + sizeof(fdt32_t)) 62*4882a593Smuzhiyun #define FDT_V3_SIZE (FDT_V2_SIZE + sizeof(fdt32_t)) 63*4882a593Smuzhiyun #define FDT_V16_SIZE FDT_V3_SIZE 64*4882a593Smuzhiyun #define FDT_V17_SIZE (FDT_V16_SIZE + sizeof(fdt32_t)) 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun #endif /* FDT_H */ 67