diff options
Diffstat (limited to 'libfdt/fdt_sw.c')
| -rw-r--r-- | libfdt/fdt_sw.c | 92 | 
1 files changed, 62 insertions, 30 deletions
| diff --git a/libfdt/fdt_sw.c b/libfdt/fdt_sw.c index 672f4ddd9..dda2de34b 100644 --- a/libfdt/fdt_sw.c +++ b/libfdt/fdt_sw.c @@ -2,19 +2,51 @@   * 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 "libfdt_env.h" @@ -41,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) @@ -54,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;  } @@ -82,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;  } @@ -149,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;  } @@ -199,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) @@ -220,7 +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;  } |