|
@@ -542,10 +542,11 @@ static inline void create_wreq(struct chcr_context *ctx,
|
|
(calc_tx_flits_ofld(skb) * 8), 16)));
|
|
(calc_tx_flits_ofld(skb) * 8), 16)));
|
|
chcr_req->wreq.cookie = cpu_to_be64((uintptr_t)req);
|
|
chcr_req->wreq.cookie = cpu_to_be64((uintptr_t)req);
|
|
chcr_req->wreq.rx_chid_to_rx_q_id =
|
|
chcr_req->wreq.rx_chid_to_rx_q_id =
|
|
- FILL_WR_RX_Q_ID(ctx->dev->tx_channel_id, qid,
|
|
|
|
- is_iv ? iv_loc : IV_NOP);
|
|
|
|
|
|
+ FILL_WR_RX_Q_ID(ctx->dev->rx_channel_id, qid,
|
|
|
|
+ is_iv ? iv_loc : IV_NOP, ctx->tx_channel_id);
|
|
|
|
|
|
- chcr_req->ulptx.cmd_dest = FILL_ULPTX_CMD_DEST(ctx->dev->tx_channel_id);
|
|
|
|
|
|
+ chcr_req->ulptx.cmd_dest = FILL_ULPTX_CMD_DEST(ctx->dev->tx_channel_id,
|
|
|
|
+ qid);
|
|
chcr_req->ulptx.len = htonl((DIV_ROUND_UP((calc_tx_flits_ofld(skb) * 8),
|
|
chcr_req->ulptx.len = htonl((DIV_ROUND_UP((calc_tx_flits_ofld(skb) * 8),
|
|
16) - ((sizeof(chcr_req->wreq)) >> 4)));
|
|
16) - ((sizeof(chcr_req->wreq)) >> 4)));
|
|
|
|
|
|
@@ -606,7 +607,7 @@ static struct sk_buff
|
|
chcr_req = (struct chcr_wr *)__skb_put(skb, transhdr_len);
|
|
chcr_req = (struct chcr_wr *)__skb_put(skb, transhdr_len);
|
|
memset(chcr_req, 0, transhdr_len);
|
|
memset(chcr_req, 0, transhdr_len);
|
|
chcr_req->sec_cpl.op_ivinsrtofst =
|
|
chcr_req->sec_cpl.op_ivinsrtofst =
|
|
- FILL_SEC_CPL_OP_IVINSR(ctx->dev->tx_channel_id, 2, 1);
|
|
|
|
|
|
+ FILL_SEC_CPL_OP_IVINSR(ctx->dev->rx_channel_id, 2, 1);
|
|
|
|
|
|
chcr_req->sec_cpl.pldlen = htonl(ivsize + req->nbytes);
|
|
chcr_req->sec_cpl.pldlen = htonl(ivsize + req->nbytes);
|
|
chcr_req->sec_cpl.aadstart_cipherstop_hi =
|
|
chcr_req->sec_cpl.aadstart_cipherstop_hi =
|
|
@@ -782,6 +783,7 @@ static int chcr_device_init(struct chcr_context *ctx)
|
|
spin_lock(&ctx->dev->lock_chcr_dev);
|
|
spin_lock(&ctx->dev->lock_chcr_dev);
|
|
ctx->tx_channel_id = rxq_idx;
|
|
ctx->tx_channel_id = rxq_idx;
|
|
ctx->dev->tx_channel_id = !ctx->dev->tx_channel_id;
|
|
ctx->dev->tx_channel_id = !ctx->dev->tx_channel_id;
|
|
|
|
+ ctx->dev->rx_channel_id = 0;
|
|
spin_unlock(&ctx->dev->lock_chcr_dev);
|
|
spin_unlock(&ctx->dev->lock_chcr_dev);
|
|
}
|
|
}
|
|
out:
|
|
out:
|
|
@@ -874,7 +876,7 @@ static struct sk_buff *create_hash_wr(struct ahash_request *req,
|
|
memset(chcr_req, 0, transhdr_len);
|
|
memset(chcr_req, 0, transhdr_len);
|
|
|
|
|
|
chcr_req->sec_cpl.op_ivinsrtofst =
|
|
chcr_req->sec_cpl.op_ivinsrtofst =
|
|
- FILL_SEC_CPL_OP_IVINSR(ctx->dev->tx_channel_id, 2, 0);
|
|
|
|
|
|
+ FILL_SEC_CPL_OP_IVINSR(ctx->dev->rx_channel_id, 2, 0);
|
|
chcr_req->sec_cpl.pldlen = htonl(param->bfr_len + param->sg_len);
|
|
chcr_req->sec_cpl.pldlen = htonl(param->bfr_len + param->sg_len);
|
|
|
|
|
|
chcr_req->sec_cpl.aadstart_cipherstop_hi =
|
|
chcr_req->sec_cpl.aadstart_cipherstop_hi =
|
|
@@ -1425,7 +1427,7 @@ static struct sk_buff *create_authenc_wr(struct aead_request *req,
|
|
* to the hardware spec
|
|
* to the hardware spec
|
|
*/
|
|
*/
|
|
chcr_req->sec_cpl.op_ivinsrtofst =
|
|
chcr_req->sec_cpl.op_ivinsrtofst =
|
|
- FILL_SEC_CPL_OP_IVINSR(ctx->dev->tx_channel_id, 2,
|
|
|
|
|
|
+ FILL_SEC_CPL_OP_IVINSR(ctx->dev->rx_channel_id, 2,
|
|
(ivsize ? (assoclen + 1) : 0));
|
|
(ivsize ? (assoclen + 1) : 0));
|
|
chcr_req->sec_cpl.pldlen = htonl(assoclen + ivsize + req->cryptlen);
|
|
chcr_req->sec_cpl.pldlen = htonl(assoclen + ivsize + req->cryptlen);
|
|
chcr_req->sec_cpl.aadstart_cipherstop_hi = FILL_SEC_CPL_CIPHERSTOP_HI(
|
|
chcr_req->sec_cpl.aadstart_cipherstop_hi = FILL_SEC_CPL_CIPHERSTOP_HI(
|
|
@@ -1601,7 +1603,7 @@ static void fill_sec_cpl_for_aead(struct cpl_tx_sec_pdu *sec_cpl,
|
|
unsigned int ivsize = AES_BLOCK_SIZE;
|
|
unsigned int ivsize = AES_BLOCK_SIZE;
|
|
unsigned int cipher_mode = CHCR_SCMD_CIPHER_MODE_AES_CCM;
|
|
unsigned int cipher_mode = CHCR_SCMD_CIPHER_MODE_AES_CCM;
|
|
unsigned int mac_mode = CHCR_SCMD_AUTH_MODE_CBCMAC;
|
|
unsigned int mac_mode = CHCR_SCMD_AUTH_MODE_CBCMAC;
|
|
- unsigned int c_id = chcrctx->dev->tx_channel_id;
|
|
|
|
|
|
+ unsigned int c_id = chcrctx->dev->rx_channel_id;
|
|
unsigned int ccm_xtra;
|
|
unsigned int ccm_xtra;
|
|
unsigned char tag_offset = 0, auth_offset = 0;
|
|
unsigned char tag_offset = 0, auth_offset = 0;
|
|
unsigned char hmac_ctrl = get_hmac(crypto_aead_authsize(tfm));
|
|
unsigned char hmac_ctrl = get_hmac(crypto_aead_authsize(tfm));
|
|
@@ -1877,7 +1879,7 @@ static struct sk_buff *create_gcm_wr(struct aead_request *req,
|
|
|
|
|
|
tag_offset = (op_type == CHCR_ENCRYPT_OP) ? 0 : authsize;
|
|
tag_offset = (op_type == CHCR_ENCRYPT_OP) ? 0 : authsize;
|
|
chcr_req->sec_cpl.op_ivinsrtofst = FILL_SEC_CPL_OP_IVINSR(
|
|
chcr_req->sec_cpl.op_ivinsrtofst = FILL_SEC_CPL_OP_IVINSR(
|
|
- ctx->dev->tx_channel_id, 2, (ivsize ?
|
|
|
|
|
|
+ ctx->dev->rx_channel_id, 2, (ivsize ?
|
|
(req->assoclen + 1) : 0));
|
|
(req->assoclen + 1) : 0));
|
|
chcr_req->sec_cpl.pldlen = htonl(req->assoclen + ivsize + crypt_len);
|
|
chcr_req->sec_cpl.pldlen = htonl(req->assoclen + ivsize + crypt_len);
|
|
chcr_req->sec_cpl.aadstart_cipherstop_hi = FILL_SEC_CPL_CIPHERSTOP_HI(
|
|
chcr_req->sec_cpl.aadstart_cipherstop_hi = FILL_SEC_CPL_CIPHERSTOP_HI(
|