crypto: compress - Add pcomp interface
authorGeert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
Wed, 4 Mar 2009 07:05:33 +0000 (15:05 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Wed, 4 Mar 2009 07:05:33 +0000 (15:05 +0800)
commita1d2f09544065b60598b8167d94a6371bff3e892
treecd8b88e7ea0cd44e7e369f670f9fdfcba78f4326
parente9cc8bddaea3944fabfebb968bc88d603239beed
crypto: compress - Add pcomp interface

The current "comp" crypto interface supports one-shot (de)compression only,
i.e. the whole data buffer to be (de)compressed must be passed at once, and
the whole (de)compressed data buffer will be received at once.
In several use-cases (e.g. compressed file systems that store files in big
compressed blocks), this workflow is not suitable.
Furthermore, the "comp" type doesn't provide for the configuration of
(de)compression parameters, and always allocates workspace memory for both
compression and decompression, which may waste memory.

To solve this, add a "pcomp" partial (de)compression interface that provides
the following operations:
  - crypto_compress_{init,update,final}() for compression,
  - crypto_decompress_{init,update,final}() for decompression,
  - crypto_{,de}compress_setup(), to configure (de)compression parameters
    (incl. allocating workspace memory).

The (de)compression methods take a struct comp_request, which was mimicked
after the z_stream object in zlib, and contains buffer pointer and length
pairs for input and output.

The setup methods take an opaque parameter pointer and length pair. Parameters
are supposed to be encoded using netlink attributes, whose meanings depend on
the actual (name of the) (de)compression algorithm.

Signed-off-by: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/Kconfig
crypto/Makefile
crypto/pcompress.c [new file with mode: 0644]
include/crypto/compress.h [new file with mode: 0644]
include/crypto/internal/compress.h [new file with mode: 0644]
include/linux/crypto.h