]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - libfdt/fdt_sw.c
Update libfdt from device tree compiler (dtc)
[karo-tx-uboot.git] / libfdt / fdt_sw.c
index c7eea8ff39e524139df44154645509d9de0693a6..dda2de34b2e0a968463cf808b669b37e226620df 100644 (file)
@@ -2,23 +2,52 @@
  * libfdt - Flat Device Tree manipulation
  * Copyright (C) 2006 David Gibson, IBM Corporation.
  *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License
- * as published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
+ * libfdt is dual licensed: you can use it either under the terms of
+ * the GPL, or the BSD license, at your option.
  *
- * This library is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
+ *  a) This library is free software; you can redistribute it and/or
+ *     modify it under the terms of the GNU General Public License as
+ *     published by the Free Software Foundation; either version 2 of the
+ *     License, or (at your option) any later version.
  *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *     This library is distributed in the hope that it will be useful,
+ *     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *     GNU General Public License for more details.
+ *
+ *     You should have received a copy of the GNU General Public
+ *     License along with this library; if not, write to the Free
+ *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ *     MA 02110-1301 USA
+ *
+ * Alternatively,
+ *
+ *  b) Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *     1. Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *     2. Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-#include "config.h"
-#if CONFIG_OF_LIBFDT
-
 #include "libfdt_env.h"
 
 #include <fdt.h>
@@ -44,8 +73,8 @@ static void *grab_space(void *fdt, int len)
        if ((offset + len < offset) || (offset + len > spaceleft))
                return NULL;
 
-       fdt_set_header(fdt, size_dt_struct, offset + len);
-       return fdt_offset_ptr(fdt, offset, len);
+       fdt_set_size_dt_struct(fdt, offset + len);
+       return fdt_offset_ptr_w(fdt, offset, len);
 }
 
 int fdt_create(void *buf, int bufsize)
@@ -57,15 +86,15 @@ int fdt_create(void *buf, int bufsize)
 
        memset(buf, 0, bufsize);
 
-       fdt_set_header(fdt, magic, SW_MAGIC);
-       fdt_set_header(fdt, version, FDT_LAST_SUPPORTED_VERSION);
-       fdt_set_header(fdt, last_comp_version, FDT_FIRST_SUPPORTED_VERSION);
-       fdt_set_header(fdt, totalsize, bufsize);
+       fdt_set_magic(fdt, SW_MAGIC);
+       fdt_set_version(fdt, FDT_LAST_SUPPORTED_VERSION);
+       fdt_set_last_comp_version(fdt, FDT_FIRST_SUPPORTED_VERSION);
+       fdt_set_totalsize(fdt,  bufsize);
 
-       fdt_set_header(fdt, off_mem_rsvmap, ALIGN(sizeof(struct fdt_header),
-                                             sizeof(struct fdt_reserve_entry)));
-       fdt_set_header(fdt, off_dt_struct, fdt_off_mem_rsvmap(fdt));
-       fdt_set_header(fdt, off_dt_strings, bufsize);
+       fdt_set_off_mem_rsvmap(fdt, ALIGN(sizeof(struct fdt_header),
+                                         sizeof(struct fdt_reserve_entry)));
+       fdt_set_off_dt_struct(fdt, fdt_off_mem_rsvmap(fdt));
+       fdt_set_off_dt_strings(fdt, bufsize);
 
        return 0;
 }
@@ -85,11 +114,11 @@ int fdt_add_reservemap_entry(void *fdt, uint64_t addr, uint64_t size)
        if ((offset + sizeof(*re)) > fdt_totalsize(fdt))
                return -FDT_ERR_NOSPACE;
 
-       re = (struct fdt_reserve_entry *)((void *)fdt + offset);
+       re = (struct fdt_reserve_entry *)(fdt + offset);
        re->address = cpu_to_fdt64(addr);
        re->size = cpu_to_fdt64(size);
 
-       fdt_set_header(fdt, off_dt_struct, offset + sizeof(*re));
+       fdt_set_off_dt_struct(fdt, offset + sizeof(*re));
 
        return 0;
 }
@@ -152,7 +181,7 @@ static int find_add_string(void *fdt, const char *s)
                return 0; /* no more room :( */
 
        memcpy(strtab + offset, s, len);
-       fdt_set_header(fdt, size_dt_strings, strtabsize + len);
+       fdt_set_size_dt_strings(fdt, strtabsize + len);
        return offset;
 }
 
@@ -202,14 +231,14 @@ int fdt_finish(void *fdt)
        oldstroffset = fdt_totalsize(fdt) - fdt_size_dt_strings(fdt);
        newstroffset = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt);
        memmove(p + newstroffset, p + oldstroffset, fdt_size_dt_strings(fdt));
-       fdt_set_header(fdt, off_dt_strings, newstroffset);
+       fdt_set_off_dt_strings(fdt, newstroffset);
 
        /* Walk the structure, correcting string offsets */
        offset = 0;
-       while ((tag = fdt_next_tag(fdt, offset, &nextoffset, NULL)) != FDT_END) {
+       while ((tag = fdt_next_tag(fdt, offset, &nextoffset)) != FDT_END) {
                if (tag == FDT_PROP) {
-                       struct fdt_property *prop = fdt_offset_ptr(fdt, offset,
-                                                                  sizeof(*prop));
+                       struct fdt_property *prop =
+                               fdt_offset_ptr_w(fdt, offset, sizeof(*prop));
                        int nameoff;
 
                        if (! prop)
@@ -223,9 +252,7 @@ int fdt_finish(void *fdt)
        }
 
        /* Finally, adjust the header */
-       fdt_set_header(fdt, totalsize, newstroffset + fdt_size_dt_strings(fdt));
-       fdt_set_header(fdt, magic, FDT_MAGIC);
+       fdt_set_totalsize(fdt, newstroffset + fdt_size_dt_strings(fdt));
+       fdt_set_magic(fdt, FDT_MAGIC);
        return 0;
 }
-
-#endif /* CONFIG_OF_LIBFDT */