[PATCH v2 08/11] efi_loader: move file-system helpers to efi_app_common

Heinrich Schuchardt heinrich.schuchardt at canonical.com
Mon Jun 22 11:44:20 CEST 2026


On 6/22/26 10:08, Ilias Apalodimas wrote:
> Hi Heinrich
> 
> On Sun, 21 Jun 2026 at 11:19, Heinrich Schuchardt
> <heinrich.schuchardt at canonical.com> wrote:
>>
>> Move the shared file-system utilities to efi_app_common:
>>
>> * open_file_system() - open the simple file system protocol, first
>>    trying the partition the image was loaded from, then the UEFI system
>>    partition.
>> * get_config_table()  - look up an EFI configuration table by GUID.
>> * save_file()         - write a buffer to a named file, prompting for
>>    confirmation if the file already exists.
>>
>> get_config_table() supersedes the private get_dtb() in dtbdump and
>> get_dbg_info() in dbginfodump; both call-sites are updated to use it.
>>
>> dtbdump's do_save() and initrddump's do_save() are simplified to use
>> the common save_file(), eliminating duplicate file-open/write/close
>> sequences.
>>
>> smbiosdump's private get_config_table(), open_file_system() and
>> save_file() are removed; the common versions take their place.
>>
>> GUID declarations that are no longer referenced after these removals
>> are dropped from each app's file-scope variables.
>>
>> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt at canonical.com>
>> ---
> 
> Don't we need the function description for the documentation now that
> it's in a common file?

Thank you for reviewing.

Exported functions have descriptions in efi_app_common.h.

Adding a chapter to the documentation to explain how to create a new app 
including a link to efi_app_common.h make sense. I guess this can be 
done in a follow up patch.

Best regards

Heinrich

> 
> In any case
> Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
> 
>> v2:
>>          new patch
>> ---
>>   lib/efi_loader/dbginfodump.c    |  22 +-----
>>   lib/efi_loader/dtbdump.c        | 120 +-----------------------------
>>   lib/efi_loader/efi_app_common.c | 105 +++++++++++++++++++++++++++
>>   lib/efi_loader/efi_app_common.h |  27 +++++++
>>   lib/efi_loader/initrddump.c     |  69 +-----------------
>>   lib/efi_loader/smbiosdump.c     | 125 --------------------------------
>>   6 files changed, 141 insertions(+), 327 deletions(-)
>>
>> diff --git a/lib/efi_loader/dbginfodump.c b/lib/efi_loader/dbginfodump.c
>> index 4808fe254fe..b54c3830a66 100644
>> --- a/lib/efi_loader/dbginfodump.c
>> +++ b/lib/efi_loader/dbginfodump.c
>> @@ -91,26 +91,6 @@ static void do_help(void)
>>          error(u"exit       - exit the shell\r\n");
>>   }
>>
>> -/**
>> - * get_dbg_info_table() - get debug info table
>> - *
>> - * Return:     debug info table or NULL
>> - */
>> -static void *get_dbg_info(void)
>> -{
>> -       void *dbg = NULL;
>> -       efi_uintn_t i;
>> -
>> -       for (i = 0; i < systable->nr_tables; ++i) {
>> -               if (!memcmp(&systable->tables[i].guid, &dbg_info_guid,
>> -                           sizeof(efi_guid_t))) {
>> -                       dbg = systable->tables[i].table;
>> -                       break;
>> -               }
>> -       }
>> -       return dbg;
>> -}
>> -
>>   /**
>>    * print_info() - print loaded image protocol
>>    */
>> @@ -144,7 +124,7 @@ static efi_status_t do_dump(void)
>>          struct dbg_info_header *dbg;
>>          u32 count;
>>
>> -       dbg = get_dbg_info();
>> +       dbg = get_config_table(&dbg_info_guid);
>>          if (!dbg) {
>>                  error(u"Debug info table not found\r\n");
>>                  return EFI_NOT_FOUND;
>> diff --git a/lib/efi_loader/dtbdump.c b/lib/efi_loader/dtbdump.c
>> index 559c64be7f7..0d56a41ecf6 100644
>> --- a/lib/efi_loader/dtbdump.c
>> +++ b/lib/efi_loader/dtbdump.c
>> @@ -7,7 +7,6 @@
>>    */
>>
>>   #include <efi_dt_fixup.h>
>> -#include <part.h>
>>   #include <linux/libfdt.h>
>>   #include "efi_app_common.h"
>>
>> @@ -18,14 +17,10 @@
>>
>>   static struct efi_boot_services *bs;
>>   static const efi_guid_t fdt_guid = EFI_FDT_GUID;
>> -static const efi_guid_t loaded_image_guid = EFI_LOADED_IMAGE_PROTOCOL_GUID;
>> -static const efi_guid_t guid_simple_file_system_protocol =
>> -                                       EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID;
>>   static efi_handle_t handle;
>>   static struct efi_system_table *systable;
>>   static const efi_guid_t efi_dt_fixup_protocol_guid = EFI_DT_FIXUP_PROTOCOL_GUID;
>>   static const efi_guid_t efi_file_info_guid = EFI_FILE_INFO_GUID;
>> -static const efi_guid_t efi_system_partition_guid = PARTITION_SYSTEM_GUID;
>>
>>   /**
>>    * print_char() - print character
>> @@ -66,27 +61,6 @@ static u32 f2h(fdt32_t val)
>>          return *(u32 *)buf;
>>   }
>>
>> -/**
>> - * get_dtb() - get device tree
>> - *
>> - * @systable:  system table
>> - * Return:     device tree or NULL
>> - */
>> -static void *get_dtb(struct efi_system_table *systable)
>> -{
>> -       void *dtb = NULL;
>> -       efi_uintn_t i;
>> -
>> -       for (i = 0; i < systable->nr_tables; ++i) {
>> -               if (!memcmp(&systable->tables[i].guid, &fdt_guid,
>> -                           sizeof(efi_guid_t))) {
>> -                       dtb = systable->tables[i].table;
>> -                       break;
>> -               }
>> -       }
>> -       return dtb;
>> -}
>> -
>>   /**
>>    * do_help() - print help
>>    */
>> @@ -98,52 +72,6 @@ static void do_help(void)
>>          error(u"exit       - exit the shell\r\n");
>>   }
>>
>> -/**
>> - * open_file_system() - open simple file system protocol
>> - *
>> - * file_system:        interface of the simple file system protocol
>> - * Return:     status code
>> - */
>> -static efi_status_t
>> -open_file_system(struct efi_simple_file_system_protocol **file_system)
>> -{
>> -       struct efi_loaded_image *loaded_image;
>> -       efi_status_t ret;
>> -       efi_handle_t *handle_buffer = NULL;
>> -       efi_uintn_t count;
>> -
>> -       ret = bs->open_protocol(handle, &loaded_image_guid,
>> -                               (void **)&loaded_image, NULL, NULL,
>> -                               EFI_OPEN_PROTOCOL_GET_PROTOCOL);
>> -       if (ret != EFI_SUCCESS) {
>> -               error(u"Loaded image protocol not found\r\n");
>> -               return ret;
>> -       }
>> -
>> -       /* Open the simple file system protocol on the same partition */
>> -       ret = bs->open_protocol(loaded_image->device_handle,
>> -                               &guid_simple_file_system_protocol,
>> -                               (void **)file_system, NULL, NULL,
>> -                               EFI_OPEN_PROTOCOL_GET_PROTOCOL);
>> -       if (ret == EFI_SUCCESS)
>> -               return ret;
>> -
>> -       /* Open the simple file system protocol on the UEFI system partition */
>> -       ret = bs->locate_handle_buffer(BY_PROTOCOL, &efi_system_partition_guid,
>> -                                      NULL, &count, &handle_buffer);
>> -       if (ret == EFI_SUCCESS && handle_buffer)
>> -               ret = bs->open_protocol(handle_buffer[0],
>> -                                       &guid_simple_file_system_protocol,
>> -                                       (void **)file_system, NULL, NULL,
>> -                                       EFI_OPEN_PROTOCOL_GET_PROTOCOL);
>> -       if (ret != EFI_SUCCESS)
>> -               error(u"Failed to open simple file system protocol\r\n");
>> -       if (handle_buffer)
>> -               bs->free_pool(handle_buffer);
>> -
>> -       return ret;
>> -}
>> -
>>   /**
>>    * do_load() - load and install device-tree
>>    *
>> @@ -289,13 +217,11 @@ out:
>>    */
>>   static efi_status_t do_save(u16 *filename)
>>   {
>> -       struct efi_simple_file_system_protocol *file_system;
>> -       efi_uintn_t dtb_size;
>> -       struct efi_file_handle *root, *file;
>>          struct fdt_header *dtb;
>> +       efi_uintn_t dtb_size;
>>          efi_uintn_t ret;
>>
>> -       dtb = get_dtb(systable);
>> +       dtb = get_config_table(&fdt_guid);
>>          if (!dtb) {
>>                  error(u"DTB not found\r\n");
>>                  return EFI_NOT_FOUND;
>> @@ -308,45 +234,7 @@ static efi_status_t do_save(u16 *filename)
>>
>>          filename = skip_whitespace(filename);
>>
>> -       ret = open_file_system(&file_system);
>> -       if (ret != EFI_SUCCESS)
>> -               return ret;
>> -
>> -       /* Open volume */
>> -       ret = file_system->open_volume(file_system, &root);
>> -       if (ret != EFI_SUCCESS) {
>> -               error(u"Failed to open volume\r\n");
>> -               return ret;
>> -       }
>> -       /* Check if file already exists */
>> -       ret = root->open(root, &file, filename, EFI_FILE_MODE_READ, 0);
>> -       if (ret == EFI_SUCCESS) {
>> -               file->close(file);
>> -               print(u"Overwrite existing file (y/n)? ");
>> -               ret = efi_input_yn();
>> -               print(u"\r\n");
>> -               if (ret != EFI_SUCCESS) {
>> -                       root->close(root);
>> -                       error(u"Aborted by user\r\n");
>> -                       return ret;
>> -               }
>> -       }
>> -
>> -       /* Create file */
>> -       ret = root->open(root, &file, filename,
>> -                        EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE |
>> -                        EFI_FILE_MODE_CREATE, EFI_FILE_ARCHIVE);
>> -       if (ret == EFI_SUCCESS) {
>> -               /* Write file */
>> -               ret = file->write(file, &dtb_size, dtb);
>> -               if (ret != EFI_SUCCESS)
>> -                       error(u"Failed to write file\r\n");
>> -               file->close(file);
>> -       } else {
>> -               error(u"Failed to open file\r\n");
>> -       }
>> -       root->close(root);
>> -
>> +       ret = save_file(filename, dtb, dtb_size);
>>          if (ret == EFI_SUCCESS) {
>>                  print(filename);
>>                  print(u" written\r\n");
>> @@ -479,7 +367,7 @@ static efi_status_t do_dump(void)
>>          const char *strings;
>>          u32 level = 0;
>>
>> -       fdt = get_dtb(systable);
>> +       fdt = get_config_table(&fdt_guid);
>>          if (!fdt) {
>>                  error(u"DTB not found\r\n");
>>                  return EFI_NOT_FOUND;
>> diff --git a/lib/efi_loader/efi_app_common.c b/lib/efi_loader/efi_app_common.c
>> index 6bd52e08d28..af9799557fc 100644
>> --- a/lib/efi_loader/efi_app_common.c
>> +++ b/lib/efi_loader/efi_app_common.c
>> @@ -6,6 +6,7 @@
>>    */
>>
>>   #include <efi_api.h>
>> +#include <part.h>
>>   #include "efi_app_common.h"
>>
>>   static efi_handle_t app_handle;
>> @@ -15,6 +16,9 @@ struct efi_boot_services *bs;
>>   static bool nocolor;
>>   static struct efi_system_table *systable;
>>   static const efi_guid_t loaded_image_guid = EFI_LOADED_IMAGE_PROTOCOL_GUID;
>> +static const efi_guid_t guid_simple_file_system_protocol =
>> +       EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID;
>> +static const efi_guid_t efi_system_partition_guid = PARTITION_SYSTEM_GUID;
>>
>>   static u16 *get_load_options(void)
>>   {
>> @@ -199,3 +203,104 @@ efi_status_t efi_input(u16 *buffer, efi_uintn_t buffer_size)
>>                  }
>>          }
>>   }
>> +
>> +void *get_config_table(const efi_guid_t *guid)
>> +{
>> +       size_t i;
>> +
>> +       for (i = 0; i < systable->nr_tables; ++i) {
>> +               if (!memcmp(guid, &systable->tables[i].guid, 16))
>> +                       return systable->tables[i].table;
>> +       }
>> +
>> +       return NULL;
>> +}
>> +
>> +efi_status_t
>> +open_file_system(struct efi_simple_file_system_protocol **file_system)
>> +{
>> +       struct efi_loaded_image *loaded_image;
>> +       efi_status_t ret;
>> +       efi_handle_t *handle_buffer = NULL;
>> +       efi_uintn_t count;
>> +
>> +       ret = bs->open_protocol(app_handle, &loaded_image_guid,
>> +                               (void **)&loaded_image, NULL, NULL,
>> +                               EFI_OPEN_PROTOCOL_GET_PROTOCOL);
>> +       if (ret != EFI_SUCCESS) {
>> +               error(u"Loaded image protocol not found\r\n");
>> +               return ret;
>> +       }
>> +
>> +       /* Open the simple file system protocol on the same partition */
>> +       ret = bs->open_protocol(loaded_image->device_handle,
>> +                               &guid_simple_file_system_protocol,
>> +                               (void **)file_system, NULL, NULL,
>> +                               EFI_OPEN_PROTOCOL_GET_PROTOCOL);
>> +       if (ret == EFI_SUCCESS)
>> +               return ret;
>> +
>> +       /* Open the simple file system protocol on the UEFI system partition */
>> +       ret = bs->locate_handle_buffer(BY_PROTOCOL, &efi_system_partition_guid,
>> +                                      NULL, &count, &handle_buffer);
>> +       if (ret == EFI_SUCCESS && handle_buffer)
>> +               ret = bs->open_protocol(handle_buffer[0],
>> +                                       &guid_simple_file_system_protocol,
>> +                                       (void **)file_system, NULL, NULL,
>> +                                       EFI_OPEN_PROTOCOL_GET_PROTOCOL);
>> +       if (ret != EFI_SUCCESS)
>> +               error(u"Failed to open simple file system protocol\r\n");
>> +       if (handle_buffer)
>> +               bs->free_pool(handle_buffer);
>> +
>> +       return ret;
>> +}
>> +
>> +efi_status_t save_file(u16 *filename, void *buf, efi_uintn_t size)
>> +{
>> +       efi_uintn_t ret;
>> +       struct efi_simple_file_system_protocol *file_system;
>> +       struct efi_file_handle *root, *file;
>> +
>> +       ret = open_file_system(&file_system);
>> +       if (ret != EFI_SUCCESS)
>> +               return ret;
>> +
>> +       /* Open volume */
>> +       ret = file_system->open_volume(file_system, &root);
>> +       if (ret != EFI_SUCCESS) {
>> +               error(u"Failed to open volume\r\n");
>> +               return ret;
>> +       }
>> +       /* Check if file already exists */
>> +       ret = root->open(root, &file, filename, EFI_FILE_MODE_READ, 0);
>> +       if (ret == EFI_SUCCESS) {
>> +               file->close(file);
>> +               print(u"Overwrite existing file (y/n)? ");
>> +               ret = efi_input_yn();
>> +               print(u"\r\n");
>> +               if (ret != EFI_SUCCESS) {
>> +                       root->close(root);
>> +                       error(u"Aborted by user\r\n");
>> +                       return ret;
>> +               }
>> +       }
>> +
>> +       /* Create file */
>> +       ret = root->open(root, &file, filename,
>> +                        EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE |
>> +                                EFI_FILE_MODE_CREATE,
>> +                        EFI_FILE_ARCHIVE);
>> +       if (ret == EFI_SUCCESS) {
>> +               /* Write file */
>> +               ret = file->write(file, &size, buf);
>> +               if (ret != EFI_SUCCESS)
>> +                       error(u"Failed to write file\r\n");
>> +               file->close(file);
>> +       } else {
>> +               error(u"Failed to open file\r\n");
>> +       }
>> +       root->close(root);
>> +
>> +       return ret;
>> +}
>> diff --git a/lib/efi_loader/efi_app_common.h b/lib/efi_loader/efi_app_common.h
>> index ff37f3413eb..77fe100afd9 100644
>> --- a/lib/efi_loader/efi_app_common.h
>> +++ b/lib/efi_loader/efi_app_common.h
>> @@ -101,4 +101,31 @@ efi_status_t efi_input_yn(void);
>>    */
>>   efi_status_t efi_input(u16 *buffer, efi_uintn_t buffer_size);
>>
>> +/**
>> + * get_config_table() - get configuration table
>> + *
>> + * @guid:       GUID of the configuration table
>> + * Return:      pointer to configuration table or NULL
>> + */
>> +void *get_config_table(const efi_guid_t *guid);
>> +
>> +/**
>> + * open_file_system() - open simple file system protocol
>> + *
>> + * @file_system: interface of the simple file system protocol
>> + * Return:       status code
>> + */
>> +efi_status_t
>> +open_file_system(struct efi_simple_file_system_protocol **file_system);
>> +
>> +/**
>> + * save_file() - save buffer to a file on the EFI system partition
>> + *
>> + * @filename:   file name
>> + * @buf:        buffer to write
>> + * @size:       size of the buffer
>> + * Return:      status code
>> + */
>> +efi_status_t save_file(u16 *filename, void *buf, efi_uintn_t size);
>> +
>>   #endif /* _EFI_APP_COMMON_H */
>> diff --git a/lib/efi_loader/initrddump.c b/lib/efi_loader/initrddump.c
>> index 0a025c1a841..c3e6f2b683f 100644
>> --- a/lib/efi_loader/initrddump.c
>> +++ b/lib/efi_loader/initrddump.c
>> @@ -19,9 +19,6 @@
>>
>>   static struct efi_system_table *systable;
>>   static struct efi_boot_services *bs;
>> -static const efi_guid_t loaded_image_guid = EFI_LOADED_IMAGE_PROTOCOL_GUID;
>> -static const efi_guid_t guid_simple_file_system_protocol =
>> -                                       EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID;
>>   static const efi_guid_t load_file2_guid = EFI_LOAD_FILE2_PROTOCOL_GUID;
>>   static efi_handle_t handle;
>>
>> @@ -143,9 +140,6 @@ static efi_status_t do_load(void)
>>    */
>>   static efi_status_t do_save(u16 *filename)
>>   {
>> -       struct efi_loaded_image *loaded_image;
>> -       struct efi_simple_file_system_protocol *file_system;
>> -       struct efi_file_handle *root, *file;
>>          void *initrd;
>>          efi_uintn_t initrd_size;
>>          efi_uintn_t ret;
>> @@ -156,68 +150,13 @@ static efi_status_t do_save(u16 *filename)
>>
>>          filename = skip_whitespace(filename);
>>
>> -       ret = bs->open_protocol(handle, &loaded_image_guid,
>> -                               (void **)&loaded_image, NULL, NULL,
>> -                               EFI_OPEN_PROTOCOL_GET_PROTOCOL);
>> -       if (ret != EFI_SUCCESS) {
>> -               error(u"Loaded image protocol not found\r\n");
>> -               goto out;
>> -       }
>> -
>> -       /* Open the simple file system protocol */
>> -       ret = bs->open_protocol(loaded_image->device_handle,
>> -                               &guid_simple_file_system_protocol,
>> -                               (void **)&file_system, NULL, NULL,
>> -                               EFI_OPEN_PROTOCOL_GET_PROTOCOL);
>> -       if (ret != EFI_SUCCESS) {
>> -               error(u"Failed to open simple file system protocol\r\n");
>> -               goto out;
>> -       }
>> -
>> -       /* Open volume */
>> -       ret = file_system->open_volume(file_system, &root);
>> -       if (ret != EFI_SUCCESS) {
>> -               error(u"Failed to open volume\r\n");
>> -               goto out;
>> -       }
>> -       /* Check if file already exists */
>> -       ret = root->open(root, &file, filename, EFI_FILE_MODE_READ, 0);
>> -       if (ret == EFI_SUCCESS) {
>> -               file->close(file);
>> -               efi_drain_input();
>> -               print(u"Overwrite existing file (y/n)? ");
>> -               ret = efi_input_yn();
>> -               print(u"\r\n");
>> -               if (ret != EFI_SUCCESS) {
>> -                       root->close(root);
>> -                       error(u"Aborted by user\r\n");
>> -                       goto out;
>> -               }
>> -       }
>> -
>> -       /* Create file */
>> -       ret = root->open(root, &file, filename,
>> -                        EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE |
>> -                        EFI_FILE_MODE_CREATE, EFI_FILE_ARCHIVE);
>> +       ret = save_file(filename, initrd, initrd_size);
>>          if (ret == EFI_SUCCESS) {
>> -               /* Write file */
>> -               ret = file->write(file, &initrd_size, initrd);
>> -               if (ret != EFI_SUCCESS) {
>> -                       error(u"Failed to write file\r\n");
>> -               } else {
>> -                       print(filename);
>> -                       print(u" written\r\n");
>> -               }
>> -               file->close(file);
>> -       } else {
>> -               error(u"Failed to open file\r\n");
>> +               print(filename);
>> +               print(u" written\r\n");
>>          }
>> -       root->close(root);
>>
>> -out:
>> -       if (initrd)
>> -               bs->free_pages((uintptr_t)initrd,
>> -                              efi_size_in_pages(initrd_size));
>> +       bs->free_pages((uintptr_t)initrd, efi_size_in_pages(initrd_size));
>>          return ret;
>>   }
>>
>> diff --git a/lib/efi_loader/smbiosdump.c b/lib/efi_loader/smbiosdump.c
>> index 351e103fb97..8aa6f594a07 100644
>> --- a/lib/efi_loader/smbiosdump.c
>> +++ b/lib/efi_loader/smbiosdump.c
>> @@ -8,7 +8,6 @@
>>    * clearing of the screen.
>>    */
>>
>> -#include <part.h>
>>   #include <smbios.h>
>>   #include <string.h>
>>   #include "efi_app_common.h"
>> @@ -20,56 +19,6 @@ static efi_handle_t handle;
>>   static struct efi_system_table *systable;
>>   static const efi_guid_t smbios_guid = SMBIOS_TABLE_GUID;
>>   static const efi_guid_t smbios3_guid = SMBIOS3_TABLE_GUID;
>> -static const efi_guid_t loaded_image_guid = EFI_LOADED_IMAGE_PROTOCOL_GUID;
>> -static const efi_guid_t guid_simple_file_system_protocol =
>> -                                       EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID;
>> -static const efi_guid_t efi_system_partition_guid = PARTITION_SYSTEM_GUID;
>> -
>> -/**
>> - * open_file_system() - open simple file system protocol
>> - *
>> - * file_system:        interface of the simple file system protocol
>> - * Return:     status code
>> - */
>> -static efi_status_t
>> -open_file_system(struct efi_simple_file_system_protocol **file_system)
>> -{
>> -       struct efi_loaded_image *loaded_image;
>> -       efi_status_t ret;
>> -       efi_handle_t *handle_buffer = NULL;
>> -       efi_uintn_t count;
>> -
>> -       ret = bs->open_protocol(handle, &loaded_image_guid,
>> -                               (void **)&loaded_image, NULL, NULL,
>> -                               EFI_OPEN_PROTOCOL_GET_PROTOCOL);
>> -       if (ret != EFI_SUCCESS) {
>> -               error(u"Loaded image protocol not found\r\n");
>> -               return ret;
>> -       }
>> -
>> -       /* Open the simple file system protocol on the same partition */
>> -       ret = bs->open_protocol(loaded_image->device_handle,
>> -                               &guid_simple_file_system_protocol,
>> -                               (void **)file_system, NULL, NULL,
>> -                               EFI_OPEN_PROTOCOL_GET_PROTOCOL);
>> -       if (ret == EFI_SUCCESS)
>> -               return ret;
>> -
>> -       /* Open the simple file system protocol on the UEFI system partition */
>> -       ret = bs->locate_handle_buffer(BY_PROTOCOL, &efi_system_partition_guid,
>> -                                      NULL, &count, &handle_buffer);
>> -       if (ret == EFI_SUCCESS && handle_buffer)
>> -               ret = bs->open_protocol(handle_buffer[0],
>> -                                       &guid_simple_file_system_protocol,
>> -                                       (void **)file_system, NULL, NULL,
>> -                                       EFI_OPEN_PROTOCOL_GET_PROTOCOL);
>> -       if (ret != EFI_SUCCESS)
>> -               error(u"Failed to open simple file system protocol\r\n");
>> -       if (handle_buffer)
>> -               bs->free_pool(handle_buffer);
>> -
>> -       return ret;
>> -}
>>
>>   /**
>>    * do_help() - print help
>> @@ -81,24 +30,6 @@ static void do_help(void)
>>          error(u"exit        - exit the shell\r\n");
>>   }
>>
>> -/**
>> - * get_config_table() - get configuration table
>> - *
>> - * @guid:      GUID of the configuration table
>> - * Return:     pointer to configuration table or NULL
>> - */
>> -static void *get_config_table(const efi_guid_t *guid)
>> -{
>> -       size_t i;
>> -
>> -       for (i = 0; i < systable->nr_tables; ++i) {
>> -               if (!memcmp(guid, &systable->tables[i].guid, 16))
>> -                       return systable->tables[i].table;
>> -       }
>> -
>> -       return NULL;
>> -}
>> -
>>   /**
>>    * checksum() - calculate checksum
>>    *
>> @@ -211,62 +142,6 @@ static efi_status_t do_check(void)
>>          return EFI_SUCCESS;
>>   }
>>
>> -/**
>> - * save_file() - save file to EFI system partition
>> - *
>> - * @filename:  file name
>> - * @buf:       buffer to write
>> - * @size:      size of the buffer
>> - */
>> -static efi_status_t save_file(u16 *filename, void *buf, efi_uintn_t size)
>> -{
>> -       efi_uintn_t ret;
>> -       struct efi_simple_file_system_protocol *file_system;
>> -       struct efi_file_handle *root, *file;
>> -
>> -       ret = open_file_system(&file_system);
>> -       if (ret != EFI_SUCCESS)
>> -               return ret;
>> -
>> -       /* Open volume */
>> -       ret = file_system->open_volume(file_system, &root);
>> -       if (ret != EFI_SUCCESS) {
>> -               error(u"Failed to open volume\r\n");
>> -               return ret;
>> -       }
>> -       /* Check if file already exists */
>> -       ret = root->open(root, &file, filename, EFI_FILE_MODE_READ, 0);
>> -       if (ret == EFI_SUCCESS) {
>> -               file->close(file);
>> -               print(u"Overwrite existing file (y/n)? ");
>> -               ret = efi_input_yn();
>> -               print(u"\r\n");
>> -               if (ret != EFI_SUCCESS) {
>> -                       root->close(root);
>> -                       error(u"Aborted by user\r\n");
>> -                       bs->free_pool(buf);
>> -                       return ret;
>> -               }
>> -       }
>> -
>> -       /* Create file */
>> -       ret = root->open(root, &file, filename,
>> -                        EFI_FILE_MODE_READ | EFI_FILE_MODE_WRITE |
>> -                        EFI_FILE_MODE_CREATE, EFI_FILE_ARCHIVE);
>> -       if (ret == EFI_SUCCESS) {
>> -               /* Write file */
>> -               ret = file->write(file, &size, buf);
>> -               if (ret != EFI_SUCCESS)
>> -                       error(u"Failed to write file\r\n");
>> -               file->close(file);
>> -       } else {
>> -               error(u"Failed to open file\r\n");
>> -       }
>> -       root->close(root);
>> -
>> -       return ret;
>> -}
>> -
>>   /**
>>    * do_save() - save SMBIOS table
>>    *
>> --
>> 2.53.0
>>



More information about the U-Boot mailing list