1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 3 #ifndef _ZCOMP_H_ 4 #define _ZCOMP_H_ 5 6 #include <linux/local_lock.h> 7 8 #define ZCOMP_PARAM_NO_LEVEL INT_MIN 9 10 struct zcomp_params { 11 void *dict; 12 size_t dict_sz; 13 s32 level; 14 }; 15 16 struct zcomp_strm { 17 /* The members ->buffer and ->tfm are protected by ->lock. */ 18 local_lock_t lock; 19 /* compression/decompression buffer */ 20 void *buffer; 21 void *ctx; 22 }; 23 24 struct zcomp_ops { 25 int (*compress)(void *ctx, const unsigned char *src, size_t src_len, 26 unsigned char *dst, size_t *dst_len); 27 28 int (*decompress)(void *ctx, const unsigned char *src, size_t src_len, 29 unsigned char *dst, size_t dst_len); 30 31 void *(*create_ctx)(struct zcomp_params *params); 32 void (*destroy_ctx)(void *ctx); 33 34 const char *name; 35 }; 36 37 /* dynamic per-device compression frontend */ 38 struct zcomp { 39 struct zcomp_strm __percpu *stream; 40 const struct zcomp_ops *ops; 41 struct zcomp_params *params; 42 struct hlist_node node; 43 }; 44 45 int zcomp_cpu_up_prepare(unsigned int cpu, struct hlist_node *node); 46 int zcomp_cpu_dead(unsigned int cpu, struct hlist_node *node); 47 ssize_t zcomp_available_show(const char *comp, char *buf); 48 bool zcomp_available_algorithm(const char *comp); 49 50 struct zcomp *zcomp_create(const char *alg, struct zcomp_params *params); 51 void zcomp_destroy(struct zcomp *comp); 52 53 struct zcomp_strm *zcomp_stream_get(struct zcomp *comp); 54 void zcomp_stream_put(struct zcomp *comp); 55 56 int zcomp_compress(struct zcomp *comp, struct zcomp_strm *zstrm, 57 const void *src, unsigned int *dst_len); 58 int zcomp_decompress(struct zcomp *comp, struct zcomp_strm *zstrm, 59 const void *src, unsigned int src_len, void *dst); 60 61 #endif /* _ZCOMP_H_ */ 62