~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/mips/cavium-octeon/crypto/octeon-crypto.h

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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/SHA1/SHA256/SHA512 instruction definitions added by
  9  * Aaro Koskinen <aaro.koskinen@iki.fi>.
 10  *
 11  */
 12 #ifndef __LINUX_OCTEON_CRYPTO_H
 13 #define __LINUX_OCTEON_CRYPTO_H
 14 
 15 #include <linux/sched.h>
 16 #include <asm/mipsregs.h>
 17 
 18 #define OCTEON_CR_OPCODE_PRIORITY 300
 19 
 20 extern unsigned long octeon_crypto_enable(struct octeon_cop2_state *state);
 21 extern void octeon_crypto_disable(struct octeon_cop2_state *state,
 22                                   unsigned long flags);
 23 
 24 /*
 25  * Macros needed to implement MD5/SHA1/SHA256:
 26  */
 27 
 28 /*
 29  * The index can be 0-1 (MD5) or 0-2 (SHA1), 0-3 (SHA256).
 30  */
 31 #define write_octeon_64bit_hash_dword(value, index)     \
 32 do {                                                    \
 33         __asm__ __volatile__ (                          \
 34         "dmtc2 %[rt],0x0048+" STR(index)                \
 35         :                                               \
 36         : [rt] "d" (cpu_to_be64(value)));               \
 37 } while (0)
 38 
 39 /*
 40  * The index can be 0-1 (MD5) or 0-2 (SHA1), 0-3 (SHA256).
 41  */
 42 #define read_octeon_64bit_hash_dword(index)             \
 43 ({                                                      \
 44         __be64 __value;                                 \
 45                                                         \
 46         __asm__ __volatile__ (                          \
 47         "dmfc2 %[rt],0x0048+" STR(index)                \
 48         : [rt] "=d" (__value)                           \
 49         : );                                            \
 50                                                         \
 51         be64_to_cpu(__value);                           \
 52 })
 53 
 54 /*
 55  * The index can be 0-6.
 56  */
 57 #define write_octeon_64bit_block_dword(value, index)    \
 58 do {                                                    \
 59         __asm__ __volatile__ (                          \
 60         "dmtc2 %[rt],0x0040+" STR(index)                \
 61         :                                               \
 62         : [rt] "d" (cpu_to_be64(value)));               \
 63 } while (0)
 64 
 65 /*
 66  * The value is the final block dword (64-bit).
 67  */
 68 #define octeon_md5_start(value)                         \
 69 do {                                                    \
 70         __asm__ __volatile__ (                          \
 71         "dmtc2 %[rt],0x4047"                            \
 72         :                                               \
 73         : [rt] "d" (cpu_to_be64(value)));               \
 74 } while (0)
 75 
 76 /*
 77  * The value is the final block dword (64-bit).
 78  */
 79 #define octeon_sha1_start(value)                        \
 80 do {                                                    \
 81         __asm__ __volatile__ (                          \
 82         "dmtc2 %[rt],0x4057"                            \
 83         :                                               \
 84         : [rt] "d" (value));                            \
 85 } while (0)
 86 
 87 /*
 88  * The value is the final block dword (64-bit).
 89  */
 90 #define octeon_sha256_start(value)                      \
 91 do {                                                    \
 92         __asm__ __volatile__ (                          \
 93         "dmtc2 %[rt],0x404f"                            \
 94         :                                               \
 95         : [rt] "d" (value));                            \
 96 } while (0)
 97 
 98 /*
 99  * Macros needed to implement SHA512:
100  */
101 
102 /*
103  * The index can be 0-7.
104  */
105 #define write_octeon_64bit_hash_sha512(value, index)    \
106 do {                                                    \
107         __asm__ __volatile__ (                          \
108         "dmtc2 %[rt],0x0250+" STR(index)                \
109         :                                               \
110         : [rt] "d" (value));                            \
111 } while (0)
112 
113 /*
114  * The index can be 0-7.
115  */
116 #define read_octeon_64bit_hash_sha512(index)            \
117 ({                                                      \
118         u64 __value;                                    \
119                                                         \
120         __asm__ __volatile__ (                          \
121         "dmfc2 %[rt],0x0250+" STR(index)                \
122         : [rt] "=d" (__value)                           \
123         : );                                            \
124                                                         \
125         __value;                                        \
126 })
127 
128 /*
129  * The index can be 0-14.
130  */
131 #define write_octeon_64bit_block_sha512(value, index)   \
132 do {                                                    \
133         __asm__ __volatile__ (                          \
134         "dmtc2 %[rt],0x0240+" STR(index)                \
135         :                                               \
136         : [rt] "d" (value));                            \
137 } while (0)
138 
139 /*
140  * The value is the final block word (64-bit).
141  */
142 #define octeon_sha512_start(value)                      \
143 do {                                                    \
144         __asm__ __volatile__ (                          \
145         "dmtc2 %[rt],0x424f"                            \
146         :                                               \
147         : [rt] "d" (value));                            \
148 } while (0)
149 
150 /*
151  * The value is the final block dword (64-bit).
152  */
153 #define octeon_sha1_start(value)                        \
154 do {                                                    \
155         __asm__ __volatile__ (                          \
156         "dmtc2 %[rt],0x4057"                            \
157         :                                               \
158         : [rt] "d" (value));                            \
159 } while (0)
160 
161 /*
162  * The value is the final block dword (64-bit).
163  */
164 #define octeon_sha256_start(value)                      \
165 do {                                                    \
166         __asm__ __volatile__ (                          \
167         "dmtc2 %[rt],0x404f"                            \
168         :                                               \
169         : [rt] "d" (value));                            \
170 } while (0)
171 
172 /*
173  * Macros needed to implement SHA512:
174  */
175 
176 /*
177  * The index can be 0-7.
178  */
179 #define write_octeon_64bit_hash_sha512(value, index)    \
180 do {                                                    \
181         __asm__ __volatile__ (                          \
182         "dmtc2 %[rt],0x0250+" STR(index)                \
183         :                                               \
184         : [rt] "d" (value));                            \
185 } while (0)
186 
187 /*
188  * The index can be 0-7.
189  */
190 #define read_octeon_64bit_hash_sha512(index)            \
191 ({                                                      \
192         u64 __value;                                    \
193                                                         \
194         __asm__ __volatile__ (                          \
195         "dmfc2 %[rt],0x0250+" STR(index)                \
196         : [rt] "=d" (__value)                           \
197         : );                                            \
198                                                         \
199         __value;                                        \
200 })
201 
202 /*
203  * The index can be 0-14.
204  */
205 #define write_octeon_64bit_block_sha512(value, index)   \
206 do {                                                    \
207         __asm__ __volatile__ (                          \
208         "dmtc2 %[rt],0x0240+" STR(index)                \
209         :                                               \
210         : [rt] "d" (value));                            \
211 } while (0)
212 
213 /*
214  * The value is the final block word (64-bit).
215  */
216 #define octeon_sha512_start(value)                      \
217 do {                                                    \
218         __asm__ __volatile__ (                          \
219         "dmtc2 %[rt],0x424f"                            \
220         :                                               \
221         : [rt] "d" (value));                            \
222 } while (0)
223 
224 #endif /* __LINUX_OCTEON_CRYPTO_H */
225 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php