aboutsummaryrefslogtreecommitdiff
path: root/include/efi_config.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/efi_config.h')
-rw-r--r--include/efi_config.h98
1 files changed, 98 insertions, 0 deletions
diff --git a/include/efi_config.h b/include/efi_config.h
new file mode 100644
index 0000000000..098cac2115
--- /dev/null
+++ b/include/efi_config.h
@@ -0,0 +1,98 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Menu-driven UEFI Variable maintenance
+ *
+ * Copyright (c) 2022 Masahisa Kojima, Linaro Limited
+ */
+
+#ifndef _EFI_CONFIG_H
+#define _EFI_CONFIG_H
+
+#include <efi_loader.h>
+
+#define EFICONFIG_ENTRY_NUM_MAX 99
+#define EFICONFIG_VOLUME_PATH_MAX 512
+#define EFICONFIG_FILE_PATH_MAX 512
+#define EFICONFIG_FILE_PATH_BUF_SIZE (EFICONFIG_FILE_PATH_MAX * sizeof(u16))
+
+typedef efi_status_t (*eficonfig_entry_func)(void *data);
+
+/**
+ * struct eficonfig_entry - menu entry structure
+ *
+ * @num: menu entry index
+ * @title: title of entry
+ * @key: unique key
+ * @efi_menu: pointer to the menu structure
+ * @func: callback function to be called when this entry is selected
+ * @data: data to be passed to the callback function, caller must free() this pointer
+ * @list: list structure
+ */
+struct eficonfig_entry {
+ u32 num;
+ char *title;
+ char key[3];
+ struct efimenu *efi_menu;
+ eficonfig_entry_func func;
+ void *data;
+ struct list_head list;
+};
+
+/**
+ * struct efimenu - efi menu structure
+ *
+ * @delay: delay for autoboot
+ * @active: active menu entry index
+ * @count: total count of menu entry
+ * @menu_header: menu header string
+ * @list: menu entry list structure
+ */
+struct efimenu {
+ int delay;
+ int active;
+ int count;
+ char *menu_header;
+ struct list_head list;
+};
+
+/**
+ * struct eficonfig_item - structure to construct eficonfig_entry
+ *
+ * @title: title of entry
+ * @func: callback function to be called when this entry is selected
+ * @data: data to be passed to the callback function
+ */
+struct eficonfig_item {
+ char *title;
+ eficonfig_entry_func func;
+ void *data;
+};
+
+/**
+ * struct eficonfig_select_file_info - structure to be used for file selection
+ *
+ * @current_volume: pointer to the efi_simple_file_system_protocol
+ * @dp_volume: pointer to device path of the selected device
+ * @current_path: pointer to the selected file path string
+ * @filepath_list: list_head structure for file path list
+ * @file_selectred: flag indicates file selecting status
+ */
+struct eficonfig_select_file_info {
+ struct efi_simple_file_system_protocol *current_volume;
+ struct efi_device_path *dp_volume;
+ u16 *current_path;
+ struct list_head filepath_list;
+ bool file_selected;
+};
+
+void eficonfig_print_msg(char *msg);
+void eficonfig_destroy(struct efimenu *efi_menu);
+efi_status_t eficonfig_process_quit(void *data);
+efi_status_t eficonfig_process_common(struct efimenu *efi_menu, char *menu_header);
+efi_status_t eficonfig_select_file_handler(void *data);
+efi_status_t eficonfig_get_unused_bootoption(u16 *buf,
+ efi_uintn_t buf_size, u32 *index);
+efi_status_t eficonfig_append_bootorder(u16 index);
+efi_status_t eficonfig_generate_media_device_boot_option(void);
+
+#endif