summaryrefslogtreecommitdiff
path: root/EDK/Foundation/Library/EdkIIGlueLib/Library/PeiFirmwarePerformanceLib
diff options
context:
space:
mode:
Diffstat (limited to 'EDK/Foundation/Library/EdkIIGlueLib/Library/PeiFirmwarePerformanceLib')
-rw-r--r--EDK/Foundation/Library/EdkIIGlueLib/Library/PeiFirmwarePerformanceLib/EdkIIGluePeiFirmwarePerformanceLib.c452
-rw-r--r--EDK/Foundation/Library/EdkIIGlueLib/Library/PeiFirmwarePerformanceLib/EdkIIGluePeiFirmwarePerformanceLib.cif11
-rw-r--r--EDK/Foundation/Library/EdkIIGlueLib/Library/PeiFirmwarePerformanceLib/EdkIIGluePeiFirmwarePerformanceLib.inf77
-rw-r--r--EDK/Foundation/Library/EdkIIGlueLib/Library/PeiFirmwarePerformanceLib/EdkIIGluePeiFirmwarePerformanceLib.mak74
-rw-r--r--EDK/Foundation/Library/EdkIIGlueLib/Library/PeiFirmwarePerformanceLib/EdkIIGluePeiFirmwarePerformanceLib.sdl24
5 files changed, 638 insertions, 0 deletions
diff --git a/EDK/Foundation/Library/EdkIIGlueLib/Library/PeiFirmwarePerformanceLib/EdkIIGluePeiFirmwarePerformanceLib.c b/EDK/Foundation/Library/EdkIIGlueLib/Library/PeiFirmwarePerformanceLib/EdkIIGluePeiFirmwarePerformanceLib.c
new file mode 100644
index 0000000..5990272
--- /dev/null
+++ b/EDK/Foundation/Library/EdkIIGlueLib/Library/PeiFirmwarePerformanceLib/EdkIIGluePeiFirmwarePerformanceLib.c
@@ -0,0 +1,452 @@
+/*++
+
+Copyright (c) 2011 - 2012, Intel Corporation. All rights reserved.<BR>
+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:
+
+ EdkIIGluePeiFirmwarePerformanceLib.c
+
+Abstract:
+
+ PEI Library for FPDT performance logging.
+
+--*/
+
+#include "EdkIIGluePeim.h"
+#include EFI_GUID_DEFINITION (PeiPerformanceHob)
+
+//
+// MAX perfomance HOB Entries
+//
+#define MAX_FIRMWARE_PERFORMANCE_ENTRIES 80
+
+EFI_STATUS
+PeiPerfMeasureEx (
+ IN VOID *FileHeader,
+ IN UINT16 *Token,
+ IN BOOLEAN EntryExit,
+ IN UINT64 TimeStamp,
+ IN UINT16 Identifier
+ )
+/*++
+
+Routine Description:
+
+ Log an extended timestamp value into pre-allocated hob.
+
+Arguments:
+
+ FileHeader - Pointer to the file header
+
+ Token - Pointer to Token Name
+
+ EntryExit - Indicates start or stop measurement
+
+ Timestamp - The TSC value
+
+ Identifier - Identifier of the record
+
+Returns:
+
+ EFI_BUFFER_TOO_SMALL - Allocate buffer is not enough to hold new records
+
+ EFI_SUCCESS - Successfully updated the record in hob
+
+--*/
+{
+ EFI_STATUS Status;
+ EFI_PEI_PPI_DESCRIPTOR *PerfHobDescriptor;
+ PEI_FIRMWARE_PERFORMANCE_HOB *FirmwarePerformanceHob;
+ PEI_GUID_EVENT_REC *PeiGuidRec;
+ EFI_PEI_SERVICES **PeiServices;
+ UINTN BufferSize;
+ EFI_PEI_HOB_POINTERS Hob;
+
+ PeiServices = GetPeiServicesTablePointer ();
+ //
+ // Locate the Pei Performance Log Hob.
+ //
+ Status = (*PeiServices)->LocatePpi (
+ PeiServices,
+ &gPeiFirmwarePerformanceGuid,
+ 0,
+ &PerfHobDescriptor,
+ NULL
+ );
+ if (EFI_ERROR (Status)) {
+ BufferSize = (UINT16) (sizeof (PEI_FIRMWARE_PERFORMANCE_HOB) +
+ ((MAX_FIRMWARE_PERFORMANCE_ENTRIES-1) * sizeof (PEI_GUID_EVENT_REC)) +
+ sizeof(EFI_PEI_PPI_DESCRIPTOR)
+ );
+
+ Hob.Raw = BuildGuidHob (
+ &gPeiFirmwarePerformanceGuid,
+ BufferSize
+ );
+
+ if (Hob.Raw == NULL) {
+ return EFI_BUFFER_TOO_SMALL;
+ }
+
+ FirmwarePerformanceHob = (VOID *) (Hob.Raw);
+ FirmwarePerformanceHob->NumberOfEntries = 0;
+ FirmwarePerformanceHob->Reserved = 0;
+
+ PerfHobDescriptor = (EFI_PEI_PPI_DESCRIPTOR *)((UINT8 *)(FirmwarePerformanceHob+1) +
+ (sizeof (PEI_GUID_EVENT_REC) *
+ (MAX_FIRMWARE_PERFORMANCE_ENTRIES-1))
+ );
+ PerfHobDescriptor->Flags = (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST);
+ PerfHobDescriptor->Guid = &gPeiFirmwarePerformanceGuid;
+ PerfHobDescriptor->Ppi = NULL;
+
+ (*PeiServices)->InstallPpi (PeiServices, PerfHobDescriptor);
+ ASSERT_EFI_ERROR (Status);
+ }
+
+ FirmwarePerformanceHob = (PEI_FIRMWARE_PERFORMANCE_HOB *)(((UINT8 *)(PerfHobDescriptor)) -
+ ((sizeof (PEI_GUID_EVENT_REC) *
+ (MAX_FIRMWARE_PERFORMANCE_ENTRIES-1))
+ + sizeof (PEI_FIRMWARE_PERFORMANCE_HOB)
+ )
+ );
+
+ //
+ // return if pre-allocated performance hob has filled up
+ //
+ if (FirmwarePerformanceHob->NumberOfEntries >= MAX_FIRMWARE_PERFORMANCE_ENTRIES) {
+ return EFI_BUFFER_TOO_SMALL;
+ }
+
+ PeiGuidRec = &(FirmwarePerformanceHob->GuidEventRecord[FirmwarePerformanceHob->NumberOfEntries]);
+ ((*PeiServices)->SetMem) (PeiGuidRec, sizeof (PEI_GUID_EVENT_REC), 0);
+
+ //
+ // If not NULL pointer, copy the file name
+ //
+ if (FileHeader != NULL) {
+ PeiGuidRec->Guid = ((EFI_FFS_FILE_HEADER *)FileHeader)->Name;
+ }
+ //
+ // Record the time stamp nanosec value.
+ //
+ PeiGuidRec->Timestamp = GetTimeInNanoSec (TimeStamp);
+
+ //
+ // Copy the progress ID
+ //
+ PeiGuidRec->ProgressID = Identifier;
+
+ //
+ // Record the APIC Id
+ //
+ PeiGuidRec->ApicID = GetApicId ();
+
+ //
+ // Increment the number of valid log entries.
+ //
+ FirmwarePerformanceHob->NumberOfEntries++;
+
+ return EFI_SUCCESS;
+}
+
+EFI_STATUS
+PeiPerfMeasure (
+ IN VOID *FileHeader,
+ IN UINT16 *Token,
+ IN BOOLEAN EntryExit,
+ IN UINT64 TimeStamp
+ )
+/*++
+
+Routine Description:
+
+ Log a timestamp value into pre-allocated buffer.
+ Creates performance hob if not already installed
+
+Arguments:
+
+ FileHeader - Pointer to the file header
+
+ Token - Pointer to Token Name
+
+ EntryExit - Indicates start or stop measurement
+
+ TimeStamp - The start time or the stop time
+
+Returns:
+
+ EFI_BUFFER_TOO_SMALL - Allocate buffer is not enough to hold new records
+
+ EFI_UNSUPPORTED - Unable to recognize used token
+
+ EFI_SUCCESS - Successfully updated the record in hob
+
+--*/
+{
+ EFI_STATUS Status;
+ PEI_FIRMWARE_PERFORMANCE_HOB *FirmwarePerformanceHob;
+ EFI_PEI_PPI_DESCRIPTOR *PerfHobDescriptor;
+ PEI_GUID_EVENT_REC *PeiGuidRec;
+ EFI_PEI_SERVICES **PeiServices;
+ UINTN BufferSize;
+ EFI_PEI_HOB_POINTERS Hob;
+
+ PeiServices = GetPeiServicesTablePointer ();
+ //
+ // Locate the Pei Performance Log Hob.
+ //
+ Status = (*PeiServices)->LocatePpi (
+ PeiServices,
+ &gPeiFirmwarePerformanceGuid,
+ 0,
+ &PerfHobDescriptor,
+ NULL
+ );
+
+ if (EFI_ERROR (Status)) {
+
+ BufferSize = (UINT16) (sizeof (PEI_FIRMWARE_PERFORMANCE_HOB) +
+ ((MAX_FIRMWARE_PERFORMANCE_ENTRIES-1) * sizeof (PEI_GUID_EVENT_REC)) +
+ sizeof(EFI_PEI_PPI_DESCRIPTOR)
+ );
+
+ Hob.Raw = BuildGuidHob (
+ &gPeiFirmwarePerformanceGuid,
+ BufferSize
+ );
+
+ if (Hob.Raw == NULL) {
+ return EFI_BUFFER_TOO_SMALL;
+ }
+
+ FirmwarePerformanceHob = (VOID *) (Hob.Raw);
+ FirmwarePerformanceHob->NumberOfEntries = 0;
+ FirmwarePerformanceHob->Reserved = 0;
+
+ PerfHobDescriptor = (EFI_PEI_PPI_DESCRIPTOR *)((UINT8 *)(FirmwarePerformanceHob+1) +
+ (sizeof (PEI_GUID_EVENT_REC) *
+ (MAX_FIRMWARE_PERFORMANCE_ENTRIES-1))
+ );
+ PerfHobDescriptor->Flags = (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST);
+ PerfHobDescriptor->Guid = &gPeiFirmwarePerformanceGuid;
+ PerfHobDescriptor->Ppi = NULL;
+
+ (*PeiServices)->InstallPpi (PeiServices, PerfHobDescriptor);
+ ASSERT_EFI_ERROR (Status);
+ }
+
+ FirmwarePerformanceHob = (PEI_FIRMWARE_PERFORMANCE_HOB *)(((UINT8 *)(PerfHobDescriptor)) -
+ ((sizeof (PEI_GUID_EVENT_REC) *
+ (MAX_FIRMWARE_PERFORMANCE_ENTRIES-1))
+ + sizeof (PEI_FIRMWARE_PERFORMANCE_HOB))
+ );
+
+ if (FirmwarePerformanceHob->NumberOfEntries >= MAX_FIRMWARE_PERFORMANCE_ENTRIES) {
+ return EFI_BUFFER_TOO_SMALL;
+ }
+
+ PeiGuidRec = &(FirmwarePerformanceHob->GuidEventRecord[FirmwarePerformanceHob->NumberOfEntries]);
+ ((*PeiServices)->SetMem) (PeiGuidRec, sizeof (PEI_GUID_EVENT_REC), 0);
+
+ //
+ // If not NULL pointer, copy the file name
+ //
+ if (FileHeader != NULL) {
+ PeiGuidRec->Guid = ((EFI_FFS_FILE_HEADER *)FileHeader)->Name;
+ }
+ //
+ // Record the time stamp nanosec value.
+ //
+ PeiGuidRec->Timestamp = GetTimeInNanoSec (TimeStamp);
+
+ //
+ // Record the Progress Id
+ // Tokens are used by PEI core to log various phases of PEI
+ //
+ if (!StrCmp (Token, L"PEIM")) {
+ if (!EntryExit) {
+ PeiGuidRec->ProgressID = PEIM_START_ID;
+ } else {
+ PeiGuidRec->ProgressID = PEIM_END_ID;
+ }
+ } else if (!StrCmp (Token, L"PreMem")) {
+ if (!EntryExit) {
+ PeiGuidRec->ProgressID = PREMEM_START_ID;
+ } else {
+ PeiGuidRec->ProgressID = PREMEM_END_ID;
+ }
+ } else if (!StrCmp (Token, L"DisMem")) {
+ if (!EntryExit) {
+ PeiGuidRec->ProgressID = DISMEM_START_ID;
+ } else {
+ PeiGuidRec->ProgressID = DISMEM_END_ID;
+ }
+ } else if (!StrCmp (Token, L"PostMem")) {
+ if (!EntryExit) {
+ PeiGuidRec->ProgressID = POSTMEM_START_ID;
+ } else {
+ PeiGuidRec->ProgressID = POSTMEM_END_ID;
+ }
+ } else {
+ return EFI_UNSUPPORTED;
+ }
+ //
+ // Record the APIC Id
+ //
+ PeiGuidRec->ApicID = GetApicId ();
+
+ //
+ // Increment the number of valid log entries.
+ //
+ FirmwarePerformanceHob->NumberOfEntries++;
+
+ return EFI_SUCCESS;
+}
+
+EFI_STATUS
+StartMeasure (
+ IN VOID *Handle,
+ IN UINT16 *Token,
+ IN UINT16 *Module,
+ IN UINT64 TimeStamp
+ )
+/*++
+
+Routine Description:
+
+ Start measurement according to token field and insert into pre-allocated buffer
+
+Arguments:
+
+ Handle - Handle to measure
+ Token - Token to measure
+ Module - Module to measure
+ Timestamp - Ticker as start tick
+
+Returns:
+
+ EFI_SUCCESS - Located hob successfully, and buffer is updated with new record
+ EFI_UNSUPPORTED - Failure in update
+ EFI_BUFFER_TOO_SMALL - Allocate buffer is not enough to hold new records
+
+--*/
+{
+ EFI_STATUS Status;
+
+ Status = PeiPerfMeasure (Handle, Token, FALSE, TimeStamp);
+ return Status;
+}
+
+EFI_STATUS
+EndMeasure (
+ IN VOID *Handle,
+ IN UINT16 *Token,
+ IN UINT16 *Module,
+ IN UINT64 TimeStamp
+ )
+/*++
+
+Routine Description:
+
+ End measurement according to token field and insert into pre-allocated buffer
+
+Arguments:
+
+ Handle - Handle to stop
+ Token - Token to stop
+ Module - Module to stop
+ Timestamp - Ticker as end tick
+
+Returns:
+
+ EFI_SUCCESS - Located hob successfully, and buffer is updated with new record
+ EFI_UNSUPPORTED - Failure in update
+ EFI_BUFFER_TOO_SMALL - Allocate buffer is not enough to hold new records
+
+--*/
+{
+ EFI_STATUS Status;
+
+ Status = PeiPerfMeasure (Handle, Token, TRUE, TimeStamp);
+ return Status;
+}
+
+EFI_STATUS
+StartMeasureEx (
+ IN VOID *Handle,
+ IN UINT16 *Token,
+ IN UINT16 *Module,
+ IN UINT64 TimeStamp,
+ IN UINT16 Identifier
+ )
+/*++
+
+Routine Description:
+
+ Start extended measurement according to token field and insert into pre-allocated buffer
+
+Arguments:
+
+ Handle - Handle to stop
+ Token - Token to stop
+ Module - Module to stop
+ Timestamp - Ticker as end tick
+ Identifier - Identifier for a given record
+
+Returns:
+
+ EFI_SUCCESS - Located hob successfully, and buffer is updated with new record
+ EFI_UNSUPPORTED - Failure in update
+ EFI_BUFFER_TOO_SMALL - Allocate buffer is not enough to hold new records
+
+--*/
+{
+ EFI_STATUS Status;
+
+ Status = PeiPerfMeasureEx (Handle, Token, FALSE, TimeStamp, Identifier);
+ return Status;
+}
+
+EFI_STATUS
+EndMeasureEx (
+ IN VOID *Handle,
+ IN UINT16 *Token,
+ IN UINT16 *Module,
+ IN UINT64 TimeStamp,
+ IN UINT16 Identifier
+ )
+/*++
+
+Routine Description:
+
+ End extended measurement according to token field and insert into pre-allocated buffer
+
+Arguments:
+
+ Handle - Handle to stop
+ Token - Token to stop
+ Module - Module to stop
+ Timestamp - Ticker as end tick
+ Identifier - Identifier for a given record
+
+Returns:
+
+ EFI_SUCCESS - Located hob successfully, and buffer is updated with new record
+ EFI_UNSUPPORTED - Failure in update
+ EFI_BUFFER_TOO_SMALL - Allocate buffer is not enough to hold new records
+
+--*/
+{
+ EFI_STATUS Status;
+
+ Status = PeiPerfMeasureEx (Handle, Token, TRUE, TimeStamp, Identifier);
+ return Status;
+} \ No newline at end of file
diff --git a/EDK/Foundation/Library/EdkIIGlueLib/Library/PeiFirmwarePerformanceLib/EdkIIGluePeiFirmwarePerformanceLib.cif b/EDK/Foundation/Library/EdkIIGlueLib/Library/PeiFirmwarePerformanceLib/EdkIIGluePeiFirmwarePerformanceLib.cif
new file mode 100644
index 0000000..ccfaff0
--- /dev/null
+++ b/EDK/Foundation/Library/EdkIIGlueLib/Library/PeiFirmwarePerformanceLib/EdkIIGluePeiFirmwarePerformanceLib.cif
@@ -0,0 +1,11 @@
+<component>
+ name = "EdkIIGluePeiFirmwarePerformanceLib"
+ category = ModulePart
+ LocalRoot = "EDK\Foundation\Library\EdkIIGlueLib\Library\PeiFirmwarePerformanceLib\"
+ RefName = "EdkIIGluePeiFirmwarePerformanceLib"
+[files]
+"EdkIIGluePeiFirmwarePerformanceLib.sdl"
+"EdkIIGluePeiFirmwarePerformanceLib.mak"
+"EdkIIGluePeiFirmwarePerformanceLib.inf"
+"EdkIIGluePeiFirmwarePerformanceLib.c"
+<endComponent> \ No newline at end of file
diff --git a/EDK/Foundation/Library/EdkIIGlueLib/Library/PeiFirmwarePerformanceLib/EdkIIGluePeiFirmwarePerformanceLib.inf b/EDK/Foundation/Library/EdkIIGlueLib/Library/PeiFirmwarePerformanceLib/EdkIIGluePeiFirmwarePerformanceLib.inf
new file mode 100644
index 0000000..d692147
--- /dev/null
+++ b/EDK/Foundation/Library/EdkIIGlueLib/Library/PeiFirmwarePerformanceLib/EdkIIGluePeiFirmwarePerformanceLib.inf
@@ -0,0 +1,77 @@
+#/*++
+#
+# Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
+# 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:
+#
+# EdkIIGluePeiFirmwarePerformanceLib.inf
+#
+# Abstract:
+#
+# Component description file for PeiFirmwarePerformanceLib
+#
+#--*/
+
+[defines]
+BASE_NAME = EdkIIGluePeiFirmwarePerformanceLib
+COMPONENT_TYPE = LIBRARY
+
+[sources.common]
+ EdkIIGluePeiFirmwarePerformanceLib.c
+
+[sources.ia32]
+
+
+[sources.x64]
+
+
+[sources.ipf]
+
+
+[sources.ebc]
+
+
+[includes.common]
+ .
+ ..\..\Include
+ ..\..\include\Library
+ $(EDK_SOURCE)\Foundation
+ $(EDK_SOURCE)\Foundation\Include\Pei
+ $(EDK_SOURCE)\Foundation\Framework
+ $(EDK_SOURCE)\Foundation\Efi
+ $(EDK_SOURCE)\Foundation\Include
+ $(EDK_SOURCE)\Foundation\Efi\Include
+ $(EDK_SOURCE)\Foundation\Framework\Include
+ $(EDK_SOURCE)\Foundation\Library\Dxe\Include
+
+[libraries.common]
+ EdkIIGlueBaseTimerLibLocalApic
+ EdkIIGlueBaseTimerLibTsc
+ EdkIIGluePeiHobLib
+
+[libraries.ia32]
+
+[libraries.x64]
+
+[nmake.common]
+ C_FLAGS = $(C_FLAGS) /D EDKII_GLUE_LIBRARY_IMPLEMENTATION
+ LIB_STD_FLAGS = /NOLOGO /IGNORE:4006 /IGNORE:4221
+
+[nmake.ia32]
+ C_FLAGS = $(C_FLAGS) /D MDE_CPU_IA32
+
+[nmake.x64]
+ C_FLAGS = $(C_FLAGS) /D MDE_CPU_X64
+
+[nmake.ipf]
+ C_FLAGS = $(C_FLAGS) /D MDE_CPU_IPF
+
+[nmake.ebc]
+ C_FLAGS = $(C_FLAGS) /D MDE_CPU_EBC \ No newline at end of file
diff --git a/EDK/Foundation/Library/EdkIIGlueLib/Library/PeiFirmwarePerformanceLib/EdkIIGluePeiFirmwarePerformanceLib.mak b/EDK/Foundation/Library/EdkIIGlueLib/Library/PeiFirmwarePerformanceLib/EdkIIGluePeiFirmwarePerformanceLib.mak
new file mode 100644
index 0000000..99a1d78
--- /dev/null
+++ b/EDK/Foundation/Library/EdkIIGlueLib/Library/PeiFirmwarePerformanceLib/EdkIIGluePeiFirmwarePerformanceLib.mak
@@ -0,0 +1,74 @@
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#**********************************************************************
+#**********************************************************************
+
+#**********************************************************************
+# $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelEDK/EdkIIGlue/EdkIIGluePeiFirmwarePerformanceLib/EdkIIGluePeiFirmwarePerformanceLib.mak 1 1/20/12 3:58a Jeffch $
+#
+# $Revision: 1 $
+#
+# $Date: 1/20/12 3:58a $
+#**********************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/IntelEDK/EdkIIGlue/EdkIIGluePeiFirmwarePerformanceLib/EdkIIGluePeiFirmwarePerformanceLib.mak $
+#
+# 1 1/20/12 3:58a Jeffch
+# Create Intel EDK 1117 Patch 7.
+#
+# 1 11/17/11 9:31p Wesleychen
+# EdkIIGluePeiFirmwarePerformanceLib
+#
+#**********************************************************************
+#<AMI_FHDR_START>
+#
+# Name: EdkIIGluePeiFirmwarePerformanceLib.mak
+#
+# Description:
+#
+#<AMI_FHDR_END>
+#**********************************************************************
+$(EdkIIGluePeiFirmwarePerformanceLib_LIB) : EdkIIGluePeiFirmwarePerformanceLib
+
+EdkIIGluePeiFirmwarePerformanceLib : $(BUILD_DIR)\EdkIIGluePeiFirmwarePerformanceLib.mak EdkIIGluePeiFirmwarePerformanceLibBin
+
+$(BUILD_DIR)\EdkIIGluePeiFirmwarePerformanceLib.mak : $(EdkIIGluePeiFirmwarePerformanceLib_DIR)\$(@B).cif $(EdkIIGluePeiFirmwarePerformanceLib_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(EdkIIGluePeiFirmwarePerformanceLib_DIR)\$(@B).cif $(CIF2MAK_DEFAULTS)
+
+EdkIIGluePeiFirmwarePerformanceLibBin : $(CPUIA32LIB)
+
+EdkIIGluePeiFirmwarePerformanceLibBin : $(EdkIIGlueBaseTimerLibLocalApic_LIB) $(EdkIIGlueBaseTimerLibTsc_LIB) $(EdkIIGluePeiHobLib_LIB) $(EDKGUIDLIB) $(ARCHPROTOCOLLIB)
+!IF "$(x64_BUILD)"=="1"
+ $(MAKE) /$(MAKEFLAGS) $(EDKIIGLUE_DEFAULTS)\
+ BUILD_DIR=$(BUILD_DIR)\IA32\
+ /f $(BUILD_DIR)\EdkIIGluePeiFirmwarePerformanceLib.mak all\
+ TYPE=PEI_LIBRARY "PARAMETERS=LIBRARY_NAME=$$(EdkIIGluePeiFirmwarePerformanceLib_LIB)"
+!ELSE
+ $(MAKE) /$(MAKEFLAGS) $(EDKIIGLUE_DEFAULTS)\
+ BUILD_DIR=$(BUILD_DIR)\
+ /f $(BUILD_DIR)\EdkIIGluePeiFirmwarePerformanceLib.mak all\
+ TYPE=LIBRARY "PARAMETERS=LIBRARY_NAME=$$(EdkIIGluePeiFirmwarePerformanceLib_LIB)"
+!ENDIF
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (C)Copyright 1985-2011, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#**********************************************************************
+#**********************************************************************
diff --git a/EDK/Foundation/Library/EdkIIGlueLib/Library/PeiFirmwarePerformanceLib/EdkIIGluePeiFirmwarePerformanceLib.sdl b/EDK/Foundation/Library/EdkIIGlueLib/Library/PeiFirmwarePerformanceLib/EdkIIGluePeiFirmwarePerformanceLib.sdl
new file mode 100644
index 0000000..1ba2d0b
--- /dev/null
+++ b/EDK/Foundation/Library/EdkIIGlueLib/Library/PeiFirmwarePerformanceLib/EdkIIGluePeiFirmwarePerformanceLib.sdl
@@ -0,0 +1,24 @@
+TOKEN
+ Name = EdkIIGluePeiFirmwarePerformanceLib_SUPPORT
+ Value = 1
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ Master = Yes
+End
+
+TOKEN
+ Name = "EdkIIGluePeiFirmwarePerformanceLib_LIB"
+ Value = "$$(LIB_BUILD_DIR)\EdkIIGluePeiFirmwarePerformanceLib.lib"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+PATH
+ Name = "EdkIIGluePeiFirmwarePerformanceLib_DIR"
+End
+
+MODULE
+ Help = "Includes EdkIIGluePeiFirmwarePerformanceLib.mak to Project"
+ File = "EdkIIGluePeiFirmwarePerformanceLib.mak"
+End \ No newline at end of file