xref: /openbmc/linux/drivers/block/zram/zcomp.h (revision 7ae9fb1b7ecbb5d85d07857943f677fd1a559b18)
12874c5fdSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
2e7e1ef43SSergey Senozhatsky /*
3e7e1ef43SSergey Senozhatsky  * Copyright (C) 2014 Sergey Senozhatsky.
4e7e1ef43SSergey Senozhatsky  */
5e7e1ef43SSergey Senozhatsky 
6e7e1ef43SSergey Senozhatsky #ifndef _ZCOMP_H_
7e7e1ef43SSergey Senozhatsky #define _ZCOMP_H_
819f545b6SMike Galbraith #include <linux/local_lock.h>
9e7e1ef43SSergey Senozhatsky 
10e7e1ef43SSergey Senozhatsky struct zcomp_strm {
1119f545b6SMike Galbraith 	/* The members ->buffer and ->tfm are protected by ->lock. */
1219f545b6SMike Galbraith 	local_lock_t lock;
13e7e1ef43SSergey Senozhatsky 	/* compression/decompression buffer */
14e7e1ef43SSergey Senozhatsky 	void *buffer;
15ebaf9ab5SSergey Senozhatsky 	struct crypto_comp *tfm;
16e7e1ef43SSergey Senozhatsky };
17e7e1ef43SSergey Senozhatsky 
18e7e1ef43SSergey Senozhatsky /* dynamic per-device compression frontend */
19e7e1ef43SSergey Senozhatsky struct zcomp {
20ed19f192SSebastian Andrzej Siewior 	struct zcomp_strm __percpu *stream;
21ebaf9ab5SSergey Senozhatsky 	const char *name;
221dd6c834SAnna-Maria Gleixner 	struct hlist_node node;
23e7e1ef43SSergey Senozhatsky };
24e7e1ef43SSergey Senozhatsky 
251dd6c834SAnna-Maria Gleixner int zcomp_cpu_up_prepare(unsigned int cpu, struct hlist_node *node);
261dd6c834SAnna-Maria Gleixner int zcomp_cpu_dead(unsigned int cpu, struct hlist_node *node);
27e46b8a03SSergey Senozhatsky ssize_t zcomp_available_show(const char *comp, char *buf);
28d93435c3SSergey Senozhatsky bool zcomp_available_algorithm(const char *comp);
29e46b8a03SSergey Senozhatsky 
30*7ac07a26SSergey Senozhatsky struct zcomp *zcomp_create(const char *alg);
31e7e1ef43SSergey Senozhatsky void zcomp_destroy(struct zcomp *comp);
32e7e1ef43SSergey Senozhatsky 
332aea8493SSergey Senozhatsky struct zcomp_strm *zcomp_stream_get(struct zcomp *comp);
342aea8493SSergey Senozhatsky void zcomp_stream_put(struct zcomp *comp);
35e7e1ef43SSergey Senozhatsky 
36ebaf9ab5SSergey Senozhatsky int zcomp_compress(struct zcomp_strm *zstrm,
37ebaf9ab5SSergey Senozhatsky 		const void *src, unsigned int *dst_len);
38e7e1ef43SSergey Senozhatsky 
39ebaf9ab5SSergey Senozhatsky int zcomp_decompress(struct zcomp_strm *zstrm,
40ebaf9ab5SSergey Senozhatsky 		const void *src, unsigned int src_len, void *dst);
41fe8eb122SSergey Senozhatsky 
4260a726e3SMinchan Kim bool zcomp_set_max_streams(struct zcomp *comp, int num_strm);
43e7e1ef43SSergey Senozhatsky #endif /* _ZCOMP_H_ */
44