public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Kubacki, Michael A" <michael.a.kubacki@intel.com>
To: "Ni, Ray" <ray.ni@intel.com>,
	"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Chaganty, Rangasai V" <rangasai.v.chaganty@intel.com>
Subject: Re: [edk2-platforms][PATCH V2 1/3] IntelSiliconPkg/FirmwareBootMediaLib: Add library
Date: Wed, 9 Oct 2019 16:33:44 +0000	[thread overview]
Message-ID: <BYAPR11MB38312FF0CC5E788E8C22A067B5950@BYAPR11MB3831.namprd11.prod.outlook.com> (raw)
In-Reply-To: <734D49CCEBEEF84792F5B80ED585239D5C317BD9@SHSMSX104.ccr.corp.intel.com>

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.

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 about this.

Thanks,
Michael

> -----Original Message-----
> From: Ni, Ray <ray.ni@intel.com>
> Sent: Wednesday, October 9, 2019 2:36 AM
> To: Kubacki, Michael A <michael.a.kubacki@intel.com>;
> devel@edk2.groups.io
> Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>
> 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 <michael.a.kubacki@intel.com>
> > Sent: Saturday, October 5, 2019 1:29 AM
> > To: devel@edk2.groups.io
> > Cc: Chaganty, Rangasai V <rangasai.v.chaganty@intel.com>; Ni, Ray
> > <ray.ni@intel.com>
> > Subject: [edk2-platforms][PATCH V2 1/3]
> > IntelSiliconPkg/FirmwareBootMediaLib: Add library
> >
> > REF:https://bugzilla.tianocore.org/show_bug.cgi?id=2229
> >
> > 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 <rangasai.v.chaganty@intel.com>
> > Cc: Ray Ni <ray.ni@intel.com>
> > Signed-off-by: Michael Kubacki <michael.a.kubacki@intel.com>
> > ---
> >  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/PeiFirmwareB
> > 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/FirmwareBoo
> > tMediaLib.c         | 109 ++++++++++++++++++++
> >
> >
> Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmwareB
> > 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.<BR>
> > +# Copyright (c) 2016 - 2019, Intel Corporation. All rights
> > +reserved.<BR>
> >  # 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      = { 0x96d4fdcd, 0x1502, 0x424d, {
> 0x9d,
> > 0x4c, 0x9b, 0x12, 0xd2, 0xdc, 0xae, 0x5c } }
> >
> > +  gFirmwareBootMediaHobGuid = { 0x8c7340ea, 0xde8b, 0x4e06, {0xa4,
> > + 0x78,
> > 0xec, 0x8b, 0x62, 0xd7, 0xa, 0x8b } }
> > +
> >  [Ppis]
> >    gEdkiiVTdInfoPpiGuid = { 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.<BR>
> > +# Copyright (c) 2017 - 2019, Intel Corporation. All rights
> > +reserved.<BR>
> >  #
> >  #    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 = -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.<BR> # #
> > +SPDX-License-Identifier: BSD-2-Clause-Patent # ##
> > +
> > +[Defines]
> > +  INF_VERSION                    = 0x00010005
> > +  BASE_NAME                      = DxeSmmFirmwareBootMediaLib
> > +  FILE_GUID                      = 72F07B0B-54F5-47FD-9EDB-D796BE2B87E9
> > +  MODULE_TYPE                    = DXE_DRIVER
> > +  VERSION_STRING                 = 1.0
> > +  PI_SPECIFICATION_VERSION       = 0x0001000A
> > +  LIBRARY_CLASS                  = FirmwareBootMediaLib|DXE_DRIVER
> > DXE_SMM_DRIVER DXE_RUNTIME_DRIVER UEFI_APPLICATION
> UEFI_DRIVER
> > +  CONSTRUCTOR                    = DxeSmmFirmwareBootMediaLibInit
> > +#
> > +#  VALID_ARCHITECTURES           = 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/PeiFirmw
> > ar
> > eBootMediaLib.inf
> > b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmw
> > ar
> > eBootMediaLib.inf
> > new file mode 100644
> > index 0000000000..063c4027d3
> > --- /dev/null
> > +++
> > b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmw
> > 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.<BR> # #
> > +SPDX-License-Identifier: BSD-2-Clause-Patent # ##
> > +
> > +[Defines]
> > +  INF_VERSION          = 0x00010005
> > +  BASE_NAME            = PeiFirmwareBootMediaLib
> > +  FILE_GUID            = D3F7BD0B-3539-4F2D-AF98-EE32DBE7971F
> > +  MODULE_TYPE          = PEIM
> > +  VERSION_STRING       = 1.0
> > +  LIBRARY_CLASS        = 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/FirmwareBootMediaL
> > +++ 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.<BR>
> > +SPDX-License-Identifier: BSD-2-Clause-Patent
> > +
> > +**/
> > +
> > +#ifndef _FIRMWARE_BOOT_MEDIA_LIB_H_
> > +#define _FIRMWARE_BOOT_MEDIA_LIB_H_
> > +
> > +#include <Uefi.h>
> > +
> > +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 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-UFS 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-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.<BR>
> > +SPDX-License-Identifier: BSD-2-Clause-Patent
> > +
> > +**/
> > +
> > +#include <Library/BaseLib.h>
> > +#include <Library/DebugLib.h>
> > +#include <Library/FirmwareBootMediaLib.h> #include <Library/HobLib.h>
> > +
> > +STATIC FW_BOOT_MEDIA_TYPE mFwBootMedia = 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 == FwBootMediaMax) {
> > +    return EFI_NOT_FOUND;
> > +  }
> > +
> > +  *FwBootMediaType = 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 != 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 for the
> UEFI
> > image.
> > +  @param[in]  SystemTable           A pointer to the EFI system table.
> > +
> > +  @retval     EFI_SUCCESS           The constructor executed successfully.
> > +  @retval     EFI_NOT_FOUND         The gFirmwareBootMediaHobGuid HOB
> > could not be located
> > +                                    or the boot media type is invalid.
> > +**/
> > +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  = GetFirstGuidHob (&gFirmwareBootMediaHobGuid);  if
> > + (GuidHobPtr == NULL) {
> > +    DEBUG ((DEBUG_ERROR, "The firmware boot media HOB does not
> > exist!\n"));
> > +    ASSERT (GuidHobPtr != NULL);
> > +    return EFI_NOT_FOUND;
> > +  }
> > +
> > +  BootMediaHobData = (FW_BOOT_MEDIA_HOB_DATA *)
> > GET_GUID_HOB_DATA (GuidHobPtr);
> > +  if (BootMediaHobData == NULL) {
> > +    return EFI_NOT_FOUND;
> > +  }
> > +
> > +  BootMediaType = BootMediaHobData->BootMedia;
> > +
> > +  if (BootMediaType >= FwBootMediaMax) {
> > +    DEBUG ((DEBUG_ERROR, "The firmware boot media HOB specifies an
> > invalid media type.\n"));
> > +    return EFI_NOT_FOUND;
> > +  }
> > +
> > +  mFwBootMedia = BootMediaType;
> > +
> > +  return EFI_SUCCESS;
> > +}
> > diff --git
> > a/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/Firmware
> > B
> > ootMediaLib.c
> > b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/Firmware
> > B
> > ootMediaLib.c
> > new file mode 100644
> > index 0000000000..11a14d172d
> > --- /dev/null
> > +++
> > b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/Firmware
> > 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 phases.
> > +
> > +Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
> > +SPDX-License-Identifier: BSD-2-Clause-Patent
> > +
> > +**/
> > +
> > +#include <Library/BaseLib.h>
> > +#include <Library/DebugLib.h>
> > +#include <Library/FirmwareBootMediaLib.h>
> > +
> > +/**
> > +  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 device or
> > the boot media is unknown
> > +**/
> > +BOOLEAN
> > +EFIAPI
> > +FirmwareBootMediaIsSpi (
> > +  VOID
> > +  )
> > +{
> > +  EFI_STATUS          Status;
> > +  FW_BOOT_MEDIA_TYPE  BootMedia;
> > +
> > +  Status = GetFirmwareBootMediaType (&BootMedia);
> > +  if (EFI_ERROR (Status) || BootMedia != 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 device or
> > the boot media is unknown
> > +**/
> > +BOOLEAN
> > +EFIAPI
> > +FirmwareBootMediaIsUfs (
> > +  VOID
> > +  )
> > +{
> > +  EFI_STATUS          Status;
> > +  FW_BOOT_MEDIA_TYPE  BootMedia;
> > +
> > +  Status = GetFirmwareBootMediaType (&BootMedia);
> > +  if (EFI_ERROR (Status) || BootMedia != 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 = GetFirmwareBootMediaType (&BootMedia);
> > +  if (EFI_ERROR (Status) || BootMedia != 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 = GetFirmwareBootMediaType (&BootMedia);
> > +  if (EFI_ERROR (Status) || BootMedia != FwBootMediaNvme) {
> > +    return FALSE;
> > +  } else {
> > +    return TRUE;
> > +  }
> > +}
> > diff --git
> > a/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmw
> > ar
> > eBootMediaLib.c
> > b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmw
> > ar
> > eBootMediaLib.c
> > new file mode 100644
> > index 0000000000..14478e0dbe
> > --- /dev/null
> > +++
> > b/Silicon/Intel/IntelSiliconPkg/Library/PeiDxeSmmBootMediaLib/PeiFirmw
> > 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.<BR>
> > +SPDX-License-Identifier: BSD-2-Clause-Patent
> > +
> > +**/
> > +
> > +#include <Library/BaseLib.h>
> > +#include <Library/DebugLib.h>
> > +#include <Library/FirmwareBootMediaLib.h> #include <Library/HobLib.h>
> > +
> > +/**
> > +  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  = GetFirstGuidHob (&gFirmwareBootMediaHobGuid);  if
> > + (GuidHobPtr == NULL) {
> > +      DEBUG ((DEBUG_ERROR, "The firmware boot media HOB does not
> > exist!\n"));
> > +      ASSERT (GuidHobPtr != NULL);
> > +      return EFI_NOT_FOUND;
> > +  }
> > +
> > +  BootMediaHobData = (FW_BOOT_MEDIA_HOB_DATA *)
> > GET_GUID_HOB_DATA (GuidHobPtr);
> > +  if (BootMediaHobData == NULL) {
> > +    return EFI_NOT_FOUND;
> > +  }
> > +
> > +  if (BootMediaHobData->BootMedia >= FwBootMediaMax) {
> > +    DEBUG ((DEBUG_ERROR, "The firmware boot media HOB specifies an
> > invalid media type.\n"));
> > +    return EFI_NOT_FOUND;
> > +  }
> > +  *FwBootMediaType = 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 = FwBootMediaMax;
> > +  Status = GetFirmwareBootMediaType (&BootMedia);
> > +  if (EFI_ERROR (Status) || BootMedia == FwBootMediaMax) {
> > +    return FALSE;
> > +  } else {
> > +    return TRUE;
> > +  }
> > +}
> > --
> > 2.16.2.windows.1
> 


  reply	other threads:[~2019-10-09 16:33 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-04 17:29 [edk2-platforms][PATCH V2 0/3] Add FW Boot Media Device Indicator Kubacki, Michael A
2019-10-04 17:29 ` [edk2-platforms][PATCH V2 1/3] IntelSiliconPkg/FirmwareBootMediaLib: Add library Kubacki, Michael A
2019-10-07  1:45   ` Chaganty, Rangasai V
2019-10-09  9:35   ` Ni, Ray
2019-10-09 16:33     ` Kubacki, Michael A [this message]
2019-10-10  2:21       ` Ni, Ray
2019-10-10  4:42         ` Kubacki, Michael A
2019-10-10  5:44           ` Ni, Ray
2019-10-04 17:29 ` [edk2-platforms][PATCH V2 2/3] BoardModulePkg/FirmwareBootMediaInfoLib: " Kubacki, Michael A
2019-10-08  7:01   ` Dong, Eric
2019-10-04 17:29 ` [edk2-platforms][PATCH V2 3/3] BoardModulePkg/FirmwareBootMediaInfoPei: Add module Kubacki, Michael A
2019-10-08  7:02   ` Dong, Eric

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=BYAPR11MB38312FF0CC5E788E8C22A067B5950@BYAPR11MB3831.namprd11.prod.outlook.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox