diff options
Diffstat (limited to 'include/rdma')
| -rw-r--r-- | include/rdma/ib.h | 89 | ||||
| -rw-r--r-- | include/rdma/ib_addr.h | 6 | ||||
| -rw-r--r-- | include/rdma/ib_sa.h | 7 | ||||
| -rw-r--r-- | include/rdma/ib_verbs.h | 35 | ||||
| -rw-r--r-- | include/rdma/rdma_cm.h | 13 | 
5 files changed, 143 insertions, 7 deletions
| diff --git a/include/rdma/ib.h b/include/rdma/ib.h new file mode 100644 index 000000000000..cf8f9e700e48 --- /dev/null +++ b/include/rdma/ib.h @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2010 Intel Corporation.  All rights reserved. + * + * This software is available to you under a choice of one of two + * licenses.  You may choose to be licensed under the terms of the GNU + * General Public License (GPL) Version 2, available from the file + * COPYING in the main directory of this source tree, or the + * OpenIB.org BSD license below: + * + *     Redistribution and use in source and binary forms, with or + *     without modification, are permitted provided that the following + *     conditions are met: + * + *      - Redistributions of source code must retain the above + *        copyright notice, this list of conditions and the following + *        disclaimer. + * + *      - Redistributions in binary form must reproduce the above + *        copyright notice, this list of conditions and the following + *        disclaimer in the documentation and/or other materials + *        provided with the distribution. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#if !defined(_RDMA_IB_H) +#define _RDMA_IB_H + +#include <linux/types.h> + +struct ib_addr { +	union { +		__u8		uib_addr8[16]; +		__be16		uib_addr16[8]; +		__be32		uib_addr32[4]; +		__be64		uib_addr64[2]; +	} ib_u; +#define sib_addr8		ib_u.uib_addr8 +#define sib_addr16		ib_u.uib_addr16 +#define sib_addr32		ib_u.uib_addr32 +#define sib_addr64		ib_u.uib_addr64 +#define sib_raw			ib_u.uib_addr8 +#define sib_subnet_prefix	ib_u.uib_addr64[0] +#define sib_interface_id	ib_u.uib_addr64[1] +}; + +static inline int ib_addr_any(const struct ib_addr *a) +{ +	return ((a->sib_addr64[0] | a->sib_addr64[1]) == 0); +} + +static inline int ib_addr_loopback(const struct ib_addr *a) +{ +	return ((a->sib_addr32[0] | a->sib_addr32[1] | +		 a->sib_addr32[2] | (a->sib_addr32[3] ^ htonl(1))) == 0); +} + +static inline void ib_addr_set(struct ib_addr *addr, +			       __be32 w1, __be32 w2, __be32 w3, __be32 w4) +{ +	addr->sib_addr32[0] = w1; +	addr->sib_addr32[1] = w2; +	addr->sib_addr32[2] = w3; +	addr->sib_addr32[3] = w4; +} + +static inline int ib_addr_cmp(const struct ib_addr *a1, const struct ib_addr *a2) +{ +	return memcmp(a1, a2, sizeof(struct ib_addr)); +} + +struct sockaddr_ib { +	unsigned short int	sib_family;	/* AF_IB */ +	__be16			sib_pkey; +	__be32			sib_flowinfo; +	struct ib_addr		sib_addr; +	__be64			sib_sid; +	__be64			sib_sid_mask; +	__u64			sib_scope_id; +}; + +#endif /* _RDMA_IB_H */ diff --git a/include/rdma/ib_addr.h b/include/rdma/ib_addr.h index 99965395c5f3..f3ac0f2c4c66 100644 --- a/include/rdma/ib_addr.h +++ b/include/rdma/ib_addr.h @@ -102,11 +102,7 @@ void rdma_addr_cancel(struct rdma_dev_addr *addr);  int rdma_copy_addr(struct rdma_dev_addr *dev_addr, struct net_device *dev,  	      const unsigned char *dst_dev_addr); -static inline int ip_addr_size(struct sockaddr *addr) -{ -	return addr->sa_family == AF_INET6 ? -	       sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in); -} +int rdma_addr_size(struct sockaddr *addr);  static inline u16 ib_addr_get_pkey(struct rdma_dev_addr *dev_addr)  { diff --git a/include/rdma/ib_sa.h b/include/rdma/ib_sa.h index 8275e539bace..125f8714301d 100644 --- a/include/rdma/ib_sa.h +++ b/include/rdma/ib_sa.h @@ -402,6 +402,12 @@ int ib_init_ah_from_path(struct ib_device *device, u8 port_num,  			 struct ib_ah_attr *ah_attr);  /** + * ib_sa_pack_path - Conert a path record from struct ib_sa_path_rec + * to IB MAD wire format. + */ +void ib_sa_pack_path(struct ib_sa_path_rec *rec, void *attribute); + +/**   * ib_sa_unpack_path - Convert a path record from MAD format to struct   * ib_sa_path_rec.   */ @@ -418,4 +424,5 @@ int ib_sa_guid_info_rec_query(struct ib_sa_client *client,  					       void *context),  			      void *context,  			      struct ib_sa_query **sa_query); +  #endif /* IB_SA_H */ diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 98cc4b29fc5b..645c3cedce9c 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h @@ -610,7 +610,21 @@ enum ib_qp_type {  	IB_QPT_RAW_PACKET = 8,  	IB_QPT_XRC_INI = 9,  	IB_QPT_XRC_TGT, -	IB_QPT_MAX +	IB_QPT_MAX, +	/* Reserve a range for qp types internal to the low level driver. +	 * These qp types will not be visible at the IB core layer, so the +	 * IB_QPT_MAX usages should not be affected in the core layer +	 */ +	IB_QPT_RESERVED1 = 0x1000, +	IB_QPT_RESERVED2, +	IB_QPT_RESERVED3, +	IB_QPT_RESERVED4, +	IB_QPT_RESERVED5, +	IB_QPT_RESERVED6, +	IB_QPT_RESERVED7, +	IB_QPT_RESERVED8, +	IB_QPT_RESERVED9, +	IB_QPT_RESERVED10,  };  enum ib_qp_create_flags { @@ -766,6 +780,19 @@ enum ib_wr_opcode {  	IB_WR_MASKED_ATOMIC_CMP_AND_SWP,  	IB_WR_MASKED_ATOMIC_FETCH_AND_ADD,  	IB_WR_BIND_MW, +	/* reserve values for low level drivers' internal use. +	 * These values will not be used at all in the ib core layer. +	 */ +	IB_WR_RESERVED1 = 0xf0, +	IB_WR_RESERVED2, +	IB_WR_RESERVED3, +	IB_WR_RESERVED4, +	IB_WR_RESERVED5, +	IB_WR_RESERVED6, +	IB_WR_RESERVED7, +	IB_WR_RESERVED8, +	IB_WR_RESERVED9, +	IB_WR_RESERVED10,  };  enum ib_send_flags { @@ -773,7 +800,11 @@ enum ib_send_flags {  	IB_SEND_SIGNALED	= (1<<1),  	IB_SEND_SOLICITED	= (1<<2),  	IB_SEND_INLINE		= (1<<3), -	IB_SEND_IP_CSUM		= (1<<4) +	IB_SEND_IP_CSUM		= (1<<4), + +	/* reserve bits 26-31 for low level drivers' internal use */ +	IB_SEND_RESERVED_START	= (1 << 26), +	IB_SEND_RESERVED_END	= (1 << 31),  };  struct ib_sge { diff --git a/include/rdma/rdma_cm.h b/include/rdma/rdma_cm.h index ad3a3142383a..1ed2088dc9f5 100644 --- a/include/rdma/rdma_cm.h +++ b/include/rdma/rdma_cm.h @@ -70,6 +70,11 @@ enum rdma_port_space {  	RDMA_PS_UDP   = 0x0111,  }; +#define RDMA_IB_IP_PS_MASK   0xFFFFFFFFFFFF0000ULL +#define RDMA_IB_IP_PS_TCP    0x0000000001060000ULL +#define RDMA_IB_IP_PS_UDP    0x0000000001110000ULL +#define RDMA_IB_IP_PS_IB     0x00000000013F0000ULL +  struct rdma_addr {  	struct sockaddr_storage src_addr;  	struct sockaddr_storage dst_addr; @@ -93,6 +98,7 @@ struct rdma_conn_param {  	/* Fields below ignored if a QP is created on the rdma_cm_id. */  	u8 srq;  	u32 qp_num; +	u32 qkey;  };  struct rdma_ud_param { @@ -367,4 +373,11 @@ int rdma_set_reuseaddr(struct rdma_cm_id *id, int reuse);   */  int rdma_set_afonly(struct rdma_cm_id *id, int afonly); + /** + * rdma_get_service_id - Return the IB service ID for a specified address. + * @id: Communication identifier associated with the address. + * @addr: Address for the service ID. + */ +__be64 rdma_get_service_id(struct rdma_cm_id *id, struct sockaddr *addr); +  #endif /* RDMA_CM_H */ |