| 1811 | } |
| 1812 | |
| 1813 | static int |
| 1814 | ccp_perform_sha3_hmac(struct rte_crypto_op *op, |
| 1815 | struct ccp_queue *cmd_q) |
| 1816 | { |
| 1817 | struct ccp_session *session; |
| 1818 | struct ccp_passthru pst; |
| 1819 | union ccp_function function; |
| 1820 | struct ccp_desc *desc; |
| 1821 | uint8_t *append_ptr; |
| 1822 | uint32_t tail; |
| 1823 | phys_addr_t src_addr, dest_addr, ctx_paddr, dest_addr_t; |
| 1824 | |
| 1825 | session = CRYPTODEV_GET_SYM_SESS_PRIV(op->sym->session); |
| 1826 | |
| 1827 | src_addr = rte_pktmbuf_iova_offset(op->sym->m_src, |
| 1828 | op->sym->auth.data.offset); |
| 1829 | append_ptr = (uint8_t *)rte_pktmbuf_append(op->sym->m_src, |
| 1830 | session->auth.ctx_len); |
| 1831 | if (!append_ptr) { |
| 1832 | CCP_LOG_ERR("CCP MBUF append failed\n"); |
| 1833 | return -1; |
| 1834 | } |
| 1835 | dest_addr = (phys_addr_t)rte_mem_virt2iova((void *)append_ptr); |
| 1836 | ctx_paddr = (phys_addr_t)rte_mem_virt2iova(session->auth.pre_compute); |
| 1837 | dest_addr_t = dest_addr + (session->auth.ctx_len / 2); |
| 1838 | desc = &cmd_q->qbase_desc[cmd_q->qidx]; |
| 1839 | memset(desc, 0, Q_DESC_SIZE); |
| 1840 | |
| 1841 | /*desc1 for SHA3-Ihash operation */ |
| 1842 | CCP_CMD_ENGINE(desc) = CCP_ENGINE_SHA; |
| 1843 | CCP_CMD_INIT(desc) = 1; |
| 1844 | CCP_CMD_EOM(desc) = 1; |
| 1845 | |
| 1846 | function.raw = 0; |
| 1847 | CCP_SHA_TYPE(&function) = session->auth.ut.sha_type; |
| 1848 | CCP_CMD_FUNCTION(desc) = function.raw; |
| 1849 | CCP_CMD_LEN(desc) = op->sym->auth.data.length; |
| 1850 | |
| 1851 | CCP_CMD_SRC_LO(desc) = ((uint32_t)src_addr); |
| 1852 | CCP_CMD_SRC_HI(desc) = high32_value(src_addr); |
| 1853 | CCP_CMD_SRC_MEM(desc) = CCP_MEMTYPE_SYSTEM; |
| 1854 | |
| 1855 | CCP_CMD_DST_LO(desc) = (cmd_q->sb_sha * CCP_SB_BYTES); |
| 1856 | CCP_CMD_DST_HI(desc) = 0; |
| 1857 | CCP_CMD_DST_MEM(desc) = CCP_MEMTYPE_SB; |
| 1858 | |
| 1859 | CCP_CMD_KEY_LO(desc) = ((uint32_t)ctx_paddr); |
| 1860 | CCP_CMD_KEY_HI(desc) = high32_value(ctx_paddr); |
| 1861 | CCP_CMD_KEY_MEM(desc) = CCP_MEMTYPE_SYSTEM; |
| 1862 | |
| 1863 | cmd_q->qidx = (cmd_q->qidx + 1) % COMMANDS_PER_QUEUE; |
| 1864 | |
| 1865 | rte_wmb(); |
| 1866 | tail = (uint32_t)(cmd_q->qbase_phys_addr + cmd_q->qidx * Q_DESC_SIZE); |
| 1867 | CCP_WRITE_REG(cmd_q->reg_base, CMD_Q_TAIL_LO_BASE, tail); |
| 1868 | CCP_WRITE_REG(cmd_q->reg_base, CMD_Q_CONTROL_BASE, |
| 1869 | cmd_q->qcontrol | CMD_Q_RUN); |
| 1870 |
no test coverage detected