1*53ee8cc1Swenshuai.xi #ifndef _FDT_H 2*53ee8cc1Swenshuai.xi #define _FDT_H 3*53ee8cc1Swenshuai.xi 4*53ee8cc1Swenshuai.xi #ifndef __ASSEMBLY__ 5*53ee8cc1Swenshuai.xi 6*53ee8cc1Swenshuai.xi struct fdt_header { 7*53ee8cc1Swenshuai.xi uint32_t magic; /* magic word FDT_MAGIC */ 8*53ee8cc1Swenshuai.xi uint32_t totalsize; /* total size of DT block */ 9*53ee8cc1Swenshuai.xi uint32_t off_dt_struct; /* offset to structure */ 10*53ee8cc1Swenshuai.xi uint32_t off_dt_strings; /* offset to strings */ 11*53ee8cc1Swenshuai.xi uint32_t off_mem_rsvmap; /* offset to memory reserve map */ 12*53ee8cc1Swenshuai.xi uint32_t version; /* format version */ 13*53ee8cc1Swenshuai.xi uint32_t last_comp_version; /* last compatible version */ 14*53ee8cc1Swenshuai.xi 15*53ee8cc1Swenshuai.xi /* version 2 fields below */ 16*53ee8cc1Swenshuai.xi uint32_t boot_cpuid_phys; /* Which physical CPU id we're 17*53ee8cc1Swenshuai.xi booting on */ 18*53ee8cc1Swenshuai.xi /* version 3 fields below */ 19*53ee8cc1Swenshuai.xi uint32_t size_dt_strings; /* size of the strings block */ 20*53ee8cc1Swenshuai.xi 21*53ee8cc1Swenshuai.xi /* version 17 fields below */ 22*53ee8cc1Swenshuai.xi uint32_t size_dt_struct; /* size of the structure block */ 23*53ee8cc1Swenshuai.xi }; 24*53ee8cc1Swenshuai.xi 25*53ee8cc1Swenshuai.xi struct fdt_reserve_entry { 26*53ee8cc1Swenshuai.xi uint64_t address; 27*53ee8cc1Swenshuai.xi uint64_t size; 28*53ee8cc1Swenshuai.xi }; 29*53ee8cc1Swenshuai.xi 30*53ee8cc1Swenshuai.xi struct fdt_node_header { 31*53ee8cc1Swenshuai.xi uint32_t tag; 32*53ee8cc1Swenshuai.xi char name[0]; 33*53ee8cc1Swenshuai.xi }; 34*53ee8cc1Swenshuai.xi 35*53ee8cc1Swenshuai.xi struct fdt_property { 36*53ee8cc1Swenshuai.xi uint32_t tag; 37*53ee8cc1Swenshuai.xi uint32_t len; 38*53ee8cc1Swenshuai.xi uint32_t nameoff; 39*53ee8cc1Swenshuai.xi char data[0]; 40*53ee8cc1Swenshuai.xi }; 41*53ee8cc1Swenshuai.xi 42*53ee8cc1Swenshuai.xi #endif /* !__ASSEMBLY */ 43*53ee8cc1Swenshuai.xi 44*53ee8cc1Swenshuai.xi #define FDT_MAGIC 0xd00dfeed /* 4: version, 4: total size */ 45*53ee8cc1Swenshuai.xi #define FDT_TAGSIZE sizeof(uint32_t) 46*53ee8cc1Swenshuai.xi 47*53ee8cc1Swenshuai.xi #define FDT_BEGIN_NODE 0x1 /* Start node: full name */ 48*53ee8cc1Swenshuai.xi #define FDT_END_NODE 0x2 /* End node */ 49*53ee8cc1Swenshuai.xi #define FDT_PROP 0x3 /* Property: name off, 50*53ee8cc1Swenshuai.xi size, content */ 51*53ee8cc1Swenshuai.xi #define FDT_NOP 0x4 /* nop */ 52*53ee8cc1Swenshuai.xi #define FDT_END 0x9 53*53ee8cc1Swenshuai.xi 54*53ee8cc1Swenshuai.xi #define FDT_V1_SIZE (7*sizeof(uint32_t)) 55*53ee8cc1Swenshuai.xi #define FDT_V2_SIZE (FDT_V1_SIZE + sizeof(uint32_t)) 56*53ee8cc1Swenshuai.xi #define FDT_V3_SIZE (FDT_V2_SIZE + sizeof(uint32_t)) 57*53ee8cc1Swenshuai.xi #define FDT_V16_SIZE FDT_V3_SIZE 58*53ee8cc1Swenshuai.xi #define FDT_V17_SIZE (FDT_V16_SIZE + sizeof(uint32_t)) 59*53ee8cc1Swenshuai.xi 60*53ee8cc1Swenshuai.xi #endif /* _FDT_H */ 61