Dong,
Looking at the current state of EBBR, Appendix A contains a big list of boot/runtime services and protocols that are required to be implemented. However, I don't think this list has been audited, and I'm not sure how much of it is actually needed. Some of these things (like the list of boot/runtime services) seem to be required by the UEFI spec, so it is redundant to list them here.
I'm also unsure on the list of protocols. Some I'm sure are already required by the UEFI spec. e.g., UEFI section 2.6.1 requires EFI_LOADED_IMAGE_PROTOCOL, EFI_LOADED_IMAGE_DEVICE_PATH, EFI_DEVICE_PATH_PROTOCOL, EFI_DECOMPRESS_PROTOCOL, and EFI_DEVICE_PATH_UTILITIES_PROTOCOL, so is it necessary to list them in EBBR?
Looking at the current U-Boot implementation, only the following protocols are implemented:
include/efi_api.h|277| #define LOADED_IMAGE_PROTOCOL_GUID \ include/efi_api.h|519| #define EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID \ include/efi_api.h|590| #define EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID \ include/efi_api.h|603| #define EFI_DEVICE_PATH_TO_TEXT_PROTOCOL_GUID \ include/efi_api.h|619| #define EFI_DEVICE_PATH_UTILITIES_PROTOCOL_GUID \ include/efi_api.h|853| #define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID \ include/efi_api.h|882| #define EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID \ include/efi_api.h|933| #define EFI_DRIVER_BINDING_PROTOCOL_GUID \
Presumably Grub and the kernel only use the above protocols, and they are sufficient to handle perform the distro installer use case. Yet it is not compliant with UEFI 2.7. Notably missing are:
UEFI § 2.6.1 - EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL - EFI_DEVICE_PATH_PROTOCOL - EFI_DECOMPRESS_PROTOCOL UEFI § 2.6.2 - EFI_SIMPLE_TEXT_EX_PROTOCOL - EFI_BLOCK_IO_PROTOCOL - EFI_DISK_IO_PROTOCOL - EFI_UNICODE_COLLATION_PROTOCOL - EFI_SERIAL_IO_PROTOCOL - EFI_USB2_HC_PROTOCOL - EFI_USB_IO_PROTOCOL
In fact, perhaps what EBBR needs is a list of exceptions to the UEFI § 2.6 requirements (expected to reduce over time as the U-Boot implementation matures). Thoughts?
For discussion, I've pasted the text of the current UEFI appendix below to make it easy to comment on the mailing list.
g.
---
.. _appendix-uefi-requirements:
############################################# APPENDIX A - UEFI Implementation Requirements #############################################
Required Boot Services **********************
========================================== ====== Service UEFI § ========================================== ====== EFI_RAISE_TPL 7.1 EFI_RESTORE_TPL 7.1 EFI_ALLOCATE_PAGES 7.2 EFI_FREE_PAGES 7.2 EFI_GET_MEMORY_MAP 7.2 EFI_ALLOCATE_POOL 7.2 EFI_FREE_POOL 7.2 EFI_CREATE_EVENT 7.1 EFI_SET_TIMER 7.1 EFI_WAIT_FOR_EVENT 7.1 EFI_SIGNAL_EVENT 7.1 EFI_CLOSE_EVENT 7.1 EFI_INSTALL_PROTOCOL_INTERFACE 7.3 EFI_REINSTALL_PROTOCOL_INTERFACE 7.3 EFI_UNINSTALL_PROTOCOL_INTERFACE 7.3 EFI_HANDLE_PROTOCOL 7.3 EFI_REGISTER_PROTOCOL_NOTIFY 7.3 EFI_LOCATE_HANDLE 7.3 EFI_LOCATE_PROTOCOL 7.3 EFI_LOCATE_DEVICE_PATH 7.3 EFI_INSTALL_CONFIGURATION_TABLE 7.3 EFI_IMAGE_LOAD 7.4 EFI_IMAGE_START 7.4 EFI_EXIT 7.4 EFI_IMAGE_UNLOAD 7.4 EFI_EXIT_BOOT_SERVICES 7.4 EFI_GET_NEXT_MONOTONIC_COUNT 7.5 EFI_STALL 7.5 EFI_SET_WATCHDOG_TIMER 7.5 EFI_CONNECT_CONTROLLER 7.3 EFI_DISCONNECT_CONTROLLER 7.3 EFI_OPEN_PROTOCOL 7.3 EFI_CLOSE_PROTOCOL 7.3 EFI_OPEN_PROTOCOL_INFORMATION 7.3 EFI_PROTOCOLS_PER_HANDLE 7.3 EFI_LOCATE_HANDLE_BUFFER 7.3 EFI_LOCATE_PROTOCOL 7.3 EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES 7.3 EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES 7.3 EFI_CALCULATE_CRC32 7.5 EFI_COPY_MEM 7.5 EFI_SET_MEM 7.5 EFI_CREATE_EVENT_EX 7.5 ========================================== ====== Required Runtime Services *************************
========================================== ====== Service UEFI § ========================================== ====== EFI_GET_TIME 8.3 EFI_SET_TIME 8.3 EFI_GET_WAKEUP_TIME 8.3 EFI_SET_WAKEUP_TIME 8.3 EFI_SET_VIRTUAL_ADDRESS_MAP 8.4 EFI_CONVERT_POINTER 8.4 EFI_GET_VARIABLE 8.2 EFI_GET_NEXT_VARIABLE_NAME 8.2 EFI_SET_VARIABLE 8.2 EFI_GET_NEXT_HIGH_MONO_COUNT 8.5 EFI_RESET_SYSTEM 8.5 EFI_UPDATE_CAPSULE 8.5 EFI_QUERY_CAPSULE_CAPABILITIES 8.5 EFI_QUERY_VARIABLE_INFO 8.5 ========================================== ======
.. note:: EFI_GET_WAKEUP_TIME and EFI_SET_WAKEUP_TIME must be implemented, but might simply return EFI_UNSUPPORTED.
Required UEFI Protocols ***********************
Core UEFI Protocols ===================
========================================== ====== Service UEFI § ========================================== ====== EFI_LOADED_IMAGE_PROTOCOL 9.1 EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL 9.2 EFI_DECOMPRESS_PROTOCOL 19.5 EFI_DEVICE_PATH_PROTOCOL 10.2 EFI_DEVICE_PATH_UTILITIES_PROTOCOL 10.3 ========================================== ======
Media I/O Protocols ===================
========================================== ====== Service UEFI § ========================================== ====== EFI_LOAD_FILE2_PROTOCOL 13.2 EFI_SIMPLE_FILE_SYSTEM_PROTOCOL 13.4 EFI_FILE_PROTOCOL 13.5 ========================================== ======
Console Protocols =================
========================================== ====== Service UEFI § ========================================== ====== EFI_SIMPLE_TEXT_INPUT_PROTOCOL 12.2 EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL 12.3 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL 12.4 ========================================== ====== Driver Configuration Protocols ==============================
========================================== ====== Service UEFI § ========================================== ====== EFI_HII_DATABASE_PROTOCOL 33.4 EFI_HII_STRING_PROTOCOL 33.4 EFI_HII_CONFIG_ROUTING_PROTOCOL 33.4 EFI_HII_CONFIG_ACCESS_PROTOCOL 33.4 ========================================== ======
Optional UEFI Protocols ***********************
Basic Networking Support ========================
============================================ ====== Service UEFI § ============================================ ====== EFI_SIMPLE_NETWORK_PROTOCOL 24.1 EFI_MANAGED_NETWORK_PROTOCOL 25.1 EFI_MANAGED_NETWORK_SERVICE_BINDING_PROTOCOL 25.1 ============================================ ======
.. note:: Networking services are optional on platforms that do not support networking.
Network Boot Protocols ======================
========================================== ====== Service UEFI § ========================================== ====== EFI_PXE_BASE_CODE_PROTOCOL 24.3 EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL 24.4 EFI_BIS_PROTOCOL 24.5 EFI_MTFTP4_PROTOCOL 30.3 EFI_MTFTP6_PROTOCOL 30.4 ========================================== ======
.. note:: EFI_BIS_PROTOCOL is optional on machines that do not support Secure Boot.
IPV4 Network Support ====================
========================================== ====== Service UEFI § ========================================== ====== EFI_ARP_PROTOCOL 29.1 EFI_ARP_SERVICE_BINDING_PROTOCOL 29.1 EFI_DHCP4_SERVICE_BINDING_PROTOCOL 29.2 EFI_DHCP4_PROTOCOL 29.2 EFI_TCP4_PROTOCOL 28.1.2 EFI_TCP4_SERVICE_BINDING_PROTOCOL 28.1.1 EFI_IP4_SERVICE_BINDING_PROTOCOL 28.3.1 EFI_IP4_CONFIG2_PROTOCOL 28.5 EFI_UDP4_PROTOCOL 30.1.2 EFI_UDP4_SERVICE_BINDING_PROTOCOL 30.1.1 ========================================== ======
.. note:: Networking services are optional on platforms that do not support networking.
IPV6 Network Support ====================
========================================== ====== Service UEFI § ========================================== ====== EFI_DHCP6_PROTOCOL 29.3.2 EFI_DHCP6_SERVICE_BINDING_PROTOCOL 29.3.1 EFI_TCP6_PROTOCOL 28.2.2 EFI_TCP6_SERVICE_BINDING_PROTOCOL 28.2.1 EFI_IP6_SERVICE_BINDING_PROTOCOL 28.6.1 EFI_IP6_CONFIG_PROTOCOL 28.7 EFI_UDP6_PROTOCOL 30.2.2 EFI_UDP6_SERVICE_BINDING_PROTOCOL 30.2.1 ========================================== ======
.. note:: Networking services are optional on platforms that do not support networking.
VLAN Protocols ==============
========================================== ====== Service UEFI § ========================================== ====== EFI_VLAN_CONFIG_PROTOCOL 27.1 ========================================== ======
iSCSI Protocols ===============
========================================== ====== Service UEFI § ========================================== ====== EFI_ISCSI_INITIATOR_NAME_PROTOCOL 16.2 ========================================== ======
.. note:: Support for iSCSI is only required on machines that lack persistent storage, such as a, HDD. This configuration is intended for thin clients and compute-only nodes
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.