OSDN Git Service

e2a4aece9c24a3684f665492ca088f2a28a2f096
[uclinux-h8/linux.git] / arch / mips / cavium-octeon / crypto / octeon-crypto.h
1 /*
2  * This file is subject to the terms and conditions of the GNU General Public
3  * License. See the file "COPYING" in the main directory of this archive
4  * for more details.
5  *
6  * Copyright (C) 2012-2013 Cavium Inc., All Rights Reserved.
7  *
8  * MD5 instruction definitions added by Aaro Koskinen <aaro.koskinen@iki.fi>.
9  *
10  */
11 #ifndef __LINUX_OCTEON_CRYPTO_H
12 #define __LINUX_OCTEON_CRYPTO_H
13
14 #include <linux/sched.h>
15 #include <asm/mipsregs.h>
16
17 #define OCTEON_CR_OPCODE_PRIORITY 300
18
19 extern unsigned long octeon_crypto_enable(struct octeon_cop2_state *state);
20 extern void octeon_crypto_disable(struct octeon_cop2_state *state,
21                                   unsigned long flags);
22
23 /*
24  * Macros needed to implement MD5:
25  */
26
27 /*
28  * The index can be 0-1.
29  */
30 #define write_octeon_64bit_hash_dword(value, index)     \
31 do {                                                    \
32         __asm__ __volatile__ (                          \
33         "dmtc2 %[rt],0x0048+" STR(index)                \
34         :                                               \
35         : [rt] "d" (value));                            \
36 } while (0)
37
38 /*
39  * The index can be 0-1.
40  */
41 #define read_octeon_64bit_hash_dword(index)             \
42 ({                                                      \
43         u64 __value;                                    \
44                                                         \
45         __asm__ __volatile__ (                          \
46         "dmfc2 %[rt],0x0048+" STR(index)                \
47         : [rt] "=d" (__value)                           \
48         : );                                            \
49                                                         \
50         __value;                                        \
51 })
52
53 /*
54  * The index can be 0-6.
55  */
56 #define write_octeon_64bit_block_dword(value, index)    \
57 do {                                                    \
58         __asm__ __volatile__ (                          \
59         "dmtc2 %[rt],0x0040+" STR(index)                \
60         :                                               \
61         : [rt] "d" (value));                            \
62 } while (0)
63
64 /*
65  * The value is the final block dword (64-bit).
66  */
67 #define octeon_md5_start(value)                         \
68 do {                                                    \
69         __asm__ __volatile__ (                          \
70         "dmtc2 %[rt],0x4047"                            \
71         :                                               \
72         : [rt] "d" (value));                            \
73 } while (0)
74
75 #endif /* __LINUX_OCTEON_CRYPTO_H */