162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2012 Red Hat, Inc. 462306a36Sopenharmony_ci * Copyright (C) 2012 Jeremy Kerr <jeremy.kerr@canonical.com> 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci#ifndef EFIVAR_FS_INTERNAL_H 762306a36Sopenharmony_ci#define EFIVAR_FS_INTERNAL_H 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include <linux/list.h> 1062306a36Sopenharmony_ci#include <linux/efi.h> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_cistruct efi_variable { 1362306a36Sopenharmony_ci efi_char16_t VariableName[EFI_VAR_NAME_LEN/sizeof(efi_char16_t)]; 1462306a36Sopenharmony_ci efi_guid_t VendorGuid; 1562306a36Sopenharmony_ci unsigned long DataSize; 1662306a36Sopenharmony_ci __u8 Data[1024]; 1762306a36Sopenharmony_ci efi_status_t Status; 1862306a36Sopenharmony_ci __u32 Attributes; 1962306a36Sopenharmony_ci} __attribute__((packed)); 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_cistruct efivar_entry { 2262306a36Sopenharmony_ci struct efi_variable var; 2362306a36Sopenharmony_ci struct list_head list; 2462306a36Sopenharmony_ci struct kobject kobj; 2562306a36Sopenharmony_ci}; 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ciint efivar_init(int (*func)(efi_char16_t *, efi_guid_t, unsigned long, void *), 2862306a36Sopenharmony_ci void *data, bool duplicates, struct list_head *head); 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ciint efivar_entry_add(struct efivar_entry *entry, struct list_head *head); 3162306a36Sopenharmony_civoid __efivar_entry_add(struct efivar_entry *entry, struct list_head *head); 3262306a36Sopenharmony_civoid efivar_entry_remove(struct efivar_entry *entry); 3362306a36Sopenharmony_ciint efivar_entry_delete(struct efivar_entry *entry); 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ciint efivar_entry_size(struct efivar_entry *entry, unsigned long *size); 3662306a36Sopenharmony_ciint __efivar_entry_get(struct efivar_entry *entry, u32 *attributes, 3762306a36Sopenharmony_ci unsigned long *size, void *data); 3862306a36Sopenharmony_ciint efivar_entry_get(struct efivar_entry *entry, u32 *attributes, 3962306a36Sopenharmony_ci unsigned long *size, void *data); 4062306a36Sopenharmony_ciint efivar_entry_set_get_size(struct efivar_entry *entry, u32 attributes, 4162306a36Sopenharmony_ci unsigned long *size, void *data, bool *set); 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ciint efivar_entry_iter(int (*func)(struct efivar_entry *, void *), 4462306a36Sopenharmony_ci struct list_head *head, void *data); 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_cibool efivar_validate(efi_guid_t vendor, efi_char16_t *var_name, u8 *data, 4762306a36Sopenharmony_ci unsigned long data_size); 4862306a36Sopenharmony_cibool efivar_variable_is_removable(efi_guid_t vendor, const char *name, 4962306a36Sopenharmony_ci size_t len); 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ciextern const struct file_operations efivarfs_file_operations; 5262306a36Sopenharmony_ciextern const struct inode_operations efivarfs_dir_inode_operations; 5362306a36Sopenharmony_ciextern bool efivarfs_valid_name(const char *str, int len); 5462306a36Sopenharmony_ciextern struct inode *efivarfs_get_inode(struct super_block *sb, 5562306a36Sopenharmony_ci const struct inode *dir, int mode, dev_t dev, 5662306a36Sopenharmony_ci bool is_removable); 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ciextern struct list_head efivarfs_list; 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci#endif /* EFIVAR_FS_INTERNAL_H */ 61