Annotation of elwix/tools/uboot_mkimage/lib/libfdt/fdt_wip.c, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * libfdt - Flat Device Tree manipulation
                      3:  * Copyright (C) 2006 David Gibson, IBM Corporation.
                      4:  *
                      5:  * libfdt is dual licensed: you can use it either under the terms of
                      6:  * the GPL, or the BSD license, at your option.
                      7:  *
                      8:  *  a) This library is free software; you can redistribute it and/or
                      9:  *     modify it under the terms of the GNU General Public License as
                     10:  *     published by the Free Software Foundation; either version 2 of the
                     11:  *     License, or (at your option) any later version.
                     12:  *
                     13:  *     This library is distributed in the hope that it will be useful,
                     14:  *     but WITHOUT ANY WARRANTY; without even the implied warranty of
                     15:  *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     16:  *     GNU General Public License for more details.
                     17:  *
                     18:  *     You should have received a copy of the GNU General Public
                     19:  *     License along with this library; if not, write to the Free
                     20:  *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
                     21:  *     MA 02110-1301 USA
                     22:  *
                     23:  * Alternatively,
                     24:  *
                     25:  *  b) Redistribution and use in source and binary forms, with or
                     26:  *     without modification, are permitted provided that the following
                     27:  *     conditions are met:
                     28:  *
                     29:  *     1. Redistributions of source code must retain the above
                     30:  *        copyright notice, this list of conditions and the following
                     31:  *        disclaimer.
                     32:  *     2. Redistributions in binary form must reproduce the above
                     33:  *        copyright notice, this list of conditions and the following
                     34:  *        disclaimer in the documentation and/or other materials
                     35:  *        provided with the distribution.
                     36:  *
                     37:  *     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
                     38:  *     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
                     39:  *     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
                     40:  *     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
                     41:  *     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
                     42:  *     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
                     43:  *     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     44:  *     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
                     45:  *     LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     46:  *     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
                     47:  *     CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
                     48:  *     OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
                     49:  *     EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     50:  */
                     51: #include "libfdt_env.h"
                     52: 
                     53: #ifndef USE_HOSTCC
                     54: #include <fdt.h>
                     55: #include <libfdt.h>
                     56: #else
                     57: #include "fdt_host.h"
                     58: #endif
                     59: 
                     60: #include "libfdt_internal.h"
                     61: 
                     62: int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name,
                     63:                        const void *val, int len)
                     64: {
                     65:        void *propval;
                     66:        int proplen;
                     67: 
                     68:        propval = fdt_getprop_w(fdt, nodeoffset, name, &proplen);
                     69:        if (! propval)
                     70:                return proplen;
                     71: 
                     72:        if (proplen != len)
                     73:                return -FDT_ERR_NOSPACE;
                     74: 
                     75:        memcpy(propval, val, len);
                     76:        return 0;
                     77: }
                     78: 
                     79: static void _fdt_nop_region(void *start, int len)
                     80: {
                     81:        uint32_t *p;
                     82: 
                     83:        for (p = start; (char *)p < ((char *)start + len); p++)
                     84:                *p = cpu_to_fdt32(FDT_NOP);
                     85: }
                     86: 
                     87: int fdt_nop_property(void *fdt, int nodeoffset, const char *name)
                     88: {
                     89:        struct fdt_property *prop;
                     90:        int len;
                     91: 
                     92:        prop = fdt_get_property_w(fdt, nodeoffset, name, &len);
                     93:        if (! prop)
                     94:                return len;
                     95: 
                     96:        _fdt_nop_region(prop, len + sizeof(*prop));
                     97: 
                     98:        return 0;
                     99: }
                    100: 
                    101: int _fdt_node_end_offset(void *fdt, int offset)
                    102: {
                    103:        int depth = 0;
                    104: 
                    105:        while ((offset >= 0) && (depth >= 0))
                    106:                offset = fdt_next_node(fdt, offset, &depth);
                    107: 
                    108:        return offset;
                    109: }
                    110: 
                    111: int fdt_nop_node(void *fdt, int nodeoffset)
                    112: {
                    113:        int endoffset;
                    114: 
                    115:        endoffset = _fdt_node_end_offset(fdt, nodeoffset);
                    116:        if (endoffset < 0)
                    117:                return endoffset;
                    118: 
                    119:        _fdt_nop_region(fdt_offset_ptr_w(fdt, nodeoffset, 0),
                    120:                        endoffset - nodeoffset);
                    121:        return 0;
                    122: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>