root/scripts/dtc/libfdt/fdt_wip.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. fdt_setprop_inplace_namelen_partial
  2. fdt_setprop_inplace
  3. fdt_nop_region_
  4. fdt_nop_property
  5. fdt_node_end_offset_
  6. fdt_nop_node

   1 // SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
   2 /*
   3  * libfdt - Flat Device Tree manipulation
   4  * Copyright (C) 2006 David Gibson, IBM Corporation.
   5  */
   6 #include "libfdt_env.h"
   7 
   8 #include <fdt.h>
   9 #include <libfdt.h>
  10 
  11 #include "libfdt_internal.h"
  12 
  13 int fdt_setprop_inplace_namelen_partial(void *fdt, int nodeoffset,
  14                                         const char *name, int namelen,
  15                                         uint32_t idx, const void *val,
  16                                         int len)
  17 {
  18         void *propval;
  19         int proplen;
  20 
  21         propval = fdt_getprop_namelen_w(fdt, nodeoffset, name, namelen,
  22                                         &proplen);
  23         if (!propval)
  24                 return proplen;
  25 
  26         if (proplen < (len + idx))
  27                 return -FDT_ERR_NOSPACE;
  28 
  29         memcpy((char *)propval + idx, val, len);
  30         return 0;
  31 }
  32 
  33 int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name,
  34                         const void *val, int len)
  35 {
  36         const void *propval;
  37         int proplen;
  38 
  39         propval = fdt_getprop(fdt, nodeoffset, name, &proplen);
  40         if (!propval)
  41                 return proplen;
  42 
  43         if (proplen != len)
  44                 return -FDT_ERR_NOSPACE;
  45 
  46         return fdt_setprop_inplace_namelen_partial(fdt, nodeoffset, name,
  47                                                    strlen(name), 0,
  48                                                    val, len);
  49 }
  50 
  51 static void fdt_nop_region_(void *start, int len)
  52 {
  53         fdt32_t *p;
  54 
  55         for (p = start; (char *)p < ((char *)start + len); p++)
  56                 *p = cpu_to_fdt32(FDT_NOP);
  57 }
  58 
  59 int fdt_nop_property(void *fdt, int nodeoffset, const char *name)
  60 {
  61         struct fdt_property *prop;
  62         int len;
  63 
  64         prop = fdt_get_property_w(fdt, nodeoffset, name, &len);
  65         if (!prop)
  66                 return len;
  67 
  68         fdt_nop_region_(prop, len + sizeof(*prop));
  69 
  70         return 0;
  71 }
  72 
  73 int fdt_node_end_offset_(void *fdt, int offset)
  74 {
  75         int depth = 0;
  76 
  77         while ((offset >= 0) && (depth >= 0))
  78                 offset = fdt_next_node(fdt, offset, &depth);
  79 
  80         return offset;
  81 }
  82 
  83 int fdt_nop_node(void *fdt, int nodeoffset)
  84 {
  85         int endoffset;
  86 
  87         endoffset = fdt_node_end_offset_(fdt, nodeoffset);
  88         if (endoffset < 0)
  89                 return endoffset;
  90 
  91         fdt_nop_region_(fdt_offset_ptr_w(fdt, nodeoffset, 0),
  92                         endoffset - nodeoffset);
  93         return 0;
  94 }

/* [<][>][^][v][top][bottom][index][help] */