On 2 September 2016 at 06:40, Heyi Guo heyi.guo@linaro.org wrote:
在 8/31/2016 6:39 PM, Leif Lindholm 写道:
On Wed, Aug 31, 2016 at 10:31:36AM +0100, Ard Biesheuvel wrote:
(+ Charles, Leif)
On 29 August 2016 at 08:45, Heyi Guo heyi.guo@linaro.org wrote:
[...]
- In SBBR, EFI_LOAD_FILE2_PROTOCOL is a required protocol. However,it
is not used for boot in UEFI, and is mainly used for loading PCIe option ROM in EDK2 implementation. So why is this protocol required while PCIe is not mandatory for ARM server?
My guess is that this is an oversight. If PCIe is not mandatory, then this protocol should not be mandatory either.
Interestingly, looking into this exposes a UEFI spec error: "In the case of EFI_LOAD_FILE2_PROTOCOL, the behavior is the same as above, except that it is only used if BootOption is FALSE"
(There is no BootOption, only BootPolicy.)
But EFI_LOAD_FILE2_PROTOCOL can also be used by anything wishing to load an image from a RAM location without describing it as a device path. So I think it needs to remain mandatory regardless.
(Although why isn't PCIe mandatory...?)
I didn't see anything in SBSA saying that PCIe is mandatory; it always says that "if PCIe is supported, ...", so I suppose PCIe is not mandatory in ARM server. Please correct me if I'm wrong.
In EDK2 implementation, EFI_LOAD_FILE2_PROTOCOL is installed to PCI IO device handle, so if there is no PCIe support in UEFI, there will not be this protocol instance and it will become not compliant to SBBR.
No, you shouldn't interpret it like that. The presence of the protocols can only be reasonably expected to be mandatory if the underlying devices are present as well. By the same reasoning, if support for the USB HID protocols were mandatory, that would not require you to have a keyboard or mouse connected in order to be compliant.
So what this means is, *if* a PCIe card with a UEFI compatible option ROM is plugged in, the firmware should produce the EFI_LOAD_FILE2_PROTOCOL protocol. If no PCIe slots exist, you can short circuit the above if to FALSE and remove the code and still be compliant.
- In SBBR, for IPv6 related protocols, it is said that they are optional
on platforms that do not support networking. The question is, on platforms that *do* support networking, do IPv6 protocols become mandatory? Or is it allowed for only supporting IPv4 protocols?
Charles, Leif?
I don't see a value in shipping a system today that does not support IPv6, and the SBBR seems to agree :)
If a specific hardware component (for some reason) could not be made to support IPv6, it would still be possible for the platform to be compliant as long as the relevant protocols were supported by the firmware, so that a plug-in card could still make use of IPv6.
Also from the view of implementation, shall we switch to network stack modules from NetworkPkg instead of MdeModulePkg? I think only the ones in NetworkPkg support IPv6.
Thanks.
Heyi
Regards,
Leif