/** @file
  Google Test mocks for FdtLib

  Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
  Copyright (c) 2023, Intel Corporation. All rights reserved.
  SPDX-License-Identifier: BSD-2-Clause-Patent
**/

#pragma once

#include <Library/GoogleTestLib.h>
#include <Library/FunctionMockLib.h>
extern "C" {
  #include <Base.h>
  #include <Library/FdtLib.h>
}

struct MockFdtLib {
  MOCK_INTERFACE_DECLARATION (MockFdtLib);

  MOCK_FUNCTION_DECLARATION (
    UINT16,
    Fdt16ToCpu,
    (IN UINT16 Value)
    );
  MOCK_FUNCTION_DECLARATION (
    UINT16,
    CpuToFdt16,
    (IN UINT16 Value)
    );
  MOCK_FUNCTION_DECLARATION (
    UINT32,
    Fdt32ToCpu,
    (IN UINT32 Value)
    );
  MOCK_FUNCTION_DECLARATION (
    UINT32,
    CpuToFdt32,
    (IN UINT32 Value)
    );
  MOCK_FUNCTION_DECLARATION (
    UINT64,
    Fdt64ToCpu,
    (IN UINT64 Value)
    );
  MOCK_FUNCTION_DECLARATION (
    UINT64,
    CpuToFdt64,
    (IN UINT64 Value)
    );
  MOCK_FUNCTION_DECLARATION (
    INT32,
    FdtCheckHeader,
    (IN CONST VOID  *Fdt)
    );
  MOCK_FUNCTION_DECLARATION (
    INT32,
    FdtCreateEmptyTree,
    (IN VOID    *Buffer,
     IN UINT32  BufferSize)
    );
  MOCK_FUNCTION_DECLARATION (
    INT32,
    FdtNextNode,
    (IN CONST VOID  *Fdt,
     IN INT32       Offset,
     IN INT32       *Depth)
    );
  MOCK_FUNCTION_DECLARATION (
    INT32,
    FdtFirstSubnode,
    (IN CONST VOID  *Fdt,
     IN INT32       Offset)
    );
  MOCK_FUNCTION_DECLARATION (
    INT32,
    FdtNextSubnode,
    (IN CONST VOID  *Fdt,
     IN INT32       Offset)
    );
  MOCK_FUNCTION_DECLARATION (
    INT32,
    FdtSubnodeOffsetNameLen,
    (IN CONST VOID   *Fdt,
     IN INT32        ParentOffset,
     IN CONST CHAR8  *Name,
     IN INT32        NameLength)
    );
  MOCK_FUNCTION_DECLARATION (
    INT32,
    FdtNodeOffsetByPropertyValue,
    (IN CONST VOID   *Fdt,
     IN INT32        StartOffset,
     IN CONST CHAR8  *PropertyName,
     IN CONST VOID   *PropertyValue,
     IN INT32        PropertyLength)
    );
  MOCK_FUNCTION_DECLARATION (
    CONST FDT_PROPERTY *,
    FdtGetProperty,
    (IN CONST VOID   *Fdt,
     IN INT32        NodeOffset,
     IN CONST CHAR8  *Name,
     IN INT32        *Length)
    );
  MOCK_FUNCTION_DECLARATION (
    INT32,
    FdtFirstPropertyOffset,
    (IN CONST VOID  *Fdt,
     IN INT32       NodeOffset)
    );
  MOCK_FUNCTION_DECLARATION (
    INT32,
    FdtNextPropertyOffset,
    (IN CONST VOID  *Fdt,
     IN INT32       NodeOffset)
    );
  MOCK_FUNCTION_DECLARATION (
    CONST FDT_PROPERTY *,
    FdtGetPropertyByOffset,
    (IN CONST VOID  *Fdt,
     IN INT32       Offset,
     IN INT32       *Length)
    );
  MOCK_FUNCTION_DECLARATION (
    CONST CHAR8 *,
    FdtGetString,
    (IN CONST VOID  *Fdt,
     IN INT32       StrOffset,
     IN INT32       *Length        OPTIONAL)
    );
  MOCK_FUNCTION_DECLARATION (
    INT32,
    FdtAddSubnode,
    (IN VOID         *Fdt,
     IN INT32        ParentOffset,
     IN CONST CHAR8  *Name)
    );
  MOCK_FUNCTION_DECLARATION (
    INT32,
    FdtSetProperty,
    (IN VOID         *Fdt,
     IN INT32        NodeOffset,
     IN CONST CHAR8  *Name,
     IN CONST VOID   *Value,
     IN UINT32       Length)
    );
  MOCK_FUNCTION_DECLARATION (
    CONST CHAR8 *,
    FdtGetName,
    (IN CONST VOID  *Fdt,
     IN INT32       NodeOffset,
     IN INT32       *Length)
    );
  MOCK_FUNCTION_DECLARATION (
    INT32,
    FdtNodeDepth,
    (IN CONST VOID  *Fdt,
     IN INT32       NodeOffset)
    );
  MOCK_FUNCTION_DECLARATION (
    INT32,
    FdtDelNode,
    (IN VOID   *Fdt,
     IN INT32  NodeOffset)
    );
  MOCK_FUNCTION_DECLARATION (
    INT32,
    FdtGetPath,
    (IN CONST VOID  *Fdt,
     IN INT32       NodeOffset,
     IN VOID        *Buffer,
     IN UINT32      BufferSize)
    );
};
