108 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * Crypto engine API4 *5 * Copyright (c) 2016 Baolin Wang <baolin.wang@linaro.org>6 */7#ifndef _CRYPTO_ENGINE_H8#define _CRYPTO_ENGINE_H9 10#include <crypto/aead.h>11#include <crypto/akcipher.h>12#include <crypto/hash.h>13#include <crypto/kpp.h>14#include <crypto/skcipher.h>15#include <linux/types.h>16 17struct crypto_engine;18struct device;19 20/*21 * struct crypto_engine_op - crypto hardware engine operations22 * @do_one_request: do encryption for current request23 */24struct crypto_engine_op {25 int (*do_one_request)(struct crypto_engine *engine,26 void *areq);27};28 29struct aead_engine_alg {30 struct aead_alg base;31 struct crypto_engine_op op;32};33 34struct ahash_engine_alg {35 struct ahash_alg base;36 struct crypto_engine_op op;37};38 39struct akcipher_engine_alg {40 struct akcipher_alg base;41 struct crypto_engine_op op;42};43 44struct kpp_engine_alg {45 struct kpp_alg base;46 struct crypto_engine_op op;47};48 49struct skcipher_engine_alg {50 struct skcipher_alg base;51 struct crypto_engine_op op;52};53 54int crypto_transfer_aead_request_to_engine(struct crypto_engine *engine,55 struct aead_request *req);56int crypto_transfer_akcipher_request_to_engine(struct crypto_engine *engine,57 struct akcipher_request *req);58int crypto_transfer_hash_request_to_engine(struct crypto_engine *engine,59 struct ahash_request *req);60int crypto_transfer_kpp_request_to_engine(struct crypto_engine *engine,61 struct kpp_request *req);62int crypto_transfer_skcipher_request_to_engine(struct crypto_engine *engine,63 struct skcipher_request *req);64void crypto_finalize_aead_request(struct crypto_engine *engine,65 struct aead_request *req, int err);66void crypto_finalize_akcipher_request(struct crypto_engine *engine,67 struct akcipher_request *req, int err);68void crypto_finalize_hash_request(struct crypto_engine *engine,69 struct ahash_request *req, int err);70void crypto_finalize_kpp_request(struct crypto_engine *engine,71 struct kpp_request *req, int err);72void crypto_finalize_skcipher_request(struct crypto_engine *engine,73 struct skcipher_request *req, int err);74int crypto_engine_start(struct crypto_engine *engine);75int crypto_engine_stop(struct crypto_engine *engine);76struct crypto_engine *crypto_engine_alloc_init(struct device *dev, bool rt);77struct crypto_engine *crypto_engine_alloc_init_and_set(struct device *dev,78 bool retry_support,79 int (*cbk_do_batch)(struct crypto_engine *engine),80 bool rt, int qlen);81void crypto_engine_exit(struct crypto_engine *engine);82 83int crypto_engine_register_aead(struct aead_engine_alg *alg);84void crypto_engine_unregister_aead(struct aead_engine_alg *alg);85int crypto_engine_register_aeads(struct aead_engine_alg *algs, int count);86void crypto_engine_unregister_aeads(struct aead_engine_alg *algs, int count);87 88int crypto_engine_register_ahash(struct ahash_engine_alg *alg);89void crypto_engine_unregister_ahash(struct ahash_engine_alg *alg);90int crypto_engine_register_ahashes(struct ahash_engine_alg *algs, int count);91void crypto_engine_unregister_ahashes(struct ahash_engine_alg *algs,92 int count);93 94int crypto_engine_register_akcipher(struct akcipher_engine_alg *alg);95void crypto_engine_unregister_akcipher(struct akcipher_engine_alg *alg);96 97int crypto_engine_register_kpp(struct kpp_engine_alg *alg);98void crypto_engine_unregister_kpp(struct kpp_engine_alg *alg);99 100int crypto_engine_register_skcipher(struct skcipher_engine_alg *alg);101void crypto_engine_unregister_skcipher(struct skcipher_engine_alg *alg);102int crypto_engine_register_skciphers(struct skcipher_engine_alg *algs,103 int count);104void crypto_engine_unregister_skciphers(struct skcipher_engine_alg *algs,105 int count);106 107#endif /* _CRYPTO_ENGINE_H */108