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