From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.20; helo=mga02.intel.com; envelope-from=star.zeng@intel.com; receiver=edk2-devel@lists.01.org Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 9662221D046AB for ; Mon, 25 Sep 2017 03:11:26 -0700 (PDT) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Sep 2017 03:14:37 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.42,435,1500966000"; d="scan'208";a="1175513494" Received: from shwdeopenpsi068.ccr.corp.intel.com ([10.239.9.31]) by orsmga001.jf.intel.com with ESMTP; 25 Sep 2017 03:14:35 -0700 From: Star Zeng To: edk2-devel@lists.01.org Cc: Star Zeng , Liming Gao Date: Mon, 25 Sep 2017 18:14:33 +0800 Message-Id: <1506334473-56524-1-git-send-email-star.zeng@intel.com> X-Mailer: git-send-email 2.7.0.windows.1 Subject: [PATCH] IntelFrameworkModulePkg FwVolDxe: Support FFS_ATTRIB_DATA_ALIGNMENT_2 X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 25 Sep 2017 10:11:26 -0000 Follow PI 1.6 spec to support FFS_ATTRIB_DATA_ALIGNMENT_2 for FFS alignment extended to support maximum 16MB. Cc: Liming Gao Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Star Zeng Note: This patch is to update IntelFrameworkModulePkg as a supplement of https://lists.01.org/pipermail/edk2-devel/2017-September/015165.html. --- .../Universal/FirmwareVolume/FwVolDxe/FwVolRead.c | 37 +++++++++++++------- .../Universal/FirmwareVolume/FwVolDxe/FwVolWrite.c | 39 ++++++++++++++++++++-- 2 files changed, 62 insertions(+), 14 deletions(-) diff --git a/IntelFrameworkModulePkg/Universal/FirmwareVolume/FwVolDxe/FwVolRead.c b/IntelFrameworkModulePkg/Universal/FirmwareVolume/FwVolDxe/FwVolRead.c index 0d9021914f33..987c92c16be3 100644 --- a/IntelFrameworkModulePkg/Universal/FirmwareVolume/FwVolDxe/FwVolRead.c +++ b/IntelFrameworkModulePkg/Universal/FirmwareVolume/FwVolDxe/FwVolRead.c @@ -1,7 +1,7 @@ /** @file Implements functions to read firmware file. - Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.
+ Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions @@ -17,18 +17,27 @@ #include "FwVolDriver.h" /** -Required Alignment Alignment Value in FFS Alignment Value in -(bytes) Attributes Field Firmware Volume Interfaces -1 0 0 -16 1 4 -128 2 7 -512 3 9 -1 KB 4 10 -4 KB 5 12 -32 KB 6 15 -64 KB 7 16 +Required Alignment Alignment Value in FFS FFS_ATTRIB_DATA_ALIGNMENT2 Alignment Value in +(bytes) Attributes Field in FFS Attributes Field Firmware Volume Interfaces +1 0 0 0 +16 1 0 4 +128 2 0 7 +512 3 0 9 +1 KB 4 0 10 +4 KB 5 0 12 +32 KB 6 0 15 +64 KB 7 0 16 +128 KB 0 1 17 +256 KB 1 1 18 +512 KB 2 1 19 +1 MB 3 1 20 +2 MB 4 1 21 +4 MB 5 1 22 +8 MB 6 1 23 +16 MB 7 1 24 **/ UINT8 mFvAttributes[] = {0, 4, 7, 9, 10, 12, 15, 16}; +UINT8 mFvAttributes2[] = {17, 18, 19, 20, 21, 22, 23, 24}; /** Convert the FFS File Attributes to FV File Attributes. @@ -49,7 +58,11 @@ FfsAttributes2FvFileAttributes ( DataAlignment = (UINT8) ((FfsAttributes & FFS_ATTRIB_DATA_ALIGNMENT) >> 3); ASSERT (DataAlignment < 8); - FileAttribute = (EFI_FV_FILE_ATTRIBUTES) mFvAttributes[DataAlignment]; + if ((FfsAttributes & FFS_ATTRIB_DATA_ALIGNMENT_2) != 0) { + FileAttribute = (EFI_FV_FILE_ATTRIBUTES) mFvAttributes2[DataAlignment]; + } else { + FileAttribute = (EFI_FV_FILE_ATTRIBUTES) mFvAttributes[DataAlignment]; + } if ((FfsAttributes & FFS_ATTRIB_FIXED) == FFS_ATTRIB_FIXED) { FileAttribute |= EFI_FV_FILE_ATTRIB_FIXED; diff --git a/IntelFrameworkModulePkg/Universal/FirmwareVolume/FwVolDxe/FwVolWrite.c b/IntelFrameworkModulePkg/Universal/FirmwareVolume/FwVolDxe/FwVolWrite.c index 99385e0f579b..e95b75326c6e 100644 --- a/IntelFrameworkModulePkg/Universal/FirmwareVolume/FwVolDxe/FwVolWrite.c +++ b/IntelFrameworkModulePkg/Universal/FirmwareVolume/FwVolDxe/FwVolWrite.c @@ -1,7 +1,7 @@ /** @file Implements write firmware file. - Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.
+ Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions @@ -202,9 +202,11 @@ FvFileAttrib2FfsFileAttrib ( { UINT8 FvFileAlignment; UINT8 FfsFileAlignment; + UINT8 FfsFileAlignment2; FvFileAlignment = (UINT8) (FvFileAttrib & EFI_FV_FILE_ATTRIB_ALIGNMENT); FfsFileAlignment = 0; + FfsFileAlignment2 = 0; switch (FvFileAlignment) { case 0: @@ -289,9 +291,42 @@ FvFileAttrib2FfsFileAttrib ( case 16: FfsFileAlignment = 7; break; + + case 17: + FfsFileAlignment = 0; + FfsFileAlignment2 = 1; + break; + case 18: + FfsFileAlignment = 1; + FfsFileAlignment2 = 1; + break; + case 19: + FfsFileAlignment = 2; + FfsFileAlignment2 = 1; + break; + case 20: + FfsFileAlignment = 3; + FfsFileAlignment2 = 1; + break; + case 21: + FfsFileAlignment = 4; + FfsFileAlignment2 = 1; + break; + case 22: + FfsFileAlignment = 5; + FfsFileAlignment2 = 1; + break; + case 23: + FfsFileAlignment = 6; + FfsFileAlignment2 = 1; + break; + case 24: + FfsFileAlignment = 7; + FfsFileAlignment2 = 1; + break; } - *FfsFileAttrib = (UINT8) (FfsFileAlignment << 3); + *FfsFileAttrib = (UINT8) ((FfsFileAlignment << 3) | (FfsFileAlignment2 << 1)); return ; } -- 2.7.0.windows.1