| 1949 | } |
| 1950 | |
| 1951 | static int |
| 1952 | ccp_perform_sha3(struct rte_crypto_op *op, |
| 1953 | struct ccp_queue *cmd_q) |
| 1954 | { |
| 1955 | struct ccp_session *session; |
| 1956 | union ccp_function function; |
| 1957 | struct ccp_desc *desc; |
| 1958 | uint8_t *ctx_addr = NULL, *append_ptr = NULL; |
| 1959 | uint32_t tail; |
| 1960 | phys_addr_t src_addr, dest_addr, ctx_paddr; |
| 1961 | |
| 1962 | session = CRYPTODEV_GET_SYM_SESS_PRIV(op->sym->session); |
| 1963 | |
| 1964 | src_addr = rte_pktmbuf_iova_offset(op->sym->m_src, |
| 1965 | op->sym->auth.data.offset); |
| 1966 | append_ptr = (uint8_t *)rte_pktmbuf_append(op->sym->m_src, |
| 1967 | session->auth.ctx_len); |
| 1968 | if (!append_ptr) { |
| 1969 | CCP_LOG_ERR("CCP MBUF append failed\n"); |
| 1970 | return -1; |
| 1971 | } |
| 1972 | dest_addr = (phys_addr_t)rte_mem_virt2iova((void *)append_ptr); |
| 1973 | ctx_paddr = (phys_addr_t)rte_mem_virt2iova((void *)ctx_addr); |
| 1974 | |
| 1975 | ctx_addr = session->auth.sha3_ctx; |
| 1976 | |
| 1977 | desc = &cmd_q->qbase_desc[cmd_q->qidx]; |
| 1978 | memset(desc, 0, Q_DESC_SIZE); |
| 1979 | |
| 1980 | /* prepare desc for SHA3 operation */ |
| 1981 | CCP_CMD_ENGINE(desc) = CCP_ENGINE_SHA; |
| 1982 | CCP_CMD_INIT(desc) = 1; |
| 1983 | CCP_CMD_EOM(desc) = 1; |
| 1984 | |
| 1985 | function.raw = 0; |
| 1986 | CCP_SHA_TYPE(&function) = session->auth.ut.sha_type; |
| 1987 | CCP_CMD_FUNCTION(desc) = function.raw; |
| 1988 | |
| 1989 | CCP_CMD_LEN(desc) = op->sym->auth.data.length; |
| 1990 | |
| 1991 | CCP_CMD_SRC_LO(desc) = ((uint32_t)src_addr); |
| 1992 | CCP_CMD_SRC_HI(desc) = high32_value(src_addr); |
| 1993 | CCP_CMD_SRC_MEM(desc) = CCP_MEMTYPE_SYSTEM; |
| 1994 | |
| 1995 | CCP_CMD_DST_LO(desc) = ((uint32_t)dest_addr); |
| 1996 | CCP_CMD_DST_HI(desc) = high32_value(dest_addr); |
| 1997 | CCP_CMD_DST_MEM(desc) = CCP_MEMTYPE_SYSTEM; |
| 1998 | |
| 1999 | CCP_CMD_KEY_LO(desc) = ((uint32_t)ctx_paddr); |
| 2000 | CCP_CMD_KEY_HI(desc) = high32_value(ctx_paddr); |
| 2001 | CCP_CMD_KEY_MEM(desc) = CCP_MEMTYPE_SYSTEM; |
| 2002 | |
| 2003 | cmd_q->qidx = (cmd_q->qidx + 1) % COMMANDS_PER_QUEUE; |
| 2004 | |
| 2005 | rte_wmb(); |
| 2006 | |
| 2007 | tail = (uint32_t)(cmd_q->qbase_phys_addr + cmd_q->qidx * Q_DESC_SIZE); |
| 2008 | CCP_WRITE_REG(cmd_q->reg_base, CMD_Q_TAIL_LO_BASE, tail); |
no test coverage detected