1 /* 2 * Copyright (c) 2005 Voltaire Inc. All rights reserved. 3 * Copyright (c) 2002-2005, Network Appliance, Inc. All rights reserved. 4 * Copyright (c) 1999-2005, Mellanox Technologies, Inc. All rights reserved. 5 * Copyright (c) 2005-2006 Intel Corporation. All rights reserved. 6 * 7 * This software is available to you under a choice of one of two 8 * licenses. You may choose to be licensed under the terms of the GNU 9 * General Public License (GPL) Version 2, available from the file 10 * COPYING in the main directory of this source tree, or the 11 * OpenIB.org BSD license below: 12 * 13 * Redistribution and use in source and binary forms, with or 14 * without modification, are permitted provided that the following 15 * conditions are met: 16 * 17 * - Redistributions of source code must retain the above 18 * copyright notice, this list of conditions and the following 19 * disclaimer. 20 * 21 * - Redistributions in binary form must reproduce the above 22 * copyright notice, this list of conditions and the following 23 * disclaimer in the documentation and/or other materials 24 * provided with the distribution. 25 * 26 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 27 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 28 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 29 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 30 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 31 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 32 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 33 * SOFTWARE. 34 */ 35 36 #ifndef _CMA_PRIV_H 37 #define _CMA_PRIV_H 38 39 enum rdma_cm_state { 40 RDMA_CM_IDLE, 41 RDMA_CM_ADDR_QUERY, 42 RDMA_CM_ADDR_RESOLVED, 43 RDMA_CM_ROUTE_QUERY, 44 RDMA_CM_ROUTE_RESOLVED, 45 RDMA_CM_CONNECT, 46 RDMA_CM_DISCONNECT, 47 RDMA_CM_ADDR_BOUND, 48 RDMA_CM_LISTEN, 49 RDMA_CM_DEVICE_REMOVAL, 50 RDMA_CM_DESTROYING, 51 RDMA_CM_ADDRINFO_QUERY, 52 RDMA_CM_ADDRINFO_RESOLVED 53 }; 54 55 struct rdma_id_private { 56 struct rdma_cm_id id; 57 58 struct rdma_bind_list *bind_list; 59 struct hlist_node node; 60 union { 61 struct list_head device_item; /* On cma_device->id_list */ 62 struct list_head listen_any_item; /* On listen_any_list */ 63 }; 64 union { 65 /* On rdma_id_private->listen_list */ 66 struct list_head listen_item; 67 struct list_head listen_list; 68 }; 69 struct list_head id_list_entry; 70 struct cma_device *cma_dev; 71 struct list_head mc_list; 72 73 int internal_id; 74 enum rdma_cm_state state; 75 u8 restricted_node_type; 76 spinlock_t lock; 77 struct mutex qp_mutex; 78 79 struct completion comp; 80 refcount_t refcount; 81 struct mutex handler_mutex; 82 83 int backlog; 84 int timeout_ms; 85 struct ib_sa_query *query; 86 int query_id; 87 union { 88 struct ib_cm_id *ib; 89 struct iw_cm_id *iw; 90 } cm_id; 91 92 u32 seq_num; 93 u32 qkey; 94 u32 qp_num; 95 u32 options; 96 u8 srq; 97 u8 tos; 98 u8 tos_set:1; 99 u8 timeout_set:1; 100 u8 min_rnr_timer_set:1; 101 u8 reuseaddr; 102 u8 afonly; 103 u8 timeout; 104 u8 min_rnr_timer; 105 u8 used_resolve_ip; 106 enum ib_gid_type gid_type; 107 108 /* 109 * Internal to RDMA/core, don't use in the drivers 110 */ 111 struct rdma_restrack_entry res; 112 struct rdma_ucm_ece ece; 113 }; 114 115 #if IS_ENABLED(CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS) 116 int cma_configfs_init(void); 117 void cma_configfs_exit(void); 118 #else 119 static inline int cma_configfs_init(void) 120 { 121 return 0; 122 } 123 124 static inline void cma_configfs_exit(void) 125 { 126 } 127 #endif 128 129 void cma_dev_get(struct cma_device *dev); 130 void cma_dev_put(struct cma_device *dev); 131 typedef bool (*cma_device_filter)(struct ib_device *, void *); 132 struct cma_device *cma_enum_devices_by_ibdev(cma_device_filter filter, 133 void *cookie); 134 int cma_get_default_gid_type(struct cma_device *dev, u32 port); 135 int cma_set_default_gid_type(struct cma_device *dev, u32 port, 136 enum ib_gid_type default_gid_type); 137 int cma_get_default_roce_tos(struct cma_device *dev, u32 port); 138 int cma_set_default_roce_tos(struct cma_device *dev, u32 port, 139 u8 default_roce_tos); 140 struct ib_device *cma_get_ib_dev(struct cma_device *dev); 141 142 #endif /* _CMA_PRIV_H */ 143