1) Check in Pei/Dxe status code;
2) OemHookStatusCodeLib and SerialPortLib class and null instance; 3) Remove all referenced code from EdkModulePkg,EdkNt32Pkg. 4) Add Nt32OemHookStatusCodeLib. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1067 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -38,6 +38,7 @@ DxeSalLibConstruct (
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RegisterEsalFunction (
|
||||
IN UINT64 FunctionId,
|
||||
IN EFI_GUID *ClassGuid,
|
||||
@@ -72,6 +73,7 @@ Returns:
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RegisterEsalClass (
|
||||
IN EFI_GUID *ClassGuid,
|
||||
IN VOID *ModuleGlobal,
|
||||
@@ -129,6 +131,7 @@ Returns:
|
||||
}
|
||||
|
||||
SAL_RETURN_REGS
|
||||
EFIAPI
|
||||
EfiCallEsalService (
|
||||
IN EFI_GUID *ClassGuid,
|
||||
IN UINT64 FunctionId,
|
||||
|
@@ -11,62 +11,40 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
-->
|
||||
<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0">
|
||||
<MsaHeader>
|
||||
<ModuleName>EdkRtMemoryStatusCodeLib</ModuleName>
|
||||
<ModuleType>DXE_DRIVER</ModuleType>
|
||||
<GuidValue>1517564b-ab66-42b7-8903-731a95f314f9</GuidValue>
|
||||
<ModuleName>EdkOemHookStatusCodeLibNull</ModuleName>
|
||||
<ModuleType>PEIM</ModuleType>
|
||||
<GuidValue>54D2878F-25CD-4a2b-8420-EBD18E609C76</GuidValue>
|
||||
<Version>1.0</Version>
|
||||
<Abstract>Runtime memory status code library</Abstract>
|
||||
<Description>Save status code in runtime memory heap.</Description>
|
||||
<Abstract>Memory Status Code Library for UEFI drivers</Abstract>
|
||||
<Description>Lib to provide memory journal status code reporting Routines</Description>
|
||||
<Copyright>Copyright (c) 2006, Intel Corporation.</Copyright>
|
||||
<License>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,
|
||||
<License>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.</License>
|
||||
<Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>
|
||||
</MsaHeader>
|
||||
<ModuleDefinitions>
|
||||
<SupportedArchitectures>IA32 X64 IPF EBC</SupportedArchitectures>
|
||||
<BinaryModule>false</BinaryModule>
|
||||
<OutputFileBasename>EdkRtMemoryStatusCodeLib</OutputFileBasename>
|
||||
<OutputFileBasename>EdkOemHookStatusCodeLibNull</OutputFileBasename>
|
||||
</ModuleDefinitions>
|
||||
<LibraryClassDefinitions>
|
||||
<LibraryClass Usage="ALWAYS_PRODUCED">
|
||||
<Keyword>EdkRtMemoryStatusCodeLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>UefiLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>DebugLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>BaseLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>UefiRuntimeLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>ReportStatusCodeLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>PrintLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>HobLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>UefiBootServicesTableLib</Keyword>
|
||||
<Keyword>OemHookStatusCodeLib</Keyword>
|
||||
</LibraryClass>
|
||||
</LibraryClassDefinitions>
|
||||
<SourceFiles>
|
||||
<Filename>RtMemoryStatusCode.c</Filename>
|
||||
<Filename>OemHookStatusCodeLibNull.c</Filename>
|
||||
</SourceFiles>
|
||||
<PackageDependencies>
|
||||
<Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
|
||||
<Package PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674"/>
|
||||
</PackageDependencies>
|
||||
<PPIs>
|
||||
</PPIs>
|
||||
<Externs>
|
||||
<Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
|
||||
<Specification>EDK_RELEASE_VERSION 0x00020000</Specification>
|
@@ -0,0 +1,71 @@
|
||||
/** @file
|
||||
OEM hook status code library functions with no library constructor/destructor
|
||||
|
||||
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: OemHookStatusCodeLibNull.c
|
||||
|
||||
**/
|
||||
|
||||
/**
|
||||
|
||||
Initialize OEM status code device .
|
||||
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
OemHookStatusCodeInitialize (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
Report status code to OEM device.
|
||||
|
||||
@param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitions<6E><73> 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 <20><>Related Definitions<6E><73> 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.
|
||||
|
||||
|
||||
@param CallerId This optional parameter may be used to identify the caller.
|
||||
This parameter allows the status code driver to apply different rules to different callers.
|
||||
Type EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification.
|
||||
|
||||
|
||||
@param Data This optional parameter may be used to pass additional data
|
||||
|
||||
@return The function always return EFI_SUCCESS.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
OemHookStatusCodeReport (
|
||||
IN EFI_STATUS_CODE_TYPE CodeType,
|
||||
IN EFI_STATUS_CODE_VALUE Value,
|
||||
IN UINT32 Instance,
|
||||
IN EFI_GUID *CallerId, OPTIONAL
|
||||
IN EFI_STATUS_CODE_DATA *Data OPTIONAL
|
||||
)
|
||||
{
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
@@ -1,397 +0,0 @@
|
||||
/*++
|
||||
|
||||
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:
|
||||
|
||||
BsDataHubStatusCode.c
|
||||
|
||||
Abstract:
|
||||
|
||||
This implements a status code listener that logs status codes into the data
|
||||
hub. This is only active during non-runtime DXE.
|
||||
|
||||
--*/
|
||||
#include "BsDataHubStatusCode.h"
|
||||
|
||||
//
|
||||
// Globals only work at BootService Time. NOT at Runtime!
|
||||
//
|
||||
static EFI_DATA_HUB_PROTOCOL *mDataHub;
|
||||
static LIST_ENTRY mRecordBuffer;
|
||||
static INTN mRecordNum;
|
||||
static EFI_EVENT mLogDataHubEvent;
|
||||
static EFI_LOCK mStatusCodeReportLock;
|
||||
static BOOLEAN mEventHandlerActive = FALSE;
|
||||
|
||||
STATUS_CODE_RECORD_LIST *
|
||||
GetRecordBuffer (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Returned buffer of length BYTES_PER_RECORD
|
||||
|
||||
Arguments:
|
||||
|
||||
None
|
||||
|
||||
Returns:
|
||||
|
||||
Entry in mRecordBuffer or NULL if non available
|
||||
|
||||
--*/
|
||||
{
|
||||
STATUS_CODE_RECORD_LIST *Buffer;
|
||||
|
||||
gBS->AllocatePool (EfiBootServicesData, sizeof (STATUS_CODE_RECORD_LIST), (VOID **) &Buffer);
|
||||
if (Buffer == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ZeroMem (Buffer, sizeof (STATUS_CODE_RECORD_LIST));
|
||||
Buffer->Signature = BS_DATA_HUB_STATUS_CODE_SIGNATURE;
|
||||
|
||||
return Buffer;
|
||||
}
|
||||
|
||||
DATA_HUB_STATUS_CODE_DATA_RECORD *
|
||||
AquireEmptyRecordBuffer (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Allocate a mRecordBuffer entry in the form of a pointer.
|
||||
|
||||
Arguments:
|
||||
|
||||
None
|
||||
|
||||
Returns:
|
||||
|
||||
Pointer to new buffer. NULL if none exist.
|
||||
|
||||
--*/
|
||||
{
|
||||
STATUS_CODE_RECORD_LIST *DataBuffer;
|
||||
|
||||
if (mRecordNum < MAX_RECORD_NUM) {
|
||||
DataBuffer = GetRecordBuffer ();
|
||||
if (DataBuffer != NULL) {
|
||||
EfiAcquireLock (&mStatusCodeReportLock);
|
||||
InsertTailList (&mRecordBuffer, &DataBuffer->Link);
|
||||
mRecordNum++;
|
||||
EfiReleaseLock (&mStatusCodeReportLock);
|
||||
return (DATA_HUB_STATUS_CODE_DATA_RECORD *) DataBuffer->RecordBuffer;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
ReleaseRecordBuffer (
|
||||
IN STATUS_CODE_RECORD_LIST *RecordBuffer
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Release a mRecordBuffer entry allocated by AquireEmptyRecordBuffer ().
|
||||
|
||||
Arguments:
|
||||
|
||||
RecordBuffer - Data to free
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - If DataRecord is valid
|
||||
EFI_UNSUPPORTED - The record list has empty
|
||||
|
||||
--*/
|
||||
{
|
||||
ASSERT (RecordBuffer != NULL);
|
||||
if (mRecordNum <= 0) {
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
EfiAcquireLock (&mStatusCodeReportLock);
|
||||
RemoveEntryList (&RecordBuffer->Link);
|
||||
mRecordNum--;
|
||||
EfiReleaseLock (&mStatusCodeReportLock);
|
||||
gBS->FreePool (RecordBuffer);
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
BsDataHubReportStatusCode (
|
||||
IN EFI_STATUS_CODE_TYPE CodeType,
|
||||
IN EFI_STATUS_CODE_VALUE Value,
|
||||
IN UINT32 Instance,
|
||||
IN EFI_GUID * CallerId,
|
||||
IN EFI_STATUS_CODE_DATA * Data OPTIONAL
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Boot service report status code listener. This function logs the status code
|
||||
into the data hub.
|
||||
|
||||
Arguments:
|
||||
|
||||
Same as ReportStatusCode (See Tiano Runtime Specification)
|
||||
|
||||
Returns:
|
||||
|
||||
None
|
||||
|
||||
--*/
|
||||
{
|
||||
DATA_HUB_STATUS_CODE_DATA_RECORD *DataHub;
|
||||
UINT32 ErrorLevel;
|
||||
VA_LIST Marker;
|
||||
CHAR8 *Format;
|
||||
UINTN Index;
|
||||
CHAR16 FormatBuffer[BYTES_PER_RECORD];
|
||||
|
||||
if (EfiAtRuntime ()) {
|
||||
//
|
||||
// For now all we do is post code at runtime
|
||||
//
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
//
|
||||
// If we had an error while in our event handler, then do nothing so
|
||||
// that we don't get in an endless loop.
|
||||
//
|
||||
if (mEventHandlerActive) {
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
DataHub = (DATA_HUB_STATUS_CODE_DATA_RECORD *) AquireEmptyRecordBuffer ();
|
||||
if (DataHub == NULL) {
|
||||
//
|
||||
// There are no empty record buffer in private buffers
|
||||
//
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
//
|
||||
// Construct Data Hub Extended Data
|
||||
//
|
||||
DataHub->CodeType = CodeType;
|
||||
DataHub->Value = Value;
|
||||
DataHub->Instance = Instance;
|
||||
|
||||
if (CallerId != NULL) {
|
||||
CopyMem (&DataHub->CallerId, CallerId, sizeof (EFI_GUID));
|
||||
} else {
|
||||
ZeroMem (&DataHub->CallerId, sizeof (EFI_GUID));
|
||||
}
|
||||
|
||||
if (Data == NULL) {
|
||||
ZeroMem (&DataHub->Data, sizeof (EFI_STATUS_CODE_DATA));
|
||||
} else {
|
||||
//
|
||||
// Copy generic Header
|
||||
//
|
||||
CopyMem (&DataHub->Data, Data, sizeof (EFI_STATUS_CODE_DATA));
|
||||
|
||||
if (ReportStatusCodeExtractDebugInfo (Data, &ErrorLevel, &Marker, &Format)) {
|
||||
//
|
||||
// Convert Ascii Format string to Unicode.
|
||||
//
|
||||
for (Index = 0; Format[Index] != '\0' && Index < (BYTES_PER_RECORD - 1); Index += 1) {
|
||||
FormatBuffer[Index] = (CHAR16) Format[Index];
|
||||
}
|
||||
|
||||
FormatBuffer[Index] = L'\0';
|
||||
|
||||
//
|
||||
// Put processed string into the buffer
|
||||
//
|
||||
Index = UnicodeVSPrint (
|
||||
(CHAR16 *) (DataHub + 1),
|
||||
BYTES_PER_RECORD - (sizeof (DATA_HUB_STATUS_CODE_DATA_RECORD)),
|
||||
FormatBuffer,
|
||||
Marker
|
||||
);
|
||||
|
||||
//
|
||||
// DATA_HUB_STATUS_CODE_DATA_RECORD followed by VSPrint String Buffer
|
||||
//
|
||||
DataHub->Data.Size = (UINT16) (Index * sizeof (CHAR16));
|
||||
|
||||
} else {
|
||||
//
|
||||
// Default behavior is to copy optional data
|
||||
//
|
||||
if (Data->Size > (BYTES_PER_RECORD - sizeof (DATA_HUB_STATUS_CODE_DATA_RECORD))) {
|
||||
DataHub->Data.Size = (UINT16) (BYTES_PER_RECORD - sizeof (DATA_HUB_STATUS_CODE_DATA_RECORD));
|
||||
}
|
||||
|
||||
CopyMem (DataHub + 1, Data + 1, DataHub->Data.Size);
|
||||
}
|
||||
}
|
||||
|
||||
gBS->SignalEvent (mLogDataHubEvent);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
VOID
|
||||
EFIAPI
|
||||
LogDataHubEventHandler (
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
The Event handler which will be notified to log data in Data Hub.
|
||||
|
||||
Arguments:
|
||||
|
||||
Event - Instance of the EFI_EVENT to signal whenever data is
|
||||
available to be logged in the system.
|
||||
Context - Context of the event.
|
||||
|
||||
Returns:
|
||||
|
||||
None.
|
||||
|
||||
--*/
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
DATA_HUB_STATUS_CODE_DATA_RECORD *DataRecord;
|
||||
UINTN Size;
|
||||
UINT64 DataRecordClass;
|
||||
LIST_ENTRY *Link;
|
||||
STATUS_CODE_RECORD_LIST *BufferEntry;
|
||||
|
||||
//
|
||||
// Set our global flag so we don't recurse if we get an error here.
|
||||
//
|
||||
mEventHandlerActive = TRUE;
|
||||
|
||||
//
|
||||
// Log DataRecord in Data Hub.
|
||||
// If there are multiple DataRecords, Log all of them.
|
||||
//
|
||||
for (Link = mRecordBuffer.ForwardLink; Link != &mRecordBuffer;) {
|
||||
BufferEntry = CR (Link, STATUS_CODE_RECORD_LIST, Link, BS_DATA_HUB_STATUS_CODE_SIGNATURE);
|
||||
DataRecord = (DATA_HUB_STATUS_CODE_DATA_RECORD *) (BufferEntry->RecordBuffer);
|
||||
Link = Link->ForwardLink;
|
||||
|
||||
//
|
||||
// Add in the size of the header we added.
|
||||
//
|
||||
Size = sizeof (DATA_HUB_STATUS_CODE_DATA_RECORD) + DataRecord->Data.Size;
|
||||
|
||||
if ((DataRecord->CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) {
|
||||
DataRecordClass = EFI_DATA_RECORD_CLASS_PROGRESS_CODE;
|
||||
} else if ((DataRecord->CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE) {
|
||||
DataRecordClass = EFI_DATA_RECORD_CLASS_ERROR;
|
||||
} else if ((DataRecord->CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_DEBUG_CODE) {
|
||||
DataRecordClass = EFI_DATA_RECORD_CLASS_DEBUG;
|
||||
} else {
|
||||
//
|
||||
// Should never get here.
|
||||
//
|
||||
DataRecordClass = EFI_DATA_RECORD_CLASS_DEBUG |
|
||||
EFI_DATA_RECORD_CLASS_ERROR |
|
||||
EFI_DATA_RECORD_CLASS_DATA |
|
||||
EFI_DATA_RECORD_CLASS_PROGRESS_CODE;
|
||||
}
|
||||
|
||||
if (((DataRecord->Instance & EFI_D_ERROR) != 0) &&
|
||||
(((DataRecord->Instance & EFI_D_POOL) != 0) || ((DataRecord->Instance & EFI_D_PAGE) != 0))
|
||||
) {
|
||||
//
|
||||
// If memory error, do not call LogData ().
|
||||
//
|
||||
DebugPrint ((UINTN)-1, "Memory Error\n");
|
||||
Status = EFI_OUT_OF_RESOURCES;
|
||||
} else {
|
||||
//
|
||||
// Log DataRecord in Data Hub
|
||||
//
|
||||
Status = mDataHub->LogData (
|
||||
mDataHub,
|
||||
&gEfiStatusCodeGuid,
|
||||
&gEfiStatusCodeRuntimeProtocolGuid,
|
||||
DataRecordClass,
|
||||
DataRecord,
|
||||
(UINT32) Size
|
||||
);
|
||||
}
|
||||
|
||||
ReleaseRecordBuffer (BufferEntry);
|
||||
}
|
||||
|
||||
mEventHandlerActive = FALSE;
|
||||
|
||||
return ;
|
||||
}
|
||||
|
||||
VOID
|
||||
BsDataHubStatusCodeInitialize (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Install a data hub listener.
|
||||
|
||||
Arguments:
|
||||
|
||||
(Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - Logging Hub protocol installed
|
||||
Other - No protocol installed, unload driver.
|
||||
|
||||
--*/
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
|
||||
Status = gBS->LocateProtocol (&gEfiDataHubProtocolGuid, NULL, (VOID **) &mDataHub);
|
||||
//
|
||||
// Should never fail due to dependency grammer
|
||||
//
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
//
|
||||
// Initialize FIFO
|
||||
//
|
||||
InitializeListHead (&mRecordBuffer);
|
||||
mRecordNum = 0;
|
||||
|
||||
EfiInitializeLock (&mStatusCodeReportLock, EFI_TPL_HIGH_LEVEL);
|
||||
|
||||
//
|
||||
// Create a Notify Event to log data in Data Hub
|
||||
//
|
||||
Status = gBS->CreateEvent (
|
||||
EFI_EVENT_NOTIFY_SIGNAL,
|
||||
EFI_TPL_CALLBACK,
|
||||
LogDataHubEventHandler,
|
||||
NULL,
|
||||
&mLogDataHubEvent
|
||||
);
|
||||
|
||||
}
|
@@ -1,130 +0,0 @@
|
||||
/*++
|
||||
|
||||
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:
|
||||
|
||||
BsDataHubStatusCode.h
|
||||
|
||||
Abstract:
|
||||
|
||||
Header for the status code data hub logging component
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _EFI_BS_DATA_HUB_STATUS_CODE_H_
|
||||
#define _EFI_BS_DATA_HUB_STATUS_CODE_H_
|
||||
|
||||
//
|
||||
// Private data declarations
|
||||
//
|
||||
#define MAX_RECORD_NUM 1000
|
||||
#define BYTES_PER_RECORD EFI_STATUS_CODE_DATA_MAX_SIZE
|
||||
#define EMPTY_RECORD_TAG 0xFF
|
||||
|
||||
#define BS_DATA_HUB_STATUS_CODE_SIGNATURE EFI_SIGNATURE_32 ('B', 'D', 'H', 'S')
|
||||
|
||||
typedef struct {
|
||||
UINTN Signature;
|
||||
LIST_ENTRY Link;
|
||||
UINT8 RecordBuffer[BYTES_PER_RECORD];
|
||||
} STATUS_CODE_RECORD_LIST;
|
||||
|
||||
//
|
||||
// Function prototypes
|
||||
//
|
||||
STATUS_CODE_RECORD_LIST *
|
||||
GetRecordBuffer (
|
||||
VOID
|
||||
)
|
||||
;
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Returned buffer of length BYTES_PER_RECORD
|
||||
|
||||
Arguments:
|
||||
|
||||
None
|
||||
|
||||
Returns:
|
||||
|
||||
Entry in mRecordBuffer or NULL if non available
|
||||
|
||||
--*/
|
||||
DATA_HUB_STATUS_CODE_DATA_RECORD *
|
||||
AquireEmptyRecordBuffer (
|
||||
VOID
|
||||
)
|
||||
;
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Allocate a mRecordBuffer entry in the form of a pointer.
|
||||
|
||||
Arguments:
|
||||
|
||||
None
|
||||
|
||||
Returns:
|
||||
|
||||
Pointer to new buffer. NULL if none exist.
|
||||
|
||||
--*/
|
||||
EFI_STATUS
|
||||
ReleaseRecordBuffer (
|
||||
IN STATUS_CODE_RECORD_LIST *RecordBuffer
|
||||
)
|
||||
;
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Release a mRecordBuffer entry allocated by AquireEmptyRecordBuffer ().
|
||||
|
||||
Arguments:
|
||||
|
||||
RecordBuffer - Data to free
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS - If RecordBuffer is valid
|
||||
EFI_UNSUPPORTED - The record list has empty
|
||||
|
||||
--*/
|
||||
VOID
|
||||
EFIAPI
|
||||
LogDataHubEventHandler (
|
||||
IN EFI_EVENT Event,
|
||||
IN VOID *Context
|
||||
)
|
||||
;
|
||||
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Event Handler that log in Status code in Data Hub.
|
||||
|
||||
Arguments:
|
||||
|
||||
(Standard EFI Event Handler - EFI_EVENT_NOTIFY)
|
||||
|
||||
Returns:
|
||||
|
||||
NONE
|
||||
|
||||
--*/
|
||||
#endif
|
@@ -1,100 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0">
|
||||
<MsaHeader>
|
||||
<ModuleName>EdkBsDataHubStatusCodeLib</ModuleName>
|
||||
<ModuleType>DXE_DRIVER</ModuleType>
|
||||
<GuidValue>041bf780-dc3e-49ab-8d67-4b86075440ea</GuidValue>
|
||||
<Version>1.0</Version>
|
||||
<Abstract>Data hub status code library</Abstract>
|
||||
<Description>Save status code in DATA HUB.</Description>
|
||||
<Copyright>Copyright (c) 2006, Intel Corporation.</Copyright>
|
||||
<License>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.</License>
|
||||
<Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>
|
||||
</MsaHeader>
|
||||
<ModuleDefinitions>
|
||||
<SupportedArchitectures>IA32 X64 IPF EBC</SupportedArchitectures>
|
||||
<BinaryModule>false</BinaryModule>
|
||||
<OutputFileBasename>EdkBsDataHubStatusCodeLib</OutputFileBasename>
|
||||
</ModuleDefinitions>
|
||||
<LibraryClassDefinitions>
|
||||
<LibraryClass Usage="ALWAYS_PRODUCED">
|
||||
<Keyword>EdkBsDataHubStatusCodeLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>UefiLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>DebugLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>BaseLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>BaseMemoryLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>UefiRuntimeLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>ReportStatusCodeLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>PrintLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>UefiBootServicesTableLib</Keyword>
|
||||
</LibraryClass>
|
||||
</LibraryClassDefinitions>
|
||||
<SourceFiles>
|
||||
<Filename>BsDataHubStatusCode.c</Filename>
|
||||
<Filename>BsDataHubStatusCode.h</Filename>
|
||||
</SourceFiles>
|
||||
<PackageDependencies>
|
||||
<Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
|
||||
<Package PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674"/>
|
||||
</PackageDependencies>
|
||||
<Protocols>
|
||||
<Protocol Usage="ALWAYS_CONSUMED">
|
||||
<ProtocolCName>gEfiStatusCodeRuntimeProtocolGuid</ProtocolCName>
|
||||
</Protocol>
|
||||
<Protocol Usage="ALWAYS_CONSUMED">
|
||||
<ProtocolCName>gEfiDataHubProtocolGuid</ProtocolCName>
|
||||
</Protocol>
|
||||
</Protocols>
|
||||
<Events>
|
||||
<CreateEvents>
|
||||
<EventTypes EventGuidCName="EFI_EVENT_NOTIFY_SIGNAL" Usage="ALWAYS_CONSUMED">
|
||||
<EventType>EVENT_GROUP_GUID</EventType>
|
||||
</EventTypes>
|
||||
</CreateEvents>
|
||||
</Events>
|
||||
<DataHubs>
|
||||
<DataHubRecord Usage="ALWAYS_CONSUMED">
|
||||
<DataHubCName>gEfiStatusCodeGuid</DataHubCName>
|
||||
</DataHubRecord>
|
||||
</DataHubs>
|
||||
<Guids>
|
||||
<GuidCNames Usage="ALWAYS_CONSUMED">
|
||||
<GuidCName>gEfiStatusCodeGuid</GuidCName>
|
||||
</GuidCNames>
|
||||
</Guids>
|
||||
<Externs>
|
||||
<Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
|
||||
<Specification>EDK_RELEASE_VERSION 0x00020000</Specification>
|
||||
</Externs>
|
||||
</ModuleSurfaceArea>
|
@@ -1,188 +0,0 @@
|
||||
/*++
|
||||
|
||||
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:
|
||||
|
||||
RtMemoryStatusCode.c
|
||||
|
||||
Abstract:
|
||||
|
||||
EFI lib to provide memory journal status code reporting routines.
|
||||
|
||||
--*/
|
||||
|
||||
#include <Ppi/StatusCodeMemory.h>
|
||||
|
||||
//
|
||||
// Global variables
|
||||
//
|
||||
PEI_STATUS_CODE_MEMORY_PPI mStatusCodeMemoryPpi = { 0, 0, 0, 0 };
|
||||
|
||||
//
|
||||
// Function implementations
|
||||
//
|
||||
EFI_STATUS
|
||||
RtMemoryReportStatusCode (
|
||||
IN EFI_STATUS_CODE_TYPE CodeType,
|
||||
IN EFI_STATUS_CODE_VALUE Value,
|
||||
IN UINT32 Instance,
|
||||
IN EFI_GUID * CallerId,
|
||||
IN EFI_STATUS_CODE_DATA * Data OPTIONAL
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Log a status code to a memory journal. If no memory journal exists,
|
||||
we will just return.
|
||||
|
||||
Arguments:
|
||||
|
||||
Same as ReportStatusCode AP
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS This function always returns success
|
||||
|
||||
--*/
|
||||
{
|
||||
EFI_STATUS_CODE_ENTRY *CurrentEntry;
|
||||
UINT32 MaxEntry;
|
||||
|
||||
//
|
||||
// We don't care to log debug codes.
|
||||
//
|
||||
if ((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_DEBUG_CODE) {
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
//
|
||||
// Update the latest entry in the journal.
|
||||
//
|
||||
MaxEntry = mStatusCodeMemoryPpi.Length / sizeof (EFI_STATUS_CODE_ENTRY);
|
||||
if (!MaxEntry) {
|
||||
//
|
||||
// If we don't have any entries, then we can return.
|
||||
// This effectively means that no memory buffer was passed forward from PEI.
|
||||
//
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
CurrentEntry = (EFI_STATUS_CODE_ENTRY *) (UINTN) (mStatusCodeMemoryPpi.Address + (mStatusCodeMemoryPpi.LastEntry * sizeof (EFI_STATUS_CODE_ENTRY)));
|
||||
|
||||
mStatusCodeMemoryPpi.LastEntry = (mStatusCodeMemoryPpi.LastEntry + 1) % MaxEntry;
|
||||
if (mStatusCodeMemoryPpi.LastEntry == mStatusCodeMemoryPpi.FirstEntry) {
|
||||
mStatusCodeMemoryPpi.FirstEntry = (mStatusCodeMemoryPpi.FirstEntry + 1) % MaxEntry;
|
||||
}
|
||||
|
||||
CurrentEntry->Type = CodeType;
|
||||
CurrentEntry->Value = Value;
|
||||
CurrentEntry->Instance = Instance;
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
VOID
|
||||
RtMemoryStatusCodeInitialize (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Initialization routine.
|
||||
Allocates heap space for storing Status Codes.
|
||||
Installs a PPI to point to that heap space.
|
||||
Installs a callback to switch to memory.
|
||||
Installs a callback to
|
||||
|
||||
Arguments:
|
||||
|
||||
(Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)
|
||||
|
||||
Returns:
|
||||
|
||||
None
|
||||
|
||||
--*/
|
||||
{
|
||||
EFI_HOB_GUID_TYPE *GuidHob;
|
||||
PEI_STATUS_CODE_MEMORY_PPI **StatusCodeMemoryPpi;
|
||||
|
||||
GuidHob = GetFirstGuidHob (&gPeiStatusCodeMemoryPpiGuid);
|
||||
if (GuidHob == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
StatusCodeMemoryPpi = GET_GUID_HOB_DATA (GuidHob);
|
||||
|
||||
//
|
||||
// Copy data to our structure since the HOB will go away at runtime
|
||||
//
|
||||
// BUGBUG: Virtualize for RT
|
||||
//
|
||||
mStatusCodeMemoryPpi.FirstEntry = (*StatusCodeMemoryPpi)->FirstEntry;
|
||||
mStatusCodeMemoryPpi.LastEntry = (*StatusCodeMemoryPpi)->LastEntry;
|
||||
mStatusCodeMemoryPpi.Address = (*StatusCodeMemoryPpi)->Address;
|
||||
mStatusCodeMemoryPpi.Length = (*StatusCodeMemoryPpi)->Length;
|
||||
}
|
||||
|
||||
VOID
|
||||
PlaybackStatusCodes (
|
||||
IN EFI_REPORT_STATUS_CODE ReportStatusCodeFunc
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Call the input ReportStatusCode function with every status code recorded in
|
||||
the journal.
|
||||
|
||||
Arguments:
|
||||
|
||||
ReportStatusCode ReportStatusCode function to call.
|
||||
|
||||
Returns:
|
||||
|
||||
None
|
||||
|
||||
--*/
|
||||
{
|
||||
UINTN MaxEntry;
|
||||
EFI_STATUS_CODE_ENTRY *CurrentEntry;
|
||||
UINTN Counter;
|
||||
|
||||
if (ReportStatusCodeFunc == RtMemoryReportStatusCode) {
|
||||
return ;
|
||||
}
|
||||
//
|
||||
// Playback prior status codes to current listeners
|
||||
//
|
||||
MaxEntry = mStatusCodeMemoryPpi.Length / sizeof (EFI_STATUS_CODE_ENTRY);
|
||||
for (Counter = mStatusCodeMemoryPpi.FirstEntry; Counter != mStatusCodeMemoryPpi.LastEntry; Counter++) {
|
||||
//
|
||||
// Check if we have to roll back to beginning of queue buffer
|
||||
//
|
||||
if (Counter == MaxEntry) {
|
||||
Counter = 0;
|
||||
}
|
||||
//
|
||||
// Play current entry
|
||||
//
|
||||
CurrentEntry = (EFI_STATUS_CODE_ENTRY *) (UINTN) (mStatusCodeMemoryPpi.Address + (Counter * sizeof (EFI_STATUS_CODE_ENTRY)));
|
||||
ReportStatusCodeFunc (
|
||||
CurrentEntry->Type,
|
||||
CurrentEntry->Value,
|
||||
CurrentEntry->Instance,
|
||||
NULL,
|
||||
NULL
|
||||
);
|
||||
}
|
||||
}
|
@@ -1,130 +0,0 @@
|
||||
/*++
|
||||
|
||||
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:
|
||||
|
||||
RtPlatformStatusCode.c
|
||||
|
||||
Abstract:
|
||||
|
||||
Contains NT32 specific implementations required to use status codes.
|
||||
|
||||
--*/
|
||||
|
||||
//
|
||||
// Globals only work at BootService Time. NOT at Runtime!
|
||||
//
|
||||
//
|
||||
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *REPORT_STATUS_CODE_FUNCTION) (
|
||||
IN EFI_STATUS_CODE_TYPE Type,
|
||||
IN EFI_STATUS_CODE_VALUE Value,
|
||||
IN UINT32 Instance,
|
||||
IN EFI_GUID *CallerId OPTIONAL,
|
||||
IN EFI_STATUS_CODE_DATA *Data OPTIONAL
|
||||
);
|
||||
|
||||
REPORT_STATUS_CODE_FUNCTION mPeiReportStatusCode;
|
||||
|
||||
//
|
||||
// Function implementations
|
||||
//
|
||||
EFI_STATUS
|
||||
RtPlatformReportStatusCode (
|
||||
IN EFI_STATUS_CODE_TYPE CodeType,
|
||||
IN EFI_STATUS_CODE_VALUE Value,
|
||||
IN UINT32 Instance,
|
||||
IN EFI_GUID * CallerId,
|
||||
IN EFI_STATUS_CODE_DATA * Data OPTIONAL
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Call all status code listeners in the MonoStatusCode.
|
||||
|
||||
Arguments:
|
||||
|
||||
Same as ReportStatusCode service
|
||||
|
||||
Returns:
|
||||
|
||||
EFI_SUCCESS Always returns success.
|
||||
|
||||
--*/
|
||||
{
|
||||
RtMemoryReportStatusCode (CodeType, Value, Instance, CallerId, Data);
|
||||
if (EfiAtRuntime ()) {
|
||||
//
|
||||
// For now all we do is post code at runtime
|
||||
//
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
BsDataHubReportStatusCode (CodeType, Value, Instance, CallerId, Data);
|
||||
|
||||
//
|
||||
// Call back into PEI to get status codes. This is because SecMain contains
|
||||
// status code that reports to Win32.
|
||||
//
|
||||
if (mPeiReportStatusCode != NULL) {
|
||||
return mPeiReportStatusCode (CodeType, Value, Instance, CallerId, Data);
|
||||
}
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
VOID
|
||||
RtPlatformStatusCodeInitialize (
|
||||
VOID
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
Initialize the status code listeners.
|
||||
|
||||
Arguments:
|
||||
|
||||
(Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)
|
||||
|
||||
Returns:
|
||||
|
||||
None
|
||||
|
||||
--*/
|
||||
{
|
||||
EFI_HOB_GUID_TYPE *GuidHob;
|
||||
void *Pointer;
|
||||
|
||||
RtMemoryStatusCodeInitialize ();
|
||||
BsDataHubStatusCodeInitialize ();
|
||||
|
||||
//
|
||||
// Play any prior status codes to the data hub.
|
||||
//
|
||||
PlaybackStatusCodes (BsDataHubReportStatusCode);
|
||||
|
||||
//
|
||||
// If PEI has a ReportStatusCode callback find it and use it before StdErr
|
||||
// is connected.
|
||||
//
|
||||
mPeiReportStatusCode = NULL;
|
||||
|
||||
GuidHob = GetFirstGuidHob (&gEfiStatusCodeRuntimeProtocolGuid);
|
||||
if (NULL == GuidHob) {
|
||||
return;
|
||||
}
|
||||
Pointer = GET_GUID_HOB_DATA (GuidHob);
|
||||
mPeiReportStatusCode = (REPORT_STATUS_CODE_FUNCTION) (*(UINTN *) Pointer);
|
||||
}
|
@@ -11,68 +11,40 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
-->
|
||||
<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0">
|
||||
<MsaHeader>
|
||||
<ModuleName>EdkRtPlatformStatusCodeLib</ModuleName>
|
||||
<ModuleType>DXE_DRIVER</ModuleType>
|
||||
<GuidValue>68b157b5-9534-43ff-9cd3-6705e4e1d56c</GuidValue>
|
||||
<ModuleName>EdkSerialPortLibNull</ModuleName>
|
||||
<ModuleType>PEIM</ModuleType>
|
||||
<GuidValue>E4541241-8897-411a-91F8-7D7E45837146</GuidValue>
|
||||
<Version>1.0</Version>
|
||||
<Abstract>Runtime platform status code library</Abstract>
|
||||
<Description>Platform status code library</Description>
|
||||
<Abstract>Memory Status Code Library for UEFI drivers</Abstract>
|
||||
<Description>Lib to provide memory journal status code reporting Routines</Description>
|
||||
<Copyright>Copyright (c) 2006, Intel Corporation.</Copyright>
|
||||
<License>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,
|
||||
<License>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.</License>
|
||||
<Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>
|
||||
</MsaHeader>
|
||||
<ModuleDefinitions>
|
||||
<SupportedArchitectures>IA32 X64 IPF EBC</SupportedArchitectures>
|
||||
<BinaryModule>false</BinaryModule>
|
||||
<OutputFileBasename>EdkRtPlatformStatusCodeLib</OutputFileBasename>
|
||||
<OutputFileBasename>EdkSerialPortLibNull</OutputFileBasename>
|
||||
</ModuleDefinitions>
|
||||
<LibraryClassDefinitions>
|
||||
<LibraryClass Usage="ALWAYS_PRODUCED">
|
||||
<Keyword>EdkRtPlatformStatusCodeLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>UefiLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>DebugLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>BaseLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>UefiRuntimeLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>ReportStatusCodeLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>PrintLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>HobLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>EdkBsDataHubStatusCodeLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>EdkRtMemoryStatusCodeLib</Keyword>
|
||||
</LibraryClass>
|
||||
<LibraryClass Usage="ALWAYS_CONSUMED">
|
||||
<Keyword>UefiBootServicesTableLib</Keyword>
|
||||
<Keyword>SerialPortLib</Keyword>
|
||||
</LibraryClass>
|
||||
</LibraryClassDefinitions>
|
||||
<SourceFiles>
|
||||
<Filename>RtPlatformStatusCode.c</Filename>
|
||||
<Filename>SerialPortLibNull.c</Filename>
|
||||
</SourceFiles>
|
||||
<PackageDependencies>
|
||||
<Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
|
||||
<Package PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674"/>
|
||||
</PackageDependencies>
|
||||
<PPIs>
|
||||
</PPIs>
|
||||
<Externs>
|
||||
<Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
|
||||
<Specification>EDK_RELEASE_VERSION 0x00020000</Specification>
|
@@ -0,0 +1,77 @@
|
||||
/** @file
|
||||
Serial I/O Port library functions with no library constructor/destructor
|
||||
|
||||
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: SerialPortLibNull.c
|
||||
|
||||
**/
|
||||
|
||||
/**
|
||||
|
||||
Programmed hardware of Serial port.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SerialPortInitialize (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
/**
|
||||
Write data to serial device.
|
||||
|
||||
If the buffer is NULL, then ASSERT();
|
||||
if NumberOfBytes is zero, then ASSERT().
|
||||
|
||||
@param Buffer Point of data buffer which need to be writed.
|
||||
@param NumberOfBytes Number of output bytes which are cached in Buffer.
|
||||
|
||||
@retval 0 Write data failed.
|
||||
@retval !0 Actual number of bytes writed to serial device.
|
||||
|
||||
**/
|
||||
UINTN
|
||||
EFIAPI
|
||||
SerialPortWrite (
|
||||
IN UINT8 *Buffer,
|
||||
IN UINTN NumberOfBytes
|
||||
)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Read data from serial device and save the datas in buffer.
|
||||
|
||||
If the buffer is NULL, then ASSERT();
|
||||
if NumberOfBytes is zero, then ASSERT().
|
||||
|
||||
@param Buffer Point of data buffer which need to be writed.
|
||||
@param NumberOfBytes Number of output bytes which are cached in Buffer.
|
||||
|
||||
@retval 0 Read data failed.
|
||||
@retval !0 Aactual number of bytes read from serial device.
|
||||
|
||||
**/
|
||||
UINTN
|
||||
EFIAPI
|
||||
SerialPortRead (
|
||||
OUT UINT8 *Buffer,
|
||||
IN UINTN NumberOfBytes
|
||||
)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user