/** @file
  EFI MM Status Code Protocol as defined in the PI 1.5 specification.

  This protocol provides the basic status code services while in MM.

  Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef _MM_STATUS_CODE_H__
#define _MM_STATUS_CODE_H__


#define EFI_MM_STATUS_CODE_PROTOCOL_GUID \
  { \
    0x6afd2b77, 0x98c1, 0x4acd, {0xa6, 0xf9, 0x8a, 0x94, 0x39, 0xde, 0xf, 0xb1} \
  }

typedef struct _EFI_MM_STATUS_CODE_PROTOCOL  EFI_MM_STATUS_CODE_PROTOCOL;

/**
  Service to emit the status code in MM.

  The EFI_MM_STATUS_CODE_PROTOCOL.ReportStatusCode() function enables a driver
  to emit a status code while in MM.  The reason that there is a separate protocol definition from the
  DXE variant of this service is that the publisher of this protocol will provide a service that is
  capability of coexisting with a foreground operational environment, such as an operating system
  after the termination of boot services.

  @param[in] This                Points to this instance of the EFI_MM_STATUS_CODE_PROTOCOL.
  @param[in] CodeType            DIndicates the type of status code being reported.
  @param[in] Value               Describes the current status of a hardware or software entity.
  @param[in] Instance            The enumeration of a hardware or software entity within the system.
  @param[in] CallerId            This optional parameter may be used to identify the caller.
  @param[in] Data                This optional parameter may be used to pass additional data.

  @retval EFI_SUCCESS            The function completed successfully.
  @retval EFI_INVALID_PARAMETER  The function should not be completed due to a device error.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_MM_REPORT_STATUS_CODE)(
  IN CONST EFI_MM_STATUS_CODE_PROTOCOL   *This,
  IN EFI_STATUS_CODE_TYPE                CodeType,
  IN EFI_STATUS_CODE_VALUE               Value,
  IN UINT32                              Instance,
  IN CONST EFI_GUID                      *CallerId,
  IN EFI_STATUS_CODE_DATA                *Data OPTIONAL
  );

struct _EFI_MM_STATUS_CODE_PROTOCOL {
  EFI_MM_REPORT_STATUS_CODE  ReportStatusCode;
};

extern EFI_GUID gEfiMmStatusCodeProtocolGuid;

#endif

