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