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