18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * drivers/hyperhold/hp_device.h
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (c) 2020-2022 Huawei Technologies Co., Ltd.
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#ifndef _HP_DEVICE_H_
98c2ecf20Sopenharmony_ci#define _HP_DEVICE_H_
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#include <linux/kernel.h>
128c2ecf20Sopenharmony_ci#include <linux/blkdev.h>
138c2ecf20Sopenharmony_ci#include <crypto/skcipher.h>
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_cienum {
168c2ecf20Sopenharmony_ci	HP_DEV_ENCRYPT,
178c2ecf20Sopenharmony_ci	HP_DEV_DECRYPT,
188c2ecf20Sopenharmony_ci};
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_cistruct hp_device {
218c2ecf20Sopenharmony_ci	struct file *filp;
228c2ecf20Sopenharmony_ci	struct block_device *bdev;
238c2ecf20Sopenharmony_ci	u32 old_block_size;
248c2ecf20Sopenharmony_ci	u64 dev_size;
258c2ecf20Sopenharmony_ci	u32 sec_size;
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ci	struct crypto_skcipher *ctfm;
288c2ecf20Sopenharmony_ci	struct blk_crypto_key *blk_key;
298c2ecf20Sopenharmony_ci};
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_civoid unbind_bdev(struct hp_device *dev);
328c2ecf20Sopenharmony_cibool bind_bdev(struct hp_device *dev, const char *name);
338c2ecf20Sopenharmony_cibool crypto_init(struct hp_device *dev, bool soft);
348c2ecf20Sopenharmony_civoid crypto_deinit(struct hp_device *dev);
358c2ecf20Sopenharmony_ciint soft_crypt_page(struct crypto_skcipher *ctfm,
368c2ecf20Sopenharmony_ci	struct page *dst_page, struct page *src_page, unsigned int op);
378c2ecf20Sopenharmony_civoid inline_crypt_bio(struct blk_crypto_key *blk_key, struct bio *bio);
388c2ecf20Sopenharmony_ci#endif
39