Version:  2.0.40 2.2.26 2.4.37 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18 3.19 4.0 4.1 4.2

Linux/drivers/crypto/nx/nx-842.c

  1 /*
  2  * Driver frontend for IBM Power 842 compression accelerator
  3  *
  4  * Copyright (C) 2015 Dan Streetman, IBM Corp
  5  *
  6  * Designer of the Power data compression engine:
  7  *   Bulent Abali <abali@us.ibm.com>
  8  *
  9  * This program is free software; you can redistribute it and/or modify
 10  * it under the terms of the GNU General Public License as published by
 11  * the Free Software Foundation; either version 2 of the License, or
 12  * (at your option) any later version.
 13  *
 14  * This program is distributed in the hope that it will be useful,
 15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 17  * GNU General Public License for more details.
 18  */
 19 
 20 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 21 
 22 #include "nx-842.h"
 23 
 24 MODULE_LICENSE("GPL");
 25 MODULE_AUTHOR("Dan Streetman <ddstreet@ieee.org>");
 26 MODULE_DESCRIPTION("842 H/W Compression driver for IBM Power processors");
 27 
 28 /**
 29  * nx842_constraints
 30  *
 31  * This provides the driver's constraints.  Different nx842 implementations
 32  * may have varying requirements.  The constraints are:
 33  *   @alignment:        All buffers should be aligned to this
 34  *   @multiple:         All buffer lengths should be a multiple of this
 35  *   @minimum:          Buffer lengths must not be less than this amount
 36  *   @maximum:          Buffer lengths must not be more than this amount
 37  *
 38  * The constraints apply to all buffers and lengths, both input and output,
 39  * for both compression and decompression, except for the minimum which
 40  * only applies to compression input and decompression output; the
 41  * compressed data can be less than the minimum constraint.  It can be
 42  * assumed that compressed data will always adhere to the multiple
 43  * constraint.
 44  *
 45  * The driver may succeed even if these constraints are violated;
 46  * however the driver can return failure or suffer reduced performance
 47  * if any constraint is not met.
 48  */
 49 int nx842_constraints(struct nx842_constraints *c)
 50 {
 51         memcpy(c, nx842_platform_driver()->constraints, sizeof(*c));
 52         return 0;
 53 }
 54 EXPORT_SYMBOL_GPL(nx842_constraints);
 55 
 56 /**
 57  * nx842_workmem_size
 58  *
 59  * Get the amount of working memory the driver requires.
 60  */
 61 size_t nx842_workmem_size(void)
 62 {
 63         return nx842_platform_driver()->workmem_size;
 64 }
 65 EXPORT_SYMBOL_GPL(nx842_workmem_size);
 66 
 67 int nx842_compress(const unsigned char *in, unsigned int ilen,
 68                    unsigned char *out, unsigned int *olen, void *wmem)
 69 {
 70         return nx842_platform_driver()->compress(in, ilen, out, olen, wmem);
 71 }
 72 EXPORT_SYMBOL_GPL(nx842_compress);
 73 
 74 int nx842_decompress(const unsigned char *in, unsigned int ilen,
 75                      unsigned char *out, unsigned int *olen, void *wmem)
 76 {
 77         return nx842_platform_driver()->decompress(in, ilen, out, olen, wmem);
 78 }
 79 EXPORT_SYMBOL_GPL(nx842_decompress);
 80 
 81 static __init int nx842_init(void)
 82 {
 83         request_module("nx-compress-powernv");
 84         request_module("nx-compress-pseries");
 85 
 86         /* we prevent loading if there's no platform driver, and we get the
 87          * module that set it so it won't unload, so we don't need to check
 88          * if it's set in any of the above functions
 89          */
 90         if (!nx842_platform_driver_get()) {
 91                 pr_err("no nx842 driver found.\n");
 92                 return -ENODEV;
 93         }
 94 
 95         return 0;
 96 }
 97 module_init(nx842_init);
 98 
 99 static void __exit nx842_exit(void)
100 {
101         nx842_platform_driver_put();
102 }
103 module_exit(nx842_exit);
104 

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us