/** @file
  This file defines the EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL interface.

  Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
  (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>

  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#pragma once

typedef struct _EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL;

#define EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL_GUID \
    {  \
      0xbc0fe6bb, 0x2cc9, 0x463e, { 0x90, 0x82, 0xfa, 0x11, 0x76, 0xfc, 0x67, 0xde }  \
    }

typedef struct {
  EFI_HANDLE    RedfishServiceRestExHandle;     ///< REST EX EFI handle associated with this Redfish service.
  UINTN         RedfishServiceVersion;          ///< Redfish service version.
  CHAR16        *RedfishServiceLocation;        ///< Redfish service location.
  CHAR16        *RedfishServiceUuid;            ///< Redfish service UUID.
  CHAR16        *RedfishServiceOs;              ///< Redfish service OS.
  CHAR16        *RedfishServiceOsVersion;       ///< Redfish service OS version.
  CHAR16        *RedfishServiceProduct;         ///< Redfish service product name.
  CHAR16        *RedfishServiceProductVer;      ///< Redfish service product version.
  BOOLEAN       RedfishServiceUseHttps;         ///< Redfish service uses HTTPS.
} REDFISH_CONFIG_SERVICE_INFORMATION;

/**
  Initialize a configure handler of EDKII Redfish feature driver.

  This function will be called by the EDKII Redfish config handler driver to
  initialize the configure handler of each EDKII Redfish feature driver.

  @param[in]   This                    Pointer to EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL instance.
  @param[in]   RedfishServiceinfo      Redfish service information.

  @retval EFI_SUCCESS                  The handler has been initialized successfully.
  @retval EFI_DEVICE_ERROR             Failed to create or configure the REST EX protocol instance.
  @retval EFI_ALREADY_STARTED          This handler has already been initialized.
  @retval Other                        Error happens during the initialization.

**/
typedef
EFI_STATUS
(EFIAPI *EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL_INIT)(
  IN  EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL *This,
  IN  REDFISH_CONFIG_SERVICE_INFORMATION  *RedfishServiceinfo
  );

/**
  Stop a Redfish configure handler of EDKII Redfish feature driver.

  @param[in]   This                Pointer to EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL instance.

  @retval EFI_SUCCESS              This handler has been stoped successfully.
  @retval Others                   Some error happened.

**/
typedef
EFI_STATUS
(EFIAPI *EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL_STOP)(
  IN     EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL    *This
  );

struct _EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL {
  EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL_INIT    Init;
  EDKII_REDFISH_CONFIG_HANDLER_PROTOCOL_STOP    Stop;
};

extern EFI_GUID  gdkIIRedfishConfigHandlerProtocolGuid;
