fdt.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. /*
  2. * Copyright (c) 2006-2023, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2022-12-20 RT-Thread the first version
  9. */
  10. #ifndef _FDT_H
  11. #define _FDT_H
  12. /*
  13. * libfdt - Flat Device Tree manipulation
  14. * Copyright (C) 2006 David Gibson, IBM Corporation.
  15. * Copyright 2012 Kim Phillips, Freescale Semiconductor.
  16. *
  17. * libfdt is dual licensed: you can use it either under the terms of
  18. * the GPL, or the BSD license, at your option.
  19. *
  20. * a) This library is free software; you can redistribute it and/or
  21. * modify it under the terms of the GNU General Public License as
  22. * published by the Free Software Foundation; either version 2 of the
  23. * License, or (at your option) any later version.
  24. *
  25. * This library is distributed in the hope that it will be useful,
  26. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  27. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  28. * GNU General Public License for more details.
  29. *
  30. * You should have received a copy of the GNU General Public
  31. * License along with this library; if not, write to the Free
  32. * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
  33. * MA 02110-1301 USA
  34. *
  35. * Alternatively,
  36. *
  37. * b) Redistribution and use in source and binary forms, with or
  38. * without modification, are permitted provided that the following
  39. * conditions are met:
  40. *
  41. * 1. Redistributions of source code must retain the above
  42. * copyright notice, this list of conditions and the following
  43. * disclaimer.
  44. * 2. Redistributions in binary form must reproduce the above
  45. * copyright notice, this list of conditions and the following
  46. * disclaimer in the documentation and/or other materials
  47. * provided with the distribution.
  48. *
  49. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
  50. * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
  51. * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  52. * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  53. * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  54. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  55. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  56. * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  57. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  58. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  59. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
  60. * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  61. * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  62. */
  63. #ifndef __ASSEMBLY__
  64. #include <errno.h>
  65. #include <unistd.h>
  66. #include <fcntl.h>
  67. struct fdt_header {
  68. fdt32_t magic; /* magic word FDT_MAGIC */
  69. fdt32_t totalsize; /* total size of DT block */
  70. fdt32_t off_dt_struct; /* offset to structure */
  71. fdt32_t off_dt_strings; /* offset to strings */
  72. fdt32_t off_mem_rsvmap; /* offset to memory reserve map */
  73. fdt32_t version; /* format version */
  74. fdt32_t last_comp_version; /* last compatible version */
  75. /* version 2 fields below */
  76. fdt32_t boot_cpuid_phys; /* Which physical CPU id we're
  77. booting on */
  78. /* version 3 fields below */
  79. fdt32_t size_dt_strings; /* size of the strings block */
  80. /* version 17 fields below */
  81. fdt32_t size_dt_struct; /* size of the structure block */
  82. };
  83. struct fdt_reserve_entry {
  84. fdt64_t address;
  85. fdt64_t size;
  86. };
  87. struct fdt_node_header {
  88. fdt32_t tag;
  89. char name[0];
  90. };
  91. struct fdt_property {
  92. fdt32_t tag;
  93. fdt32_t len;
  94. fdt32_t nameoff;
  95. char data[0];
  96. };
  97. #endif /* !__ASSEMBLY */
  98. #define FDT_MAGIC 0xd00dfeed /* 4: version, 4: total size */
  99. #define FDT_TAGSIZE sizeof(fdt32_t)
  100. #define FDT_BEGIN_NODE 0x1 /* Start node: full name */
  101. #define FDT_END_NODE 0x2 /* End node */
  102. #define FDT_PROP 0x3 /* Property: name off,
  103. size, content */
  104. #define FDT_NOP 0x4 /* nop */
  105. #define FDT_END 0x9
  106. #define FDT_V1_SIZE (7*sizeof(fdt32_t))
  107. #define FDT_V2_SIZE (FDT_V1_SIZE + sizeof(fdt32_t))
  108. #define FDT_V3_SIZE (FDT_V2_SIZE + sizeof(fdt32_t))
  109. #define FDT_V16_SIZE FDT_V3_SIZE
  110. #define FDT_V17_SIZE (FDT_V16_SIZE + sizeof(fdt32_t))
  111. #endif /* _FDT_H */