]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/StatusCodeHandler/Pei/MemoryStausCodeWorker.c
MdeModulePkg: Clean up source files
[mirror_edk2.git] / MdeModulePkg / Universal / StatusCodeHandler / Pei / MemoryStausCodeWorker.c
index f04a17495a26432544ee8d02d6a4f64744e06435..b2981121cbb7c104b0d2624b90905698380e17a0 100644 (file)
@@ -1,8 +1,8 @@
 /** @file\r
   PEI memory status code worker.\r
 \r
-  Copyright (c) 2006 - 2009, Intel Corporation\r
-  All rights reserved. This program and the accompanying materials\r
+  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
+  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
 #include "StatusCodeHandlerPei.h"\r
 \r
 /**\r
-  Worker function to create one memory status code GUID'ed HOB,\r
-  using PacketIndex to identify the packet.\r
-\r
-  @param   PacketIndex    Index of records packet.\r
+  Create the first memory status code GUID'ed HOB as initialization for memory status code worker.\r
 \r
-  @return  Pointer to the memory status code packet.\r
+  @retval EFI_SUCCESS  The GUID'ed HOB is created successfully.\r
 \r
 **/\r
-MEMORY_STATUSCODE_PACKET_HEADER *\r
-CreateMemoryStatusCodePacket (\r
-  UINT16 PacketIndex\r
+EFI_STATUS\r
+MemoryStatusCodeInitializeWorker (\r
+  VOID\r
   )\r
 {\r
+  //\r
+  // Create memory status code GUID'ed HOB.\r
+  //\r
   MEMORY_STATUSCODE_PACKET_HEADER *PacketHeader;\r
 \r
   //\r
@@ -40,28 +40,9 @@ CreateMemoryStatusCodePacket (
   ASSERT (PacketHeader != NULL);\r
 \r
   PacketHeader->MaxRecordsNumber = (PcdGet16 (PcdStatusCodeMemorySize) * 1024) / sizeof (MEMORY_STATUSCODE_RECORD);\r
-  PacketHeader->PacketIndex      = PacketIndex;\r
+  PacketHeader->PacketIndex      = 0;\r
   PacketHeader->RecordIndex      = 0;\r
 \r
-  return PacketHeader;\r
-}\r
-\r
-/**\r
-  Create the first memory status code GUID'ed HOB as initialization for memory status code worker.\r
-\r
-  @retval EFI_SUCCESS  The GUID'ed HOB is created successfully.\r
-\r
-**/\r
-EFI_STATUS\r
-MemoryStatusCodeInitializeWorker (\r
-  VOID\r
-  )\r
-{\r
-  //\r
-  // Create first memory status code GUID'ed HOB.\r
-  //\r
-  CreateMemoryStatusCodePacket (0);\r
-\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -93,6 +74,7 @@ MemoryStatusCodeInitializeWorker (
 \r
 **/\r
 EFI_STATUS\r
+EFIAPI\r
 MemoryStatusCodeReportWorker (\r
   IN CONST  EFI_PEI_SERVICES    **PeiServices,\r
   IN EFI_STATUS_CODE_TYPE       CodeType,\r
@@ -106,48 +88,40 @@ MemoryStatusCodeReportWorker (
   EFI_PEI_HOB_POINTERS              Hob;\r
   MEMORY_STATUSCODE_PACKET_HEADER   *PacketHeader;\r
   MEMORY_STATUSCODE_RECORD          *Record;\r
-  UINT16                            PacketIndex;\r
-\r
-  Record      = NULL;\r
-  PacketIndex = 0;\r
 \r
   //\r
-  // Journal GUID'ed HOBs to find empty record entry. if found, then save status code in it.\r
-  // otherwise, create a new GUID'ed HOB.\r
+  // Find GUID'ed HOBs to locate current record buffer.\r
   //\r
   Hob.Raw = GetFirstGuidHob (&gMemoryStatusCodeRecordGuid);\r
-  while (Hob.Raw != NULL) {\r
-    PacketHeader = (MEMORY_STATUSCODE_PACKET_HEADER *) GET_GUID_HOB_DATA (Hob.Guid);\r
+  ASSERT (Hob.Raw != NULL);\r
 \r
-    //\r
-    // Check whether pccket is full or not.\r
-    //\r
-    if (PacketHeader->RecordIndex < PacketHeader->MaxRecordsNumber) {\r
-      Record = (MEMORY_STATUSCODE_RECORD *) (PacketHeader + 1);\r
-      Record = &Record[PacketHeader->RecordIndex++];\r
-      break;\r
-    }\r
-    //\r
-    // Cache number of found packet in PacketIndex.\r
-    //\r
-    PacketIndex++;\r
+  PacketHeader = (MEMORY_STATUSCODE_PACKET_HEADER *) GET_GUID_HOB_DATA (Hob.Guid);\r
+  Record = (MEMORY_STATUSCODE_RECORD *) (PacketHeader + 1);\r
+  Record = &Record[PacketHeader->RecordIndex++];\r
 \r
-    Hob.Raw = GetNextGuidHob (&gMemoryStatusCodeRecordGuid, Hob.Raw);\r
-  }\r
+  //\r
+  // Save status code.\r
+  //\r
+  Record->CodeType = CodeType;\r
+  Record->Instance = Instance;\r
+  Record->Value    = Value;\r
 \r
-  if (Record == NULL) {\r
+  //\r
+  // If record index equals to max record number, then wrap around record index to zero.\r
+  //\r
+  // The reader of status code should compare the number of records with max records number,\r
+  // If it is equal to or larger than the max number, then the wrap-around had happened,\r
+  // so the first record is pointed by record index.\r
+  // If it is less then max number, index of the first record is zero.\r
+  //\r
+  if (PacketHeader->RecordIndex == PacketHeader->MaxRecordsNumber) {\r
     //\r
-    // No available entry found, so create new packet.\r
+    // Wrap around record index.\r
     //\r
-    PacketHeader = CreateMemoryStatusCodePacket (PacketIndex);\r
-\r
-    Record = (MEMORY_STATUSCODE_RECORD *) (PacketHeader + 1);\r
-    Record = &Record[PacketHeader->RecordIndex++];\r
+    PacketHeader->RecordIndex = 0;\r
+    PacketHeader->PacketIndex ++;\r
   }\r
 \r
-  Record->CodeType = CodeType;\r
-  Record->Instance = Instance;\r
-  Record->Value    = Value;\r
-\r
   return EFI_SUCCESS;\r
 }\r
+\r