summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Universal/StatusCodeHandler/Pei/MemoryStausCodeWorker.c
diff options
context:
space:
mode:
authorlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>2010-07-05 08:59:57 +0000
committerlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>2010-07-05 08:59:57 +0000
commitbe63a20a025d5a7b792bf6ff33b91d22323e19d8 (patch)
tree78e9f2d681acce56ad9e925eaaf460d52c593557 /MdeModulePkg/Universal/StatusCodeHandler/Pei/MemoryStausCodeWorker.c
parentb24633c74e55c0a6a9c1c84796f00c3552c66ee3 (diff)
downloadedk2-be63a20a025d5a7b792bf6ff33b91d22323e19d8.zip
edk2-be63a20a025d5a7b792bf6ff33b91d22323e19d8.tar.gz
edk2-be63a20a025d5a7b792bf6ff33b91d22323e19d8.tar.bz2
Fix the issues that StatusCode can't work when PcdStatusCodeUseMemory is set to TRUE.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10630 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Universal/StatusCodeHandler/Pei/MemoryStausCodeWorker.c')
-rw-r--r--MdeModulePkg/Universal/StatusCodeHandler/Pei/MemoryStausCodeWorker.c93
1 files changed, 33 insertions, 60 deletions
diff --git a/MdeModulePkg/Universal/StatusCodeHandler/Pei/MemoryStausCodeWorker.c b/MdeModulePkg/Universal/StatusCodeHandler/Pei/MemoryStausCodeWorker.c
index 7ae314d..bdf1d27 100644
--- a/MdeModulePkg/Universal/StatusCodeHandler/Pei/MemoryStausCodeWorker.c
+++ b/MdeModulePkg/Universal/StatusCodeHandler/Pei/MemoryStausCodeWorker.c
@@ -15,19 +15,19 @@
#include "StatusCodeHandlerPei.h"
/**
- Worker function to create one memory status code GUID'ed HOB,
- using PacketIndex to identify the packet.
-
- @param PacketIndex Index of records packet.
+ Create the first memory status code GUID'ed HOB as initialization for memory status code worker.
- @return Pointer to the memory status code packet.
+ @retval EFI_SUCCESS The GUID'ed HOB is created successfully.
**/
-MEMORY_STATUSCODE_PACKET_HEADER *
-CreateMemoryStatusCodePacket (
- UINT16 PacketIndex
+EFI_STATUS
+MemoryStatusCodeInitializeWorker (
+ VOID
)
{
+ //
+ // Create memory status code GUID'ed HOB.
+ //
MEMORY_STATUSCODE_PACKET_HEADER *PacketHeader;
//
@@ -40,28 +40,9 @@ CreateMemoryStatusCodePacket (
ASSERT (PacketHeader != NULL);
PacketHeader->MaxRecordsNumber = (PcdGet16 (PcdStatusCodeMemorySize) * 1024) / sizeof (MEMORY_STATUSCODE_RECORD);
- PacketHeader->PacketIndex = PacketIndex;
+ PacketHeader->PacketIndex = 0;
PacketHeader->RecordIndex = 0;
- return PacketHeader;
-}
-
-/**
- Create the first memory status code GUID'ed HOB as initialization for memory status code worker.
-
- @retval EFI_SUCCESS The GUID'ed HOB is created successfully.
-
-**/
-EFI_STATUS
-MemoryStatusCodeInitializeWorker (
- VOID
- )
-{
- //
- // Create first memory status code GUID'ed HOB.
- //
- CreateMemoryStatusCodePacket (0);
-
return EFI_SUCCESS;
}
@@ -107,48 +88,40 @@ MemoryStatusCodeReportWorker (
EFI_PEI_HOB_POINTERS Hob;
MEMORY_STATUSCODE_PACKET_HEADER *PacketHeader;
MEMORY_STATUSCODE_RECORD *Record;
- UINT16 PacketIndex;
-
- Record = NULL;
- PacketIndex = 0;
//
- // Journal GUID'ed HOBs to find empty record entry. if found, then save status code in it.
- // otherwise, create a new GUID'ed HOB.
+ // Find GUID'ed HOBs to locate current record buffer.
//
Hob.Raw = GetFirstGuidHob (&gMemoryStatusCodeRecordGuid);
- while (Hob.Raw != NULL) {
- PacketHeader = (MEMORY_STATUSCODE_PACKET_HEADER *) GET_GUID_HOB_DATA (Hob.Guid);
+ ASSERT (Hob.Raw != NULL);
- //
- // Check whether pccket is full or not.
- //
- if (PacketHeader->RecordIndex < PacketHeader->MaxRecordsNumber) {
- Record = (MEMORY_STATUSCODE_RECORD *) (PacketHeader + 1);
- Record = &Record[PacketHeader->RecordIndex++];
- break;
- }
- //
- // Cache number of found packet in PacketIndex.
- //
- PacketIndex++;
+ PacketHeader = (MEMORY_STATUSCODE_PACKET_HEADER *) GET_GUID_HOB_DATA (Hob.Guid);
+ Record = (MEMORY_STATUSCODE_RECORD *) (PacketHeader + 1);
+ Record = &Record[PacketHeader->RecordIndex++];
- Hob.Raw = GetNextGuidHob (&gMemoryStatusCodeRecordGuid, Hob.Raw);
- }
+ //
+ // Save status code.
+ //
+ Record->CodeType = CodeType;
+ Record->Instance = Instance;
+ Record->Value = Value;
- if (Record == NULL) {
+ //
+ // If record index equals to max record number, then wrap around record index to zero.
+ //
+ // The reader of status code should compare the number of records with max records number,
+ // If it is equal to or larger than the max number, then the wrap-around had happened,
+ // so the first record is pointed by record index.
+ // If it is less then max number, index of the first record is zero.
+ //
+ if (PacketHeader->RecordIndex == PacketHeader->MaxRecordsNumber) {
//
- // No available entry found, so create new packet.
+ // Wrap around record index.
//
- PacketHeader = CreateMemoryStatusCodePacket (PacketIndex);
-
- Record = (MEMORY_STATUSCODE_RECORD *) (PacketHeader + 1);
- Record = &Record[PacketHeader->RecordIndex++];
+ PacketHeader->RecordIndex = 0;
+ PacketHeader->PacketIndex ++;
}
- Record->CodeType = CodeType;
- Record->Instance = Instance;
- Record->Value = Value;
-
return EFI_SUCCESS;
}
+