19537Satgutier@umich.edu/* 29537Satgutier@umich.edu * libfdt - Flat Device Tree manipulation 39537Satgutier@umich.edu * Copyright (C) 2006 David Gibson, IBM Corporation. 49537Satgutier@umich.edu * 59537Satgutier@umich.edu * Redistribution and use in source and binary forms, with or 69537Satgutier@umich.edu * without modification, are permitted provided that the following 79537Satgutier@umich.edu * conditions are met: 89537Satgutier@umich.edu * 99537Satgutier@umich.edu * 1. Redistributions of source code must retain the above 109537Satgutier@umich.edu * copyright notice, this list of conditions and the following 119537Satgutier@umich.edu * disclaimer. 129537Satgutier@umich.edu * 2. Redistributions in binary form must reproduce the above 139537Satgutier@umich.edu * copyright notice, this list of conditions and the following 149537Satgutier@umich.edu * disclaimer in the documentation and/or other materials 159537Satgutier@umich.edu * provided with the distribution. 169537Satgutier@umich.edu * 179537Satgutier@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 189537Satgutier@umich.edu * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 199537Satgutier@umich.edu * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 209537Satgutier@umich.edu * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 219537Satgutier@umich.edu * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 229537Satgutier@umich.edu * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 239537Satgutier@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 249537Satgutier@umich.edu * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 259537Satgutier@umich.edu * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 269537Satgutier@umich.edu * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 279537Satgutier@umich.edu * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 289537Satgutier@umich.edu * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 299537Satgutier@umich.edu * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 309537Satgutier@umich.edu */ 319537Satgutier@umich.edu#include <fdt.h> 329537Satgutier@umich.edu#include <libfdt.h> 339537Satgutier@umich.edu 349537Satgutier@umich.edu#include "libfdt_env.h" 359537Satgutier@umich.edu#include "libfdt_internal.h" 369537Satgutier@umich.edu 379537Satgutier@umich.eduint fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name, 389537Satgutier@umich.edu const void *val, int len) 399537Satgutier@umich.edu{ 409537Satgutier@umich.edu void *propval; 419537Satgutier@umich.edu int proplen; 429537Satgutier@umich.edu 439537Satgutier@umich.edu propval = fdt_getprop_w(fdt, nodeoffset, name, &proplen); 449537Satgutier@umich.edu if (! propval) 459537Satgutier@umich.edu return proplen; 469537Satgutier@umich.edu 479537Satgutier@umich.edu if (proplen != len) 489537Satgutier@umich.edu return -FDT_ERR_NOSPACE; 499537Satgutier@umich.edu 509537Satgutier@umich.edu memcpy(propval, val, len); 519537Satgutier@umich.edu return 0; 529537Satgutier@umich.edu} 539537Satgutier@umich.edu 549537Satgutier@umich.edustatic void _fdt_nop_region(void *start, int len) 559537Satgutier@umich.edu{ 569537Satgutier@umich.edu fdt32_t *p; 579537Satgutier@umich.edu 589537Satgutier@umich.edu for (p = start; (char *)p < ((char *)start + len); p++) 599537Satgutier@umich.edu *p = cpu_to_fdt32(FDT_NOP); 609537Satgutier@umich.edu} 619537Satgutier@umich.edu 629537Satgutier@umich.eduint fdt_nop_property(void *fdt, int nodeoffset, const char *name) 639537Satgutier@umich.edu{ 649537Satgutier@umich.edu struct fdt_property *prop; 659537Satgutier@umich.edu int len; 669537Satgutier@umich.edu 679537Satgutier@umich.edu prop = fdt_get_property_w(fdt, nodeoffset, name, &len); 689537Satgutier@umich.edu if (! prop) 699537Satgutier@umich.edu return len; 709537Satgutier@umich.edu 719537Satgutier@umich.edu _fdt_nop_region(prop, len + sizeof(*prop)); 729537Satgutier@umich.edu 739537Satgutier@umich.edu return 0; 749537Satgutier@umich.edu} 759537Satgutier@umich.edu 769537Satgutier@umich.eduint _fdt_node_end_offset(void *fdt, int offset) 779537Satgutier@umich.edu{ 789537Satgutier@umich.edu int depth = 0; 799537Satgutier@umich.edu 809537Satgutier@umich.edu while ((offset >= 0) && (depth >= 0)) 819537Satgutier@umich.edu offset = fdt_next_node(fdt, offset, &depth); 829537Satgutier@umich.edu 839537Satgutier@umich.edu return offset; 849537Satgutier@umich.edu} 859537Satgutier@umich.edu 869537Satgutier@umich.eduint fdt_nop_node(void *fdt, int nodeoffset) 879537Satgutier@umich.edu{ 889537Satgutier@umich.edu int endoffset; 899537Satgutier@umich.edu 909537Satgutier@umich.edu endoffset = _fdt_node_end_offset(fdt, nodeoffset); 919537Satgutier@umich.edu if (endoffset < 0) 929537Satgutier@umich.edu return endoffset; 939537Satgutier@umich.edu 949537Satgutier@umich.edu _fdt_nop_region(fdt_offset_ptr_w(fdt, nodeoffset, 0), 959537Satgutier@umich.edu endoffset - nodeoffset); 969537Satgutier@umich.edu return 0; 979537Satgutier@umich.edu} 98