diff options
-rw-r--r-- | drivers/infiniband/hw/bnxt_re/ib_verbs.c | 35 | ||||
-rw-r--r-- | drivers/infiniband/hw/bnxt_re/qplib_fp.c | 1 |
2 files changed, 35 insertions, 1 deletions
diff --git a/drivers/infiniband/hw/bnxt_re/ib_verbs.c b/drivers/infiniband/hw/bnxt_re/ib_verbs.c index 526ab3f10a90..2032db7db766 100644 --- a/drivers/infiniband/hw/bnxt_re/ib_verbs.c +++ b/drivers/infiniband/hw/bnxt_re/ib_verbs.c | |||
@@ -2769,6 +2769,32 @@ static void bnxt_re_process_res_rawqp1_wc(struct ib_wc *wc, | |||
2769 | wc->wc_flags |= IB_WC_GRH; | 2769 | wc->wc_flags |= IB_WC_GRH; |
2770 | } | 2770 | } |
2771 | 2771 | ||
2772 | static bool bnxt_re_is_vlan_pkt(struct bnxt_qplib_cqe *orig_cqe, | ||
2773 | u16 *vid, u8 *sl) | ||
2774 | { | ||
2775 | bool ret = false; | ||
2776 | u32 metadata; | ||
2777 | u16 tpid; | ||
2778 | |||
2779 | metadata = orig_cqe->raweth_qp1_metadata; | ||
2780 | if (orig_cqe->raweth_qp1_flags2 & | ||
2781 | CQ_RES_RAWETH_QP1_RAWETH_QP1_FLAGS2_META_FORMAT_VLAN) { | ||
2782 | tpid = ((metadata & | ||
2783 | CQ_RES_RAWETH_QP1_RAWETH_QP1_METADATA_TPID_MASK) >> | ||
2784 | CQ_RES_RAWETH_QP1_RAWETH_QP1_METADATA_TPID_SFT); | ||
2785 | if (tpid == ETH_P_8021Q) { | ||
2786 | *vid = metadata & | ||
2787 | CQ_RES_RAWETH_QP1_RAWETH_QP1_METADATA_VID_MASK; | ||
2788 | *sl = (metadata & | ||
2789 | CQ_RES_RAWETH_QP1_RAWETH_QP1_METADATA_PRI_MASK) >> | ||
2790 | CQ_RES_RAWETH_QP1_RAWETH_QP1_METADATA_PRI_SFT; | ||
2791 | ret = true; | ||
2792 | } | ||
2793 | } | ||
2794 | |||
2795 | return ret; | ||
2796 | } | ||
2797 | |||
2772 | static void bnxt_re_process_res_rc_wc(struct ib_wc *wc, | 2798 | static void bnxt_re_process_res_rc_wc(struct ib_wc *wc, |
2773 | struct bnxt_qplib_cqe *cqe) | 2799 | struct bnxt_qplib_cqe *cqe) |
2774 | { | 2800 | { |
@@ -2788,12 +2814,14 @@ static void bnxt_re_process_res_shadow_qp_wc(struct bnxt_re_qp *qp, | |||
2788 | struct ib_wc *wc, | 2814 | struct ib_wc *wc, |
2789 | struct bnxt_qplib_cqe *cqe) | 2815 | struct bnxt_qplib_cqe *cqe) |
2790 | { | 2816 | { |
2791 | u32 tbl_idx; | ||
2792 | struct bnxt_re_dev *rdev = qp->rdev; | 2817 | struct bnxt_re_dev *rdev = qp->rdev; |
2793 | struct bnxt_re_qp *qp1_qp = NULL; | 2818 | struct bnxt_re_qp *qp1_qp = NULL; |
2794 | struct bnxt_qplib_cqe *orig_cqe = NULL; | 2819 | struct bnxt_qplib_cqe *orig_cqe = NULL; |
2795 | struct bnxt_re_sqp_entries *sqp_entry = NULL; | 2820 | struct bnxt_re_sqp_entries *sqp_entry = NULL; |
2796 | int nw_type; | 2821 | int nw_type; |
2822 | u32 tbl_idx; | ||
2823 | u16 vlan_id; | ||
2824 | u8 sl; | ||
2797 | 2825 | ||
2798 | tbl_idx = cqe->wr_id; | 2826 | tbl_idx = cqe->wr_id; |
2799 | 2827 | ||
@@ -2808,6 +2836,11 @@ static void bnxt_re_process_res_shadow_qp_wc(struct bnxt_re_qp *qp, | |||
2808 | wc->ex.imm_data = orig_cqe->immdata; | 2836 | wc->ex.imm_data = orig_cqe->immdata; |
2809 | wc->src_qp = orig_cqe->src_qp; | 2837 | wc->src_qp = orig_cqe->src_qp; |
2810 | memcpy(wc->smac, orig_cqe->smac, ETH_ALEN); | 2838 | memcpy(wc->smac, orig_cqe->smac, ETH_ALEN); |
2839 | if (bnxt_re_is_vlan_pkt(orig_cqe, &vlan_id, &sl)) { | ||
2840 | wc->vlan_id = vlan_id; | ||
2841 | wc->sl = sl; | ||
2842 | wc->wc_flags |= IB_WC_WITH_VLAN; | ||
2843 | } | ||
2811 | wc->port_num = 1; | 2844 | wc->port_num = 1; |
2812 | wc->vendor_err = orig_cqe->status; | 2845 | wc->vendor_err = orig_cqe->status; |
2813 | 2846 | ||
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_fp.c b/drivers/infiniband/hw/bnxt_re/qplib_fp.c index c0f813366ad6..61764f7aa79b 100644 --- a/drivers/infiniband/hw/bnxt_re/qplib_fp.c +++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.c | |||
@@ -2254,6 +2254,7 @@ static int bnxt_qplib_cq_process_res_raweth_qp1(struct bnxt_qplib_cq *cq, | |||
2254 | 2254 | ||
2255 | cqe->raweth_qp1_flags = le16_to_cpu(hwcqe->raweth_qp1_flags); | 2255 | cqe->raweth_qp1_flags = le16_to_cpu(hwcqe->raweth_qp1_flags); |
2256 | cqe->raweth_qp1_flags2 = le32_to_cpu(hwcqe->raweth_qp1_flags2); | 2256 | cqe->raweth_qp1_flags2 = le32_to_cpu(hwcqe->raweth_qp1_flags2); |
2257 | cqe->raweth_qp1_metadata = le32_to_cpu(hwcqe->raweth_qp1_metadata); | ||
2257 | 2258 | ||
2258 | rq = &qp->rq; | 2259 | rq = &qp->rq; |
2259 | if (wr_id_idx > rq->hwq.max_elements) { | 2260 | if (wr_id_idx > rq->hwq.max_elements) { |