]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.c
1) Check in Pei/Dxe status code;
[mirror_edk2.git] / EdkModulePkg / Universal / StatusCode / Pei / PeiStatusCode.c
diff --git a/EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.c b/EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.c
new file mode 100644 (file)
index 0000000..9c36dee
--- /dev/null
@@ -0,0 +1,176 @@
+\r
+/** @file\r
+  Generic PeiStatusCode Module.\r
+\r
+// Copyright (c) 2006, Intel Corporation. All rights reserved. \r
+// This software and associated documentation (if any) is furnished\r
+// under a license and may only be used or copied in accordance\r
+// with the terms of the license. Except as permitted by such\r
+// license, no part of this software or documentation may be\r
+// reproduced, stored in a retrieval system, or transmitted in any\r
+// form or by any means without the express written consent of\r
+// Intel Corporation.\r
+\r
+  Module Name:  PeiStatusCode.c\r
+\r
+**/\r
+\r
+#include "PeiStatusCode.h"\r
+\r
+/**\r
+  Report status code to all supported device.\r
+ * \r
+ * \r
+  @param  PeiServices\r
+\r
+  @param  Type          Indicates the type of status code being reported.  \r
+                        The type EFI_STATUS_CODE_TYPE is defined in "Related Definitions" below.\r
+  @param  Value         Describes the current status of a hardware or software entity.  \r
+                        This includes information about the class and subclass that is used to classify the entity \r
+                        as well as an operation.  For progress codes, the operation is the current activity.  \r
+                        For error codes, it is the exception.  For debug codes, it is not defined at this time.  \r
+                        Type EFI_STATUS_CODE_VALUE is defined in ¡°Related Definitions¡± below.  \r
+                        Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.\r
+  @param  Instance      The enumeration of a hardware or software entity within the system.  \r
+                        A system may contain multiple entities that match a class/subclass pairing.  \r
+                        The instance differentiates between them.  An instance of 0 indicates that instance \r
+                        information is unavailable, not meaningful, or not relevant.  Valid instance numbers start with 1.\r
+  @param  CallerId      This optional parameter may be used to identify the caller. \r
+                        This parameter allows the status code driver to apply different rules to different callers.\r
+  @param  Data          This optional parameter may be used to pass additional data.  \r
+                        Type EFI_STATUS_CODE_DATA is defined in "Related Definitions" below.  \r
+                        The contents of this data type may have additional GUID-specific data.  The standard GUIDs and \r
+                        their associated data structures are defined in the Intel? Platform Innovation Framework for EFI Status Codes Specification.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+ReportDispatcher (\r
+  IN EFI_PEI_SERVICES         **PeiServices,\r
+  IN EFI_STATUS_CODE_TYPE     Type,\r
+  IN EFI_STATUS_CODE_VALUE    Value,\r
+  IN UINT32                   Instance,\r
+  IN EFI_GUID                 *CallerId OPTIONAL,\r
+  IN EFI_STATUS_CODE_DATA     *Data OPTIONAL\r
+  );\r
+\r
+\r
+EFI_PEI_PROGRESS_CODE_PPI     mStatusCodePpi           = { \r
+  ReportDispatcher\r
+  };\r
+\r
+EFI_PEI_PPI_DESCRIPTOR        mStatusCodePpiDescriptor = {\r
+  EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,\r
+  &gEfiPeiStatusCodePpiGuid,\r
+  &mStatusCodePpi\r
+  };\r
+\r
+/**\r
+  Report status code to all supported device.\r
+ * \r
+ * \r
+  @param  PeiServices\r
+\r
+  @param  CodeType      Indicates the type of status code being reported.  \r
+                        The type EFI_STATUS_CODE_TYPE is defined in "Related Definitions" below.\r
+  @param  Value         Describes the current status of a hardware or software entity.  \r
+                        This includes information about the class and subclass that is used to classify the entity \r
+                        as well as an operation.  For progress codes, the operation is the current activity.  \r
+                        For error codes, it is the exception.  For debug codes, it is not defined at this time.  \r
+                        Type EFI_STATUS_CODE_VALUE is defined in ¡°Related Definitions¡± below.  \r
+                        Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.\r
+  @param  Instance      The enumeration of a hardware or software entity within the system.  \r
+                        A system may contain multiple entities that match a class/subclass pairing.  \r
+                        The instance differentiates between them.  An instance of 0 indicates that instance \r
+                        information is unavailable, not meaningful, or not relevant.  Valid instance numbers start with 1.\r
+  @param  CallerId      This optional parameter may be used to identify the caller. \r
+                        This parameter allows the status code driver to apply different rules to different callers.\r
+  @param  Data          This optional parameter may be used to pass additional data.  \r
+                        Type EFI_STATUS_CODE_DATA is defined in "Related Definitions" below.  \r
+                        The contents of this data type may have additional GUID-specific data.  The standard GUIDs and \r
+                        their associated data structures are defined in the Intel? Platform Innovation Framework for EFI Status Codes Specification.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+ReportDispatcher (\r
+  IN EFI_PEI_SERVICES         **PeiServices,\r
+  IN EFI_STATUS_CODE_TYPE     CodeType,\r
+  IN EFI_STATUS_CODE_VALUE    Value,\r
+  IN UINT32                   Instance,\r
+  IN EFI_GUID                 *CallerId OPTIONAL,\r
+  IN EFI_STATUS_CODE_DATA     *Data OPTIONAL\r
+  )\r
+{\r
+  if (FeaturePcdGet (PcdStatusCodeUseSerial)) {\r
+    SerialStatusCodeReportWorker (\r
+      CodeType,\r
+      Value,\r
+      Instance,\r
+      CallerId,\r
+      Data\r
+      );\r
+  }\r
+  if (FeaturePcdGet (PcdStatusCodeUseMemory)) {\r
+    MemoryStatusCodeReportWorker (\r
+      CodeType,\r
+      Value,\r
+      Instance\r
+      );\r
+  }\r
+  if (FeaturePcdGet (PcdStatusCodeUseOEM)) {\r
+    OemHookStatusCodeReport (\r
+      CodeType,\r
+      Value,\r
+      Instance,\r
+      CallerId,\r
+      Data\r
+      );\r
+  }\r
+\r
+  return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+  Initialize PEI status codes and publish the status code \r
+  PPI.\r
+\r
+  @param   FfsHeader       FV this PEIM was loaded from.\r
+  @param   PeiServices     General purpose services available to every PEIM.\r
\r
+  @return                  The function always returns success.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+PeiStatusCodeDriverEntry (\r
+  IN EFI_FFS_FILE_HEADER       *FfsHeader,\r
+  IN EFI_PEI_SERVICES          **PeiServices\r
+  )\r
+{\r
+  EFI_STATUS                  Status;\r
+\r
+  //\r
+  // Dispatch initialization request to sub-statuscode-devices.\r
+  // If enable UseSerial, then initialize serial port.\r
+  // if enable UseMemory, then initialize memory status code worker.\r
+  // if enable UseOEM, then initialize Oem status code.\r
+  //\r
+  if (FeaturePcdGet (PcdStatusCodeUseSerial)) {\r
+    SerialPortInitialize();\r
+  }\r
+  if (FeaturePcdGet (PcdStatusCodeUseMemory)) {\r
+    MemoryStatusCodeInitializeWorker ();\r
+  }\r
+  if (FeaturePcdGet (PcdStatusCodeUseOEM)) {\r
+    OemHookStatusCodeInitialize ();\r
+  }\r
+\r
+  //\r
+  // Install PeiStatusCodePpi. \r
+  // PeiServices use this Ppi to output status code.\r
+  // use library\r
+  Status = PeiServicesInstallPpi (&mStatusCodePpiDescriptor);\r
+  ASSERT_EFI_ERROR (Status);\r
+  \r
+  return EFI_SUCCESS;\r
+}\r
+\r