/** @file

  Debug Mask Protocol.

Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef __DEBUG_MASK_H__
#define __DEBUG_MASK_H__

///
/// Protocol GUID for DXE Phase Debug Mask support
///
#define EFI_DEBUG_MASK_PROTOCOL_GUID \
  { 0x4c8a2451, 0xc207, 0x405b, {0x96, 0x94, 0x99, 0xea, 0x13, 0x25, 0x13, 0x41} }

///
/// Forward reference for pure ANSI compatability
///
typedef struct _EFI_DEBUG_MASK_PROTOCOL EFI_DEBUG_MASK_PROTOCOL;

///
///
///
#define EFI_DEBUG_MASK_REVISION  0x00010000

//
// DebugMask member functions definition
//
typedef
EFI_STATUS
(EFIAPI *EFI_GET_DEBUG_MASK)(
  IN EFI_DEBUG_MASK_PROTOCOL  *This,
  IN OUT UINTN                *CurrentDebugMask
  );

typedef
EFI_STATUS
(EFIAPI *EFI_SET_DEBUG_MASK)(
  IN EFI_DEBUG_MASK_PROTOCOL  *This,
  IN UINTN                    NewDebugMask
  );

///
/// DebugMask protocol definition
///
struct _EFI_DEBUG_MASK_PROTOCOL {
  INT64                 Revision;
  EFI_GET_DEBUG_MASK    GetDebugMask;
  EFI_SET_DEBUG_MASK    SetDebugMask;
};

extern EFI_GUID  gEfiDebugMaskProtocolGuid;

///
/// GUID used to store the global debug mask in an the "EFIDebug" EFI Variabe
/// Also used as a GUIDed HOB that contains a UINT32 debug mask default value
///
#define EFI_GENERIC_VARIABLE_GUID \
  { 0x59d1c24f, 0x50f1, 0x401a, {0xb1, 0x01, 0xf3, 0x3e, 0x0d, 0xae, 0xd4, 0x43} }

#define DEBUG_MASK_VARIABLE_NAME  L"EFIDebug"

extern EFI_GUID  gEfiGenericVariableGuid;

#endif
