Commit a3d2a10b authored by Aaro Koskinen's avatar Aaro Koskinen Committed by Ralf Baechle

CRYPTO: Octeon: Add instruction definitions for SHA1/256/512

Add instruction definitions for SHA1/256/512.
Signed-off-by: default avatarAaro Koskinen <aaro.koskinen@iki.fi>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: David S. Miller <davem@davemloft.net>
Cc: linux-crypto@vger.kernel.org
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/9491/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent e606ee20
...@@ -5,7 +5,8 @@ ...@@ -5,7 +5,8 @@
* *
* Copyright (C) 2012-2013 Cavium Inc., All Rights Reserved. * Copyright (C) 2012-2013 Cavium Inc., All Rights Reserved.
* *
* MD5 instruction definitions added by Aaro Koskinen <aaro.koskinen@iki.fi>. * MD5/SHA1/SHA256/SHA512 instruction definitions added by
* Aaro Koskinen <aaro.koskinen@iki.fi>.
* *
*/ */
#ifndef __LINUX_OCTEON_CRYPTO_H #ifndef __LINUX_OCTEON_CRYPTO_H
...@@ -21,11 +22,11 @@ extern void octeon_crypto_disable(struct octeon_cop2_state *state, ...@@ -21,11 +22,11 @@ extern void octeon_crypto_disable(struct octeon_cop2_state *state,
unsigned long flags); unsigned long flags);
/* /*
* Macros needed to implement MD5: * Macros needed to implement MD5/SHA1/SHA256:
*/ */
/* /*
* The index can be 0-1. * The index can be 0-1 (MD5) or 0-2 (SHA1), 0-3 (SHA256).
*/ */
#define write_octeon_64bit_hash_dword(value, index) \ #define write_octeon_64bit_hash_dword(value, index) \
do { \ do { \
...@@ -36,7 +37,7 @@ do { \ ...@@ -36,7 +37,7 @@ do { \
} while (0) } while (0)
/* /*
* The index can be 0-1. * The index can be 0-1 (MD5) or 0-2 (SHA1), 0-3 (SHA256).
*/ */
#define read_octeon_64bit_hash_dword(index) \ #define read_octeon_64bit_hash_dword(index) \
({ \ ({ \
...@@ -72,4 +73,78 @@ do { \ ...@@ -72,4 +73,78 @@ do { \
: [rt] "d" (value)); \ : [rt] "d" (value)); \
} while (0) } while (0)
/*
* The value is the final block dword (64-bit).
*/
#define octeon_sha1_start(value) \
do { \
__asm__ __volatile__ ( \
"dmtc2 %[rt],0x4057" \
: \
: [rt] "d" (value)); \
} while (0)
/*
* The value is the final block dword (64-bit).
*/
#define octeon_sha256_start(value) \
do { \
__asm__ __volatile__ ( \
"dmtc2 %[rt],0x404f" \
: \
: [rt] "d" (value)); \
} while (0)
/*
* Macros needed to implement SHA512:
*/
/*
* The index can be 0-7.
*/
#define write_octeon_64bit_hash_sha512(value, index) \
do { \
__asm__ __volatile__ ( \
"dmtc2 %[rt],0x0250+" STR(index) \
: \
: [rt] "d" (value)); \
} while (0)
/*
* The index can be 0-7.
*/
#define read_octeon_64bit_hash_sha512(index) \
({ \
u64 __value; \
\
__asm__ __volatile__ ( \
"dmfc2 %[rt],0x0250+" STR(index) \
: [rt] "=d" (__value) \
: ); \
\
__value; \
})
/*
* The index can be 0-14.
*/
#define write_octeon_64bit_block_sha512(value, index) \
do { \
__asm__ __volatile__ ( \
"dmtc2 %[rt],0x0240+" STR(index) \
: \
: [rt] "d" (value)); \
} while (0)
/*
* The value is the final block word (64-bit).
*/
#define octeon_sha512_start(value) \
do { \
__asm__ __volatile__ ( \
"dmtc2 %[rt],0x424f" \
: \
: [rt] "d" (value)); \
} while (0)
#endif /* __LINUX_OCTEON_CRYPTO_H */ #endif /* __LINUX_OCTEON_CRYPTO_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment