linux/include/linux/of.h
<<
>>
Prefs
   1#ifndef _LINUX_OF_H
   2#define _LINUX_OF_H
   3/*
   4 * Definitions for talking to the Open Firmware PROM on
   5 * Power Macintosh and other computers.
   6 *
   7 * Copyright (C) 1996-2005 Paul Mackerras.
   8 *
   9 * Updates for PPC64 by Peter Bergner & David Engebretsen, IBM Corp.
  10 * Updates for SPARC64 by David S. Miller
  11 * Derived from PowerPC and Sparc prom.h files by Stephen Rothwell, IBM Corp.
  12 *
  13 * This program is free software; you can redistribute it and/or
  14 * modify it under the terms of the GNU General Public License
  15 * as published by the Free Software Foundation; either version
  16 * 2 of the License, or (at your option) any later version.
  17 */
  18#include <linux/types.h>
  19#include <linux/bitops.h>
  20#include <linux/errno.h>
  21#include <linux/kobject.h>
  22#include <linux/mod_devicetable.h>
  23#include <linux/spinlock.h>
  24#include <linux/topology.h>
  25#include <linux/notifier.h>
  26#include <linux/property.h>
  27#include <linux/list.h>
  28
  29#include <asm/byteorder.h>
  30#include <asm/errno.h>
  31
  32typedef u32 phandle;
  33typedef u32 ihandle;
  34
  35struct property {
  36        char    *name;
  37        int     length;
  38        void    *value;
  39        struct property *next;
  40        unsigned long _flags;
  41        unsigned int unique_id;
  42        struct bin_attribute attr;
  43};
  44
  45#if defined(CONFIG_SPARC)
  46struct of_irq_controller;
  47#endif
  48
  49struct device_node {
  50        const char *name;
  51        const char *type;
  52        phandle phandle;
  53        const char *full_name;
  54        struct fwnode_handle fwnode;
  55
  56        struct  property *properties;
  57        struct  property *deadprops;    /* removed properties */
  58        struct  device_node *parent;
  59        struct  device_node *child;
  60        struct  device_node *sibling;
  61        struct  kobject kobj;
  62        unsigned long _flags;
  63        void    *data;
  64#if defined(CONFIG_SPARC)
  65        const char *path_component_name;
  66        unsigned int unique_id;
  67        struct of_irq_controller *irq_trans;
  68#endif
  69};
  70
  71#define MAX_PHANDLE_ARGS 16
  72struct of_phandle_args {
  73        struct device_node *np;
  74        int args_count;
  75        uint32_t args[MAX_PHANDLE_ARGS];
  76};
  77
  78struct of_phandle_iterator {
  79        /* Common iterator information */
  80        const char *cells_name;
  81        int cell_count;
  82        const struct device_node *parent;
  83
  84        /* List size information */
  85        const __be32 *list_end;
  86        const __be32 *phandle_end;
  87
  88        /* Current position state */
  89        const __be32 *cur;
  90        uint32_t cur_count;
  91        phandle phandle;
  92        struct device_node *node;
  93};
  94
  95struct of_reconfig_data {
  96        struct device_node      *dn;
  97        struct property         *prop;
  98        struct property         *old_prop;
  99};
 100
 101/* initialize a node */
 102extern struct kobj_type of_node_ktype;
 103extern const struct fwnode_operations of_fwnode_ops;
 104static inline void of_node_init(struct device_node *node)
 105{
 106        kobject_init(&node->kobj, &of_node_ktype);
 107        node->fwnode.ops = &of_fwnode_ops;
 108}
 109
 110/* true when node is initialized */
 111static inline int of_node_is_initialized(struct device_node *node)
 112{
 113        return node && node->kobj.state_initialized;
 114}
 115
 116/* true when node is attached (i.e. present on sysfs) */
 117static inline int of_node_is_attached(struct device_node *node)
 118{
 119        return node && node->kobj.state_in_sysfs;
 120}
 121
 122#ifdef CONFIG_OF_DYNAMIC
 123extern struct device_node *of_node_get(struct device_node *node);
 124extern void of_node_put(struct device_node *node);
 125#else /* CONFIG_OF_DYNAMIC */
 126/* Dummy ref counting routines - to be implemented later */
 127static inline struct device_node *of_node_get(struct device_node *node)
 128{
 129        return node;
 130}
 131static inline void of_node_put(struct device_node *node) { }
 132#endif /* !CONFIG_OF_DYNAMIC */
 133
 134/* Pointer for first entry in chain of all nodes. */
 135extern struct device_node *of_root;
 136extern struct device_node *of_chosen;
 137extern struct device_node *of_aliases;
 138extern struct device_node *of_stdout;
 139extern raw_spinlock_t devtree_lock;
 140
 141/* flag descriptions (need to be visible even when !CONFIG_OF) */
 142#define OF_DYNAMIC      1 /* node and properties were allocated via kmalloc */
 143#define OF_DETACHED     2 /* node has been detached from the device tree */
 144#define OF_POPULATED    3 /* device already created for the node */
 145#define OF_POPULATED_BUS        4 /* of_platform_populate recursed to children of this node */
 146
 147#define OF_BAD_ADDR     ((u64)-1)
 148
 149#ifdef CONFIG_OF
 150void of_core_init(void);
 151
 152static inline bool is_of_node(const struct fwnode_handle *fwnode)
 153{
 154        return !IS_ERR_OR_NULL(fwnode) && fwnode->ops == &of_fwnode_ops;
 155}
 156
 157#define to_of_node(__fwnode)                                            \
 158        ({                                                              \
 159                typeof(__fwnode) __to_of_node_fwnode = (__fwnode);      \
 160                                                                        \
 161                is_of_node(__to_of_node_fwnode) ?                       \
 162                        container_of(__to_of_node_fwnode,               \
 163                                     struct device_node, fwnode) :      \
 164                        NULL;                                           \
 165        })
 166
 167#define of_fwnode_handle(node)                                          \
 168        ({                                                              \
 169                typeof(node) __of_fwnode_handle_node = (node);          \
 170                                                                        \
 171                __of_fwnode_handle_node ?                               \
 172                        &__of_fwnode_handle_node->fwnode : NULL;        \
 173        })
 174
 175static inline bool of_have_populated_dt(void)
 176{
 177        return of_root != NULL;
 178}
 179
 180static inline bool of_node_is_root(const struct device_node *node)
 181{
 182        return node && (node->parent == NULL);
 183}
 184
 185static inline int of_node_check_flag(struct device_node *n, unsigned long flag)
 186{
 187        return test_bit(flag, &n->_flags);
 188}
 189
 190static inline int of_node_test_and_set_flag(struct device_node *n,
 191                                            unsigned long flag)
 192{
 193        return test_and_set_bit(flag, &n->_flags);
 194}
 195
 196static inline void of_node_set_flag(struct device_node *n, unsigned long flag)
 197{
 198        set_bit(flag, &n->_flags);
 199}
 200
 201static inline void of_node_clear_flag(struct device_node *n, unsigned long flag)
 202{
 203        clear_bit(flag, &n->_flags);
 204}
 205
 206static inline int of_property_check_flag(struct property *p, unsigned long flag)
 207{
 208        return test_bit(flag, &p->_flags);
 209}
 210
 211static inline void of_property_set_flag(struct property *p, unsigned long flag)
 212{
 213        set_bit(flag, &p->_flags);
 214}
 215
 216static inline void of_property_clear_flag(struct property *p, unsigned long flag)
 217{
 218        clear_bit(flag, &p->_flags);
 219}
 220
 221extern struct device_node *__of_find_all_nodes(struct device_node *prev);
 222extern struct device_node *of_find_all_nodes(struct device_node *prev);
 223
 224/*
 225 * OF address retrieval & translation
 226 */
 227
 228/* Helper to read a big number; size is in cells (not bytes) */
 229static inline u64 of_read_number(const __be32 *cell, int size)
 230{
 231        u64 r = 0;
 232        while (size--)
 233                r = (r << 32) | be32_to_cpu(*(cell++));
 234        return r;
 235}
 236
 237/* Like of_read_number, but we want an unsigned long result */
 238static inline unsigned long of_read_ulong(const __be32 *cell, int size)
 239{
 240        /* toss away upper bits if unsigned long is smaller than u64 */
 241        return of_read_number(cell, size);
 242}
 243
 244#if defined(CONFIG_SPARC)
 245#include <asm/prom.h>
 246#endif
 247
 248/* Default #address and #size cells.  Allow arch asm/prom.h to override */
 249#if !defined(OF_ROOT_NODE_ADDR_CELLS_DEFAULT)
 250#define OF_ROOT_NODE_ADDR_CELLS_DEFAULT 1
 251#define OF_ROOT_NODE_SIZE_CELLS_DEFAULT 1
 252#endif
 253
 254#define OF_IS_DYNAMIC(x) test_bit(OF_DYNAMIC, &x->_flags)
 255#define OF_MARK_DYNAMIC(x) set_bit(OF_DYNAMIC, &x->_flags)
 256
 257static inline const char *of_node_full_name(const struct device_node *np)
 258{
 259        return np ? np->full_name : "<no-node>";
 260}
 261
 262#define for_each_of_allnodes_from(from, dn) \
 263        for (dn = __of_find_all_nodes(from); dn; dn = __of_find_all_nodes(dn))
 264#define for_each_of_allnodes(dn) for_each_of_allnodes_from(NULL, dn)
 265extern struct device_node *of_find_node_by_name(struct device_node *from,
 266        const char *name);
 267extern struct device_node *of_find_node_by_type(struct device_node *from,
 268        const char *type);
 269extern struct device_node *of_find_compatible_node(struct device_node *from,
 270        const char *type, const char *compat);
 271extern struct device_node *of_find_matching_node_and_match(
 272        struct device_node *from,
 273        const struct of_device_id *matches,
 274        const struct of_device_id **match);
 275
 276extern struct device_node *of_find_node_opts_by_path(const char *path,
 277        const char **opts);
 278static inline struct device_node *of_find_node_by_path(const char *path)
 279{
 280        return of_find_node_opts_by_path(path, NULL);
 281}
 282
 283extern struct device_node *of_find_node_by_phandle(phandle handle);
 284extern struct device_node *of_get_parent(const struct device_node *node);
 285extern struct device_node *of_get_next_parent(struct device_node *node);
 286extern struct device_node *of_get_next_child(const struct device_node *node,
 287                                             struct device_node *prev);
 288extern struct device_node *of_get_next_available_child(
 289        const struct device_node *node, struct device_node *prev);
 290
 291extern struct device_node *of_get_child_by_name(const struct device_node *node,
 292                                        const char *name);
 293
 294/* cache lookup */
 295extern struct device_node *of_find_next_cache_node(const struct device_node *);
 296extern int of_find_last_cache_level(unsigned int cpu);
 297extern struct device_node *of_find_node_with_property(
 298        struct device_node *from, const char *prop_name);
 299
 300extern struct property *of_find_property(const struct device_node *np,
 301                                         const char *name,
 302                                         int *lenp);
 303extern int of_property_count_elems_of_size(const struct device_node *np,
 304                                const char *propname, int elem_size);
 305extern int of_property_read_u32_index(const struct device_node *np,
 306                                       const char *propname,
 307                                       u32 index, u32 *out_value);
 308extern int of_property_read_u64_index(const struct device_node *np,
 309                                       const char *propname,
 310                                       u32 index, u64 *out_value);
 311extern int of_property_read_variable_u8_array(const struct device_node *np,
 312                                        const char *propname, u8 *out_values,
 313                                        size_t sz_min, size_t sz_max);
 314extern int of_property_read_variable_u16_array(const struct device_node *np,
 315                                        const char *propname, u16 *out_values,
 316                                        size_t sz_min, size_t sz_max);
 317extern int of_property_read_variable_u32_array(const struct device_node *np,
 318                                        const char *propname,
 319                                        u32 *out_values,
 320                                        size_t sz_min,
 321                                        size_t sz_max);
 322extern int of_property_read_u64(const struct device_node *np,
 323                                const char *propname, u64 *out_value);
 324extern int of_property_read_variable_u64_array(const struct device_node *np,
 325                                        const char *propname,
 326                                        u64 *out_values,
 327                                        size_t sz_min,
 328                                        size_t sz_max);
 329
 330extern int of_property_read_string(const struct device_node *np,
 331                                   const char *propname,
 332                                   const char **out_string);
 333extern int of_property_match_string(const struct device_node *np,
 334                                    const char *propname,
 335                                    const char *string);
 336extern int of_property_read_string_helper(const struct device_node *np,
 337                                              const char *propname,
 338                                              const char **out_strs, size_t sz, int index);
 339extern int of_device_is_compatible(const struct device_node *device,
 340                                   const char *);
 341extern int of_device_compatible_match(struct device_node *device,
 342                                      const char *const *compat);
 343extern bool of_device_is_available(const struct device_node *device);
 344extern bool of_device_is_big_endian(const struct device_node *device);
 345extern const void *of_get_property(const struct device_node *node,
 346                                const char *name,
 347                                int *lenp);
 348extern struct device_node *of_get_cpu_node(int cpu, unsigned int *thread);
 349#define for_each_property_of_node(dn, pp) \
 350        for (pp = dn->properties; pp != NULL; pp = pp->next)
 351
 352extern int of_n_addr_cells(struct device_node *np);
 353extern int of_n_size_cells(struct device_node *np);
 354extern const struct of_device_id *of_match_node(
 355        const struct of_device_id *matches, const struct device_node *node);
 356extern int of_modalias_node(struct device_node *node, char *modalias, int len);
 357extern void of_print_phandle_args(const char *msg, const struct of_phandle_args *args);
 358extern struct device_node *of_parse_phandle(const struct device_node *np,
 359                                            const char *phandle_name,
 360                                            int index);
 361extern int of_parse_phandle_with_args(const struct device_node *np,
 362        const char *list_name, const char *cells_name, int index,
 363        struct of_phandle_args *out_args);
 364extern int of_parse_phandle_with_fixed_args(const struct device_node *np,
 365        const char *list_name, int cells_count, int index,
 366        struct of_phandle_args *out_args);
 367extern int of_count_phandle_with_args(const struct device_node *np,
 368        const char *list_name, const char *cells_name);
 369
 370/* phandle iterator functions */
 371extern int of_phandle_iterator_init(struct of_phandle_iterator *it,
 372                                    const struct device_node *np,
 373                                    const char *list_name,
 374                                    const char *cells_name,
 375                                    int cell_count);
 376
 377extern int of_phandle_iterator_next(struct of_phandle_iterator *it);
 378extern int of_phandle_iterator_args(struct of_phandle_iterator *it,
 379                                    uint32_t *args,
 380                                    int size);
 381
 382extern void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align));
 383extern int of_alias_get_id(struct device_node *np, const char *stem);
 384extern int of_alias_get_highest_id(const char *stem);
 385
 386extern int of_machine_is_compatible(const char *compat);
 387
 388extern int of_add_property(struct device_node *np, struct property *prop);
 389extern int of_remove_property(struct device_node *np, struct property *prop);
 390extern int of_update_property(struct device_node *np, struct property *newprop);
 391
 392/* For updating the device tree at runtime */
 393#define OF_RECONFIG_ATTACH_NODE         0x0001
 394#define OF_RECONFIG_DETACH_NODE         0x0002
 395#define OF_RECONFIG_ADD_PROPERTY        0x0003
 396#define OF_RECONFIG_REMOVE_PROPERTY     0x0004
 397#define OF_RECONFIG_UPDATE_PROPERTY     0x0005
 398
 399extern int of_attach_node(struct device_node *);
 400extern int of_detach_node(struct device_node *);
 401
 402#define of_match_ptr(_ptr)      (_ptr)
 403
 404/**
 405 * of_property_read_u8_array - Find and read an array of u8 from a property.
 406 *
 407 * @np:         device node from which the property value is to be read.
 408 * @propname:   name of the property to be searched.
 409 * @out_values: pointer to return value, modified only if return value is 0.
 410 * @sz:         number of array elements to read
 411 *
 412 * Search for a property in a device node and read 8-bit value(s) from
 413 * it. Returns 0 on success, -EINVAL if the property does not exist,
 414 * -ENODATA if property does not have a value, and -EOVERFLOW if the
 415 * property data isn't large enough.
 416 *
 417 * dts entry of array should be like:
 418 *      property = /bits/ 8 <0x50 0x60 0x70>;
 419 *
 420 * The out_values is modified only if a valid u8 value can be decoded.
 421 */
 422static inline int of_property_read_u8_array(const struct device_node *np,
 423                                            const char *propname,
 424                                            u8 *out_values, size_t sz)
 425{
 426        int ret = of_property_read_variable_u8_array(np, propname, out_values,
 427                                                     sz, 0);
 428        if (ret >= 0)
 429                return 0;
 430        else
 431                return ret;
 432}
 433
 434/**
 435 * of_property_read_u16_array - Find and read an array of u16 from a property.
 436 *
 437 * @np:         device node from which the property value is to be read.
 438 * @propname:   name of the property to be searched.
 439 * @out_values: pointer to return value, modified only if return value is 0.
 440 * @sz:         number of array elements to read
 441 *
 442 * Search for a property in a device node and read 16-bit value(s) from
 443 * it. Returns 0 on success, -EINVAL if the property does not exist,
 444 * -ENODATA if property does not have a value, and -EOVERFLOW if the
 445 * property data isn't large enough.
 446 *
 447 * dts entry of array should be like:
 448 *      property = /bits/ 16 <0x5000 0x6000 0x7000>;
 449 *
 450 * The out_values is modified only if a valid u16 value can be decoded.
 451 */
 452static inline int of_property_read_u16_array(const struct device_node *np,
 453                                             const char *propname,
 454                                             u16 *out_values, size_t sz)
 455{
 456        int ret = of_property_read_variable_u16_array(np, propname, out_values,
 457                                                      sz, 0);
 458        if (ret >= 0)
 459                return 0;
 460        else
 461                return ret;
 462}
 463
 464/**
 465 * of_property_read_u32_array - Find and read an array of 32 bit integers
 466 * from a property.
 467 *
 468 * @np:         device node from which the property value is to be read.
 469 * @propname:   name of the property to be searched.
 470 * @out_values: pointer to return value, modified only if return value is 0.
 471 * @sz:         number of array elements to read
 472 *
 473 * Search for a property in a device node and read 32-bit value(s) from
 474 * it. Returns 0 on success, -EINVAL if the property does not exist,
 475 * -ENODATA if property does not have a value, and -EOVERFLOW if the
 476 * property data isn't large enough.
 477 *
 478 * The out_values is modified only if a valid u32 value can be decoded.
 479 */
 480static inline int of_property_read_u32_array(const struct device_node *np,
 481                                             const char *propname,
 482                                             u32 *out_values, size_t sz)
 483{
 484        int ret = of_property_read_variable_u32_array(np, propname, out_values,
 485                                                      sz, 0);
 486        if (ret >= 0)
 487                return 0;
 488        else
 489                return ret;
 490}
 491
 492/**
 493 * of_property_read_u64_array - Find and read an array of 64 bit integers
 494 * from a property.
 495 *
 496 * @np:         device node from which the property value is to be read.
 497 * @propname:   name of the property to be searched.
 498 * @out_values: pointer to return value, modified only if return value is 0.
 499 * @sz:         number of array elements to read
 500 *
 501 * Search for a property in a device node and read 64-bit value(s) from
 502 * it. Returns 0 on success, -EINVAL if the property does not exist,
 503 * -ENODATA if property does not have a value, and -EOVERFLOW if the
 504 * property data isn't large enough.
 505 *
 506 * The out_values is modified only if a valid u64 value can be decoded.
 507 */
 508static inline int of_property_read_u64_array(const struct device_node *np,
 509                                             const char *propname,
 510                                             u64 *out_values, size_t sz)
 511{
 512        int ret = of_property_read_variable_u64_array(np, propname, out_values,
 513                                                      sz, 0);
 514        if (ret >= 0)
 515                return 0;
 516        else
 517                return ret;
 518}
 519
 520/*
 521 * struct property *prop;
 522 * const __be32 *p;
 523 * u32 u;
 524 *
 525 * of_property_for_each_u32(np, "propname", prop, p, u)
 526 *         printk("U32 value: %x\n", u);
 527 */
 528const __be32 *of_prop_next_u32(struct property *prop, const __be32 *cur,
 529                               u32 *pu);
 530/*
 531 * struct property *prop;
 532 * const char *s;
 533 *
 534 * of_property_for_each_string(np, "propname", prop, s)
 535 *         printk("String value: %s\n", s);
 536 */
 537const char *of_prop_next_string(struct property *prop, const char *cur);
 538
 539bool of_console_check(struct device_node *dn, char *name, int index);
 540
 541#else /* CONFIG_OF */
 542
 543static inline void of_core_init(void)
 544{
 545}
 546
 547static inline bool is_of_node(const struct fwnode_handle *fwnode)
 548{
 549        return false;
 550}
 551
 552static inline struct device_node *to_of_node(const struct fwnode_handle *fwnode)
 553{
 554        return NULL;
 555}
 556
 557static inline const char* of_node_full_name(const struct device_node *np)
 558{
 559        return "<no-node>";
 560}
 561
 562static inline struct device_node *of_find_node_by_name(struct device_node *from,
 563        const char *name)
 564{
 565        return NULL;
 566}
 567
 568static inline struct device_node *of_find_node_by_type(struct device_node *from,
 569        const char *type)
 570{
 571        return NULL;
 572}
 573
 574static inline struct device_node *of_find_matching_node_and_match(
 575        struct device_node *from,
 576        const struct of_device_id *matches,
 577        const struct of_device_id **match)
 578{
 579        return NULL;
 580}
 581
 582static inline struct device_node *of_find_node_by_path(const char *path)
 583{
 584        return NULL;
 585}
 586
 587static inline struct device_node *of_find_node_opts_by_path(const char *path,
 588        const char **opts)
 589{
 590        return NULL;
 591}
 592
 593static inline struct device_node *of_find_node_by_phandle(phandle handle)
 594{
 595        return NULL;
 596}
 597
 598static inline struct device_node *of_get_parent(const struct device_node *node)
 599{
 600        return NULL;
 601}
 602
 603static inline struct device_node *of_get_next_child(
 604        const struct device_node *node, struct device_node *prev)
 605{
 606        return NULL;
 607}
 608
 609static inline struct device_node *of_get_next_available_child(
 610        const struct device_node *node, struct device_node *prev)
 611{
 612        return NULL;
 613}
 614
 615static inline struct device_node *of_find_node_with_property(
 616        struct device_node *from, const char *prop_name)
 617{
 618        return NULL;
 619}
 620
 621#define of_fwnode_handle(node) NULL
 622
 623static inline bool of_have_populated_dt(void)
 624{
 625        return false;
 626}
 627
 628static inline struct device_node *of_get_child_by_name(
 629                                        const struct device_node *node,
 630                                        const char *name)
 631{
 632        return NULL;
 633}
 634
 635static inline int of_device_is_compatible(const struct device_node *device,
 636                                          const char *name)
 637{
 638        return 0;
 639}
 640
 641static inline  int of_device_compatible_match(struct device_node *device,
 642                                              const char *const *compat)
 643{
 644        return 0;
 645}
 646
 647static inline bool of_device_is_available(const struct device_node *device)
 648{
 649        return false;
 650}
 651
 652static inline bool of_device_is_big_endian(const struct device_node *device)
 653{
 654        return false;
 655}
 656
 657static inline struct property *of_find_property(const struct device_node *np,
 658                                                const char *name,
 659                                                int *lenp)
 660{
 661        return NULL;
 662}
 663
 664static inline struct device_node *of_find_compatible_node(
 665                                                struct device_node *from,
 666                                                const char *type,
 667                                                const char *compat)
 668{
 669        return NULL;
 670}
 671
 672static inline int of_property_count_elems_of_size(const struct device_node *np,
 673                        const char *propname, int elem_size)
 674{
 675        return -ENOSYS;
 676}
 677
 678static inline int of_property_read_u32_index(const struct device_node *np,
 679                        const char *propname, u32 index, u32 *out_value)
 680{
 681        return -ENOSYS;
 682}
 683
 684static inline int of_property_read_u8_array(const struct device_node *np,
 685                        const char *propname, u8 *out_values, size_t sz)
 686{
 687        return -ENOSYS;
 688}
 689
 690static inline int of_property_read_u16_array(const struct device_node *np,
 691                        const char *propname, u16 *out_values, size_t sz)
 692{
 693        return -ENOSYS;
 694}
 695
 696static inline int of_property_read_u32_array(const struct device_node *np,
 697                                             const char *propname,
 698                                             u32 *out_values, size_t sz)
 699{
 700        return -ENOSYS;
 701}
 702
 703static inline int of_property_read_u64_array(const struct device_node *np,
 704                                             const char *propname,
 705                                             u64 *out_values, size_t sz)
 706{
 707        return -ENOSYS;
 708}
 709
 710static inline int of_property_read_string(const struct device_node *np,
 711                                          const char *propname,
 712                                          const char **out_string)
 713{
 714        return -ENOSYS;
 715}
 716
 717static inline int of_property_read_string_helper(const struct device_node *np,
 718                                                 const char *propname,
 719                                                 const char **out_strs, size_t sz, int index)
 720{
 721        return -ENOSYS;
 722}
 723
 724static inline const void *of_get_property(const struct device_node *node,
 725                                const char *name,
 726                                int *lenp)
 727{
 728        return NULL;
 729}
 730
 731static inline struct device_node *of_get_cpu_node(int cpu,
 732                                        unsigned int *thread)
 733{
 734        return NULL;
 735}
 736
 737static inline int of_n_addr_cells(struct device_node *np)
 738{
 739        return 0;
 740
 741}
 742static inline int of_n_size_cells(struct device_node *np)
 743{
 744        return 0;
 745}
 746
 747static inline int of_property_read_u64(const struct device_node *np,
 748                                       const char *propname, u64 *out_value)
 749{
 750        return -ENOSYS;
 751}
 752
 753static inline int of_property_match_string(const struct device_node *np,
 754                                           const char *propname,
 755                                           const char *string)
 756{
 757        return -ENOSYS;
 758}
 759
 760static inline struct device_node *of_parse_phandle(const struct device_node *np,
 761                                                   const char *phandle_name,
 762                                                   int index)
 763{
 764        return NULL;
 765}
 766
 767static inline int of_parse_phandle_with_args(const struct device_node *np,
 768                                             const char *list_name,
 769                                             const char *cells_name,
 770                                             int index,
 771                                             struct of_phandle_args *out_args)
 772{
 773        return -ENOSYS;
 774}
 775
 776static inline int of_parse_phandle_with_fixed_args(const struct device_node *np,
 777        const char *list_name, int cells_count, int index,
 778        struct of_phandle_args *out_args)
 779{
 780        return -ENOSYS;
 781}
 782
 783static inline int of_count_phandle_with_args(struct device_node *np,
 784                                             const char *list_name,
 785                                             const char *cells_name)
 786{
 787        return -ENOSYS;
 788}
 789
 790static inline int of_phandle_iterator_init(struct of_phandle_iterator *it,
 791                                           const struct device_node *np,
 792                                           const char *list_name,
 793                                           const char *cells_name,
 794                                           int cell_count)
 795{
 796        return -ENOSYS;
 797}
 798
 799static inline int of_phandle_iterator_next(struct of_phandle_iterator *it)
 800{
 801        return -ENOSYS;
 802}
 803
 804static inline int of_phandle_iterator_args(struct of_phandle_iterator *it,
 805                                           uint32_t *args,
 806                                           int size)
 807{
 808        return 0;
 809}
 810
 811static inline int of_alias_get_id(struct device_node *np, const char *stem)
 812{
 813        return -ENOSYS;
 814}
 815
 816static inline int of_alias_get_highest_id(const char *stem)
 817{
 818        return -ENOSYS;
 819}
 820
 821static inline int of_machine_is_compatible(const char *compat)
 822{
 823        return 0;
 824}
 825
 826static inline bool of_console_check(const struct device_node *dn, const char *name, int index)
 827{
 828        return false;
 829}
 830
 831static inline const __be32 *of_prop_next_u32(struct property *prop,
 832                const __be32 *cur, u32 *pu)
 833{
 834        return NULL;
 835}
 836
 837static inline const char *of_prop_next_string(struct property *prop,
 838                const char *cur)
 839{
 840        return NULL;
 841}
 842
 843static inline int of_node_check_flag(struct device_node *n, unsigned long flag)
 844{
 845        return 0;
 846}
 847
 848static inline int of_node_test_and_set_flag(struct device_node *n,
 849                                            unsigned long flag)
 850{
 851        return 0;
 852}
 853
 854static inline void of_node_set_flag(struct device_node *n, unsigned long flag)
 855{
 856}
 857
 858static inline void of_node_clear_flag(struct device_node *n, unsigned long flag)
 859{
 860}
 861
 862static inline int of_property_check_flag(struct property *p, unsigned long flag)
 863{
 864        return 0;
 865}
 866
 867static inline void of_property_set_flag(struct property *p, unsigned long flag)
 868{
 869}
 870
 871static inline void of_property_clear_flag(struct property *p, unsigned long flag)
 872{
 873}
 874
 875#define of_match_ptr(_ptr)      NULL
 876#define of_match_node(_matches, _node)  NULL
 877#endif /* CONFIG_OF */
 878
 879/* Default string compare functions, Allow arch asm/prom.h to override */
 880#if !defined(of_compat_cmp)
 881#define of_compat_cmp(s1, s2, l)        strcasecmp((s1), (s2))
 882#define of_prop_cmp(s1, s2)             strcmp((s1), (s2))
 883#define of_node_cmp(s1, s2)             strcasecmp((s1), (s2))
 884#endif
 885
 886#if defined(CONFIG_OF) && defined(CONFIG_NUMA)
 887extern int of_node_to_nid(struct device_node *np);
 888#else
 889static inline int of_node_to_nid(struct device_node *device)
 890{
 891        return NUMA_NO_NODE;
 892}
 893#endif
 894
 895#ifdef CONFIG_OF_NUMA
 896extern int of_numa_init(void);
 897#else
 898static inline int of_numa_init(void)
 899{
 900        return -ENOSYS;
 901}
 902#endif
 903
 904static inline struct device_node *of_find_matching_node(
 905        struct device_node *from,
 906        const struct of_device_id *matches)
 907{
 908        return of_find_matching_node_and_match(from, matches, NULL);
 909}
 910
 911/**
 912 * of_property_count_u8_elems - Count the number of u8 elements in a property
 913 *
 914 * @np:         device node from which the property value is to be read.
 915 * @propname:   name of the property to be searched.
 916 *
 917 * Search for a property in a device node and count the number of u8 elements
 918 * in it. Returns number of elements on sucess, -EINVAL if the property does
 919 * not exist or its length does not match a multiple of u8 and -ENODATA if the
 920 * property does not have a value.
 921 */
 922static inline int of_property_count_u8_elems(const struct device_node *np,
 923                                const char *propname)
 924{
 925        return of_property_count_elems_of_size(np, propname, sizeof(u8));
 926}
 927
 928/**
 929 * of_property_count_u16_elems - Count the number of u16 elements in a property
 930 *
 931 * @np:         device node from which the property value is to be read.
 932 * @propname:   name of the property to be searched.
 933 *
 934 * Search for a property in a device node and count the number of u16 elements
 935 * in it. Returns number of elements on sucess, -EINVAL if the property does
 936 * not exist or its length does not match a multiple of u16 and -ENODATA if the
 937 * property does not have a value.
 938 */
 939static inline int of_property_count_u16_elems(const struct device_node *np,
 940                                const char *propname)
 941{
 942        return of_property_count_elems_of_size(np, propname, sizeof(u16));
 943}
 944
 945/**
 946 * of_property_count_u32_elems - Count the number of u32 elements in a property
 947 *
 948 * @np:         device node from which the property value is to be read.
 949 * @propname:   name of the property to be searched.
 950 *
 951 * Search for a property in a device node and count the number of u32 elements
 952 * in it. Returns number of elements on sucess, -EINVAL if the property does
 953 * not exist or its length does not match a multiple of u32 and -ENODATA if the
 954 * property does not have a value.
 955 */
 956static inline int of_property_count_u32_elems(const struct device_node *np,
 957                                const char *propname)
 958{
 959        return of_property_count_elems_of_size(np, propname, sizeof(u32));
 960}
 961
 962/**
 963 * of_property_count_u64_elems - Count the number of u64 elements in a property
 964 *
 965 * @np:         device node from which the property value is to be read.
 966 * @propname:   name of the property to be searched.
 967 *
 968 * Search for a property in a device node and count the number of u64 elements
 969 * in it. Returns number of elements on sucess, -EINVAL if the property does
 970 * not exist or its length does not match a multiple of u64 and -ENODATA if the
 971 * property does not have a value.
 972 */
 973static inline int of_property_count_u64_elems(const struct device_node *np,
 974                                const char *propname)
 975{
 976        return of_property_count_elems_of_size(np, propname, sizeof(u64));
 977}
 978
 979/**
 980 * of_property_read_string_array() - Read an array of strings from a multiple
 981 * strings property.
 982 * @np:         device node from which the property value is to be read.
 983 * @propname:   name of the property to be searched.
 984 * @out_strs:   output array of string pointers.
 985 * @sz:         number of array elements to read.
 986 *
 987 * Search for a property in a device tree node and retrieve a list of
 988 * terminated string values (pointer to data, not a copy) in that property.
 989 *
 990 * If @out_strs is NULL, the number of strings in the property is returned.
 991 */
 992static inline int of_property_read_string_array(const struct device_node *np,
 993                                                const char *propname, const char **out_strs,
 994                                                size_t sz)
 995{
 996        return of_property_read_string_helper(np, propname, out_strs, sz, 0);
 997}
 998
 999/**
1000 * of_property_count_strings() - Find and return the number of strings from a
1001 * multiple strings property.
1002 * @np:         device node from which the property value is to be read.
1003 * @propname:   name of the property to be searched.
1004 *
1005 * Search for a property in a device tree node and retrieve the number of null
1006 * terminated string contain in it. Returns the number of strings on
1007 * success, -EINVAL if the property does not exist, -ENODATA if property
1008 * does not have a value, and -EILSEQ if the string is not null-terminated
1009 * within the length of the property data.
1010 */
1011static inline int of_property_count_strings(const struct device_node *np,
1012                                            const char *propname)
1013{
1014        return of_property_read_string_helper(np, propname, NULL, 0, 0);
1015}
1016
1017/**
1018 * of_property_read_string_index() - Find and read a string from a multiple
1019 * strings property.
1020 * @np:         device node from which the property value is to be read.
1021 * @propname:   name of the property to be searched.
1022 * @index:      index of the string in the list of strings
1023 * @out_string: pointer to null terminated return string, modified only if
1024 *              return value is 0.
1025 *
1026 * Search for a property in a device tree node and retrieve a null
1027 * terminated string value (pointer to data, not a copy) in the list of strings
1028 * contained in that property.
1029 * Returns 0 on success, -EINVAL if the property does not exist, -ENODATA if
1030 * property does not have a value, and -EILSEQ if the string is not
1031 * null-terminated within the length of the property data.
1032 *
1033 * The out_string pointer is modified only if a valid string can be decoded.
1034 */
1035static inline int of_property_read_string_index(const struct device_node *np,
1036                                                const char *propname,
1037                                                int index, const char **output)
1038{
1039        int rc = of_property_read_string_helper(np, propname, output, 1, index);
1040        return rc < 0 ? rc : 0;
1041}
1042
1043/**
1044 * of_property_read_bool - Findfrom a property
1045 * @np:         device node from which the property value is to be read.
1046 * @propname:   name of the property to be searched.
1047 *
1048 * Search for a property in a device node.
1049 * Returns true if the property exists false otherwise.
1050 */
1051static inline bool of_property_read_bool(const struct device_node *np,
1052                                         const char *propname)
1053{
1054        struct property *prop = of_find_property(np, propname, NULL);
1055
1056        return prop ? true : false;
1057}
1058
1059static inline int of_property_read_u8(const struct device_node *np,
1060                                       const char *propname,
1061                                       u8 *out_value)
1062{
1063        return of_property_read_u8_array(np, propname, out_value, 1);
1064}
1065
1066static inline int of_property_read_u16(const struct device_node *np,
1067                                       const char *propname,
1068                                       u16 *out_value)
1069{
1070        return of_property_read_u16_array(np, propname, out_value, 1);
1071}
1072
1073static inline int of_property_read_u32(const struct device_node *np,
1074                                       const char *propname,
1075                                       u32 *out_value)
1076{
1077        return of_property_read_u32_array(np, propname, out_value, 1);
1078}
1079
1080static inline int of_property_read_s32(const struct device_node *np,
1081                                       const char *propname,
1082                                       s32 *out_value)
1083{
1084        return of_property_read_u32(np, propname, (u32*) out_value);
1085}
1086
1087#define of_for_each_phandle(it, err, np, ln, cn, cc)                    \
1088        for (of_phandle_iterator_init((it), (np), (ln), (cn), (cc)),    \
1089             err = of_phandle_iterator_next(it);                        \
1090             err == 0;                                                  \
1091             err = of_phandle_iterator_next(it))
1092
1093#define of_property_for_each_u32(np, propname, prop, p, u)      \
1094        for (prop = of_find_property(np, propname, NULL),       \
1095                p = of_prop_next_u32(prop, NULL, &u);           \
1096                p;                                              \
1097                p = of_prop_next_u32(prop, p, &u))
1098
1099#define of_property_for_each_string(np, propname, prop, s)      \
1100        for (prop = of_find_property(np, propname, NULL),       \
1101                s = of_prop_next_string(prop, NULL);            \
1102                s;                                              \
1103                s = of_prop_next_string(prop, s))
1104
1105#define for_each_node_by_name(dn, name) \
1106        for (dn = of_find_node_by_name(NULL, name); dn; \
1107             dn = of_find_node_by_name(dn, name))
1108#define for_each_node_by_type(dn, type) \
1109        for (dn = of_find_node_by_type(NULL, type); dn; \
1110             dn = of_find_node_by_type(dn, type))
1111#define for_each_compatible_node(dn, type, compatible) \
1112        for (dn = of_find_compatible_node(NULL, type, compatible); dn; \
1113             dn = of_find_compatible_node(dn, type, compatible))
1114#define for_each_matching_node(dn, matches) \
1115        for (dn = of_find_matching_node(NULL, matches); dn; \
1116             dn = of_find_matching_node(dn, matches))
1117#define for_each_matching_node_and_match(dn, matches, match) \
1118        for (dn = of_find_matching_node_and_match(NULL, matches, match); \
1119             dn; dn = of_find_matching_node_and_match(dn, matches, match))
1120
1121#define for_each_child_of_node(parent, child) \
1122        for (child = of_get_next_child(parent, NULL); child != NULL; \
1123             child = of_get_next_child(parent, child))
1124#define for_each_available_child_of_node(parent, child) \
1125        for (child = of_get_next_available_child(parent, NULL); child != NULL; \
1126             child = of_get_next_available_child(parent, child))
1127
1128#define for_each_node_with_property(dn, prop_name) \
1129        for (dn = of_find_node_with_property(NULL, prop_name); dn; \
1130             dn = of_find_node_with_property(dn, prop_name))
1131
1132static inline int of_get_child_count(const struct device_node *np)
1133{
1134        struct device_node *child;
1135        int num = 0;
1136
1137        for_each_child_of_node(np, child)
1138                num++;
1139
1140        return num;
1141}
1142
1143static inline int of_get_available_child_count(const struct device_node *np)
1144{
1145        struct device_node *child;
1146        int num = 0;
1147
1148        for_each_available_child_of_node(np, child)
1149                num++;
1150
1151        return num;
1152}
1153
1154#if defined(CONFIG_OF) && !defined(MODULE)
1155#define _OF_DECLARE(table, name, compat, fn, fn_type)                   \
1156        static const struct of_device_id __of_table_##name              \
1157                __used __section(__##table##_of_table)                  \
1158                 = { .compatible = compat,                              \
1159                     .data = (fn == (fn_type)NULL) ? fn : fn  }
1160#else
1161#define _OF_DECLARE(table, name, compat, fn, fn_type)                   \
1162        static const struct of_device_id __of_table_##name              \
1163                __attribute__((unused))                                 \
1164                 = { .compatible = compat,                              \
1165                     .data = (fn == (fn_type)NULL) ? fn : fn }
1166#endif
1167
1168typedef int (*of_init_fn_2)(struct device_node *, struct device_node *);
1169typedef int (*of_init_fn_1_ret)(struct device_node *);
1170typedef void (*of_init_fn_1)(struct device_node *);
1171
1172#define OF_DECLARE_1(table, name, compat, fn) \
1173                _OF_DECLARE(table, name, compat, fn, of_init_fn_1)
1174#define OF_DECLARE_1_RET(table, name, compat, fn) \
1175                _OF_DECLARE(table, name, compat, fn, of_init_fn_1_ret)
1176#define OF_DECLARE_2(table, name, compat, fn) \
1177                _OF_DECLARE(table, name, compat, fn, of_init_fn_2)
1178
1179/**
1180 * struct of_changeset_entry    - Holds a changeset entry
1181 *
1182 * @node:       list_head for the log list
1183 * @action:     notifier action
1184 * @np:         pointer to the device node affected
1185 * @prop:       pointer to the property affected
1186 * @old_prop:   hold a pointer to the original property
1187 *
1188 * Every modification of the device tree during a changeset
1189 * is held in a list of of_changeset_entry structures.
1190 * That way we can recover from a partial application, or we can
1191 * revert the changeset
1192 */
1193struct of_changeset_entry {
1194        struct list_head node;
1195        unsigned long action;
1196        struct device_node *np;
1197        struct property *prop;
1198        struct property *old_prop;
1199};
1200
1201/**
1202 * struct of_changeset - changeset tracker structure
1203 *
1204 * @entries:    list_head for the changeset entries
1205 *
1206 * changesets are a convenient way to apply bulk changes to the
1207 * live tree. In case of an error, changes are rolled-back.
1208 * changesets live on after initial application, and if not
1209 * destroyed after use, they can be reverted in one single call.
1210 */
1211struct of_changeset {
1212        struct list_head entries;
1213};
1214
1215enum of_reconfig_change {
1216        OF_RECONFIG_NO_CHANGE = 0,
1217        OF_RECONFIG_CHANGE_ADD,
1218        OF_RECONFIG_CHANGE_REMOVE,
1219};
1220
1221#ifdef CONFIG_OF_DYNAMIC
1222#include <linux/slab.h>
1223
1224extern int of_reconfig_notifier_register(struct notifier_block *);
1225extern int of_reconfig_notifier_unregister(struct notifier_block *);
1226extern int of_reconfig_notify(unsigned long, struct of_reconfig_data *rd);
1227extern int of_reconfig_get_state_change(unsigned long action,
1228                                        struct of_reconfig_data *arg);
1229
1230extern void of_changeset_init(struct of_changeset *ocs);
1231extern void of_changeset_destroy(struct of_changeset *ocs);
1232extern int of_changeset_apply(struct of_changeset *ocs);
1233extern int of_changeset_revert(struct of_changeset *ocs);
1234extern int of_changeset_action(struct of_changeset *ocs,
1235                unsigned long action, struct device_node *np,
1236                struct property *prop);
1237
1238static inline int of_changeset_attach_node(struct of_changeset *ocs,
1239                struct device_node *np)
1240{
1241        return of_changeset_action(ocs, OF_RECONFIG_ATTACH_NODE, np, NULL);
1242}
1243
1244static inline int of_changeset_detach_node(struct of_changeset *ocs,
1245                struct device_node *np)
1246{
1247        return of_changeset_action(ocs, OF_RECONFIG_DETACH_NODE, np, NULL);
1248}
1249
1250static inline int of_changeset_add_property(struct of_changeset *ocs,
1251                struct device_node *np, struct property *prop)
1252{
1253        return of_changeset_action(ocs, OF_RECONFIG_ADD_PROPERTY, np, prop);
1254}
1255
1256static inline int of_changeset_remove_property(struct of_changeset *ocs,
1257                struct device_node *np, struct property *prop)
1258{
1259        return of_changeset_action(ocs, OF_RECONFIG_REMOVE_PROPERTY, np, prop);
1260}
1261
1262static inline int of_changeset_update_property(struct of_changeset *ocs,
1263                struct device_node *np, struct property *prop)
1264{
1265        return of_changeset_action(ocs, OF_RECONFIG_UPDATE_PROPERTY, np, prop);
1266}
1267
1268struct device_node *of_changeset_create_device_nodev(
1269        struct of_changeset *ocs, struct device_node *parent,
1270        const char *fmt, va_list vargs);
1271
1272__printf(3, 4) struct device_node *
1273of_changeset_create_device_node(struct of_changeset *ocs,
1274        struct device_node *parent, const char *fmt, ...);
1275
1276int __of_changeset_add_update_property_copy(struct of_changeset *ocs,
1277                struct device_node *np, const char *name, const void *value,
1278                int length, bool update);
1279
1280int __of_changeset_add_update_property_string_list(
1281                struct of_changeset *ocs, struct device_node *np,
1282                const char *name, const char **strs, int count, bool update);
1283
1284#else /* CONFIG_OF_DYNAMIC */
1285static inline int of_reconfig_notifier_register(struct notifier_block *nb)
1286{
1287        return -EINVAL;
1288}
1289static inline int of_reconfig_notifier_unregister(struct notifier_block *nb)
1290{
1291        return -EINVAL;
1292}
1293static inline int of_reconfig_notify(unsigned long action,
1294                                     struct of_reconfig_data *arg)
1295{
1296        return -EINVAL;
1297}
1298static inline int of_reconfig_get_state_change(unsigned long action,
1299                                                struct of_reconfig_data *arg)
1300{
1301        return -EINVAL;
1302}
1303
1304static inline struct device_node *of_changeset_create_device_nodev(
1305        struct of_changeset *ocs, struct device_node *parent,
1306        const char *fmt, va_list vargs)
1307{
1308        return ERR_PTR(-EINVAL);
1309}
1310
1311static inline __printf(3, 4) struct device_node *
1312of_changeset_create_device_node(struct of_changeset *ocs,
1313        struct device_node *parent, const char *fmt, ...)
1314{
1315        return ERR_PTR(-EINVAL);
1316}
1317
1318static inline int __of_changeset_add_update_property_copy(
1319        struct of_changeset *ocs, struct device_node *np,
1320        const char *name, const void *value, int length, bool update)
1321{
1322        return -EINVAL;
1323}
1324
1325static inline __printf(4, 5) int of_changeset_add_property_stringf(
1326                struct of_changeset *ocs, struct device_node *np,
1327                const char *name, const char *fmt, ...)
1328{
1329        return -EINVAL;
1330}
1331
1332static inline int of_changeset_update_property_stringf(
1333        struct of_changeset *ocs, struct device_node *np,
1334        const char *name, const char *fmt, ...)
1335{
1336        return -EINVAL;
1337}
1338
1339static inline int __of_changeset_add_update_property_string_list(
1340                struct of_changeset *ocs, struct device_node *np,
1341                const char *name, const char **strs, int count, bool update)
1342{
1343        return -EINVAL;
1344}
1345
1346#endif /* CONFIG_OF_DYNAMIC */
1347
1348#ifdef CONFIG_OF_DYNAMIC
1349/**
1350 * of_changeset_add_property_copy - Create a new property copying name & value
1351 *
1352 * @ocs:        changeset pointer
1353 * @np:         device node pointer
1354 * @name:       name of the property
1355 * @value:      pointer to the value data
1356 * @length:     length of the value in bytes
1357 *
1358 * Adds a property to the changeset by making copies of the name & value
1359 * entries.
1360 *
1361 * Returns zero on success, a negative error value otherwise.
1362 */
1363static inline int of_changeset_add_property_copy(struct of_changeset *ocs,
1364        struct device_node *np, const char *name,
1365        const void *value, int length)
1366{
1367        return __of_changeset_add_update_property_copy(ocs, np, name, value,
1368                        length, false);
1369}
1370
1371/**
1372 * of_changeset_update_property_copy - Update a property copying name & value
1373 *
1374 * @ocs:        changeset pointer
1375 * @np:         device node pointer
1376 * @name:       name of the property
1377 * @value:      pointer to the value data
1378 * @length:     length of the value in bytes
1379 *
1380 * Update a property to the changeset by making copies of the name & value
1381 * entries.
1382 *
1383 * Returns zero on success, a negative error value otherwise.
1384 */
1385static inline int of_changeset_update_property_copy(struct of_changeset *ocs,
1386        struct device_node *np, const char *name,
1387        const void *value, int length)
1388{
1389        return __of_changeset_add_update_property_copy(ocs, np, name, value,
1390                        length, true);
1391}
1392
1393/**
1394 * __of_changeset_add_update_property_string - Create/update a string property
1395 *
1396 * @ocs:        changeset pointer
1397 * @np:         device node pointer
1398 * @name:       name of the property
1399 * @str:        string property value
1400 * @update:     True on update operation
1401 *
1402 * Adds/updates a string property to the changeset by making copies of the name
1403 * and the given value. The @update parameter controls whether an add or
1404 * update takes place.
1405 *
1406 * Returns zero on success, a negative error value otherwise.
1407 */
1408static inline int __of_changeset_add_update_property_string(
1409        struct of_changeset *ocs, struct device_node *np, const char *name,
1410        const char *str, bool update)
1411{
1412        return __of_changeset_add_update_property_copy(ocs, np, name, str,
1413                        strlen(str) + 1, update);
1414}
1415
1416/**
1417 * __of_changeset_add_update_property_stringv - Create/update a formatted
1418 *                                              string property
1419 *
1420 * @ocs:        changeset pointer
1421 * @np:         device node pointer
1422 * @name:       name of the property
1423 * @fmt:        format of string property
1424 * @vargs:      arguments of the format string
1425 * @update:     True on update operation
1426 *
1427 * Adds/updates a string property to the changeset by making copies of the name
1428 * and the formatted value. The @update parameter controls whether an add or
1429 * update takes place.
1430 *
1431 * Returns zero on success, a negative error value otherwise.
1432 */
1433static inline int __of_changeset_add_update_property_stringv(
1434        struct of_changeset *ocs, struct device_node *np, const char *name,
1435        const char *fmt, va_list vargs, bool update)
1436{
1437        char *str;
1438        int ret;
1439
1440        str = kvasprintf(GFP_KERNEL, fmt, vargs);
1441        if (!str)
1442                return -ENOMEM;
1443        ret = __of_changeset_add_update_property_string(ocs, np, name, str,
1444                        update);
1445        kfree(str);
1446
1447        return ret;
1448}
1449
1450/**
1451 * of_changeset_add_property_string_list - Create a new string list property
1452 *
1453 * @ocs:        changeset pointer
1454 * @np:         device node pointer
1455 * @name:       name of the property
1456 * @strs:       pointer to the string list
1457 * @count:      string count
1458 *
1459 * Adds a string list property to the changeset.
1460 *
1461 * Returns zero on success, a negative error value otherwise.
1462 */
1463static inline int of_changeset_add_property_string_list(
1464        struct of_changeset *ocs, struct device_node *np, const char *name,
1465        const char **strs, int count)
1466{
1467        return __of_changeset_add_update_property_string_list(ocs, np, name,
1468                        strs, count, false);
1469}
1470
1471/**
1472 * of_changeset_update_property_string_list - Update string list property
1473 *
1474 * @ocs:        changeset pointer
1475 * @np:         device node pointer
1476 * @name:       name of the property
1477 * @strs:       pointer to the string list
1478 * @count:      string count
1479 *
1480 * Updates a string list property to the changeset.
1481 *
1482 * Returns zero on success, a negative error value otherwise.
1483 */
1484static inline int of_changeset_update_property_string_list(
1485        struct of_changeset *ocs, struct device_node *np,
1486        const char *name, const char **strs, int count)
1487{
1488        return __of_changeset_add_update_property_string_list(ocs, np, name,
1489                        strs, count, true);
1490}
1491
1492/**
1493 * of_changeset_add_property_string - Adds a string property
1494 *
1495 * @ocs:        changeset pointer
1496 * @np:         device node pointer
1497 * @name:       name of the property
1498 * @str:        string property
1499 *
1500 * Adds a string property to the changeset by making copies of the name
1501 * and the string value.
1502 *
1503 * Returns zero on success, a negative error value otherwise.
1504 */
1505static inline int of_changeset_add_property_string(
1506        struct of_changeset *ocs, struct device_node *np,
1507        const char *name, const char *str)
1508{
1509        return __of_changeset_add_update_property_string(ocs, np, name, str,
1510                        false);
1511}
1512
1513/**
1514 * of_changeset_update_property_string - Update a string property
1515 *
1516 * @ocs:        changeset pointer
1517 * @np:         device node pointer
1518 * @name:       name of the property
1519 * @str:        string property
1520 *
1521 * Updates a string property to the changeset by making copies of the name
1522 * and the string value.
1523 *
1524 * Returns zero on success, a negative error value otherwise.
1525 */
1526static inline int of_changeset_update_property_string(
1527        struct of_changeset *ocs, struct device_node *np,
1528        const char *name, const char *str)
1529{
1530        return __of_changeset_add_update_property_string(ocs, np, name, str,
1531                        true);
1532}
1533
1534/**
1535 * of_changeset_add_property_u32 - Create a new u32 property
1536 *
1537 * @ocs:        changeset pointer
1538 * @np:         device node pointer
1539 * @name:       name of the property
1540 * @val:        value in host endian format
1541 *
1542 * Adds a u32 property to the changeset.
1543 *
1544 * Returns zero on success, a negative error value otherwise.
1545 */
1546static inline int of_changeset_add_property_u32(struct of_changeset *ocs,
1547                struct device_node *np, const char *name, u32 val)
1548{
1549        val = cpu_to_be32(val);
1550        return __of_changeset_add_update_property_copy(ocs, np, name, &val,
1551                        sizeof(val), false);
1552}
1553
1554/**
1555 * of_changeset_update_property_u32 - Update u32 property
1556 *
1557 * @ocs:        changeset pointer
1558 * @np:         device node pointer
1559 * @name:       name of the property
1560 * @val:        value in host endian format
1561 *
1562 * Updates a u32 property to the changeset.
1563 *
1564 * Returns zero on success, a negative error value otherwise.
1565 */
1566static inline int of_changeset_update_property_u32(
1567        struct of_changeset *ocs, struct device_node *np,
1568        const char *name, u32 val)
1569{
1570        val = cpu_to_be32(val);
1571        return __of_changeset_add_update_property_copy(ocs, np, name, &val,
1572                        sizeof(val), true);
1573}
1574
1575/**
1576 * of_changeset_add_property_bool - Create a new u32 property
1577 *
1578 * @ocs:        changeset pointer
1579 * @np:         device node pointer
1580 * @name:       name of the property
1581 *
1582 * Adds a bool property to the changeset. Note that there is
1583 * no option to set the value to false, since the property
1584 * existing sets it to true.
1585 *
1586 * Returns zero on success, a negative error value otherwise.
1587 */
1588static inline int of_changeset_add_property_bool(
1589        struct of_changeset *ocs, struct device_node *np, const char *name)
1590{
1591        return __of_changeset_add_update_property_copy(ocs, np, name, "", 0,
1592                        false);
1593}
1594
1595/**
1596 * of_changeset_update_property_bool - Update a bool property
1597 *
1598 * @ocs:        changeset pointer
1599 * @np:         device node pointer
1600 * @name:       name of the property
1601 *
1602 * Updates a property to the changeset. Note that there is
1603 * no option to set the value to false, since the property
1604 * existing sets it to true.
1605 *
1606 * Returns zero on success, a negative error value otherwise.
1607 */
1608static inline int of_changeset_update_property_bool(struct of_changeset *ocs,
1609                struct device_node *np, const char *name)
1610{
1611        return __of_changeset_add_update_property_copy(ocs, np, name, "", 0,
1612                        true);
1613}
1614#endif
1615
1616/* CONFIG_OF_RESOLVE api */
1617extern int of_resolve_phandles(struct device_node *tree);
1618
1619/**
1620 * of_device_is_system_power_controller - Tells if system-power-controller is found for device_node
1621 * @np: Pointer to the given device_node
1622 *
1623 * return true if present false otherwise
1624 */
1625static inline bool of_device_is_system_power_controller(const struct device_node *np)
1626{
1627        return of_property_read_bool(np, "system-power-controller");
1628}
1629
1630/**
1631 * Overlay support
1632 */
1633
1634enum of_overlay_notify_action {
1635        OF_OVERLAY_PRE_APPLY,
1636        OF_OVERLAY_POST_APPLY,
1637        OF_OVERLAY_PRE_REMOVE,
1638        OF_OVERLAY_POST_REMOVE,
1639};
1640
1641struct of_overlay_notify_data {
1642        struct device_node *overlay;
1643        struct device_node *target;
1644};
1645
1646#ifdef CONFIG_OF_OVERLAY
1647
1648/* ID based overlays; the API for external users */
1649int of_overlay_create(struct device_node *tree);
1650int of_overlay_destroy(int id);
1651int of_overlay_destroy_all(void);
1652
1653int of_overlay_notifier_register(struct notifier_block *nb);
1654int of_overlay_notifier_unregister(struct notifier_block *nb);
1655
1656#else
1657
1658static inline int of_overlay_create(struct device_node *tree)
1659{
1660        return -ENOTSUPP;
1661}
1662
1663static inline int of_overlay_destroy(int id)
1664{
1665        return -ENOTSUPP;
1666}
1667
1668static inline int of_overlay_destroy_all(void)
1669{
1670        return -ENOTSUPP;
1671}
1672
1673static inline int of_overlay_notifier_register(struct notifier_block *nb)
1674{
1675        return 0;
1676}
1677
1678static inline int of_overlay_notifier_unregister(struct notifier_block *nb)
1679{
1680        return 0;
1681}
1682
1683#endif
1684
1685#endif /* _LINUX_OF_H */
1686