/** @file
  Root include file of C runtime library to support building the third-party
  libfdt library.

  Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
  Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. All rights reserved.<BR>
  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef FDT_LIB_SUPPORT_H_
#define FDT_LIB_SUPPORT_H_

#include <Base.h>
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>

typedef UINT8   uint8_t;
typedef UINT16  uint16_t;
typedef INT32   int32_t;
typedef UINT32  uint32_t;
typedef UINT64  uint64_t;
typedef UINTN   uintptr_t;
typedef UINTN   size_t;

#if defined __STDC_VERSION__ && __STDC_VERSION__ > 201710L
/* bool, true and false are keywords.  */
#else
typedef BOOLEAN bool;
#define true   (1 == 1)
#define false  (1 == 0)
#endif

//
// Definitions for global constants used by libfdt library routines
//
#define INT_MAX     0x7FFFFFFF           /* Maximum (signed) int value */
#define INT32_MAX   0x7FFFFFFF           /* Maximum (signed) int32 value */
#define UINT32_MAX  0xFFFFFFFF           /* Maximum unsigned int32 value */

//
// Function prototypes of libfdt Library routines
//
void *
memset     (
  void *,
  int,
  size_t
  );

int
memcmp      (
  const void *,
  const void *,
  size_t
  );

char *
strchr     (
  const char *,
  int
  );

char *
fdt_strrchr    (
  const char *,
  int
  );

unsigned long
fdt_strtoul     (
  const char *,
  char **,
  int
  );

char *
strcpy (
  char        *strDest,
  const char  *strSource
  );

//
// Macros that directly map functions to BaseLib, BaseMemoryLib, and DebugLib functions
//
#define memcpy(dest, source, count)   CopyMem(dest,source, (UINTN)(count))
#define memset(dest, ch, count)       SetMem(dest, (UINTN)(count),(UINT8)(ch))
#define memchr(buf, ch, count)        ScanMem8(buf, (UINTN)(count),(UINT8)ch)
#define memcmp(buf1, buf2, count)     (int)(CompareMem(buf1, buf2, (UINTN)(count)))
#define memmove(dest, source, count)  CopyMem(dest, source, (UINTN)(count))
#define strlen(str)                   (size_t)(AsciiStrLen(str))
#define strnlen(str, count)           (size_t)(AsciiStrnLenS(str, count))
#define strchr(str, ch)               ScanMem8(str, AsciiStrSize (str), (UINT8)ch)
#define strrchr(str, ch)              fdt_strrchr(str, ch)
#define strtoul(ptr, end_ptr, base)   fdt_strtoul(ptr, end_ptr, base)

#endif /* FDT_LIB_SUPPORT_H_ */
