summaryrefslogtreecommitdiff
path: root/Core/EM/SMBIOS/SmbiosPeim
diff options
context:
space:
mode:
Diffstat (limited to 'Core/EM/SMBIOS/SmbiosPeim')
-rw-r--r--Core/EM/SMBIOS/SmbiosPeim/SmbiosPei.c201
-rw-r--r--Core/EM/SMBIOS/SmbiosPeim/SmbiosPeim.cif11
-rw-r--r--Core/EM/SMBIOS/SmbiosPeim/SmbiosPeim.dxs66
-rw-r--r--Core/EM/SMBIOS/SmbiosPeim/SmbiosPeim.mak89
-rw-r--r--Core/EM/SMBIOS/SmbiosPeim/SmbiosPeim.sdl32
5 files changed, 399 insertions, 0 deletions
diff --git a/Core/EM/SMBIOS/SmbiosPeim/SmbiosPei.c b/Core/EM/SMBIOS/SmbiosPeim/SmbiosPei.c
new file mode 100644
index 0000000..e5869b0
--- /dev/null
+++ b/Core/EM/SMBIOS/SmbiosPeim/SmbiosPei.c
@@ -0,0 +1,201 @@
+//**********************************************************************
+//**********************************************************************
+//** **
+//** (C)Copyright 1985-2014, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//**********************************************************************
+//**********************************************************************
+
+//**********************************************************************
+// $Header: /Alaska/SOURCE/Modules/SMBIOS/SmbiosPeim/SmbiosPei.c 1 5/27/14 1:44p Davidd $
+//
+// $Revision: 1 $
+//
+// $Date: 5/27/14 1:44p $
+//**********************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SMBIOS/SmbiosPeim/SmbiosPei.c $
+//
+// 1 5/27/14 1:44p Davidd
+// [TAG] EIP103526
+// [Category] Improvement
+// [Files] SmbiosPeim.cif
+// SmbiosPeim.sdl
+// SmbiosPeim.mak
+// SmbiosPeim.dxs
+// SmbiosPei.c
+//
+// 1 4/29/14 4:44p Davidd
+// [TAG] EIP103526
+// [Category] Improvement
+// [Description] We should update Wake-up Type in SMBIOS type 1
+// dynamically
+// [Files] Core\EM\SMBios\SmbiosPeim\SmbiosPeim.cif
+// Core\EM\SMBios\SmbiosPeim\SmbiosPeim.sdl
+// Core\EM\SMBios\SmbiosPeim\SmbiosPeim.mak
+// Core\EM\SMBios\SmbiosPeim\SmbiosPeim.dxs
+// Core\EM\SMBios\SmbiosPeim\SmbiosPei.c
+//
+//**********************************************************************
+//<AMI_FHDR_START>
+//
+// Name: SmbiosPei.c
+//
+// Description:
+//
+//<AMI_FHDR_END>
+//**********************************************************************
+
+#include <AmiPeiLib.h>
+#include <Ppi\ReadOnlyVariable2.h>
+#include "Core\Ppi\MemoryDiscovered.h"
+
+extern VOID OemRuntimeShadowRamWrite(IN BOOLEAN Enable);
+extern UINT8 getWakeupTypeForSmbios(VOID);
+
+EFI_STATUS
+SmbiosAfterInitMemory(
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
+ IN VOID *NullPpi
+);
+
+static EFI_GUID gPeiPermanentMemInstalledPpiGuid = PEI_PERMANENT_MEMORY_INSTALLED_PPI_GUID;
+
+static EFI_PEI_NOTIFY_DESCRIPTOR SmbiosPeiNotify[] =
+{
+ {
+ EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
+ &gPeiPermanentMemInstalledPpiGuid,
+ SmbiosAfterInitMemory
+ }
+};
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: UpdateSmbiosWakeupType
+//
+// Description: Detect and update SMBIOS Type 1 structure "Wake-up Type"
+// data field
+//
+// Input:IN EFI_PEI_SERVICES **PeiServices,
+//
+// Output: Updated SMBIOS Type 1 "Wake-up Type"
+//
+// Notes:
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+VOID
+UpdateSmbiosWakeupType(
+ IN EFI_PEI_SERVICES **PeiServices
+)
+{
+ EFI_STATUS Status;
+ EFI_PEI_READ_ONLY_VARIABLE2_PPI *ReadOnlyVariable;
+ EFI_GUID EfiPeiReadOnlyVariablePpiGuid = \
+ {0x2ab86ef5, 0xecb5, 0x4134, {0xb5, 0x56, 0x38, 0x54, 0xca, 0x1f, 0xe1, 0xb4}};
+ EFI_GUID EfiSmbiosNvramGuid = \
+ {0x4b3082a3, 0x80c6, 0x4d7e, {0x9c, 0xd0, 0x58, 0x39, 0x17, 0x26, 0x5d, 0xf1}};
+ UINTN DataSize = 4;
+ UINT32 WakeupTypePtr;
+
+ Status = (*PeiServices)->LocatePpi(
+ PeiServices,
+ &EfiPeiReadOnlyVariablePpiGuid,
+ 0,
+ NULL,
+ &ReadOnlyVariable);
+ ASSERT_PEI_ERROR(PeiServices, Status);
+
+ if (Status == EFI_SUCCESS){
+ Status = ReadOnlyVariable->GetVariable(
+ ReadOnlyVariable,
+ L"WakeUpType",
+ &EfiSmbiosNvramGuid,
+ NULL,
+ &DataSize,
+ &WakeupTypePtr);
+ if (Status == EFI_SUCCESS) {
+ if (WakeupTypePtr > 0xf0000) {
+ *(UINT8*)WakeupTypePtr = getWakeupTypeForSmbios();
+ }
+ else {
+ OemRuntimeShadowRamWrite(TRUE);
+ *(UINT8*)WakeupTypePtr = getWakeupTypeForSmbios();
+ OemRuntimeShadowRamWrite(FALSE);
+ }
+ }
+ }
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+// Procedure: SmbiosAfterInitMemory
+//
+// Description:
+//
+// Input: IN EFI_PEI_SERVICES **PeiServices,
+// IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
+// IN VOID *NullPpi
+//
+// Output:
+//
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS
+SmbiosAfterInitMemory(
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
+ IN VOID *NullPpi
+)
+{
+ EFI_STATUS Status;
+ EFI_BOOT_MODE BootMode;
+
+ // Determine boot mode
+ Status = (*PeiServices)->GetBootMode(PeiServices, &BootMode);
+ ASSERT_PEI_ERROR(PeiServices, Status);
+
+ if (BootMode == BOOT_ON_S3_RESUME) {
+ UpdateSmbiosWakeupType(PeiServices);
+ }
+
+ return EFI_SUCCESS;
+}
+
+EFI_STATUS
+SmbiosPeiEntryPoint(
+ IN EFI_FFS_FILE_HEADER *FfsHeader,
+ IN EFI_PEI_SERVICES **PeiServices
+)
+{
+ EFI_STATUS Status;
+
+ // Set the Smbios Notify PPI
+ Status = (*PeiServices)->NotifyPpi(PeiServices, SmbiosPeiNotify);
+ ASSERT_PEI_ERROR(PeiServices, Status);
+
+ return EFI_SUCCESS;
+}
+
+//**********************************************************************
+//**********************************************************************
+//** **
+//** (C)Copyright 1985-2014, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//**********************************************************************
+//********************************************************************** \ No newline at end of file
diff --git a/Core/EM/SMBIOS/SmbiosPeim/SmbiosPeim.cif b/Core/EM/SMBIOS/SmbiosPeim/SmbiosPeim.cif
new file mode 100644
index 0000000..d13b0a1
--- /dev/null
+++ b/Core/EM/SMBIOS/SmbiosPeim/SmbiosPeim.cif
@@ -0,0 +1,11 @@
+<component>
+ name = "SmbiosPeim"
+ category = ModulePart
+ LocalRoot = "Core\EM\SMBIOS\SmbiosPeim"
+ RefName = "SmbiosPeim"
+[files]
+"SmbiosPeim.sdl"
+"SmbiosPeim.mak"
+"SmbiosPeim.dxs"
+"SmbiosPei.c"
+<endComponent>
diff --git a/Core/EM/SMBIOS/SmbiosPeim/SmbiosPeim.dxs b/Core/EM/SMBIOS/SmbiosPeim/SmbiosPeim.dxs
new file mode 100644
index 0000000..c769128
--- /dev/null
+++ b/Core/EM/SMBIOS/SmbiosPeim/SmbiosPeim.dxs
@@ -0,0 +1,66 @@
+//**********************************************************************//
+//**********************************************************************//
+//** **//
+//** (C)Copyright 1985-2014, American Megatrends, Inc. **//
+//** **//
+//** All Rights Reserved. **//
+//** **//
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **//
+//** **//
+//** Phone: (770)-246-8600 **//
+//** **//
+//**********************************************************************//
+//**********************************************************************//
+
+//**********************************************************************//
+// $Header: /Alaska/SOURCE/Modules/SMBIOS/SmbiosPeim/SmbiosPeim.dxs 1 5/27/14 1:44p Davidd $
+//
+// $Revision: 1 $
+//
+// $Date: 5/27/14 1:44p $
+//**********************************************************************//
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/SMBIOS/SmbiosPeim/SmbiosPeim.dxs $
+//
+// 1 5/27/14 1:44p Davidd
+// [TAG] EIP103526
+// [Category] Improvement
+// [Files] SmbiosPeim.cif
+// SmbiosPeim.sdl
+// SmbiosPeim.mak
+// SmbiosPeim.dxs
+// SmbiosPei.c
+//
+// 1 4/29/14 4:44p Davidd
+// [TAG] EIP103526
+// [Category] Improvement
+// [Description] We should update Wake-up Type in SMBIOS type 1
+// dynamically
+// [Files] Core\EM\SMBios\SmbiosPeim\SmbiosPeim.cif
+// Core\EM\SMBios\SmbiosPeim\SmbiosPeim.sdl
+// Core\EM\SMBios\SmbiosPeim\SmbiosPeim.mak
+// Core\EM\SMBios\SmbiosPeim\SmbiosPeim.dxs
+// Core\EM\SMBios\SmbiosPeim\SmbiosPei.c
+//
+//**********************************************************************//
+
+#include "ppi\ReadOnlyVariable2.h"
+
+DEPENDENCY_START
+ EFI_PEI_READ_ONLY_VARIABLE2_PPI_GUID
+DEPENDENCY_END
+
+//**********************************************************************//
+//**********************************************************************//
+//** **//
+//** (C)Copyright 1985-2014, American Megatrends, Inc. **//
+//** **//
+//** All Rights Reserved. **//
+//** **//
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **//
+//** **//
+//** Phone: (770)-246-8600 **//
+//** **//
+//**********************************************************************//
+//**********************************************************************//
diff --git a/Core/EM/SMBIOS/SmbiosPeim/SmbiosPeim.mak b/Core/EM/SMBIOS/SmbiosPeim/SmbiosPeim.mak
new file mode 100644
index 0000000..e73289c
--- /dev/null
+++ b/Core/EM/SMBIOS/SmbiosPeim/SmbiosPeim.mak
@@ -0,0 +1,89 @@
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (C)Copyright 1985-2010, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#**********************************************************************
+#**********************************************************************
+
+#**********************************************************************
+# $Header: /Alaska/SOURCE/Modules/SMBIOS/SmbiosPeim/SmbiosPeim.mak 1 5/27/14 1:44p Davidd $
+#
+# $Revision: 1 $
+#
+# $Date: 5/27/14 1:44p $
+#**********************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/SMBIOS/SmbiosPeim/SmbiosPeim.mak $
+#
+# 1 5/27/14 1:44p Davidd
+# [TAG] EIP103526
+# [Category] Improvement
+# [Files] SmbiosPeim.cif
+# SmbiosPeim.sdl
+# SmbiosPeim.mak
+# SmbiosPeim.dxs
+# SmbiosPei.c
+#
+# 1 4/29/14 4:44p Davidd
+# [TAG] EIP103526
+# [Category] Improvement
+# [Description] We should update Wake-up Type in SMBIOS type 1
+# dynamically
+# [Files] Core\EM\SMBios\SmbiosPeim\SmbiosPeim.cif
+# Core\EM\SMBios\SmbiosPeim\SmbiosPeim.sdl
+# Core\EM\SMBios\SmbiosPeim\SmbiosPeim.mak
+# Core\EM\SMBios\SmbiosPeim\SmbiosPeim.dxs
+# Core\EM\SMBios\SmbiosPeim\SmbiosPei.c
+#
+# 6 1/13/10 2:13p Felixp
+#
+#**********************************************************************
+#<AMI_FHDR_START>
+#
+# Name: <SmbiosPeim>.mak
+#
+# Description:
+#
+#<AMI_FHDR_END>
+#**********************************************************************
+all : SmbiosPeim
+
+SmbiosPeim : $(BUILD_DIR)\SmbiosPeim.mak SmbiosPeimBin
+
+$(BUILD_DIR)\SmbiosPeim.mak : $(SMBIOS_PEIM_DIR)\$(@B).cif $(SMBIOS_PEIM_DIR)\$(@B).mak $(BUILD_RULES)
+ $(CIF2MAK) $(SMBIOS_PEIM_DIR)\$(@B).cif $(CIF2MAK_DEFAULTS)
+
+SMBIOS_PEIM_OBJECTS = $$(BUILD_DIR)\$(SMBIOS_PEIM_DIR)\SmbiosPei.obj
+
+SmbiosPeimBin : $(AMIPEILIB) $(AMICSPLib)
+ $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\SmbiosPeim.mak all\
+ NAME=SmbiosPeim\
+ OBJECTS="$(SMBIOS_PEIM_OBJECTS)" \
+ GUID=AC836A8E-B69A-470b-BECF-912A01B794F4\
+ ENTRY_POINT=SmbiosPeiEntryPoint\
+ DEPEX1=$(SMBIOS_PEIM_DIR)\SmbiosPeim.dxs DEPEX1_TYPE=EFI_SECTION_PEI_DEPEX \
+ TYPE=PEIM \
+ COMPRESS=0
+
+#**********************************************************************
+#**********************************************************************
+#** **
+#** (C)Copyright 1985-2010, American Megatrends, Inc. **
+#** **
+#** All Rights Reserved. **
+#** **
+#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+#** **
+#** Phone: (770)-246-8600 **
+#** **
+#**********************************************************************
+#********************************************************************** \ No newline at end of file
diff --git a/Core/EM/SMBIOS/SmbiosPeim/SmbiosPeim.sdl b/Core/EM/SMBIOS/SmbiosPeim/SmbiosPeim.sdl
new file mode 100644
index 0000000..d8ba7cc
--- /dev/null
+++ b/Core/EM/SMBIOS/SmbiosPeim/SmbiosPeim.sdl
@@ -0,0 +1,32 @@
+TOKEN
+ Name = "SmbiosPeim_SUPPORT"
+ Value = "1"
+ Help = "Main switch to enable SmbiosPeim support in Project"
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ Master = Yes
+ Token = "SB_WAKEUP_TYPE_FN" "=" "1"
+End
+
+PATH
+ Name = "SMBIOS_PEIM_DIR"
+End
+
+MODULE
+ Help = "Includes SmbiosPeim.mak to Project"
+ File = "SmbiosPeim.mak"
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\SmbiosPeim.ffs"
+ Parent = "FV_BB"
+ InvokeOrder = AfterParent
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\SmbiosPeim.ffs"
+ Parent = "FT_FV_BB"
+ InvokeOrder = AfterParent
+ Token = "FtRecovery_SUPPORT" "=" "1"
+End \ No newline at end of file