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/efi.h> |
10 | |
11 | struct efivarfs_mount_opts { |
12 | kuid_t uid; |
13 | kgid_t gid; |
14 | }; |
15 | |
16 | struct efivarfs_fs_info { |
17 | struct efivarfs_mount_opts mount_opts; |
18 | struct super_block *sb; |
19 | struct notifier_block nb; |
20 | }; |
21 | |
22 | struct efi_variable { |
23 | efi_char16_t VariableName[EFI_VAR_NAME_LEN/sizeof(efi_char16_t)]; |
24 | efi_guid_t VendorGuid; |
25 | }; |
26 | |
27 | struct efivar_entry { |
28 | struct efi_variable var; |
29 | struct inode vfs_inode; |
30 | unsigned long open_count; |
31 | bool removed; |
32 | }; |
33 | |
34 | static inline struct efivar_entry *efivar_entry(struct inode *inode) |
35 | { |
36 | return container_of(inode, struct efivar_entry, vfs_inode); |
37 | } |
38 | |
39 | int efivar_init(int (*func)(efi_char16_t *, efi_guid_t, unsigned long, void *), |
40 | void *data, bool duplicate_check); |
41 | |
42 | int efivar_entry_delete(struct efivar_entry *entry); |
43 | |
44 | int efivar_entry_size(struct efivar_entry *entry, unsigned long *size); |
45 | int __efivar_entry_get(struct efivar_entry *entry, u32 *attributes, |
46 | unsigned long *size, void *data); |
47 | int efivar_entry_get(struct efivar_entry *entry, u32 *attributes, |
48 | unsigned long *size, void *data); |
49 | int efivar_entry_set_get_size(struct efivar_entry *entry, u32 attributes, |
50 | unsigned long *size, void *data, bool *set); |
51 | |
52 | |
53 | bool efivar_validate(efi_guid_t vendor, efi_char16_t *var_name, u8 *data, |
54 | unsigned long data_size); |
55 | bool efivar_variable_is_removable(efi_guid_t vendor, const char *name, |
56 | size_t len); |
57 | char *efivar_get_utf8name(const efi_char16_t *name16, efi_guid_t *vendor); |
58 | bool efivarfs_variable_is_present(efi_char16_t *variable_name, |
59 | efi_guid_t *vendor, void *data); |
60 | |
61 | extern const struct file_operations efivarfs_file_operations; |
62 | extern const struct inode_operations efivarfs_dir_inode_operations; |
63 | extern struct inode *efivarfs_get_inode(struct super_block *sb, |
64 | const struct inode *dir, int mode, dev_t dev, |
65 | bool is_removable); |
66 | |
67 | #endif /* EFIVAR_FS_INTERNAL_H */ |
68 | |