summaryrefslogtreecommitdiff
path: root/Chipset/eM/ME/MEUD/MeFwCapsule
diff options
context:
space:
mode:
Diffstat (limited to 'Chipset/eM/ME/MEUD/MeFwCapsule')
-rw-r--r--Chipset/eM/ME/MEUD/MeFwCapsule/MeFwCapsule.cif11
-rw-r--r--Chipset/eM/ME/MEUD/MeFwCapsule/MeFwCapsule.mak348
-rw-r--r--Chipset/eM/ME/MEUD/MeFwCapsule/MeFwCapsule.sdl115
-rw-r--r--Chipset/eM/ME/MEUD/MeFwCapsule/MeFwCapsulePei.c185
-rw-r--r--Chipset/eM/ME/MEUD/MeFwCapsule/MeFwCapsulePei.dxs3
5 files changed, 662 insertions, 0 deletions
diff --git a/Chipset/eM/ME/MEUD/MeFwCapsule/MeFwCapsule.cif b/Chipset/eM/ME/MEUD/MeFwCapsule/MeFwCapsule.cif
new file mode 100644
index 0000000..1858b65
--- /dev/null
+++ b/Chipset/eM/ME/MEUD/MeFwCapsule/MeFwCapsule.cif
@@ -0,0 +1,11 @@
+<component>
+ name = "MeFwCapsule"
+ category = ModulePart
+ LocalRoot = "\Chipset\eM\ME\MEUD\MeFwCapsule\"
+ RefName = "MeFwCapsule"
+[files]
+"MeFwCapsule.sdl"
+"MeFwCapsule.mak"
+"MeFwCapsulePei.c"
+"MeFwCapsulePei.dxs"
+<endComponent> \ No newline at end of file
diff --git a/Chipset/eM/ME/MEUD/MeFwCapsule/MeFwCapsule.mak b/Chipset/eM/ME/MEUD/MeFwCapsule/MeFwCapsule.mak
new file mode 100644
index 0000000..f605eda
--- /dev/null
+++ b/Chipset/eM/ME/MEUD/MeFwCapsule/MeFwCapsule.mak
@@ -0,0 +1,348 @@
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (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/OFBD Intel ME Update/CSP_MEUD/ME80/MeFwCapsule/MeFwCapsule.mak 3 6/03/15 7:22a Tristinchou $
+#
+# $Revision: 3 $
+#
+# $Date: 6/03/15 7:22a $
+#**********************************************************************
+# Revision History
+# ----------------
+# $Log: /Alaska/SOURCE/Modules/OFBD Intel ME Update/CSP_MEUD/ME80/MeFwCapsule/MeFwCapsule.mak $(BUILD_DIR)\MeFwCapsulePei.mak MeFwCapsulePeiBin
+#
+# 3 6/03/15 7:22a Tristinchou
+# [TAG] EIPNone
+# [Category] Improvement
+# [Description] Fix ME update capsule can't be generated.
+#
+# 2 5/14/15 5:08a Tristinchou
+#
+# 1 5/14/15 4:24a Tristinchou
+# [TAG] EIP215437
+# [Category] New Feature
+# [Description] ME capsule update support
+# [Files] MeFwCapsule.cif
+# MeFwCapsule.sdl
+# MeFwCapsule.mak
+# MeFwCapsulePei.c
+# MeFwCapsulePei.dxs
+#
+#**********************************************************************
+#<AMI_FHDR_START>
+#
+# Name:
+#
+# Description:
+#
+#<AMI_FHDR_END>
+#**********************************************************************
+all : MeFwCapsulePei MeFwCapsule
+
+MeFwCapsulePei : $(BUILD_DIR)\MeFwCapsulePei.mak MeFwCapsulePeiBin
+
+MeFwCapsulePei_OBJ = \
+ $(BUILD_DIR)\$(MeFwCapsule_DIR)\MeFwCapsulePei.obj
+
+$(BUILD_DIR)\MeFwCapsulePei.mak : $(MeFwCapsule_DIR)\MeFwCapsule.mak $(MeFwCapsule_DIR)\MeFwCapsule.cif $(BUILD_RULES)
+ $(CIF2MAK) $(MeFwCapsule_DIR)\MeFwCapsule.cif $(CIF2MAK_DEFAULTS)
+
+MeFwCapsulePeiBin : $(AMIPEILIB)
+ $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS) \
+ /f $(BUILD_DIR)\MeFwCapsulePei.mak all \
+ NAME=MeFwCapsulePei \
+ MAKEFILE=$(BUILD_DIR)\MeFwCapsulePei.mak \
+ GUID=FD27652D-F758-4EFC-B1A9-283EFE51F4E9 \
+ ENTRY_POINT=MeFwCapsulePeiEntry \
+ OBJECTS="$(MeFwCapsulePei_OBJ)" \
+ DEPEX1="$(MeFwCapsule_DIR)\MeFwCapsulePei.dxs" DEPEX1_TYPE=EFI_SECTION_PEI_DEPEX \
+ TYPE=PEIM \
+ COMPRESS=0\
+
+MeFwCapsule : MeFwExt MeFwCapsuleHdr MeFwCapFid MeFwVer MeFwLayout MeFwRegion MeFwFv
+
+MeFwExt : $(BUILD_DIR)\MeFwExt.ffs
+
+$(BUILD_DIR)\MeFwExt.obj: $(BUILD_DIR)\MeFwCapsule.mak
+ $(SILENT)copy << $(BUILD_DIR)\MeFwExt.c > NUL
+#include <EFI.h>
+
+#define ME_CAPSULE_GUID \
+ { 0x9F8B1DEF, 0xB62B, 0x45F3, 0x82, 0x82, 0xBF, 0xD7, 0xEA, 0x19, 0x80, 0x1B}
+
+static EFI_GUID MeCapsuleGuid = ME_CAPSULE_GUID;
+static UINT32 Length = 0x14;
+static UINT32 Pad = 0xFFFFFFFF;
+<<KEEP
+ $(CC) /Fo$@ $(CFLAGS) $(BUILD_DIR)\MeFwExt.c
+
+$(BUILD_DIR)\MeFwExt.ffs : $(BUILD_DIR)\MeFwExt.obj
+ $(MAKE) /$(MAKEFLAGS) EXT_OBJS= $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\MeFwCapsule.mak bin\
+ NAME=MeFwExt OBJECTS=$(BUILD_DIR)\MeFwExt.obj\
+ MAKEFILE=$(BUILD_DIR)\MeFwCapsule.mak \
+ TYPE=BINARY
+ $(MAKE) /f Core\FFS.mak \
+ BUILD_DIR=$(BUILD_DIR) \
+ GUID=FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF \
+ TYPE=EFI_FV_FILETYPE_RAW FFS_CHECKSUM=0\
+ RAWFILE=$(BUILD_DIR)\MeFwExt.bin\
+ FFSFILE=$@ COMPRESS=0 NAME=$(@B)
+
+#---------------------------------------------------------------------------
+# Generic MAK dependencies
+#---------------------------------------------------------------------------
+$(BUILD_DIR)\MeFwCapsule.mak : $(MeFwCapsule_DIR)\MeFwCapsule.mak $(MeFwCapsule_DIR)\MeFwCapsule.cif $(BUILD_RULES)
+ $(CIF2MAK) $(MeFwCapsule_DIR)\MeFwCapsule.cif $(CIF2MAK_DEFAULTS)
+
+#---------------------------------------------------------------------------
+# Generic GUID defines. Aptio Tools must support these GUIDs
+#---------------------------------------------------------------------------
+#GUID used to identify FW Capsule Hdr FFS file within the Firmware Volume.
+FWCAPSULE_FFS_GUID = 414D94AD-998D-47D2-BFCD-4E882241DE32
+#Section GUID used to identify FW Capsule Hdr section within FwCap FFS file.
+FWCAPSULE_FFS_SECTION_GUID = 5A88641B-BBB9-4AA6-80F7-498AE407C31F
+
+MeFwCapsuleHdr : $(BUILD_DIR)\MeFwCapsule.mak $(BUILD_DIR)\MeFwCapsuleHdr.ffs
+
+$(BUILD_DIR)\MeFwCapsuleHdr.obj: $(BUILD_DIR)\MeFwCapsule.mak
+ $(SILENT)copy << $(BUILD_DIR)\MeFwCapsuleHdr.c > NUL
+#include <AmiCertificate.h>
+#pragma pack(1)
+APTIO_FW_CAPSULE_HEADER dummyHdr =
+ { { APTIO_FW_CAPSULE_GUID,
+ $(FWCAPSULE_MAX_HDR_SIZE),
+ CAPSULE_FLAGS_PERSIST_ACROSS_RESET |
+ CAPSULE_FLAGS_FWCERTBLOCK_VALID, // 1 - sig is invalid
+ $(FWCAPSULE_MAX_HDR_SIZE)},
+ $(FWCAPSULE_MAX_HDR_SIZE), // Rom Offs
+ sizeof(APTIO_FW_CAPSULE_HEADER) // RomLayout Offs
+ };
+char pad[$(FWCAPSULE_MAX_HDR_SIZE)-sizeof(APTIO_FW_CAPSULE_HEADER)] = {0x55, 0xAA};
+<<KEEP
+ $(CC) /Fo$@ $(CFLAGS) $(BUILD_DIR)\MeFwCapsuleHdr.c
+
+$(BUILD_DIR)\MeFwCapsuleHdr.ffs : $(BUILD_DIR)\MeFwCapsuleHdr.obj $(BUILD_DIR)\MeFwCapsule.mak
+ $(MAKE) /$(MAKEFLAGS) EXT_OBJS= $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\MeFwCapsule.mak bin\
+ NAME=MeFwCapsuleHdr OBJECTS=$(BUILD_DIR)\MeFwCapsuleHdr.obj\
+ MAKEFILE=$(BUILD_DIR)\MeFwCapsule.mak \
+ TYPE=BINARY
+ $(MAKE) /f Core\FFS.mak \
+ BUILD_DIR=$(BUILD_DIR) \
+ GUID=$(FWCAPSULE_FFS_GUID) \
+ TYPE=EFI_FV_FILETYPE_FREEFORM FFS_CHECKSUM=0\
+ SECTION_GUID=$(FWCAPSULE_FFS_SECTION_GUID) \
+ RESOURCE=$(BUILD_DIR)\MeFwCapsuleHdr.bin \
+ FFSFILE=$@ COMPRESS=0 NAME=$(@B)
+
+CSP_LIB_DIR = Core\CspLib
+
+MeFwCapFid : $(BUILD_DIR)\MeFwCapsule.mak $(BUILD_DIR)\MeFwCapFid.ffs
+
+$(BUILD_DIR)\MeFwCapFid.ffs : $(BUILD_DIR)\AMICspLib.mak
+ $(MAKE) /$(MAKEFLAGS) EXT_OBJS= $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\AMICspLib.mak bin\
+ NAME=MeFwCapFid OBJECTS=$(BUILD_DIR)\$(CSP_LIB_DIR)\Fid.obj\
+ MAKEFILE=$(BUILD_DIR)\AMICspLib.mak \
+ TYPE=BINARY
+ $(MAKE) /f Core\FFS.mak \
+ BUILD_DIR=$(BUILD_DIR) \
+ GUID=3FD1D3A2-99F7-420b-BC69-8BB1D492A332 \
+ TYPE=EFI_FV_FILETYPE_FREEFORM \
+ FFSFILE=$@ COMPRESS=0 NAME=$(@B)\
+ RESOURCE=$(BUILD_DIR)\Fid.bin \
+ SECTION_GUID=2EBE0275-6458-4AF9-91ED-D3F4EDB100AA \
+
+MeFwVer : $(BUILD_DIR)\MeFwCapsule.mak $(BUILD_DIR)\MeFwVer.ffs
+
+$(BUILD_DIR)\MeFwVer.obj: $(BUILD_DIR)\MeFwCapsule.mak
+ $(SILENT)copy << $(BUILD_DIR)\MeFwVer.c > NUL
+#include <EFI.h>
+#include <Token.h>
+
+typedef struct _FW_VERSION_NAME {
+ UINT32 MajorVersion : 16;
+ UINT32 MinorVersion : 16;
+ UINT32 HotfixVersion : 16;
+ UINT32 BuildVersion : 16;
+} ME_FW_UPD_VERSION;
+
+const ME_FW_UPD_VERSION MeFwVersion[] = ME_FW_IMAGE_VERSION;
+<<KEEP
+ $(CC) /Fo$@ $(CFLAGS) $(BUILD_DIR)\MeFwVer.c
+
+$(BUILD_DIR)\MeFwVer.ffs : $(BUILD_DIR)\MeFwVer.obj
+ $(MAKE) /$(MAKEFLAGS) EXT_OBJS= $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\MeFwCapsule.mak bin\
+ NAME=MeFwVer OBJECTS=$(BUILD_DIR)\MeFwVer.obj\
+ MAKEFILE=$(BUILD_DIR)\MeFwCapsule.mak \
+ TYPE=BINARY
+ $(MAKE) /f Core\FFS.mak \
+ BUILD_DIR=$(BUILD_DIR) \
+ GUID=0B4AE6BE-6DA6-4908-8A71-7E6A8A33B11C \
+ TYPE=EFI_FV_FILETYPE_FREEFORM FFS_CHECKSUM=0\
+ SECTION_GUID=6A6D576A-8F38-45E7-97C0-8ACD9E992674 \
+ RESOURCE=$(BUILD_DIR)\MeFwVer.bin \
+ FFSFILE=$@ COMPRESS=0 NAME=$(@B)
+
+MeFwLayout : $(BUILD_DIR)\MeFwCapsule.mak $(BUILD_DIR)\MeFwLayout.ffs
+
+$(BUILD_DIR)\MeFwLayout.obj: $(BUILD_DIR)\MeFwCapsule.mak
+ $(SILENT)copy << $(BUILD_DIR)\MeFwLayout.c > NUL
+#include <Token.h>
+#include <RomLayout.h>
+
+ROM_AREA MeLayout[2] = {\
+ { 0, 0, FV_MEFWCAP_SIZE, 0, 0x20A},
+ { 0, 0, 0, 0, 0}
+};
+<<KEEP
+ $(CC) /Fo$@ $(CFLAGS) $(BUILD_DIR)\MeFwLayout.c
+
+$(BUILD_DIR)\MeFwLayout.ffs : $(BUILD_DIR)\MeFwLayout.obj
+ $(MAKE) /$(MAKEFLAGS) EXT_OBJS= $(BUILD_DEFAULTS)\
+ /f $(BUILD_DIR)\MeFwCapsule.mak bin\
+ NAME=MeFwLayout OBJECTS=$(BUILD_DIR)\MeFwLayout.obj\
+ MAKEFILE=$(BUILD_DIR)\MeFwCapsule.mak \
+ TYPE=BINARY
+ $(MAKE) /f Core\FFS.mak \
+ BUILD_DIR=$(BUILD_DIR) \
+ GUID=0DCA793A-EA96-42d8-BD7B-DC7F684E38C1 \
+ TYPE=EFI_FV_FILETYPE_FREEFORM FFS_CHECKSUM=0\
+ SECTION_GUID=88A15A4F-977D-4682-B17C-DA1F316C1F32 \
+ RESOURCE=$(BUILD_DIR)\MeFwLayout.bin \
+ FFSFILE=$@ COMPRESS=0 NAME=$(@B)
+
+MeFwRegion : $(BUILD_DIR)\MeFwRegion.ffs
+
+$(BUILD_DIR)\MeFwRegion.ffs : $(ME_BIN_FILE)
+ $(MAKE) /f Core\FFS.mak \
+ BUILD_DIR=$(BUILD_DIR) \
+ GUID=DE90FFA8-B985-4575-AB8D-ADE52C362CA3 \
+ TYPE=EFI_FV_FILETYPE_FREEFORM \
+ BINFILE=$** FFSFILE=$@ COMPRESS=1 NAME=$(**B)
+
+MeFwFv : MeFwExt MeFwCapsuleHdr MeFwCapFid MeFwVer MeFwLayout MeFwRegion $(BUILD_DIR)\FWkey.ffs
+!IF EXIST ($(BUILD_DIR)\FV_MEFWCAP_VOL.inf )
+ del $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+!ENDIF
+ echo [options] >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+# This is a dummy base address to store logos in ROMHOLE.This address has no effect in ROMHOLE.
+ echo EFI_BASE_ADDRESS = $(FV_MEFWCAP_BASE) >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_FILE_NAME = $(BUILD_DIR)\FV_MEFWCAP_VOL.FV >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_NUM_BLOCKS = $(FV_MEFWCAP_NUMBER_OF_BLOCK) >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_BLOCK_SIZE = $(FV_MEFWCAP_BLOCK_SIZE) >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo IGNORE_COMPRESSION = FALSE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo [attributes] >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_READ_DISABLED_CAP = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_READ_ENABLED_CAP = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_READ_STATUS = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_WRITE_DISABLED_CAP = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_WRITE_ENABLED_CAP = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_WRITE_STATUS = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_LOCK_CAP = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_LOCK_STATUS = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_STICKY_WRITE = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_MEMORY_MAPPED = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_ERASE_POLARITY = 1 >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_ALIGNMENT_CAP = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_ALIGNMENT_2 = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_ALIGNMENT_4 = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_ALIGNMENT_8 = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_ALIGNMENT_16 = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_ALIGNMENT_32 = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_ALIGNMENT_64 = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_ALIGNMENT_128 = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_ALIGNMENT_256 = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_ALIGNMENT_512 = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_ALIGNMENT_1K = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_ALIGNMENT_2K = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_ALIGNMENT_4K = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_ALIGNMENT_8K = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_ALIGNMENT_16K = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_ALIGNMENT_32K = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_ALIGNMENT_64K = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_READ_LOCK_CAP = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_READ_LOCK_STATUS = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_WRITE_LOCK_CAP = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_WRITE_LOCK_STATUS = TRUE >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_FVB2_ALIGNMENT = 8 >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo [files] >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_FILE_NAME = $(BUILD_DIR)\MeFwExt__.pkg >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_FILE_NAME = $(BUILD_DIR)\MeFwCapsuleHdr__.pkg >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_FILE_NAME = $(BUILD_DIR)\MeFwCapFid__.pkg >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_FILE_NAME = $(BUILD_DIR)\MeFwVer__.pkg >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+ echo EFI_FILE_NAME = $(BUILD_DIR)\MeFwLayout__.pkg >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+!IF $(CREATE_FWCAPSULE) == 1
+ echo EFI_FILE_NAME = $(BUILD_DIR)\FWkey__.pkg >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+!ENDIF
+ echo EFI_FILE_NAME = $(BUILD_DIR)\MeFwRegion__.pkg >> $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+!IF $(PI_SPECIFICATION_VERSION) >= 0x00010000
+ $(FWBUILD) $(UNSIGNED_MEFW_CAPSULE) /f $(BUILD_DIR)\FV_MEFWCAP_VOL.inf /p 1.0
+!ELSE
+ $(FWBUILD) $(UNSIGNED_MEFW_CAPSULE) /f $(BUILD_DIR)\FV_MEFWCAP_VOL.inf
+!ENDIF
+ if exist $(BIOS_MEFW_CAPSULE_FILE) @del $(BIOS_MEFW_CAPSULE_FILE)
+ if exist $(MEFW_CAPSULE_FILE) @del $(MEFW_CAPSULE_FILE)
+
+End : CombineFwCapsule
+BUILD_ME : SignMeFwCapsule
+
+ME_FW_LAYOUT_EX = $(BUILD_DIR)\MeFwLayoutEx.bin
+
+CombineFwCapsule :
+ $(SILENT)copy /b $(UNSIGNED_BIOS_ROM)+$(UNSIGNED_MEFW_CAPSULE) $(UNSIGNED_MEFW_CAPSULE)2
+
+$(ME_FW_LAYOUT_EX) : $(UNSIGNED_MEFW_CAPSULE)
+ @if not exist $@ $(FWBUILD) $(UNSIGNED_MEFW_CAPSULE) /s /m $(ME_FW_LAYOUT_EX)
+
+!IF "$(MEFWUPDLCL_ON_SHARKBAY_PLATFORM)"=="0"
+SignMeFwCapsule : $(UNSIGNED_BIOS_ROM) $(ROM_LAYOUT_EX) MeFwFv $(ME_FW_LAYOUT_EX)
+!ELSE
+SignMeFwCapsule : $(UNSIGNED_BIOS_ROM) $(ROM_LAYOUT_EX) MeFwFv $(ME_FW_LAYOUT_EX) CombineFwCapsule
+!ENDIF
+ @echo ----------------------------------------------------------------
+ @echo ----- create Signed BIOS + ME FW Capsule : "$(BIOS_MEFW_CAPSULE_FILE)" ------
+ @echo ----------------------------------------------------------------
+!IF !EXIST($(FWpriv)) || ("$(FWCAPSULE_CERT_FORMAT)"=="0" && !EXIST($(FWrootKey)))
+ @echo ----- WARNING!!! Missing RSA private key FWpriv=$(FWpriv) to sign BIOS + ME FW Capsule image.
+!ELSE
+ $(CRYPTCON) -c2 -y -r$(ROM_LAYOUT_EX) -l$(FWCAPSULE_MAX_HDR_SIZE) -f $(UNSIGNED_MEFW_CAPSULE)2 -o $(UNSIGNED_MEFW_CAPSULE)2
+ $(CRYPTCON) $(CRYPTOCON_CMDLINE_MEFWCAP) -f $(UNSIGNED_MEFW_CAPSULE)2 -o $(BIOS_MEFW_CAPSULE_FILE)
+!ENDIF
+ @echo ----------------------------------------------------------------
+ @echo ----- create Signed ME FW Capsule : "$(MEFW_CAPSULE_FILE)" -------------
+ @echo ----------------------------------------------------------------
+!IF !EXIST($(FWpriv)) || ("$(FWCAPSULE_CERT_FORMAT)"=="0" && !EXIST($(FWrootKey)))
+ @echo ----- WARNING!!! Missing RSA private key FWpriv=$(FWpriv) to sign ME FW Capsule image.
+!ELSE
+ $(CRYPTCON) -c2 -y -r$(ME_FW_LAYOUT_EX) -l$(FWCAPSULE_MAX_HDR_SIZE) -f $(UNSIGNED_MEFW_CAPSULE) -o $(UNSIGNED_MEFW_CAPSULE).Sig
+ $(CRYPTCON) $(CRYPTOCON_CMDLINE_MEFWCAP) -f $(UNSIGNED_MEFW_CAPSULE).Sig -o $(MEFW_CAPSULE_FILE)
+!ENDIF
+
+#*************************************************************************
+#*************************************************************************
+#** **
+#** (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/Chipset/eM/ME/MEUD/MeFwCapsule/MeFwCapsule.sdl b/Chipset/eM/ME/MEUD/MeFwCapsule/MeFwCapsule.sdl
new file mode 100644
index 0000000..7ee2650
--- /dev/null
+++ b/Chipset/eM/ME/MEUD/MeFwCapsule/MeFwCapsule.sdl
@@ -0,0 +1,115 @@
+TOKEN
+ Name = MeFwCapsule_SUPPORT
+ Value = 1
+ TokenType = Boolean
+ TargetEQU = Yes
+ TargetMAK = Yes
+ Help = "Main switch to enable MeFwCapsule support in Project"
+ Master = Yes
+ Token = "MEFwUpdLcl_SUPPORT" "=" "1"
+End
+
+TOKEN
+ Name = "ME_BIN_FILE"
+ Value = "$(ROM_IMAGE_DIR)\ME\ME9.1_5M_Production.BIN"
+ TokenType = Expression
+ TargetH = Yes
+ TargetMAK = Yes
+End
+
+TOKEN
+ Name = "ME_FW_IMAGE_VERSION"
+ Value = "{9, 1, 25, 1005}"
+ TokenType = Expression
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "FV_MEFWCAP_SIZE"
+ Value = "0x400000"
+ TokenType = Integer
+ TargetH = Yes
+ TargetMAK = Yes
+End
+
+TOKEN
+ Name = "BIOS_MEFW_CAPSULE_FILE"
+ Value = "BIOSMEFW.CAP"
+ Help = "File name of the BIOS + ME FW image to be signed."
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+TOKEN
+ Name = "MEFW_CAPSULE_FILE"
+ Value = "MEFW.CAP"
+ Help = "File name of the ME FW image to be signed."
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+MODULE
+ Help = "Includes MeFwCapsule.mak to Project"
+ File = "MeFwCapsule.mak"
+End
+
+PATH
+ Name = "MeFwCapsule_DIR"
+End
+
+TOKEN
+ Name = "UNSIGNED_MEFW_CAPSULE"
+ Value = "$(BUILD_DIR)\FV_MEFWCAP.fv"
+ Help = "File name of the BIOS image to be signed."
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+TOKEN
+ Name = "CRYPTOCON_CMDLINE_MEFWCAP"
+ Value = "-c $(FWrootKey) -k $(FWpriv) -n -y -l $(FWCAPSULE_MAX_HDR_SIZE) -q -r2"
+ TokenType = Expression
+ TargetMAK = Yes
+End
+
+TOKEN
+ Name = "FV_MEFWCAP_BASE"
+ Value = "0xFFFFFFFF-$(FV_MEFWCAP_SIZE)+1"
+ Help = "Number of Block used for ROMHOLE"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "FV_MEFWCAP_BLOCK_SIZE"
+ Value = "0x1000"
+ Help = "Size of Block used for ROMHOLE"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "FV_MEFWCAP_NUMBER_OF_BLOCK"
+ Value = "$(FV_MEFWCAP_SIZE) / $(FV_MEFWCAP_BLOCK_SIZE)"
+ Help = "Number of Block used for ROMHOLE"
+ TokenType = Integer
+ TargetMAK = Yes
+ TargetH = Yes
+End
+
+TOKEN
+ Name = "FWCAPSULE_IMAGE_SIZE"
+ Value = "$(FLASH_SIZE)+$(FWCAPSULE_MAX_HDR_SIZE)+$(FV_MEFWCAP_SIZE)"
+ TokenType = Integer
+ TargetH = Yes
+ Token = "MeFwCapsule_SUPPORT" "=" "1"
+End
+
+ELINK
+ Name = "$(BUILD_DIR)\MeFwCapsulePei.ffs"
+ Parent = "FV_BB"
+ #Priority = 10
+ InvokeOrder = AfterParent
+End \ No newline at end of file
diff --git a/Chipset/eM/ME/MEUD/MeFwCapsule/MeFwCapsulePei.c b/Chipset/eM/ME/MEUD/MeFwCapsule/MeFwCapsulePei.c
new file mode 100644
index 0000000..db54c27
--- /dev/null
+++ b/Chipset/eM/ME/MEUD/MeFwCapsule/MeFwCapsulePei.c
@@ -0,0 +1,185 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2015, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+/** @file MeFwCapsulePei.c
+ ME FW Capsule Update Pei driver.
+**/
+//**********************************************************************
+//----------------------------------------------------------------------------
+// Includes
+// Statements that include other files
+#include <PEI.h>
+#include <AmiPeiLib.h>
+#include <FlashUpd.h>
+#include <Token.h>
+#include <PPI\NBPPI.h>
+#include <FlashUpd.h>
+#include <AmiHobs.h>
+//----------------------------------------------------------------------------
+// Function Externs
+EFI_GUID mFlashUpdBootModePpiGuid = EFI_PEI_BOOT_IN_FLASH_UPDATE_MODE_PEIM_PPI;
+EFI_GUID mAmiPeiBeforeMrcGuid = AMI_PEI_BEFORE_MRC_GUID;
+EFI_GUID mAmiCapsuleHobGuid = AMI_CAPSULE_HOB_GUID;
+//----------------------------------------------------------------------------
+// Local prototypes
+EFI_STATUS
+MeFwBootOnFlashUpdateNotify (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
+ IN VOID *NullPpi
+);
+EFI_STATUS
+MeFwBeforeMrcNotify (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
+ IN VOID *NullPpi
+);
+
+// PPI to be installed
+static
+EFI_PEI_NOTIFY_DESCRIPTOR
+MeFwBootOnFlashUpdateNotifyList[] = {
+ { EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | \
+ EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, \
+ &mFlashUpdBootModePpiGuid, MeFwBootOnFlashUpdateNotify },
+};
+
+static
+EFI_PEI_NOTIFY_DESCRIPTOR
+MeFwBeforeMrcNotifyList[] = {
+ { EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | \
+ EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
+ &mAmiPeiBeforeMrcGuid, MeFwBeforeMrcNotify }
+};
+
+//----------------------------------------------------------------------------
+// Local Variables
+
+//----------------------------------------------------------------------------
+// Function Definitions
+#define R_PCH_ACPI_PM1_STS 0x00
+#define B_PCH_ACPI_PM1_STS_WAK 0x8000
+#define R_PCH_ACPI_PM1_CNT 0x04
+#define B_PCH_ACPI_PM1_CNT_SLP_TYP 0x00001C00
+#define R_PCH_RST_CNT 0xCF9
+#define V_PCH_RST_CNT_SOFTRESET 0x04
+#define V_PCH_RST_CNT_SOFTSTARTSTATE 0x00
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------
+// Procedure: MeFwBootOnFlashUpdateNotify
+//
+// Description:
+//
+// Input:
+//
+// Output:
+//
+// Returns:
+//
+//----------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS
+MeFwBootOnFlashUpdateNotify (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
+ IN VOID *NullPpi
+)
+{
+ VOID *p;
+
+ for ((*PeiServices)->GetHobList(PeiServices,&p); \
+ !(FindNextHobByGuid(&mAmiCapsuleHobGuid, &p)); ) {
+ // When the gFlashUpdBootModePpi is installed, bios identify the Capsule Guid
+ // either APTIO FW or Windows FW Capsule, so, we just check the Capsule Length
+ // for determine whether contains the ME FW.
+ if ((((AMI_CAPSULE_HOB*)p)->CapsuleLength != FWCAPSULE_IMAGE_SIZE) && \
+ (((AMI_CAPSULE_HOB*)p)->CapsuleLength != \
+ (FV_MEFWCAP_SIZE + FWCAPSULE_MAX_HDR_SIZE))) continue;
+ // Clear Wake Status (WAK_STS) and Sleep Type (SLP_TYP)
+ IoWrite16(PM_BASE_ADDRESS + R_PCH_ACPI_PM1_STS, B_PCH_ACPI_PM1_STS_WAK);
+ IoWrite16(PM_BASE_ADDRESS + R_PCH_ACPI_PM1_CNT, \
+ IoRead16(PM_BASE_ADDRESS + R_PCH_ACPI_PM1_CNT) & ~B_PCH_ACPI_PM1_CNT_SLP_TYP);
+ // Since, HECI interface not work if S3 resume path, to generate a Soft Reset
+ // to re-activate HECI.
+ IoWrite8(R_PCH_RST_CNT, V_PCH_RST_CNT_SOFTSTARTSTATE);
+ IoWrite8(R_PCH_RST_CNT, V_PCH_RST_CNT_SOFTRESET);
+ EFI_DEADLOOP()
+ }
+ return EFI_SUCCESS;
+}
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------
+// Procedure: MeFwBeforeMrcNotify
+//
+// Description:
+//
+// Input:
+//
+// Output:
+//
+// Returns:
+//
+//----------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS
+MeFwBeforeMrcNotify (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDescriptor,
+ IN VOID *NullPpi
+)
+{
+ EFI_STATUS Status;
+ EFI_BOOT_MODE BootMode;
+
+ Status = (*PeiServices)->GetBootMode (PeiServices, &BootMode);
+ if (EFI_ERROR(Status) || (BootMode != BOOT_ON_S3_RESUME)) return EFI_SUCCESS;
+ (*PeiServices)->NotifyPpi (PeiServices, MeFwBootOnFlashUpdateNotifyList);
+ return EFI_SUCCESS;
+}
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------
+// Procedure: MeFwCapsulePeiEntry
+//
+// Description:
+//
+// Input:
+//
+// Output:
+//
+// Returns:
+//
+//----------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS
+MeFwCapsulePeiEntry (
+ IN EFI_FFS_FILE_HEADER *FfsHeader,
+ IN EFI_PEI_SERVICES **PeiServices
+)
+{
+ (*PeiServices)->NotifyPpi (PeiServices, MeFwBeforeMrcNotifyList);
+ return EFI_SUCCESS;
+}
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2015, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
diff --git a/Chipset/eM/ME/MEUD/MeFwCapsule/MeFwCapsulePei.dxs b/Chipset/eM/ME/MEUD/MeFwCapsule/MeFwCapsulePei.dxs
new file mode 100644
index 0000000..16c6253
--- /dev/null
+++ b/Chipset/eM/ME/MEUD/MeFwCapsule/MeFwCapsulePei.dxs
@@ -0,0 +1,3 @@
+DEPENDENCY_START
+ TRUE
+DEPENDENCY_END \ No newline at end of file