From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by mx.groups.io with SMTP id smtpd.web12.1421.1570674078210162426 for ; Wed, 09 Oct 2019 19:21:18 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.20, mailfrom: ray.ni@intel.com) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 09 Oct 2019 19:21:17 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.67,278,1566889200"; d="scan'208";a="393883036" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga005.fm.intel.com with ESMTP; 09 Oct 2019 19:21:17 -0700 Received: from fmsmsx601.amr.corp.intel.com (10.18.126.81) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 9 Oct 2019 19:21:16 -0700 Received: from fmsmsx601.amr.corp.intel.com (10.18.126.81) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 9 Oct 2019 19:21:15 -0700 Received: from shsmsx153.ccr.corp.intel.com (10.239.6.53) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1713.5 via Frontend Transport; Wed, 9 Oct 2019 19:21:15 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.166]) by SHSMSX153.ccr.corp.intel.com ([10.239.6.53]) with mapi id 14.03.0439.000; Thu, 10 Oct 2019 10:21:06 +0800 From: "Ni, Ray" To: "Kubacki, Michael A" , "devel@edk2.groups.io" CC: "Chaganty, Rangasai V" Subject: Re: [edk2-platforms][PATCH V2 1/3] IntelSiliconPkg/FirmwareBootMediaLib: Add library Thread-Topic: [edk2-platforms][PATCH V2 1/3] IntelSiliconPkg/FirmwareBootMediaLib: Add library Thread-Index: AQHVetlIt3+6lSmi9E28m2zofQbn3KdSB+iQ///66wCAASgwEA== Date: Thu, 10 Oct 2019 02:21:05 +0000 Message-ID: <734D49CCEBEEF84792F5B80ED585239D5C3194C9@SHSMSX104.ccr.corp.intel.com> References: <20191004172924.20240-1-michael.a.kubacki@intel.com> <20191004172924.20240-2-michael.a.kubacki@intel.com> <734D49CCEBEEF84792F5B80ED585239D5C317BD9@SHSMSX104.ccr.corp.intel.com> In-Reply-To: Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: ray.ni@intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Comments below. > -----Original Message----- > From: Kubacki, Michael A > Sent: Thursday, October 10, 2019 12:34 AM > To: Ni, Ray ; devel@edk2.groups.io > Cc: Chaganty, Rangasai V > Subject: RE: [edk2-platforms][PATCH V2 1/3] > IntelSiliconPkg/FirmwareBootMediaLib: Add library >=20 > 1. DxeSmmFirmwareBootMediaLib could get the HOB like PEI for every > access. I considered this but it seems unnecessary since we have the > flexibility for phase-specific drivers that can have trivial optimizatio= ns like this. > Checking the HOB on every access would also constrain usage in > DXE_SMM_DRIVER and DXE_RUNTIME_DRIVER modules. Having single library instance can make platform DSC simpler. Because SMM and Runtime drivers are dispatched in BS phase, they can cache = the boot media type if the usage lasts to post-EndOfDxe or OS runtime. >=20 > 2. They are certainly not required, but in practice we've found code usag= e > tends to read better and be more concise with these APIs for simple > firmware boot media checks. The enum is provided for relatively rarer > scenarios where many possibilities need to be considered such as usage in= a > switch statement. I can see a case made in either direction. Let me know = if > you and Sai feel strongly about this. I prefer to use enum and GetType() API. Because if there is more boot media= type, there is no need to add a new library API like IsXXX(). Not sure if it's over design, I prefer to use GUID against enum. No strong = preference of using GUID in this case. Thanks, Ray >=20 > Thanks, > Michael >=20 > > -----Original Message----- > > From: Ni, Ray > > Sent: Wednesday, October 9, 2019 2:36 AM > > To: Kubacki, Michael A ; > > devel@edk2.groups.io > > Cc: Chaganty, Rangasai V > > Subject: RE: [edk2-platforms][PATCH V2 1/3] > > IntelSiliconPkg/FirmwareBootMediaLib: Add library > > > > Michael, > > Two comments: > > 1. The difference between PEI and DXE instances is DXE instance has a > > global variable caching the boot media type. Both get the type from > > HOB. So I am thinking how about simplifying the library to have only > > one instance which equals to PEI instance. That can also be used in DXE > phase. > > 2. With the definition of enum type FW_BOOT_MEDIA_TYPE and GetType() > > API, I feel the other several FirmwareBootMediaIsXXX() APIs are not > > very necessary. > > > > Thanks, > > Ray > > > > > -----Original Message----- > > > From: Kubacki, Michael A > > > Sent: Saturday, October 5, 2019 1:29 AM > > > To: devel@edk2.groups.io > > > Cc: Chaganty, Rangasai V ; Ni, Ray > > > > > > Subject: [edk2-platforms][PATCH V2 1/3] > > > IntelSiliconPkg/FirmwareBootMediaLib: Add library > > > > > > REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3D2229 > > > > > > Adds a new library that is used to make system initialization > > > decisions in the boot flow dependent upon firmware boot media. > > > Note that the firmware boot media is the storage media that the boot > > > firmware is stored on. It is not the OS storage media which may be > > > stored upon a different non-volatile storage device. > > > > > > Any Intel board, platform, or silicon code that must take action > > > conditionally based on the firmware boot media must use this library > > > API. > > > > > > Cc: Sai Chaganty > > > Cc: Ray Ni > > > Signed-off-by: Michael Kubacki > > > --- > > > Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec = | 8 > +- > > > Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dsc = | 4 > +- > > > > > > > > > Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirm > > > wareBootMediaLib.inf | 43 ++++++++ > > > > > > > > Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwar > > eB > > > ootMediaLib.inf | 38 +++++++ > > > > > > Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBootMediaLib.h > > > | 106 +++++++++++++++++++ > > > > > > > > > Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirm > > > wareBootMediaLib.c | 107 +++++++++++++++++++ > > > > > > > > Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/FirmwareBo > > o > > > tMediaLib.c | 109 ++++++++++++++++++++ > > > > > > > > Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwar > > eB > > > ootMediaLib.c | 82 +++++++++++++++ > > > 8 files changed, 495 insertions(+), 2 deletions(-) > > > > > > diff --git a/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec > > > b/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec > > > index fe5bfa0dc6..f70e3b977d 100644 > > > --- a/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec > > > +++ b/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dec > > > @@ -3,7 +3,7 @@ > > > # > > > # This package provides common open source Intel silicon modules. > > > # > > > -# Copyright (c) 2016 - 2018, Intel Corporation. All rights > > > reserved.
> > > +# Copyright (c) 2016 - 2019, Intel Corporation. All rights > > > +reserved.
> > > # SPDX-License-Identifier: BSD-2-Clause-Patent # ## @@ -22,6 > > > +22,10 @@ > > > # > > > MicrocodeFlashAccessLib|Include/Library/MicrocodeFlashAccessLib.h > > > > > > + ## @libraryclass Provides services to identify the firmware boot > > > + media > > > device. > > > + # > > > + FirmwareBootMediaLib|Include/Library/FirmwareBootMediaLib.h > > > + > > > [Guids] > > > ## GUID for Package token space > > > # {A9F8D54E-1107-4F0A-ADD0-4587E7A4A735} > > > @@ -35,6 +39,8 @@ > > > ## Include/Guid/MicrocodeFmp.h > > > gMicrocodeFmpImageTypeIdGuid =3D { 0x96d4fdcd, 0x1502, 0x424d= , { > > 0x9d, > > > 0x4c, 0x9b, 0x12, 0xd2, 0xdc, 0xae, 0x5c } } > > > > > > + gFirmwareBootMediaHobGuid =3D { 0x8c7340ea, 0xde8b, 0x4e06, {0xa4, > > > + 0x78, > > > 0xec, 0x8b, 0x62, 0xd7, 0xa, 0x8b } } > > > + > > > [Ppis] > > > gEdkiiVTdInfoPpiGuid =3D { 0x8a59fcb3, 0xf191, 0x400c, { 0x97, > > > 0x67, 0x67, 0xaf, 0x2b, 0x25, 0x68, 0x4a } } > > > > > > diff --git a/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dsc > > > b/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dsc > > > index 58b5b656ef..3fb8a08b50 100644 > > > --- a/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dsc > > > +++ b/Silicon/Intel/IntelSiliconPkg/IntelSiliconPkg.dsc > > > @@ -1,7 +1,7 @@ > > > ## @file > > > # This package provides common open source Intel silicon modules. > > > # > > > -# Copyright (c) 2017, Intel Corporation. All rights reserved.
> > > +# Copyright (c) 2017 - 2019, Intel Corporation. All rights > > > +reserved.
> > > # > > > # SPDX-License-Identifier: BSD-2-Clause-Patent > > > # > > > @@ -80,6 +80,8 @@ > > > > > > > > > IntelSiliconPkg/Feature/VTd/PlatformVTdInfoSamplePei/PlatformVTdInfoSa > > > mplePei.inf > > > > > > > > > IntelSiliconPkg/Feature/Capsule/MicrocodeUpdateDxe/MicrocodeUpdateDx > > > e.inf > > > > > > IntelSiliconPkg/Feature/Capsule/Library/MicrocodeFlashAccessLibNull/ > > > Mi > > > cro > > > codeFlashAccessLibNull.inf > > > + > > > > > > IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareBootMediaLib > > > .inf > > > + > > > > > > IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirmwareBootMe > > > diaLib.inf > > > > > > [BuildOptions] > > > *_*_*_CC_FLAGS =3D -D DISABLE_NEW_DEPRECATED_INTERFACES diff -- > > git > > > > > > a/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFi > > > r > > > mwareBootMediaLib.inf > > > > > > b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFi > > > r > > > mwareBootMediaLib.inf > > > new file mode 100644 > > > index 0000000000..83ed5f04af > > > --- /dev/null > > > +++ > > > > > > b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFi > > > r > > > mwareBootMediaLib.inf > > > @@ -0,0 +1,43 @@ > > > +## @file > > > +# Firmware Boot Media Library > > > +# > > > +# The firmware boot media device is used to make system > > > +initialization > > > decisions in the boot flow dependent > > > +# upon firmware boot media. Note that the firmware boot media is > > > +the > > > storage media that the boot firmware is stored on. > > > +# It is not the OS storage media which may be stored upon a > > > +different > > > +non- > > > volatile storage device. > > > +# > > > +# This library contains an implementation for the DXE and SMM boot > > phases. > > > +# > > > +# Copyright (c) 2019, Intel Corporation. All rights reserved.
# > > > +# > > > +SPDX-License-Identifier: BSD-2-Clause-Patent # ## > > > + > > > +[Defines] > > > + INF_VERSION =3D 0x00010005 > > > + BASE_NAME =3D DxeSmmFirmwareBootMediaLib > > > + FILE_GUID =3D 72F07B0B-54F5-47FD-9EDB-D796BE2= B87E9 > > > + MODULE_TYPE =3D DXE_DRIVER > > > + VERSION_STRING =3D 1.0 > > > + PI_SPECIFICATION_VERSION =3D 0x0001000A > > > + LIBRARY_CLASS =3D FirmwareBootMediaLib|DXE_DRIVER > > > DXE_SMM_DRIVER DXE_RUNTIME_DRIVER UEFI_APPLICATION > > UEFI_DRIVER > > > + CONSTRUCTOR =3D DxeSmmFirmwareBootMediaLibInit > > > +# > > > +# VALID_ARCHITECTURES =3D IA32 X64 IPF EBC > > > +# > > > + > > > +[Sources] > > > + FirmwareBootMediaLib.c > > > + DxeSmmFirmwareBootMediaLib.c > > > + > > > +[Packages] > > > + MdePkg/MdePkg.dec > > > + IntelSiliconPkg/IntelSiliconPkg.dec > > > + > > > +[LibraryClasses] > > > + BaseLib > > > + DebugLib > > > + HobLib > > > + > > > +[Guids] > > > + gFirmwareBootMediaHobGuid ## CONSUMES > > > diff --git > > > a/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFir > > > mw > > > ar > > > eBootMediaLib.inf > > > b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFir > > > mw > > > ar > > > eBootMediaLib.inf > > > new file mode 100644 > > > index 0000000000..063c4027d3 > > > --- /dev/null > > > +++ > > > b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFir > > > mw > > > ar > > > eBootMediaLib.inf > > > @@ -0,0 +1,38 @@ > > > +## @file > > > +# Firmware Boot Media Library > > > +# > > > +# The firmware boot media device is used to make system > > > +initialization > > > decisions in the boot flow dependent > > > +# upon firmware boot media. Note that the firmware boot media is > > > +the > > > storage media that the boot firmware is stored on. > > > +# It is not the OS storage media which may be stored upon a > > > +different > > > +non- > > > volatile storage device. > > > +# > > > +# This library contains an implementation for the PEI boot phase. > > > +# > > > +# Copyright (c) 2019, Intel Corporation. All rights reserved.
# > > > +# > > > +SPDX-License-Identifier: BSD-2-Clause-Patent # ## > > > + > > > +[Defines] > > > + INF_VERSION =3D 0x00010005 > > > + BASE_NAME =3D PeiFirmwareBootMediaLib > > > + FILE_GUID =3D D3F7BD0B-3539-4F2D-AF98-EE32DBE7971F > > > + MODULE_TYPE =3D PEIM > > > + VERSION_STRING =3D 1.0 > > > + LIBRARY_CLASS =3D FirmwareBootMediaLib > > > + > > > +[Sources] > > > + FirmwareBootMediaLib.c > > > + PeiFirmwareBootMediaLib.c > > > + > > > +[Packages] > > > + MdePkg/MdePkg.dec > > > + IntelSiliconPkg/IntelSiliconPkg.dec > > > + > > > +[LibraryClasses] > > > + BaseLib > > > + DebugLib > > > + HobLib > > > + > > > +[Guids] > > > + gFirmwareBootMediaHobGuid ## PRODUCES CONSUMES > > > diff --git > > > a/Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBootMediaLib > > > .h > > > b/Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBootMediaLib > > > .h > > > new file mode 100644 > > > index 0000000000..aca9593a84 > > > --- /dev/null > > > +++ b/Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBootMedi > > > +++ aL > > > +++ ib.h > > > @@ -0,0 +1,106 @@ > > > +/** @file > > > + This library identifies the firmware boot media device. > > > + > > > + The firmware boot media device is used to make system > > > + initialization > > > decisions in the boot flow dependent > > > + upon firmware boot media. Note that the firmware boot media is > > > + the > > > storage media that the boot firmware is stored on. > > > + It is not the OS storage media which may be stored upon a > > > + different > > > + non- > > > volatile storage device. > > > + > > > +Copyright (c) 2019, Intel Corporation. All rights reserved.
> > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > > + > > > +**/ > > > + > > > +#ifndef _FIRMWARE_BOOT_MEDIA_LIB_H_ #define > > > +_FIRMWARE_BOOT_MEDIA_LIB_H_ > > > + > > > +#include > > > + > > > +typedef enum { > > > + FwBootMediaSpi, > > > + FwBootMediaUfs, > > > + FwBootMediaEmmc, > > > + FwBootMediaNvme, > > > + FwBootMediaMax > > > +} FW_BOOT_MEDIA_TYPE; > > > + > > > +typedef struct { > > > + FW_BOOT_MEDIA_TYPE BootMedia; > > > +} FW_BOOT_MEDIA_HOB_DATA; > > > + > > > +/** > > > + Determines the current platform firmware boot media device. > > > + > > > + @param[out] FwBootMediaType The current platform Boot Media > type. > > > + > > > + @retval EFI_SUCCESS The operation completed successfully. > > > + @retval EFI_NOT_FOUND The boot media type could not be found= . > > > +**/ > > > +EFI_STATUS > > > +EFIAPI > > > +GetFirmwareBootMediaType ( > > > + OUT FW_BOOT_MEDIA_TYPE *FwBootMediaType > > > + ); > > > + > > > +/** > > > + Indicates whether the boot media is presently known. > > > + > > > + Note: Very early in boot this data may not be available. > > > + > > > + @retval TRUE Boot media is known > > > + @retval FALSE Boot media is not known > > > +**/ > > > +BOOLEAN > > > +EFIAPI > > > +FirmwareBootMediaIsKnown ( > > > + VOID > > > + ); > > > + > > > +/** > > > + Determines if the platform firmware is booting from SPI. > > > + > > > + @retval TRUE Platform firmware is booting from SPI > > > + @retval FALSE Platform firmware is booting from a non-SPI de= vice > or > > > the boot media is unknown > > > +**/ > > > +BOOLEAN > > > +EFIAPI > > > +FirmwareBootMediaIsSpi ( > > > + VOID > > > + ); > > > + > > > +/** > > > + Determines if the platform firmware is booting from UFS. > > > + > > > + @retval TRUE Platform firmware is booting from UFS > > > + @retval FALSE Platform firmware is booting from a non-UFS de= vice > or > > > the boot media is unknown > > > +**/ > > > +BOOLEAN > > > +EFIAPI > > > +FirmwareBootMediaIsUfs ( > > > + VOID > > > + ); > > > + > > > +/** > > > + Determines if the platform firmware is booting from eMMC. > > > + > > > + @retval TRUE Platform firmware is booting from eMMC > > > + @retval FALSE Platform firmware is booting from a non-eMMC > device > > > or the boot media is unknown > > > +**/ > > > +BOOLEAN > > > +EFIAPI > > > +FirmwareBootMediaIsEmmc ( > > > + VOID > > > + ); > > > + > > > +/** > > > + Determines if the platform firmware is booting from NVMe. > > > + > > > + @retval TRUE Platform firmware is booting from NVMe. > > > + @retval FALSE Platform firmware is booting from a non-NVMe > device > > or > > > the boot media is unknown > > > +**/ > > > +BOOLEAN > > > +EFIAPI > > > +FirmwareBootMediaIsNvme ( > > > + VOID > > > + ); > > > + > > > +#endif > > > diff --git > > > > > > a/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFi > > > r > > > mwareBootMediaLib.c > > > > > > b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFi > > > r > > > mwareBootMediaLib.c > > > new file mode 100644 > > > index 0000000000..1e3876afb3 > > > --- /dev/null > > > +++ > > > > > > b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFi > > > r > > > mwareBootMediaLib.c > > > @@ -0,0 +1,107 @@ > > > +/** @file > > > + This library identifies the firmware boot media device. > > > + > > > + The firmware boot media device is used to make system > > > + initialization > > > decisions in the boot flow dependent > > > + upon firmware boot media. Note that the firmware boot media is > > > + the > > > storage media that the boot firmware is stored on. > > > + It is not the OS storage media which may be stored upon a > > > + different > > > + non- > > > volatile storage device. > > > + > > > + This file contains implementation specific to the DXE and SMM > > > + boot > > phases. > > > + > > > +Copyright (c) 2019, Intel Corporation. All rights reserved.
> > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > > + > > > +**/ > > > + > > > +#include > > > +#include > > > +#include #include > > > + > > > + > > > +STATIC FW_BOOT_MEDIA_TYPE mFwBootMedia =3D FwBootMediaMax; > > > + > > > +/** > > > + Determines the current platform firmware boot media device. > > > + > > > + @param[out] FwBootMediaType The current platform Boot Media > type. > > > + > > > + @retval EFI_SUCCESS The operation completed successfully. > > > + @retval EFI_NOT_FOUND The boot media type could not be found= . > > > +**/ > > > +EFI_STATUS > > > +EFIAPI > > > +GetFirmwareBootMediaType ( > > > + OUT FW_BOOT_MEDIA_TYPE *FwBootMediaType > > > + ) > > > +{ > > > + if (mFwBootMedia =3D=3D FwBootMediaMax) { > > > + return EFI_NOT_FOUND; > > > + } > > > + > > > + *FwBootMediaType =3D mFwBootMedia; > > > + return EFI_SUCCESS; > > > +} > > > + > > > +/** > > > + Determines if the boot media is presently known. > > > + > > > + Note: Very early in boot this data may not be available. > > > + > > > + @retval TRUE Boot media is known > > > + @retval FALSE Boot media is not known > > > +**/ > > > +BOOLEAN > > > +EFIAPI > > > +FirmwareBootMediaIsKnown ( > > > + VOID > > > + ) > > > +{ > > > + return mFwBootMedia !=3D FwBootMediaMax; } > > > + > > > +/** > > > + The library constructor. > > > + > > > + This constructor depends upon gFirmwareBootMediaHobGuid. > > > + It should be produced by the platform in the HOB producer phase. > > > + > > > + @param[in] ImageHandle The firmware allocated handle fo= r the > > UEFI > > > image. > > > + @param[in] SystemTable A pointer to the EFI system tabl= e. > > > + > > > + @retval EFI_SUCCESS The constructor executed success= fully. > > > + @retval EFI_NOT_FOUND The gFirmwareBootMediaHobGuid > HOB > > > could not be located > > > + or the boot media type is invali= d. > > > +**/ > > > +EFI_STATUS > > > +EFIAPI > > > +DxeSmmFirmwareBootMediaLibInit ( > > > + IN EFI_HANDLE ImageHandle, > > > + IN EFI_SYSTEM_TABLE *SystemTable > > > + ) > > > +{ > > > + FW_BOOT_MEDIA_HOB_DATA *BootMediaHobData; > > > + FW_BOOT_MEDIA_TYPE BootMediaType; > > > + EFI_HOB_GUID_TYPE *GuidHobPtr; > > > + > > > + GuidHobPtr =3D GetFirstGuidHob (&gFirmwareBootMediaHobGuid); if > > > + (GuidHobPtr =3D=3D NULL) { > > > + DEBUG ((DEBUG_ERROR, "The firmware boot media HOB does not > > > exist!\n")); > > > + ASSERT (GuidHobPtr !=3D NULL); > > > + return EFI_NOT_FOUND; > > > + } > > > + > > > + BootMediaHobData =3D (FW_BOOT_MEDIA_HOB_DATA *) > > > GET_GUID_HOB_DATA (GuidHobPtr); > > > + if (BootMediaHobData =3D=3D NULL) { > > > + return EFI_NOT_FOUND; > > > + } > > > + > > > + BootMediaType =3D BootMediaHobData->BootMedia; > > > + > > > + if (BootMediaType >=3D FwBootMediaMax) { > > > + DEBUG ((DEBUG_ERROR, "The firmware boot media HOB specifies an > > > invalid media type.\n")); > > > + return EFI_NOT_FOUND; > > > + } > > > + > > > + mFwBootMedia =3D BootMediaType; > > > + > > > + return EFI_SUCCESS; > > > +} > > > diff --git > > > a/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/Firmwa > > > re > > > B > > > ootMediaLib.c > > > b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/Firmwa > > > re > > > B > > > ootMediaLib.c > > > new file mode 100644 > > > index 0000000000..11a14d172d > > > --- /dev/null > > > +++ > > > b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/Firmwa > > > re > > > B > > > ootMediaLib.c > > > @@ -0,0 +1,109 @@ > > > +/** @file > > > + This library identifies the firmware boot media device. > > > + > > > + The firmware boot media device is used to make system > > > + initialization > > > decisions in the boot flow dependent > > > + upon firmware boot media. Note that the firmware boot media is > > > + the > > > storage media that the boot firmware is stored on. > > > + It is not the OS storage media which may be stored upon a > > > + different > > > + non- > > > volatile storage device. > > > + > > > + This file contains library implementation common to all boot phase= s. > > > + > > > +Copyright (c) 2019, Intel Corporation. All rights reserved.
> > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > > + > > > +**/ > > > + > > > +#include > > > +#include > > > +#include > > > + > > > +/** > > > + Determines if the platform firmware is booting from SPI. > > > + > > > + @retval TRUE Platform firmware is booting from SPI > > > + @retval FALSE Platform firmware is booting from a non-SPI de= vice > or > > > the boot media is unknown > > > +**/ > > > +BOOLEAN > > > +EFIAPI > > > +FirmwareBootMediaIsSpi ( > > > + VOID > > > + ) > > > +{ > > > + EFI_STATUS Status; > > > + FW_BOOT_MEDIA_TYPE BootMedia; > > > + > > > + Status =3D GetFirmwareBootMediaType (&BootMedia); > > > + if (EFI_ERROR (Status) || BootMedia !=3D FwBootMediaSpi) { > > > + return FALSE; > > > + } else { > > > + return TRUE; > > > + } > > > +} > > > + > > > +/** > > > + Determines if the platform firmware is booting from UFS. > > > + > > > + @retval TRUE Platform firmware is booting from UFS > > > + @retval FALSE Platform firmware is booting from a non-UFS de= vice > or > > > the boot media is unknown > > > +**/ > > > +BOOLEAN > > > +EFIAPI > > > +FirmwareBootMediaIsUfs ( > > > + VOID > > > + ) > > > +{ > > > + EFI_STATUS Status; > > > + FW_BOOT_MEDIA_TYPE BootMedia; > > > + > > > + Status =3D GetFirmwareBootMediaType (&BootMedia); > > > + if (EFI_ERROR (Status) || BootMedia !=3D FwBootMediaUfs) { > > > + return FALSE; > > > + } else { > > > + return TRUE; > > > + } > > > +} > > > + > > > +/** > > > + Determines if the platform firmware is booting from eMMC. > > > + > > > + @retval TRUE Platform firmware is booting from eMMC > > > + @retval FALSE Platform firmware is booting from a non-eMMC > device > > > or the boot media is unknown > > > +**/ > > > +BOOLEAN > > > +EFIAPI > > > +FirmwareBootMediaIsEmmc ( > > > + VOID > > > + ) > > > +{ > > > + EFI_STATUS Status; > > > + FW_BOOT_MEDIA_TYPE BootMedia; > > > + > > > + Status =3D GetFirmwareBootMediaType (&BootMedia); > > > + if (EFI_ERROR (Status) || BootMedia !=3D FwBootMediaEmmc) { > > > + return FALSE; > > > + } else { > > > + return TRUE; > > > + } > > > +} > > > + > > > +/** > > > + Determines if the platform firmware is booting from NVMe. > > > + > > > + @retval TRUE Platform firmware is booting from NVMe. > > > + @retval FALSE Platform firmware is booting from a non-NVMe > device > > or > > > the boot media is unknown > > > +**/ > > > +BOOLEAN > > > +EFIAPI > > > +FirmwareBootMediaIsNvme ( > > > + VOID > > > + ) > > > +{ > > > + EFI_STATUS Status; > > > + FW_BOOT_MEDIA_TYPE BootMedia; > > > + > > > + Status =3D GetFirmwareBootMediaType (&BootMedia); > > > + if (EFI_ERROR (Status) || BootMedia !=3D FwBootMediaNvme) { > > > + return FALSE; > > > + } else { > > > + return TRUE; > > > + } > > > +} > > > diff --git > > > a/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFir > > > mw > > > ar > > > eBootMediaLib.c > > > b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFir > > > mw > > > ar > > > eBootMediaLib.c > > > new file mode 100644 > > > index 0000000000..14478e0dbe > > > --- /dev/null > > > +++ > > > b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFir > > > mw > > > ar > > > eBootMediaLib.c > > > @@ -0,0 +1,82 @@ > > > +/** @file > > > + This library identifies the firmware boot media device. > > > + > > > + The firmware boot media device is used to make system > > > + initialization > > > decisions in the boot flow dependent > > > + upon firmware boot media. Note that the firmware boot media is > > > + the > > > storage media that the boot firmware is stored on. > > > + It is not the OS storage media which may be stored upon a > > > + different > > > + non- > > > volatile storage device. > > > + > > > + This file contains implementation specific to the PEI boot phase. > > > + > > > +Copyright (c) 2019, Intel Corporation. All rights reserved.
> > > +SPDX-License-Identifier: BSD-2-Clause-Patent > > > + > > > +**/ > > > + > > > +#include > > > +#include > > > +#include #include > > > + > > > + > > > +/** > > > + Determines the current platform firmware boot media device. > > > + > > > + @param[out] FwBootMediaType The current platform Boot Media > type. > > > + > > > + @retval EFI_SUCCESS The operation completed successfully. > > > + @retval EFI_NOT_FOUND The boot media type could not be found= . > > > +**/ > > > +EFI_STATUS > > > +EFIAPI > > > +GetFirmwareBootMediaType ( > > > + OUT FW_BOOT_MEDIA_TYPE *FwBootMediaType > > > + ) > > > +{ > > > + FW_BOOT_MEDIA_HOB_DATA *BootMediaHobData; > > > + EFI_HOB_GUID_TYPE *GuidHobPtr; > > > + > > > + GuidHobPtr =3D GetFirstGuidHob (&gFirmwareBootMediaHobGuid); if > > > + (GuidHobPtr =3D=3D NULL) { > > > + DEBUG ((DEBUG_ERROR, "The firmware boot media HOB does not > > > exist!\n")); > > > + ASSERT (GuidHobPtr !=3D NULL); > > > + return EFI_NOT_FOUND; > > > + } > > > + > > > + BootMediaHobData =3D (FW_BOOT_MEDIA_HOB_DATA *) > > > GET_GUID_HOB_DATA (GuidHobPtr); > > > + if (BootMediaHobData =3D=3D NULL) { > > > + return EFI_NOT_FOUND; > > > + } > > > + > > > + if (BootMediaHobData->BootMedia >=3D FwBootMediaMax) { > > > + DEBUG ((DEBUG_ERROR, "The firmware boot media HOB specifies an > > > invalid media type.\n")); > > > + return EFI_NOT_FOUND; > > > + } > > > + *FwBootMediaType =3D BootMediaHobData->BootMedia; > > > + > > > + return EFI_SUCCESS; > > > +} > > > + > > > +/** > > > + Determines if the boot media is presently known. > > > + > > > + Note: Very early in boot this data may not be available. > > > + > > > + @retval TRUE Boot media is known > > > + @retval FALSE Boot media is not known > > > +**/ > > > +BOOLEAN > > > +EFIAPI > > > +FirmwareBootMediaIsKnown ( > > > + VOID > > > + ) > > > +{ > > > + EFI_STATUS Status; > > > + FW_BOOT_MEDIA_TYPE BootMedia; > > > + > > > + BootMedia =3D FwBootMediaMax; > > > + Status =3D GetFirmwareBootMediaType (&BootMedia); > > > + if (EFI_ERROR (Status) || BootMedia =3D=3D FwBootMediaMax) { > > > + return FALSE; > > > + } else { > > > + return TRUE; > > > + } > > > +} > > > -- > > > 2.16.2.windows.1 > > >=20