You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
2.9 KiB
110 lines
2.9 KiB
6 years ago
|
/*
|
||
|
* 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 */
|