Hi Bin, On 24 July 2015 at 02:19, Bin Meng <bmeng...@gmail.com> wrote: > Hi Simon, > > On Wed, Jul 22, 2015 at 11:49 PM, Simon Glass <s...@chromium.org> wrote: >> The EFI stub can pass a table to U-Boot with information about the memory map >> Potentially other things will follow. Add a way to access this table. >> >> Signed-off-by: Simon Glass <s...@chromium.org> >> --- >> > > Reviewed-by: Bin Meng <bmeng...@gmail.com> > > But please see nits below. > >> lib/efi/Makefile | 1 + >> lib/efi/efi_info.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ >> 2 files changed, 48 insertions(+) >> create mode 100644 lib/efi/efi_info.c >> >> diff --git a/lib/efi/Makefile b/lib/efi/Makefile >> index ba2824e..84bc5e3 100644 >> --- a/lib/efi/Makefile >> +++ b/lib/efi/Makefile >> @@ -5,6 +5,7 @@ >> # >> >> obj-$(CONFIG_ARCH_EFI) += efi_app.o efi.o >> +obj-$(CONFIG_EFI_STUB) += efi_info.o >> >> CFLAGS_REMOVE_efi_stub.o := -mregparm=3 \ >> $(if $(CONFIG_EFI_STUB_64BIT),-march=i386 -m32) >> diff --git a/lib/efi/efi_info.c b/lib/efi/efi_info.c >> new file mode 100644 >> index 0000000..0cd9a7e >> --- /dev/null >> +++ b/lib/efi/efi_info.c >> @@ -0,0 +1,47 @@ >> +/* >> + * Copyright (c) 2015 Google, Inc >> + * >> + * SPDX-License-Identifier: GPL-2.0+ >> + * >> + * Access to the EFI information table >> + */ >> + >> +#include <common.h> >> +#include <efi.h> >> +#include <errno.h> >> +#include <mapmem.h> >> + >> +int efi_info_get(enum efi_entry_t type, void **datap, int *sizep) >> +{ >> + struct efi_entry_hdr *entry; >> + struct efi_info_hdr *info; >> + int ret; >> + >> + if (!gd->arch.table) >> + return -ENODATA; >> + >> + info = map_sysmem(gd->arch.table, 0); > > Is map_sysmem() necessary? I think it only matters for sandbox. If > not, please remove.
That's true but I think it is good practice to use it most of the time. It avoids a cast and I suspect we may consider adding a sandbox EFI implementation in future. > >> + if (info->version != EFI_TABLE_VERSION) { >> + ret = -EPROTONOSUPPORT; >> + goto err; >> + } >> + >> + entry = (struct efi_entry_hdr *)((ulong)info + info->hdr_size); >> + while (entry->type != EFIET_END) { >> + if (entry->type == type) { >> + if (entry->addr) >> + *datap = map_sysmem(entry->addr, >> entry->size); >> + else >> + *datap = entry + 1; >> + *sizep = entry->size; >> + return 0; >> + } >> + entry = (struct efi_entry_hdr *)((ulong)entry + entry->link); >> + } >> + >> + ret = -ENOENT; >> +err: >> + unmap_sysmem(info); >> + >> + return ret; >> +} >> -- > > Regards, > Bin Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot