2012-07-19 18:42:41 +04:00
/*
2015-05-07 20:49:15 +03:00
* Cryptographic API for the 842 software compression algorithm .
2012-07-19 18:42:41 +04:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
2015-05-07 20:49:15 +03:00
* Copyright ( C ) IBM Corporation , 2011 - 2015
2012-07-19 18:42:41 +04:00
*
2015-05-07 20:49:15 +03:00
* Original Authors : Robert Jennings < rcj @ linux . vnet . ibm . com >
* Seth Jennings < sjenning @ linux . vnet . ibm . com >
2012-07-19 18:42:41 +04:00
*
2015-05-07 20:49:15 +03:00
* Rewrite : Dan Streetman < ddstreet @ ieee . org >
*
* This is the software implementation of compression and decompression using
* the 842 format . This uses the software 842 library at lib / 842 / which is
* only a reference implementation , and is very , very slow as compared to other
* software compressors . You probably do not want to use this software
* compression . If you have access to the PowerPC 842 compression hardware , you
* want to use the 842 hardware compression interface , which is at :
* drivers / crypto / nx / nx - 842 - crypto . c
2012-07-19 18:42:41 +04:00
*/
# include <linux/init.h>
# include <linux/module.h>
# include <linux/crypto.h>
2015-05-07 20:49:15 +03:00
# include <linux/sw842.h>
2012-07-19 18:42:41 +04:00
2015-05-07 20:49:15 +03:00
struct crypto842_ctx {
char wmem [ SW842_MEM_COMPRESS ] ; /* working memory for compress */
2012-07-19 18:42:41 +04:00
} ;
2015-05-07 20:49:15 +03:00
static int crypto842_compress ( struct crypto_tfm * tfm ,
const u8 * src , unsigned int slen ,
u8 * dst , unsigned int * dlen )
2012-07-19 18:42:41 +04:00
{
2015-05-07 20:49:15 +03:00
struct crypto842_ctx * ctx = crypto_tfm_ctx ( tfm ) ;
2012-07-19 18:42:41 +04:00
2015-05-07 20:49:15 +03:00
return sw842_compress ( src , slen , dst , dlen , ctx - > wmem ) ;
2012-07-19 18:42:41 +04:00
}
2015-05-07 20:49:15 +03:00
static int crypto842_decompress ( struct crypto_tfm * tfm ,
const u8 * src , unsigned int slen ,
u8 * dst , unsigned int * dlen )
2012-07-19 18:42:41 +04:00
{
2015-05-07 20:49:15 +03:00
return sw842_decompress ( src , slen , dst , dlen ) ;
2012-07-19 18:42:41 +04:00
}
static struct crypto_alg alg = {
. cra_name = " 842 " ,
2015-05-07 20:49:15 +03:00
. cra_driver_name = " 842-generic " ,
. cra_priority = 100 ,
2012-07-19 18:42:41 +04:00
. cra_flags = CRYPTO_ALG_TYPE_COMPRESS ,
2015-05-07 20:49:15 +03:00
. cra_ctxsize = sizeof ( struct crypto842_ctx ) ,
2012-07-19 18:42:41 +04:00
. cra_module = THIS_MODULE ,
. cra_u = { . compress = {
2015-05-07 20:49:15 +03:00
. coa_compress = crypto842_compress ,
. coa_decompress = crypto842_decompress } }
2012-07-19 18:42:41 +04:00
} ;
2015-05-07 20:49:15 +03:00
static int __init crypto842_mod_init ( void )
2012-07-19 18:42:41 +04:00
{
return crypto_register_alg ( & alg ) ;
}
2015-05-07 20:49:15 +03:00
module_init ( crypto842_mod_init ) ;
2012-07-19 18:42:41 +04:00
2015-05-07 20:49:15 +03:00
static void __exit crypto842_mod_exit ( void )
2012-07-19 18:42:41 +04:00
{
crypto_unregister_alg ( & alg ) ;
}
2015-05-07 20:49:15 +03:00
module_exit ( crypto842_mod_exit ) ;
2012-07-19 18:42:41 +04:00
MODULE_LICENSE ( " GPL " ) ;
2015-05-07 20:49:15 +03:00
MODULE_DESCRIPTION ( " 842 Software Compression Algorithm " ) ;
2014-11-21 04:05:53 +03:00
MODULE_ALIAS_CRYPTO ( " 842 " ) ;
2015-05-07 20:49:15 +03:00
MODULE_ALIAS_CRYPTO ( " 842-generic " ) ;
MODULE_AUTHOR ( " Dan Streetman <ddstreet@ieee.org> " ) ;