Publish definition of MCA/INIT/PMI Protocol & ESAL, as introduced in PI 1.2.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9616 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
207
MdePkg/Include/Protocol/McaInitPmi.h
Normal file
207
MdePkg/Include/Protocol/McaInitPmi.h
Normal file
@@ -0,0 +1,207 @@
|
||||
/** @file
|
||||
MCA/PMI/INIT Protocol as defined in PI Specification VOLUME 4.
|
||||
|
||||
This protocol provides services to handle Machine Checks (MCA),
|
||||
Initialization (INIT) events, and Platform Management Interrupt (PMI) events
|
||||
on an Intel Itanium Processor Family based system.
|
||||
|
||||
Copyright (c) 2009, Intel Corporation
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef __MCA_INIT_PMI_PROTOCOL_H__
|
||||
#define __MCA_INIT_PMI_PROTOCOL_H__
|
||||
|
||||
///
|
||||
/// Global ID for the MCA/PMI/INIT Protocol.
|
||||
///
|
||||
#define EFI_SAL_MCA_INIT_PMI_PROTOCOL_GUID \
|
||||
{ 0xb60dc6e8, 0x3b6f, 0x11d5, {0xaf, 0x9, 0x0, 0xa0, 0xc9, 0x44, 0xa0, 0x5b} }
|
||||
|
||||
|
||||
///
|
||||
/// Declare forward reference for the Timer Architectural Protocol
|
||||
///
|
||||
typedef struct _EFI_SAL_MCA_INIT_PMI_PROTOCOL EFI_SAL_MCA_INIT_PMI_PROTOCOL;
|
||||
|
||||
#pragma pack(1)
|
||||
///
|
||||
/// MCA Records Structure
|
||||
///
|
||||
typedef struct {
|
||||
UINT64 First : 1;
|
||||
UINT64 Last : 1;
|
||||
UINT64 EntryCount : 16;
|
||||
UINT64 DispatchedCount : 16;
|
||||
UINT64 Reserved : 30;
|
||||
} SAL_MCA_COUNT_STRUCTURE;
|
||||
|
||||
#pragma pack()
|
||||
|
||||
/**
|
||||
Prototype of MCA handler.
|
||||
|
||||
@param ModuleGlobal The context of MCA Handler
|
||||
@param ProcessorStateParameters The processor state parameters (PSP)
|
||||
@param MinstateBase Base address of the min-state
|
||||
@param RendezvouseStateInformation Rendezvous state information to be passed to
|
||||
the OS on OS MCA entry
|
||||
@param CpuIndex Index of the logical processor
|
||||
@param McaCountStructure Pointer to the MCA records structure
|
||||
@param CorrectedMachineCheck This flag is set to TRUE is the MCA has been
|
||||
corrected by the handler or by a previous handler
|
||||
|
||||
@retval EFI_SUCCESS Handler successfully returned
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SAL_MCA_HANDLER) (
|
||||
IN VOID *ModuleGlobal,
|
||||
IN UINT64 ProcessorStateParameters,
|
||||
IN EFI_PHYSICAL_ADDRESS MinstateBase,
|
||||
IN UINT64 RendezvouseStateInformation,
|
||||
IN UINT64 CpuIndex,
|
||||
IN SAL_MCA_COUNT_STRUCTURE *McaCountStructure,
|
||||
OUT BOOLEAN *CorrectedMachineCheck
|
||||
);
|
||||
|
||||
/**
|
||||
Prototype of INIT handler.
|
||||
|
||||
@param ModuleGlobal The context of INIT Handler
|
||||
@param ProcessorStateParameters The processor state parameters (PSP)
|
||||
@param MinstateBase Base address of the min-state
|
||||
@param McaInProgress This flag indicates if an MCA is in progress
|
||||
@param CpuIndex Index of the logical processor
|
||||
@param McaCountStructure Pointer to the MCA records structure
|
||||
@param DumpSwitchPressed This flag indicates the crash dump switch has been pressed
|
||||
|
||||
@retval EFI_SUCCESS Handler successfully returned
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SAL_INIT_HANDLER) (
|
||||
IN VOID *ModuleGlobal,
|
||||
IN UINT64 ProcessorStateParameters,
|
||||
IN EFI_PHYSICAL_ADDRESS MinstateBase,
|
||||
IN BOOLEAN McaInProgress,
|
||||
IN UINT64 CpuIndex,
|
||||
IN SAL_MCA_COUNT_STRUCTURE *McaCountStructure,
|
||||
OUT BOOLEAN *DumpSwitchPressed
|
||||
);
|
||||
|
||||
/**
|
||||
Prototype of PMI handler
|
||||
|
||||
@param ModuleGlobal The context of PMI Handler
|
||||
@param CpuIndex Index of the logical processor
|
||||
@param PmiVector The PMI vector number as received from the PALE_PMI exit state (GR24)
|
||||
|
||||
@retval EFI_SUCCESS Handler successfully returned
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SAL_PMI_HANDLER) (
|
||||
IN VOID *ModuleGlobal,
|
||||
IN UINT64 CpuIndex,
|
||||
IN UINT64 PmiVector
|
||||
);
|
||||
|
||||
/**
|
||||
Register a MCA handler with the MCA dispatcher.
|
||||
|
||||
@param This The EFI_SAL_MCA_INIT_PMI_PROTOCOL instance
|
||||
@param McaHandler The MCA handler to register
|
||||
@param ModuleGlobal The context of MCA Handler
|
||||
@param MakeFirst This flag specifies the handler should be made first in the list
|
||||
@param MakeLast This flag specifies the handler should be made last in the list
|
||||
|
||||
@retval EFI_SUCCESS MCA Handle was registered
|
||||
@retval EFI_OUT_OF_RESOURCES No more resources to register an MCA handler
|
||||
@retval EFI_INVALID_PARAMETER Invalid parameters were passed
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SAL_REGISTER_MCA_HANDLER) (
|
||||
IN EFI_SAL_MCA_INIT_PMI_PROTOCOL *This,
|
||||
IN EFI_SAL_MCA_HANDLER McaHandler,
|
||||
IN VOID *ModuleGlobal,
|
||||
IN BOOLEAN MakeFirst,
|
||||
IN BOOLEAN MakeLast
|
||||
);
|
||||
|
||||
/**
|
||||
Register an INIT handler with the INIT dispatcher.
|
||||
|
||||
@param This The EFI_SAL_MCA_INIT_PMI_PROTOCOL instance
|
||||
@param InitHandler The INIT handler to register
|
||||
@param ModuleGlobal The context of INIT Handler
|
||||
@param MakeFirst This flag specifies the handler should be made first in the list
|
||||
@param MakeLast This flag specifies the handler should be made last in the list
|
||||
|
||||
@retval EFI_SUCCESS INIT Handle was registered
|
||||
@retval EFI_OUT_OF_RESOURCES No more resources to register an INIT handler
|
||||
@retval EFI_INVALID_PARAMETER Invalid parameters were passed
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SAL_REGISTER_INIT_HANDLER) (
|
||||
IN EFI_SAL_MCA_INIT_PMI_PROTOCOL *This,
|
||||
IN EFI_SAL_INIT_HANDLER InitHandler,
|
||||
IN VOID *ModuleGlobal,
|
||||
IN BOOLEAN MakeFirst,
|
||||
IN BOOLEAN MakeLast
|
||||
);
|
||||
|
||||
/**
|
||||
Register a PMI handler with the PMI dispatcher.
|
||||
|
||||
@param This The EFI_SAL_MCA_INIT_PMI_PROTOCOL instance
|
||||
@param PmiHandler The PMI handler to register
|
||||
@param ModuleGlobal The context of PMI Handler
|
||||
@param MakeFirst This flag specifies the handler should be made first in the list
|
||||
@param MakeLast This flag specifies the handler should be made last in the list
|
||||
|
||||
@retval EFI_SUCCESS PMI Handle was registered
|
||||
@retval EFI_OUT_OF_RESOURCES No more resources to register an PMI handler
|
||||
@retval EFI_INVALID_PARAMETER Invalid parameters were passed
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_SAL_REGISTER_PMI_HANDLER) (
|
||||
IN EFI_SAL_MCA_INIT_PMI_PROTOCOL *This,
|
||||
IN EFI_SAL_PMI_HANDLER PmiHandler,
|
||||
IN VOID *ModuleGlobal,
|
||||
IN BOOLEAN MakeFirst,
|
||||
IN BOOLEAN MakeLast
|
||||
);
|
||||
|
||||
///
|
||||
/// This protocol is used to register MCA, INIT and PMI handlers with their respective dispatcher
|
||||
///
|
||||
struct _EFI_SAL_MCA_INIT_PMI_PROTOCOL {
|
||||
EFI_SAL_REGISTER_MCA_HANDLER RegisterMcaHandler;
|
||||
EFI_SAL_REGISTER_INIT_HANDLER RegisterInitHandler;
|
||||
EFI_SAL_REGISTER_PMI_HANDLER RegisterPmiHandler;
|
||||
BOOLEAN McaInProgress; ///< Whether MCA handler is in progress
|
||||
BOOLEAN InitInProgress; ///< Whether Init handler is in progress
|
||||
BOOLEAN PmiInProgress; ///< Whether Pmi handler is in progress
|
||||
};
|
||||
|
||||
extern EFI_GUID gEfiSalMcaInitPmiProtocolGuid;
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user