]> git.openfabrics.org - ~emulex/libocrdma.git/commitdiff
RDMA/libocrdma: Add user space support for RoCE-v2
authorDevesh Sharma <devesh.sharma@broadcom.com>
Tue, 23 Feb 2016 07:40:31 +0000 (02:40 -0500)
committerDevesh Sharma <devesh.sharma@broadcom.com>
Thu, 3 Mar 2016 17:28:52 +0000 (22:58 +0530)
RoCE-v2 is a recently added extension to original RoCE protocol
it uses UDP encapsulation to achieve routability of RoCE packets.

This patch avails RoCE-v2 for userland applications.

Signed-off-by: Devesh Sharma <devesh.sharma@broadcom.com>
src/ocrdma_abi.h
src/ocrdma_main.h
src/ocrdma_verbs.c

index 8102c1c4651522c90a7b267c79354a17da54fb79..8670a1de7c0a6cf5ca024fb66e873f8ff0949faf 100644 (file)
@@ -350,7 +350,7 @@ struct ocrdma_ewqe_ud_hdr {
        uint32_t rsvd_dest_qpn;
        uint32_t qkey;
        uint32_t rsvd_ahid;
-       uint32_t rsvd;
+       uint32_t hdr_type;
 } __attribute__ ((packed));
 
 #endif                         /* __OCRDMA_ABI_H__ */
index 4e7be756a935bc45dc9d4cc14b26c940d407c71b..c81188b778b40d4763d7f7fa178e5a31c2333610 100644 (file)
@@ -214,7 +214,9 @@ struct ocrdma_qp {
 enum {
        OCRDMA_AH_ID_MASK               = 0x3FF,
        OCRDMA_AH_VLAN_VALID_MASK       = 0x01,
-       OCRDMA_AH_VLAN_VALID_SHIFT      = 0x1F
+       OCRDMA_AH_VLAN_VALID_SHIFT      = 0x1F,
+       OCRDMA_AH_L3_TYPE_MASK          = 0x03,
+       OCRDMA_AH_L3_TYPE_SHIFT         = 0x1D
 };
 
 struct ocrdma_ah {
@@ -222,6 +224,7 @@ struct ocrdma_ah {
        struct ocrdma_pd *pd;
        uint16_t id;
        uint8_t isvlan;
+       uint8_t hdr_type;
 };
 
 #define get_ocrdma_xxx(xxx, type)                              \
index cf6f72ca0c863cf10dcb93a914c43f54b6fa43ac..c62ced0b4da050faa73945a48f91aebdee1367dd 100644 (file)
@@ -1199,6 +1199,7 @@ static void ocrdma_build_ud_hdr(struct ocrdma_qp *qp,
        if (ah->isvlan)
                hdr->cw |= (OCRDMA_FLAG_AH_VLAN_PR <<
                            OCRDMA_WQE_FLAGS_SHIFT);
+       ud_hdr->hdr_type = ah->hdr_type;
 }
 
 static void ocrdma_build_sges(struct ocrdma_hdr_wqe *hdr,
@@ -2159,6 +2160,9 @@ struct ibv_ah *ocrdma_create_ah(struct ibv_pd *ibpd, struct ibv_ah_attr *attr)
        ah->id = pd->uctx->ah_tbl[ahtbl_idx] & OCRDMA_AH_ID_MASK;
        ah->isvlan = (pd->uctx->ah_tbl[ahtbl_idx] >>
                        OCRDMA_AH_VLAN_VALID_SHIFT);
+       ah->hdr_type = ((pd->uctx->ah_tbl[ahtbl_idx] >> OCRDMA_AH_L3_TYPE_SHIFT)
+                       & OCRDMA_AH_L3_TYPE_MASK);
+
        return &ah->ibv_ah;
 cmd_err:
        ocrdma_free_ah_tbl_id(pd->uctx, ahtbl_idx);