162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (C) 2019 IBM Corporation
462306a36Sopenharmony_ci * Author: Nayna Jain
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * PowerPC secure variable operations.
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci#ifndef SECVAR_OPS_H
962306a36Sopenharmony_ci#define SECVAR_OPS_H
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <linux/types.h>
1262306a36Sopenharmony_ci#include <linux/errno.h>
1362306a36Sopenharmony_ci#include <linux/sysfs.h>
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ciextern const struct secvar_operations *secvar_ops;
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cistruct secvar_operations {
1862306a36Sopenharmony_ci	int (*get)(const char *key, u64 key_len, u8 *data, u64 *data_size);
1962306a36Sopenharmony_ci	int (*get_next)(const char *key, u64 *key_len, u64 keybufsize);
2062306a36Sopenharmony_ci	int (*set)(const char *key, u64 key_len, u8 *data, u64 data_size);
2162306a36Sopenharmony_ci	ssize_t (*format)(char *buf, size_t bufsize);
2262306a36Sopenharmony_ci	int (*max_size)(u64 *max_size);
2362306a36Sopenharmony_ci	const struct attribute **config_attrs;
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci	// NULL-terminated array of fixed variable names
2662306a36Sopenharmony_ci	// Only used if get_next() isn't provided
2762306a36Sopenharmony_ci	const char * const *var_names;
2862306a36Sopenharmony_ci};
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci#ifdef CONFIG_PPC_SECURE_BOOT
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ciint set_secvar_ops(const struct secvar_operations *ops);
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci#else
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_cistatic inline int set_secvar_ops(const struct secvar_operations *ops) { return 0; }
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci#endif
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci#endif
41