diff mbox

[libmlx4] Add IP and TCP/UDP TX checksum offload support

Message ID 1420533043-28557-1-git-send-email-ogerlitz@mellanox.com (mailing list archive)
State Rejected
Headers show

Commit Message

Or Gerlitz Jan. 6, 2015, 8:30 a.m. UTC
From: Moshe Lazer <moshel@mellanox.com>

Add support for IBV_SEND_IP_CSUM for posted send work-requests.

When this flag is set, enable the HW checksum calculation by setting
MLX4_WQE_CTRL_IP_CSUM and MLX4_WQE_CTRL_TCP_UDP_CSUM flags in the WQE
control segment.

Signed-off-by: Eyal Perry <eyalpe@mellanox.com>
Signed-off-by: Moshe Lazer <moshel@mellanox.com>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
---
 src/qp.c  |   11 ++++++++++-
 src/wqe.h |    2 ++
 2 files changed, 12 insertions(+), 1 deletions(-)
diff mbox

Patch

diff --git a/src/qp.c b/src/qp.c
index 721bed4..5b800e7 100644
--- a/src/qp.c
+++ b/src/qp.c
@@ -286,6 +286,10 @@  int mlx4_post_send(struct ibv_qp *ibqp, struct ibv_send_wr *wr,
 			break;
 
 		case IBV_QPT_UD:
+			ctrl->srcrb_flags |=
+				wr->send_flags & IBV_SEND_IP_CSUM ?
+				htonl(MLX4_WQE_CTRL_IP_CSUM |
+				      MLX4_WQE_CTRL_TCP_UDP_CSUM) : 0;
 			set_datagram_seg(wqe, wr);
 			wqe  += sizeof (struct mlx4_wqe_datagram_seg);
 			size += sizeof (struct mlx4_wqe_datagram_seg) / 16;
@@ -294,7 +298,12 @@  int mlx4_post_send(struct ibv_qp *ibqp, struct ibv_send_wr *wr,
 		case IBV_QPT_RAW_PACKET:
 			/* For raw eth, the MLX4_WQE_CTRL_SOLICIT flag is used
 			 * to indicate that no icrc should be calculated */
-			ctrl->srcrb_flags |= htonl(MLX4_WQE_CTRL_SOLICIT);
+			ctrl->srcrb_flags |=
+				wr->send_flags & IBV_SEND_IP_CSUM ?
+				htonl(MLX4_WQE_CTRL_IP_CSUM |
+				      MLX4_WQE_CTRL_TCP_UDP_CSUM |
+				      MLX4_WQE_CTRL_SOLICIT) :
+				htonl(MLX4_WQE_CTRL_SOLICIT);
 			break;
 
 		default:
diff --git a/src/wqe.h b/src/wqe.h
index bbd22ba..ebd5167 100644
--- a/src/wqe.h
+++ b/src/wqe.h
@@ -41,6 +41,8 @@  enum {
 	MLX4_WQE_CTRL_FENCE	= 1 << 6,
 	MLX4_WQE_CTRL_CQ_UPDATE	= 3 << 2,
 	MLX4_WQE_CTRL_SOLICIT	= 1 << 1,
+	MLX4_WQE_CTRL_IP_CSUM	= 1 << 4,
+	MLX4_WQE_CTRL_TCP_UDP_CSUM = 1 << 5
 };
 
 enum {