On Thu, 27 Sep 2018 at 01:34, Kinney, Michael D <[email protected]> wrote: > > Hi Ard, > > Similar to my PciBusDxe feedback, it would be better if > the image supported information was determined by calling > LoadImage() and checking for an EFI_UNSUPPORTED return > value. > > This also has the advantage of reducing the number of > components that need to be aware of any new protocols > associated with emulation with the best case being the > DXE Core and the modules that provide the emulators. >
In this case, yes, I think we can drop the machine type check. > > -----Original Message----- > > From: edk2-devel [mailto:edk2-devel- > > [email protected]] On Behalf Of Ard Biesheuvel > > Sent: Thursday, September 20, 2018 4:02 PM > > To: [email protected] > > Cc: Ni, Ruiyu <[email protected]>; Zimmer, Vincent > > <[email protected]>; Dong, Eric > > <[email protected]>; Andrew Fish <[email protected]>; > > Carsey, Jaben <[email protected]>; Richardson, > > Brian <[email protected]>; Gao, Liming > > <[email protected]>; Kinney, Michael D > > <[email protected]>; Zeng, Star > > <[email protected]> > > Subject: [edk2] [PATCH v3 4/7] > > MdeModulePkg/UefiBootManagerLib: allow foreign > > Driver#### images > > > > Allow PE/COFF images that must execute under emulation > > for Driver#### > > options, by relaxing the machine type check to include > > support for > > machine types that is provided by an emulator. > > > > Contributed-under: TianoCore Contribution Agreement 1.1 > > Signed-off-by: Ard Biesheuvel > > <[email protected]> > > --- > > MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption.c > > | 51 +++++++++++++++++++- > > MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h > > | 1 + > > > > MdeModulePkg/Library/UefiBootManagerLib/UefiBootManager > > Lib.inf | 1 + > > 3 files changed, 52 insertions(+), 1 deletion(-) > > > > diff --git > > a/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption. > > c > > b/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption. > > c > > index 7bf96646c690..f6fda8f2c3f7 100644 > > --- > > a/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption. > > c > > +++ > > b/MdeModulePkg/Library/UefiBootManagerLib/BmLoadOption. > > c > > @@ -1185,6 +1185,54 @@ EfiBootManagerFreeLoadOptions ( > > return EFI_SUCCESS; > > } > > > > +STATIC > > +BOOLEAN > > +BmIsImageTypeSupported ( > > + IN UINT16 MachineType, > > + IN UINT16 SubSystem > > + ) > > +{ > > + 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, NULL)) { > > + ReturnValue = TRUE; > > + break; > > + } > > + } > > + > > + FreePool (HandleBuffer); > > + return ReturnValue; > > +} > > + > > /** > > Return whether the PE header of the load option is > > valid or not. > > > > @@ -1235,7 +1283,8 @@ BmIsLoadOptionPeHeaderValid ( > > OptionalHeader = (EFI_IMAGE_OPTIONAL_HEADER32 *) > > &PeHeader->Pe32.OptionalHeader; > > if ((OptionalHeader->Magic == > > EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC || > > OptionalHeader->Magic == > > EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC) && > > - EFI_IMAGE_MACHINE_TYPE_SUPPORTED (PeHeader- > > >Pe32.FileHeader.Machine) > > + BmIsImageTypeSupported (PeHeader- > > >Pe32.FileHeader.Machine, > > + OptionalHeader- > > >Subsystem) > > ) { > > // > > // Check the Subsystem: > > diff --git > > a/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h > > b/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h > > index 978fbff966f6..5f64ef304b87 100644 > > --- > > a/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h > > +++ > > b/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h > > @@ -47,6 +47,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS > > OF ANY KIND, EITHER EXPRESS OR IMPLIED. > > #include <Protocol/VariableLock.h> > > #include <Protocol/RamDisk.h> > > #include <Protocol/DeferredImageLoad.h> > > +#include <Protocol/PeCoffImageEmulator.h> > > > > #include <Guid/MemoryTypeInformation.h> > > #include <Guid/FileInfo.h> > > diff --git > > a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManag > > erLib.inf > > b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManag > > erLib.inf > > index 72c5ca1cd59e..09e2134acf8e 100644 > > --- > > a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManag > > erLib.inf > > +++ > > b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManag > > erLib.inf > > @@ -104,6 +104,7 @@ > > gEfiDevicePathProtocolGuid ## > > SOMETIMES_CONSUMES > > gEfiBootLogoProtocolGuid ## > > SOMETIMES_CONSUMES > > gEfiSimpleTextInputExProtocolGuid ## > > SOMETIMES_CONSUMES > > + gEdkiiPeCoffImageEmulatorProtocolGuid ## > > SOMETIMES_CONSUMES > > gEdkiiVariableLockProtocolGuid ## > > SOMETIMES_CONSUMES > > gEfiGraphicsOutputProtocolGuid ## > > SOMETIMES_CONSUMES > > gEfiUsbIoProtocolGuid ## > > SOMETIMES_CONSUMES > > -- > > 2.17.1 > > > > _______________________________________________ > > edk2-devel mailing list > > [email protected] > > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

