From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2607:f8b0:4864:20::142; helo=mail-it1-x142.google.com; envelope-from=ard.biesheuvel@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-it1-x142.google.com (mail-it1-x142.google.com [IPv6:2607:f8b0:4864:20::142]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id A9E89210FBF06 for ; Thu, 27 Dec 2018 02:13:24 -0800 (PST) Received: by mail-it1-x142.google.com with SMTP id b5so23148900iti.2 for ; Thu, 27 Dec 2018 02:13:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=zoIdsLON8L8swp87XOWyl047kh+WKzJfpBfZI39L4h4=; b=VwlpN3u8NNiuaGNDl3SnDBDiNPWarOM/GkA4DBQ1zseP5jpeKZ9esVWtZ91SjrT9E3 InqFk05yRh4Nv6iLdt4H0EPtu5YYGViBjVlT/iQrhjfwimgwr+sTSkW8UwkL3aGdL6KS 93m1XdFKMAgE4N5K58oyxI3eOqHzQ5fgx2jlM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=zoIdsLON8L8swp87XOWyl047kh+WKzJfpBfZI39L4h4=; b=Wv9vVpY4yMZ5mNBCLHeEiSDWeJ4PuFHvV8+ibVqPiSfZgJlihiD1+2gxV8xoOuaKWi 03tGXw1Pb4rYal07bayLmdmKYa4BaJUtinLNfY3UMMRxlFb1B/6KpyIr663EQDWeBbp6 YUKV1+9tNHHl1/esTlJwWjZq4HC2xDVMI53PMPMkVRgCWB1/BMS6X/9mZy6jQt1F8XI6 nEFcBNPAOv2TTYzFJEWuIz0VZ+GolHn9ZNO4zPpzE3IwrpZvJOLuOo1KXpfGO50tZZMl Ls1Oawx0GLuMYIuvCqKP8MCJoPem0bDrdciWWdd4YtPXVj3h+DQczVm4i//6ojz0/Fzo nltQ== X-Gm-Message-State: AA+aEWaxulAiIGvaa0aJKLBZfGziQlNSKq/o3lBrIDDVmwM6M1L6eAKM ZJu5HAE4jTZk8/85r8Y6wWywi5CfWrgCu7ZGrVwD9w== X-Google-Smtp-Source: AFSGD/WOV85SQwJKlkuVMQDS/di5MD7jek1PZUQm5AwZxRnirRPfA9u2PXtHR7fhmT13yBqEiFdaWk9kO0PkXX8d95c= X-Received: by 2002:a02:183:: with SMTP id 3mr15327902jak.130.1545905603612; Thu, 27 Dec 2018 02:13:23 -0800 (PST) MIME-Version: 1.0 References: <20180920230145.7565-1-ard.biesheuvel@linaro.org> <20180920230145.7565-4-ard.biesheuvel@linaro.org> In-Reply-To: From: Ard Biesheuvel Date: Thu, 27 Dec 2018 11:13:12 +0100 Message-ID: To: "Kinney, Michael D" Cc: "edk2-devel@lists.01.org" , "Zimmer, Vincent" , "Richardson, Brian" , Andrew Fish , Leif Lindholm , "Zeng, Star" , "Dong, Eric" , "Ni, Ruiyu" , "Gao, Liming" , "Carsey, Jaben" , "Shi, Steven" Subject: Re: [PATCH v3 3/7] MdeModulePkg/PciBusDxe: invoke PE/COFF emulator for foreign option ROMs X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 27 Dec 2018 10:13:24 -0000 Content-Type: text/plain; charset="UTF-8" (digging up this old thread) On Wed, 26 Sep 2018 at 20:26, Kinney, Michael D 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 ; Zimmer, > > Vincent ; Richardson, Brian > > ; Kinney, Michael D > > ; Andrew Fish > > ; Leif Lindholm > > ; Zeng, Star > > ; Dong, Eric > > ; Ni, Ruiyu ; > > Gao, Liming ; Carsey, Jaben > > ; Shi, Steven > > > > 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 > > > > --- > > 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 > > #include > > #include > > +#include > > > > #include > > #include > > 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 >