diff options
author | Devesh Sharma <devesh.sharma@avagotech.com> | 2016-01-28 08:59:59 -0500 |
---|---|---|
committer | Doug Ledford <dledford@redhat.com> | 2016-02-29 17:12:10 -0500 |
commit | 834d16d66ebc2b5faa06af0bda3bb6f9c71b3996 (patch) | |
tree | 5efcd294f393fa6a3c0725ff2b8ff8af075d3a32 | |
parent | bcf117e2cf6f451b46780e0660e9ae7ab33a33ea (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.c | 5 | ||||
-rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_ah.h | 5 |
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 @@ | |||
46 | enum { | 46 | enum { |
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 | |||
52 | struct ib_ah *ocrdma_create_ah(struct ib_pd *, struct ib_ah_attr *); | 53 | struct ib_ah *ocrdma_create_ah(struct ib_pd *, struct ib_ah_attr *); |
53 | int ocrdma_destroy_ah(struct ib_ah *); | 54 | int ocrdma_destroy_ah(struct ib_ah *); |
54 | int ocrdma_query_ah(struct ib_ah *, struct ib_ah_attr *); | 55 | int ocrdma_query_ah(struct ib_ah *, struct ib_ah_attr *); |