• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/scripts/dtc/libfdt/

Lines Matching defs:fdt

53 #include <fdt.h>
58 static int _fdt_blocks_misordered(const void *fdt,
61 return (fdt_off_mem_rsvmap(fdt) < FDT_ALIGN(sizeof(struct fdt_header), 8))
62 || (fdt_off_dt_struct(fdt) <
63 (fdt_off_mem_rsvmap(fdt) + mem_rsv_size))
64 || (fdt_off_dt_strings(fdt) <
65 (fdt_off_dt_struct(fdt) + struct_size))
66 || (fdt_totalsize(fdt) <
67 (fdt_off_dt_strings(fdt) + fdt_size_dt_strings(fdt)));
70 static int _fdt_rw_check_header(void *fdt)
72 FDT_CHECK_HEADER(fdt);
74 if (fdt_version(fdt) < 17)
76 if (_fdt_blocks_misordered(fdt, sizeof(struct fdt_reserve_entry),
77 fdt_size_dt_struct(fdt)))
79 if (fdt_version(fdt) > 17)
80 fdt_set_version(fdt, 17);
85 #define FDT_RW_CHECK_HEADER(fdt) \
88 if ((err = _fdt_rw_check_header(fdt)) != 0) \
92 static inline int _fdt_data_size(void *fdt)
94 return fdt_off_dt_strings(fdt) + fdt_size_dt_strings(fdt);
97 static int _fdt_splice(void *fdt, void *splicepoint, int oldlen, int newlen)
100 char *end = (char *)fdt + _fdt_data_size(fdt);
104 if ((end - oldlen + newlen) > ((char *)fdt + fdt_totalsize(fdt)))
110 static int _fdt_splice_mem_rsv(void *fdt, struct fdt_reserve_entry *p,
115 err = _fdt_splice(fdt, p, oldn * sizeof(*p), newn * sizeof(*p));
118 fdt_set_off_dt_struct(fdt, fdt_off_dt_struct(fdt) + delta);
119 fdt_set_off_dt_strings(fdt, fdt_off_dt_strings(fdt) + delta);
123 static int _fdt_splice_struct(void *fdt, void *p,
129 if ((err = _fdt_splice(fdt, p, oldlen, newlen)))
132 fdt_set_size_dt_struct(fdt, fdt_size_dt_struct(fdt) + delta);
133 fdt_set_off_dt_strings(fdt, fdt_off_dt_strings(fdt) + delta);
137 static int _fdt_splice_string(void *fdt, int newlen)
139 void *p = (char *)fdt
140 + fdt_off_dt_strings(fdt) + fdt_size_dt_strings(fdt);
143 if ((err = _fdt_splice(fdt, p, 0, newlen)))
146 fdt_set_size_dt_strings(fdt, fdt_size_dt_strings(fdt) + newlen);
150 static int _fdt_find_add_string(void *fdt, const char *s)
152 char *strtab = (char *)fdt + fdt_off_dt_strings(fdt);
158 p = _fdt_find_string(strtab, fdt_size_dt_strings(fdt), s);
163 new = strtab + fdt_size_dt_strings(fdt);
164 err = _fdt_splice_string(fdt, len);
172 int fdt_add_mem_rsv(void *fdt, uint64_t address, uint64_t size)
177 FDT_RW_CHECK_HEADER(fdt);
179 re = _fdt_mem_rsv_w(fdt, fdt_num_mem_rsv(fdt));
180 err = _fdt_splice_mem_rsv(fdt, re, 0, 1);
189 int fdt_del_mem_rsv(void *fdt, int n)
191 struct fdt_reserve_entry *re = _fdt_mem_rsv_w(fdt, n);
194 FDT_RW_CHECK_HEADER(fdt);
196 if (n >= fdt_num_mem_rsv(fdt))
199 err = _fdt_splice_mem_rsv(fdt, re, 1, 0);
205 static int _fdt_resize_property(void *fdt, int nodeoffset, const char *name,
211 *prop = fdt_get_property_w(fdt, nodeoffset, name, &oldlen);
215 if ((err = _fdt_splice_struct(fdt, (*prop)->data, FDT_TAGALIGN(oldlen),
223 static int _fdt_add_property(void *fdt, int nodeoffset, const char *name,
231 if ((nextoffset = _fdt_check_node_offset(fdt, nodeoffset)) < 0)
234 namestroff = _fdt_find_add_string(fdt, name);
238 *prop = _fdt_offset_ptr_w(fdt, nextoffset);
241 err = _fdt_splice_struct(fdt, *prop, 0, proplen);
251 int fdt_set_name(void *fdt, int nodeoffset, const char *name)
257 FDT_RW_CHECK_HEADER(fdt);
259 namep = (char *)(uintptr_t)fdt_get_name(fdt, nodeoffset, &oldlen);
265 err = _fdt_splice_struct(fdt, namep, FDT_TAGALIGN(oldlen+1),
274 int fdt_setprop(void *fdt, int nodeoffset, const char *name,
280 FDT_RW_CHECK_HEADER(fdt);
282 err = _fdt_resize_property(fdt, nodeoffset, name, len, &prop);
284 err = _fdt_add_property(fdt, nodeoffset, name, len, &prop);
292 int fdt_delprop(void *fdt, int nodeoffset, const char *name)
297 FDT_RW_CHECK_HEADER(fdt);
299 prop = fdt_get_property_w(fdt, nodeoffset, name, &len);
304 return _fdt_splice_struct(fdt, prop, proplen, 0);
307 int fdt_add_subnode_namelen(void *fdt, int parentoffset,
317 FDT_RW_CHECK_HEADER(fdt);
319 offset = fdt_subnode_offset_namelen(fdt, parentoffset, name, namelen);
326 fdt_next_tag(fdt, parentoffset, &nextoffset); /* skip the BEGIN_NODE */
329 tag = fdt_next_tag(fdt, offset, &nextoffset);
332 nh = _fdt_offset_ptr_w(fdt, offset);
335 err = _fdt_splice_struct(fdt, nh, 0, nodelen);
348 int fdt_add_subnode(void *fdt, int parentoffset, const char *name)
350 return fdt_add_subnode_namelen(fdt, parentoffset, name, strlen(name));
353 int fdt_del_node(void *fdt, int nodeoffset)
357 FDT_RW_CHECK_HEADER(fdt);
359 endoffset = _fdt_node_end_offset(fdt, nodeoffset);
363 return _fdt_splice_struct(fdt, _fdt_offset_ptr_w(fdt, nodeoffset),
389 int fdt_open_into(const void *fdt, void *buf, int bufsize)
394 const char *fdtstart = fdt;
395 const char *fdtend = fdtstart + fdt_totalsize(fdt);
398 FDT_CHECK_HEADER(fdt);
400 mem_rsv_size = (fdt_num_mem_rsv(fdt)+1)
403 if (fdt_version(fdt) >= 17) {
404 struct_size = fdt_size_dt_struct(fdt);
407 while (fdt_next_tag(fdt, struct_size, &struct_size) != FDT_END)
411 if (!_fdt_blocks_misordered(fdt, mem_rsv_size, struct_size)) {
413 err = fdt_move(fdt, buf, bufsize);
424 + struct_size + fdt_size_dt_strings(fdt);
439 _fdt_packblocks(fdt, tmp, mem_rsv_size, struct_size);
446 fdt_set_boot_cpuid_phys(buf, fdt_boot_cpuid_phys(fdt));
451 int fdt_pack(void *fdt)
455 FDT_RW_CHECK_HEADER(fdt);
457 mem_rsv_size = (fdt_num_mem_rsv(fdt)+1)
459 _fdt_packblocks(fdt, fdt, mem_rsv_size, fdt_size_dt_struct(fdt));
460 fdt_set_totalsize(fdt, _fdt_data_size(fdt));