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