/** @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
