Please CC all UefiPayloadPkg maintainers or the patch might be filtered.

Only trusted console devices would be connected in order to support TCG 
physical presence before ReadyToLock.  Instead of connect all PCI devices in 
PlatformBootManagerBeforeConsole (), please check why 
PlatformBootManagerAfterConsole() could not meet the requirement since all 
other PCI devices are expected to be connected using EfiBootManagerConnectAll 
().

Thanks,
Guo

> -----Original Message-----
> From: [email protected] <[email protected]> On Behalf Of Marcello
> Sylvester Bauer
> Sent: Thursday, July 16, 2020 4:10 AM
> To: [email protected]
> Cc: Patrick Rudolph <[email protected]>; Christian Walter
> <[email protected]>; Ma, Maurice <[email protected]>;
> Desimone, Nathaniel L <[email protected]>; Zeng, Star
> <[email protected]>
> Subject: [edk2-devel] [PATCH v1 1/1] UefiPayloadPkg: Scan for PCI devices 
> after
> end of DXE
> 
> From: Patrick Rudolph <[email protected]>
> 
> This allows EFI applications to iterate over those devices.
> An example is iPXE.efi that requires those devices to be present.
> 
> Signed-off-by: Patrick Rudolph <[email protected]>
> Signed-off-by: Marcello Sylvester Bauer <[email protected]>
> Cc: Patrick Rudolph <[email protected]>
> Cc: Christian Walter <[email protected]>
> Cc: Maurice Ma <[email protected]>
> Cc: Nate DeSimone <[email protected]>
> Cc: Star Zeng <[email protected]>
> ---
> 
> UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
> |  1 +
>  UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManager.c
> | 76 ++++++++++++++++++++
>  2 files changed, 77 insertions(+)
> 
> diff --git
> a/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.i
> nf
> b/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.i
> nf
> index 1f5a0bcad038..a7c6bc2d6440 100644
> ---
> a/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.i
> nf
> +++
> b/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.i
> nf
> @@ -57,6 +57,7 @@ [Protocols]
>    gEfiBootLogoProtocolGuid        ## CONSUMES
> 
>    gEfiDxeSmmReadyToLockProtocolGuid
> 
>    gEfiSmmAccess2ProtocolGuid
> 
> +  gEfiPciRootBridgeIoProtocolGuid               ## CONSUMES
> 
> 
> 
>  [Pcd]
> 
>    gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut
> 
> diff --git
> a/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManager.c
> b/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManager.c
> index c5c6af0abcb2..ff7df53231ce 100644
> ---
> a/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManager.c
> +++
> b/UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManager.c
> @@ -138,6 +138,79 @@ PlatformRegisterFvBootOption (
>    }
> 
>  }
> 
> 
> 
> +STATIC
> 
> +EFI_STATUS
> 
> +VisitAllInstancesOfProtocol (
> 
> +  IN EFI_GUID                    *Id,
> 
> +  IN PROTOCOL_INSTANCE_CALLBACK  CallBackFunction,
> 
> +  IN VOID                        *Context
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS                Status;
> 
> +  UINTN                     HandleCount;
> 
> +  EFI_HANDLE                *HandleBuffer;
> 
> +  UINTN                     Index;
> 
> +  VOID                      *Instance;
> 
> +
> 
> +  //
> 
> +  // Start to check all the PciIo to find all possible device
> 
> +  //
> 
> +  HandleCount = 0;
> 
> +  HandleBuffer = NULL;
> 
> +  Status = gBS->LocateHandleBuffer (
> 
> +                  ByProtocol,
> 
> +                  Id,
> 
> +                  NULL,
> 
> +                  &HandleCount,
> 
> +                  &HandleBuffer
> 
> +                  );
> 
> +  if (EFI_ERROR (Status)) {
> 
> +    return Status;
> 
> +  }
> 
> +
> 
> +  for (Index = 0; Index < HandleCount; Index++) {
> 
> +    Status = gBS->HandleProtocol (HandleBuffer[Index], Id, &Instance);
> 
> +    if (EFI_ERROR (Status)) {
> 
> +      continue;
> 
> +    }
> 
> +
> 
> +    Status = (*CallBackFunction) (
> 
> +               HandleBuffer[Index],
> 
> +               Instance,
> 
> +               Context
> 
> +               );
> 
> +  }
> 
> +
> 
> +  gBS->FreePool (HandleBuffer);
> 
> +
> 
> +  return EFI_SUCCESS;
> 
> +}
> 
> +
> 
> +STATIC
> 
> +EFI_STATUS
> 
> +EFIAPI
> 
> +ConnectRootBridge (
> 
> +  IN EFI_HANDLE  RootBridgeHandle,
> 
> +  IN VOID        *Instance,
> 
> +  IN VOID        *Context
> 
> +  )
> 
> +{
> 
> +  EFI_STATUS Status;
> 
> +
> 
> +  //
> 
> +  // Make the PCI bus driver connect the root bridge, non-recursively. This
> 
> +  // will produce a number of child handles with PciIo on them.
> 
> +  //
> 
> +  Status = gBS->ConnectController (
> 
> +                  RootBridgeHandle, // ControllerHandle
> 
> +                  NULL,             // DriverImageHandle
> 
> +                  NULL,             // RemainingDevicePath -- produce all
> 
> +                                    //   children
> 
> +                  FALSE             // Recursive
> 
> +                  );
> 
> +  return Status;
> 
> +}
> 
> +
> 
>  /**
> 
>    Do the platform specific action before the console is connected.
> 
> 
> 
> @@ -157,6 +230,9 @@ PlatformBootManagerBeforeConsole (
>    EFI_INPUT_KEY                Down;
> 
>    EFI_BOOT_MANAGER_LOAD_OPTION BootOption;
> 
> 
> 
> +  VisitAllInstancesOfProtocol (&gEfiPciRootBridgeIoProtocolGuid,
> 
> +    ConnectRootBridge, NULL);
> 
> +
> 
>    PlatformConsoleInit ();
> 
> 
> 
>    //
> 
> --
> 2.27.0
> 
> 
> -=-=-=-=-=-=
> Groups.io Links: You receive all messages sent to this group.
> 
> View/Reply Online (#62679): https://edk2.groups.io/g/devel/message/62679
> Mute This Topic: https://groups.io/mt/75539006/1781375
> Group Owner: [email protected]
> Unsubscribe: https://edk2.groups.io/g/devel/unsub  [[email protected]]
> -=-=-=-=-=-=


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#65140): https://edk2.groups.io/g/devel/message/65140
Mute This Topic: https://groups.io/mt/75539006/21656
Group Owner: [email protected]
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to