| 2014 | } |
| 2015 | |
| 2016 | static int |
| 2017 | ccp_perform_aes_cmac(struct rte_crypto_op *op, |
| 2018 | struct ccp_queue *cmd_q) |
| 2019 | { |
| 2020 | struct ccp_session *session; |
| 2021 | union ccp_function function; |
| 2022 | struct ccp_passthru pst; |
| 2023 | struct ccp_desc *desc; |
| 2024 | uint32_t tail; |
| 2025 | uint8_t *src_tb, *append_ptr, *ctx_addr; |
| 2026 | phys_addr_t src_addr, dest_addr, key_addr; |
| 2027 | int length, non_align_len; |
| 2028 | |
| 2029 | session = CRYPTODEV_GET_SYM_SESS_PRIV(op->sym->session); |
| 2030 | key_addr = rte_mem_virt2phy(session->auth.key_ccp); |
| 2031 | |
| 2032 | src_addr = rte_pktmbuf_iova_offset(op->sym->m_src, |
| 2033 | op->sym->auth.data.offset); |
| 2034 | append_ptr = (uint8_t *)rte_pktmbuf_append(op->sym->m_src, |
| 2035 | session->auth.ctx_len); |
| 2036 | dest_addr = (phys_addr_t)rte_mem_virt2phy((void *)append_ptr); |
| 2037 | |
| 2038 | function.raw = 0; |
| 2039 | CCP_AES_ENCRYPT(&function) = CCP_CIPHER_DIR_ENCRYPT; |
| 2040 | CCP_AES_MODE(&function) = session->auth.um.aes_mode; |
| 2041 | CCP_AES_TYPE(&function) = session->auth.ut.aes_type; |
| 2042 | |
| 2043 | if (op->sym->auth.data.length % session->auth.block_size == 0) { |
| 2044 | |
| 2045 | ctx_addr = session->auth.pre_compute; |
| 2046 | memset(ctx_addr, 0, AES_BLOCK_SIZE); |
| 2047 | pst.src_addr = (phys_addr_t)rte_mem_virt2iova((void *)ctx_addr); |
| 2048 | pst.dest_addr = (phys_addr_t)(cmd_q->sb_iv * CCP_SB_BYTES); |
| 2049 | pst.len = CCP_SB_BYTES; |
| 2050 | pst.dir = 1; |
| 2051 | pst.bit_mod = CCP_PASSTHRU_BITWISE_NOOP; |
| 2052 | pst.byte_swap = CCP_PASSTHRU_BYTESWAP_NOOP; |
| 2053 | ccp_perform_passthru(&pst, cmd_q); |
| 2054 | |
| 2055 | desc = &cmd_q->qbase_desc[cmd_q->qidx]; |
| 2056 | memset(desc, 0, Q_DESC_SIZE); |
| 2057 | |
| 2058 | /* prepare desc for aes-cmac command */ |
| 2059 | CCP_CMD_ENGINE(desc) = CCP_ENGINE_AES; |
| 2060 | CCP_CMD_EOM(desc) = 1; |
| 2061 | CCP_CMD_FUNCTION(desc) = function.raw; |
| 2062 | |
| 2063 | CCP_CMD_LEN(desc) = op->sym->auth.data.length; |
| 2064 | CCP_CMD_SRC_LO(desc) = ((uint32_t)src_addr); |
| 2065 | CCP_CMD_SRC_HI(desc) = high32_value(src_addr); |
| 2066 | CCP_CMD_SRC_MEM(desc) = CCP_MEMTYPE_SYSTEM; |
| 2067 | |
| 2068 | CCP_CMD_KEY_LO(desc) = ((uint32_t)key_addr); |
| 2069 | CCP_CMD_KEY_HI(desc) = high32_value(key_addr); |
| 2070 | CCP_CMD_KEY_MEM(desc) = CCP_MEMTYPE_SYSTEM; |
| 2071 | CCP_CMD_LSB_ID(desc) = cmd_q->sb_iv; |
| 2072 | |
| 2073 | cmd_q->qidx = (cmd_q->qidx + 1) % COMMANDS_PER_QUEUE; |
no test coverage detected