162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2014 Sergey Senozhatsky. 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#ifndef _ZCOMP_H_ 762306a36Sopenharmony_ci#define _ZCOMP_H_ 862306a36Sopenharmony_ci#include <linux/local_lock.h> 962306a36Sopenharmony_ci 1062306a36Sopenharmony_cistruct zcomp_strm { 1162306a36Sopenharmony_ci /* The members ->buffer and ->tfm are protected by ->lock. */ 1262306a36Sopenharmony_ci local_lock_t lock; 1362306a36Sopenharmony_ci /* compression/decompression buffer */ 1462306a36Sopenharmony_ci void *buffer; 1562306a36Sopenharmony_ci struct crypto_comp *tfm; 1662306a36Sopenharmony_ci}; 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci/* dynamic per-device compression frontend */ 1962306a36Sopenharmony_cistruct zcomp { 2062306a36Sopenharmony_ci struct zcomp_strm __percpu *stream; 2162306a36Sopenharmony_ci const char *name; 2262306a36Sopenharmony_ci struct hlist_node node; 2362306a36Sopenharmony_ci}; 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ciint zcomp_cpu_up_prepare(unsigned int cpu, struct hlist_node *node); 2662306a36Sopenharmony_ciint zcomp_cpu_dead(unsigned int cpu, struct hlist_node *node); 2762306a36Sopenharmony_cissize_t zcomp_available_show(const char *comp, char *buf); 2862306a36Sopenharmony_cibool zcomp_available_algorithm(const char *comp); 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_cistruct zcomp *zcomp_create(const char *alg); 3162306a36Sopenharmony_civoid zcomp_destroy(struct zcomp *comp); 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_cistruct zcomp_strm *zcomp_stream_get(struct zcomp *comp); 3462306a36Sopenharmony_civoid zcomp_stream_put(struct zcomp *comp); 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ciint zcomp_compress(struct zcomp_strm *zstrm, 3762306a36Sopenharmony_ci const void *src, unsigned int *dst_len); 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ciint zcomp_decompress(struct zcomp_strm *zstrm, 4062306a36Sopenharmony_ci const void *src, unsigned int src_len, void *dst); 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_cibool zcomp_set_max_streams(struct zcomp *comp, int num_strm); 4362306a36Sopenharmony_ci#endif /* _ZCOMP_H_ */ 44