Okay, so I just noticed that FmpDxe is full of module globals including the 
image descriptor, so it necessarily requires that the driver that includes it 
as a library can only ever control one controller.

Cheers,
Tom

On 27/11/2018 15:23, Tomas Pilar (tpilar) wrote:
>
> On 27/11/2018 14:33, Gao, Liming wrote:
>> Tom:
>>   FmpDeviceLib can use UEFI driver model/driver binding protocol so it can 
>> install FMP on its device handle during the BDS/Device connection phase. It 
>> can implement RegisterFmpInstaller() to install FMP protocol in its device 
>> handle. In this way, FmpDeviceLib is like UEFI driver with UEFI driver 
>> binding protocol. 
>>
>> Thanks
>> Liming
> Hi Liming,
>
> Sure, so now I can install FMP onto my ControllerHandle. Say that someone 
> gets the FMP and calls GetImageSize. The FmpDxeLib does some checks and then 
> it calls FmpDeviceLibGetImageSize() with no context parameter. This method is 
> supposed to be implemented by me, the driver writer, but how is the code in 
> this method meant to know which Controller are we getting the image size from?
>
> So maybe I can define some module globals, declare them in a cross include 
> file, include that in my driver and and have the driver populate the module 
> globals during probe. This immediately limits the usefulness by requiring 
> that each driver only ever drives one controller.
>
> And then you consider how to do a SetImage without being even given the 
> Handle of the Controller. Do you stuff the controller handle into a module 
> global parameter that gets populated during the BDS phase?
>
> I guess you could enumerate all FMP instances, see which one of them 
> advertises your ImageTypeId and get the handle that the FMP is installed on 
> that way. But that seems rather insane and would cause issues if you have two 
> of the same device in the platform, unless you check the HardwareInstance as 
> well? This seems insane.
>
> Cheers,
> Tom
>
>>> -----Original Message-----
>>> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of 
>>> Tomas Pilar (tpilar)
>>> Sent: Tuesday, November 27, 2018 9:26 PM
>>> To: edk2-devel@lists.01.org
>>> Subject: [edk2] FmpDeviceLib
>>>
>>> Hi all,
>>>
>>> I am looking at using FmpDxeLib so I need to implement the FmpDeviceLib. 
>>> However, it seems like the library functions do not take any
>>> private struct as a parameter, so I am struggling to figure out how to read 
>>> information off the hardware. FmpDxe does not even pass its
>>> created protocol instance when calling the library functions, leading me to 
>>> believe that the only way to do this is to assign a pointer to
>>> private struct during library construction, but that means that a driver 
>>> that uses the code can only ever service a single controller.
>>>
>>> Can you offer any insights?
>>>
>>> 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

Reply via email to