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.
_______________________________________________
boot-architecture mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/boot-architecture

Reply via email to