Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband: (46 commits) IB/uverbs: Don't serialize with ib_uverbs_idr_mutex IB/mthca: Make all device methods truly reentrant IB/mthca: Fix memory leak on modify_qp error paths IB/uverbs: Factor out common idr code IB/uverbs: Don't decrement usecnt on error paths IB/uverbs: Release lock on error path IB/cm: Use address handle helpers IB/sa: Add ib_init_ah_from_path() IB: Add ib_init_ah_from_wc() IB/ucm: Get rid of duplicate P_Key parameter IB/srp: Factor out common request reset code IB/srp: Support SRP rev. 10 targets [SCSI] srp.h: Add I/O Class values IB/fmr: Use device's max_map_map_per_fmr attribute in FMR pool. IB/mthca: Fill in max_map_per_fmr device attribute IB/ipath: Add client reregister event generation IB/mthca: Add client reregister event generation IB: Move struct port_info from ipath to <rdma/ib_smi.h> IPoIB: Handle client reregister events IB: Add client reregister event type ...
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
/*
|
||||
* Copyright (c) 2005 Voltaire Inc. All rights reserved.
|
||||
* Copyright (c) 2005 Intel Corporation. All rights reserved.
|
||||
*
|
||||
* This Software is licensed under one of the following licenses:
|
||||
*
|
||||
* 1) under the terms of the "Common Public License 1.0" a copy of which is
|
||||
* available from the Open Source Initiative, see
|
||||
* http://www.opensource.org/licenses/cpl.php.
|
||||
*
|
||||
* 2) under the terms of the "The BSD License" a copy of which is
|
||||
* available from the Open Source Initiative, see
|
||||
* http://www.opensource.org/licenses/bsd-license.php.
|
||||
*
|
||||
* 3) under the terms of the "GNU General Public License (GPL) Version 2" a
|
||||
* copy of which is available from the Open Source Initiative, see
|
||||
* http://www.opensource.org/licenses/gpl-license.php.
|
||||
*
|
||||
* Licensee has the right to choose one of the above licenses.
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright
|
||||
* notice and one of the license notices.
|
||||
*
|
||||
* Redistributions in binary form must reproduce both the above copyright
|
||||
* notice, one of the license notices in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
*/
|
||||
|
||||
#if !defined(IB_ADDR_H)
|
||||
#define IB_ADDR_H
|
||||
|
||||
#include <linux/in.h>
|
||||
#include <linux/in6.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/socket.h>
|
||||
#include <rdma/ib_verbs.h>
|
||||
|
||||
struct rdma_dev_addr {
|
||||
unsigned char src_dev_addr[MAX_ADDR_LEN];
|
||||
unsigned char dst_dev_addr[MAX_ADDR_LEN];
|
||||
unsigned char broadcast[MAX_ADDR_LEN];
|
||||
enum ib_node_type dev_type;
|
||||
};
|
||||
|
||||
/**
|
||||
* rdma_translate_ip - Translate a local IP address to an RDMA hardware
|
||||
* address.
|
||||
*/
|
||||
int rdma_translate_ip(struct sockaddr *addr, struct rdma_dev_addr *dev_addr);
|
||||
|
||||
/**
|
||||
* rdma_resolve_ip - Resolve source and destination IP addresses to
|
||||
* RDMA hardware addresses.
|
||||
* @src_addr: An optional source address to use in the resolution. If a
|
||||
* source address is not provided, a usable address will be returned via
|
||||
* the callback.
|
||||
* @dst_addr: The destination address to resolve.
|
||||
* @addr: A reference to a data location that will receive the resolved
|
||||
* addresses. The data location must remain valid until the callback has
|
||||
* been invoked.
|
||||
* @timeout_ms: Amount of time to wait for the address resolution to complete.
|
||||
* @callback: Call invoked once address resolution has completed, timed out,
|
||||
* or been canceled. A status of 0 indicates success.
|
||||
* @context: User-specified context associated with the call.
|
||||
*/
|
||||
int rdma_resolve_ip(struct sockaddr *src_addr, struct sockaddr *dst_addr,
|
||||
struct rdma_dev_addr *addr, int timeout_ms,
|
||||
void (*callback)(int status, struct sockaddr *src_addr,
|
||||
struct rdma_dev_addr *addr, void *context),
|
||||
void *context);
|
||||
|
||||
void rdma_addr_cancel(struct rdma_dev_addr *addr);
|
||||
|
||||
static inline int ip_addr_size(struct sockaddr *addr)
|
||||
{
|
||||
return addr->sa_family == AF_INET6 ?
|
||||
sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in);
|
||||
}
|
||||
|
||||
static inline u16 ib_addr_get_pkey(struct rdma_dev_addr *dev_addr)
|
||||
{
|
||||
return ((u16)dev_addr->broadcast[8] << 8) | (u16)dev_addr->broadcast[9];
|
||||
}
|
||||
|
||||
static inline void ib_addr_set_pkey(struct rdma_dev_addr *dev_addr, u16 pkey)
|
||||
{
|
||||
dev_addr->broadcast[8] = pkey >> 8;
|
||||
dev_addr->broadcast[9] = (unsigned char) pkey;
|
||||
}
|
||||
|
||||
static inline union ib_gid *ib_addr_get_sgid(struct rdma_dev_addr *dev_addr)
|
||||
{
|
||||
return (union ib_gid *) (dev_addr->src_dev_addr + 4);
|
||||
}
|
||||
|
||||
static inline void ib_addr_set_sgid(struct rdma_dev_addr *dev_addr,
|
||||
union ib_gid *gid)
|
||||
{
|
||||
memcpy(dev_addr->src_dev_addr + 4, gid, sizeof *gid);
|
||||
}
|
||||
|
||||
static inline union ib_gid *ib_addr_get_dgid(struct rdma_dev_addr *dev_addr)
|
||||
{
|
||||
return (union ib_gid *) (dev_addr->dst_dev_addr + 4);
|
||||
}
|
||||
|
||||
static inline void ib_addr_set_dgid(struct rdma_dev_addr *dev_addr,
|
||||
union ib_gid *gid)
|
||||
{
|
||||
memcpy(dev_addr->dst_dev_addr + 4, gid, sizeof *gid);
|
||||
}
|
||||
|
||||
#endif /* IB_ADDR_H */
|
||||
@@ -102,4 +102,17 @@ int ib_find_cached_pkey(struct ib_device *device,
|
||||
u16 pkey,
|
||||
u16 *index);
|
||||
|
||||
/**
|
||||
* ib_get_cached_lmc - Returns a cached lmc table entry
|
||||
* @device: The device to query.
|
||||
* @port_num: The port number of the device to query.
|
||||
* @lmc: The lmc value for the specified port for that device.
|
||||
*
|
||||
* ib_get_cached_lmc() fetches the specified lmc table entry stored in
|
||||
* the local software cache.
|
||||
*/
|
||||
int ib_get_cached_lmc(struct ib_device *device,
|
||||
u8 port_num,
|
||||
u8 *lmc);
|
||||
|
||||
#endif /* _IB_CACHE_H */
|
||||
|
||||
+18
-8
@@ -32,7 +32,7 @@
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
* $Id: ib_cm.h 2730 2005-06-28 16:43:03Z sean.hefty $
|
||||
* $Id: ib_cm.h 4311 2005-12-05 18:42:01Z sean.hefty $
|
||||
*/
|
||||
#if !defined(IB_CM_H)
|
||||
#define IB_CM_H
|
||||
@@ -102,7 +102,8 @@ enum ib_cm_data_size {
|
||||
IB_CM_APR_INFO_LENGTH = 72,
|
||||
IB_CM_SIDR_REQ_PRIVATE_DATA_SIZE = 216,
|
||||
IB_CM_SIDR_REP_PRIVATE_DATA_SIZE = 136,
|
||||
IB_CM_SIDR_REP_INFO_LENGTH = 72
|
||||
IB_CM_SIDR_REP_INFO_LENGTH = 72,
|
||||
IB_CM_COMPARE_SIZE = 64
|
||||
};
|
||||
|
||||
struct ib_cm_id;
|
||||
@@ -238,7 +239,6 @@ struct ib_cm_sidr_rep_event_param {
|
||||
u32 qpn;
|
||||
void *info;
|
||||
u8 info_len;
|
||||
|
||||
};
|
||||
|
||||
struct ib_cm_event {
|
||||
@@ -317,6 +317,15 @@ void ib_destroy_cm_id(struct ib_cm_id *cm_id);
|
||||
|
||||
#define IB_SERVICE_ID_AGN_MASK __constant_cpu_to_be64(0xFF00000000000000ULL)
|
||||
#define IB_CM_ASSIGN_SERVICE_ID __constant_cpu_to_be64(0x0200000000000000ULL)
|
||||
#define IB_CMA_SERVICE_ID __constant_cpu_to_be64(0x0000000001000000ULL)
|
||||
#define IB_CMA_SERVICE_ID_MASK __constant_cpu_to_be64(0xFFFFFFFFFF000000ULL)
|
||||
#define IB_SDP_SERVICE_ID __constant_cpu_to_be64(0x0000000000010000ULL)
|
||||
#define IB_SDP_SERVICE_ID_MASK __constant_cpu_to_be64(0xFFFFFFFFFFFF0000ULL)
|
||||
|
||||
struct ib_cm_compare_data {
|
||||
u8 data[IB_CM_COMPARE_SIZE];
|
||||
u8 mask[IB_CM_COMPARE_SIZE];
|
||||
};
|
||||
|
||||
/**
|
||||
* ib_cm_listen - Initiates listening on the specified service ID for
|
||||
@@ -330,10 +339,12 @@ void ib_destroy_cm_id(struct ib_cm_id *cm_id);
|
||||
* range of service IDs. If set to 0, the service ID is matched
|
||||
* exactly. This parameter is ignored if %service_id is set to
|
||||
* IB_CM_ASSIGN_SERVICE_ID.
|
||||
* @compare_data: This parameter is optional. It specifies data that must
|
||||
* appear in the private data of a connection request for the specified
|
||||
* listen request.
|
||||
*/
|
||||
int ib_cm_listen(struct ib_cm_id *cm_id,
|
||||
__be64 service_id,
|
||||
__be64 service_mask);
|
||||
int ib_cm_listen(struct ib_cm_id *cm_id, __be64 service_id, __be64 service_mask,
|
||||
struct ib_cm_compare_data *compare_data);
|
||||
|
||||
struct ib_cm_req_param {
|
||||
struct ib_sa_path_rec *primary_path;
|
||||
@@ -535,7 +546,6 @@ struct ib_cm_sidr_req_param {
|
||||
const void *private_data;
|
||||
u8 private_data_len;
|
||||
u8 max_cm_retries;
|
||||
u16 pkey;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -559,7 +569,7 @@ struct ib_cm_sidr_rep_param {
|
||||
};
|
||||
|
||||
/**
|
||||
* ib_send_cm_sidr_rep - Sends a service ID resolution request to the
|
||||
* ib_send_cm_sidr_rep - Sends a service ID resolution reply to the
|
||||
* remote node.
|
||||
* @cm_id: Communication identifier associated with the received service ID
|
||||
* resolution request.
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright (c) 2005 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(IB_USER_MARSHALL_H)
|
||||
#define IB_USER_MARSHALL_H
|
||||
|
||||
#include <rdma/ib_verbs.h>
|
||||
#include <rdma/ib_sa.h>
|
||||
#include <rdma/ib_user_verbs.h>
|
||||
#include <rdma/ib_user_sa.h>
|
||||
|
||||
void ib_copy_qp_attr_to_user(struct ib_uverbs_qp_attr *dst,
|
||||
struct ib_qp_attr *src);
|
||||
|
||||
void ib_copy_path_rec_to_user(struct ib_user_path_rec *dst,
|
||||
struct ib_sa_path_rec *src);
|
||||
|
||||
void ib_copy_path_rec_from_user(struct ib_sa_path_rec *dst,
|
||||
struct ib_user_path_rec *src);
|
||||
|
||||
#endif /* IB_USER_MARSHALL_H */
|
||||
@@ -370,5 +370,12 @@ ib_sa_mcmember_rec_delete(struct ib_device *device, u8 port_num,
|
||||
context, query);
|
||||
}
|
||||
|
||||
/**
|
||||
* ib_init_ah_from_path - Initialize address handle attributes based on an SA
|
||||
* path record.
|
||||
*/
|
||||
int ib_init_ah_from_path(struct ib_device *device, u8 port_num,
|
||||
struct ib_sa_path_rec *rec,
|
||||
struct ib_ah_attr *ah_attr);
|
||||
|
||||
#endif /* IB_SA_H */
|
||||
|
||||
@@ -85,6 +85,42 @@ struct ib_smp {
|
||||
#define IB_SMP_ATTR_LED_INFO __constant_htons(0x0031)
|
||||
#define IB_SMP_ATTR_VENDOR_MASK __constant_htons(0xFF00)
|
||||
|
||||
struct ib_port_info {
|
||||
__be64 mkey;
|
||||
__be64 gid_prefix;
|
||||
__be16 lid;
|
||||
__be16 sm_lid;
|
||||
__be32 cap_mask;
|
||||
__be16 diag_code;
|
||||
__be16 mkey_lease_period;
|
||||
u8 local_port_num;
|
||||
u8 link_width_enabled;
|
||||
u8 link_width_supported;
|
||||
u8 link_width_active;
|
||||
u8 linkspeed_portstate; /* 4 bits, 4 bits */
|
||||
u8 portphysstate_linkdown; /* 4 bits, 4 bits */
|
||||
u8 mkeyprot_resv_lmc; /* 2 bits, 3, 3 */
|
||||
u8 linkspeedactive_enabled; /* 4 bits, 4 bits */
|
||||
u8 neighbormtu_mastersmsl; /* 4 bits, 4 bits */
|
||||
u8 vlcap_inittype; /* 4 bits, 4 bits */
|
||||
u8 vl_high_limit;
|
||||
u8 vl_arb_high_cap;
|
||||
u8 vl_arb_low_cap;
|
||||
u8 inittypereply_mtucap; /* 4 bits, 4 bits */
|
||||
u8 vlstallcnt_hoqlife; /* 3 bits, 5 bits */
|
||||
u8 operationalvl_pei_peo_fpi_fpo; /* 4 bits, 1, 1, 1, 1 */
|
||||
__be16 mkey_violations;
|
||||
__be16 pkey_violations;
|
||||
__be16 qkey_violations;
|
||||
u8 guid_cap;
|
||||
u8 clientrereg_resv_subnetto; /* 1 bit, 2 bits, 5 */
|
||||
u8 resv_resptimevalue; /* 3 bits, 5 bits */
|
||||
u8 localphyerrors_overrunerrors; /* 4 bits, 4 bits */
|
||||
__be16 max_credit_hint;
|
||||
u8 resv;
|
||||
u8 link_roundtrip_latency[3];
|
||||
};
|
||||
|
||||
static inline u8
|
||||
ib_get_smp_direction(struct ib_smp *smp)
|
||||
{
|
||||
|
||||
@@ -30,13 +30,13 @@
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
* $Id: ib_user_cm.h 2576 2005-06-09 17:00:30Z libor $
|
||||
* $Id: ib_user_cm.h 4019 2005-11-11 00:33:09Z sean.hefty $
|
||||
*/
|
||||
|
||||
#ifndef IB_USER_CM_H
|
||||
#define IB_USER_CM_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <rdma/ib_user_sa.h>
|
||||
|
||||
#define IB_USER_CM_ABI_VERSION 4
|
||||
|
||||
@@ -110,58 +110,6 @@ struct ib_ucm_init_qp_attr {
|
||||
__u32 qp_state;
|
||||
};
|
||||
|
||||
struct ib_ucm_ah_attr {
|
||||
__u8 grh_dgid[16];
|
||||
__u32 grh_flow_label;
|
||||
__u16 dlid;
|
||||
__u16 reserved;
|
||||
__u8 grh_sgid_index;
|
||||
__u8 grh_hop_limit;
|
||||
__u8 grh_traffic_class;
|
||||
__u8 sl;
|
||||
__u8 src_path_bits;
|
||||
__u8 static_rate;
|
||||
__u8 is_global;
|
||||
__u8 port_num;
|
||||
};
|
||||
|
||||
struct ib_ucm_init_qp_attr_resp {
|
||||
__u32 qp_attr_mask;
|
||||
__u32 qp_state;
|
||||
__u32 cur_qp_state;
|
||||
__u32 path_mtu;
|
||||
__u32 path_mig_state;
|
||||
__u32 qkey;
|
||||
__u32 rq_psn;
|
||||
__u32 sq_psn;
|
||||
__u32 dest_qp_num;
|
||||
__u32 qp_access_flags;
|
||||
|
||||
struct ib_ucm_ah_attr ah_attr;
|
||||
struct ib_ucm_ah_attr alt_ah_attr;
|
||||
|
||||
/* ib_qp_cap */
|
||||
__u32 max_send_wr;
|
||||
__u32 max_recv_wr;
|
||||
__u32 max_send_sge;
|
||||
__u32 max_recv_sge;
|
||||
__u32 max_inline_data;
|
||||
|
||||
__u16 pkey_index;
|
||||
__u16 alt_pkey_index;
|
||||
__u8 en_sqd_async_notify;
|
||||
__u8 sq_draining;
|
||||
__u8 max_rd_atomic;
|
||||
__u8 max_dest_rd_atomic;
|
||||
__u8 min_rnr_timer;
|
||||
__u8 port_num;
|
||||
__u8 timeout;
|
||||
__u8 retry_cnt;
|
||||
__u8 rnr_retry;
|
||||
__u8 alt_port_num;
|
||||
__u8 alt_timeout;
|
||||
};
|
||||
|
||||
struct ib_ucm_listen {
|
||||
__be64 service_id;
|
||||
__be64 service_mask;
|
||||
@@ -180,28 +128,6 @@ struct ib_ucm_private_data {
|
||||
__u8 reserved[3];
|
||||
};
|
||||
|
||||
struct ib_ucm_path_rec {
|
||||
__u8 dgid[16];
|
||||
__u8 sgid[16];
|
||||
__be16 dlid;
|
||||
__be16 slid;
|
||||
__u32 raw_traffic;
|
||||
__be32 flow_label;
|
||||
__u32 reversible;
|
||||
__u32 mtu;
|
||||
__be16 pkey;
|
||||
__u8 hop_limit;
|
||||
__u8 traffic_class;
|
||||
__u8 numb_path;
|
||||
__u8 sl;
|
||||
__u8 mtu_selector;
|
||||
__u8 rate_selector;
|
||||
__u8 rate;
|
||||
__u8 packet_life_time_selector;
|
||||
__u8 packet_life_time;
|
||||
__u8 preference;
|
||||
};
|
||||
|
||||
struct ib_ucm_req {
|
||||
__u32 id;
|
||||
__u32 qpn;
|
||||
@@ -274,7 +200,7 @@ struct ib_ucm_sidr_req {
|
||||
__be64 sid;
|
||||
__u64 data;
|
||||
__u64 path;
|
||||
__u16 pkey;
|
||||
__u16 reserved_pkey;
|
||||
__u8 len;
|
||||
__u8 max_cm_retries;
|
||||
__u8 reserved[4];
|
||||
@@ -304,8 +230,8 @@ struct ib_ucm_event_get {
|
||||
};
|
||||
|
||||
struct ib_ucm_req_event_resp {
|
||||
struct ib_ucm_path_rec primary_path;
|
||||
struct ib_ucm_path_rec alternate_path;
|
||||
struct ib_user_path_rec primary_path;
|
||||
struct ib_user_path_rec alternate_path;
|
||||
__be64 remote_ca_guid;
|
||||
__u32 remote_qkey;
|
||||
__u32 remote_qpn;
|
||||
@@ -349,7 +275,7 @@ struct ib_ucm_mra_event_resp {
|
||||
};
|
||||
|
||||
struct ib_ucm_lap_event_resp {
|
||||
struct ib_ucm_path_rec path;
|
||||
struct ib_user_path_rec path;
|
||||
};
|
||||
|
||||
struct ib_ucm_apr_event_resp {
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright (c) 2005 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.
|
||||
*/
|
||||
|
||||
#ifndef IB_USER_SA_H
|
||||
#define IB_USER_SA_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct ib_user_path_rec {
|
||||
__u8 dgid[16];
|
||||
__u8 sgid[16];
|
||||
__be16 dlid;
|
||||
__be16 slid;
|
||||
__u32 raw_traffic;
|
||||
__be32 flow_label;
|
||||
__u32 reversible;
|
||||
__u32 mtu;
|
||||
__be16 pkey;
|
||||
__u8 hop_limit;
|
||||
__u8 traffic_class;
|
||||
__u8 numb_path;
|
||||
__u8 sl;
|
||||
__u8 mtu_selector;
|
||||
__u8 rate_selector;
|
||||
__u8 rate;
|
||||
__u8 packet_life_time_selector;
|
||||
__u8 packet_life_time;
|
||||
__u8 preference;
|
||||
};
|
||||
|
||||
#endif /* IB_USER_SA_H */
|
||||
@@ -32,7 +32,7 @@
|
||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
* $Id: ib_user_verbs.h 2708 2005-06-24 17:27:21Z roland $
|
||||
* $Id: ib_user_verbs.h 4019 2005-11-11 00:33:09Z sean.hefty $
|
||||
*/
|
||||
|
||||
#ifndef IB_USER_VERBS_H
|
||||
@@ -323,6 +323,64 @@ struct ib_uverbs_destroy_cq_resp {
|
||||
__u32 async_events_reported;
|
||||
};
|
||||
|
||||
struct ib_uverbs_global_route {
|
||||
__u8 dgid[16];
|
||||
__u32 flow_label;
|
||||
__u8 sgid_index;
|
||||
__u8 hop_limit;
|
||||
__u8 traffic_class;
|
||||
__u8 reserved;
|
||||
};
|
||||
|
||||
struct ib_uverbs_ah_attr {
|
||||
struct ib_uverbs_global_route grh;
|
||||
__u16 dlid;
|
||||
__u8 sl;
|
||||
__u8 src_path_bits;
|
||||
__u8 static_rate;
|
||||
__u8 is_global;
|
||||
__u8 port_num;
|
||||
__u8 reserved;
|
||||
};
|
||||
|
||||
struct ib_uverbs_qp_attr {
|
||||
__u32 qp_attr_mask;
|
||||
__u32 qp_state;
|
||||
__u32 cur_qp_state;
|
||||
__u32 path_mtu;
|
||||
__u32 path_mig_state;
|
||||
__u32 qkey;
|
||||
__u32 rq_psn;
|
||||
__u32 sq_psn;
|
||||
__u32 dest_qp_num;
|
||||
__u32 qp_access_flags;
|
||||
|
||||
struct ib_uverbs_ah_attr ah_attr;
|
||||
struct ib_uverbs_ah_attr alt_ah_attr;
|
||||
|
||||
/* ib_qp_cap */
|
||||
__u32 max_send_wr;
|
||||
__u32 max_recv_wr;
|
||||
__u32 max_send_sge;
|
||||
__u32 max_recv_sge;
|
||||
__u32 max_inline_data;
|
||||
|
||||
__u16 pkey_index;
|
||||
__u16 alt_pkey_index;
|
||||
__u8 en_sqd_async_notify;
|
||||
__u8 sq_draining;
|
||||
__u8 max_rd_atomic;
|
||||
__u8 max_dest_rd_atomic;
|
||||
__u8 min_rnr_timer;
|
||||
__u8 port_num;
|
||||
__u8 timeout;
|
||||
__u8 retry_cnt;
|
||||
__u8 rnr_retry;
|
||||
__u8 alt_port_num;
|
||||
__u8 alt_timeout;
|
||||
__u8 reserved[5];
|
||||
};
|
||||
|
||||
struct ib_uverbs_create_qp {
|
||||
__u64 response;
|
||||
__u64 user_handle;
|
||||
@@ -541,26 +599,6 @@ struct ib_uverbs_post_srq_recv_resp {
|
||||
__u32 bad_wr;
|
||||
};
|
||||
|
||||
struct ib_uverbs_global_route {
|
||||
__u8 dgid[16];
|
||||
__u32 flow_label;
|
||||
__u8 sgid_index;
|
||||
__u8 hop_limit;
|
||||
__u8 traffic_class;
|
||||
__u8 reserved;
|
||||
};
|
||||
|
||||
struct ib_uverbs_ah_attr {
|
||||
struct ib_uverbs_global_route grh;
|
||||
__u16 dlid;
|
||||
__u8 sl;
|
||||
__u8 src_path_bits;
|
||||
__u8 static_rate;
|
||||
__u8 is_global;
|
||||
__u8 port_num;
|
||||
__u8 reserved;
|
||||
};
|
||||
|
||||
struct ib_uverbs_create_ah {
|
||||
__u64 response;
|
||||
__u64 user_handle;
|
||||
|
||||
+21
-1
@@ -260,7 +260,8 @@ enum ib_event_type {
|
||||
IB_EVENT_SM_CHANGE,
|
||||
IB_EVENT_SRQ_ERR,
|
||||
IB_EVENT_SRQ_LIMIT_REACHED,
|
||||
IB_EVENT_QP_LAST_WQE_REACHED
|
||||
IB_EVENT_QP_LAST_WQE_REACHED,
|
||||
IB_EVENT_CLIENT_REREGISTER
|
||||
};
|
||||
|
||||
struct ib_event {
|
||||
@@ -696,8 +697,12 @@ struct ib_ucontext {
|
||||
struct ib_uobject {
|
||||
u64 user_handle; /* handle given to us by userspace */
|
||||
struct ib_ucontext *context; /* associated user context */
|
||||
void *object; /* containing object */
|
||||
struct list_head list; /* link to context's list */
|
||||
u32 id; /* index into kernel idr */
|
||||
struct kref ref;
|
||||
struct rw_semaphore mutex; /* protects .live */
|
||||
int live;
|
||||
};
|
||||
|
||||
struct ib_umem {
|
||||
@@ -827,6 +832,7 @@ struct ib_cache {
|
||||
struct ib_event_handler event_handler;
|
||||
struct ib_pkey_cache **pkey_cache;
|
||||
struct ib_gid_cache **gid_cache;
|
||||
u8 *lmc_cache;
|
||||
};
|
||||
|
||||
struct ib_device {
|
||||
@@ -1085,6 +1091,20 @@ int ib_dealloc_pd(struct ib_pd *pd);
|
||||
*/
|
||||
struct ib_ah *ib_create_ah(struct ib_pd *pd, struct ib_ah_attr *ah_attr);
|
||||
|
||||
/**
|
||||
* ib_init_ah_from_wc - Initializes address handle attributes from a
|
||||
* work completion.
|
||||
* @device: Device on which the received message arrived.
|
||||
* @port_num: Port on which the received message arrived.
|
||||
* @wc: Work completion associated with the received message.
|
||||
* @grh: References the received global route header. This parameter is
|
||||
* ignored unless the work completion indicates that the GRH is valid.
|
||||
* @ah_attr: Returned attributes that can be used when creating an address
|
||||
* handle for replying to the message.
|
||||
*/
|
||||
int ib_init_ah_from_wc(struct ib_device *device, u8 port_num, struct ib_wc *wc,
|
||||
struct ib_grh *grh, struct ib_ah_attr *ah_attr);
|
||||
|
||||
/**
|
||||
* ib_create_ah_from_wc - Creates an address handle associated with the
|
||||
* sender of the specified work completion.
|
||||
|
||||
@@ -0,0 +1,256 @@
|
||||
/*
|
||||
* Copyright (c) 2005 Voltaire Inc. All rights reserved.
|
||||
* Copyright (c) 2005 Intel Corporation. All rights reserved.
|
||||
*
|
||||
* This Software is licensed under one of the following licenses:
|
||||
*
|
||||
* 1) under the terms of the "Common Public License 1.0" a copy of which is
|
||||
* available from the Open Source Initiative, see
|
||||
* http://www.opensource.org/licenses/cpl.php.
|
||||
*
|
||||
* 2) under the terms of the "The BSD License" a copy of which is
|
||||
* available from the Open Source Initiative, see
|
||||
* http://www.opensource.org/licenses/bsd-license.php.
|
||||
*
|
||||
* 3) under the terms of the "GNU General Public License (GPL) Version 2" a
|
||||
* copy of which is available from the Open Source Initiative, see
|
||||
* http://www.opensource.org/licenses/gpl-license.php.
|
||||
*
|
||||
* Licensee has the right to choose one of the above licenses.
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright
|
||||
* notice and one of the license notices.
|
||||
*
|
||||
* Redistributions in binary form must reproduce both the above copyright
|
||||
* notice, one of the license notices in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
*/
|
||||
|
||||
#if !defined(RDMA_CM_H)
|
||||
#define RDMA_CM_H
|
||||
|
||||
#include <linux/socket.h>
|
||||
#include <linux/in6.h>
|
||||
#include <rdma/ib_addr.h>
|
||||
#include <rdma/ib_sa.h>
|
||||
|
||||
/*
|
||||
* Upon receiving a device removal event, users must destroy the associated
|
||||
* RDMA identifier and release all resources allocated with the device.
|
||||
*/
|
||||
enum rdma_cm_event_type {
|
||||
RDMA_CM_EVENT_ADDR_RESOLVED,
|
||||
RDMA_CM_EVENT_ADDR_ERROR,
|
||||
RDMA_CM_EVENT_ROUTE_RESOLVED,
|
||||
RDMA_CM_EVENT_ROUTE_ERROR,
|
||||
RDMA_CM_EVENT_CONNECT_REQUEST,
|
||||
RDMA_CM_EVENT_CONNECT_RESPONSE,
|
||||
RDMA_CM_EVENT_CONNECT_ERROR,
|
||||
RDMA_CM_EVENT_UNREACHABLE,
|
||||
RDMA_CM_EVENT_REJECTED,
|
||||
RDMA_CM_EVENT_ESTABLISHED,
|
||||
RDMA_CM_EVENT_DISCONNECTED,
|
||||
RDMA_CM_EVENT_DEVICE_REMOVAL,
|
||||
};
|
||||
|
||||
enum rdma_port_space {
|
||||
RDMA_PS_SDP = 0x0001,
|
||||
RDMA_PS_TCP = 0x0106,
|
||||
RDMA_PS_UDP = 0x0111,
|
||||
RDMA_PS_SCTP = 0x0183
|
||||
};
|
||||
|
||||
struct rdma_addr {
|
||||
struct sockaddr src_addr;
|
||||
u8 src_pad[sizeof(struct sockaddr_in6) -
|
||||
sizeof(struct sockaddr)];
|
||||
struct sockaddr dst_addr;
|
||||
u8 dst_pad[sizeof(struct sockaddr_in6) -
|
||||
sizeof(struct sockaddr)];
|
||||
struct rdma_dev_addr dev_addr;
|
||||
};
|
||||
|
||||
struct rdma_route {
|
||||
struct rdma_addr addr;
|
||||
struct ib_sa_path_rec *path_rec;
|
||||
int num_paths;
|
||||
};
|
||||
|
||||
struct rdma_cm_event {
|
||||
enum rdma_cm_event_type event;
|
||||
int status;
|
||||
void *private_data;
|
||||
u8 private_data_len;
|
||||
};
|
||||
|
||||
struct rdma_cm_id;
|
||||
|
||||
/**
|
||||
* rdma_cm_event_handler - Callback used to report user events.
|
||||
*
|
||||
* Notes: Users may not call rdma_destroy_id from this callback to destroy
|
||||
* the passed in id, or a corresponding listen id. Returning a
|
||||
* non-zero value from the callback will destroy the passed in id.
|
||||
*/
|
||||
typedef int (*rdma_cm_event_handler)(struct rdma_cm_id *id,
|
||||
struct rdma_cm_event *event);
|
||||
|
||||
struct rdma_cm_id {
|
||||
struct ib_device *device;
|
||||
void *context;
|
||||
struct ib_qp *qp;
|
||||
rdma_cm_event_handler event_handler;
|
||||
struct rdma_route route;
|
||||
enum rdma_port_space ps;
|
||||
u8 port_num;
|
||||
};
|
||||
|
||||
/**
|
||||
* rdma_create_id - Create an RDMA identifier.
|
||||
*
|
||||
* @event_handler: User callback invoked to report events associated with the
|
||||
* returned rdma_id.
|
||||
* @context: User specified context associated with the id.
|
||||
* @ps: RDMA port space.
|
||||
*/
|
||||
struct rdma_cm_id *rdma_create_id(rdma_cm_event_handler event_handler,
|
||||
void *context, enum rdma_port_space ps);
|
||||
|
||||
void rdma_destroy_id(struct rdma_cm_id *id);
|
||||
|
||||
/**
|
||||
* rdma_bind_addr - Bind an RDMA identifier to a source address and
|
||||
* associated RDMA device, if needed.
|
||||
*
|
||||
* @id: RDMA identifier.
|
||||
* @addr: Local address information. Wildcard values are permitted.
|
||||
*
|
||||
* This associates a source address with the RDMA identifier before calling
|
||||
* rdma_listen. If a specific local address is given, the RDMA identifier will
|
||||
* be bound to a local RDMA device.
|
||||
*/
|
||||
int rdma_bind_addr(struct rdma_cm_id *id, struct sockaddr *addr);
|
||||
|
||||
/**
|
||||
* rdma_resolve_addr - Resolve destination and optional source addresses
|
||||
* from IP addresses to an RDMA address. If successful, the specified
|
||||
* rdma_cm_id will be bound to a local device.
|
||||
*
|
||||
* @id: RDMA identifier.
|
||||
* @src_addr: Source address information. This parameter may be NULL.
|
||||
* @dst_addr: Destination address information.
|
||||
* @timeout_ms: Time to wait for resolution to complete.
|
||||
*/
|
||||
int rdma_resolve_addr(struct rdma_cm_id *id, struct sockaddr *src_addr,
|
||||
struct sockaddr *dst_addr, int timeout_ms);
|
||||
|
||||
/**
|
||||
* rdma_resolve_route - Resolve the RDMA address bound to the RDMA identifier
|
||||
* into route information needed to establish a connection.
|
||||
*
|
||||
* This is called on the client side of a connection.
|
||||
* Users must have first called rdma_resolve_addr to resolve a dst_addr
|
||||
* into an RDMA address before calling this routine.
|
||||
*/
|
||||
int rdma_resolve_route(struct rdma_cm_id *id, int timeout_ms);
|
||||
|
||||
/**
|
||||
* rdma_create_qp - Allocate a QP and associate it with the specified RDMA
|
||||
* identifier.
|
||||
*
|
||||
* QPs allocated to an rdma_cm_id will automatically be transitioned by the CMA
|
||||
* through their states.
|
||||
*/
|
||||
int rdma_create_qp(struct rdma_cm_id *id, struct ib_pd *pd,
|
||||
struct ib_qp_init_attr *qp_init_attr);
|
||||
|
||||
/**
|
||||
* rdma_destroy_qp - Deallocate the QP associated with the specified RDMA
|
||||
* identifier.
|
||||
*
|
||||
* Users must destroy any QP associated with an RDMA identifier before
|
||||
* destroying the RDMA ID.
|
||||
*/
|
||||
void rdma_destroy_qp(struct rdma_cm_id *id);
|
||||
|
||||
/**
|
||||
* rdma_init_qp_attr - Initializes the QP attributes for use in transitioning
|
||||
* to a specified QP state.
|
||||
* @id: Communication identifier associated with the QP attributes to
|
||||
* initialize.
|
||||
* @qp_attr: On input, specifies the desired QP state. On output, the
|
||||
* mandatory and desired optional attributes will be set in order to
|
||||
* modify the QP to the specified state.
|
||||
* @qp_attr_mask: The QP attribute mask that may be used to transition the
|
||||
* QP to the specified state.
|
||||
*
|
||||
* Users must set the @qp_attr->qp_state to the desired QP state. This call
|
||||
* will set all required attributes for the given transition, along with
|
||||
* known optional attributes. Users may override the attributes returned from
|
||||
* this call before calling ib_modify_qp.
|
||||
*
|
||||
* Users that wish to have their QP automatically transitioned through its
|
||||
* states can associate a QP with the rdma_cm_id by calling rdma_create_qp().
|
||||
*/
|
||||
int rdma_init_qp_attr(struct rdma_cm_id *id, struct ib_qp_attr *qp_attr,
|
||||
int *qp_attr_mask);
|
||||
|
||||
struct rdma_conn_param {
|
||||
const void *private_data;
|
||||
u8 private_data_len;
|
||||
u8 responder_resources;
|
||||
u8 initiator_depth;
|
||||
u8 flow_control;
|
||||
u8 retry_count; /* ignored when accepting */
|
||||
u8 rnr_retry_count;
|
||||
/* Fields below ignored if a QP is created on the rdma_cm_id. */
|
||||
u8 srq;
|
||||
u32 qp_num;
|
||||
enum ib_qp_type qp_type;
|
||||
};
|
||||
|
||||
/**
|
||||
* rdma_connect - Initiate an active connection request.
|
||||
*
|
||||
* Users must have resolved a route for the rdma_cm_id to connect with
|
||||
* by having called rdma_resolve_route before calling this routine.
|
||||
*/
|
||||
int rdma_connect(struct rdma_cm_id *id, struct rdma_conn_param *conn_param);
|
||||
|
||||
/**
|
||||
* rdma_listen - This function is called by the passive side to
|
||||
* listen for incoming connection requests.
|
||||
*
|
||||
* Users must have bound the rdma_cm_id to a local address by calling
|
||||
* rdma_bind_addr before calling this routine.
|
||||
*/
|
||||
int rdma_listen(struct rdma_cm_id *id, int backlog);
|
||||
|
||||
/**
|
||||
* rdma_accept - Called to accept a connection request or response.
|
||||
* @id: Connection identifier associated with the request.
|
||||
* @conn_param: Information needed to establish the connection. This must be
|
||||
* provided if accepting a connection request. If accepting a connection
|
||||
* response, this parameter must be NULL.
|
||||
*
|
||||
* Typically, this routine is only called by the listener to accept a connection
|
||||
* request. It must also be called on the active side of a connection if the
|
||||
* user is performing their own QP transitions.
|
||||
*/
|
||||
int rdma_accept(struct rdma_cm_id *id, struct rdma_conn_param *conn_param);
|
||||
|
||||
/**
|
||||
* rdma_reject - Called to reject a connection request or response.
|
||||
*/
|
||||
int rdma_reject(struct rdma_cm_id *id, const void *private_data,
|
||||
u8 private_data_len);
|
||||
|
||||
/**
|
||||
* rdma_disconnect - This function disconnects the associated QP and
|
||||
* transitions it into the error state.
|
||||
*/
|
||||
int rdma_disconnect(struct rdma_cm_id *id);
|
||||
|
||||
#endif /* RDMA_CM_H */
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (c) 2006 Intel Corporation. All rights reserved.
|
||||
*
|
||||
* This Software is licensed under one of the following licenses:
|
||||
*
|
||||
* 1) under the terms of the "Common Public License 1.0" a copy of which is
|
||||
* available from the Open Source Initiative, see
|
||||
* http://www.opensource.org/licenses/cpl.php.
|
||||
*
|
||||
* 2) under the terms of the "The BSD License" a copy of which is
|
||||
* available from the Open Source Initiative, see
|
||||
* http://www.opensource.org/licenses/bsd-license.php.
|
||||
*
|
||||
* 3) under the terms of the "GNU General Public License (GPL) Version 2" a
|
||||
* copy of which is available from the Open Source Initiative, see
|
||||
* http://www.opensource.org/licenses/gpl-license.php.
|
||||
*
|
||||
* Licensee has the right to choose one of the above licenses.
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright
|
||||
* notice and one of the license notices.
|
||||
*
|
||||
* Redistributions in binary form must reproduce both the above copyright
|
||||
* notice, one of the license notices in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
*/
|
||||
|
||||
#if !defined(RDMA_CM_IB_H)
|
||||
#define RDMA_CM_IB_H
|
||||
|
||||
#include <rdma/rdma_cm.h>
|
||||
|
||||
/**
|
||||
* rdma_set_ib_paths - Manually sets the path records used to establish a
|
||||
* connection.
|
||||
* @id: Connection identifier associated with the request.
|
||||
* @path_rec: Reference to the path record
|
||||
*
|
||||
* This call permits a user to specify routing information for rdma_cm_id's
|
||||
* bound to Infiniband devices. It is called on the client side of a
|
||||
* connection and replaces the call to rdma_resolve_route.
|
||||
*/
|
||||
int rdma_set_ib_paths(struct rdma_cm_id *id,
|
||||
struct ib_sa_path_rec *path_rec, int num_paths);
|
||||
|
||||
#endif /* RDMA_CM_IB_H */
|
||||
@@ -87,6 +87,11 @@ enum srp_login_rej_reason {
|
||||
SRP_LOGIN_REJ_CHANNEL_LIMIT_REACHED = 0x00010006
|
||||
};
|
||||
|
||||
enum {
|
||||
SRP_REV10_IB_IO_CLASS = 0xff00,
|
||||
SRP_REV16A_IB_IO_CLASS = 0x0100
|
||||
};
|
||||
|
||||
struct srp_direct_buf {
|
||||
__be64 va;
|
||||
__be32 key;
|
||||
|
||||
Reference in New Issue
Block a user