summaryrefslogtreecommitdiffstats
path: root/include/linux/efi.h
diff options
context:
space:
mode:
authorMatt Fleming <matt.fleming@intel.com>2013-02-08 15:48:51 +0000
committerMatt Fleming <matt.fleming@intel.com>2013-04-17 13:24:01 +0100
commit048517722cde2595a7366d0c3c72b8b1ec142a9c (patch)
tree1f54a4009c3f418285473e56bc930d606116bd11 /include/linux/efi.h
parente14ab23dde12b80db4c94b684a2e485b72b16af3 (diff)
downloadlinux-stable-048517722cde2595a7366d0c3c72b8b1ec142a9c.tar.gz
linux-stable-048517722cde2595a7366d0c3c72b8b1ec142a9c.tar.bz2
linux-stable-048517722cde2595a7366d0c3c72b8b1ec142a9c.zip
efivars: Move pstore code into the new EFI directory
efivars.c has grown far too large and needs to be divided up. Create a new directory and move the persistence storage code to efi-pstore.c now that it uses the new efivar API. This helps us to greatly reduce the size of efivars.c and paves the way for moving other code out of efivars.c. Note that because CONFIG_EFI_VARS can be built as a module efi-pstore must also include support for building as a module. Reviewed-by: Tom Gundersen <teg@jklm.no> Tested-by: Tom Gundersen <teg@jklm.no> Cc: Seiji Aguchi <seiji.aguchi@hds.com> Cc: Anton Vorontsov <cbouatmailru@gmail.com> Cc: Colin Cross <ccross@android.com> Cc: Kees Cook <keescook@chromium.org> Cc: Matthew Garrett <mjg59@srcf.ucam.org> Cc: Tony Luck <tony.luck@intel.com> Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Diffstat (limited to 'include/linux/efi.h')
-rw-r--r--include/linux/efi.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/include/linux/efi.h b/include/linux/efi.h
index cd561b301e6a..8ff6ec1ac046 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
@@ -744,6 +744,34 @@ utf16_strlen(efi_char16_t *s)
#if defined(CONFIG_EFI_VARS) || defined(CONFIG_EFI_VARS_MODULE)
/*
+ * Return the number of bytes is the length of this string
+ * Note: this is NOT the same as the number of unicode characters
+ */
+static inline unsigned long
+utf16_strsize(efi_char16_t *data, unsigned long maxlength)
+{
+ return utf16_strnlen(data, maxlength/sizeof(efi_char16_t)) * sizeof(efi_char16_t);
+}
+
+static inline int
+utf16_strncmp(const efi_char16_t *a, const efi_char16_t *b, size_t len)
+{
+ while (1) {
+ if (len == 0)
+ return 0;
+ if (*a < *b)
+ return -1;
+ if (*a > *b)
+ return 1;
+ if (*a == 0) /* implies *b == 0 */
+ return 0;
+ a++;
+ b++;
+ len--;
+ }
+}
+
+/*
* EFI Variable support.
*
* Different firmware drivers can expose their EFI-like variables using
@@ -795,6 +823,14 @@ struct efivar_entry {
struct kobject kobj;
};
+extern struct list_head efivar_sysfs_list;
+
+static inline void
+efivar_unregister(struct efivar_entry *var)
+{
+ kobject_put(&var->kobj);
+}
+
int efivars_register(struct efivars *efivars,
const struct efivar_operations *ops,
struct kobject *kobject);
@@ -836,6 +872,8 @@ struct efivar_entry *efivar_entry_find(efi_char16_t *name, efi_guid_t guid,
bool efivar_validate(struct efi_variable *var, u8 *data, unsigned long len);
+void efivar_run_worker(void);
+
int efivars_sysfs_init(void);
#endif /* CONFIG_EFI_VARS */