Skip to content
Snippets Groups Projects
fdt_addresses.c 1005 B
Newer Older
  • Learn to ignore specific revisions
  • Simon Glass's avatar
    Simon Glass committed
    /*
     * libfdt - Flat Device Tree manipulation
     * Copyright (C) 2014 David Gibson <david@gibson.dropbear.id.au>
     * SPDX-License-Identifier:	GPL-2.0+ BSD-2-Clause
     */
    #include "libfdt_env.h"
    
    #ifndef USE_HOSTCC
    #include <fdt.h>
    #include <libfdt.h>
    #else
    #include "fdt_host.h"
    #endif
    
    #include "libfdt_internal.h"
    
    int fdt_address_cells(const void *fdt, int nodeoffset)
    {
    	const fdt32_t *ac;
    	int val;
    	int len;
    
    	ac = fdt_getprop(fdt, nodeoffset, "#address-cells", &len);
    	if (!ac)
    		return 2;
    
    	if (len != sizeof(*ac))
    		return -FDT_ERR_BADNCELLS;
    
    	val = fdt32_to_cpu(*ac);
    	if ((val <= 0) || (val > FDT_MAX_NCELLS))
    		return -FDT_ERR_BADNCELLS;
    
    	return val;
    }
    
    int fdt_size_cells(const void *fdt, int nodeoffset)
    {
    	const fdt32_t *sc;
    	int val;
    	int len;
    
    	sc = fdt_getprop(fdt, nodeoffset, "#size-cells", &len);
    	if (!sc)
    		return 2;
    
    	if (len != sizeof(*sc))
    		return -FDT_ERR_BADNCELLS;
    
    	val = fdt32_to_cpu(*sc);
    	if ((val < 0) || (val > FDT_MAX_NCELLS))
    		return -FDT_ERR_BADNCELLS;
    
    	return val;
    }