/* * libfdt - Flat Device Tree manipulation (build/run environment adaptation) * Copyright (C) 2007 Gerald Van Baren, Custom IDEAS, vanbaren@cideas.com * Original version written by David Gibson, IBM Corporation. * * SPDX-License-Identifier: LGPL-2.1+ */ #ifndef _LIBFDT_ENV_H #define _LIBFDT_ENV_H #include "stdio.h" #include "sys/types.h" static int memcmp(const void * cs,const void * ct,size_t count) { const unsigned char *su1, *su2; signed char res = 0; for( su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--) if ((res = *su1 - *su2) != 0) break; return res; } static unsigned int strnlen(const char* s, unsigned int count) { const char *sc; for(sc = s;count -- && *sc != '\0';++sc) { } return (sc -s); } #define __LITTLE_ENDIAN typedef unsigned int uintptr_t; extern struct fdt_header *working_fdt; /* Pointer to the working fdt */ typedef unsigned short fdt16_t; typedef unsigned int fdt32_t; typedef unsigned long long fdt64_t; #define uswap_16(x) \ ((((x) & 0xff00) >> 8) | \ (((x) & 0x00ff) << 8)) #define uswap_32(x) \ ((((x) & 0xff000000) >> 24) | \ (((x) & 0x00ff0000) >> 8) | \ (((x) & 0x0000ff00) << 8) | \ (((x) & 0x000000ff) << 24)) #define _uswap_64(x, sfx) \ ((((x) & 0xff00000000000000##sfx) >> 56) | \ (((x) & 0x00ff000000000000##sfx) >> 40) | \ (((x) & 0x0000ff0000000000##sfx) >> 24) | \ (((x) & 0x000000ff00000000##sfx) >> 8) | \ (((x) & 0x00000000ff000000##sfx) << 8) | \ (((x) & 0x0000000000ff0000##sfx) << 24) | \ (((x) & 0x000000000000ff00##sfx) << 40) | \ (((x) & 0x00000000000000ff##sfx) << 56)) #if 1 # define uswap_64(x) _uswap_64(x, ull) #else # define uswap_64(x) _uswap_64(x, ) #endif #ifdef __LITTLE_ENDIAN # define cpu_to_le16(x) (x) # define cpu_to_le32(x) (x) # define cpu_to_le64(x) (x) # define le16_to_cpu(x) (x) # define le32_to_cpu(x) (x) # define le64_to_cpu(x) (x) # define cpu_to_be16(x) uswap_16(x) # define cpu_to_be32(x) uswap_32(x) # define cpu_to_be64(x) uswap_64(x) # define be16_to_cpu(x) uswap_16(x) # define be32_to_cpu(x) uswap_32(x) # define be64_to_cpu(x) uswap_64(x) #define fdt32_to_cpu(x) be32_to_cpu(x) #define cpu_to_fdt32(x) cpu_to_be32(x) #define fdt64_to_cpu(x) be64_to_cpu(x) #define cpu_to_fdt64(x) cpu_to_be64(x) #else # define cpu_to_le16(x) uswap_16(x) # define cpu_to_le32(x) uswap_32(x) # define cpu_to_le64(x) uswap_64(x) # define le16_to_cpu(x) uswap_16(x) # define le32_to_cpu(x) uswap_32(x) # define le64_to_cpu(x) uswap_64(x) # define cpu_to_be16(x) (x) # define cpu_to_be32(x) (x) # define cpu_to_be64(x) (x) # define be16_to_cpu(x) (x) # define be32_to_cpu(x) (x) # define be64_to_cpu(x) (x) #define fdt32_to_cpu(x) be32_to_cpu(x) #define cpu_to_fdt32(x) cpu_to_be32(x) #define fdt64_to_cpu(x) be64_to_cpu(x) #define cpu_to_fdt64(x) cpu_to_be64(x) #endif /* adding a ramdisk needs 0x44 bytes in version 2008.10 */ #define FDT_RAMDISK_OVERHEAD 0x80 #endif /* _LIBFDT_ENV_H */