1 /*
2  * Asynchronous Compression operations
3  *
4  * Copyright (c) 2016, Intel Corporation
5  * Authors: Weigang Li <weigang.li@intel.com>
6  *          Giovanni Cabiddu <giovanni.cabiddu@intel.com>
7  *
8  * This program is free software; you can redistribute it and/or modify it
9  * under the terms of the GNU General Public License as published by the Free
10  * Software Foundation; either version 2 of the License, or (at your option)
11  * any later version.
12  *
13  */
14 #ifndef _CRYPTO_ACOMP_INT_H
15 #define _CRYPTO_ACOMP_INT_H
16 #include <crypto/acompress.h>
17 
18 /*
19  * Transform internal helpers.
20  */
acomp_request_ctx(struct acomp_req * req)21 static inline void *acomp_request_ctx(struct acomp_req *req)
22 {
23 	return req->__ctx;
24 }
25 
acomp_tfm_ctx(struct crypto_acomp * tfm)26 static inline void *acomp_tfm_ctx(struct crypto_acomp *tfm)
27 {
28 	return tfm->base.__crt_ctx;
29 }
30 
acomp_request_complete(struct acomp_req * req,int err)31 static inline void acomp_request_complete(struct acomp_req *req,
32 					  int err)
33 {
34 	req->base.complete(&req->base, err);
35 }
36 
acomp_alg_name(struct crypto_acomp * tfm)37 static inline const char *acomp_alg_name(struct crypto_acomp *tfm)
38 {
39 	return crypto_acomp_tfm(tfm)->__crt_alg->cra_name;
40 }
41 
__acomp_request_alloc(struct crypto_acomp * tfm)42 static inline struct acomp_req *__acomp_request_alloc(struct crypto_acomp *tfm)
43 {
44 	struct acomp_req *req;
45 
46 	req = kzalloc(sizeof(*req) + crypto_acomp_reqsize(tfm), GFP_KERNEL);
47 	if (likely(req))
48 		acomp_request_set_tfm(req, tfm);
49 	return req;
50 }
51 
__acomp_request_free(struct acomp_req * req)52 static inline void __acomp_request_free(struct acomp_req *req)
53 {
54 	kzfree(req);
55 }
56 
57 /**
58  * crypto_register_acomp() -- Register asynchronous compression algorithm
59  *
60  * Function registers an implementation of an asynchronous
61  * compression algorithm
62  *
63  * @alg:	algorithm definition
64  *
65  * Return:	zero on success; error code in case of error
66  */
67 int crypto_register_acomp(struct acomp_alg *alg);
68 
69 /**
70  * crypto_unregister_acomp() -- Unregister asynchronous compression algorithm
71  *
72  * Function unregisters an implementation of an asynchronous
73  * compression algorithm
74  *
75  * @alg:	algorithm definition
76  *
77  * Return:	zero on success; error code in case of error
78  */
79 int crypto_unregister_acomp(struct acomp_alg *alg);
80 
81 int crypto_register_acomps(struct acomp_alg *algs, int count);
82 void crypto_unregister_acomps(struct acomp_alg *algs, int count);
83 
84 #endif
85