In addition to my previous letter I have to mention a couple more newly 
discovered details.

1. UEFI Shell (ShellPkg) actually has 3 functions dedicated to connecting 
controllers and essentially doing the same thing:

- ConnectAllEfi
ShellPkg/Library/UefiShellLevel2CommandsLib/Load.c

This one locates all handles and runs connect on them. It is the one we 
mentioned in the bug.

- LoadPciRomConnectAllDriversToAllControllers
ShellPkg/Library/UefiShellDebug1CommandsLib/LoadPciRom.c

This one is similar to ConnectAllEfi. The only difference is that it 
additionally checks for Ctrl+C via ShellGetExecutionBreakFlag.

- ConnectControllers
ShellPkg/Library/UefiShellDriver1CommandsLib/Connect.c

This one is more complex, as it supports explicitly connecting specified 
controllers, however, for connecting all controllers it locates handles with 
gEfiDevicePathProtocolGuid. I.e. exactly what we ask. I believe that all these 
functions should behave the same way in correspondence to 
gBS->ConnectController at the very least, and most likely there should be a 
library responsible for connection and disconnection.

2. We also checked EFI 1.1 Shell, and confirmed that it consistently has checks 
for device path presence before running connect on the handle[1][2]. This makes 
us believe that our proposal is not really a firmware bug, but rather a 
limitation of the legacy specification.

Considering all these discoveries, we believe our suggested change is legit 
depending on the minimum supported UEFI version. Therefore we propose 
submitting a ControllerConnection library with 5 functions:

- ConnectController
- DisconnectController
- GetAllControllers
- ConnectAllControllers
- DisconnectAllControllers

Adopting it throughout the code will let the distribitor to be responsible for 
choosing what is right for his applications (or firmwares).

Best wishes,
Vitaly

[1] 
https://sourceforge.net/p/efi-shell/code/64/tree/trunk/Shell/LoadPciRom/LoadPciRom.c#l528
[2] 
https://sourceforge.net/p/efi-shell/code/64/tree/trunk/Shell/load/load.c#l312


> 14 янв. 2020 г., в 11:36, vit9696 <vit9...@protonmail.com> написал(а):
> 
> Ray,
> 
> We are quite reluctant to have patches in EDK II for a large amount of widely 
> adopted firmwares. Patches eventually break and require maintenance cost, and 
> currently we are trying to get rid of them all. We believe that EDK II Shell 
> is supposed to work on real world platforms and not only the ones that 
> theoretically support the specification. It is always hard to adopt changes 
> based on third-party bugs, and we very well understand your concern, yet it 
> is something we have to do to stay beneficial to the end user.
> 
> Best wishes,
> Vitaly
> 
> On Tue, Jan 14, 2020 at 05:53, Ni, Ray <ray...@intel.com 
> <mailto:ray...@intel.com>> wrote:
>> 
>> Vitaly,
>> 
>> I still have concern to modify the EDKII code to workaround a firmware bug.
>> 
>> Can you just change in your local version?
>> 
>>
>> Thanks,
>> 
>> Ray
>> 
>>
>> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Vitaly 
>> Cheptsov via Groups.Io
>> Sent: Tuesday, January 14, 2020 4:47 AM
>> To: Laszlo Ersek <ler...@redhat.com>; devel@edk2.groups.io; Ni, Ray 
>> <ray...@intel.com>; Gao, Zhichao <zhichao....@intel.com>
>> Subject: Re: [edk2-devel] [PATCH 1/1] ShellPkg: Do not connect handles 
>> without device paths
>> 
>>
>> Thanks all for your input,
>>
>> These explanations seem sufficient to us that it is not a good idea to 
>> change the behaviour for everyone. Even so, we still need this to be 
>> configurable in some way, as having to patch EDK II is impracticable.
>>
>> We believe there are three possible routes to approach this problem:
>>
>> Introduce a separate ControllerConnectionLib library for this function. 
>> While it is small, we found several places in our code that need to call it 
>> beyond UEFI Shell. This way different implementations could be used 
>> depending on the chosen library.
>> Introduce a ConnectRequiresDevicePath PCD, which will choose the preferred 
>> logic.
>> Introduce a -dp Shell argument for affected commands the way Lazslo 
>> suggested.
>>
>> We believe either route or a combination of multiple routes have their own 
>> benefits, and would suggest either going with 1+2 or with 3. Any approach is 
>> fine for us.
>>
>> We will submit V2 of the patch after hearing the opinions.
>>
>> Best wishes,
>> Vitaly
>>
>> On Mon, Jan 13, 2020 at 20:55, Laszlo Ersek <ler...@redhat.com 
>> <mailto:ler...@redhat.com>> wrote:
>> 
>> On 01/13/20 12:56, Ni, Ray wrote:
>> > We shouldn't assume that a DriverBindingStart() can only start on a handle 
>> > with device path installed. DevicePath protocol is just a special protocol.
>> > It's possible that a bus driver starts on a host controller handle and 
>> > creates multiple children, each with only a Specific_IO protocol installed.
>> > Certain device driver can start on the children handle and open the 
>> > Specific_IO protocol BY_DRIVER.
>> > I am not sure if certain today's network drivers may work like this. It's 
>> > allowed per UEFI spec.
>> 
>> I agree.
>> 
>> Under "10.2 EFI Device Path Protocol", the spec says, "If the handle
>> does not logically map to a physical device, the handle may not
>> necessarily support the device path protocol."
>> 
>> I think gBS->ConnectController() and
>> EFI_DRIVER_BINDING_PROTOCOL.Supported() should work on such handles.
>> 
>> If we'd like to work around related issues in drivers, then I'd suggest
>> new command line options for the "load", "connect", "reconnect" shell
>> commands (maybe more), for filtering out handles that do not carry
>> device paths. Such command line options could be added as an extension,
>> IIUC, such as "-_option". I.e., I believe it's not necessary to start
>> with UEFI Shell Spec updates.
>> 
>> Thanks
>> Laszlo
>> 
>>
>>
>> 
>> 
> 
> 


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#53214): https://edk2.groups.io/g/devel/message/53214
Mute This Topic: https://groups.io/mt/69653841/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to