/** @file
  Google Test mocks for UefiBootServicesTableLib

  Copyright (c) Microsoft Corporation.
  SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include <GoogleTest/Library/MockUefiBootServicesTableLib.h>

MOCK_INTERFACE_DEFINITION (MockUefiBootServicesTableLib);
MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_GetMemoryMap, 5, EFIAPI);
MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_CreateEvent, 5, EFIAPI);
MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_CloseEvent, 1, EFIAPI);
MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_HandleProtocol, 3, EFIAPI);
MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_LocateProtocol, 3, EFIAPI);
MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_CreateEventEx, 6, EFIAPI);
MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_LocateDevicePath, 3, EFIAPI);
MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_OpenProtocol, 6, EFIAPI);
MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_CloseProtocol, 4, EFIAPI);
MOCK_FUNCTION_DEFINITION (MockUefiBootServicesTableLib, gBS_InstallConfigurationTable, 2, EFIAPI);

static EFI_BOOT_SERVICES  LocalBs = {
  { 0, 0, 0, 0, 0 },             // EFI_TABLE_HEADER
  NULL,                          // EFI_RAISE_TPL
  NULL,                          // EFI_RESTORE_TPL
  NULL,                          // EFI_ALLOCATE_PAGES
  NULL,                          // EFI_FREE_PAGES
  gBS_GetMemoryMap,              // EFI_GET_MEMORY_MAP
  NULL,                          // EFI_ALLOCATE_POOL
  NULL,                          // EFI_FREE_POOL
  gBS_CreateEvent,               // EFI_CREATE_EVENT
  NULL,                          // EFI_SET_TIMER
  NULL,                          // EFI_WAIT_FOR_EVENT
  NULL,                          // EFI_SIGNAL_EVENT
  gBS_CloseEvent,                // EFI_CLOSE_EVENT
  NULL,                          // EFI_CHECK_EVENT
  NULL,                          // EFI_INSTALL_PROTOCOL_INTERFACE
  NULL,                          // EFI_REINSTALL_PROTOCOL_INTERFACE
  NULL,                          // EFI_UNINSTALL_PROTOCOL_INTERFACE
  gBS_HandleProtocol,            // EFI_HANDLE_PROTOCOL
  NULL,                          // VOID
  NULL,                          // EFI_REGISTER_PROTOCOL_NOTIFY
  NULL,                          // EFI_LOCATE_HANDLE
  gBS_LocateDevicePath,          // EFI_LOCATE_DEVICE_PATH
  gBS_InstallConfigurationTable, // EFI_INSTALL_CONFIGURATION_TABLE
  NULL,                          // EFI_IMAGE_LOAD
  NULL,                          // EFI_IMAGE_START
  NULL,                          // EFI_EXIT
  NULL,                          // EFI_IMAGE_UNLOAD
  NULL,                          // EFI_EXIT_BOOT_SERVICES
  NULL,                          // EFI_GET_NEXT_MONOTONIC_COUNT
  NULL,                          // EFI_STALL
  NULL,                          // EFI_SET_WATCHDOG_TIMER
  NULL,                          // EFI_CONNECT_CONTROLLER
  NULL,                          // EFI_DISCONNECT_CONTROLLER
  gBS_OpenProtocol,              // EFI_OPEN_PROTOCOL
  gBS_CloseProtocol,             // EFI_CLOSE_PROTOCOL
  NULL,                          // EFI_OPEN_PROTOCOL_INFORMATION
  NULL,                          // EFI_PROTOCOLS_PER_HANDLE
  NULL,                          // EFI_LOCATE_HANDLE_BUFFER
  gBS_LocateProtocol,            // EFI_LOCATE_PROTOCOL
  NULL,                          // EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES
  NULL,                          // EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES
  NULL,                          // EFI_CALCULATE_CRC32
  NULL,                          // EFI_COPY_MEM
  NULL,                          // EFI_SET_MEM
  gBS_CreateEventEx              // EFI_CREATE_EVENT_EX
};

extern "C" {
  EFI_BOOT_SERVICES  *gBS         = &LocalBs;
  EFI_HANDLE         gImageHandle = NULL;
  EFI_SYSTEM_TABLE   *gST         = NULL;
}
