mirror of https://github.com/acidanthera/audk.git
208 lines
7.9 KiB
C
208 lines
7.9 KiB
C
/** @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 - 2018, Intel Corporation. All rights reserved.<BR>
|
|
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
|
|
|