From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by mx.groups.io with SMTP id smtpd.web12.2539.1570686296954755945 for ; Wed, 09 Oct 2019 22:44:57 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.115, mailfrom: ray.ni@intel.com) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 09 Oct 2019 22:44:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.67,279,1566889200"; d="scan'208";a="198233553" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by orsmga006.jf.intel.com with ESMTP; 09 Oct 2019 22:44:54 -0700 Received: from fmsmsx101.amr.corp.intel.com (10.18.124.199) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 9 Oct 2019 22:44:54 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by fmsmsx101.amr.corp.intel.com (10.18.124.199) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 9 Oct 2019 22:44:53 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.166]) by SHSMSX103.ccr.corp.intel.com ([169.254.4.165]) with mapi id 14.03.0439.000; Thu, 10 Oct 2019 13:44:46 +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///66wCAASgwEP//o3kAgACV6/A= Date: Thu, 10 Oct 2019 05:44:46 +0000 Message-ID: <734D49CCEBEEF84792F5B80ED585239D5C319958@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> <734D49CCEBEEF84792F5B80ED585239D5C3194C9@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 > -----Original Message----- > From: Kubacki, Michael A > Sent: Thursday, October 10, 2019 12:43 PM > To: Ni, Ray ; devel@edk2.groups.io > Cc: Chaganty, Rangasai V > Subject: RE: [edk2-platforms][PATCH V2 1/3] > IntelSiliconPkg/FirmwareBootMediaLib: Add library >=20 > Replies below. >=20 > > -----Original Message----- > > From: Ni, Ray > > Sent: Wednesday, October 9, 2019 7:21 PM > > To: Kubacki, Michael A ; > > devel@edk2.groups.io > > Cc: Chaganty, Rangasai V > > Subject: RE: [edk2-platforms][PATCH V2 1/3] > > IntelSiliconPkg/FirmwareBootMediaLib: Add library > > > > 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 > > > > > > 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 > > > optimizations 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 > I don't see an issue with phase-specific instances that cleanly comply wi= th > phase restrictions. >=20 > In general, PEI drivers cannot write to global variables. This change doe= s > cache the value in BS phase so it is available in OS runtime. >=20 > * PEI: Do not write to a global variable. Use the heap to store the valu= e via > the HOB list. Always get the value from the HOB. > * DXE: Get the value from the HOB and store the value in a global variab= le > during the library constructor in the BS phase so the value is available = during > later phase transition. >=20 > What exactly are you proposing to change? >=20 I would like to see one library instance that can be used in both PEI and D= XE. The library implementation doesn't need to care when it's called. Caller is= responsible to call the API properly in boot time phase. > > > > > > 2. They are certainly not required, but in practice we've found code > > > usage 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 ab= out > 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. > > >=20 > My preference is that the API is well-defined and stable. In this case, m= y > primary thought on the matter is not having two ways to do the same thin= g. > And again, I have no strong preference for either case but we do have Int= el > code that favors the IsXXX () usage. I don't think adding new devices > (extending the API) is so much an issue as ensuring the existing ones are= not > modified. Which would be the case for the enum members and the functions. > In conclusion, I will send a patch to remove the IsXXX () functions. Thanks. >=20 > Before adding GUIDs, the problem statement needs to be clearly articulate= d > that justifies introducing GUID management. I am ok with enum. >=20 > > Thanks, > > Ray > > > > > > > > Thanks, > > > Michael > > > > > > > -----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/PeiFir > > > > mw > > > > ar > > > > eB > > > > > ootMediaLib.inf | 38 +++++++ > > > > > > > > > > Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBootMediaL > > > > > ib > > > > > .h > > > > > | 106 +++++++++++++++++++ > > > > > > > > > > > > > > > > > > > > Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/DxeSmmFirm > > > > > wareBootMediaLib.c | 107 +++++++++++++++++++ > > > > > > > > > > > > > > Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/Firmwa > > > > re > > > > Bo > > > > o > > > > > tMediaLib.c | 109 ++++++++++++++++++++ > > > > > > > > > > > > > > Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFir > > > > mw > > > > ar > > > > 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. > > > > > 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, 0x= 424d, > { > > > > 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/MicrocodeFlashAccessLibN > > > > > ul > > > > > l/ > > > > > 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-D79= 6BE2B87E9 > > > > > + MODULE_TYPE =3D DXE_DRIVER > > > > > + VERSION_STRING =3D 1.0 > > > > > + PI_SPECIFICATION_VERSION =3D 0x0001000A > > > > > + LIBRARY_CLASS =3D FirmwareBootMediaLib|DXE_DR= IVER > > > > > DXE_SMM_DRIVER DXE_RUNTIME_DRIVER UEFI_APPLICATION > > > > UEFI_DRIVER > > > > > + CONSTRUCTOR =3D DxeSmmFirmwareBootMediaLibI= nit > > > > > +# > > > > > +# 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/Pe > > > > > iF > > > > > ir > > > > > mw > > > > > ar > > > > > eBootMediaLib.inf > > > > > b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/Pe > > > > > iF > > > > > ir > > > > > mw > > > > > ar > > > > > eBootMediaLib.inf > > > > > new file mode 100644 > > > > > index 0000000000..063c4027d3 > > > > > --- /dev/null > > > > > +++ > > > > > b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/Pe > > > > > iF > > > > > ir > > > > > 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/FirmwareBootMedi > > > > > aL > > > > > ib > > > > > .h > > > > > b/Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBootMedi > > > > > aL > > > > > ib > > > > > .h > > > > > new file mode 100644 > > > > > index 0000000000..aca9593a84 > > > > > --- /dev/null > > > > > +++ b/Silicon/Intel/IntelSiliconPkg/Include/Library/FirmwareBoot > > > > > +++ Me > > > > > +++ di > > > > > +++ 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 successful= ly. > > > > > + @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-SP= I > device > > > 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-UF= S > > device > > > 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-eM= MC > > > 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-NV= Me > > > 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 successful= ly. > > > > > + @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 phas= e. > > > > > + > > > > > + @param[in] ImageHandle The firmware allocated handl= e for > the > > > > UEFI > > > > > image. > > > > > + @param[in] SystemTable A pointer to the EFI system = table. > > > > > + > > > > > + @retval EFI_SUCCESS The constructor executed suc= cessfully. > > > > > + @retval EFI_NOT_FOUND The gFirmwareBootMediaHobGui= d > > > HOB > > > > > could not be located > > > > > + or the boot media type is in= valid. > > > > > +**/ > > > > > +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/Fi > > > > > rm > > > > > wa > > > > > re > > > > > B > > > > > ootMediaLib.c > > > > > b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/Fi > > > > > rm > > > > > wa > > > > > re > > > > > B > > > > > ootMediaLib.c > > > > > new file mode 100644 > > > > > index 0000000000..11a14d172d > > > > > --- /dev/null > > > > > +++ > > > > > b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/Fi > > > > > rm > > > > > wa > > > > > 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 p= hases. > > > > > + > > > > > +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-SP= I > device > > > 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-UF= S > > device > > > 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-eM= MC > > > 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-NV= Me > > > 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/Pe > > > > > iF > > > > > ir > > > > > mw > > > > > ar > > > > > eBootMediaLib.c > > > > > b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/Pe > > > > > iF > > > > > ir > > > > > mw > > > > > ar > > > > > eBootMediaLib.c > > > > > new file mode 100644 > > > > > index 0000000000..14478e0dbe > > > > > --- /dev/null > > > > > +++ > > > > > b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/Pe > > > > > iF > > > > > ir > > > > > 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 pha= se. > > > > > + > > > > > +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 successful= ly. > > > > > + @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