/* SPDX-License-Identifier: BSD-2-Clause */
/*
 * Copyright 2018-2019 NXP
 *
 * Brief   CAAM Descriptor interface.
 */
#ifndef __CAAM_DESC_HELPER_H__
#define __CAAM_DESC_HELPER_H__

#include <caam_desc_defines.h>
#include <trace.h>

/*
 * Returns the number of entries of the descriptor
 */
uint32_t caam_desc_get_len(uint32_t *desc);

/* Descriptor Modification function */
void caam_desc_init(uint32_t *desc);
void caam_desc_update_hdr(uint32_t *desc, uint32_t word);
void caam_desc_add_ptr(uint32_t *desc, paddr_t ptr);
void caam_desc_add_word(uint32_t *desc, uint32_t word);

/* Push/Pop descriptor rings queue */
#ifdef CFG_CAAM_64BIT
void caam_desc_push(uint64_t *in_entry, paddr_t paddr);
paddr_t caam_desc_pop(uint64_t *out_entry);
#else
void caam_desc_push(uint32_t *in_entry, paddr_t paddr);
paddr_t caam_desc_pop(uint32_t *out_entry);
#endif /* CFG_CAAM_64BIT */

uint32_t caam_read_jobstatus(uint32_t *addr);

/* Debug print function to dump a Descriptor in hex */
static inline void dump_desc(uint32_t *desc)
{
	size_t idx = 0;
	size_t len = 0;

	len = caam_desc_get_len(desc);

	for (idx = 0; idx < len; idx++)
		trace_printf(NULL, 0, 0, false, "[%02zu] %08" PRIX32, idx,
			     desc[idx]);
}

/*
 * Returns the descriptor size in bytes of nbEntries
 */
#define DESC_SZBYTES(nbentries) ((nbentries) * sizeof(uint32_t))

/*
 * Descriptor Header starting at idx w/o descriptor length
 */
#define DESC_HDR(idx) (CMD_HDR_JD_TYPE | HDR_JD_ONE | HDR_JD_START_IDX(idx))

/*
 * Descriptor Header starting at index 0 with descriptor length len
 */
#define DESC_HEADER(len) (DESC_HDR(0) | HDR_JD_DESCLEN(len))

/*
 * Descriptor Header starting at idx with descriptor length len
 */
#define DESC_HEADER_IDX(len, idx) (DESC_HDR(idx) | HDR_JD_DESCLEN(len))

/*
 * Jump Local of class cla to descriptor offset if test meet the
 * condition cond
 */
#define JUMP_LOCAL(cla, test, cond, offset)                                    \
	(CMD_JUMP_TYPE | CMD_CLASS(cla) | JUMP_TYPE(LOCAL) |                   \
	 JUMP_TST_TYPE(test) | (cond) | JMP_LOCAL_OFFSET(offset))

/*
 * Jump Local of no class to descriptor offset if test meet the
 * condition cond
 */
#define JUMP_CNO_LOCAL(test, cond, offset)                                     \
	JUMP_LOCAL(CLASS_NO, test, cond, offset)

/*
 * Jump Local of class 1 to descriptor offset if test meet the
 * condition ond
 */
#define JUMP_C1_LOCAL(test, cond, offset)                                      \
	JUMP_LOCAL(CLASS_1, test, cond, offset)

/*
 * Jump No Local of class cla to descriptor offset if test meet the
 * condition cond
 */
#define JUMP_NOTLOCAL(cla, test, cond)                                         \
	(CMD_JUMP_TYPE | CMD_CLASS(cla) | JUMP_TYPE(NON_LOCAL) |               \
	 JUMP_TST_TYPE(test) | (cond))

/*
 * User Halt with error if test meet the condition cond
 */
#define HALT_USER(test, cond, error)                                           \
	(CMD_JUMP_TYPE | JUMP_TYPE(HALT_USER_STATUS) | JUMP_TST_TYPE(test) |   \
	 JMP_COND(cond) | JMP_LOCAL_OFFSET(error))

/*
 * Load Immediate value of length len to register dst of class cla
 */
#define LD_IMM(cla, dst, len)                                                  \
	(CMD_LOAD_TYPE | CMD_CLASS(cla) | CMD_IMM | LOAD_DST(dst) |            \
	 LOAD_LENGTH(len))

/*
 * Load Immediate value of length len to register dst w/o class
 */
#define LD_NOCLASS_IMM(dst, len) LD_IMM(CLASS_NO, dst, len)

/*
 * Load value of length len to register dst of class cla
 */
#define LD_NOIMM(cla, dst, len)                                                \
	(CMD_LOAD_TYPE | CMD_CLASS(cla) | LOAD_DST(dst) | LOAD_LENGTH(len))

/*
 * Load value of length len to register dst of class cla starting
 * at register offset off
 */
#define LD_NOIMM_OFF(cla, dst, len, off)                                       \
	(CMD_LOAD_TYPE | CMD_CLASS(cla) | LOAD_DST(dst) | LOAD_OFFSET(off) |   \
	 LOAD_LENGTH(len))

/*
 * FIFO Load to register dst class cla with action act
 */
#define FIFO_LD(cla, dst, act, len)                                            \
	(CMD_FIFO_LOAD_TYPE | CMD_CLASS(cla) | FIFO_LOAD_INPUT(dst) |          \
	 FIFO_LOAD_ACTION(act) | FIFO_LOAD_LENGTH(len))

/*
 * FIFO Load to register dst class cla with action act.
 * Pointer is a Scatter/Gatter Table
 */
#define FIFO_LD_SGT(cla, dst, act, len)                                        \
	(CMD_FIFO_LOAD_TYPE | CMD_CLASS(cla) | CMD_SGT |                       \
	 FIFO_LOAD_INPUT(dst) | FIFO_LOAD_ACTION(act) | FIFO_LOAD_LENGTH(len))

/*
 * FIFO Load to register dst class cla with action act.
 * The length is externally defined
 */
#define FIFO_LD_EXT(cla, dst, act)                                             \
	(CMD_FIFO_LOAD_TYPE | FIFO_LOAD_EXT | CMD_CLASS(cla) |                 \
	 FIFO_LOAD_INPUT(dst) | FIFO_LOAD_ACTION(act))

/*
 * FIFO Load Immediate data length len to register dst class cla
 * with action act.
 */
#define FIFO_LD_IMM(cla, dst, act, len)                                        \
	(CMD_FIFO_LOAD_TYPE | CMD_IMM | CMD_CLASS(cla) |                       \
	 FIFO_LOAD_INPUT(dst) | FIFO_LOAD_ACTION(act) | FIFO_LOAD_LENGTH(len))

/*
 * Store value of length len from register src of class cla
 */
#define ST_NOIMM(cla, src, len)                                                \
	(CMD_STORE_TYPE | CMD_CLASS(cla) | STORE_SRC(src) | STORE_LENGTH(len))

/*
 * Store value of length len from register src of class cla starting
 * at register offset off
 */
#define ST_NOIMM_OFF(cla, src, len, off)                                       \
	(CMD_STORE_TYPE | CMD_CLASS(cla) | STORE_SRC(src) |                    \
	 STORE_OFFSET(off) | STORE_LENGTH(len))

/*
 * FIFO Store from register src of length len
 */
#define FIFO_ST(src, len)                                                      \
	(CMD_FIFO_STORE_TYPE | FIFO_STORE_OUTPUT(src) | FIFO_STORE_LENGTH(len))

/*
 * FIFO Store from register src.
 * The length is externally defined
 */
#define FIFO_ST_EXT(src)                                                       \
	(CMD_FIFO_STORE_TYPE | FIFO_LOAD_EXT | FIFO_STORE_OUTPUT(src))

/*
 * FIFO Store from register src of length len.
 * Pointer is a Scatter/Gatter Table
 */
#define FIFO_ST_SGT(src, len)                                                  \
	(CMD_FIFO_STORE_TYPE | CMD_SGT | FIFO_STORE_OUTPUT(src) |              \
	 FIFO_STORE_LENGTH(len))

/*
 * RNG State Handle instantation operation for sh ID
 */
#define RNG_SH_INST(sh)                                                        \
	(CMD_OP_TYPE | OP_TYPE(CLASS1) | OP_ALGO(RNG) | ALGO_RNG_SH(sh) |      \
	 ALGO_AS(RNG_INSTANTIATE))

/*
 * RNG Generates Secure Keys
 */
#define RNG_GEN_SECKEYS                                                        \
	(CMD_OP_TYPE | OP_TYPE(CLASS1) | OP_ALGO(RNG) | ALGO_RNG_SK |          \
	 ALGO_AS(RNG_GENERATE))

/*
 * RNG Generates Data
 */
#define RNG_GEN_DATA                                                           \
	(CMD_OP_TYPE | OP_TYPE(CLASS1) | OP_ALGO(RNG) | ALGO_AS(RNG_GENERATE))

/*
 * Hash Init Operation of algorithm algo
 */
#define HASH_INIT(algo)                                                        \
	(CMD_OP_TYPE | OP_TYPE(CLASS2) | (algo) | ALGO_AS(INIT) | ALGO_ENCRYPT)

/*
 * Hash Update Operation of algorithm algo
 */
#define HASH_UPDATE(algo)                                                      \
	(CMD_OP_TYPE | OP_TYPE(CLASS2) | (algo) | ALGO_AS(UPDATE) |            \
	 ALGO_ENCRYPT)

/*
 * Hash Final Operation of algorithm algo
 */
#define HASH_FINAL(algo)                                                       \
	(CMD_OP_TYPE | OP_TYPE(CLASS2) | (algo) | ALGO_AS(FINAL) | ALGO_ENCRYPT)

/*
 * Hash Init and Final Operation of algorithm algo
 */
#define HASH_INITFINAL(algo)                                                   \
	(CMD_OP_TYPE | OP_TYPE(CLASS2) | (algo) | ALGO_AS(INIT_FINAL) |        \
	 ALGO_ENCRYPT)

/*
 * HMAC Init Decryption Operation of algorithm algo
 */
#define HMAC_INIT_DECRYPT(algo)                                                \
	(CMD_OP_TYPE | OP_TYPE(CLASS2) | (algo) | ALGO_AS(INIT) |              \
	 ALGO_AAI(DIGEST_HMAC) | ALGO_DECRYPT)

/*
 * HMAC Init and Final Operation of algorithm algo with Precomp key
 */
#define HMAC_INITFINAL_PRECOMP(algo)                                           \
	(CMD_OP_TYPE | OP_TYPE(CLASS2) | (algo) | ALGO_AS(INIT_FINAL) |        \
	 ALGO_AAI(DIGEST_HMAC_PRECOMP) | ALGO_ENCRYPT)

/*
 * HMAC Init Operation of algorithm algo with Precomp key
 */
#define HMAC_INIT_PRECOMP(algo)                                                \
	(CMD_OP_TYPE | OP_TYPE(CLASS2) | (algo) | ALGO_AS(INIT) |              \
	 ALGO_AAI(DIGEST_HMAC_PRECOMP) | ALGO_ENCRYPT)

/*
 * HMAC Final Operation of algorithm algo with Precomp key
 */
#define HMAC_FINAL_PRECOMP(algo)                                               \
	(CMD_OP_TYPE | OP_TYPE(CLASS2) | (algo) | ALGO_AS(FINAL) |             \
	 ALGO_AAI(DIGEST_HMAC_PRECOMP) | ALGO_ENCRYPT)

/*
 * Cipher Init and Final Operation of algorithm algo
 */
#define CIPHER_INITFINAL(algo, encrypt)                                        \
	(CMD_OP_TYPE | OP_TYPE(CLASS1) | (algo) | ALGO_AS(INIT_FINAL) |        \
	 ((encrypt) ? ALGO_ENCRYPT : ALGO_DECRYPT))

/*
 * Cipher Init Operation of algorithm algo
 */
#define CIPHER_INIT(algo, encrypt)                                             \
	(CMD_OP_TYPE | OP_TYPE(CLASS1) | (algo) | ALGO_AS(INIT) |              \
	 ((encrypt) ? ALGO_ENCRYPT : ALGO_DECRYPT))

/*
 * Cipher Update Operation of algorithm algo
 */
#define CIPHER_UPDATE(algo, encrypt)                                           \
	(CMD_OP_TYPE | OP_TYPE(CLASS1) | (algo) | ALGO_AS(UPDATE) |            \
	 ((encrypt) ? ALGO_ENCRYPT : ALGO_DECRYPT))

/*
 * Cipher Final Operation of algorithm algo
 */
#define CIPHER_FINAL(algo, encrypt)                                            \
	(CMD_OP_TYPE | OP_TYPE(CLASS1) | (algo) | ALGO_AS(FINAL) |             \
	 ((encrypt) ? ALGO_ENCRYPT : ALGO_DECRYPT))

/*
 * Load a class cla key of length len to register dst.
 * Key can be stored in plain text.
 */
#define LD_KEY_PLAIN(cla, dst, len)                                            \
	(CMD_KEY_TYPE | CMD_CLASS(cla) | KEY_PTS | KEY_DEST(dst) |             \
	 KEY_LENGTH(len))

/*
 * Load a split key of length len.
 */
#define LD_KEY_SPLIT(len)                                                      \
	(CMD_KEY_TYPE | CMD_CLASS(CLASS_2) | KEY_DEST(MDHA_SPLIT) |            \
	 KEY_LENGTH(len))

/*
 * MPPRIVK generation function.
 */
#define MPPRIVK (CMD_OP_TYPE | OP_TYPE(ENCAPS) | PROTID(MPKEY))

/*
 * MPPUBK generation function.
 */
#define MPPUBK (CMD_OP_TYPE | OP_TYPE(DECAPS) | PROTID(MPKEY))

/*
 * MPSIGN function.
 */
#define MPSIGN_OP (CMD_OP_TYPE | OP_TYPE(DECAPS) | PROTID(MPSIGN))

/*
 * Operation Mathematical of length len
 *     dest = src0 (operation func) src1
 */
#define MATH(func, src0, src1, dst, len)                                       \
	(CMD_MATH_TYPE | MATH_FUNC(func) | MATH_SRC0(src0) | MATH_SRC1(src1) | \
	 MATH_DST(dst) | MATH_LENGTH(len))

/*
 * Operation Mathematical of length len using an immediate value as operand 1
 *     dest = src (operation func) val
 */
#define MATHI_OP1(func, src, val, dst, len)                                    \
	(CMD_MATHI_TYPE | MATH_FUNC(func) | MATHI_SRC(src) |                   \
	 MATHI_IMM_VALUE(val) | MATHI_DST(dst) | MATH_LENGTH(len))

/*
 * PKHA Copy function from src to dst. Copy number of words specified
 * in Source size register
 */
#define PKHA_CPY_SSIZE(src, dst)                                               \
	(CMD_OP_TYPE | OP_TYPE(PKHA) | PKHA_ALG | PKHA_FUNC(CPY_SSIZE) |       \
	 PKHA_CPY_SRC(src) | PKHA_CPY_DST(dst))

/*
 * PKHA Operation op result into dst
 */
#define PKHA_OP(op, dst)                                                       \
	(CMD_OP_TYPE | OP_TYPE(PKHA) | PKHA_ALG | PKHA_FUNC(op) |              \
	 PKHA_OUTSEL(dst))

/*
 * PKHA Binomial operation op result into dst
 */
#define PKHA_F2M_OP(op, dst)                                                   \
	(CMD_OP_TYPE | OP_TYPE(PKHA) | PKHA_ALG | PKHA_F2M | PKHA_FUNC(op) |   \
	 PKHA_OUTSEL(dst))

/*
 * Move src to dst
 */
#define MOVE(src, dst, off, len)                                               \
	(CMD_MOVE_TYPE | MOVE_SRC(src) | MOVE_DST(dst) | MOVE_OFFSET(off) |    \
	 MOVE_LENGTH(len))

/*
 * Move src to dst and wait until completion
 */
#define MOVE_WAIT(src, dst, off, len)                                          \
	(CMD_MOVE_TYPE | MOVE_WC | MOVE_SRC(src) | MOVE_DST(dst) |             \
	 MOVE_OFFSET(off) | MOVE_LENGTH(len))

/*
 * RSA Encryption using format
 */
#define RSA_ENCRYPT(format)                                                    \
	(CMD_OP_TYPE | PROTID(RSA_ENC) | PROT_RSA_FMT(format))

/*
 * RSA Decryption using format
 */
#define RSA_DECRYPT(format)                                                    \
	(CMD_OP_TYPE | PROTID(RSA_DEC) | PROT_RSA_FMT(format))

/*
 * RSA Finalize Key in format
 */
#define RSA_FINAL_KEY(format)                                                  \
	(CMD_OP_TYPE | PROTID(RSA_FINISH_KEY) | PROT_RSA_KEY(format))

/*
 * Public Keypair generation
 */
#define PK_KEYPAIR_GEN(type)                                                   \
	(CMD_OP_TYPE | OP_TYPE(UNI) | PROTID(PKKEY) | PROT_PK_TYPE(type))

/*
 * DSA/ECDSA signature of message hashed
 */
#define DSA_SIGN(type)                                                         \
	(CMD_OP_TYPE | OP_TYPE(UNI) | PROTID(DSASIGN) | PROT_PK_MSG(HASHED) |  \
	 PROT_PK_TYPE(type))

/*
 * DSA/ECDSA signature verify message hashed
 */
#define DSA_VERIFY(type)                                                       \
	(CMD_OP_TYPE | OP_TYPE(UNI) | PROTID(DSAVERIFY) |                      \
	 PROT_PK_MSG(HASHED) | PROT_PK_TYPE(type))

/*
 * DH/ECC Shared Secret
 */
#define SHARED_SECRET(type)                                                    \
	(CMD_OP_TYPE | OP_TYPE(UNI) | PROTID(SHARED_SECRET) |                  \
	 PROT_PK_TYPE(type))

/*
 * Blob Master Key Verification
 */
#define BLOB_MSTR_KEY                                                          \
	(CMD_OP_TYPE | OP_TYPE(ENCAPS) | PROTID(BLOB) | PROT_BLOB_FMT_MSTR)

/*
 * Blob encapsulation
 */
#define BLOB_ENCAPS                                                            \
	(CMD_OP_TYPE | OP_TYPE(ENCAPS) | PROTID(BLOB) |                        \
	 PROT_BLOB_FORMAT(NORMAL))

/*
 * Blob decapsulation
 */
#define BLOB_DECAPS                                                            \
	(CMD_OP_TYPE | OP_TYPE(DECAPS) | PROTID(BLOB) |                        \
	 PROT_BLOB_FORMAT(NORMAL))

/*
 * Black key CCM size
 */
#define BLACK_KEY_CCM_SIZE(size)                                               \
	(ROUNDUP(size, 8) + BLACK_KEY_NONCE_SIZE + BLACK_KEY_ICV_SIZE)

/*
 * Black key ECB size
 */
#define BLACK_KEY_ECB_SIZE(size) ROUNDUP(size, 16)

/*
 * Sequence Inout Pointer of length len
 */
#define SEQ_IN_PTR(len) (CMD_SEQ_IN_TYPE | SEQ_LENGTH(len))

/*
 * Sequence Output Pointer of length len
 */
#define SEQ_OUT_PTR(len) (CMD_SEQ_OUT_TYPE | SEQ_LENGTH(len))

#endif /* __CAAM_DESC_HELPER_H__ */
