RDMA/ocrdma: Support user AH creation for RoCE-v2
authorDevesh Sharma <devesh.sharma@avagotech.com>
Thu, 28 Jan 2016 13:59:59 +0000 (08:59 -0500)
committerDoug Ledford <dledford@redhat.com>
Mon, 29 Feb 2016 22:12:10 +0000 (17:12 -0500)
This patch adds support to create RoCE-v2 compatible AH. It uses ahid
field to tell network-header-type to user space library. The library
has to decode network-header-type from ahid field.

Signed-off-by: Somnath Kotur <somnath.kotur@avagotech.com>
Signed-off-by: Devesh Sharma <devesh.sharma@avagotech.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/hw/ocrdma/ocrdma_ah.c
drivers/infiniband/hw/ocrdma/ocrdma_ah.h

index 4aed1dbb0b972cc1ad0dc9e957e9aa304864aa07..e3c4f1784ce84edbc68d4de9646296f6f2d43bfe 100644 (file)
@@ -218,6 +218,11 @@ struct ib_ah *ocrdma_create_ah(struct ib_pd *ibpd, struct ib_ah_attr *attr)
                ahid_addr = pd->uctx->ah_tbl.va + attr->dlid;
                *ahid_addr = 0;
                *ahid_addr |= ah->id & OCRDMA_AH_ID_MASK;
+               if (ocrdma_is_udp_encap_supported(dev)) {
+                       *ahid_addr |= ((u32)ah->hdr_type &
+                                      OCRDMA_AH_L3_TYPE_MASK) <<
+                                      OCRDMA_AH_L3_TYPE_SHIFT;
+               }
                if (isvlan)
                        *ahid_addr |= (OCRDMA_AH_VLAN_VALID_MASK <<
                                       OCRDMA_AH_VLAN_VALID_SHIFT);
index 04a30ae674739b87dc266194f68aa27271df653e..3856dd4c7e3d6baa8243cc451338a4bfcf3d967e 100644 (file)
 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 /* 29 bits */
 };
-
 struct ib_ah *ocrdma_create_ah(struct ib_pd *, struct ib_ah_attr *);
 int ocrdma_destroy_ah(struct ib_ah *);
 int ocrdma_query_ah(struct ib_ah *, struct ib_ah_attr *);