uboot/lib/libfdt/fdt_addresses.c
<<
>>
Prefs
   1/*
   2 * libfdt - Flat Device Tree manipulation
   3 * Copyright (C) 2014 David Gibson <david@gibson.dropbear.id.au>
   4 * SPDX-License-Identifier:     GPL-2.0+ BSD-2-Clause
   5 */
   6#include "libfdt_env.h"
   7
   8#ifndef USE_HOSTCC
   9#include <fdt.h>
  10#include <libfdt.h>
  11#else
  12#include "fdt_host.h"
  13#endif
  14
  15#include "libfdt_internal.h"
  16
  17int fdt_address_cells(const void *fdt, int nodeoffset)
  18{
  19        const fdt32_t *ac;
  20        int val;
  21        int len;
  22
  23        ac = fdt_getprop(fdt, nodeoffset, "#address-cells", &len);
  24        if (!ac)
  25                return 2;
  26
  27        if (len != sizeof(*ac))
  28                return -FDT_ERR_BADNCELLS;
  29
  30        val = fdt32_to_cpu(*ac);
  31        if ((val <= 0) || (val > FDT_MAX_NCELLS))
  32                return -FDT_ERR_BADNCELLS;
  33
  34        return val;
  35}
  36
  37int fdt_size_cells(const void *fdt, int nodeoffset)
  38{
  39        const fdt32_t *sc;
  40        int val;
  41        int len;
  42
  43        sc = fdt_getprop(fdt, nodeoffset, "#size-cells", &len);
  44        if (!sc)
  45                return 2;
  46
  47        if (len != sizeof(*sc))
  48                return -FDT_ERR_BADNCELLS;
  49
  50        val = fdt32_to_cpu(*sc);
  51        if ((val < 0) || (val > FDT_MAX_NCELLS))
  52                return -FDT_ERR_BADNCELLS;
  53
  54        return val;
  55}
  56