Skip to content

Commit 20a26fa

Browse files
Marcelo H. Cerriherbertx
authored andcommitted
crypto: vmx - Adding VMX module for Power 8
This patch adds routines supporting VMX instructions on the Power 8. Signed-off-by: Leonidas S. Barbosa <[email protected]> Signed-off-by: Herbert Xu <[email protected]>
1 parent 66c046b commit 20a26fa

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed

drivers/crypto/vmx/vmx.c

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
/**
2+
* Routines supporting VMX instructions on the Power 8
3+
*
4+
* Copyright (C) 2015 International Business Machines Inc.
5+
*
6+
* This program is free software; you can redistribute it and/or modify
7+
* it under the terms of the GNU General Public License as published by
8+
* the Free Software Foundation; version 2 only.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU General Public License for more details.
14+
*
15+
* You should have received a copy of the GNU General Public License
16+
* along with this program; if not, write to the Free Software
17+
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18+
*
19+
* Author: Marcelo Henrique Cerri <[email protected]>
20+
*/
21+
22+
#include <linux/module.h>
23+
#include <linux/moduleparam.h>
24+
#include <linux/types.h>
25+
#include <linux/err.h>
26+
#include <linux/crypto.h>
27+
#include <asm/cputable.h>
28+
#include <crypto/internal/hash.h>
29+
30+
extern struct shash_alg p8_ghash_alg;
31+
extern struct crypto_alg p8_aes_alg;
32+
extern struct crypto_alg p8_aes_cbc_alg;
33+
extern struct crypto_alg p8_aes_ctr_alg;
34+
static struct crypto_alg *algs[] = {
35+
&p8_aes_alg,
36+
&p8_aes_cbc_alg,
37+
&p8_aes_ctr_alg,
38+
NULL,
39+
};
40+
41+
int __init p8_init(void)
42+
{
43+
int ret = 0;
44+
struct crypto_alg **alg_it;
45+
46+
if (!(cur_cpu_spec->cpu_user_features2 & PPC_FEATURE2_VEC_CRYPTO))
47+
return -ENODEV;
48+
49+
for (alg_it = algs; *alg_it; alg_it++) {
50+
ret = crypto_register_alg(*alg_it);
51+
printk(KERN_INFO "crypto_register_alg '%s' = %d\n",
52+
(*alg_it)->cra_name, ret);
53+
if (ret) {
54+
for (alg_it--; alg_it >= algs; alg_it--)
55+
crypto_unregister_alg(*alg_it);
56+
break;
57+
}
58+
}
59+
if (ret)
60+
return ret;
61+
62+
ret = crypto_register_shash(&p8_ghash_alg);
63+
if (ret) {
64+
for (alg_it = algs; *alg_it; alg_it++)
65+
crypto_unregister_alg(*alg_it);
66+
}
67+
return ret;
68+
}
69+
70+
void __exit p8_exit(void)
71+
{
72+
struct crypto_alg **alg_it;
73+
74+
for (alg_it = algs; *alg_it; alg_it++) {
75+
printk(KERN_INFO "Removing '%s'\n", (*alg_it)->cra_name);
76+
crypto_unregister_alg(*alg_it);
77+
}
78+
crypto_unregister_shash(&p8_ghash_alg);
79+
}
80+
81+
module_init(p8_init);
82+
module_exit(p8_exit);
83+
84+
MODULE_AUTHOR("Marcelo Cerri<[email protected]>");
85+
MODULE_DESCRIPTION("IBM VMX cryptogaphic acceleration instructions support on Power 8");
86+
MODULE_LICENSE("GPL");
87+
MODULE_VERSION("1.0.0");
88+

0 commit comments

Comments
 (0)