From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
To: "Kinney, Michael D" <michael.d.kinney@intel.com>
Cc: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
"Zimmer, Vincent" <vincent.zimmer@intel.com>,
"Richardson, Brian" <brian.richardson@intel.com>,
Andrew Fish <afish@apple.com>,
Leif Lindholm <leif.lindholm@linaro.org>,
"Zeng, Star" <star.zeng@intel.com>,
"Dong, Eric" <eric.dong@intel.com>,
"Ni, Ruiyu" <ruiyu.ni@intel.com>,
"Gao, Liming" <liming.gao@intel.com>,
"Carsey, Jaben" <jaben.carsey@intel.com>,
"Shi, Steven" <steven.shi@intel.com>
Subject: Re: [PATCH v3 3/7] MdeModulePkg/PciBusDxe: invoke PE/COFF emulator for foreign option ROMs
Date: Thu, 27 Dec 2018 11:13:12 +0100 [thread overview]
Message-ID: <CAKv+Gu8zy0jaqCT4og7Dw2ZMGQAQ+o7Kk=a8S2JqQSyATnfMqQ@mail.gmail.com> (raw)
In-Reply-To: <E92EE9817A31E24EB0585FDF735412F5B8AF4690@ORSMSX113.amr.corp.intel.com>
(digging up this old thread)
On Wed, 26 Sep 2018 at 20:26, Kinney, Michael D
<michael.d.kinney@intel.com> wrote:
>
> Hi Ard,
>
> I am wondering if we can simplify the PciBusDxe driver and
> remove the image type supported check and instead depend on
> LoadImage(). LoadImage() will return EFI_UNSUPPORTED if the
> image type is not supported.
>
I don't think so. A failure of gBS->LoadImage() is treated in a special way:
if (EFI_ERROR (Status)) {
//
// Record the Option ROM Image device path when LoadImage fails.
// PciOverride.GetDriver() will try to look for the Image Handle
using the device path later.
//
AddDriver (PciDevice, NULL, PciOptionRomImageDevicePath);
and other drivers in the same ROM image are disregarded. So it is
probably better to leave this logic alone, given that the override
implementation could be platform specific, and so we have no idea what
it might do.
>
> > -----Original Message-----
> > From: Ard Biesheuvel [mailto:ard.biesheuvel@linaro.org]
> > Sent: Thursday, September 20, 2018 4:02 PM
> > To: edk2-devel@lists.01.org
> > Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>; Zimmer,
> > Vincent <vincent.zimmer@intel.com>; Richardson, Brian
> > <brian.richardson@intel.com>; Kinney, Michael D
> > <michael.d.kinney@intel.com>; Andrew Fish
> > <afish@apple.com>; Leif Lindholm
> > <leif.lindholm@linaro.org>; Zeng, Star
> > <star.zeng@intel.com>; Dong, Eric
> > <eric.dong@intel.com>; Ni, Ruiyu <ruiyu.ni@intel.com>;
> > Gao, Liming <liming.gao@intel.com>; Carsey, Jaben
> > <jaben.carsey@intel.com>; Shi, Steven
> > <steven.shi@intel.com>
> > Subject: [PATCH v3 3/7] MdeModulePkg/PciBusDxe: invoke
> > PE/COFF emulator for foreign option ROMs
> >
> > When enumerating option ROM images, take into account
> > whether an emulator
> > exists that would allow dispatch of PE/COFF images
> > built for foreign
> > architectures.
> >
> > Contributed-under: TianoCore Contribution Agreement 1.1
> > Signed-off-by: Ard Biesheuvel
> > <ard.biesheuvel@linaro.org>
> > ---
> > MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.h |
> > 1 +
> > MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf |
> > 1 +
> > MdeModulePkg/Bus/Pci/PciBusDxe/PciOptionRomSupport.c |
> > 53 +++++++++++++++++++-
> > 3 files changed, 54 insertions(+), 1 deletion(-)
> >
> > diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.h
> > b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.h
> > index 55eb3a5a8070..dc57d4876c0f 100644
> > --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.h
> > +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.h
> > @@ -33,6 +33,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS
> > OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> > #include <Protocol/PciOverride.h>
> > #include <Protocol/PciEnumerationComplete.h>
> > #include <Protocol/IoMmu.h>
> > +#include <Protocol/PeCoffImageEmulator.h>
> >
> > #include <Library/DebugLib.h>
> > #include <Library/UefiDriverEntryPoint.h>
> > diff --git
> > a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
> > b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
> > index a21dd2b5edf4..c8b861093292 100644
> > --- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
> > +++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
> > @@ -96,6 +96,7 @@
> > gEfiIncompatiblePciDeviceSupportProtocolGuid ##
> > SOMETIMES_CONSUMES
> > gEfiLoadFile2ProtocolGuid ##
> > SOMETIMES_PRODUCES
> > gEdkiiIoMmuProtocolGuid ##
> > SOMETIMES_CONSUMES
> > + gEdkiiPeCoffImageEmulatorProtocolGuid ##
> > SOMETIMES_CONSUMES
> > gEfiLoadedImageDevicePathProtocolGuid ##
> > CONSUMES
> >
> > [FeaturePcd]
> > diff --git
> > a/MdeModulePkg/Bus/Pci/PciBusDxe/PciOptionRomSupport.c
> > b/MdeModulePkg/Bus/Pci/PciBusDxe/PciOptionRomSupport.c
> > index c2be85a906af..085bd5d571bd 100644
> > ---
> > a/MdeModulePkg/Bus/Pci/PciBusDxe/PciOptionRomSupport.c
> > +++
> > b/MdeModulePkg/Bus/Pci/PciBusDxe/PciOptionRomSupport.c
> > @@ -651,6 +651,55 @@ RomDecode (
> > }
> > }
> >
> > +STATIC
> > +BOOLEAN
> > +IsImageTypeSupported (
> > + IN UINT16 MachineType,
> > + IN UINT16 SubSystem,
> > + IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
> > + )
> > +{
> > + EFI_STATUS Status;
> > + EDKII_PECOFF_IMAGE_EMULATOR_PROTOCOL *Emu;
> > + UINTN HandleCount;
> > + EFI_HANDLE *HandleBuffer;
> > + BOOLEAN ReturnValue;
> > + UINTN Index;
> > +
> > + if (EFI_IMAGE_MACHINE_TYPE_SUPPORTED (MachineType))
> > {
> > + return TRUE;
> > + }
> > +
> > + Status = gBS->LocateHandleBuffer (
> > + ByProtocol,
> > +
> > &gEdkiiPeCoffImageEmulatorProtocolGuid,
> > + NULL,
> > + &HandleCount,
> > + &HandleBuffer
> > + );
> > + if (EFI_ERROR (Status)) {
> > + return FALSE;
> > + }
> > +
> > + ReturnValue = FALSE;
> > + for (Index = 0; Index < HandleCount; Index++) {
> > + Status = gBS->HandleProtocol (
> > + HandleBuffer[Index],
> > +
> > &gEdkiiPeCoffImageEmulatorProtocolGuid,
> > + (VOID **)&Emu
> > + );
> > + ASSERT_EFI_ERROR (Status);
> > +
> > + if (Emu->IsImageSupported (Emu, MachineType,
> > SubSystem, DevicePath)) {
> > + ReturnValue = TRUE;
> > + break;
> > + }
> > + }
> > +
> > + FreePool (HandleBuffer);
> > + return ReturnValue;
> > +}
> > +
> > /**
> > Load and start the Option Rom image.
> >
> > @@ -715,7 +764,9 @@ ProcessOpRomImage (
> > //
> > // Skip the EFI PCI Option ROM image if its
> > machine type is not supported
> > //
> > - if (!EFI_IMAGE_MACHINE_TYPE_SUPPORTED
> > (EfiRomHeader->EfiMachineType)) {
> > + if (!IsImageTypeSupported(EfiRomHeader-
> > >EfiMachineType,
> > + EfiRomHeader-
> > >EfiSubsystem,
> > + PciDevice->DevicePath))
> > {
> > goto NextImage;
> > }
> >
> > --
> > 2.17.1
>
next prev parent reply other threads:[~2018-12-27 10:13 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-09-20 23:01 [PATCH v3 0/7] MdeModulePkg: add support for dispatching foreign arch PE/COFF images Ard Biesheuvel
2018-09-20 23:01 ` [PATCH v3 1/7] MdeModulePkg: introduce PE/COFF image emulator protocol Ard Biesheuvel
2018-09-26 9:58 ` Zeng, Star
2018-09-26 10:13 ` Ard Biesheuvel
2018-09-26 17:32 ` Kinney, Michael D
2018-09-27 0:48 ` Zeng, Star
2018-09-27 10:58 ` Ard Biesheuvel
2018-09-27 15:36 ` Kinney, Michael D
2018-09-28 3:05 ` Zeng, Star
2018-09-28 3:08 ` Zeng, Star
2018-09-28 6:34 ` Ni, Ruiyu
2018-09-28 7:02 ` Zeng, Star
2018-09-20 23:01 ` [PATCH v3 2/7] MdeModulePkg/DxeCore: invoke the emulator protocol for foreign images Ard Biesheuvel
2018-09-20 23:01 ` [PATCH v3 3/7] MdeModulePkg/PciBusDxe: invoke PE/COFF emulator for foreign option ROMs Ard Biesheuvel
2018-09-26 18:26 ` Kinney, Michael D
2018-12-27 10:13 ` Ard Biesheuvel [this message]
2018-09-20 23:01 ` [PATCH v3 4/7] MdeModulePkg/UefiBootManagerLib: allow foreign Driver#### images Ard Biesheuvel
2018-09-26 23:34 ` Kinney, Michael D
2018-12-27 10:16 ` Ard Biesheuvel
2018-09-20 23:01 ` [PATCH v3 5/7] MdeModulePkg/EbcDxe: implement the PE/COFF emulator protocol Ard Biesheuvel
2018-09-20 23:01 ` [PATCH v3 6/7] MdePkg/UefiBaseType.h: treat EBC as a non-native machine type Ard Biesheuvel
2018-09-20 23:01 ` [PATCH v3 7/7] MdeModulePkg/DxeCore: remove explicit EBC handling Ard Biesheuvel
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='CAKv+Gu8zy0jaqCT4og7Dw2ZMGQAQ+o7Kk=a8S2JqQSyATnfMqQ@mail.gmail.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