aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDevesh Sharma <devesh.sharma@avagotech.com>2016-01-28 08:59:59 -0500
committerDoug Ledford <dledford@redhat.com>2016-02-29 17:12:10 -0500
commit834d16d66ebc2b5faa06af0bda3bb6f9c71b3996 (patch)
tree5efcd294f393fa6a3c0725ff2b8ff8af075d3a32
parentbcf117e2cf6f451b46780e0660e9ae7ab33a33ea (diff)
RDMA/ocrdma: Support user AH creation for RoCE-v2
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>
-rw-r--r--drivers/infiniband/hw/ocrdma/ocrdma_ah.c5
-rw-r--r--drivers/infiniband/hw/ocrdma/ocrdma_ah.h5
2 files changed, 8 insertions, 2 deletions
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_ah.c b/drivers/infiniband/hw/ocrdma/ocrdma_ah.c
index 4aed1dbb0b97..e3c4f1784ce8 100644
--- a/drivers/infiniband/hw/ocrdma/ocrdma_ah.c
+++ b/drivers/infiniband/hw/ocrdma/ocrdma_ah.c
@@ -218,6 +218,11 @@ struct ib_ah *ocrdma_create_ah(struct ib_pd *ibpd, struct ib_ah_attr *attr)
218 ahid_addr = pd->uctx->ah_tbl.va + attr->dlid; 218 ahid_addr = pd->uctx->ah_tbl.va + attr->dlid;
219 *ahid_addr = 0; 219 *ahid_addr = 0;
220 *ahid_addr |= ah->id & OCRDMA_AH_ID_MASK; 220 *ahid_addr |= ah->id & OCRDMA_AH_ID_MASK;
221 if (ocrdma_is_udp_encap_supported(dev)) {
222 *ahid_addr |= ((u32)ah->hdr_type &
223 OCRDMA_AH_L3_TYPE_MASK) <<
224 OCRDMA_AH_L3_TYPE_SHIFT;
225 }
221 if (isvlan) 226 if (isvlan)
222 *ahid_addr |= (OCRDMA_AH_VLAN_VALID_MASK << 227 *ahid_addr |= (OCRDMA_AH_VLAN_VALID_MASK <<
223 OCRDMA_AH_VLAN_VALID_SHIFT); 228 OCRDMA_AH_VLAN_VALID_SHIFT);
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_ah.h b/drivers/infiniband/hw/ocrdma/ocrdma_ah.h
index 04a30ae67473..3856dd4c7e3d 100644
--- a/drivers/infiniband/hw/ocrdma/ocrdma_ah.h
+++ b/drivers/infiniband/hw/ocrdma/ocrdma_ah.h
@@ -46,9 +46,10 @@
46enum { 46enum {
47 OCRDMA_AH_ID_MASK = 0x3FF, 47 OCRDMA_AH_ID_MASK = 0x3FF,
48 OCRDMA_AH_VLAN_VALID_MASK = 0x01, 48 OCRDMA_AH_VLAN_VALID_MASK = 0x01,
49 OCRDMA_AH_VLAN_VALID_SHIFT = 0x1F 49 OCRDMA_AH_VLAN_VALID_SHIFT = 0x1F,
50 OCRDMA_AH_L3_TYPE_MASK = 0x03,
51 OCRDMA_AH_L3_TYPE_SHIFT = 0x1D /* 29 bits */
50}; 52};
51
52struct ib_ah *ocrdma_create_ah(struct ib_pd *, struct ib_ah_attr *); 53struct ib_ah *ocrdma_create_ah(struct ib_pd *, struct ib_ah_attr *);
53int ocrdma_destroy_ah(struct ib_ah *); 54int ocrdma_destroy_ah(struct ib_ah *);
54int ocrdma_query_ah(struct ib_ah *, struct ib_ah_attr *); 55int ocrdma_query_ah(struct ib_ah *, struct ib_ah_attr *);