From ad1a179818e9eba78cbdce2694ff87e9228c48fd Mon Sep 17 00:00:00 2001 From: vanjeff Date: Fri, 29 Jun 2007 03:38:49 +0000 Subject: 1. add EdkSerialPortLibNull.inf 2. add StatusCode Dxe and Pei modules git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2877 6f19259b-4bc3-4df7-8a09-765794883524 --- .../StatusCode/Dxe/RtMemoryStatusCodeWorker.c | 125 +++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 IntelFrameworkModulePkg/Universal/StatusCode/Dxe/RtMemoryStatusCodeWorker.c (limited to 'IntelFrameworkModulePkg/Universal/StatusCode/Dxe/RtMemoryStatusCodeWorker.c') diff --git a/IntelFrameworkModulePkg/Universal/StatusCode/Dxe/RtMemoryStatusCodeWorker.c b/IntelFrameworkModulePkg/Universal/StatusCode/Dxe/RtMemoryStatusCodeWorker.c new file mode 100644 index 0000000000..db0f103a8a --- /dev/null +++ b/IntelFrameworkModulePkg/Universal/StatusCode/Dxe/RtMemoryStatusCodeWorker.c @@ -0,0 +1,125 @@ +/** @file + Runtime memory status code worker in DXE. + + Copyright (c) 2006, 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. + + Module Name: RtMemoryStatusCodeWorker.c + +**/ + +// +// Include common header file for this module. +// +#include "CommonHeader.h" + +#include "DxeStatusCode.h" + +/** + Initialize runtime memory status code. + + @return The function always return EFI_SUCCESS + +**/ +EFI_STATUS +RtMemoryStatusCodeInitializeWorker ( + VOID + ) +{ + RUNTIME_MEMORY_STATUSCODE_HEADER *RtMemoryStatusCodeTable; + + // + // Allocate runtime memory status code pool. + // + RtMemoryStatusCodeTable = + (RUNTIME_MEMORY_STATUSCODE_HEADER *) AllocatePool ( + sizeof (RUNTIME_MEMORY_STATUSCODE_HEADER) + + PcdGet16 (PcdStatusCodeRuntimeMemorySize) * + 1024 + ); + + ASSERT (NULL != RtMemoryStatusCodeTable); + + RtMemoryStatusCodeTable->RecordIndex = 0; + RtMemoryStatusCodeTable->NumberOfRecords = 0; + RtMemoryStatusCodeTable->MaxRecordsNumber = + (PcdGet16 (PcdStatusCodeRuntimeMemorySize) * 1024) / sizeof (MEMORY_STATUSCODE_RECORD); + + gDxeStatusCode.RtMemoryStatusCodeTable[PHYSICAL_MODE] = RtMemoryStatusCodeTable; + return EFI_SUCCESS; +} + + +/** + Report status code into runtime memory. If the runtime pool is full, roll back to the + first record and overwrite it. + + @param RtMemoryStatusCodeTable + Point to Runtime memory table header. + + @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitions" below. + + @param Value Describes the current status of a hardware or software entity. + This included information about the class and subclass that is used to classify the entity + as well as an operation. For progress codes, the operation is the current activity. + For error codes, it is the exception. For debug codes, it is not defined at this time. + Type EFI_STATUS_CODE_VALUE is defined in "Related Definitions" below. + Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification. + + @param Instance The enumeration of a hardware or software entity within the system. + A system may contain multiple entities that match a class/subclass pairing. + The instance differentiates between them. An instance of 0 indicates that instance information is unavailable, + not meaningful, or not relevant. Valid instance numbers start with 1. + + @return The function always return EFI_SUCCESS. + +**/ +EFI_STATUS +RtMemoryStatusCodeReportWorker ( + RUNTIME_MEMORY_STATUSCODE_HEADER *RtMemoryStatusCodeTable, + IN EFI_STATUS_CODE_TYPE CodeType, + IN EFI_STATUS_CODE_VALUE Value, + IN UINT32 Instance + ) +{ + MEMORY_STATUSCODE_RECORD *Record; + + ASSERT (NULL != RtMemoryStatusCodeTable); + + // + // Locate current record buffer. + // + Record = (MEMORY_STATUSCODE_RECORD *) (RtMemoryStatusCodeTable + 1); + Record = &Record[RtMemoryStatusCodeTable->RecordIndex++]; + + // + // Save status code. + // + Record->CodeType = CodeType; + Record->Value = Value; + Record->Instance = Instance; + + // + // Record total number of records, we compare the number with max records number, + // if it is bigger than the max number, then the roll back had happened, the record index points to + // the first record. if it is less then max number, then the zero index is the first record. + // + RtMemoryStatusCodeTable->NumberOfRecords++; + if (RtMemoryStatusCodeTable->RecordIndex == RtMemoryStatusCodeTable->MaxRecordsNumber) { + // + // Roll back record index. + // + RtMemoryStatusCodeTable->RecordIndex = 0; + } + + return EFI_SUCCESS; +} + + + -- cgit v1.2.3