/** @file
  This file declares Vector Handoff Info PPI that describes an array of
  interrupt and/or exception vectors that are in use and need to persist.

  This is an optional PPI that may be produced by SEC. If present, it provides
  a description of the interrupt and/or exception vectors that were established
  in the SEC Phase and need to persist into PEI and DXE.

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

  @par Revision Reference:
  This PPI is introduced in PI Version 1.2.1.

**/

#ifndef __VECTOR_HANDOFF_INFO_H__
#define __VECTOR_HANDOFF_INFO_H__

///
/// NOTE: EFI_PEI_VECTOR_HANDOFF_INFO_PPI_GUID can also be used in the PEI Phase
/// to build a GUIDed HOB that contains an array of EFI_VECTOR_HANDOFF_INFO.
///
#define EFI_PEI_VECTOR_HANDOFF_INFO_PPI_GUID \
  { 0x3cd652b4, 0x6d33, 0x4dce, { 0x89, 0xdb, 0x83, 0xdf, 0x97, 0x66, 0xfc, 0xca }}

///
/// Vector Handoff Info Attributes
///@{
#define EFI_VECTOR_HANDOFF_DO_NOT_HOOK  0x00000000
#define EFI_VECTOR_HANDOFF_HOOK_BEFORE  0x00000001
#define EFI_VECTOR_HANDOFF_HOOK_AFTER   0x00000002
#define EFI_VECTOR_HANDOFF_LAST_ENTRY   0x80000000
///@}

///
/// EFI_VECTOR_HANDOFF_INFO entries that describes the interrupt and/or
/// exception vectors in use in the PEI Phase.
///
typedef struct {
  //
  // The interrupt or exception vector that is in use and must be preserved.
  //
  UINT32      VectorNumber;
  //
  // A bitmask that describes the attributes of the interrupt or exception vector.
  //
  UINT32      Attribute;
  //
  // The GUID identifies the party who created the entry. For the
  // EFI_VECTOR_HANDOFF_DO_NOT_HOOK case, this establishes the single owner.
  //
  EFI_GUID    Owner;
} EFI_VECTOR_HANDOFF_INFO;

///
/// Provides a description of the interrupt and/or exception vectors that
/// were established in the SEC Phase and need to persist into PEI and DXE.
///
typedef struct _EFI_PEI_VECTOR_HANDOFF_INFO_PPI {
  //
  // Pointer to an array of interrupt and /or exception vectors.
  //
  EFI_VECTOR_HANDOFF_INFO    *Info;
} EFI_PEI_VECTOR_HANDOFF_INFO_PPI;

extern EFI_GUID  gEfiVectorHandoffInfoPpiGuid;

#endif
