Hi Mike, This all looks really good, I didn't envisage this way to design it (swapping contexts on demand) but it's much simpler than what I had in mind. I should be able to integrate this easily with my current FMP driver for our device and I should be able to get you some good testing.
Cheers, Tom On 28/02/2019 03:33, Kinney, Michael D wrote: > Hi Tomas, > > I have posted a branch in edk2-staging with the proposed > design changes to support multiple controller and a functional > example in OVMF using multiple E1000 adapters. > > https://github.com/tianocore/edk2-staging/tree/Bug_1525_FmpDevicePkg_MultipleControllers > > QEMU has a few limitations, so some aspects are simulated, > but you should be able to use the example as a template to > try your use case. > > The E1000 UEFI PCI device driver that uses FmpDxe as a > Library is located at the following location. > > OvmfPkg/E1000Fmp > > It uses the E1000 specific FmpDeviceLib instance at: > > OvmfPkg/Feature/Capsule/Library/FmpDeviceLibE1000 > > I have added device specific DSC files for each FMP driver > that are included from the OVMF DSC file. The one for > E1000 is at: > > OvmfPkg/Feature/Capsule/FmpE1000.dsc > > QEMU does not support update of the PCI Option ROM > mapped to a PCI device. So I simulate the update of a > FW storage device using a 32-byte UEFI Variable that > is unique for each adapter. > > Best regards, > > Mike > >> -----Original Message----- >> From: Tomas Pilar (tpilar) >> [mailto:tpi...@solarflare.com] >> Sent: Monday, February 11, 2019 2:37 AM >> To: Kinney, Michael D <michael.d.kin...@intel.com>; >> Andrew Fish <af...@apple.com>; edk2-devel@lists.01.org >> Subject: Re: [edk2] Self-replicating image >> >> Hi Mike, >> >> Sorry to say I have not yet filed a BZ. Would you like >> me to, or are you happy doing it? >> >> Cheers, >> Tom >> >> On 08/02/2019 17:59, Kinney, Michael D wrote: >>> Hi Thomas, >>> >>> I have been looking into this topic of multiple >> controllers this >>> week. I have some prototype code that I think >> resolves the issues >>> but needs a bit more work on some corner cases. >>> >>> I am using the PCI Option ROM use case to evaluate >> the changes. >>> PCI Option ROM can use Bus Specific Driver Override >> Protocol so >>> the driver from the option ROM manages the PCI >> controller the option >>> ROM is attached. PCI Option ROMs can also use the >> Driver Family >>> Override Protocol so one of the PCI Option ROMs can >> manage a group >>> of PCI controllers. >>> >>> It is also possible for an FMP driver for integrated >> devices to >>> manage multiple integrated devices if there is more >> than one of >>> the same device with FW storage. The multiple >> controller use case >>> is not limited to busses like PCI. >>> >>> The current version of the FmpDeviceLib is optimized >> for an FMP >>> instance that manages a single FW storage device. If >> an FmpDeviceLib >>> is intended to manage multiple FW storage devices, >> then a few >>> extra services in the FmpDeviceLib are required. >>> >>> The concept is to extend the FmpDeviceLib with a >> couple extra >>> APIs that add support for Stop()/Unload() operations >> and to >>> to set the context for the current FmpDeviceLib >> actions. >>> Have you entered a BZ for this issue yet? I can >> start adding >>> details in the BZ and post some proposed changes >> soon. >>> Best regards, >>> >>> Mike >>> >>>> -----Original Message----- >>>> From: edk2-devel [mailto:edk2-devel- >>>> boun...@lists.01.org] On Behalf Of Andrew Fish via >>>> edk2-devel >>>> Sent: Friday, February 8, 2019 9:16 AM >>>> To: Tomas Pilar (tpilar) <tpi...@solarflare.com> >>>> Cc: edk2-devel@lists.01.org >>>> Subject: Re: [edk2] Self-replicating image >>>> >>>> >>>> >>>>> On Feb 8, 2019, at 6:42 AM, Tomas Pilar (tpilar) >>>> <tpi...@solarflare.com> wrote: >>>>> Hi, >>>>> >>>>> I am currently pondering the most elegant way to >>>> implement capsule update for our devices that would >>>> work in the presence of multiple devices in the >> host. >>>>> Capsule allows embedding a driver that is executed >>>> prior to the update, which is very handy. Crypto >>>> library is quite large and would not fit into an >>>> OptionROM, so being able to supply FMP driver in the >>>> capsule is great. >>>>> However, if only one instance of the driver loads, >>>> the FMP upstream is currently written to support >> only >>>> one device per instance. So I wonder if there is a >>>> easy, neat way for my image to replicate on >>>> DriverBinding so that I end up with one instance per >>>> device. >>>> >>>> Tom, >>>> >>>> The usually model in EFI is to have one driver >> handle >>>> multiple things. >>>> >>>>> It looks like I should be able to do it with gBS- >>>>> LoadImage() and passing information about currently >>>> loaded image though I might have to CopyMem() the >> image >>>> itself to new location. >>>> gBS->LoadImage() will load and relocate the image to >> a >>>> malloced address of the correct memory type for the >>>> image. The inputs are just the source of the image, >> so >>>> no need to CopyMem() anything. gBS->StartImage() >> calls >>>> the entry point. >>>> >>>> Thanks, >>>> >>>> Andrew Fish >>>> >>>>> Thoughts? >>>>> >>>>> Cheers, >>>>> Tom >>>>> _______________________________________________ >>>>> edk2-devel mailing list >>>>> edk2-devel@lists.01.org >>>>> https://lists.01.org/mailman/listinfo/edk2-devel >>>> _______________________________________________ >>>> edk2-devel mailing list >>>> edk2-devel@lists.01.org >>>> https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel