/** @file
  Interface header file for the Enhanced warning log library class.

  @copyright
  INTEL CONFIDENTIAL
  Copyright 2018 - 2021 Intel Corporation. <BR>

  The source code contained or described herein and all documents related to the
  source code ("Material") are owned by Intel Corporation or its suppliers or
  licensors. Title to the Material remains with Intel Corporation or its suppliers
  and licensors. The Material may contain trade secrets and proprietary    and
  confidential information of Intel Corporation and its suppliers and licensors,
  and is protected by worldwide copyright and trade secret laws and treaty
  provisions. No part of the Material may be used, copied, reproduced, modified,
  published, uploaded, posted, transmitted, distributed, or disclosed in any way
  without Intel's prior express written permission.

  No license under any patent, copyright, trade secret or other intellectual
  property right is granted to or conferred upon you by disclosure or delivery
  of the Materials, either expressly, by implication, inducement, estoppel or
  otherwise. Any license under such intellectual property rights must be
  express and approved by Intel in writing.

  Unless otherwise agreed by Intel in writing, you may not remove or alter
  this notice or any other notice embedded in Materials by Intel or
  Intel's suppliers or licensors in any way.
**/

#ifndef _HOB_ENHANCEDWARNINGLOG_H_
#define _HOB_ENHANCEDWARNINGLOG_H_

#include <fsp/util.h>
#include "EnhancedWarningLogLib.h"

#define FSP_HOB_EWLID_GUID { \
  0x00, 0x58, 0xe0, 0xd8, 0x5e, 0x00, 0x62, 0x44,\
  0xaa, 0x3d, 0x9c, 0x6b, 0x47, 0x4, 0x92, 0x0b \
}

#endif //_HOB_ENHANCEDWARNINGLOG_H_
