1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * Copyright (C) 2012 Red Hat, Inc. |
4 | * Copyright (C) 2012 Jeremy Kerr <jeremy.kerr@canonical.com> |
5 | */ |
6 | #ifndef EFIVAR_FS_INTERNAL_H |
7 | #define EFIVAR_FS_INTERNAL_H |
8 | |
9 | #include <linux/list.h> |
10 | #include <linux/efi.h> |
11 | |
12 | struct efivarfs_mount_opts { |
13 | kuid_t uid; |
14 | kgid_t gid; |
15 | }; |
16 | |
17 | struct efivarfs_fs_info { |
18 | struct efivarfs_mount_opts mount_opts; |
19 | struct list_head efivarfs_list; |
20 | struct super_block *sb; |
21 | struct notifier_block nb; |
22 | }; |
23 | |
24 | struct efi_variable { |
25 | efi_char16_t VariableName[EFI_VAR_NAME_LEN/sizeof(efi_char16_t)]; |
26 | efi_guid_t VendorGuid; |
27 | unsigned long DataSize; |
28 | __u8 Data[1024]; |
29 | efi_status_t Status; |
30 | __u32 Attributes; |
31 | } __attribute__((packed)); |
32 | |
33 | struct efivar_entry { |
34 | struct efi_variable var; |
35 | struct list_head list; |
36 | struct kobject kobj; |
37 | }; |
38 | |
39 | int efivar_init(int (*func)(efi_char16_t *, efi_guid_t, unsigned long, void *, |
40 | struct list_head *), |
41 | void *data, struct list_head *head); |
42 | |
43 | int efivar_entry_add(struct efivar_entry *entry, struct list_head *head); |
44 | void __efivar_entry_add(struct efivar_entry *entry, struct list_head *head); |
45 | void efivar_entry_remove(struct efivar_entry *entry); |
46 | int efivar_entry_delete(struct efivar_entry *entry); |
47 | |
48 | int efivar_entry_size(struct efivar_entry *entry, unsigned long *size); |
49 | int __efivar_entry_get(struct efivar_entry *entry, u32 *attributes, |
50 | unsigned long *size, void *data); |
51 | int efivar_entry_get(struct efivar_entry *entry, u32 *attributes, |
52 | unsigned long *size, void *data); |
53 | int efivar_entry_set_get_size(struct efivar_entry *entry, u32 attributes, |
54 | unsigned long *size, void *data, bool *set); |
55 | |
56 | int efivar_entry_iter(int (*func)(struct efivar_entry *, void *), |
57 | struct list_head *head, void *data); |
58 | |
59 | bool efivar_validate(efi_guid_t vendor, efi_char16_t *var_name, u8 *data, |
60 | unsigned long data_size); |
61 | bool efivar_variable_is_removable(efi_guid_t vendor, const char *name, |
62 | size_t len); |
63 | |
64 | extern const struct file_operations efivarfs_file_operations; |
65 | extern const struct inode_operations efivarfs_dir_inode_operations; |
66 | extern bool efivarfs_valid_name(const char *str, int len); |
67 | extern struct inode *efivarfs_get_inode(struct super_block *sb, |
68 | const struct inode *dir, int mode, dev_t dev, |
69 | bool is_removable); |
70 | |
71 | #endif /* EFIVAR_FS_INTERNAL_H */ |
72 | |