
Hi Simon,
On Fri, Jul 31, 2015 at 11:31 PM, Simon Glass sjg@chromium.org wrote:
When running as an EFI application, U-Boot must request memory from EFI, and provide access to the boot services U-Boot needs.
Add library code to perform these tasks. This includes efi_main() which is the entry point from EFI. U-Boot is built as a shared library.
Signed-off-by: Simon Glass sjg@chromium.org
Reviewed-by: Bin Meng bmeng.cn@gmail.com
But please see nits below.
Changes in v2:
- Add a comment as to why we only allocate pages below 4GB
- Add a comment as to why we use global_data_ptr
- Add comments as to why we need efi_memset(), efi_putc(), efi_puts()
- Avoid useless u64 cast on EFI_RUNTIME_SERVICES_SIGNATURE
- Drop __packed from struct efi_device_path
- Explain in a comment how the debug UART is implemented for the EFI app
- Fix 'command problem' typo - it should say 'command prompt'
- Fix 'withU-Boot.' typo
- Fix a few comment typos
- Fix efi_mem_desc_VERSION typo
- Fix mention of CHAR16 which should be wchar_t
- Fix missing struct comments
- Move the 64-bit payload code to a later patch
- Rename CONFIG_ARCH_EFI to CONFIG_EFI_APP
- Reword the efi_putc() unicode comment to make more sense
- Use image_base instead of ImageBase
- Use one-line comments when appropriate
- Use reserved instead of __reserved in struct efi_boot_services
arch/x86/include/asm/fsp/fsp_hob.h | 59 +----- include/efi.h | 357 +++++++++++++++++++++++++++++++++++++ include/efi_api.h | 244 +++++++++++++++++++++++++ include/part_efi.h | 9 +- lib/Kconfig | 2 + lib/Makefile | 1 + lib/efi/Kconfig | 33 ++++ lib/efi/Makefile | 7 + lib/efi/efi.c | 101 +++++++++++ lib/efi/efi_app.c | 139 +++++++++++++++ 10 files changed, 888 insertions(+), 64 deletions(-) create mode 100644 include/efi.h create mode 100644 include/efi_api.h create mode 100644 lib/efi/Kconfig create mode 100644 lib/efi/Makefile create mode 100644 lib/efi/efi.c create mode 100644 lib/efi/efi_app.c
[snip]
+/**
- struct efi_entry_hdr - Header for a table entry
- @type: enum eft_entry_t
- @size size of entry bytes excluding header and padding
- @addr: address of this entry (0 if it follows the header )
- @link: size of entry including header and padding
- @spare1: Spare space for expansion
- @spare2: Spare space for expansion
- @
Nits: please remove this @
- */
+struct efi_entry_hdr {
u32 type;
u32 size;
u64 addr;
u32 link;
u32 spare1;
u64 spare2;
+};
[snip]
diff --git a/lib/efi/efi.c b/lib/efi/efi.c new file mode 100644 index 0000000..c6454ea --- /dev/null +++ b/lib/efi/efi.c @@ -0,0 +1,101 @@ +/*
- Copyright (c) 2015 Google, Inc
- SPDX-License-Identifier: GPL-2.0+
- EFI information obtained here:
- Common EFI functions
- */
+#include <common.h> +#include <debug_uart.h> +#include <errno.h> +#include <linux/err.h> +#include <linux/types.h> +#include <efi.h> +#include <efi_api.h>
+DECLARE_GLOBAL_DATA_PTR;
+/*
- Unfortunately we cannot access any code outside what be build especially
Nits: what is built?
- for the stub. lib/string.c is already being built for the U-Boot payload
- so it using the wrong compiler flags. Add our own memset() here.
Nits: using -> uses?
- */
+static void efi_memset(void *ptr, int ch, int size) +{
char *dest = ptr;
while (size-- > 0)
*dest++ = ch;
+}
[snip]
Regards, Bin