-
Notifications
You must be signed in to change notification settings - Fork 37
Required EFI protocols
Note
This page is obsolete and kept for convenience.
Currently EBBR indicates the mandatory EFI protocols primarily by citing from the UEFI specification (section 2.6 Requirements). This brings in a lot of conditional platform specific requirements that are not approprate for embedded systems (see #60).
Protocol | Comment |
---|---|
EFI_DEVICE_PATH_PROTOCOL | available |
EFI_DEVICE_PATH_TO_TEXT_PROTOCOL | Only nodes used in U-Boot supported |
EFI_DEVICE_PATH_UTILITIES_PROTOCOL | available |
EFI_UNICODE_COLLATION_PROTOCOL2 | available |
EFI_DRIVER_BINDING_PROTOCOL | can be consumed by ConnectController() |
EFI_SIMPLE_TEXT_INPUT_PROTOCOL | available |
EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL | available, toggle key cannot be set |
EFI_SIMPLE_TEXT_OUTPUT | available |
EFI_BLOCK_IO_PROTOCOL | available |
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL | available, FAT bugs to be resolved, _EX functions not implemented |
EFI_LOADED_IMAGE_PROTOCOL | available |
EFI_GRAPHICS_OUTPUT_PROTOCOL | available |
EFI_HII_STRING_PROTOCOL | stub for SCT -- needs to be rewritten. Used by Shell/SCT |
EFI_HII_DATABASE_PROTOCOL | available, only needed for shell (and hence needed by SCT) |
EFI_HII_CONFIG_ROUTING_PROTOCOL | removed as was only stub. Not needed for shell |
EFI_LOAD_FILE2_PROTOCOL | experimental support to provide initrd to Linux |
EFI_RNG_PROTOCOL | available if DM_RNG driver available |
EFI_SIMPLE_NETWORK_PROTOCOL | available, only required services |
EFI_PXE_BASE_CODE_PROTOCOL | stub for old versions of GRUB |
Cf. https://github.com/U-Boot-EFI/u-boot-sct-results/blob/master/PlatformConfig.ini
The following variables are set by U-Boot:
- BootCurrent
- BootNext (deleted by U-Boot)
- PlatformLangCodes
- PlatformLang (if initial)
- SignatureSupport
- OsIndicationsSupported
- SecureBoot
- SetupMode
- AuditMode
- DeployedMode
- PK (attributes changed)
- VendorKeys
- Capsule####
- CapsuleLast
- CapsuleMax
The following variables are read by U-Boot:
- Boot####
- BootNext
- BootOrder
- CapsuleLast
- CapsuleMax
- OsIndications
- PlatformLang (only to avoid overwriting, ignored otherwise)
- PK
- KEK
- dbx
- db
- LoadImage() should support EFI_LOAD_FILE2_PROTOCOL and EFI_LOAD_FILE_PROTOCOL
- ConnectController() should support EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL, EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL, EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL
EBBR compliant platform shall conform to a subset of the [UEFI]_ spec as listed in this section. Normally, UEFI compliance would require full compliance with all items listed in section 2.6 of the UEFI spec. However, the EBBR target market has a reduced set of requirements, and so some UEFI features are omitted as unnecessary.
This section overrides the requirements of [UEFI]_ § 2.6 for EBBR compliance.
Implement full access to UEFI Boot services, UEFI Runtime Services, consoles, and the system configuration tables.
All methods for boot services must be exist, even for behaviour that is not implemented. Methods shall return the appropriate error code for any unimplemented behaviour.
Method Specific Notes
Method | Note |
---|---|
ConnectController | The ConnectController() method is not required to implement support for EFI_PLATFORM_DRIVER_OVERRIDE_PROTOCOL, EFI_DRIVER_FAMILY_OVERRIDE_PROTOCOL, or EFI_BUS_SPECIFIC_DRIVER_OVERRIDE_PROTOCOL. |
LoadImage | LoadImage is only required to implement support for EFI_SIMPLE_FILE_SYSTEM_PROTOCOL, and does not need to implement EFI_LOAD_FILE_PROTOCOL or EFI_LOAD_FILE2_PROTOCOL support. |
** ACTION from 23/11/2020: Determine if U-Boot should just go ahead and implement full LoadImage support for the above.
All methods for runtime services must be implemented, even for behaviour that is not implemented. Methods shall return the appropriate error code for any unimplemented behaviour.
**Action: Deal with EFI_RUNTIME_SERVICES requirements table to be clearer ** Put table in this location
Heinrich: We should separate 2.6.1, 2.6.2, and 2.6.3 requirements
The following protocols must be implemented as described below
Protocol | Notes |
---|---|
EFI_LOADED_IMAGE_PROTOCOL | must be installed for each loaded image |
EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL | must be installed for each loaded image |
EFI_DEVICE_PATH_PROTOCOL | |
EFI_DEVICE_PATH_UTILITIES_PROTOCOL | |
EFI_DEVICE_PATH_TO_TEXT_PROTOCOL | U-Boot does not support all node types |
EFI_SIMPLE_TEXT_INPUT_PROTOCOL | |
EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL | |
EFI_BLOCK_IO_PROTOCOL | if platform has block device |
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL | if platform supports booting from block device |
EFI_SIMPLE_NETWORK_PROTOCOL | if platform supports booting from network |
EFI_RNG_PROTOCOL | Required if platform has a suitable hardware entropy source |
EFI_HII_STRING_PROTOCOL | required for EFI shell |
EFI_HII_DATABASE_PROTOCOL | required for EFI shell |
EFI_UNICODE_COLLATION2_PROTOCOL | required for EFI Shell |
Heinrich: We should separate 2.6.1, 2.6.2, and 2.6.3 requirements
The following protocols are required by UEFI section 2.6, but are optional for EBBR compliance. Reasoning for protocols being optional is given below
Protocol | Reason for being optional |
---|---|
EFI_DECOMPRESS_PROTOCOL | Seldom used interface, deemed unnecessary for primary use cases. Biggest benefit would be for drivers delivered by PCI card EPROMS like on graphics cards. But as these typically are x86 we would not be able run them without emulation on other architectures. |
EFI_DISK_IO_PROTOCOL | Deemed unnecessary as primary use cases use either the SIMPLE_FILE_SYSTEM_PROTOCOL, or the BLOCK_IO_PROTOCOL directly. The benefit of the EFI_DISK_IO_PROTOCOL over the EFI_BLOCK_IO_PROTOCOL is that it does not require alignment of buffers. |
EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL | |
EFI_EDID_* | Deemed unnecessary for primary use cases |
EFI_GRAPHICS_OUTPUT_PROTOCOL | text output should be good enough for most use cases |
EFI_PXE_BASE_CODE_PROTOCOL | TFTP is really insecure. |
EFI_HII_CONFIG_ACCESS_PROTOCOL | neither needed for EFI shell nor for SCT |
EFI_HII_CONFIG_ROUTING_PROTOCOL | neither needed for EFI shell nor for SCT |
EBBR compliant platforms are required to implement the following Global Variables as found in [UEFI]_ § 3.3. All other Global Variables are optional.
Variable Name | Description |
---|---|
Boot#### | A boot load option. #### is a numerical hex value |
BootCurrent | The boot option that was selected for the current boot |
BootNext | The boot option that will be used for the next boot only |
BootOrder | An ordered list of boot options. Firmware will attempt each Boot#### entry in this order |
OsIndications |