]> git.sur5r.net Git - u-boot/blobdiff - libfdt/fdt_rw.c
Clean up smsc911x driver
[u-boot] / libfdt / fdt_rw.c
index dfe5628a33a011b37dd43c3c849c52b0110f01d5..8609fa7d76f521c631ac3aaace7f6a5ea8a6dac6 100644 (file)
  */
 #include "libfdt_env.h"
 
+#ifndef USE_HOSTCC
 #include <fdt.h>
 #include <libfdt.h>
+#else
+#include "fdt_host.h"
+#endif
 
 #include "libfdt_internal.h"
 
@@ -69,10 +73,8 @@ static int _blocks_misordered(const void *fdt,
 
 static int rw_check_header(void *fdt)
 {
-       int err;
+       CHECK_HEADER(fdt);
 
-       if ((err = fdt_check_header(fdt)))
-               return err;
        if (fdt_version(fdt) < 17)
                return -FDT_ERR_BADVERSION;
        if (_blocks_misordered(fdt, sizeof(struct fdt_reserve_entry),
@@ -252,6 +254,30 @@ static int _add_property(void *fdt, int nodeoffset, const char *name, int len,
        return 0;
 }
 
+int fdt_set_name(void *fdt, int nodeoffset, const char *name)
+{
+       char *namep;
+       int oldlen, newlen;
+       int err;
+
+       if ((err = rw_check_header(fdt)))
+               return err;
+
+       namep = (char *)fdt_get_name(fdt, nodeoffset, &oldlen);
+       if (!namep)
+               return oldlen;
+
+       newlen = strlen(name);
+
+       err = _blob_splice_struct(fdt, namep, ALIGN(oldlen+1, FDT_TAGSIZE),
+                                 ALIGN(newlen+1, FDT_TAGSIZE));
+       if (err)
+               return err;
+
+       memcpy(namep, name, newlen+1);
+       return 0;
+}
+
 int fdt_setprop(void *fdt, int nodeoffset, const char *name,
                const void *val, int len)
 {
@@ -309,7 +335,7 @@ int fdt_add_subnode_namelen(void *fdt, int parentoffset,
        do {
                offset = nextoffset;
                tag = fdt_next_tag(fdt, offset, &nextoffset);
-       } while (tag == FDT_PROP);
+       } while ((tag == FDT_PROP) || (tag == FDT_NOP));
 
        nh = _fdt_offset_ptr_w(fdt, offset);
        nodelen = sizeof(*nh) + ALIGN(namelen+1, FDT_TAGSIZE) + FDT_TAGSIZE;
@@ -358,12 +384,12 @@ static void _packblocks(const void *fdt, void *buf,
        memmove(buf + mem_rsv_off, fdt + fdt_off_mem_rsvmap(fdt), mem_rsv_size);
        fdt_set_off_mem_rsvmap(buf, mem_rsv_off);
 
-       memcpy(buf + struct_off, fdt + fdt_off_dt_struct(fdt), struct_size);
+       memmove(buf + struct_off, fdt + fdt_off_dt_struct(fdt), struct_size);
        fdt_set_off_dt_struct(buf, struct_off);
        fdt_set_size_dt_struct(buf, struct_size);
 
-       memcpy(buf + strings_off, fdt + fdt_off_dt_strings(fdt),
-              fdt_size_dt_strings(fdt));
+       memmove(buf + strings_off, fdt + fdt_off_dt_strings(fdt),
+               fdt_size_dt_strings(fdt));
        fdt_set_off_dt_strings(buf, strings_off);
        fdt_set_size_dt_strings(buf, fdt_size_dt_strings(fdt));
 }
@@ -375,9 +401,7 @@ int fdt_open_into(const void *fdt, void *buf, int bufsize)
        int newsize;
        void *tmp;
 
-       err = fdt_check_header(fdt);
-       if (err)
-               return err;
+       CHECK_HEADER(fdt);
 
        mem_rsv_size = (fdt_num_mem_rsv(fdt)+1)
                * sizeof(struct fdt_reserve_entry);