crypto: acomp - add driver-side scomp interface
Add a synchronous back-end (scomp) to acomp. This allows to easily expose the already present compression algorithms in LKCF via acomp. Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:

committed by
Herbert Xu

parent
2ebda74fd6
commit
1ab53a77b7
@@ -42,9 +42,18 @@ struct acomp_req {
|
||||
* struct crypto_acomp - user-instantiated objects which encapsulate
|
||||
* algorithms and core processing logic
|
||||
*
|
||||
* @base: Common crypto API algorithm data structure
|
||||
* @compress: Function performs a compress operation
|
||||
* @decompress: Function performs a de-compress operation
|
||||
* @dst_free: Frees destination buffer if allocated inside the
|
||||
* algorithm
|
||||
* @reqsize: Context size for (de)compression requests
|
||||
* @base: Common crypto API algorithm data structure
|
||||
*/
|
||||
struct crypto_acomp {
|
||||
int (*compress)(struct acomp_req *req);
|
||||
int (*decompress)(struct acomp_req *req);
|
||||
void (*dst_free)(struct scatterlist *dst);
|
||||
unsigned int reqsize;
|
||||
struct crypto_tfm base;
|
||||
};
|
||||
|
||||
@@ -125,7 +134,7 @@ static inline struct acomp_alg *crypto_acomp_alg(struct crypto_acomp *tfm)
|
||||
|
||||
static inline unsigned int crypto_acomp_reqsize(struct crypto_acomp *tfm)
|
||||
{
|
||||
return crypto_acomp_alg(tfm)->reqsize;
|
||||
return tfm->reqsize;
|
||||
}
|
||||
|
||||
static inline void acomp_request_set_tfm(struct acomp_req *req,
|
||||
@@ -165,16 +174,7 @@ static inline int crypto_has_acomp(const char *alg_name, u32 type, u32 mask)
|
||||
*
|
||||
* Return: allocated handle in case of success or NULL in case of an error
|
||||
*/
|
||||
static inline struct acomp_req *acomp_request_alloc(struct crypto_acomp *tfm)
|
||||
{
|
||||
struct acomp_req *req;
|
||||
|
||||
req = kzalloc(sizeof(*req) + crypto_acomp_reqsize(tfm), GFP_KERNEL);
|
||||
if (likely(req))
|
||||
acomp_request_set_tfm(req, tfm);
|
||||
|
||||
return req;
|
||||
}
|
||||
struct acomp_req *acomp_request_alloc(struct crypto_acomp *tfm);
|
||||
|
||||
/**
|
||||
* acomp_request_free() -- zeroize and free asynchronous (de)compression
|
||||
@@ -183,17 +183,7 @@ static inline struct acomp_req *acomp_request_alloc(struct crypto_acomp *tfm)
|
||||
*
|
||||
* @req: request to free
|
||||
*/
|
||||
static inline void acomp_request_free(struct acomp_req *req)
|
||||
{
|
||||
struct crypto_acomp *tfm = crypto_acomp_reqtfm(req);
|
||||
struct acomp_alg *alg = crypto_acomp_alg(tfm);
|
||||
|
||||
if (req->flags & CRYPTO_ACOMP_ALLOC_OUTPUT) {
|
||||
alg->dst_free(req->dst);
|
||||
req->dst = NULL;
|
||||
}
|
||||
kzfree(req);
|
||||
}
|
||||
void acomp_request_free(struct acomp_req *req);
|
||||
|
||||
/**
|
||||
* acomp_request_set_callback() -- Sets an asynchronous callback
|
||||
@@ -256,9 +246,8 @@ static inline void acomp_request_set_params(struct acomp_req *req,
|
||||
static inline int crypto_acomp_compress(struct acomp_req *req)
|
||||
{
|
||||
struct crypto_acomp *tfm = crypto_acomp_reqtfm(req);
|
||||
struct acomp_alg *alg = crypto_acomp_alg(tfm);
|
||||
|
||||
return alg->compress(req);
|
||||
return tfm->compress(req);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -273,9 +262,8 @@ static inline int crypto_acomp_compress(struct acomp_req *req)
|
||||
static inline int crypto_acomp_decompress(struct acomp_req *req)
|
||||
{
|
||||
struct crypto_acomp *tfm = crypto_acomp_reqtfm(req);
|
||||
struct acomp_alg *alg = crypto_acomp_alg(tfm);
|
||||
|
||||
return alg->decompress(req);
|
||||
return tfm->decompress(req);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user