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:[email protected]] On Behalf Of Tomas 
>> Pilar (tpilar)
>> Sent: Tuesday, November 27, 2018 9:26 PM
>> To: [email protected]
>> 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
>> [email protected]
>> https://lists.01.org/mailman/listinfo/edk2-devel

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to