From 41335d22448da9019e95a76bb8e8f10f231222e0 Mon Sep 17 00:00:00 2001 From: xli24 Date: Fri, 25 Dec 2009 08:20:37 +0000 Subject: [PATCH] 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 --- .../Include/Protocol/ExtendedSalBootService.h | 214 ++++++++++++++ .../Protocol/ExtendedSalServiceClasses.h | 275 ++++++++++++++++++ MdePkg/Include/Protocol/McaInitPmi.h | 207 +++++++++++++ MdePkg/MdePkg.dec | 23 ++ 4 files changed, 719 insertions(+) create mode 100644 MdePkg/Include/Protocol/ExtendedSalBootService.h create mode 100644 MdePkg/Include/Protocol/ExtendedSalServiceClasses.h create mode 100644 MdePkg/Include/Protocol/McaInitPmi.h diff --git a/MdePkg/Include/Protocol/ExtendedSalBootService.h b/MdePkg/Include/Protocol/ExtendedSalBootService.h new file mode 100644 index 0000000000..6e3507e6de --- /dev/null +++ b/MdePkg/Include/Protocol/ExtendedSalBootService.h @@ -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 + +#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 diff --git a/MdePkg/Include/Protocol/ExtendedSalServiceClasses.h b/MdePkg/Include/Protocol/ExtendedSalServiceClasses.h new file mode 100644 index 0000000000..08a51ef8b4 --- /dev/null +++ b/MdePkg/Include/Protocol/ExtendedSalServiceClasses.h @@ -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 diff --git a/MdePkg/Include/Protocol/McaInitPmi.h b/MdePkg/Include/Protocol/McaInitPmi.h new file mode 100644 index 0000000000..0a7b4e9724 --- /dev/null +++ b/MdePkg/Include/Protocol/McaInitPmi.h @@ -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 + diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec index 6c417d5214..7fe6daa461 100644 --- a/MdePkg/MdePkg.dec +++ b/MdePkg/MdePkg.dec @@ -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 # -- 2.39.2