]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Publish definition of MCA/INIT/PMI Protocol & ESAL, as introduced in PI 1.2.
authorxli24 <xli24@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 25 Dec 2009 08:20:37 +0000 (08:20 +0000)
committerxli24 <xli24@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 25 Dec 2009 08:20:37 +0000 (08:20 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9616 6f19259b-4bc3-4df7-8a09-765794883524

MdePkg/Include/Protocol/ExtendedSalBootService.h [new file with mode: 0644]
MdePkg/Include/Protocol/ExtendedSalServiceClasses.h [new file with mode: 0644]
MdePkg/Include/Protocol/McaInitPmi.h [new file with mode: 0644]
MdePkg/MdePkg.dec

diff --git a/MdePkg/Include/Protocol/ExtendedSalBootService.h b/MdePkg/Include/Protocol/ExtendedSalBootService.h
new file mode 100644 (file)
index 0000000..6e3507e
--- /dev/null
@@ -0,0 +1,214 @@
+/** @file\r
+  Definition of Extended SAL Boot Service Protocol\r
+\r
+  The Extended SAL Boot Service Protocol provides a mechanisms for platform specific \r
+  drivers to update the SAL System Table and register Extended SAL Procedures that are\r
+  callable in physical or virtual mode using the SAL calling convention.\r
+\r
+  Copyright (c) 2009, Intel Corporation                                                         \r
+  All rights reserved. This program and the accompanying materials                          \r
+  are licensed and made available under the terms and conditions of the BSD License         \r
+  which accompanies this distribution.  The full text of the license may be found at        \r
+  http://opensource.org/licenses/bsd-license.php                                            \r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+\r
+**/\r
+\r
+#ifndef _EXTENDED_SAL_BOOT_SERVICE_PROTOCOL_H_\r
+#define _EXTENDED_SAL_BOOT_SERVICE_PROTOCOL_H_\r
+\r
+#include <IndustryStandard/Sal.h>\r
+\r
+#define EXTENDED_SAL_BOOT_SERVICE_PROTOCOL_GUID   \\r
+  { 0xde0ee9a4, 0x3c7a, 0x44f2, {0xb7, 0x8b, 0xe3, 0xcc, 0xd6, 0x9c, 0x3a, 0xf7 } }\r
+\r
+typedef struct _EXTENDED_SAL_BOOT_SERVICE_PROTOCOL EXTENDED_SAL_BOOT_SERVICE_PROTOCOL;\r
+\r
+/**\r
+  Adds platform specific information to the to the header of the SAL System Table.\r
+\r
+  @param  This                  A pointer to the EXTENDED_SAL_BOOT_SERVICE_PROTOCOL instance.\r
+  @param  SalAVersion           Version of recovery SAL PEIM(s) in BCD format. Higher byte contains\r
+                                the major revision and the lower byte contains the minor revision.\r
+  @param  SalBVersion           Version of DXE SAL Driver in BCD format. Higher byte contains\r
+                                the major revision and the lower byte contains the minor revision.\r
+  @param  OemId                 A pointer to a Null-terminated ASCII string that contains OEM unique string.\r
+                                The string cannot be longer than 32 bytes in total length\r
+  @param  ProductId             A pointer to a Null-terminated ASCII string that uniquely identifies a family of \r
+                                compatible products. The string cannot be longer than 32 bytes in total length.\r
+\r
+  @retval EFI_SUCCESS           The SAL System Table header was updated successfully.\r
+  @retval EFI_INVALID_PARAMETER OemId is NULL.\r
+  @retval EFI_INVALID_PARAMETER ProductId is NULL.\r
+  @retval EFI_INVALID_PARAMETER The length of OemId is greater than 32 characters.\r
+  @retval EFI_INVALID_PARAMETER The length of ProductId is greater than 32 characters.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EXTENDED_SAL_ADD_SST_INFO) (\r
+  IN EXTENDED_SAL_BOOT_SERVICE_PROTOCOL  *This,\r
+  IN UINT16                              SalAVersion,\r
+  IN UINT16                              SalBVersion,\r
+  IN CHAR8                               *OemId,\r
+  IN CHAR8                               *ProductId\r
+  );\r
+\r
+/**\r
+  Adds an entry to the SAL System Table.\r
+\r
+  This function adds the SAL System Table Entry specified by TableEntry and EntrySize\r
+  to the SAL System Table.\r
+\r
+  @param  This         A pointer to the EXTENDED_SAL_BOOT_SERVICE_PROTOCOL instance.\r
+  @param  TableEntry   Pointer to a buffer containing a SAL System Table entry that is EntrySize bytes \r
+                       in length. The first byte of the TableEntry describes the type of entry.\r
+  @param  EntrySize    The size, in bytes, of TableEntry.\r
+\r
+  @retval EFI_SUCCESSThe        SAL System Table was updated successfully.\r
+  @retval EFI_INVALID_PARAMETER TableEntry is NULL.\r
+  @retval EFI_INVALID_PARAMETER TableEntry specifies an invalid entry type.\r
+  @retval EFI_INVALID_PARAMETER EntrySize is not valid for this type of entry.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EXTENDED_SAL_ADD_SST_ENTRY) (\r
+  IN EXTENDED_SAL_BOOT_SERVICE_PROTOCOL  *This,\r
+  IN UINT8                               *TableEntry,\r
+  IN UINTN                               EntrySize\r
+  );\r
+\r
+/**\r
+  Internal ESAL procedures.\r
+\r
+  This is prototype of internal Extended SAL procedures, which is registerd by\r
+  EXTENDED_SAL_REGISTER_INTERNAL_PROC service.\r
+\r
+  @param  FunctionId         The Function ID associated with this Extended SAL Procedure.\r
+  @param  Arg2               Second argument to the Extended SAL procedure.\r
+  @param  Arg3               Third argument to the Extended SAL procedure.\r
+  @param  Arg4               Fourth argument to the Extended SAL procedure.\r
+  @param  Arg5               Fifth argument to the Extended SAL procedure.\r
+  @param  Arg6               Sixth argument to the Extended SAL procedure.\r
+  @param  Arg7               Seventh argument to the Extended SAL procedure.\r
+  @param  Arg8               Eighth argument to the Extended SAL procedure.\r
+  @param  VirtualMode        TRUE if the Extended SAL Procedure is being invoked in virtual mode.\r
+                             FALSE if the Extended SAL Procedure is being invoked in physical mode.\r
+  @param  ModuleGlobal       A pointer to the global context associated with this Extended SAL Procedure. \r
+\r
+  @return The result returned from the specified Extended SAL Procedure\r
+\r
+**/\r
+typedef\r
+SAL_RETURN_REGS\r
+(EFIAPI *SAL_INTERNAL_EXTENDED_SAL_PROC) (\r
+  IN  UINT64   FunctionId,\r
+  IN  UINT64   Arg2,\r
+  IN  UINT64   Arg3,\r
+  IN  UINT64   Arg4,\r
+  IN  UINT64   Arg5,\r
+  IN  UINT64   Arg6,\r
+  IN  UINT64   Arg7,\r
+  IN  UINT64   Arg8,\r
+  IN  BOOLEAN  VirtualMode,\r
+  IN  VOID     *ModuleGlobal  OPTIONAL\r
+  ); \r
+\r
+/**\r
+  Registers an Extended SAL Procedure.\r
+\r
+  The Extended SAL Procedure specified by InternalSalProc and named by ClassGuidLo,\r
+  ClassGuidHi, and FunctionId is added to the set of available Extended SAL Procedures.\r
+\r
+  @param  This                   A pointer to the EXTENDED_SAL_BOOT_SERVICE_PROTOCOL instance.\r
+  @param  ClassGuidLo            The lower 64-bits of  the class GUID for the Extended SAL Procedure being added.  \r
+                                 Each class GUID contains one or more functions specified by a Function ID.\r
+  @param  ClassGuidHi            The upper 64-bits of  the class GUID for the Extended SAL Procedure being added.  \r
+                                 Each class GUID contains one or more functions specified by a Function ID.\r
+  @param  FunctionId             The Function ID for the Extended SAL Procedure that is being added.  This Function \r
+                                 ID is a member of the Extended SAL Procedure class specified by ClassGuidLo \r
+                                 and ClassGuidHi.\r
+  @param  InternalSalProc        A pointer to the Extended SAL Procedure being added.\r
+  @param  PhysicalModuleGlobal   Pointer to a  module global structure. This is a physical mode pointer.\r
+                                 This pointer is passed to the Extended SAL Procedure specified by ClassGuidLo, \r
+                                 ClassGuidHi, FunctionId, and InternalSalProc.  If the system is in physical mode,\r
+                                 then this pointer is passed unmodified to InternalSalProc.  If the system is in\r
+                                 virtual mode, then the virtual address associated with this pointer is passed to\r
+                                 InternalSalProc.\r
+\r
+  @retval EFI_SUCCESS            The Extended SAL Procedure was added.\r
+  @retval EFI_OUT_OF_RESOURCES   There are not enough resources available to add the Extended SAL Procedure.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EXTENDED_SAL_REGISTER_INTERNAL_PROC) (\r
+  IN EXTENDED_SAL_BOOT_SERVICE_PROTOCOL  *This,\r
+  IN UINT64                              ClassGuidLo,\r
+  IN UINT64                              ClassGuidHi,\r
+  IN UINT64                              FunctionId,\r
+  IN SAL_INTERNAL_EXTENDED_SAL_PROC      InternalSalProc,\r
+  IN VOID                                *PhysicalModuleGlobal  OPTIONAL\r
+  );\r
+\r
+/**\r
+  Calls a previously registered Extended SAL Procedure.\r
+\r
+  This function calls the Extended SAL Procedure specified by ClassGuidLo, ClassGuidHi, \r
+  and FunctionId.  The set of previously registered Extended SAL Procedures is searched for a \r
+  matching ClassGuidLo, ClassGuidHi, and FunctionId.  If a match is not found, then \r
+  EFI_SAL_NOT_IMPLEMENTED is returned.\r
+\r
+  @param  ClassGuidLo        The lower 64-bits of the class GUID for the Extended SAL Procedure\r
+                             that is being called.\r
+  @param  ClassGuidHi        The upper 64-bits of the class GUID for the Extended SAL Procedure\r
+                             that is being called.\r
+  @param  FunctionId         Function ID for the Extended SAL Procedure being called.\r
+  @param  Arg2               Second argument to the Extended SAL procedure.\r
+  @param  Arg3               Third argument to the Extended SAL procedure.\r
+  @param  Arg4               Fourth argument to the Extended SAL procedure.\r
+  @param  Arg5               Fifth argument to the Extended SAL procedure.\r
+  @param  Arg6               Sixth argument to the Extended SAL procedure.\r
+  @param  Arg7               Seventh argument to the Extended SAL procedure.\r
+  @param  Arg8               Eighth argument to the Extended SAL procedure.\r
+\r
+  @retval EFI_SAL_NOT_IMPLEMENTED        The Extended SAL Procedure specified by ClassGuidLo, \r
+                                         ClassGuidHi, and FunctionId has not been registered.\r
+  @retval EFI_SAL_VIRTUAL_ADDRESS_ERROR  This function was called in virtual mode before virtual mappings \r
+                                         for the specified Extended SAL Procedure are available.\r
+  @retval Other                          The result returned from the specified Extended SAL Procedure\r
+\r
+**/\r
+typedef\r
+SAL_RETURN_REGS\r
+(EFIAPI *EXTENDED_SAL_PROC) (\r
+  IN UINT64  ClassGuidLo,\r
+  IN UINT64  ClassGuidHi,\r
+  IN UINT64  FunctionId,\r
+  IN UINT64  Arg2,\r
+  IN UINT64  Arg3,\r
+  IN UINT64  Arg4,\r
+  IN UINT64  Arg5,\r
+  IN UINT64  Arg6,\r
+  IN UINT64  Arg7,\r
+  IN UINT64  Arg8\r
+  );\r
+\r
+///\r
+/// The EXTENDED_SAL_BOOT_SERVICE_PROTOCOL provides a mechanisms for platform specific \r
+/// drivers to update the SAL System Table and register Extended SAL Procedures that are\r
+/// callable in physical or virtual mode using the SAL calling convention.\r
+///\r
+struct _EXTENDED_SAL_BOOT_SERVICE_PROTOCOL {\r
+  EXTENDED_SAL_ADD_SST_INFO            AddSalSystemTableInfo;\r
+  EXTENDED_SAL_ADD_SST_ENTRY           AddSalSystemTableEntry;\r
+  EXTENDED_SAL_REGISTER_INTERNAL_PROC  RegisterExtendedSalProc;   \r
+  EXTENDED_SAL_PROC                    ExtendedSalProc;\r
+};\r
+\r
+extern EFI_GUID  gEfiExtendedSalBootServiceProtocolGuid;\r
+\r
+#endif\r
diff --git a/MdePkg/Include/Protocol/ExtendedSalServiceClasses.h b/MdePkg/Include/Protocol/ExtendedSalServiceClasses.h
new file mode 100644 (file)
index 0000000..08a51ef
--- /dev/null
@@ -0,0 +1,275 @@
+/** @file\r
+  The standard set of Extended SAL service classes.\r
+\r
+  Copyright (c) 2009, Intel Corporation                                                         \r
+  All rights reserved. This program and the accompanying materials                          \r
+  are licensed and made available under the terms and conditions of the BSD License         \r
+  which accompanies this distribution.  The full text of the license may be found at        \r
+  http://opensource.org/licenses/bsd-license.php                                            \r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+\r
+**/\r
+\r
+#ifndef _EXTENDED_SAL_SERVICE_CLASSES_H_\r
+#define _EXTENDED_SAL_SERVICE_CLASSES_H_\r
+\r
+///\r
+/// Extended SAL Base I/O Services Class\r
+///\r
+///@{\r
+#define EFI_EXTENDED_SAL_BASE_IO_SERVICES_PROTOCOL_GUID_LO 0x451531e15aea42b5\r
+#define EFI_EXTENDED_SAL_BASE_IO_SERVICES_PROTOCOL_GUID_HI 0xa6657525d5b831bc\r
+#define EFI_EXTENDED_SAL_BASE_IO_SERVICES_PROTOCOL_GUID \\r
+  { 0x5aea42b5, 0x31e1, 0x4515, {0xbc, 0x31, 0xb8, 0xd5, 0x25, 0x75, 0x65, 0xa6 } }\r
+\r
+typedef enum {\r
+  IoReadFunctionId,\r
+  IoWriteFunctionId,\r
+  MemReadFunctionId,\r
+  MemWriteFunctionId\r
+} EFI_EXTENDED_SAL_BASE_IO_SERVICES_FUNC_ID;\r
+///@}\r
+\r
+///\r
+/// Extended SAL Stall Services Class\r
+///\r
+///@{\r
+#define EFI_EXTENDED_SAL_STALL_SERVICES_PROTOCOL_GUID_LO 0x4d8cac2753a58d06\r
+#define EFI_EXTENDED_SAL_STALL_SERVICES_PROTOCOL_GUID_HI 0x704165808af0e9b5\r
+#define EFI_EXTENDED_SAL_STALL_SERVICES_PROTOCOL_GUID \\r
+  { 0x53a58d06, 0xac27, 0x4d8c, {0xb5, 0xe9, 0xf0, 0x8a, 0x80, 0x65, 0x41, 0x70 } }\r
+\r
+typedef enum {\r
+  StallFunctionId\r
+} EFI_EXTENDED_SAL_STALL_FUNC_ID;\r
+///@}\r
+\r
+///\r
+/// Extended SAL Real Time Clock Services Class\r
+///\r
+///@{\r
+#define EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID_LO 0x4d02efdb7e97a470\r
+#define EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID_HI 0x96a27bd29061ce8f \r
+#define EFI_EXTENDED_SAL_RTC_SERVICES_PROTOCOL_GUID  \\r
+  { 0x7e97a470, 0xefdb, 0x4d02, {0x8f, 0xce, 0x61, 0x90, 0xd2, 0x7b, 0xa2, 0x96 } }\r
+\r
+typedef enum {\r
+  GetTimeFunctionId,\r
+  SetTimeFunctionId,\r
+  GetWakeupTimeFunctionId,\r
+  SetWakeupTimeFunctionId,\r
+  GetRtcFreqFunctionId,\r
+  InitializeThresholdFunctionId,\r
+  BumpThresholdCountFunctionId,\r
+  GetThresholdCountFunctionId\r
+} EFI_EXTENDED_SAL_RTC_SERVICES_FUNC_ID;\r
+///@}\r
+\r
+///\r
+/// Extended SAL Variable Services Class\r
+///\r
+///@{\r
+#define EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID_LO 0x4370c6414ecb6c53 \r
+#define EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID_HI 0x78836e490e3bb28c\r
+#define EFI_EXTENDED_SAL_VARIABLE_SERVICES_PROTOCOL_GUID  \\r
+  { 0x4ecb6c53, 0xc641, 0x4370, {0x8c, 0xb2, 0x3b, 0x0e, 0x49, 0x6e, 0x83, 0x78 } }\r
+\r
+typedef enum {\r
+  EsalGetVariableFunctionId,\r
+  EsalGetNextVariableNameFunctionId,\r
+  EsalSetVariableFunctionId,\r
+  EsalQueryVariableInfoFunctionId\r
+} EFI_EXTENDED_SAL_VARIABLE_SERVICES_FUNC_ID;\r
+///@}\r
+\r
+///\r
+/// Extended SAL Monotonic Counter Services Class\r
+///\r
+///@{\r
+#define EFI_EXTENDED_SAL_MTC_SERVICES_PROTOCOL_GUID_LO 0x408b75e8899afd18\r
+#define EFI_EXTENDED_SAL_MTC_SERVICES_PROTOCOL_GUID_HI 0x54f4cd7e2e6e1aa4\r
+#define EFI_EXTENDED_SAL_MTC_SERVICES_PROTOCOL_GUID  \\r
+  { 0x899afd18, 0x75e8, 0x408b, {0xa4, 0x1a, 0x6e, 0x2e, 0x7e, 0xcd, 0xf4, 0x54 } }\r
+\r
+typedef enum {\r
+  GetNextHighMonotonicCountFunctionId\r
+} EFI_EXTENDED_SAL_MTC_SERVICES_FUNC_ID;\r
+///@}\r
+\r
+///\r
+/// Extended SAL Reset Services Class\r
+///\r
+///@{\r
+#define EFI_EXTENDED_SAL_RESET_SERVICES_PROTOCOL_GUID_LO  0x46f58ce17d019990\r
+#define EFI_EXTENDED_SAL_RESET_SERVICES_PROTOCOL_GUID_HI  0xa06a6798513c76a7\r
+#define EFI_EXTENDED_SAL_RESET_SERVICES_PROTOCOL_GUID  \\r
+  { 0x7d019990, 0x8ce1, 0x46f5, {0xa7, 0x76, 0x3c, 0x51, 0x98, 0x67, 0x6a, 0xa0 } }\r
+\r
+typedef enum {\r
+  ResetSystemFunctionId\r
+} EFI_EXTENDED_SAL_RESET_SERVICES_FUNC_ID;\r
+///@}\r
+\r
+///\r
+/// Extended SAL Status Code Services Class\r
+///\r
+///@{\r
+#define EFI_EXTENDED_SAL_STATUS_CODE_SERVICES_PROTOCOL_GUID_LO 0x420f55e9dbd91d\r
+#define EFI_EXTENDED_SAL_STATUS_CODE_SERVICES_PROTOCOL_GUID_HI 0x4fb437849f5e3996\r
+#define EFI_EXTENDED_SAL_STATUS_CODE_SERVICES_PROTOCOL_GUID  \\r
+  { 0xdbd91d, 0x55e9, 0x420f, {0x96, 0x39, 0x5e, 0x9f, 0x84, 0x37, 0xb4, 0x4f } }\r
+\r
+typedef enum {\r
+  ReportStatusCodeServiceFunctionId\r
+} EFI_EXTENDED_SAL_STATUS_CODE_SERVICES_FUNC_ID;\r
+///@}\r
+\r
+///\r
+/// Extended SAL Firmware Volume Block Services Class\r
+///\r
+///@{\r
+#define EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID_LO 0x4f1dbcbba2271df1\r
+#define EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID_HI 0x1a072f17bc06a998\r
+#define EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_PROTOCOL_GUID \\r
+  { 0xa2271df1, 0xbcbb, 0x4f1d, {0x98, 0xa9, 0x06, 0xbc, 0x17, 0x2f, 0x07, 0x1a } }\r
+\r
+typedef enum {\r
+  ReadFunctionId,\r
+  WriteFunctionId,\r
+  EraseBlockFunctionId,\r
+  GetVolumeAttributesFunctionId,\r
+  SetVolumeAttributesFunctionId,\r
+  GetPhysicalAddressFunctionId,\r
+  GetBlockSizeFunctionId,\r
+} EFI_EXTENDED_SAL_FV_BLOCK_SERVICES_FUNC_ID;\r
+///@}\r
+\r
+///\r
+/// Extended SAL MP Services Class\r
+///\r
+///@{\r
+#define EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_LO 0x4dc0cf18697d81a2\r
+#define EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID_HI 0x3f8a613b11060d9e\r
+#define EFI_EXTENDED_SAL_MP_SERVICES_PROTOCOL_GUID \\r
+  { 0x697d81a2, 0xcf18, 0x4dc0, {0x9e, 0x0d, 0x06, 0x11, 0x3b, 0x61, 0x8a, 0x3f } }\r
+\r
+typedef enum {\r
+  AddCpuDataFunctionId,\r
+  RemoveCpuDataFunctionId,\r
+  ModifyCpuDataFunctionId,\r
+  GetCpuDataByIDFunctionId,\r
+  GetCpuDataByIndexFunctionId,\r
+  SendIpiFunctionId,\r
+  CurrentProcInfoFunctionId,\r
+  NumProcessorsFunctionId,\r
+  SetMinStateFunctionId,\r
+  GetMinStateFunctionId               \r
+} EFI_EXTENDED_SAL_MP_SERVICES_FUNC_ID;\r
+///@}\r
+\r
+///\r
+/// Extended SAL PAL Services Class\r
+///\r
+///@{\r
+#define EFI_EXTENDED_SAL_PAL_SERVICES_PROTOCOL_GUID_LO 0x438d0fc2e1cd9d21\r
+#define EFI_EXTENDED_SAL_PAL_SERVICES_PROTOCOL_GUID_HI 0x571e966de6040397\r
+#define EFI_EXTENDED_SAL_PAL_SERVICES_PROTOCOL_GUID \\r
+  { 0xe1cd9d21, 0x0fc2, 0x438d, {0x97, 0x03, 0x04, 0xe6, 0x6d, 0x96, 0x1e, 0x57 } }\r
+\r
+typedef enum {\r
+  PalProcFunctionId,\r
+  SetNewPalEntryFunctionId,\r
+  GetNewPalEntryFunctionId,\r
+  EsalUpdatePalFunctionId\r
+} EFI_EXTENDED_SAL_PAL_SERVICES_FUNC_ID;\r
+///@}\r
+\r
+///\r
+/// Extended SAL Base Services Class\r
+///\r
+///@{\r
+#define EFI_EXTENDED_SAL_BASE_SERVICES_PROTOCOL_GUID_LO 0x41c30fe0d9e9fa06\r
+#define EFI_EXTENDED_SAL_BASE_SERVICES_PROTOCOL_GUID_HI 0xf894335a4283fb96\r
+#define EFI_EXTENDED_SAL_BASE_SERVICES_PROTOCOL_GUID \\r
+  { 0xd9e9fa06, 0x0fe0, 0x41c3, {0x96, 0xfb, 0x83, 0x42, 0x5a, 0x33, 0x94, 0xf8 } }\r
+\r
+typedef enum {\r
+  SalSetVectorsFunctionId,\r
+  SalMcRendezFunctionId,\r
+  SalMcSetParamsFunctionId,\r
+  EsalGetVectorsFunctionId,\r
+  EsalMcGetParamsFunctionId,\r
+  EsalMcGetMcParamsFunctionId,\r
+  EsalGetMcCheckinFlagsFunctionId,\r
+  EsalGetPlatformBaseFreqFunctionId,\r
+  EsalPhysicalIdInfoFunctionId, \r
+  EsalRegisterPhysicalAddrFunctionId\r
+} EFI_EXTENDED_SAL_BASE_SERVICES_FUNC_ID;\r
+///@}\r
+\r
+///\r
+/// Extended SAL MCA Services Class\r
+///\r
+///@{\r
+#define EFI_EXTENDED_SAL_MCA_SERVICES_PROTOCOL_GUID_LO 0x42b16cc72a591128\r
+#define EFI_EXTENDED_SAL_MCA_SERVICES_PROTOCOL_GUID_HI 0xbb2d683b9358f08a\r
+#define EFI_EXTENDED_SAL_MCA_SERVICES_PROTOCOL_GUID \\r
+  { 0x2a591128, 0x6cc7, 0x42b1, {0x8a, 0xf0, 0x58, 0x93, 0x3b, 0x68, 0x2d, 0xbb } }\r
+\r
+typedef enum {\r
+  McaGetStateInfoFunctionId,\r
+  McaRegisterCpuFunctionId\r
+} EFI_EXTENDED_SAL_MCA_SERVICES_FUNC_ID;\r
+///@}\r
+\r
+///\r
+/// Extended SAL PCI Services Class\r
+///\r
+///@{\r
+#define EFI_EXTENDED_SAL_PCI_SERVICES_PROTOCOL_GUID_LO 0x4905ad66a46b1a31\r
+#define EFI_EXTENDED_SAL_PCI_SERVICES_PROTOCOL_GUID_HI 0x6330dc59462bf692\r
+#define EFI_EXTENDED_SAL_PCI_SERVICES_PROTOCOL_GUID \\r
+  { 0xa46b1a31, 0xad66, 0x4905, {0x92, 0xf6, 0x2b, 0x46, 0x59, 0xdc, 0x30, 0x63 } }\r
+\r
+typedef enum {\r
+  SalPciConfigReadFunctionId,\r
+  SalPciConfigWriteFunctionId\r
+} EFI_EXTENDED_SAL_PCI_SERVICES_FUNC_ID;\r
+///@}\r
+\r
+///\r
+/// Extended SAL Cache Services Class\r
+///\r
+///@{\r
+#define EFI_EXTENDED_SAL_CACHE_SERVICES_PROTOCOL_GUID_LO 0x4ba52743edc9494\r
+#define EFI_EXTENDED_SAL_CACHE_SERVICES_PROTOCOL_GUID_HI 0x88f11352ef0a1888\r
+#define EFI_EXTENDED_SAL_CACHE_SERVICES_PROTOCOL_GUID \\r
+  { 0xedc9494, 0x2743, 0x4ba5, { 0x88, 0x18, 0x0a, 0xef, 0x52, 0x13, 0xf1, 0x88 } }\r
+\r
+typedef enum {\r
+  SalCacheInitFunctionId,\r
+  SalCacheFlushFunctionId\r
+} EFI_EXTENDED_SAL_CACHE_SERVICES_FUNC_ID;\r
+///@}\r
+\r
+///\r
+/// Extended SAL MCA Log Services Class\r
+///\r
+///@{\r
+#define EFI_EXTENDED_SAL_MCA_LOG_SERVICES_PROTOCOL_GUID_LO 0x4c0338a3cb3fd86e\r
+#define EFI_EXTENDED_SAL_MCA_LOG_SERVICES_PROTOCOL_GUID_HI 0x7aaba2a3cf905c9a\r
+#define EFI_EXTENDED_SAL_MCA_LOG_SERVICES_PROTOCOL_GUID \\r
+  { 0xcb3fd86e, 0x38a3, 0x4c03, {0x9a, 0x5c, 0x90, 0xcf, 0xa3, 0xa2, 0xab, 0x7a } }\r
+\r
+typedef enum {\r
+  SalGetStateInfoFunctionId,\r
+  SalGetStateInfoSizeFunctionId,\r
+  SalClearStateInfoFunctionId,\r
+  EsalGetStateBufferFunctionId,\r
+  EsalSaveStateBufferFunctionId\r
+} EFI_EXTENDED_SAL_MCA_LOG_SERVICES_FUNC_ID;\r
+///@}\r
+\r
+#endif\r
diff --git a/MdePkg/Include/Protocol/McaInitPmi.h b/MdePkg/Include/Protocol/McaInitPmi.h
new file mode 100644 (file)
index 0000000..0a7b4e9
--- /dev/null
@@ -0,0 +1,207 @@
+/** @file\r
+  MCA/PMI/INIT Protocol as defined in PI Specification VOLUME 4.\r
+\r
+  This protocol provides services to handle Machine Checks (MCA),\r
+  Initialization (INIT) events, and Platform Management Interrupt (PMI) events\r
+  on an Intel Itanium Processor Family based system.\r
+\r
+  Copyright (c) 2009, Intel Corporation                                                         \r
+  All rights reserved. This program and the accompanying materials                          \r
+  are licensed and made available under the terms and conditions of the BSD License         \r
+  which accompanies this distribution.  The full text of the license may be found at        \r
+  http://opensource.org/licenses/bsd-license.php                                            \r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#ifndef __MCA_INIT_PMI_PROTOCOL_H__\r
+#define __MCA_INIT_PMI_PROTOCOL_H__\r
+\r
+///\r
+/// Global ID for the MCA/PMI/INIT Protocol.\r
+///\r
+#define EFI_SAL_MCA_INIT_PMI_PROTOCOL_GUID \\r
+  { 0xb60dc6e8, 0x3b6f, 0x11d5, {0xaf, 0x9, 0x0, 0xa0, 0xc9, 0x44, 0xa0, 0x5b} }\r
+\r
+\r
+///\r
+/// Declare forward reference for the Timer Architectural Protocol\r
+///\r
+typedef struct _EFI_SAL_MCA_INIT_PMI_PROTOCOL  EFI_SAL_MCA_INIT_PMI_PROTOCOL;\r
+\r
+#pragma pack(1)\r
+///\r
+/// MCA Records Structure\r
+///\r
+typedef struct {\r
+  UINT64  First : 1;\r
+  UINT64  Last : 1;\r
+  UINT64  EntryCount : 16;\r
+  UINT64  DispatchedCount : 16;\r
+  UINT64  Reserved : 30;\r
+} SAL_MCA_COUNT_STRUCTURE;\r
+\r
+#pragma pack()\r
+\r
+/**\r
+  Prototype of MCA handler.\r
+\r
+  @param  ModuleGlobal                The context of MCA Handler\r
+  @param  ProcessorStateParameters    The processor state parameters (PSP)\r
+  @param  MinstateBase                Base address of the min-state\r
+  @param  RendezvouseStateInformation Rendezvous state information to be passed to\r
+                                      the OS on OS MCA entry\r
+  @param  CpuIndex                    Index of the logical processor\r
+  @param  McaCountStructure           Pointer to the MCA records structure\r
+  @param  CorrectedMachineCheck       This flag is set to TRUE is the MCA has been\r
+                                      corrected by the handler or by a previous handler\r
+\r
+  @retval EFI_SUCCESS                 Handler successfully returned\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_SAL_MCA_HANDLER) (\r
+  IN  VOID                    *ModuleGlobal,\r
+  IN  UINT64                  ProcessorStateParameters,\r
+  IN  EFI_PHYSICAL_ADDRESS    MinstateBase,\r
+  IN  UINT64                  RendezvouseStateInformation,\r
+  IN  UINT64                  CpuIndex,\r
+  IN  SAL_MCA_COUNT_STRUCTURE *McaCountStructure,\r
+  OUT BOOLEAN                 *CorrectedMachineCheck\r
+  );\r
+\r
+/**\r
+  Prototype of INIT handler.\r
+\r
+  @param  ModuleGlobal                The context of INIT Handler\r
+  @param  ProcessorStateParameters    The processor state parameters (PSP)\r
+  @param  MinstateBase                Base address of the min-state\r
+  @param  McaInProgress               This flag indicates if an MCA is in progress\r
+  @param  CpuIndex                    Index of the logical processor\r
+  @param  McaCountStructure           Pointer to the MCA records structure\r
+  @param  DumpSwitchPressed           This flag indicates the crash dump switch has been pressed\r
+\r
+  @retval EFI_SUCCESS                 Handler successfully returned\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_SAL_INIT_HANDLER) (\r
+  IN  VOID                     *ModuleGlobal,\r
+  IN  UINT64                   ProcessorStateParameters,\r
+  IN  EFI_PHYSICAL_ADDRESS     MinstateBase,\r
+  IN  BOOLEAN                  McaInProgress,\r
+  IN  UINT64                   CpuIndex,\r
+  IN  SAL_MCA_COUNT_STRUCTURE  *McaCountStructure,\r
+  OUT BOOLEAN                  *DumpSwitchPressed\r
+  );\r
+\r
+/**\r
+  Prototype of PMI handler\r
+\r
+  @param  ModuleGlobal                The context of PMI Handler\r
+  @param  CpuIndex                    Index of the logical processor\r
+  @param  PmiVector                   The PMI vector number as received from the PALE_PMI exit state (GR24)\r
+\r
+  @retval EFI_SUCCESS                 Handler successfully returned\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_SAL_PMI_HANDLER) (\r
+  IN VOID          *ModuleGlobal,\r
+  IN UINT64        CpuIndex,\r
+  IN UINT64        PmiVector\r
+  );\r
+\r
+/**\r
+  Register a MCA handler with the MCA dispatcher.\r
+\r
+  @param  This                        The EFI_SAL_MCA_INIT_PMI_PROTOCOL instance\r
+  @param  McaHandler                  The MCA handler to register\r
+  @param  ModuleGlobal                The context of MCA Handler\r
+  @param  MakeFirst                   This flag specifies the handler should be made first in the list\r
+  @param  MakeLast                    This flag specifies the handler should be made last in the list\r
+\r
+  @retval EFI_SUCCESS                 MCA Handle was registered\r
+  @retval EFI_OUT_OF_RESOURCES        No more resources to register an MCA handler\r
+  @retval EFI_INVALID_PARAMETER       Invalid parameters were passed\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_SAL_REGISTER_MCA_HANDLER) (\r
+  IN  EFI_SAL_MCA_INIT_PMI_PROTOCOL         *This,\r
+  IN  EFI_SAL_MCA_HANDLER                   McaHandler,\r
+  IN  VOID                                  *ModuleGlobal,\r
+  IN  BOOLEAN                               MakeFirst,\r
+  IN  BOOLEAN                               MakeLast\r
+  );\r
+\r
+/**\r
+  Register an INIT handler with the INIT dispatcher.\r
+\r
+  @param  This                        The EFI_SAL_MCA_INIT_PMI_PROTOCOL instance\r
+  @param  InitHandler                 The INIT handler to register\r
+  @param  ModuleGlobal                The context of INIT Handler\r
+  @param  MakeFirst                   This flag specifies the handler should be made first in the list\r
+  @param  MakeLast                    This flag specifies the handler should be made last in the list\r
+\r
+  @retval EFI_SUCCESS                 INIT Handle was registered\r
+  @retval EFI_OUT_OF_RESOURCES        No more resources to register an INIT handler\r
+  @retval EFI_INVALID_PARAMETER       Invalid parameters were passed\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_SAL_REGISTER_INIT_HANDLER) (\r
+  IN  EFI_SAL_MCA_INIT_PMI_PROTOCOL         *This,\r
+  IN  EFI_SAL_INIT_HANDLER                  InitHandler,\r
+  IN  VOID                                  *ModuleGlobal,\r
+  IN  BOOLEAN                               MakeFirst,\r
+  IN  BOOLEAN                               MakeLast\r
+  );\r
+\r
+/**\r
+  Register a PMI handler with the PMI dispatcher.\r
+\r
+  @param  This                        The EFI_SAL_MCA_INIT_PMI_PROTOCOL instance\r
+  @param  PmiHandler                  The PMI handler to register\r
+  @param  ModuleGlobal                The context of PMI Handler\r
+  @param  MakeFirst                   This flag specifies the handler should be made first in the list\r
+  @param  MakeLast                    This flag specifies the handler should be made last in the list\r
+\r
+  @retval EFI_SUCCESS                 PMI Handle was registered\r
+  @retval EFI_OUT_OF_RESOURCES        No more resources to register an PMI handler\r
+  @retval EFI_INVALID_PARAMETER       Invalid parameters were passed\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_SAL_REGISTER_PMI_HANDLER) (\r
+  IN  EFI_SAL_MCA_INIT_PMI_PROTOCOL         *This,\r
+  IN  EFI_SAL_PMI_HANDLER                   PmiHandler,\r
+  IN  VOID                                  *ModuleGlobal,\r
+  IN  BOOLEAN                               MakeFirst,\r
+  IN  BOOLEAN                               MakeLast\r
+  );\r
+\r
+///\r
+/// This protocol is used to register MCA, INIT and PMI handlers with their respective dispatcher\r
+///\r
+struct _EFI_SAL_MCA_INIT_PMI_PROTOCOL {\r
+  EFI_SAL_REGISTER_MCA_HANDLER  RegisterMcaHandler;\r
+  EFI_SAL_REGISTER_INIT_HANDLER RegisterInitHandler;\r
+  EFI_SAL_REGISTER_PMI_HANDLER  RegisterPmiHandler;\r
+  BOOLEAN                       McaInProgress;       ///< Whether MCA handler is in progress\r
+  BOOLEAN                       InitInProgress;      ///< Whether Init handler is in progress\r
+  BOOLEAN                       PmiInProgress;       ///< Whether Pmi handler is in progress\r
+};\r
+\r
+extern EFI_GUID gEfiSalMcaInitPmiProtocolGuid;\r
+\r
+#endif\r
+\r
index 6c417d52148dcf8ccef5a0860474d14bf4e6bfb5..7fe6daa461989886ead267307f48b0b07d7efee3 100644 (file)
   ## Include/Protocol/LegacyRegion2.h\r
   gEfiLegacyRegion2ProtocolGuid = {0x70101eaf, 0x85, 0x440c, {0xb3, 0x56, 0x8e, 0xe3, 0x6f, 0xef, 0x24, 0xf0 } }\r
   \r
+  ## Include/Protocol/McaInitPmi.h\r
+  gEfiSalMcaInitPmiProtocolGuid = { 0xb60dc6e8, 0x3b6f, 0x11d5, {0xaf, 0x9, 0x0, 0xa0, 0xc9, 0x44, 0xa0, 0x5b } }\r
+\r
+  ## Include/Protocol/ExtendedSalBootService.h\r
+  gEfiExtendedSalBootServiceProtocolGuid  = { 0xde0ee9a4, 0x3c7a, 0x44f2, {0xb7, 0x8b, 0xe3, 0xcc, 0xd6, 0x9c, 0x3a, 0xf7 } }\r
+\r
+  ## Include/Protocol/ExtendedSalServiceClasses.h\r
+  gEfiExtendedSalBaseIoServicesProtocolGuid = { 0x5aea42b5, 0x31e1, 0x4515, {0xbc, 0x31, 0xb8, 0xd5, 0x25, 0x75, 0x65, 0xa6 } }\r
+  gEfiExtendedSalStallServicesProtocolGuid = { 0x53a58d06, 0xac27, 0x4d8c, {0xb5, 0xe9, 0xf0, 0x8a, 0x80, 0x65, 0x41, 0x70 } }\r
+  gEfiExtendedSalRtcServicesProtocolGuid = { 0x7e97a470, 0xefdb, 0x4d02, {0x8f, 0xce, 0x61, 0x90, 0xd2, 0x7b, 0xa2, 0x96 } }\r
+  gEfiExtendedSalVariableServicesProtocolGuid = { 0x4ecb6c53, 0xc641, 0x4370, {0x8c, 0xb2, 0x3b, 0x0e, 0x49, 0x6e, 0x83, 0x78 } }\r
+  gEfiExtendedSalMtcServicesProtocolGuid = { 0x899afd18, 0x75e8, 0x408b, {0xa4, 0x1a, 0x6e, 0x2e, 0x7e, 0xcd, 0xf4, 0x54 } }\r
+  gEfiExtendedSalResetServicesProtocolGuid = { 0x7d019990, 0x8ce1, 0x46f5, {0xa7, 0x76, 0x3c, 0x51, 0x98, 0x67, 0x6a, 0xa0 } }\r
+  gEfiExtendedSalStatusCodeServicesProtocolGuid = { 0xdbd91d, 0x55e9, 0x420f, {0x96, 0x39, 0x5e, 0x9f, 0x84, 0x37, 0xb4, 0x4f } }\r
+  gEfiExtendedSalFvBlockServicesProtocolGuid = { 0xa2271df1, 0xbcbb, 0x4f1d, {0x98, 0xa9, 0x06, 0xbc, 0x17, 0x2f, 0x07, 0x1a } }\r
+  gEfiExtendedSalMpServicesProtocolGuid = { 0x697d81a2, 0xcf18, 0x4dc0, {0x9e, 0x0d, 0x06, 0x11, 0x3b, 0x61, 0x8a, 0x3f } }\r
+  gEfiExtendedSalPalServicesProtocolGuid = { 0xe1cd9d21, 0x0fc2, 0x438d, {0x97, 0x03, 0x04, 0xe6, 0x6d, 0x96, 0x1e, 0x57 } }\r
+  gEfiExtendedSalBaseServicesProtocolGuid = { 0xd9e9fa06, 0x0fe0, 0x41c3, {0x96, 0xfb, 0x83, 0x42, 0x5a, 0x33, 0x94, 0xf8 } }\r
+  gEfiExtendedSalMcaServicesProtocolGuid = { 0x2a591128, 0x6cc7, 0x42b1, {0x8a, 0xf0, 0x58, 0x93, 0x3b, 0x68, 0x2d, 0xbb } }\r
+  gEfiExtendedSalPciServicesProtocolGuid = { 0xa46b1a31, 0xad66, 0x4905, {0x92, 0xf6, 0x2b, 0x46, 0x59, 0xdc, 0x30, 0x63 } }\r
+  gEfiExtendedSalCacheServicesProtocolGuid = { 0xedc9494, 0x2743, 0x4ba5, { 0x88, 0x18, 0x0a, 0xef, 0x52, 0x13, 0xf1, 0x88 } }\r
+  gEfiExtendedSalMcaLogServicesProtocolGuid = { 0xcb3fd86e, 0x38a3, 0x4c03, {0x9a, 0x5c, 0x90, 0xcf, 0xa3, 0xa2, 0xab, 0x7a } }\r
+\r
   #\r
   # Protocols defined in UEFI2.1/UEFI2.0/EFI1.1\r
   #\r