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