From patchwork Tue Jul 12 17:04:33 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laszlo Ersek X-Patchwork-Id: 71874 Delivered-To: patch@linaro.org Received: by 10.140.29.52 with SMTP id a49csp578109qga; Tue, 12 Jul 2016 10:04:44 -0700 (PDT) X-Received: by 10.98.71.91 with SMTP id u88mr3586475pfa.145.1468343084567; Tue, 12 Jul 2016 10:04:44 -0700 (PDT) Return-Path: Received: from ml01.01.org (ml01.01.org. [2001:19d0:306:5::1]) by mx.google.com with ESMTPS id ud9si4448869pab.247.2016.07.12.10.04.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 12 Jul 2016 10:04:44 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of edk2-devel-bounces@lists.01.org designates 2001:19d0:306:5::1 as permitted sender) client-ip=2001:19d0:306:5::1; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of edk2-devel-bounces@lists.01.org designates 2001:19d0:306:5::1 as permitted sender) smtp.mailfrom=edk2-devel-bounces@lists.01.org Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 349251A1EE9; Tue, 12 Jul 2016 10:05:29 -0700 (PDT) X-Original-To: edk2-devel@ml01.01.org Delivered-To: edk2-devel@ml01.01.org Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) (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 2FF001A1EE6 for ; Tue, 12 Jul 2016 10:05:27 -0700 (PDT) Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B7693C3014; Tue, 12 Jul 2016 17:04:41 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-116-96.phx2.redhat.com [10.3.116.96]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u6CH4cxv021880; Tue, 12 Jul 2016 13:04:40 -0400 From: Laszlo Ersek To: edk2-devel-01 Date: Tue, 12 Jul 2016 19:04:33 +0200 Message-Id: <1468343074-29596-2-git-send-email-lersek@redhat.com> In-Reply-To: <1468343074-29596-1-git-send-email-lersek@redhat.com> References: <1468343074-29596-1-git-send-email-lersek@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Tue, 12 Jul 2016 17:04:41 +0000 (UTC) Subject: [edk2] [PATCH v2 1/2] OvmfPkg: add a Name GUID to each Firmware Volume X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Ruiyu Ni , Jordan Justen MIME-Version: 1.0 Errors-To: edk2-devel-bounces@lists.01.org Sender: "edk2-devel" The FDF spec mentions the FvNameGuid statement for [FV.xxxx] sections, but the detailed description can be found in Volume 3 of the Platform Init spec (which is at 1.4a currently). Adding an FvNameGuid statement to [FV.xxx] has the following effects (implemented by "BaseTools/Source/C/GenFv/GenFvInternalLib.c"): - The EFI_FIRMWARE_VOLUME_HEADER.ExtHeaderOffset field is set to a nonzero value, pointing after EFI_FIRMWARE_VOLUME_HEADER itself (although not directly, see below). - An EFI_FIRMWARE_VOLUME_EXT_HEADER object is created at the pointed-to address. This object is not followed by any EFI_FIRMWARE_VOLUME_EXT_ENTRY (= extension) entries, so it only specifies the Name GUID for the firmware volume. The EFI_FIRMWARE_VOLUME_EXT_HEADER for each firmware volume can be found in the Build directory as a separate file (20 bytes in size): Build/Ovmf*/*_GCC*/FV/*.ext - The new data consume 48 bytes in the following volumes: SECFV, FVMAIN_COMPACT, DXEFV. They comprise: - 16 padding bytes, - EFI_FFS_FILE_HEADER2 (8 bytes in total: no Name and ExtendedSize fields, and Type=EFI_FV_FILETYPE_FFS_PAD), - EFI_FIRMWARE_VOLUME_EXT_HEADER (20 bytes, see above), - 4 padding bytes. (The initial 16 padding bytes and the EFI_FFS_FILE_HEADER2 structure are the reason why EFI_FIRMWARE_VOLUME_HEADER.ExtHeaderOffset does not point immediately past EFI_FIRMWARE_VOLUME_HEADER.) The sizes of the firmware volumes don't change, only their internal usages grow by 48 bytes. I verified that the statements and calculations in "OvmfPkg/DecomprScratchEnd.fdf.inc" are unaffected and remain valid. - The new data consume 0 bytes in PEIFV. This is because PEIFV has enough internal padding at the moment to accomodate the above structures without a growth in usage. In the future, firmware volumes can be identified by Name GUID (Fv(...) device path nodes), rather than memory location (MemoryMapped(...) device path nodes). This is supposed to improve stability for persistent device paths that refer to FFS files; for example, UEFI boot options. Cc: Jordan Justen Cc: Ruiyu Ni Suggested-by: Ruiyu Ni Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek --- Notes: v2: - new in v2 [Ray] OvmfPkg/OvmfPkgIa32.fdf | 4 ++++ OvmfPkg/OvmfPkgIa32X64.fdf | 4 ++++ OvmfPkg/OvmfPkgX64.fdf | 4 ++++ 3 files changed, 12 insertions(+) -- 1.8.3.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel diff --git a/OvmfPkg/OvmfPkgIa32.fdf b/OvmfPkg/OvmfPkgIa32.fdf index 59a4024ff026..664a035f181d 100644 --- a/OvmfPkg/OvmfPkgIa32.fdf +++ b/OvmfPkg/OvmfPkgIa32.fdf @@ -98,6 +98,7 @@ [FD.MEMFD] ################################################################################ [FV.SECFV] +FvNameGuid = 763BED0D-DE9F-48F5-81F1-3E90E1B1A015 BlockSize = 0x1000 FvAlignment = 16 ERASE_POLARITY = 1 @@ -128,6 +129,7 @@ [FV.SECFV] ################################################################################ [FV.PEIFV] +FvNameGuid = 6938079B-B503-4E3D-9D24-B28337A25806 BlockSize = 0x10000 FvAlignment = 16 ERASE_POLARITY = 1 @@ -166,6 +168,7 @@ [FV.PEIFV] ################################################################################ [FV.DXEFV] +FvNameGuid = 7CB8BDC9-F8EB-4F34-AAEA-3EE4AF6516A1 BlockSize = 0x10000 FvAlignment = 16 ERASE_POLARITY = 1 @@ -379,6 +382,7 @@ [FV.DXEFV] ################################################################################ [FV.FVMAIN_COMPACT] +FvNameGuid = 48DB5E17-707C-472D-91CD-1613E7EF51B0 FvAlignment = 16 ERASE_POLARITY = 1 MEMORY_MAPPED = TRUE diff --git a/OvmfPkg/OvmfPkgIa32X64.fdf b/OvmfPkg/OvmfPkgIa32X64.fdf index c6167a4176af..0f5fe51d7ba2 100644 --- a/OvmfPkg/OvmfPkgIa32X64.fdf +++ b/OvmfPkg/OvmfPkgIa32X64.fdf @@ -98,6 +98,7 @@ [FD.MEMFD] ################################################################################ [FV.SECFV] +FvNameGuid = 763BED0D-DE9F-48F5-81F1-3E90E1B1A015 BlockSize = 0x1000 FvAlignment = 16 ERASE_POLARITY = 1 @@ -128,6 +129,7 @@ [FV.SECFV] ################################################################################ [FV.PEIFV] +FvNameGuid = 6938079B-B503-4E3D-9D24-B28337A25806 BlockSize = 0x10000 FvAlignment = 16 ERASE_POLARITY = 1 @@ -166,6 +168,7 @@ [FV.PEIFV] ################################################################################ [FV.DXEFV] +FvNameGuid = 7CB8BDC9-F8EB-4F34-AAEA-3EE4AF6516A1 BlockSize = 0x10000 FvAlignment = 16 ERASE_POLARITY = 1 @@ -379,6 +382,7 @@ [FV.DXEFV] ################################################################################ [FV.FVMAIN_COMPACT] +FvNameGuid = 48DB5E17-707C-472D-91CD-1613E7EF51B0 FvAlignment = 16 ERASE_POLARITY = 1 MEMORY_MAPPED = TRUE diff --git a/OvmfPkg/OvmfPkgX64.fdf b/OvmfPkg/OvmfPkgX64.fdf index 30b0c2ba3fc8..6e468a8ab066 100644 --- a/OvmfPkg/OvmfPkgX64.fdf +++ b/OvmfPkg/OvmfPkgX64.fdf @@ -98,6 +98,7 @@ [FD.MEMFD] ################################################################################ [FV.SECFV] +FvNameGuid = 763BED0D-DE9F-48F5-81F1-3E90E1B1A015 BlockSize = 0x1000 FvAlignment = 16 ERASE_POLARITY = 1 @@ -128,6 +129,7 @@ [FV.SECFV] ################################################################################ [FV.PEIFV] +FvNameGuid = 6938079B-B503-4E3D-9D24-B28337A25806 BlockSize = 0x10000 FvAlignment = 16 ERASE_POLARITY = 1 @@ -166,6 +168,7 @@ [FV.PEIFV] ################################################################################ [FV.DXEFV] +FvNameGuid = 7CB8BDC9-F8EB-4F34-AAEA-3EE4AF6516A1 BlockSize = 0x10000 FvAlignment = 16 ERASE_POLARITY = 1 @@ -379,6 +382,7 @@ [FV.DXEFV] ################################################################################ [FV.FVMAIN_COMPACT] +FvNameGuid = 48DB5E17-707C-472D-91CD-1613E7EF51B0 FvAlignment = 16 ERASE_POLARITY = 1 MEMORY_MAPPED = TRUE