crypto: caam - faster aead implementation
Job descriptors only contain header and seq pointers. Other commands are stored in separate shared descriptors for encrypt, decrypt and givencrypt, stored as arrays in caam_ctx. This requires additional macros to create math commands to calculate assoclen and cryptlen. Signed-off-by: Yuan Kang <Yuan.Kang@freescale.com> Signed-off-by: Kim Phillips <kim.phillips@freescale.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
885e9e2fd3
commit
1acebad3d8
2 changed files with 839 additions and 337 deletions
File diff suppressed because it is too large
Load diff
|
@ -9,7 +9,7 @@
|
|||
#define IMMEDIATE (1 << 23)
|
||||
#define CAAM_CMD_SZ sizeof(u32)
|
||||
#define CAAM_PTR_SZ sizeof(dma_addr_t)
|
||||
#define CAAM_DESC_BYTES_MAX (CAAM_CMD_SZ * 64)
|
||||
#define CAAM_DESC_BYTES_MAX (CAAM_CMD_SZ * MAX_CAAM_DESCSIZE)
|
||||
|
||||
#ifdef DEBUG
|
||||
#define PRINT_POS do { printk(KERN_DEBUG "%02d: %s\n", desc_len(desc),\
|
||||
|
@ -18,6 +18,9 @@
|
|||
#define PRINT_POS
|
||||
#endif
|
||||
|
||||
#define SET_OK_PROP_ERRORS (IMMEDIATE | LDST_CLASS_DECO | \
|
||||
LDST_SRCDST_WORD_DECOCTRL | \
|
||||
(LDOFF_CHG_SHARE_OK_PROP << LDST_OFFSET_SHIFT))
|
||||
#define DISABLE_AUTO_INFO_FIFO (IMMEDIATE | LDST_CLASS_DECO | \
|
||||
LDST_SRCDST_WORD_DECOCTRL | \
|
||||
(LDOFF_DISABLE_AUTO_NFIFO << LDST_OFFSET_SHIFT))
|
||||
|
@ -203,3 +206,56 @@ static inline void append_##cmd##_imm_##type(u32 *desc, type immediate, \
|
|||
append_cmd(desc, immediate); \
|
||||
}
|
||||
APPEND_CMD_RAW_IMM(load, LOAD, u32);
|
||||
|
||||
/*
|
||||
* Append math command. Only the last part of destination and source need to
|
||||
* be specified
|
||||
*/
|
||||
#define APPEND_MATH(op, desc, dest, src_0, src_1, len) \
|
||||
append_cmd(desc, CMD_MATH | MATH_FUN_##op | MATH_DEST_##dest | \
|
||||
MATH_SRC0_##src_0 | MATH_SRC1_##src_1 | (u32) (len & MATH_LEN_MASK));
|
||||
|
||||
#define append_math_add(desc, dest, src0, src1, len) \
|
||||
APPEND_MATH(ADD, desc, dest, src0, src1, len)
|
||||
#define append_math_sub(desc, dest, src0, src1, len) \
|
||||
APPEND_MATH(SUB, desc, dest, src0, src1, len)
|
||||
#define append_math_add_c(desc, dest, src0, src1, len) \
|
||||
APPEND_MATH(ADDC, desc, dest, src0, src1, len)
|
||||
#define append_math_sub_b(desc, dest, src0, src1, len) \
|
||||
APPEND_MATH(SUBB, desc, dest, src0, src1, len)
|
||||
#define append_math_and(desc, dest, src0, src1, len) \
|
||||
APPEND_MATH(AND, desc, dest, src0, src1, len)
|
||||
#define append_math_or(desc, dest, src0, src1, len) \
|
||||
APPEND_MATH(OR, desc, dest, src0, src1, len)
|
||||
#define append_math_xor(desc, dest, src0, src1, len) \
|
||||
APPEND_MATH(XOR, desc, dest, src0, src1, len)
|
||||
#define append_math_lshift(desc, dest, src0, src1, len) \
|
||||
APPEND_MATH(LSHIFT, desc, dest, src0, src1, len)
|
||||
#define append_math_rshift(desc, dest, src0, src1, len) \
|
||||
APPEND_MATH(RSHIFT, desc, dest, src0, src1, len)
|
||||
|
||||
/* Exactly one source is IMM. Data is passed in as u32 value */
|
||||
#define APPEND_MATH_IMM_u32(op, desc, dest, src_0, src_1, data) \
|
||||
do { \
|
||||
APPEND_MATH(op, desc, dest, src_0, src_1, CAAM_CMD_SZ); \
|
||||
append_cmd(desc, data); \
|
||||
} while (0);
|
||||
|
||||
#define append_math_add_imm_u32(desc, dest, src0, src1, data) \
|
||||
APPEND_MATH_IMM_u32(ADD, desc, dest, src0, src1, data)
|
||||
#define append_math_sub_imm_u32(desc, dest, src0, src1, data) \
|
||||
APPEND_MATH_IMM_u32(SUB, desc, dest, src0, src1, data)
|
||||
#define append_math_add_c_imm_u32(desc, dest, src0, src1, data) \
|
||||
APPEND_MATH_IMM_u32(ADDC, desc, dest, src0, src1, data)
|
||||
#define append_math_sub_b_imm_u32(desc, dest, src0, src1, data) \
|
||||
APPEND_MATH_IMM_u32(SUBB, desc, dest, src0, src1, data)
|
||||
#define append_math_and_imm_u32(desc, dest, src0, src1, data) \
|
||||
APPEND_MATH_IMM_u32(AND, desc, dest, src0, src1, data)
|
||||
#define append_math_or_imm_u32(desc, dest, src0, src1, data) \
|
||||
APPEND_MATH_IMM_u32(OR, desc, dest, src0, src1, data)
|
||||
#define append_math_xor_imm_u32(desc, dest, src0, src1, data) \
|
||||
APPEND_MATH_IMM_u32(XOR, desc, dest, src0, src1, data)
|
||||
#define append_math_lshift_imm_u32(desc, dest, src0, src1, data) \
|
||||
APPEND_MATH_IMM_u32(LSHIFT, desc, dest, src0, src1, data)
|
||||
#define append_math_rshift_imm_u32(desc, dest, src0, src1, data) \
|
||||
APPEND_MATH_IMM_u32(RSHIFT, desc, dest, src0, src1, data)
|
||||
|
|
Loading…
Reference in a new issue