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:
xli24 2009-12-25 08:20:37 +00:00
parent e8ade0efd0
commit 41335d2244
4 changed files with 719 additions and 0 deletions

View File

@ -0,0 +1,214 @@
/** @file
Definition of Extended SAL Boot Service Protocol
The Extended SAL Boot Service Protocol provides a mechanisms for platform specific
drivers to update the SAL System Table and register Extended SAL Procedures that are
callable in physical or virtual mode using the SAL calling convention.
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 _EXTENDED_SAL_BOOT_SERVICE_PROTOCOL_H_
#define _EXTENDED_SAL_BOOT_SERVICE_PROTOCOL_H_
#include <IndustryStandard/Sal.h>
#define EXTENDED_SAL_BOOT_SERVICE_PROTOCOL_GUID \
{ 0xde0ee9a4, 0x3c7a, 0x44f2, {0xb7, 0x8b, 0xe3, 0xcc, 0xd6, 0x9c, 0x3a, 0xf7 } }
typedef struct _EXTENDED_SAL_BOOT_SERVICE_PROTOCOL EXTENDED_SAL_BOOT_SERVICE_PROTOCOL;
/**
Adds platform specific information to the to the header of the SAL System Table.
@param This A pointer to the EXTENDED_SAL_BOOT_SERVICE_PROTOCOL instance.
@param SalAVersion Version of recovery SAL PEIM(s) in BCD format. Higher byte contains
the major revision and the lower byte contains the minor revision.
@param SalBVersion Version of DXE SAL Driver in BCD format. Higher byte contains
the major revision and the lower byte contains the minor revision.
@param OemId A pointer to a Null-terminated ASCII string that contains OEM unique string.
The string cannot be longer than 32 bytes in total length
@param ProductId A pointer to a Null-terminated ASCII string that uniquely identifies a family of
compatible products. The string cannot be longer than 32 bytes in total length.
@retval EFI_SUCCESS The SAL System Table header was updated successfully.
@retval EFI_INVALID_PARAMETER OemId is NULL.
@retval EFI_INVALID_PARAMETER ProductId is NULL.
@retval EFI_INVALID_PARAMETER The length of OemId is greater than 32 characters.
@retval EFI_INVALID_PARAMETER The length of ProductId is greater than 32 characters.
**/
typedef
EFI_STATUS
(EFIAPI *EXTENDED_SAL_ADD_SST_INFO) (
IN EXTENDED_SAL_BOOT_SERVICE_PROTOCOL *This,
IN UINT16 SalAVersion,
IN UINT16 SalBVersion,
IN CHAR8 *OemId,
IN CHAR8 *ProductId
);
/**
Adds an entry to the SAL System Table.
This function adds the SAL System Table Entry specified by TableEntry and EntrySize
to the SAL System Table.
@param This A pointer to the EXTENDED_SAL_BOOT_SERVICE_PROTOCOL instance.
@param TableEntry Pointer to a buffer containing a SAL System Table entry that is EntrySize bytes
in length. The first byte of the TableEntry describes the type of entry.
@param EntrySize The size, in bytes, of TableEntry.
@retval EFI_SUCCESSThe SAL System Table was updated successfully.
@retval EFI_INVALID_PARAMETER TableEntry is NULL.
@retval EFI_INVALID_PARAMETER TableEntry specifies an invalid entry type.
@retval EFI_INVALID_PARAMETER EntrySize is not valid for this type of entry.
**/
typedef
EFI_STATUS
(EFIAPI *EXTENDED_SAL_ADD_SST_ENTRY) (
IN EXTENDED_SAL_BOOT_SERVICE_PROTOCOL *This,
IN UINT8 *TableEntry,
IN UINTN EntrySize
);
/**
Internal ESAL procedures.
This is prototype of internal Extended SAL procedures, which is registerd by
EXTENDED_SAL_REGISTER_INTERNAL_PROC service.
@param FunctionId The Function ID associated with this Extended SAL Procedure.
@param Arg2 Second argument to the Extended SAL procedure.
@param Arg3 Third argument to the Extended SAL procedure.
@param Arg4 Fourth argument to the Extended SAL procedure.
@param Arg5 Fifth argument to the Extended SAL procedure.
@param Arg6 Sixth argument to the Extended SAL procedure.
@param Arg7 Seventh argument to the Extended SAL procedure.
@param Arg8 Eighth argument to the Extended SAL procedure.
@param VirtualMode TRUE if the Extended SAL Procedure is being invoked in virtual mode.
FALSE if the Extended SAL Procedure is being invoked in physical mode.
@param ModuleGlobal A pointer to the global context associated with this Extended SAL Procedure.
@return The result returned from the specified Extended SAL Procedure
**/
typedef
SAL_RETURN_REGS
(EFIAPI *SAL_INTERNAL_EXTENDED_SAL_PROC) (
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8,
IN BOOLEAN VirtualMode,
IN VOID *ModuleGlobal OPTIONAL
);
/**
Registers an Extended SAL Procedure.
The Extended SAL Procedure specified by InternalSalProc and named by ClassGuidLo,
ClassGuidHi, and FunctionId is added to the set of available Extended SAL Procedures.
@param This A pointer to the EXTENDED_SAL_BOOT_SERVICE_PROTOCOL instance.
@param ClassGuidLo The lower 64-bits of the class GUID for the Extended SAL Procedure being added.
Each class GUID contains one or more functions specified by a Function ID.
@param ClassGuidHi The upper 64-bits of the class GUID for the Extended SAL Procedure being added.
Each class GUID contains one or more functions specified by a Function ID.
@param FunctionId The Function ID for the Extended SAL Procedure that is being added. This Function
ID is a member of the Extended SAL Procedure class specified by ClassGuidLo
and ClassGuidHi.
@param InternalSalProc A pointer to the Extended SAL Procedure being added.
@param PhysicalModuleGlobal Pointer to a module global structure. This is a physical mode pointer.
This pointer is passed to the Extended SAL Procedure specified by ClassGuidLo,
ClassGuidHi, FunctionId, and InternalSalProc. If the system is in physical mode,
then this pointer is passed unmodified to InternalSalProc. If the system is in
virtual mode, then the virtual address associated with this pointer is passed to
InternalSalProc.
@retval EFI_SUCCESS The Extended SAL Procedure was added.
@retval EFI_OUT_OF_RESOURCES There are not enough resources available to add the Extended SAL Procedure.
**/
typedef
EFI_STATUS
(EFIAPI *EXTENDED_SAL_REGISTER_INTERNAL_PROC) (
IN EXTENDED_SAL_BOOT_SERVICE_PROTOCOL *This,
IN UINT64 ClassGuidLo,
IN UINT64 ClassGuidHi,
IN UINT64 FunctionId,
IN SAL_INTERNAL_EXTENDED_SAL_PROC InternalSalProc,
IN VOID *PhysicalModuleGlobal OPTIONAL
);
/**
Calls a previously registered Extended SAL Procedure.
This function calls the Extended SAL Procedure specified by ClassGuidLo, ClassGuidHi,
and FunctionId. The set of previously registered Extended SAL Procedures is searched for a
matching ClassGuidLo, ClassGuidHi, and FunctionId. If a match is not found, then
EFI_SAL_NOT_IMPLEMENTED is returned.
@param ClassGuidLo The lower 64-bits of the class GUID for the Extended SAL Procedure
that is being called.
@param ClassGuidHi The upper 64-bits of the class GUID for the Extended SAL Procedure
that is being called.
@param FunctionId Function ID for the Extended SAL Procedure being called.
@param Arg2 Second argument to the Extended SAL procedure.
@param Arg3 Third argument to the Extended SAL procedure.
@param Arg4 Fourth argument to the Extended SAL procedure.
@param Arg5 Fifth argument to the Extended SAL procedure.
@param Arg6 Sixth argument to the Extended SAL procedure.
@param Arg7 Seventh argument to the Extended SAL procedure.
@param Arg8 Eighth argument to the Extended SAL procedure.
@retval EFI_SAL_NOT_IMPLEMENTED The Extended SAL Procedure specified by ClassGuidLo,
ClassGuidHi, and FunctionId has not been registered.
@retval EFI_SAL_VIRTUAL_ADDRESS_ERROR This function was called in virtual mode before virtual mappings
for the specified Extended SAL Procedure are available.
@retval Other The result returned from the specified Extended SAL Procedure
**/
typedef
SAL_RETURN_REGS
(EFIAPI *EXTENDED_SAL_PROC) (
IN UINT64 ClassGuidLo,
IN UINT64 ClassGuidHi,
IN UINT64 FunctionId,
IN UINT64 Arg2,
IN UINT64 Arg3,
IN UINT64 Arg4,
IN UINT64 Arg5,
IN UINT64 Arg6,
IN UINT64 Arg7,
IN UINT64 Arg8
);
///
/// The EXTENDED_SAL_BOOT_SERVICE_PROTOCOL provides a mechanisms for platform specific
/// drivers to update the SAL System Table and register Extended SAL Procedures that are
/// callable in physical or virtual mode using the SAL calling convention.
///
struct _EXTENDED_SAL_BOOT_SERVICE_PROTOCOL {
EXTENDED_SAL_ADD_SST_INFO AddSalSystemTableInfo;
EXTENDED_SAL_ADD_SST_ENTRY AddSalSystemTableEntry;
EXTENDED_SAL_REGISTER_INTERNAL_PROC RegisterExtendedSalProc;
EXTENDED_SAL_PROC ExtendedSalProc;
};
extern EFI_GUID gEfiExtendedSalBootServiceProtocolGuid;
#endif

View File

@ -0,0 +1,275 @@
/** @file
The standard set of Extended SAL service classes.
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 _EXTENDED_SAL_SERVICE_CLASSES_H_
#define _EXTENDED_SAL_SERVICE_CLASSES_H_
///
/// Extended SAL Base I/O Services Class
///
///@{
#define EFI_EXTENDED_SAL_BASE_IO_SERVICES_PROTOCOL_GUID_LO 0x451531e15aea42b5
#define EFI_EXTENDED_SAL_BASE_IO_SERVICES_PROTOCOL_GUID_HI 0xa6657525d5b831bc
#define EFI_EXTENDED_SAL_BASE_IO_SERVICES_PROTOCOL_GUID \
{ 0x5aea42b5, 0x31e1, 0x4515, {0xbc, 0x31, 0xb8, 0xd5, 0x25, 0x75, 0x65, 0xa6 } }
typedef enum {
IoReadFunctionId,
IoWriteFunctionId,
MemReadFunctionId,
MemWriteFunctionId
} EFI_EXTENDED_SAL_BASE_IO_SERVICES_FUNC_ID;
///@}
///
/// Extended SAL Stall Services Class
///
///@{
#define EFI_EXTENDED_SAL_STALL_SERVICES_PROTOCOL_GUID_LO 0x4d8cac2753a58d06
#define EFI_EXTENDED_SAL_STALL_SERVICES_PROTOCOL_GUID_HI 0x704165808af0e9b5
#define EFI_EXTENDED_SAL_STALL_SERVICES_PROTOCOL_GUID \
{ 0x53a58d06, 0xac27, 0x4d8c, {0xb5, 0xe9, 0xf0, 0x8a, 0x80, 0x65, 0x41, 0x70 } }
typedef enum {
StallFunctionId
} EFI_EXTENDED_SAL_STALL_FUNC_ID;
///@}
///
/// Extended SAL Real Time Clock Services Class
///
///@{
#define EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID_LO 0x4d02efdb7e97a470
#define EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID_HI 0x96a27bd29061ce8f
#define EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID \
{ 0x7e97a470, 0xefdb, 0x4d02, {0x8f, 0xce, 0x61, 0x90, 0xd2, 0x7b, 0xa2, 0x96 } }
typedef enum {
GetTimeFunctionId,
SetTimeFunctionId,
GetWakeupTimeFunctionId,
SetWakeupTimeFunctionId,
GetRtcFreqFunctionId,
InitializeThresholdFunctionId,
BumpThresholdCountFunctionId,
GetThresholdCountFunctionId
} EFI_EXTENDED_SAL_RTC_SERVICES_FUNC_ID;
///@}
///
/// Extended SAL Variable Services Class
///
///@{
#define EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID_LO 0x4370c6414ecb6c53
#define EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID_HI 0x78836e490e3bb28c
#define EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID \
{ 0x4ecb6c53, 0xc641, 0x4370, {0x8c, 0xb2, 0x3b, 0x0e, 0x49, 0x6e, 0x83, 0x78 } }
typedef enum {
EsalGetVariableFunctionId,
EsalGetNextVariableNameFunctionId,
EsalSetVariableFunctionId,
EsalQueryVariableInfoFunctionId
} EFI_EXTENDED_SAL_VARIABLE_SERVICES_FUNC_ID;
///@}
///
/// Extended SAL Monotonic Counter Services Class
///
///@{
#define EFI_EXTENDED_SAL_MTC_SERVICES_PROTOCOL_GUID_LO 0x408b75e8899afd18
#define EFI_EXTENDED_SAL_MTC_SERVICES_PROTOCOL_GUID_HI 0x54f4cd7e2e6e1aa4
#define EFI_EXTENDED_SAL_MTC_SERVICES_PROTOCOL_GUID \
{ 0x899afd18, 0x75e8, 0x408b, {0xa4, 0x1a, 0x6e, 0x2e, 0x7e, 0xcd, 0xf4, 0x54 } }
typedef enum {
GetNextHighMonotonicCountFunctionId
} EFI_EXTENDED_SAL_MTC_SERVICES_FUNC_ID;
///@}
///
/// Extended SAL Reset Services Class
///
///@{
#define EFI_EXTENDED_SAL_RESET_SERVICES_PROTOCOL_GUID_LO 0x46f58ce17d019990
#define EFI_EXTENDED_SAL_RESET_SERVICES_PROTOCOL_GUID_HI 0xa06a6798513c76a7
#define EFI_EXTENDED_SAL_RESET_SERVICES_PROTOCOL_GUID \
{ 0x7d019990, 0x8ce1, 0x46f5, {0xa7, 0x76, 0x3c, 0x51, 0x98, 0x67, 0x6a, 0xa0 } }
typedef enum {
ResetSystemFunctionId
} EFI_EXTENDED_SAL_RESET_SERVICES_FUNC_ID;
///@}
///
/// Extended SAL Status Code Services Class
///
///@{
#define EFI_EXTENDED_SAL_STATUS_CODE_SERVICES_PROTOCOL_GUID_LO 0x420f55e9dbd91d
#define EFI_EXTENDED_SAL_STATUS_CODE_SERVICES_PROTOCOL_GUID_HI 0x4fb437849f5e3996
#define EFI_EXTENDED_SAL_STATUS_CODE_SERVICES_PROTOCOL_GUID \
{ 0xdbd91d, 0x55e9, 0x420f, {0x96, 0x39, 0x5e, 0x9f, 0x84, 0x37, 0xb4, 0x4f } }
typedef enum {
ReportStatusCodeServiceFunctionId
} EFI_EXTENDED_SAL_STATUS_CODE_SERVICES_FUNC_ID;
///@}
///
/// Extended SAL Firmware Volume Block Services Class
///
///@{
#define EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID_LO 0x4f1dbcbba2271df1
#define EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID_HI 0x1a072f17bc06a998
#define EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID \
{ 0xa2271df1, 0xbcbb, 0x4f1d, {0x98, 0xa9, 0x06, 0xbc, 0x17, 0x2f, 0x07, 0x1a } }
typedef enum {
ReadFunctionId,
WriteFunctionId,
EraseBlockFunctionId,
GetVolumeAttributesFunctionId,
SetVolumeAttributesFunctionId,
GetPhysicalAddressFunctionId,
GetBlockSizeFunctionId,
} EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_FUNC_ID;
///@}
///
/// Extended SAL MP Services Class
///
///@{
#define EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_LO 0x4dc0cf18697d81a2
#define EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_HI 0x3f8a613b11060d9e
#define EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID \
{ 0x697d81a2, 0xcf18, 0x4dc0, {0x9e, 0x0d, 0x06, 0x11, 0x3b, 0x61, 0x8a, 0x3f } }
typedef enum {
AddCpuDataFunctionId,
RemoveCpuDataFunctionId,
ModifyCpuDataFunctionId,
GetCpuDataByIDFunctionId,
GetCpuDataByIndexFunctionId,
SendIpiFunctionId,
CurrentProcInfoFunctionId,
NumProcessorsFunctionId,
SetMinStateFunctionId,
GetMinStateFunctionId
} EFI_EXTENDED_SAL_MP_SERVICES_FUNC_ID;
///@}
///
/// Extended SAL PAL Services Class
///
///@{
#define EFI_EXTENDED_SAL_PAL_SERVICES_PROTOCOL_GUID_LO 0x438d0fc2e1cd9d21
#define EFI_EXTENDED_SAL_PAL_SERVICES_PROTOCOL_GUID_HI 0x571e966de6040397
#define EFI_EXTENDED_SAL_PAL_SERVICES_PROTOCOL_GUID \
{ 0xe1cd9d21, 0x0fc2, 0x438d, {0x97, 0x03, 0x04, 0xe6, 0x6d, 0x96, 0x1e, 0x57 } }
typedef enum {
PalProcFunctionId,
SetNewPalEntryFunctionId,
GetNewPalEntryFunctionId,
EsalUpdatePalFunctionId
} EFI_EXTENDED_SAL_PAL_SERVICES_FUNC_ID;
///@}
///
/// Extended SAL Base Services Class
///
///@{
#define EFI_EXTENDED_SAL_BASE_SERVICES_PROTOCOL_GUID_LO 0x41c30fe0d9e9fa06
#define EFI_EXTENDED_SAL_BASE_SERVICES_PROTOCOL_GUID_HI 0xf894335a4283fb96
#define EFI_EXTENDED_SAL_BASE_SERVICES_PROTOCOL_GUID \
{ 0xd9e9fa06, 0x0fe0, 0x41c3, {0x96, 0xfb, 0x83, 0x42, 0x5a, 0x33, 0x94, 0xf8 } }
typedef enum {
SalSetVectorsFunctionId,
SalMcRendezFunctionId,
SalMcSetParamsFunctionId,
EsalGetVectorsFunctionId,
EsalMcGetParamsFunctionId,
EsalMcGetMcParamsFunctionId,
EsalGetMcCheckinFlagsFunctionId,
EsalGetPlatformBaseFreqFunctionId,
EsalPhysicalIdInfoFunctionId,
EsalRegisterPhysicalAddrFunctionId
} EFI_EXTENDED_SAL_BASE_SERVICES_FUNC_ID;
///@}
///
/// Extended SAL MCA Services Class
///
///@{
#define EFI_EXTENDED_SAL_MCA_SERVICES_PROTOCOL_GUID_LO 0x42b16cc72a591128
#define EFI_EXTENDED_SAL_MCA_SERVICES_PROTOCOL_GUID_HI 0xbb2d683b9358f08a
#define EFI_EXTENDED_SAL_MCA_SERVICES_PROTOCOL_GUID \
{ 0x2a591128, 0x6cc7, 0x42b1, {0x8a, 0xf0, 0x58, 0x93, 0x3b, 0x68, 0x2d, 0xbb } }
typedef enum {
McaGetStateInfoFunctionId,
McaRegisterCpuFunctionId
} EFI_EXTENDED_SAL_MCA_SERVICES_FUNC_ID;
///@}
///
/// Extended SAL PCI Services Class
///
///@{
#define EFI_EXTENDED_SAL_PCI_SERVICES_PROTOCOL_GUID_LO 0x4905ad66a46b1a31
#define EFI_EXTENDED_SAL_PCI_SERVICES_PROTOCOL_GUID_HI 0x6330dc59462bf692
#define EFI_EXTENDED_SAL_PCI_SERVICES_PROTOCOL_GUID \
{ 0xa46b1a31, 0xad66, 0x4905, {0x92, 0xf6, 0x2b, 0x46, 0x59, 0xdc, 0x30, 0x63 } }
typedef enum {
SalPciConfigReadFunctionId,
SalPciConfigWriteFunctionId
} EFI_EXTENDED_SAL_PCI_SERVICES_FUNC_ID;
///@}
///
/// Extended SAL Cache Services Class
///
///@{
#define EFI_EXTENDED_SAL_CACHE_SERVICES_PROTOCOL_GUID_LO 0x4ba52743edc9494
#define EFI_EXTENDED_SAL_CACHE_SERVICES_PROTOCOL_GUID_HI 0x88f11352ef0a1888
#define EFI_EXTENDED_SAL_CACHE_SERVICES_PROTOCOL_GUID \
{ 0xedc9494, 0x2743, 0x4ba5, { 0x88, 0x18, 0x0a, 0xef, 0x52, 0x13, 0xf1, 0x88 } }
typedef enum {
SalCacheInitFunctionId,
SalCacheFlushFunctionId
} EFI_EXTENDED_SAL_CACHE_SERVICES_FUNC_ID;
///@}
///
/// Extended SAL MCA Log Services Class
///
///@{
#define EFI_EXTENDED_SAL_MCA_LOG_SERVICES_PROTOCOL_GUID_LO 0x4c0338a3cb3fd86e
#define EFI_EXTENDED_SAL_MCA_LOG_SERVICES_PROTOCOL_GUID_HI 0x7aaba2a3cf905c9a
#define EFI_EXTENDED_SAL_MCA_LOG_SERVICES_PROTOCOL_GUID \
{ 0xcb3fd86e, 0x38a3, 0x4c03, {0x9a, 0x5c, 0x90, 0xcf, 0xa3, 0xa2, 0xab, 0x7a } }
typedef enum {
SalGetStateInfoFunctionId,
SalGetStateInfoSizeFunctionId,
SalClearStateInfoFunctionId,
EsalGetStateBufferFunctionId,
EsalSaveStateBufferFunctionId
} EFI_EXTENDED_SAL_MCA_LOG_SERVICES_FUNC_ID;
///@}
#endif

View 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

View File

@ -730,6 +730,29 @@
## Include/Protocol/LegacyRegion2.h
gEfiLegacyRegion2ProtocolGuid = {0x70101eaf, 0x85, 0x440c, {0xb3, 0x56, 0x8e, 0xe3, 0x6f, 0xef, 0x24, 0xf0 } }
## Include/Protocol/McaInitPmi.h
gEfiSalMcaInitPmiProtocolGuid = { 0xb60dc6e8, 0x3b6f, 0x11d5, {0xaf, 0x9, 0x0, 0xa0, 0xc9, 0x44, 0xa0, 0x5b } }
## Include/Protocol/ExtendedSalBootService.h
gEfiExtendedSalBootServiceProtocolGuid = { 0xde0ee9a4, 0x3c7a, 0x44f2, {0xb7, 0x8b, 0xe3, 0xcc, 0xd6, 0x9c, 0x3a, 0xf7 } }
## Include/Protocol/ExtendedSalServiceClasses.h
gEfiExtendedSalBaseIoServicesProtocolGuid = { 0x5aea42b5, 0x31e1, 0x4515, {0xbc, 0x31, 0xb8, 0xd5, 0x25, 0x75, 0x65, 0xa6 } }
gEfiExtendedSalStallServicesProtocolGuid = { 0x53a58d06, 0xac27, 0x4d8c, {0xb5, 0xe9, 0xf0, 0x8a, 0x80, 0x65, 0x41, 0x70 } }
gEfiExtendedSalRtcServicesProtocolGuid = { 0x7e97a470, 0xefdb, 0x4d02, {0x8f, 0xce, 0x61, 0x90, 0xd2, 0x7b, 0xa2, 0x96 } }
gEfiExtendedSalVariableServicesProtocolGuid = { 0x4ecb6c53, 0xc641, 0x4370, {0x8c, 0xb2, 0x3b, 0x0e, 0x49, 0x6e, 0x83, 0x78 } }
gEfiExtendedSalMtcServicesProtocolGuid = { 0x899afd18, 0x75e8, 0x408b, {0xa4, 0x1a, 0x6e, 0x2e, 0x7e, 0xcd, 0xf4, 0x54 } }
gEfiExtendedSalResetServicesProtocolGuid = { 0x7d019990, 0x8ce1, 0x46f5, {0xa7, 0x76, 0x3c, 0x51, 0x98, 0x67, 0x6a, 0xa0 } }
gEfiExtendedSalStatusCodeServicesProtocolGuid = { 0xdbd91d, 0x55e9, 0x420f, {0x96, 0x39, 0x5e, 0x9f, 0x84, 0x37, 0xb4, 0x4f } }
gEfiExtendedSalFvBlockServicesProtocolGuid = { 0xa2271df1, 0xbcbb, 0x4f1d, {0x98, 0xa9, 0x06, 0xbc, 0x17, 0x2f, 0x07, 0x1a } }
gEfiExtendedSalMpServicesProtocolGuid = { 0x697d81a2, 0xcf18, 0x4dc0, {0x9e, 0x0d, 0x06, 0x11, 0x3b, 0x61, 0x8a, 0x3f } }
gEfiExtendedSalPalServicesProtocolGuid = { 0xe1cd9d21, 0x0fc2, 0x438d, {0x97, 0x03, 0x04, 0xe6, 0x6d, 0x96, 0x1e, 0x57 } }
gEfiExtendedSalBaseServicesProtocolGuid = { 0xd9e9fa06, 0x0fe0, 0x41c3, {0x96, 0xfb, 0x83, 0x42, 0x5a, 0x33, 0x94, 0xf8 } }
gEfiExtendedSalMcaServicesProtocolGuid = { 0x2a591128, 0x6cc7, 0x42b1, {0x8a, 0xf0, 0x58, 0x93, 0x3b, 0x68, 0x2d, 0xbb } }
gEfiExtendedSalPciServicesProtocolGuid = { 0xa46b1a31, 0xad66, 0x4905, {0x92, 0xf6, 0x2b, 0x46, 0x59, 0xdc, 0x30, 0x63 } }
gEfiExtendedSalCacheServicesProtocolGuid = { 0xedc9494, 0x2743, 0x4ba5, { 0x88, 0x18, 0x0a, 0xef, 0x52, 0x13, 0xf1, 0x88 } }
gEfiExtendedSalMcaLogServicesProtocolGuid = { 0xcb3fd86e, 0x38a3, 0x4c03, {0x9a, 0x5c, 0x90, 0xcf, 0xa3, 0xa2, 0xab, 0x7a } }
#
# Protocols defined in UEFI2.1/UEFI2.0/EFI1.1
#