]> Git Repo - linux.git/blob - include/rdma/ib_verbs.h
RDMA: Fix storage of PortInfo CapabilityMask in the kernel
[linux.git] / include / rdma / ib_verbs.h
1 /*
2  * Copyright (c) 2004 Mellanox Technologies Ltd.  All rights reserved.
3  * Copyright (c) 2004 Infinicon Corporation.  All rights reserved.
4  * Copyright (c) 2004 Intel Corporation.  All rights reserved.
5  * Copyright (c) 2004 Topspin Corporation.  All rights reserved.
6  * Copyright (c) 2004 Voltaire Corporation.  All rights reserved.
7  * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved.
8  * Copyright (c) 2005, 2006, 2007 Cisco Systems.  All rights reserved.
9  *
10  * This software is available to you under a choice of one of two
11  * licenses.  You may choose to be licensed under the terms of the GNU
12  * General Public License (GPL) Version 2, available from the file
13  * COPYING in the main directory of this source tree, or the
14  * OpenIB.org BSD license below:
15  *
16  *     Redistribution and use in source and binary forms, with or
17  *     without modification, are permitted provided that the following
18  *     conditions are met:
19  *
20  *      - Redistributions of source code must retain the above
21  *        copyright notice, this list of conditions and the following
22  *        disclaimer.
23  *
24  *      - Redistributions in binary form must reproduce the above
25  *        copyright notice, this list of conditions and the following
26  *        disclaimer in the documentation and/or other materials
27  *        provided with the distribution.
28  *
29  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
30  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
31  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
32  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
33  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
34  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
35  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
36  * SOFTWARE.
37  */
38
39 #if !defined(IB_VERBS_H)
40 #define IB_VERBS_H
41
42 #include <linux/types.h>
43 #include <linux/device.h>
44 #include <linux/mm.h>
45 #include <linux/dma-mapping.h>
46 #include <linux/kref.h>
47 #include <linux/list.h>
48 #include <linux/rwsem.h>
49 #include <linux/scatterlist.h>
50 #include <linux/workqueue.h>
51 #include <linux/socket.h>
52 #include <linux/irq_poll.h>
53 #include <uapi/linux/if_ether.h>
54 #include <net/ipv6.h>
55 #include <net/ip.h>
56 #include <linux/string.h>
57 #include <linux/slab.h>
58 #include <linux/netdevice.h>
59
60 #include <linux/if_link.h>
61 #include <linux/atomic.h>
62 #include <linux/mmu_notifier.h>
63 #include <linux/uaccess.h>
64 #include <linux/cgroup_rdma.h>
65 #include <uapi/rdma/ib_user_verbs.h>
66 #include <rdma/restrack.h>
67 #include <uapi/rdma/rdma_user_ioctl.h>
68 #include <uapi/rdma/ib_user_ioctl_verbs.h>
69
70 #define IB_FW_VERSION_NAME_MAX  ETHTOOL_FWVERS_LEN
71
72 extern struct workqueue_struct *ib_wq;
73 extern struct workqueue_struct *ib_comp_wq;
74
75 union ib_gid {
76         u8      raw[16];
77         struct {
78                 __be64  subnet_prefix;
79                 __be64  interface_id;
80         } global;
81 };
82
83 extern union ib_gid zgid;
84
85 enum ib_gid_type {
86         /* If link layer is Ethernet, this is RoCE V1 */
87         IB_GID_TYPE_IB        = 0,
88         IB_GID_TYPE_ROCE      = 0,
89         IB_GID_TYPE_ROCE_UDP_ENCAP = 1,
90         IB_GID_TYPE_SIZE
91 };
92
93 #define ROCE_V2_UDP_DPORT      4791
94 struct ib_gid_attr {
95         struct net_device       *ndev;
96         struct ib_device        *device;
97         union ib_gid            gid;
98         enum ib_gid_type        gid_type;
99         u16                     index;
100         u8                      port_num;
101 };
102
103 enum rdma_node_type {
104         /* IB values map to NodeInfo:NodeType. */
105         RDMA_NODE_IB_CA         = 1,
106         RDMA_NODE_IB_SWITCH,
107         RDMA_NODE_IB_ROUTER,
108         RDMA_NODE_RNIC,
109         RDMA_NODE_USNIC,
110         RDMA_NODE_USNIC_UDP,
111 };
112
113 enum {
114         /* set the local administered indication */
115         IB_SA_WELL_KNOWN_GUID   = BIT_ULL(57) | 2,
116 };
117
118 enum rdma_transport_type {
119         RDMA_TRANSPORT_IB,
120         RDMA_TRANSPORT_IWARP,
121         RDMA_TRANSPORT_USNIC,
122         RDMA_TRANSPORT_USNIC_UDP
123 };
124
125 enum rdma_protocol_type {
126         RDMA_PROTOCOL_IB,
127         RDMA_PROTOCOL_IBOE,
128         RDMA_PROTOCOL_IWARP,
129         RDMA_PROTOCOL_USNIC_UDP
130 };
131
132 __attribute_const__ enum rdma_transport_type
133 rdma_node_get_transport(enum rdma_node_type node_type);
134
135 enum rdma_network_type {
136         RDMA_NETWORK_IB,
137         RDMA_NETWORK_ROCE_V1 = RDMA_NETWORK_IB,
138         RDMA_NETWORK_IPV4,
139         RDMA_NETWORK_IPV6
140 };
141
142 static inline enum ib_gid_type ib_network_to_gid_type(enum rdma_network_type network_type)
143 {
144         if (network_type == RDMA_NETWORK_IPV4 ||
145             network_type == RDMA_NETWORK_IPV6)
146                 return IB_GID_TYPE_ROCE_UDP_ENCAP;
147
148         /* IB_GID_TYPE_IB same as RDMA_NETWORK_ROCE_V1 */
149         return IB_GID_TYPE_IB;
150 }
151
152 static inline enum rdma_network_type
153 rdma_gid_attr_network_type(const struct ib_gid_attr *attr)
154 {
155         if (attr->gid_type == IB_GID_TYPE_IB)
156                 return RDMA_NETWORK_IB;
157
158         if (ipv6_addr_v4mapped((struct in6_addr *)&attr->gid))
159                 return RDMA_NETWORK_IPV4;
160         else
161                 return RDMA_NETWORK_IPV6;
162 }
163
164 enum rdma_link_layer {
165         IB_LINK_LAYER_UNSPECIFIED,
166         IB_LINK_LAYER_INFINIBAND,
167         IB_LINK_LAYER_ETHERNET,
168 };
169
170 enum ib_device_cap_flags {
171         IB_DEVICE_RESIZE_MAX_WR                 = (1 << 0),
172         IB_DEVICE_BAD_PKEY_CNTR                 = (1 << 1),
173         IB_DEVICE_BAD_QKEY_CNTR                 = (1 << 2),
174         IB_DEVICE_RAW_MULTI                     = (1 << 3),
175         IB_DEVICE_AUTO_PATH_MIG                 = (1 << 4),
176         IB_DEVICE_CHANGE_PHY_PORT               = (1 << 5),
177         IB_DEVICE_UD_AV_PORT_ENFORCE            = (1 << 6),
178         IB_DEVICE_CURR_QP_STATE_MOD             = (1 << 7),
179         IB_DEVICE_SHUTDOWN_PORT                 = (1 << 8),
180         /* Not in use, former INIT_TYPE         = (1 << 9),*/
181         IB_DEVICE_PORT_ACTIVE_EVENT             = (1 << 10),
182         IB_DEVICE_SYS_IMAGE_GUID                = (1 << 11),
183         IB_DEVICE_RC_RNR_NAK_GEN                = (1 << 12),
184         IB_DEVICE_SRQ_RESIZE                    = (1 << 13),
185         IB_DEVICE_N_NOTIFY_CQ                   = (1 << 14),
186
187         /*
188          * This device supports a per-device lkey or stag that can be
189          * used without performing a memory registration for the local
190          * memory.  Note that ULPs should never check this flag, but
191          * instead of use the local_dma_lkey flag in the ib_pd structure,
192          * which will always contain a usable lkey.
193          */
194         IB_DEVICE_LOCAL_DMA_LKEY                = (1 << 15),
195         /* Reserved, old SEND_W_INV             = (1 << 16),*/
196         IB_DEVICE_MEM_WINDOW                    = (1 << 17),
197         /*
198          * Devices should set IB_DEVICE_UD_IP_SUM if they support
199          * insertion of UDP and TCP checksum on outgoing UD IPoIB
200          * messages and can verify the validity of checksum for
201          * incoming messages.  Setting this flag implies that the
202          * IPoIB driver may set NETIF_F_IP_CSUM for datagram mode.
203          */
204         IB_DEVICE_UD_IP_CSUM                    = (1 << 18),
205         IB_DEVICE_UD_TSO                        = (1 << 19),
206         IB_DEVICE_XRC                           = (1 << 20),
207
208         /*
209          * This device supports the IB "base memory management extension",
210          * which includes support for fast registrations (IB_WR_REG_MR,
211          * IB_WR_LOCAL_INV and IB_WR_SEND_WITH_INV verbs).  This flag should
212          * also be set by any iWarp device which must support FRs to comply
213          * to the iWarp verbs spec.  iWarp devices also support the
214          * IB_WR_RDMA_READ_WITH_INV verb for RDMA READs that invalidate the
215          * stag.
216          */
217         IB_DEVICE_MEM_MGT_EXTENSIONS            = (1 << 21),
218         IB_DEVICE_BLOCK_MULTICAST_LOOPBACK      = (1 << 22),
219         IB_DEVICE_MEM_WINDOW_TYPE_2A            = (1 << 23),
220         IB_DEVICE_MEM_WINDOW_TYPE_2B            = (1 << 24),
221         IB_DEVICE_RC_IP_CSUM                    = (1 << 25),
222         /* Deprecated. Please use IB_RAW_PACKET_CAP_IP_CSUM. */
223         IB_DEVICE_RAW_IP_CSUM                   = (1 << 26),
224         /*
225          * Devices should set IB_DEVICE_CROSS_CHANNEL if they
226          * support execution of WQEs that involve synchronization
227          * of I/O operations with single completion queue managed
228          * by hardware.
229          */
230         IB_DEVICE_CROSS_CHANNEL                 = (1 << 27),
231         IB_DEVICE_MANAGED_FLOW_STEERING         = (1 << 29),
232         IB_DEVICE_SIGNATURE_HANDOVER            = (1 << 30),
233         IB_DEVICE_ON_DEMAND_PAGING              = (1ULL << 31),
234         IB_DEVICE_SG_GAPS_REG                   = (1ULL << 32),
235         IB_DEVICE_VIRTUAL_FUNCTION              = (1ULL << 33),
236         /* Deprecated. Please use IB_RAW_PACKET_CAP_SCATTER_FCS. */
237         IB_DEVICE_RAW_SCATTER_FCS               = (1ULL << 34),
238         IB_DEVICE_RDMA_NETDEV_OPA_VNIC          = (1ULL << 35),
239         /* The device supports padding incoming writes to cacheline. */
240         IB_DEVICE_PCI_WRITE_END_PADDING         = (1ULL << 36),
241 };
242
243 enum ib_signature_prot_cap {
244         IB_PROT_T10DIF_TYPE_1 = 1,
245         IB_PROT_T10DIF_TYPE_2 = 1 << 1,
246         IB_PROT_T10DIF_TYPE_3 = 1 << 2,
247 };
248
249 enum ib_signature_guard_cap {
250         IB_GUARD_T10DIF_CRC     = 1,
251         IB_GUARD_T10DIF_CSUM    = 1 << 1,
252 };
253
254 enum ib_atomic_cap {
255         IB_ATOMIC_NONE,
256         IB_ATOMIC_HCA,
257         IB_ATOMIC_GLOB
258 };
259
260 enum ib_odp_general_cap_bits {
261         IB_ODP_SUPPORT          = 1 << 0,
262         IB_ODP_SUPPORT_IMPLICIT = 1 << 1,
263 };
264
265 enum ib_odp_transport_cap_bits {
266         IB_ODP_SUPPORT_SEND     = 1 << 0,
267         IB_ODP_SUPPORT_RECV     = 1 << 1,
268         IB_ODP_SUPPORT_WRITE    = 1 << 2,
269         IB_ODP_SUPPORT_READ     = 1 << 3,
270         IB_ODP_SUPPORT_ATOMIC   = 1 << 4,
271 };
272
273 struct ib_odp_caps {
274         uint64_t general_caps;
275         struct {
276                 uint32_t  rc_odp_caps;
277                 uint32_t  uc_odp_caps;
278                 uint32_t  ud_odp_caps;
279         } per_transport_caps;
280 };
281
282 struct ib_rss_caps {
283         /* Corresponding bit will be set if qp type from
284          * 'enum ib_qp_type' is supported, e.g.
285          * supported_qpts |= 1 << IB_QPT_UD
286          */
287         u32 supported_qpts;
288         u32 max_rwq_indirection_tables;
289         u32 max_rwq_indirection_table_size;
290 };
291
292 enum ib_tm_cap_flags {
293         /*  Support tag matching on RC transport */
294         IB_TM_CAP_RC                = 1 << 0,
295 };
296
297 struct ib_tm_caps {
298         /* Max size of RNDV header */
299         u32 max_rndv_hdr_size;
300         /* Max number of entries in tag matching list */
301         u32 max_num_tags;
302         /* From enum ib_tm_cap_flags */
303         u32 flags;
304         /* Max number of outstanding list operations */
305         u32 max_ops;
306         /* Max number of SGE in tag matching entry */
307         u32 max_sge;
308 };
309
310 struct ib_cq_init_attr {
311         unsigned int    cqe;
312         int             comp_vector;
313         u32             flags;
314 };
315
316 enum ib_cq_attr_mask {
317         IB_CQ_MODERATE = 1 << 0,
318 };
319
320 struct ib_cq_caps {
321         u16     max_cq_moderation_count;
322         u16     max_cq_moderation_period;
323 };
324
325 struct ib_dm_mr_attr {
326         u64             length;
327         u64             offset;
328         u32             access_flags;
329 };
330
331 struct ib_dm_alloc_attr {
332         u64     length;
333         u32     alignment;
334         u32     flags;
335 };
336
337 struct ib_device_attr {
338         u64                     fw_ver;
339         __be64                  sys_image_guid;
340         u64                     max_mr_size;
341         u64                     page_size_cap;
342         u32                     vendor_id;
343         u32                     vendor_part_id;
344         u32                     hw_ver;
345         int                     max_qp;
346         int                     max_qp_wr;
347         u64                     device_cap_flags;
348         int                     max_send_sge;
349         int                     max_recv_sge;
350         int                     max_sge_rd;
351         int                     max_cq;
352         int                     max_cqe;
353         int                     max_mr;
354         int                     max_pd;
355         int                     max_qp_rd_atom;
356         int                     max_ee_rd_atom;
357         int                     max_res_rd_atom;
358         int                     max_qp_init_rd_atom;
359         int                     max_ee_init_rd_atom;
360         enum ib_atomic_cap      atomic_cap;
361         enum ib_atomic_cap      masked_atomic_cap;
362         int                     max_ee;
363         int                     max_rdd;
364         int                     max_mw;
365         int                     max_raw_ipv6_qp;
366         int                     max_raw_ethy_qp;
367         int                     max_mcast_grp;
368         int                     max_mcast_qp_attach;
369         int                     max_total_mcast_qp_attach;
370         int                     max_ah;
371         int                     max_fmr;
372         int                     max_map_per_fmr;
373         int                     max_srq;
374         int                     max_srq_wr;
375         int                     max_srq_sge;
376         unsigned int            max_fast_reg_page_list_len;
377         u16                     max_pkeys;
378         u8                      local_ca_ack_delay;
379         int                     sig_prot_cap;
380         int                     sig_guard_cap;
381         struct ib_odp_caps      odp_caps;
382         uint64_t                timestamp_mask;
383         uint64_t                hca_core_clock; /* in KHZ */
384         struct ib_rss_caps      rss_caps;
385         u32                     max_wq_type_rq;
386         u32                     raw_packet_caps; /* Use ib_raw_packet_caps enum */
387         struct ib_tm_caps       tm_caps;
388         struct ib_cq_caps       cq_caps;
389         u64                     max_dm_size;
390 };
391
392 enum ib_mtu {
393         IB_MTU_256  = 1,
394         IB_MTU_512  = 2,
395         IB_MTU_1024 = 3,
396         IB_MTU_2048 = 4,
397         IB_MTU_4096 = 5
398 };
399
400 static inline int ib_mtu_enum_to_int(enum ib_mtu mtu)
401 {
402         switch (mtu) {
403         case IB_MTU_256:  return  256;
404         case IB_MTU_512:  return  512;
405         case IB_MTU_1024: return 1024;
406         case IB_MTU_2048: return 2048;
407         case IB_MTU_4096: return 4096;
408         default:          return -1;
409         }
410 }
411
412 static inline enum ib_mtu ib_mtu_int_to_enum(int mtu)
413 {
414         if (mtu >= 4096)
415                 return IB_MTU_4096;
416         else if (mtu >= 2048)
417                 return IB_MTU_2048;
418         else if (mtu >= 1024)
419                 return IB_MTU_1024;
420         else if (mtu >= 512)
421                 return IB_MTU_512;
422         else
423                 return IB_MTU_256;
424 }
425
426 enum ib_port_state {
427         IB_PORT_NOP             = 0,
428         IB_PORT_DOWN            = 1,
429         IB_PORT_INIT            = 2,
430         IB_PORT_ARMED           = 3,
431         IB_PORT_ACTIVE          = 4,
432         IB_PORT_ACTIVE_DEFER    = 5
433 };
434
435 enum ib_port_width {
436         IB_WIDTH_1X     = 1,
437         IB_WIDTH_4X     = 2,
438         IB_WIDTH_8X     = 4,
439         IB_WIDTH_12X    = 8
440 };
441
442 static inline int ib_width_enum_to_int(enum ib_port_width width)
443 {
444         switch (width) {
445         case IB_WIDTH_1X:  return  1;
446         case IB_WIDTH_4X:  return  4;
447         case IB_WIDTH_8X:  return  8;
448         case IB_WIDTH_12X: return 12;
449         default:          return -1;
450         }
451 }
452
453 enum ib_port_speed {
454         IB_SPEED_SDR    = 1,
455         IB_SPEED_DDR    = 2,
456         IB_SPEED_QDR    = 4,
457         IB_SPEED_FDR10  = 8,
458         IB_SPEED_FDR    = 16,
459         IB_SPEED_EDR    = 32,
460         IB_SPEED_HDR    = 64
461 };
462
463 /**
464  * struct rdma_hw_stats
465  * @lock - Mutex to protect parallel write access to lifespan and values
466  *    of counters, which are 64bits and not guaranteeed to be written
467  *    atomicaly on 32bits systems.
468  * @timestamp - Used by the core code to track when the last update was
469  * @lifespan - Used by the core code to determine how old the counters
470  *   should be before being updated again.  Stored in jiffies, defaults
471  *   to 10 milliseconds, drivers can override the default be specifying
472  *   their own value during their allocation routine.
473  * @name - Array of pointers to static names used for the counters in
474  *   directory.
475  * @num_counters - How many hardware counters there are.  If name is
476  *   shorter than this number, a kernel oops will result.  Driver authors
477  *   are encouraged to leave BUILD_BUG_ON(ARRAY_SIZE(@name) < num_counters)
478  *   in their code to prevent this.
479  * @value - Array of u64 counters that are accessed by the sysfs code and
480  *   filled in by the drivers get_stats routine
481  */
482 struct rdma_hw_stats {
483         struct mutex    lock; /* Protect lifespan and values[] */
484         unsigned long   timestamp;
485         unsigned long   lifespan;
486         const char * const *names;
487         int             num_counters;
488         u64             value[];
489 };
490
491 #define RDMA_HW_STATS_DEFAULT_LIFESPAN 10
492 /**
493  * rdma_alloc_hw_stats_struct - Helper function to allocate dynamic struct
494  *   for drivers.
495  * @names - Array of static const char *
496  * @num_counters - How many elements in array
497  * @lifespan - How many milliseconds between updates
498  */
499 static inline struct rdma_hw_stats *rdma_alloc_hw_stats_struct(
500                 const char * const *names, int num_counters,
501                 unsigned long lifespan)
502 {
503         struct rdma_hw_stats *stats;
504
505         stats = kzalloc(sizeof(*stats) + num_counters * sizeof(u64),
506                         GFP_KERNEL);
507         if (!stats)
508                 return NULL;
509         stats->names = names;
510         stats->num_counters = num_counters;
511         stats->lifespan = msecs_to_jiffies(lifespan);
512
513         return stats;
514 }
515
516
517 /* Define bits for the various functionality this port needs to be supported by
518  * the core.
519  */
520 /* Management                           0x00000FFF */
521 #define RDMA_CORE_CAP_IB_MAD            0x00000001
522 #define RDMA_CORE_CAP_IB_SMI            0x00000002
523 #define RDMA_CORE_CAP_IB_CM             0x00000004
524 #define RDMA_CORE_CAP_IW_CM             0x00000008
525 #define RDMA_CORE_CAP_IB_SA             0x00000010
526 #define RDMA_CORE_CAP_OPA_MAD           0x00000020
527
528 /* Address format                       0x000FF000 */
529 #define RDMA_CORE_CAP_AF_IB             0x00001000
530 #define RDMA_CORE_CAP_ETH_AH            0x00002000
531 #define RDMA_CORE_CAP_OPA_AH            0x00004000
532
533 /* Protocol                             0xFFF00000 */
534 #define RDMA_CORE_CAP_PROT_IB           0x00100000
535 #define RDMA_CORE_CAP_PROT_ROCE         0x00200000
536 #define RDMA_CORE_CAP_PROT_IWARP        0x00400000
537 #define RDMA_CORE_CAP_PROT_ROCE_UDP_ENCAP 0x00800000
538 #define RDMA_CORE_CAP_PROT_RAW_PACKET   0x01000000
539 #define RDMA_CORE_CAP_PROT_USNIC        0x02000000
540
541 #define RDMA_CORE_PORT_IBA_IB          (RDMA_CORE_CAP_PROT_IB  \
542                                         | RDMA_CORE_CAP_IB_MAD \
543                                         | RDMA_CORE_CAP_IB_SMI \
544                                         | RDMA_CORE_CAP_IB_CM  \
545                                         | RDMA_CORE_CAP_IB_SA  \
546                                         | RDMA_CORE_CAP_AF_IB)
547 #define RDMA_CORE_PORT_IBA_ROCE        (RDMA_CORE_CAP_PROT_ROCE \
548                                         | RDMA_CORE_CAP_IB_MAD  \
549                                         | RDMA_CORE_CAP_IB_CM   \
550                                         | RDMA_CORE_CAP_AF_IB   \
551                                         | RDMA_CORE_CAP_ETH_AH)
552 #define RDMA_CORE_PORT_IBA_ROCE_UDP_ENCAP                       \
553                                         (RDMA_CORE_CAP_PROT_ROCE_UDP_ENCAP \
554                                         | RDMA_CORE_CAP_IB_MAD  \
555                                         | RDMA_CORE_CAP_IB_CM   \
556                                         | RDMA_CORE_CAP_AF_IB   \
557                                         | RDMA_CORE_CAP_ETH_AH)
558 #define RDMA_CORE_PORT_IWARP           (RDMA_CORE_CAP_PROT_IWARP \
559                                         | RDMA_CORE_CAP_IW_CM)
560 #define RDMA_CORE_PORT_INTEL_OPA       (RDMA_CORE_PORT_IBA_IB  \
561                                         | RDMA_CORE_CAP_OPA_MAD)
562
563 #define RDMA_CORE_PORT_RAW_PACKET       (RDMA_CORE_CAP_PROT_RAW_PACKET)
564
565 #define RDMA_CORE_PORT_USNIC            (RDMA_CORE_CAP_PROT_USNIC)
566
567 struct ib_port_attr {
568         u64                     subnet_prefix;
569         enum ib_port_state      state;
570         enum ib_mtu             max_mtu;
571         enum ib_mtu             active_mtu;
572         int                     gid_tbl_len;
573         unsigned int            grh_required:1;
574         unsigned int            ip_gids:1;
575         /* This is the value from PortInfo CapabilityMask, defined by IBA */
576         u32                     port_cap_flags;
577         u32                     max_msg_sz;
578         u32                     bad_pkey_cntr;
579         u32                     qkey_viol_cntr;
580         u16                     pkey_tbl_len;
581         u32                     sm_lid;
582         u32                     lid;
583         u8                      lmc;
584         u8                      max_vl_num;
585         u8                      sm_sl;
586         u8                      subnet_timeout;
587         u8                      init_type_reply;
588         u8                      active_width;
589         u8                      active_speed;
590         u8                      phys_state;
591 };
592
593 enum ib_device_modify_flags {
594         IB_DEVICE_MODIFY_SYS_IMAGE_GUID = 1 << 0,
595         IB_DEVICE_MODIFY_NODE_DESC      = 1 << 1
596 };
597
598 #define IB_DEVICE_NODE_DESC_MAX 64
599
600 struct ib_device_modify {
601         u64     sys_image_guid;
602         char    node_desc[IB_DEVICE_NODE_DESC_MAX];
603 };
604
605 enum ib_port_modify_flags {
606         IB_PORT_SHUTDOWN                = 1,
607         IB_PORT_INIT_TYPE               = (1<<2),
608         IB_PORT_RESET_QKEY_CNTR         = (1<<3),
609         IB_PORT_OPA_MASK_CHG            = (1<<4)
610 };
611
612 struct ib_port_modify {
613         u32     set_port_cap_mask;
614         u32     clr_port_cap_mask;
615         u8      init_type;
616 };
617
618 enum ib_event_type {
619         IB_EVENT_CQ_ERR,
620         IB_EVENT_QP_FATAL,
621         IB_EVENT_QP_REQ_ERR,
622         IB_EVENT_QP_ACCESS_ERR,
623         IB_EVENT_COMM_EST,
624         IB_EVENT_SQ_DRAINED,
625         IB_EVENT_PATH_MIG,
626         IB_EVENT_PATH_MIG_ERR,
627         IB_EVENT_DEVICE_FATAL,
628         IB_EVENT_PORT_ACTIVE,
629         IB_EVENT_PORT_ERR,
630         IB_EVENT_LID_CHANGE,
631         IB_EVENT_PKEY_CHANGE,
632         IB_EVENT_SM_CHANGE,
633         IB_EVENT_SRQ_ERR,
634         IB_EVENT_SRQ_LIMIT_REACHED,
635         IB_EVENT_QP_LAST_WQE_REACHED,
636         IB_EVENT_CLIENT_REREGISTER,
637         IB_EVENT_GID_CHANGE,
638         IB_EVENT_WQ_FATAL,
639 };
640
641 const char *__attribute_const__ ib_event_msg(enum ib_event_type event);
642
643 struct ib_event {
644         struct ib_device        *device;
645         union {
646                 struct ib_cq    *cq;
647                 struct ib_qp    *qp;
648                 struct ib_srq   *srq;
649                 struct ib_wq    *wq;
650                 u8              port_num;
651         } element;
652         enum ib_event_type      event;
653 };
654
655 struct ib_event_handler {
656         struct ib_device *device;
657         void            (*handler)(struct ib_event_handler *, struct ib_event *);
658         struct list_head  list;
659 };
660
661 #define INIT_IB_EVENT_HANDLER(_ptr, _device, _handler)          \
662         do {                                                    \
663                 (_ptr)->device  = _device;                      \
664                 (_ptr)->handler = _handler;                     \
665                 INIT_LIST_HEAD(&(_ptr)->list);                  \
666         } while (0)
667
668 struct ib_global_route {
669         const struct ib_gid_attr *sgid_attr;
670         union ib_gid    dgid;
671         u32             flow_label;
672         u8              sgid_index;
673         u8              hop_limit;
674         u8              traffic_class;
675 };
676
677 struct ib_grh {
678         __be32          version_tclass_flow;
679         __be16          paylen;
680         u8              next_hdr;
681         u8              hop_limit;
682         union ib_gid    sgid;
683         union ib_gid    dgid;
684 };
685
686 union rdma_network_hdr {
687         struct ib_grh ibgrh;
688         struct {
689                 /* The IB spec states that if it's IPv4, the header
690                  * is located in the last 20 bytes of the header.
691                  */
692                 u8              reserved[20];
693                 struct iphdr    roce4grh;
694         };
695 };
696
697 #define IB_QPN_MASK             0xFFFFFF
698
699 enum {
700         IB_MULTICAST_QPN = 0xffffff
701 };
702
703 #define IB_LID_PERMISSIVE       cpu_to_be16(0xFFFF)
704 #define IB_MULTICAST_LID_BASE   cpu_to_be16(0xC000)
705
706 enum ib_ah_flags {
707         IB_AH_GRH       = 1
708 };
709
710 enum ib_rate {
711         IB_RATE_PORT_CURRENT = 0,
712         IB_RATE_2_5_GBPS = 2,
713         IB_RATE_5_GBPS   = 5,
714         IB_RATE_10_GBPS  = 3,
715         IB_RATE_20_GBPS  = 6,
716         IB_RATE_30_GBPS  = 4,
717         IB_RATE_40_GBPS  = 7,
718         IB_RATE_60_GBPS  = 8,
719         IB_RATE_80_GBPS  = 9,
720         IB_RATE_120_GBPS = 10,
721         IB_RATE_14_GBPS  = 11,
722         IB_RATE_56_GBPS  = 12,
723         IB_RATE_112_GBPS = 13,
724         IB_RATE_168_GBPS = 14,
725         IB_RATE_25_GBPS  = 15,
726         IB_RATE_100_GBPS = 16,
727         IB_RATE_200_GBPS = 17,
728         IB_RATE_300_GBPS = 18
729 };
730
731 /**
732  * ib_rate_to_mult - Convert the IB rate enum to a multiple of the
733  * base rate of 2.5 Gbit/sec.  For example, IB_RATE_5_GBPS will be
734  * converted to 2, since 5 Gbit/sec is 2 * 2.5 Gbit/sec.
735  * @rate: rate to convert.
736  */
737 __attribute_const__ int ib_rate_to_mult(enum ib_rate rate);
738
739 /**
740  * ib_rate_to_mbps - Convert the IB rate enum to Mbps.
741  * For example, IB_RATE_2_5_GBPS will be converted to 2500.
742  * @rate: rate to convert.
743  */
744 __attribute_const__ int ib_rate_to_mbps(enum ib_rate rate);
745
746
747 /**
748  * enum ib_mr_type - memory region type
749  * @IB_MR_TYPE_MEM_REG:       memory region that is used for
750  *                            normal registration
751  * @IB_MR_TYPE_SIGNATURE:     memory region that is used for
752  *                            signature operations (data-integrity
753  *                            capable regions)
754  * @IB_MR_TYPE_SG_GAPS:       memory region that is capable to
755  *                            register any arbitrary sg lists (without
756  *                            the normal mr constraints - see
757  *                            ib_map_mr_sg)
758  */
759 enum ib_mr_type {
760         IB_MR_TYPE_MEM_REG,
761         IB_MR_TYPE_SIGNATURE,
762         IB_MR_TYPE_SG_GAPS,
763 };
764
765 /**
766  * Signature types
767  * IB_SIG_TYPE_NONE: Unprotected.
768  * IB_SIG_TYPE_T10_DIF: Type T10-DIF
769  */
770 enum ib_signature_type {
771         IB_SIG_TYPE_NONE,
772         IB_SIG_TYPE_T10_DIF,
773 };
774
775 /**
776  * Signature T10-DIF block-guard types
777  * IB_T10DIF_CRC: Corresponds to T10-PI mandated CRC checksum rules.
778  * IB_T10DIF_CSUM: Corresponds to IP checksum rules.
779  */
780 enum ib_t10_dif_bg_type {
781         IB_T10DIF_CRC,
782         IB_T10DIF_CSUM
783 };
784
785 /**
786  * struct ib_t10_dif_domain - Parameters specific for T10-DIF
787  *     domain.
788  * @bg_type: T10-DIF block guard type (CRC|CSUM)
789  * @pi_interval: protection information interval.
790  * @bg: seed of guard computation.
791  * @app_tag: application tag of guard block
792  * @ref_tag: initial guard block reference tag.
793  * @ref_remap: Indicate wethear the reftag increments each block
794  * @app_escape: Indicate to skip block check if apptag=0xffff
795  * @ref_escape: Indicate to skip block check if reftag=0xffffffff
796  * @apptag_check_mask: check bitmask of application tag.
797  */
798 struct ib_t10_dif_domain {
799         enum ib_t10_dif_bg_type bg_type;
800         u16                     pi_interval;
801         u16                     bg;
802         u16                     app_tag;
803         u32                     ref_tag;
804         bool                    ref_remap;
805         bool                    app_escape;
806         bool                    ref_escape;
807         u16                     apptag_check_mask;
808 };
809
810 /**
811  * struct ib_sig_domain - Parameters for signature domain
812  * @sig_type: specific signauture type
813  * @sig: union of all signature domain attributes that may
814  *     be used to set domain layout.
815  */
816 struct ib_sig_domain {
817         enum ib_signature_type sig_type;
818         union {
819                 struct ib_t10_dif_domain dif;
820         } sig;
821 };
822
823 /**
824  * struct ib_sig_attrs - Parameters for signature handover operation
825  * @check_mask: bitmask for signature byte check (8 bytes)
826  * @mem: memory domain layout desciptor.
827  * @wire: wire domain layout desciptor.
828  */
829 struct ib_sig_attrs {
830         u8                      check_mask;
831         struct ib_sig_domain    mem;
832         struct ib_sig_domain    wire;
833 };
834
835 enum ib_sig_err_type {
836         IB_SIG_BAD_GUARD,
837         IB_SIG_BAD_REFTAG,
838         IB_SIG_BAD_APPTAG,
839 };
840
841 /**
842  * Signature check masks (8 bytes in total) according to the T10-PI standard:
843  *  -------- -------- ------------
844  * | GUARD  | APPTAG |   REFTAG   |
845  * |  2B    |  2B    |    4B      |
846  *  -------- -------- ------------
847  */
848 enum {
849         IB_SIG_CHECK_GUARD      = 0xc0,
850         IB_SIG_CHECK_APPTAG     = 0x30,
851         IB_SIG_CHECK_REFTAG     = 0x0f,
852 };
853
854 /**
855  * struct ib_sig_err - signature error descriptor
856  */
857 struct ib_sig_err {
858         enum ib_sig_err_type    err_type;
859         u32                     expected;
860         u32                     actual;
861         u64                     sig_err_offset;
862         u32                     key;
863 };
864
865 enum ib_mr_status_check {
866         IB_MR_CHECK_SIG_STATUS = 1,
867 };
868
869 /**
870  * struct ib_mr_status - Memory region status container
871  *
872  * @fail_status: Bitmask of MR checks status. For each
873  *     failed check a corresponding status bit is set.
874  * @sig_err: Additional info for IB_MR_CEHCK_SIG_STATUS
875  *     failure.
876  */
877 struct ib_mr_status {
878         u32                 fail_status;
879         struct ib_sig_err   sig_err;
880 };
881
882 /**
883  * mult_to_ib_rate - Convert a multiple of 2.5 Gbit/sec to an IB rate
884  * enum.
885  * @mult: multiple to convert.
886  */
887 __attribute_const__ enum ib_rate mult_to_ib_rate(int mult);
888
889 enum rdma_ah_attr_type {
890         RDMA_AH_ATTR_TYPE_UNDEFINED,
891         RDMA_AH_ATTR_TYPE_IB,
892         RDMA_AH_ATTR_TYPE_ROCE,
893         RDMA_AH_ATTR_TYPE_OPA,
894 };
895
896 struct ib_ah_attr {
897         u16                     dlid;
898         u8                      src_path_bits;
899 };
900
901 struct roce_ah_attr {
902         u8                      dmac[ETH_ALEN];
903 };
904
905 struct opa_ah_attr {
906         u32                     dlid;
907         u8                      src_path_bits;
908         bool                    make_grd;
909 };
910
911 struct rdma_ah_attr {
912         struct ib_global_route  grh;
913         u8                      sl;
914         u8                      static_rate;
915         u8                      port_num;
916         u8                      ah_flags;
917         enum rdma_ah_attr_type type;
918         union {
919                 struct ib_ah_attr ib;
920                 struct roce_ah_attr roce;
921                 struct opa_ah_attr opa;
922         };
923 };
924
925 enum ib_wc_status {
926         IB_WC_SUCCESS,
927         IB_WC_LOC_LEN_ERR,
928         IB_WC_LOC_QP_OP_ERR,
929         IB_WC_LOC_EEC_OP_ERR,
930         IB_WC_LOC_PROT_ERR,
931         IB_WC_WR_FLUSH_ERR,
932         IB_WC_MW_BIND_ERR,
933         IB_WC_BAD_RESP_ERR,
934         IB_WC_LOC_ACCESS_ERR,
935         IB_WC_REM_INV_REQ_ERR,
936         IB_WC_REM_ACCESS_ERR,
937         IB_WC_REM_OP_ERR,
938         IB_WC_RETRY_EXC_ERR,
939         IB_WC_RNR_RETRY_EXC_ERR,
940         IB_WC_LOC_RDD_VIOL_ERR,
941         IB_WC_REM_INV_RD_REQ_ERR,
942         IB_WC_REM_ABORT_ERR,
943         IB_WC_INV_EECN_ERR,
944         IB_WC_INV_EEC_STATE_ERR,
945         IB_WC_FATAL_ERR,
946         IB_WC_RESP_TIMEOUT_ERR,
947         IB_WC_GENERAL_ERR
948 };
949
950 const char *__attribute_const__ ib_wc_status_msg(enum ib_wc_status status);
951
952 enum ib_wc_opcode {
953         IB_WC_SEND,
954         IB_WC_RDMA_WRITE,
955         IB_WC_RDMA_READ,
956         IB_WC_COMP_SWAP,
957         IB_WC_FETCH_ADD,
958         IB_WC_LSO,
959         IB_WC_LOCAL_INV,
960         IB_WC_REG_MR,
961         IB_WC_MASKED_COMP_SWAP,
962         IB_WC_MASKED_FETCH_ADD,
963 /*
964  * Set value of IB_WC_RECV so consumers can test if a completion is a
965  * receive by testing (opcode & IB_WC_RECV).
966  */
967         IB_WC_RECV                      = 1 << 7,
968         IB_WC_RECV_RDMA_WITH_IMM
969 };
970
971 enum ib_wc_flags {
972         IB_WC_GRH               = 1,
973         IB_WC_WITH_IMM          = (1<<1),
974         IB_WC_WITH_INVALIDATE   = (1<<2),
975         IB_WC_IP_CSUM_OK        = (1<<3),
976         IB_WC_WITH_SMAC         = (1<<4),
977         IB_WC_WITH_VLAN         = (1<<5),
978         IB_WC_WITH_NETWORK_HDR_TYPE     = (1<<6),
979 };
980
981 struct ib_wc {
982         union {
983                 u64             wr_id;
984                 struct ib_cqe   *wr_cqe;
985         };
986         enum ib_wc_status       status;
987         enum ib_wc_opcode       opcode;
988         u32                     vendor_err;
989         u32                     byte_len;
990         struct ib_qp           *qp;
991         union {
992                 __be32          imm_data;
993                 u32             invalidate_rkey;
994         } ex;
995         u32                     src_qp;
996         u32                     slid;
997         int                     wc_flags;
998         u16                     pkey_index;
999         u8                      sl;
1000         u8                      dlid_path_bits;
1001         u8                      port_num;       /* valid only for DR SMPs on switches */
1002         u8                      smac[ETH_ALEN];
1003         u16                     vlan_id;
1004         u8                      network_hdr_type;
1005 };
1006
1007 enum ib_cq_notify_flags {
1008         IB_CQ_SOLICITED                 = 1 << 0,
1009         IB_CQ_NEXT_COMP                 = 1 << 1,
1010         IB_CQ_SOLICITED_MASK            = IB_CQ_SOLICITED | IB_CQ_NEXT_COMP,
1011         IB_CQ_REPORT_MISSED_EVENTS      = 1 << 2,
1012 };
1013
1014 enum ib_srq_type {
1015         IB_SRQT_BASIC,
1016         IB_SRQT_XRC,
1017         IB_SRQT_TM,
1018 };
1019
1020 static inline bool ib_srq_has_cq(enum ib_srq_type srq_type)
1021 {
1022         return srq_type == IB_SRQT_XRC ||
1023                srq_type == IB_SRQT_TM;
1024 }
1025
1026 enum ib_srq_attr_mask {
1027         IB_SRQ_MAX_WR   = 1 << 0,
1028         IB_SRQ_LIMIT    = 1 << 1,
1029 };
1030
1031 struct ib_srq_attr {
1032         u32     max_wr;
1033         u32     max_sge;
1034         u32     srq_limit;
1035 };
1036
1037 struct ib_srq_init_attr {
1038         void                  (*event_handler)(struct ib_event *, void *);
1039         void                   *srq_context;
1040         struct ib_srq_attr      attr;
1041         enum ib_srq_type        srq_type;
1042
1043         struct {
1044                 struct ib_cq   *cq;
1045                 union {
1046                         struct {
1047                                 struct ib_xrcd *xrcd;
1048                         } xrc;
1049
1050                         struct {
1051                                 u32             max_num_tags;
1052                         } tag_matching;
1053                 };
1054         } ext;
1055 };
1056
1057 struct ib_qp_cap {
1058         u32     max_send_wr;
1059         u32     max_recv_wr;
1060         u32     max_send_sge;
1061         u32     max_recv_sge;
1062         u32     max_inline_data;
1063
1064         /*
1065          * Maximum number of rdma_rw_ctx structures in flight at a time.
1066          * ib_create_qp() will calculate the right amount of neededed WRs
1067          * and MRs based on this.
1068          */
1069         u32     max_rdma_ctxs;
1070 };
1071
1072 enum ib_sig_type {
1073         IB_SIGNAL_ALL_WR,
1074         IB_SIGNAL_REQ_WR
1075 };
1076
1077 enum ib_qp_type {
1078         /*
1079          * IB_QPT_SMI and IB_QPT_GSI have to be the first two entries
1080          * here (and in that order) since the MAD layer uses them as
1081          * indices into a 2-entry table.
1082          */
1083         IB_QPT_SMI,
1084         IB_QPT_GSI,
1085
1086         IB_QPT_RC,
1087         IB_QPT_UC,
1088         IB_QPT_UD,
1089         IB_QPT_RAW_IPV6,
1090         IB_QPT_RAW_ETHERTYPE,
1091         IB_QPT_RAW_PACKET = 8,
1092         IB_QPT_XRC_INI = 9,
1093         IB_QPT_XRC_TGT,
1094         IB_QPT_MAX,
1095         IB_QPT_DRIVER = 0xFF,
1096         /* Reserve a range for qp types internal to the low level driver.
1097          * These qp types will not be visible at the IB core layer, so the
1098          * IB_QPT_MAX usages should not be affected in the core layer
1099          */
1100         IB_QPT_RESERVED1 = 0x1000,
1101         IB_QPT_RESERVED2,
1102         IB_QPT_RESERVED3,
1103         IB_QPT_RESERVED4,
1104         IB_QPT_RESERVED5,
1105         IB_QPT_RESERVED6,
1106         IB_QPT_RESERVED7,
1107         IB_QPT_RESERVED8,
1108         IB_QPT_RESERVED9,
1109         IB_QPT_RESERVED10,
1110 };
1111
1112 enum ib_qp_create_flags {
1113         IB_QP_CREATE_IPOIB_UD_LSO               = 1 << 0,
1114         IB_QP_CREATE_BLOCK_MULTICAST_LOOPBACK   = 1 << 1,
1115         IB_QP_CREATE_CROSS_CHANNEL              = 1 << 2,
1116         IB_QP_CREATE_MANAGED_SEND               = 1 << 3,
1117         IB_QP_CREATE_MANAGED_RECV               = 1 << 4,
1118         IB_QP_CREATE_NETIF_QP                   = 1 << 5,
1119         IB_QP_CREATE_SIGNATURE_EN               = 1 << 6,
1120         /* FREE                                 = 1 << 7, */
1121         IB_QP_CREATE_SCATTER_FCS                = 1 << 8,
1122         IB_QP_CREATE_CVLAN_STRIPPING            = 1 << 9,
1123         IB_QP_CREATE_SOURCE_QPN                 = 1 << 10,
1124         IB_QP_CREATE_PCI_WRITE_END_PADDING      = 1 << 11,
1125         /* reserve bits 26-31 for low level drivers' internal use */
1126         IB_QP_CREATE_RESERVED_START             = 1 << 26,
1127         IB_QP_CREATE_RESERVED_END               = 1 << 31,
1128 };
1129
1130 /*
1131  * Note: users may not call ib_close_qp or ib_destroy_qp from the event_handler
1132  * callback to destroy the passed in QP.
1133  */
1134
1135 struct ib_qp_init_attr {
1136         void                  (*event_handler)(struct ib_event *, void *);
1137         void                   *qp_context;
1138         struct ib_cq           *send_cq;
1139         struct ib_cq           *recv_cq;
1140         struct ib_srq          *srq;
1141         struct ib_xrcd         *xrcd;     /* XRC TGT QPs only */
1142         struct ib_qp_cap        cap;
1143         enum ib_sig_type        sq_sig_type;
1144         enum ib_qp_type         qp_type;
1145         enum ib_qp_create_flags create_flags;
1146
1147         /*
1148          * Only needed for special QP types, or when using the RW API.
1149          */
1150         u8                      port_num;
1151         struct ib_rwq_ind_table *rwq_ind_tbl;
1152         u32                     source_qpn;
1153 };
1154
1155 struct ib_qp_open_attr {
1156         void                  (*event_handler)(struct ib_event *, void *);
1157         void                   *qp_context;
1158         u32                     qp_num;
1159         enum ib_qp_type         qp_type;
1160 };
1161
1162 enum ib_rnr_timeout {
1163         IB_RNR_TIMER_655_36 =  0,
1164         IB_RNR_TIMER_000_01 =  1,
1165         IB_RNR_TIMER_000_02 =  2,
1166         IB_RNR_TIMER_000_03 =  3,
1167         IB_RNR_TIMER_000_04 =  4,
1168         IB_RNR_TIMER_000_06 =  5,
1169         IB_RNR_TIMER_000_08 =  6,
1170         IB_RNR_TIMER_000_12 =  7,
1171         IB_RNR_TIMER_000_16 =  8,
1172         IB_RNR_TIMER_000_24 =  9,
1173         IB_RNR_TIMER_000_32 = 10,
1174         IB_RNR_TIMER_000_48 = 11,
1175         IB_RNR_TIMER_000_64 = 12,
1176         IB_RNR_TIMER_000_96 = 13,
1177         IB_RNR_TIMER_001_28 = 14,
1178         IB_RNR_TIMER_001_92 = 15,
1179         IB_RNR_TIMER_002_56 = 16,
1180         IB_RNR_TIMER_003_84 = 17,
1181         IB_RNR_TIMER_005_12 = 18,
1182         IB_RNR_TIMER_007_68 = 19,
1183         IB_RNR_TIMER_010_24 = 20,
1184         IB_RNR_TIMER_015_36 = 21,
1185         IB_RNR_TIMER_020_48 = 22,
1186         IB_RNR_TIMER_030_72 = 23,
1187         IB_RNR_TIMER_040_96 = 24,
1188         IB_RNR_TIMER_061_44 = 25,
1189         IB_RNR_TIMER_081_92 = 26,
1190         IB_RNR_TIMER_122_88 = 27,
1191         IB_RNR_TIMER_163_84 = 28,
1192         IB_RNR_TIMER_245_76 = 29,
1193         IB_RNR_TIMER_327_68 = 30,
1194         IB_RNR_TIMER_491_52 = 31
1195 };
1196
1197 enum ib_qp_attr_mask {
1198         IB_QP_STATE                     = 1,
1199         IB_QP_CUR_STATE                 = (1<<1),
1200         IB_QP_EN_SQD_ASYNC_NOTIFY       = (1<<2),
1201         IB_QP_ACCESS_FLAGS              = (1<<3),
1202         IB_QP_PKEY_INDEX                = (1<<4),
1203         IB_QP_PORT                      = (1<<5),
1204         IB_QP_QKEY                      = (1<<6),
1205         IB_QP_AV                        = (1<<7),
1206         IB_QP_PATH_MTU                  = (1<<8),
1207         IB_QP_TIMEOUT                   = (1<<9),
1208         IB_QP_RETRY_CNT                 = (1<<10),
1209         IB_QP_RNR_RETRY                 = (1<<11),
1210         IB_QP_RQ_PSN                    = (1<<12),
1211         IB_QP_MAX_QP_RD_ATOMIC          = (1<<13),
1212         IB_QP_ALT_PATH                  = (1<<14),
1213         IB_QP_MIN_RNR_TIMER             = (1<<15),
1214         IB_QP_SQ_PSN                    = (1<<16),
1215         IB_QP_MAX_DEST_RD_ATOMIC        = (1<<17),
1216         IB_QP_PATH_MIG_STATE            = (1<<18),
1217         IB_QP_CAP                       = (1<<19),
1218         IB_QP_DEST_QPN                  = (1<<20),
1219         IB_QP_RESERVED1                 = (1<<21),
1220         IB_QP_RESERVED2                 = (1<<22),
1221         IB_QP_RESERVED3                 = (1<<23),
1222         IB_QP_RESERVED4                 = (1<<24),
1223         IB_QP_RATE_LIMIT                = (1<<25),
1224 };
1225
1226 enum ib_qp_state {
1227         IB_QPS_RESET,
1228         IB_QPS_INIT,
1229         IB_QPS_RTR,
1230         IB_QPS_RTS,
1231         IB_QPS_SQD,
1232         IB_QPS_SQE,
1233         IB_QPS_ERR
1234 };
1235
1236 enum ib_mig_state {
1237         IB_MIG_MIGRATED,
1238         IB_MIG_REARM,
1239         IB_MIG_ARMED
1240 };
1241
1242 enum ib_mw_type {
1243         IB_MW_TYPE_1 = 1,
1244         IB_MW_TYPE_2 = 2
1245 };
1246
1247 struct ib_qp_attr {
1248         enum ib_qp_state        qp_state;
1249         enum ib_qp_state        cur_qp_state;
1250         enum ib_mtu             path_mtu;
1251         enum ib_mig_state       path_mig_state;
1252         u32                     qkey;
1253         u32                     rq_psn;
1254         u32                     sq_psn;
1255         u32                     dest_qp_num;
1256         int                     qp_access_flags;
1257         struct ib_qp_cap        cap;
1258         struct rdma_ah_attr     ah_attr;
1259         struct rdma_ah_attr     alt_ah_attr;
1260         u16                     pkey_index;
1261         u16                     alt_pkey_index;
1262         u8                      en_sqd_async_notify;
1263         u8                      sq_draining;
1264         u8                      max_rd_atomic;
1265         u8                      max_dest_rd_atomic;
1266         u8                      min_rnr_timer;
1267         u8                      port_num;
1268         u8                      timeout;
1269         u8                      retry_cnt;
1270         u8                      rnr_retry;
1271         u8                      alt_port_num;
1272         u8                      alt_timeout;
1273         u32                     rate_limit;
1274 };
1275
1276 enum ib_wr_opcode {
1277         IB_WR_RDMA_WRITE,
1278         IB_WR_RDMA_WRITE_WITH_IMM,
1279         IB_WR_SEND,
1280         IB_WR_SEND_WITH_IMM,
1281         IB_WR_RDMA_READ,
1282         IB_WR_ATOMIC_CMP_AND_SWP,
1283         IB_WR_ATOMIC_FETCH_AND_ADD,
1284         IB_WR_LSO,
1285         IB_WR_SEND_WITH_INV,
1286         IB_WR_RDMA_READ_WITH_INV,
1287         IB_WR_LOCAL_INV,
1288         IB_WR_REG_MR,
1289         IB_WR_MASKED_ATOMIC_CMP_AND_SWP,
1290         IB_WR_MASKED_ATOMIC_FETCH_AND_ADD,
1291         IB_WR_REG_SIG_MR,
1292         /* reserve values for low level drivers' internal use.
1293          * These values will not be used at all in the ib core layer.
1294          */
1295         IB_WR_RESERVED1 = 0xf0,
1296         IB_WR_RESERVED2,
1297         IB_WR_RESERVED3,
1298         IB_WR_RESERVED4,
1299         IB_WR_RESERVED5,
1300         IB_WR_RESERVED6,
1301         IB_WR_RESERVED7,
1302         IB_WR_RESERVED8,
1303         IB_WR_RESERVED9,
1304         IB_WR_RESERVED10,
1305 };
1306
1307 enum ib_send_flags {
1308         IB_SEND_FENCE           = 1,
1309         IB_SEND_SIGNALED        = (1<<1),
1310         IB_SEND_SOLICITED       = (1<<2),
1311         IB_SEND_INLINE          = (1<<3),
1312         IB_SEND_IP_CSUM         = (1<<4),
1313
1314         /* reserve bits 26-31 for low level drivers' internal use */
1315         IB_SEND_RESERVED_START  = (1 << 26),
1316         IB_SEND_RESERVED_END    = (1 << 31),
1317 };
1318
1319 struct ib_sge {
1320         u64     addr;
1321         u32     length;
1322         u32     lkey;
1323 };
1324
1325 struct ib_cqe {
1326         void (*done)(struct ib_cq *cq, struct ib_wc *wc);
1327 };
1328
1329 struct ib_send_wr {
1330         struct ib_send_wr      *next;
1331         union {
1332                 u64             wr_id;
1333                 struct ib_cqe   *wr_cqe;
1334         };
1335         struct ib_sge          *sg_list;
1336         int                     num_sge;
1337         enum ib_wr_opcode       opcode;
1338         int                     send_flags;
1339         union {
1340                 __be32          imm_data;
1341                 u32             invalidate_rkey;
1342         } ex;
1343 };
1344
1345 struct ib_rdma_wr {
1346         struct ib_send_wr       wr;
1347         u64                     remote_addr;
1348         u32                     rkey;
1349 };
1350
1351 static inline struct ib_rdma_wr *rdma_wr(struct ib_send_wr *wr)
1352 {
1353         return container_of(wr, struct ib_rdma_wr, wr);
1354 }
1355
1356 struct ib_atomic_wr {
1357         struct ib_send_wr       wr;
1358         u64                     remote_addr;
1359         u64                     compare_add;
1360         u64                     swap;
1361         u64                     compare_add_mask;
1362         u64                     swap_mask;
1363         u32                     rkey;
1364 };
1365
1366 static inline struct ib_atomic_wr *atomic_wr(struct ib_send_wr *wr)
1367 {
1368         return container_of(wr, struct ib_atomic_wr, wr);
1369 }
1370
1371 struct ib_ud_wr {
1372         struct ib_send_wr       wr;
1373         struct ib_ah            *ah;
1374         void                    *header;
1375         int                     hlen;
1376         int                     mss;
1377         u32                     remote_qpn;
1378         u32                     remote_qkey;
1379         u16                     pkey_index; /* valid for GSI only */
1380         u8                      port_num;   /* valid for DR SMPs on switch only */
1381 };
1382
1383 static inline struct ib_ud_wr *ud_wr(struct ib_send_wr *wr)
1384 {
1385         return container_of(wr, struct ib_ud_wr, wr);
1386 }
1387
1388 struct ib_reg_wr {
1389         struct ib_send_wr       wr;
1390         struct ib_mr            *mr;
1391         u32                     key;
1392         int                     access;
1393 };
1394
1395 static inline struct ib_reg_wr *reg_wr(struct ib_send_wr *wr)
1396 {
1397         return container_of(wr, struct ib_reg_wr, wr);
1398 }
1399
1400 struct ib_sig_handover_wr {
1401         struct ib_send_wr       wr;
1402         struct ib_sig_attrs    *sig_attrs;
1403         struct ib_mr           *sig_mr;
1404         int                     access_flags;
1405         struct ib_sge          *prot;
1406 };
1407
1408 static inline struct ib_sig_handover_wr *sig_handover_wr(struct ib_send_wr *wr)
1409 {
1410         return container_of(wr, struct ib_sig_handover_wr, wr);
1411 }
1412
1413 struct ib_recv_wr {
1414         struct ib_recv_wr      *next;
1415         union {
1416                 u64             wr_id;
1417                 struct ib_cqe   *wr_cqe;
1418         };
1419         struct ib_sge          *sg_list;
1420         int                     num_sge;
1421 };
1422
1423 enum ib_access_flags {
1424         IB_ACCESS_LOCAL_WRITE   = 1,
1425         IB_ACCESS_REMOTE_WRITE  = (1<<1),
1426         IB_ACCESS_REMOTE_READ   = (1<<2),
1427         IB_ACCESS_REMOTE_ATOMIC = (1<<3),
1428         IB_ACCESS_MW_BIND       = (1<<4),
1429         IB_ZERO_BASED           = (1<<5),
1430         IB_ACCESS_ON_DEMAND     = (1<<6),
1431         IB_ACCESS_HUGETLB       = (1<<7),
1432 };
1433
1434 /*
1435  * XXX: these are apparently used for ->rereg_user_mr, no idea why they
1436  * are hidden here instead of a uapi header!
1437  */
1438 enum ib_mr_rereg_flags {
1439         IB_MR_REREG_TRANS       = 1,
1440         IB_MR_REREG_PD          = (1<<1),
1441         IB_MR_REREG_ACCESS      = (1<<2),
1442         IB_MR_REREG_SUPPORTED   = ((IB_MR_REREG_ACCESS << 1) - 1)
1443 };
1444
1445 struct ib_fmr_attr {
1446         int     max_pages;
1447         int     max_maps;
1448         u8      page_shift;
1449 };
1450
1451 struct ib_umem;
1452
1453 enum rdma_remove_reason {
1454         /*
1455          * Userspace requested uobject deletion or initial try
1456          * to remove uobject via cleanup. Call could fail
1457          */
1458         RDMA_REMOVE_DESTROY,
1459         /* Context deletion. This call should delete the actual object itself */
1460         RDMA_REMOVE_CLOSE,
1461         /* Driver is being hot-unplugged. This call should delete the actual object itself */
1462         RDMA_REMOVE_DRIVER_REMOVE,
1463         /* Context is being cleaned-up, but commit was just completed */
1464         RDMA_REMOVE_DURING_CLEANUP,
1465 };
1466
1467 struct ib_rdmacg_object {
1468 #ifdef CONFIG_CGROUP_RDMA
1469         struct rdma_cgroup      *cg;            /* owner rdma cgroup */
1470 #endif
1471 };
1472
1473 struct ib_ucontext {
1474         struct ib_device       *device;
1475         struct ib_uverbs_file  *ufile;
1476         int                     closing;
1477
1478         bool cleanup_retryable;
1479
1480         struct pid             *tgid;
1481 #ifdef CONFIG_INFINIBAND_ON_DEMAND_PAGING
1482         struct rb_root_cached   umem_tree;
1483         /*
1484          * Protects .umem_rbroot and tree, as well as odp_mrs_count and
1485          * mmu notifiers registration.
1486          */
1487         struct rw_semaphore     umem_rwsem;
1488         void (*invalidate_range)(struct ib_umem *umem,
1489                                  unsigned long start, unsigned long end);
1490
1491         struct mmu_notifier     mn;
1492         atomic_t                notifier_count;
1493         /* A list of umems that don't have private mmu notifier counters yet. */
1494         struct list_head        no_private_counters;
1495         int                     odp_mrs_count;
1496 #endif
1497
1498         struct ib_rdmacg_object cg_obj;
1499 };
1500
1501 struct ib_uobject {
1502         u64                     user_handle;    /* handle given to us by userspace */
1503         /* ufile & ucontext owning this object */
1504         struct ib_uverbs_file  *ufile;
1505         /* FIXME, save memory: ufile->context == context */
1506         struct ib_ucontext     *context;        /* associated user context */
1507         void                   *object;         /* containing object */
1508         struct list_head        list;           /* link to context's list */
1509         struct ib_rdmacg_object cg_obj;         /* rdmacg object */
1510         int                     id;             /* index into kernel idr */
1511         struct kref             ref;
1512         atomic_t                usecnt;         /* protects exclusive access */
1513         struct rcu_head         rcu;            /* kfree_rcu() overhead */
1514
1515         const struct uverbs_obj_type *type;
1516 };
1517
1518 struct ib_udata {
1519         const void __user *inbuf;
1520         void __user *outbuf;
1521         size_t       inlen;
1522         size_t       outlen;
1523 };
1524
1525 struct ib_pd {
1526         u32                     local_dma_lkey;
1527         u32                     flags;
1528         struct ib_device       *device;
1529         struct ib_uobject      *uobject;
1530         atomic_t                usecnt; /* count all resources */
1531
1532         u32                     unsafe_global_rkey;
1533
1534         /*
1535          * Implementation details of the RDMA core, don't use in drivers:
1536          */
1537         struct ib_mr           *__internal_mr;
1538         struct rdma_restrack_entry res;
1539 };
1540
1541 struct ib_xrcd {
1542         struct ib_device       *device;
1543         atomic_t                usecnt; /* count all exposed resources */
1544         struct inode           *inode;
1545
1546         struct mutex            tgt_qp_mutex;
1547         struct list_head        tgt_qp_list;
1548 };
1549
1550 struct ib_ah {
1551         struct ib_device        *device;
1552         struct ib_pd            *pd;
1553         struct ib_uobject       *uobject;
1554         const struct ib_gid_attr *sgid_attr;
1555         enum rdma_ah_attr_type  type;
1556 };
1557
1558 typedef void (*ib_comp_handler)(struct ib_cq *cq, void *cq_context);
1559
1560 enum ib_poll_context {
1561         IB_POLL_DIRECT,         /* caller context, no hw completions */
1562         IB_POLL_SOFTIRQ,        /* poll from softirq context */
1563         IB_POLL_WORKQUEUE,      /* poll from workqueue */
1564 };
1565
1566 struct ib_cq {
1567         struct ib_device       *device;
1568         struct ib_uobject      *uobject;
1569         ib_comp_handler         comp_handler;
1570         void                  (*event_handler)(struct ib_event *, void *);
1571         void                   *cq_context;
1572         int                     cqe;
1573         atomic_t                usecnt; /* count number of work queues */
1574         enum ib_poll_context    poll_ctx;
1575         struct ib_wc            *wc;
1576         union {
1577                 struct irq_poll         iop;
1578                 struct work_struct      work;
1579         };
1580         /*
1581          * Implementation details of the RDMA core, don't use in drivers:
1582          */
1583         struct rdma_restrack_entry res;
1584 };
1585
1586 struct ib_srq {
1587         struct ib_device       *device;
1588         struct ib_pd           *pd;
1589         struct ib_uobject      *uobject;
1590         void                  (*event_handler)(struct ib_event *, void *);
1591         void                   *srq_context;
1592         enum ib_srq_type        srq_type;
1593         atomic_t                usecnt;
1594
1595         struct {
1596                 struct ib_cq   *cq;
1597                 union {
1598                         struct {
1599                                 struct ib_xrcd *xrcd;
1600                                 u32             srq_num;
1601                         } xrc;
1602                 };
1603         } ext;
1604 };
1605
1606 enum ib_raw_packet_caps {
1607         /* Strip cvlan from incoming packet and report it in the matching work
1608          * completion is supported.
1609          */
1610         IB_RAW_PACKET_CAP_CVLAN_STRIPPING       = (1 << 0),
1611         /* Scatter FCS field of an incoming packet to host memory is supported.
1612          */
1613         IB_RAW_PACKET_CAP_SCATTER_FCS           = (1 << 1),
1614         /* Checksum offloads are supported (for both send and receive). */
1615         IB_RAW_PACKET_CAP_IP_CSUM               = (1 << 2),
1616         /* When a packet is received for an RQ with no receive WQEs, the
1617          * packet processing is delayed.
1618          */
1619         IB_RAW_PACKET_CAP_DELAY_DROP            = (1 << 3),
1620 };
1621
1622 enum ib_wq_type {
1623         IB_WQT_RQ
1624 };
1625
1626 enum ib_wq_state {
1627         IB_WQS_RESET,
1628         IB_WQS_RDY,
1629         IB_WQS_ERR
1630 };
1631
1632 struct ib_wq {
1633         struct ib_device       *device;
1634         struct ib_uobject      *uobject;
1635         void                *wq_context;
1636         void                (*event_handler)(struct ib_event *, void *);
1637         struct ib_pd           *pd;
1638         struct ib_cq           *cq;
1639         u32             wq_num;
1640         enum ib_wq_state       state;
1641         enum ib_wq_type wq_type;
1642         atomic_t                usecnt;
1643 };
1644
1645 enum ib_wq_flags {
1646         IB_WQ_FLAGS_CVLAN_STRIPPING     = 1 << 0,
1647         IB_WQ_FLAGS_SCATTER_FCS         = 1 << 1,
1648         IB_WQ_FLAGS_DELAY_DROP          = 1 << 2,
1649         IB_WQ_FLAGS_PCI_WRITE_END_PADDING = 1 << 3,
1650 };
1651
1652 struct ib_wq_init_attr {
1653         void                   *wq_context;
1654         enum ib_wq_type wq_type;
1655         u32             max_wr;
1656         u32             max_sge;
1657         struct  ib_cq          *cq;
1658         void                (*event_handler)(struct ib_event *, void *);
1659         u32             create_flags; /* Use enum ib_wq_flags */
1660 };
1661
1662 enum ib_wq_attr_mask {
1663         IB_WQ_STATE             = 1 << 0,
1664         IB_WQ_CUR_STATE         = 1 << 1,
1665         IB_WQ_FLAGS             = 1 << 2,
1666 };
1667
1668 struct ib_wq_attr {
1669         enum    ib_wq_state     wq_state;
1670         enum    ib_wq_state     curr_wq_state;
1671         u32                     flags; /* Use enum ib_wq_flags */
1672         u32                     flags_mask; /* Use enum ib_wq_flags */
1673 };
1674
1675 struct ib_rwq_ind_table {
1676         struct ib_device        *device;
1677         struct ib_uobject      *uobject;
1678         atomic_t                usecnt;
1679         u32             ind_tbl_num;
1680         u32             log_ind_tbl_size;
1681         struct ib_wq    **ind_tbl;
1682 };
1683
1684 struct ib_rwq_ind_table_init_attr {
1685         u32             log_ind_tbl_size;
1686         /* Each entry is a pointer to Receive Work Queue */
1687         struct ib_wq    **ind_tbl;
1688 };
1689
1690 enum port_pkey_state {
1691         IB_PORT_PKEY_NOT_VALID = 0,
1692         IB_PORT_PKEY_VALID = 1,
1693         IB_PORT_PKEY_LISTED = 2,
1694 };
1695
1696 struct ib_qp_security;
1697
1698 struct ib_port_pkey {
1699         enum port_pkey_state    state;
1700         u16                     pkey_index;
1701         u8                      port_num;
1702         struct list_head        qp_list;
1703         struct list_head        to_error_list;
1704         struct ib_qp_security  *sec;
1705 };
1706
1707 struct ib_ports_pkeys {
1708         struct ib_port_pkey     main;
1709         struct ib_port_pkey     alt;
1710 };
1711
1712 struct ib_qp_security {
1713         struct ib_qp           *qp;
1714         struct ib_device       *dev;
1715         /* Hold this mutex when changing port and pkey settings. */
1716         struct mutex            mutex;
1717         struct ib_ports_pkeys  *ports_pkeys;
1718         /* A list of all open shared QP handles.  Required to enforce security
1719          * properly for all users of a shared QP.
1720          */
1721         struct list_head        shared_qp_list;
1722         void                   *security;
1723         bool                    destroying;
1724         atomic_t                error_list_count;
1725         struct completion       error_complete;
1726         int                     error_comps_pending;
1727 };
1728
1729 /*
1730  * @max_write_sge: Maximum SGE elements per RDMA WRITE request.
1731  * @max_read_sge:  Maximum SGE elements per RDMA READ request.
1732  */
1733 struct ib_qp {
1734         struct ib_device       *device;
1735         struct ib_pd           *pd;
1736         struct ib_cq           *send_cq;
1737         struct ib_cq           *recv_cq;
1738         spinlock_t              mr_lock;
1739         int                     mrs_used;
1740         struct list_head        rdma_mrs;
1741         struct list_head        sig_mrs;
1742         struct ib_srq          *srq;
1743         struct ib_xrcd         *xrcd; /* XRC TGT QPs only */
1744         struct list_head        xrcd_list;
1745
1746         /* count times opened, mcast attaches, flow attaches */
1747         atomic_t                usecnt;
1748         struct list_head        open_list;
1749         struct ib_qp           *real_qp;
1750         struct ib_uobject      *uobject;
1751         void                  (*event_handler)(struct ib_event *, void *);
1752         void                   *qp_context;
1753         /* sgid_attrs associated with the AV's */
1754         const struct ib_gid_attr *av_sgid_attr;
1755         const struct ib_gid_attr *alt_path_sgid_attr;
1756         u32                     qp_num;
1757         u32                     max_write_sge;
1758         u32                     max_read_sge;
1759         enum ib_qp_type         qp_type;
1760         struct ib_rwq_ind_table *rwq_ind_tbl;
1761         struct ib_qp_security  *qp_sec;
1762         u8                      port;
1763
1764         /*
1765          * Implementation details of the RDMA core, don't use in drivers:
1766          */
1767         struct rdma_restrack_entry     res;
1768 };
1769
1770 struct ib_dm {
1771         struct ib_device  *device;
1772         u32                length;
1773         u32                flags;
1774         struct ib_uobject *uobject;
1775         atomic_t           usecnt;
1776 };
1777
1778 struct ib_mr {
1779         struct ib_device  *device;
1780         struct ib_pd      *pd;
1781         u32                lkey;
1782         u32                rkey;
1783         u64                iova;
1784         u64                length;
1785         unsigned int       page_size;
1786         bool               need_inval;
1787         union {
1788                 struct ib_uobject       *uobject;       /* user */
1789                 struct list_head        qp_entry;       /* FR */
1790         };
1791
1792         struct ib_dm      *dm;
1793
1794         /*
1795          * Implementation details of the RDMA core, don't use in drivers:
1796          */
1797         struct rdma_restrack_entry res;
1798 };
1799
1800 struct ib_mw {
1801         struct ib_device        *device;
1802         struct ib_pd            *pd;
1803         struct ib_uobject       *uobject;
1804         u32                     rkey;
1805         enum ib_mw_type         type;
1806 };
1807
1808 struct ib_fmr {
1809         struct ib_device        *device;
1810         struct ib_pd            *pd;
1811         struct list_head        list;
1812         u32                     lkey;
1813         u32                     rkey;
1814 };
1815
1816 /* Supported steering options */
1817 enum ib_flow_attr_type {
1818         /* steering according to rule specifications */
1819         IB_FLOW_ATTR_NORMAL             = 0x0,
1820         /* default unicast and multicast rule -
1821          * receive all Eth traffic which isn't steered to any QP
1822          */
1823         IB_FLOW_ATTR_ALL_DEFAULT        = 0x1,
1824         /* default multicast rule -
1825          * receive all Eth multicast traffic which isn't steered to any QP
1826          */
1827         IB_FLOW_ATTR_MC_DEFAULT         = 0x2,
1828         /* sniffer rule - receive all port traffic */
1829         IB_FLOW_ATTR_SNIFFER            = 0x3
1830 };
1831
1832 /* Supported steering header types */
1833 enum ib_flow_spec_type {
1834         /* L2 headers*/
1835         IB_FLOW_SPEC_ETH                = 0x20,
1836         IB_FLOW_SPEC_IB                 = 0x22,
1837         /* L3 header*/
1838         IB_FLOW_SPEC_IPV4               = 0x30,
1839         IB_FLOW_SPEC_IPV6               = 0x31,
1840         IB_FLOW_SPEC_ESP                = 0x34,
1841         /* L4 headers*/
1842         IB_FLOW_SPEC_TCP                = 0x40,
1843         IB_FLOW_SPEC_UDP                = 0x41,
1844         IB_FLOW_SPEC_VXLAN_TUNNEL       = 0x50,
1845         IB_FLOW_SPEC_GRE                = 0x51,
1846         IB_FLOW_SPEC_MPLS               = 0x60,
1847         IB_FLOW_SPEC_INNER              = 0x100,
1848         /* Actions */
1849         IB_FLOW_SPEC_ACTION_TAG         = 0x1000,
1850         IB_FLOW_SPEC_ACTION_DROP        = 0x1001,
1851         IB_FLOW_SPEC_ACTION_HANDLE      = 0x1002,
1852         IB_FLOW_SPEC_ACTION_COUNT       = 0x1003,
1853 };
1854 #define IB_FLOW_SPEC_LAYER_MASK 0xF0
1855 #define IB_FLOW_SPEC_SUPPORT_LAYERS 10
1856
1857 /* Flow steering rule priority is set according to it's domain.
1858  * Lower domain value means higher priority.
1859  */
1860 enum ib_flow_domain {
1861         IB_FLOW_DOMAIN_USER,
1862         IB_FLOW_DOMAIN_ETHTOOL,
1863         IB_FLOW_DOMAIN_RFS,
1864         IB_FLOW_DOMAIN_NIC,
1865         IB_FLOW_DOMAIN_NUM /* Must be last */
1866 };
1867
1868 enum ib_flow_flags {
1869         IB_FLOW_ATTR_FLAGS_DONT_TRAP = 1UL << 1, /* Continue match, no steal */
1870         IB_FLOW_ATTR_FLAGS_EGRESS = 1UL << 2, /* Egress flow */
1871         IB_FLOW_ATTR_FLAGS_RESERVED  = 1UL << 3  /* Must be last */
1872 };
1873
1874 struct ib_flow_eth_filter {
1875         u8      dst_mac[6];
1876         u8      src_mac[6];
1877         __be16  ether_type;
1878         __be16  vlan_tag;
1879         /* Must be last */
1880         u8      real_sz[0];
1881 };
1882
1883 struct ib_flow_spec_eth {
1884         u32                       type;
1885         u16                       size;
1886         struct ib_flow_eth_filter val;
1887         struct ib_flow_eth_filter mask;
1888 };
1889
1890 struct ib_flow_ib_filter {
1891         __be16 dlid;
1892         __u8   sl;
1893         /* Must be last */
1894         u8      real_sz[0];
1895 };
1896
1897 struct ib_flow_spec_ib {
1898         u32                      type;
1899         u16                      size;
1900         struct ib_flow_ib_filter val;
1901         struct ib_flow_ib_filter mask;
1902 };
1903
1904 /* IPv4 header flags */
1905 enum ib_ipv4_flags {
1906         IB_IPV4_DONT_FRAG = 0x2, /* Don't enable packet fragmentation */
1907         IB_IPV4_MORE_FRAG = 0X4  /* For All fragmented packets except the
1908                                     last have this flag set */
1909 };
1910
1911 struct ib_flow_ipv4_filter {
1912         __be32  src_ip;
1913         __be32  dst_ip;
1914         u8      proto;
1915         u8      tos;
1916         u8      ttl;
1917         u8      flags;
1918         /* Must be last */
1919         u8      real_sz[0];
1920 };
1921
1922 struct ib_flow_spec_ipv4 {
1923         u32                        type;
1924         u16                        size;
1925         struct ib_flow_ipv4_filter val;
1926         struct ib_flow_ipv4_filter mask;
1927 };
1928
1929 struct ib_flow_ipv6_filter {
1930         u8      src_ip[16];
1931         u8      dst_ip[16];
1932         __be32  flow_label;
1933         u8      next_hdr;
1934         u8      traffic_class;
1935         u8      hop_limit;
1936         /* Must be last */
1937         u8      real_sz[0];
1938 };
1939
1940 struct ib_flow_spec_ipv6 {
1941         u32                        type;
1942         u16                        size;
1943         struct ib_flow_ipv6_filter val;
1944         struct ib_flow_ipv6_filter mask;
1945 };
1946
1947 struct ib_flow_tcp_udp_filter {
1948         __be16  dst_port;
1949         __be16  src_port;
1950         /* Must be last */
1951         u8      real_sz[0];
1952 };
1953
1954 struct ib_flow_spec_tcp_udp {
1955         u32                           type;
1956         u16                           size;
1957         struct ib_flow_tcp_udp_filter val;
1958         struct ib_flow_tcp_udp_filter mask;
1959 };
1960
1961 struct ib_flow_tunnel_filter {
1962         __be32  tunnel_id;
1963         u8      real_sz[0];
1964 };
1965
1966 /* ib_flow_spec_tunnel describes the Vxlan tunnel
1967  * the tunnel_id from val has the vni value
1968  */
1969 struct ib_flow_spec_tunnel {
1970         u32                           type;
1971         u16                           size;
1972         struct ib_flow_tunnel_filter  val;
1973         struct ib_flow_tunnel_filter  mask;
1974 };
1975
1976 struct ib_flow_esp_filter {
1977         __be32  spi;
1978         __be32  seq;
1979         /* Must be last */
1980         u8      real_sz[0];
1981 };
1982
1983 struct ib_flow_spec_esp {
1984         u32                           type;
1985         u16                           size;
1986         struct ib_flow_esp_filter     val;
1987         struct ib_flow_esp_filter     mask;
1988 };
1989
1990 struct ib_flow_gre_filter {
1991         __be16 c_ks_res0_ver;
1992         __be16 protocol;
1993         __be32 key;
1994         /* Must be last */
1995         u8      real_sz[0];
1996 };
1997
1998 struct ib_flow_spec_gre {
1999         u32                           type;
2000         u16                           size;
2001         struct ib_flow_gre_filter     val;
2002         struct ib_flow_gre_filter     mask;
2003 };
2004
2005 struct ib_flow_mpls_filter {
2006         __be32 tag;
2007         /* Must be last */
2008         u8      real_sz[0];
2009 };
2010
2011 struct ib_flow_spec_mpls {
2012         u32                           type;
2013         u16                           size;
2014         struct ib_flow_mpls_filter     val;
2015         struct ib_flow_mpls_filter     mask;
2016 };
2017
2018 struct ib_flow_spec_action_tag {
2019         enum ib_flow_spec_type        type;
2020         u16                           size;
2021         u32                           tag_id;
2022 };
2023
2024 struct ib_flow_spec_action_drop {
2025         enum ib_flow_spec_type        type;
2026         u16                           size;
2027 };
2028
2029 struct ib_flow_spec_action_handle {
2030         enum ib_flow_spec_type        type;
2031         u16                           size;
2032         struct ib_flow_action        *act;
2033 };
2034
2035 enum ib_counters_description {
2036         IB_COUNTER_PACKETS,
2037         IB_COUNTER_BYTES,
2038 };
2039
2040 struct ib_flow_spec_action_count {
2041         enum ib_flow_spec_type type;
2042         u16 size;
2043         struct ib_counters *counters;
2044 };
2045
2046 union ib_flow_spec {
2047         struct {
2048                 u32                     type;
2049                 u16                     size;
2050         };
2051         struct ib_flow_spec_eth         eth;
2052         struct ib_flow_spec_ib          ib;
2053         struct ib_flow_spec_ipv4        ipv4;
2054         struct ib_flow_spec_tcp_udp     tcp_udp;
2055         struct ib_flow_spec_ipv6        ipv6;
2056         struct ib_flow_spec_tunnel      tunnel;
2057         struct ib_flow_spec_esp         esp;
2058         struct ib_flow_spec_gre         gre;
2059         struct ib_flow_spec_mpls        mpls;
2060         struct ib_flow_spec_action_tag  flow_tag;
2061         struct ib_flow_spec_action_drop drop;
2062         struct ib_flow_spec_action_handle action;
2063         struct ib_flow_spec_action_count flow_count;
2064 };
2065
2066 struct ib_flow_attr {
2067         enum ib_flow_attr_type type;
2068         u16          size;
2069         u16          priority;
2070         u32          flags;
2071         u8           num_of_specs;
2072         u8           port;
2073         union ib_flow_spec flows[];
2074 };
2075
2076 struct ib_flow {
2077         struct ib_qp            *qp;
2078         struct ib_uobject       *uobject;
2079 };
2080
2081 enum ib_flow_action_type {
2082         IB_FLOW_ACTION_UNSPECIFIED,
2083         IB_FLOW_ACTION_ESP = 1,
2084 };
2085
2086 struct ib_flow_action_attrs_esp_keymats {
2087         enum ib_uverbs_flow_action_esp_keymat                   protocol;
2088         union {
2089                 struct ib_uverbs_flow_action_esp_keymat_aes_gcm aes_gcm;
2090         } keymat;
2091 };
2092
2093 struct ib_flow_action_attrs_esp_replays {
2094         enum ib_uverbs_flow_action_esp_replay                   protocol;
2095         union {
2096                 struct ib_uverbs_flow_action_esp_replay_bmp     bmp;
2097         } replay;
2098 };
2099
2100 enum ib_flow_action_attrs_esp_flags {
2101         /* All user-space flags at the top: Use enum ib_uverbs_flow_action_esp_flags
2102          * This is done in order to share the same flags between user-space and
2103          * kernel and spare an unnecessary translation.
2104          */
2105
2106         /* Kernel flags */
2107         IB_FLOW_ACTION_ESP_FLAGS_ESN_TRIGGERED  = 1ULL << 32,
2108         IB_FLOW_ACTION_ESP_FLAGS_MOD_ESP_ATTRS  = 1ULL << 33,
2109 };
2110
2111 struct ib_flow_spec_list {
2112         struct ib_flow_spec_list        *next;
2113         union ib_flow_spec              spec;
2114 };
2115
2116 struct ib_flow_action_attrs_esp {
2117         struct ib_flow_action_attrs_esp_keymats         *keymat;
2118         struct ib_flow_action_attrs_esp_replays         *replay;
2119         struct ib_flow_spec_list                        *encap;
2120         /* Used only if IB_FLOW_ACTION_ESP_FLAGS_ESN_TRIGGERED is enabled.
2121          * Value of 0 is a valid value.
2122          */
2123         u32                                             esn;
2124         u32                                             spi;
2125         u32                                             seq;
2126         u32                                             tfc_pad;
2127         /* Use enum ib_flow_action_attrs_esp_flags */
2128         u64                                             flags;
2129         u64                                             hard_limit_pkts;
2130 };
2131
2132 struct ib_flow_action {
2133         struct ib_device                *device;
2134         struct ib_uobject               *uobject;
2135         enum ib_flow_action_type        type;
2136         atomic_t                        usecnt;
2137 };
2138
2139 struct ib_mad_hdr;
2140 struct ib_grh;
2141
2142 enum ib_process_mad_flags {
2143         IB_MAD_IGNORE_MKEY      = 1,
2144         IB_MAD_IGNORE_BKEY      = 2,
2145         IB_MAD_IGNORE_ALL       = IB_MAD_IGNORE_MKEY | IB_MAD_IGNORE_BKEY
2146 };
2147
2148 enum ib_mad_result {
2149         IB_MAD_RESULT_FAILURE  = 0,      /* (!SUCCESS is the important flag) */
2150         IB_MAD_RESULT_SUCCESS  = 1 << 0, /* MAD was successfully processed   */
2151         IB_MAD_RESULT_REPLY    = 1 << 1, /* Reply packet needs to be sent    */
2152         IB_MAD_RESULT_CONSUMED = 1 << 2  /* Packet consumed: stop processing */
2153 };
2154
2155 struct ib_port_cache {
2156         u64                   subnet_prefix;
2157         struct ib_pkey_cache  *pkey;
2158         struct ib_gid_table   *gid;
2159         u8                     lmc;
2160         enum ib_port_state     port_state;
2161 };
2162
2163 struct ib_cache {
2164         rwlock_t                lock;
2165         struct ib_event_handler event_handler;
2166         struct ib_port_cache   *ports;
2167 };
2168
2169 struct iw_cm_verbs;
2170
2171 struct ib_port_immutable {
2172         int                           pkey_tbl_len;
2173         int                           gid_tbl_len;
2174         u32                           core_cap_flags;
2175         u32                           max_mad_size;
2176 };
2177
2178 /* rdma netdev type - specifies protocol type */
2179 enum rdma_netdev_t {
2180         RDMA_NETDEV_OPA_VNIC,
2181         RDMA_NETDEV_IPOIB,
2182 };
2183
2184 /**
2185  * struct rdma_netdev - rdma netdev
2186  * For cases where netstack interfacing is required.
2187  */
2188 struct rdma_netdev {
2189         void              *clnt_priv;
2190         struct ib_device  *hca;
2191         u8                 port_num;
2192
2193         /* cleanup function must be specified */
2194         void (*free_rdma_netdev)(struct net_device *netdev);
2195
2196         /* control functions */
2197         void (*set_id)(struct net_device *netdev, int id);
2198         /* send packet */
2199         int (*send)(struct net_device *dev, struct sk_buff *skb,
2200                     struct ib_ah *address, u32 dqpn);
2201         /* multicast */
2202         int (*attach_mcast)(struct net_device *dev, struct ib_device *hca,
2203                             union ib_gid *gid, u16 mlid,
2204                             int set_qkey, u32 qkey);
2205         int (*detach_mcast)(struct net_device *dev, struct ib_device *hca,
2206                             union ib_gid *gid, u16 mlid);
2207 };
2208
2209 struct ib_port_pkey_list {
2210         /* Lock to hold while modifying the list. */
2211         spinlock_t                    list_lock;
2212         struct list_head              pkey_list;
2213 };
2214
2215 struct ib_counters {
2216         struct ib_device        *device;
2217         struct ib_uobject       *uobject;
2218         /* num of objects attached */
2219         atomic_t        usecnt;
2220 };
2221
2222 enum ib_read_counters_flags {
2223         /* prefer read values from driver cache */
2224         IB_READ_COUNTERS_ATTR_PREFER_CACHED = 1 << 0,
2225 };
2226
2227 struct ib_counters_read_attr {
2228         u64     *counters_buff;
2229         u32     ncounters;
2230         u32     flags; /* use enum ib_read_counters_flags */
2231 };
2232
2233 struct uverbs_attr_bundle;
2234
2235 struct ib_device {
2236         /* Do not access @dma_device directly from ULP nor from HW drivers. */
2237         struct device                *dma_device;
2238
2239         char                          name[IB_DEVICE_NAME_MAX];
2240
2241         struct list_head              event_handler_list;
2242         spinlock_t                    event_handler_lock;
2243
2244         spinlock_t                    client_data_lock;
2245         struct list_head              core_list;
2246         /* Access to the client_data_list is protected by the client_data_lock
2247          * spinlock and the lists_rwsem read-write semaphore */
2248         struct list_head              client_data_list;
2249
2250         struct ib_cache               cache;
2251         /**
2252          * port_immutable is indexed by port number
2253          */
2254         struct ib_port_immutable     *port_immutable;
2255
2256         int                           num_comp_vectors;
2257
2258         struct ib_port_pkey_list     *port_pkey_list;
2259
2260         struct iw_cm_verbs           *iwcm;
2261
2262         /**
2263          * alloc_hw_stats - Allocate a struct rdma_hw_stats and fill in the
2264          *   driver initialized data.  The struct is kfree()'ed by the sysfs
2265          *   core when the device is removed.  A lifespan of -1 in the return
2266          *   struct tells the core to set a default lifespan.
2267          */
2268         struct rdma_hw_stats      *(*alloc_hw_stats)(struct ib_device *device,
2269                                                      u8 port_num);
2270         /**
2271          * get_hw_stats - Fill in the counter value(s) in the stats struct.
2272          * @index - The index in the value array we wish to have updated, or
2273          *   num_counters if we want all stats updated
2274          * Return codes -
2275          *   < 0 - Error, no counters updated
2276          *   index - Updated the single counter pointed to by index
2277          *   num_counters - Updated all counters (will reset the timestamp
2278          *     and prevent further calls for lifespan milliseconds)
2279          * Drivers are allowed to update all counters in leiu of just the
2280          *   one given in index at their option
2281          */
2282         int                        (*get_hw_stats)(struct ib_device *device,
2283                                                    struct rdma_hw_stats *stats,
2284                                                    u8 port, int index);
2285         int                        (*query_device)(struct ib_device *device,
2286                                                    struct ib_device_attr *device_attr,
2287                                                    struct ib_udata *udata);
2288         int                        (*query_port)(struct ib_device *device,
2289                                                  u8 port_num,
2290                                                  struct ib_port_attr *port_attr);
2291         enum rdma_link_layer       (*get_link_layer)(struct ib_device *device,
2292                                                      u8 port_num);
2293         /* When calling get_netdev, the HW vendor's driver should return the
2294          * net device of device @device at port @port_num or NULL if such
2295          * a net device doesn't exist. The vendor driver should call dev_hold
2296          * on this net device. The HW vendor's device driver must guarantee
2297          * that this function returns NULL before the net device has finished
2298          * NETDEV_UNREGISTER state.
2299          */
2300         struct net_device         *(*get_netdev)(struct ib_device *device,
2301                                                  u8 port_num);
2302         /* query_gid should be return GID value for @device, when @port_num
2303          * link layer is either IB or iWarp. It is no-op if @port_num port
2304          * is RoCE link layer.
2305          */
2306         int                        (*query_gid)(struct ib_device *device,
2307                                                 u8 port_num, int index,
2308                                                 union ib_gid *gid);
2309         /* When calling add_gid, the HW vendor's driver should add the gid
2310          * of device of port at gid index available at @attr. Meta-info of
2311          * that gid (for example, the network device related to this gid) is
2312          * available at @attr. @context allows the HW vendor driver to store
2313          * extra information together with a GID entry. The HW vendor driver may
2314          * allocate memory to contain this information and store it in @context
2315          * when a new GID entry is written to. Params are consistent until the
2316          * next call of add_gid or delete_gid. The function should return 0 on
2317          * success or error otherwise. The function could be called
2318          * concurrently for different ports. This function is only called when
2319          * roce_gid_table is used.
2320          */
2321         int                        (*add_gid)(const struct ib_gid_attr *attr,
2322                                               void **context);
2323         /* When calling del_gid, the HW vendor's driver should delete the
2324          * gid of device @device at gid index gid_index of port port_num
2325          * available in @attr.
2326          * Upon the deletion of a GID entry, the HW vendor must free any
2327          * allocated memory. The caller will clear @context afterwards.
2328          * This function is only called when roce_gid_table is used.
2329          */
2330         int                        (*del_gid)(const struct ib_gid_attr *attr,
2331                                               void **context);
2332         int                        (*query_pkey)(struct ib_device *device,
2333                                                  u8 port_num, u16 index, u16 *pkey);
2334         int                        (*modify_device)(struct ib_device *device,
2335                                                     int device_modify_mask,
2336                                                     struct ib_device_modify *device_modify);
2337         int                        (*modify_port)(struct ib_device *device,
2338                                                   u8 port_num, int port_modify_mask,
2339                                                   struct ib_port_modify *port_modify);
2340         struct ib_ucontext *       (*alloc_ucontext)(struct ib_device *device,
2341                                                      struct ib_udata *udata);
2342         int                        (*dealloc_ucontext)(struct ib_ucontext *context);
2343         int                        (*mmap)(struct ib_ucontext *context,
2344                                            struct vm_area_struct *vma);
2345         struct ib_pd *             (*alloc_pd)(struct ib_device *device,
2346                                                struct ib_ucontext *context,
2347                                                struct ib_udata *udata);
2348         int                        (*dealloc_pd)(struct ib_pd *pd);
2349         struct ib_ah *             (*create_ah)(struct ib_pd *pd,
2350                                                 struct rdma_ah_attr *ah_attr,
2351                                                 struct ib_udata *udata);
2352         int                        (*modify_ah)(struct ib_ah *ah,
2353                                                 struct rdma_ah_attr *ah_attr);
2354         int                        (*query_ah)(struct ib_ah *ah,
2355                                                struct rdma_ah_attr *ah_attr);
2356         int                        (*destroy_ah)(struct ib_ah *ah);
2357         struct ib_srq *            (*create_srq)(struct ib_pd *pd,
2358                                                  struct ib_srq_init_attr *srq_init_attr,
2359                                                  struct ib_udata *udata);
2360         int                        (*modify_srq)(struct ib_srq *srq,
2361                                                  struct ib_srq_attr *srq_attr,
2362                                                  enum ib_srq_attr_mask srq_attr_mask,
2363                                                  struct ib_udata *udata);
2364         int                        (*query_srq)(struct ib_srq *srq,
2365                                                 struct ib_srq_attr *srq_attr);
2366         int                        (*destroy_srq)(struct ib_srq *srq);
2367         int                        (*post_srq_recv)(struct ib_srq *srq,
2368                                                     struct ib_recv_wr *recv_wr,
2369                                                     struct ib_recv_wr **bad_recv_wr);
2370         struct ib_qp *             (*create_qp)(struct ib_pd *pd,
2371                                                 struct ib_qp_init_attr *qp_init_attr,
2372                                                 struct ib_udata *udata);
2373         int                        (*modify_qp)(struct ib_qp *qp,
2374                                                 struct ib_qp_attr *qp_attr,
2375                                                 int qp_attr_mask,
2376                                                 struct ib_udata *udata);
2377         int                        (*query_qp)(struct ib_qp *qp,
2378                                                struct ib_qp_attr *qp_attr,
2379                                                int qp_attr_mask,
2380                                                struct ib_qp_init_attr *qp_init_attr);
2381         int                        (*destroy_qp)(struct ib_qp *qp);
2382         int                        (*post_send)(struct ib_qp *qp,
2383                                                 struct ib_send_wr *send_wr,
2384                                                 struct ib_send_wr **bad_send_wr);
2385         int                        (*post_recv)(struct ib_qp *qp,
2386                                                 struct ib_recv_wr *recv_wr,
2387                                                 struct ib_recv_wr **bad_recv_wr);
2388         struct ib_cq *             (*create_cq)(struct ib_device *device,
2389                                                 const struct ib_cq_init_attr *attr,
2390                                                 struct ib_ucontext *context,
2391                                                 struct ib_udata *udata);
2392         int                        (*modify_cq)(struct ib_cq *cq, u16 cq_count,
2393                                                 u16 cq_period);
2394         int                        (*destroy_cq)(struct ib_cq *cq);
2395         int                        (*resize_cq)(struct ib_cq *cq, int cqe,
2396                                                 struct ib_udata *udata);
2397         int                        (*poll_cq)(struct ib_cq *cq, int num_entries,
2398                                               struct ib_wc *wc);
2399         int                        (*peek_cq)(struct ib_cq *cq, int wc_cnt);
2400         int                        (*req_notify_cq)(struct ib_cq *cq,
2401                                                     enum ib_cq_notify_flags flags);
2402         int                        (*req_ncomp_notif)(struct ib_cq *cq,
2403                                                       int wc_cnt);
2404         struct ib_mr *             (*get_dma_mr)(struct ib_pd *pd,
2405                                                  int mr_access_flags);
2406         struct ib_mr *             (*reg_user_mr)(struct ib_pd *pd,
2407                                                   u64 start, u64 length,
2408                                                   u64 virt_addr,
2409                                                   int mr_access_flags,
2410                                                   struct ib_udata *udata);
2411         int                        (*rereg_user_mr)(struct ib_mr *mr,
2412                                                     int flags,
2413                                                     u64 start, u64 length,
2414                                                     u64 virt_addr,
2415                                                     int mr_access_flags,
2416                                                     struct ib_pd *pd,
2417                                                     struct ib_udata *udata);
2418         int                        (*dereg_mr)(struct ib_mr *mr);
2419         struct ib_mr *             (*alloc_mr)(struct ib_pd *pd,
2420                                                enum ib_mr_type mr_type,
2421                                                u32 max_num_sg);
2422         int                        (*map_mr_sg)(struct ib_mr *mr,
2423                                                 struct scatterlist *sg,
2424                                                 int sg_nents,
2425                                                 unsigned int *sg_offset);
2426         struct ib_mw *             (*alloc_mw)(struct ib_pd *pd,
2427                                                enum ib_mw_type type,
2428                                                struct ib_udata *udata);
2429         int                        (*dealloc_mw)(struct ib_mw *mw);
2430         struct ib_fmr *            (*alloc_fmr)(struct ib_pd *pd,
2431                                                 int mr_access_flags,
2432                                                 struct ib_fmr_attr *fmr_attr);
2433         int                        (*map_phys_fmr)(struct ib_fmr *fmr,
2434                                                    u64 *page_list, int list_len,
2435                                                    u64 iova);
2436         int                        (*unmap_fmr)(struct list_head *fmr_list);
2437         int                        (*dealloc_fmr)(struct ib_fmr *fmr);
2438         int                        (*attach_mcast)(struct ib_qp *qp,
2439                                                    union ib_gid *gid,
2440                                                    u16 lid);
2441         int                        (*detach_mcast)(struct ib_qp *qp,
2442                                                    union ib_gid *gid,
2443                                                    u16 lid);
2444         int                        (*process_mad)(struct ib_device *device,
2445                                                   int process_mad_flags,
2446                                                   u8 port_num,
2447                                                   const struct ib_wc *in_wc,
2448                                                   const struct ib_grh *in_grh,
2449                                                   const struct ib_mad_hdr *in_mad,
2450                                                   size_t in_mad_size,
2451                                                   struct ib_mad_hdr *out_mad,
2452                                                   size_t *out_mad_size,
2453                                                   u16 *out_mad_pkey_index);
2454         struct ib_xrcd *           (*alloc_xrcd)(struct ib_device *device,
2455                                                  struct ib_ucontext *ucontext,
2456                                                  struct ib_udata *udata);
2457         int                        (*dealloc_xrcd)(struct ib_xrcd *xrcd);
2458         struct ib_flow *           (*create_flow)(struct ib_qp *qp,
2459                                                   struct ib_flow_attr
2460                                                   *flow_attr,
2461                                                   int domain,
2462                                                   struct ib_udata *udata);
2463         int                        (*destroy_flow)(struct ib_flow *flow_id);
2464         int                        (*check_mr_status)(struct ib_mr *mr, u32 check_mask,
2465                                                       struct ib_mr_status *mr_status);
2466         void                       (*disassociate_ucontext)(struct ib_ucontext *ibcontext);
2467         void                       (*drain_rq)(struct ib_qp *qp);
2468         void                       (*drain_sq)(struct ib_qp *qp);
2469         int                        (*set_vf_link_state)(struct ib_device *device, int vf, u8 port,
2470                                                         int state);
2471         int                        (*get_vf_config)(struct ib_device *device, int vf, u8 port,
2472                                                    struct ifla_vf_info *ivf);
2473         int                        (*get_vf_stats)(struct ib_device *device, int vf, u8 port,
2474                                                    struct ifla_vf_stats *stats);
2475         int                        (*set_vf_guid)(struct ib_device *device, int vf, u8 port, u64 guid,
2476                                                   int type);
2477         struct ib_wq *             (*create_wq)(struct ib_pd *pd,
2478                                                 struct ib_wq_init_attr *init_attr,
2479                                                 struct ib_udata *udata);
2480         int                        (*destroy_wq)(struct ib_wq *wq);
2481         int                        (*modify_wq)(struct ib_wq *wq,
2482                                                 struct ib_wq_attr *attr,
2483                                                 u32 wq_attr_mask,
2484                                                 struct ib_udata *udata);
2485         struct ib_rwq_ind_table *  (*create_rwq_ind_table)(struct ib_device *device,
2486                                                            struct ib_rwq_ind_table_init_attr *init_attr,
2487                                                            struct ib_udata *udata);
2488         int                        (*destroy_rwq_ind_table)(struct ib_rwq_ind_table *wq_ind_table);
2489         struct ib_flow_action *    (*create_flow_action_esp)(struct ib_device *device,
2490                                                              const struct ib_flow_action_attrs_esp *attr,
2491                                                              struct uverbs_attr_bundle *attrs);
2492         int                        (*destroy_flow_action)(struct ib_flow_action *action);
2493         int                        (*modify_flow_action_esp)(struct ib_flow_action *action,
2494                                                              const struct ib_flow_action_attrs_esp *attr,
2495                                                              struct uverbs_attr_bundle *attrs);
2496         struct ib_dm *             (*alloc_dm)(struct ib_device *device,
2497                                                struct ib_ucontext *context,
2498                                                struct ib_dm_alloc_attr *attr,
2499                                                struct uverbs_attr_bundle *attrs);
2500         int                        (*dealloc_dm)(struct ib_dm *dm);
2501         struct ib_mr *             (*reg_dm_mr)(struct ib_pd *pd, struct ib_dm *dm,
2502                                                 struct ib_dm_mr_attr *attr,
2503                                                 struct uverbs_attr_bundle *attrs);
2504         struct ib_counters *    (*create_counters)(struct ib_device *device,
2505                                                    struct uverbs_attr_bundle *attrs);
2506         int     (*destroy_counters)(struct ib_counters  *counters);
2507         int     (*read_counters)(struct ib_counters *counters,
2508                                  struct ib_counters_read_attr *counters_read_attr,
2509                                  struct uverbs_attr_bundle *attrs);
2510
2511         /**
2512          * rdma netdev operation
2513          *
2514          * Driver implementing alloc_rdma_netdev must return -EOPNOTSUPP if it
2515          * doesn't support the specified rdma netdev type.
2516          */
2517         struct net_device *(*alloc_rdma_netdev)(
2518                                         struct ib_device *device,
2519                                         u8 port_num,
2520                                         enum rdma_netdev_t type,
2521                                         const char *name,
2522                                         unsigned char name_assign_type,
2523                                         void (*setup)(struct net_device *));
2524
2525         struct module               *owner;
2526         struct device                dev;
2527         struct kobject               *ports_parent;
2528         struct list_head             port_list;
2529
2530         enum {
2531                 IB_DEV_UNINITIALIZED,
2532                 IB_DEV_REGISTERED,
2533                 IB_DEV_UNREGISTERED
2534         }                            reg_state;
2535
2536         int                          uverbs_abi_ver;
2537         u64                          uverbs_cmd_mask;
2538         u64                          uverbs_ex_cmd_mask;
2539
2540         char                         node_desc[IB_DEVICE_NODE_DESC_MAX];
2541         __be64                       node_guid;
2542         u32                          local_dma_lkey;
2543         u16                          is_switch:1;
2544         u8                           node_type;
2545         u8                           phys_port_cnt;
2546         struct ib_device_attr        attrs;
2547         struct attribute_group       *hw_stats_ag;
2548         struct rdma_hw_stats         *hw_stats;
2549
2550 #ifdef CONFIG_CGROUP_RDMA
2551         struct rdmacg_device         cg_device;
2552 #endif
2553
2554         u32                          index;
2555         /*
2556          * Implementation details of the RDMA core, don't use in drivers
2557          */
2558         struct rdma_restrack_root     res;
2559
2560         /**
2561          * The following mandatory functions are used only at device
2562          * registration.  Keep functions such as these at the end of this
2563          * structure to avoid cache line misses when accessing struct ib_device
2564          * in fast paths.
2565          */
2566         int (*get_port_immutable)(struct ib_device *, u8, struct ib_port_immutable *);
2567         void (*get_dev_fw_str)(struct ib_device *, char *str);
2568         const struct cpumask *(*get_vector_affinity)(struct ib_device *ibdev,
2569                                                      int comp_vector);
2570
2571         struct uverbs_root_spec         *driver_specs_root;
2572         enum rdma_driver_id             driver_id;
2573 };
2574
2575 struct ib_client {
2576         char  *name;
2577         void (*add)   (struct ib_device *);
2578         void (*remove)(struct ib_device *, void *client_data);
2579
2580         /* Returns the net_dev belonging to this ib_client and matching the
2581          * given parameters.
2582          * @dev:         An RDMA device that the net_dev use for communication.
2583          * @port:        A physical port number on the RDMA device.
2584          * @pkey:        P_Key that the net_dev uses if applicable.
2585          * @gid:         A GID that the net_dev uses to communicate.
2586          * @addr:        An IP address the net_dev is configured with.
2587          * @client_data: The device's client data set by ib_set_client_data().
2588          *
2589          * An ib_client that implements a net_dev on top of RDMA devices
2590          * (such as IP over IB) should implement this callback, allowing the
2591          * rdma_cm module to find the right net_dev for a given request.
2592          *
2593          * The caller is responsible for calling dev_put on the returned
2594          * netdev. */
2595         struct net_device *(*get_net_dev_by_params)(
2596                         struct ib_device *dev,
2597                         u8 port,
2598                         u16 pkey,
2599                         const union ib_gid *gid,
2600                         const struct sockaddr *addr,
2601                         void *client_data);
2602         struct list_head list;
2603 };
2604
2605 struct ib_device *ib_alloc_device(size_t size);
2606 void ib_dealloc_device(struct ib_device *device);
2607
2608 void ib_get_device_fw_str(struct ib_device *device, char *str);
2609
2610 int ib_register_device(struct ib_device *device,
2611                        int (*port_callback)(struct ib_device *,
2612                                             u8, struct kobject *));
2613 void ib_unregister_device(struct ib_device *device);
2614
2615 int ib_register_client   (struct ib_client *client);
2616 void ib_unregister_client(struct ib_client *client);
2617
2618 void *ib_get_client_data(struct ib_device *device, struct ib_client *client);
2619 void  ib_set_client_data(struct ib_device *device, struct ib_client *client,
2620                          void *data);
2621
2622 static inline int ib_copy_from_udata(void *dest, struct ib_udata *udata, size_t len)
2623 {
2624         return copy_from_user(dest, udata->inbuf, len) ? -EFAULT : 0;
2625 }
2626
2627 static inline int ib_copy_to_udata(struct ib_udata *udata, void *src, size_t len)
2628 {
2629         return copy_to_user(udata->outbuf, src, len) ? -EFAULT : 0;
2630 }
2631
2632 static inline bool ib_is_buffer_cleared(const void __user *p,
2633                                         size_t len)
2634 {
2635         bool ret;
2636         u8 *buf;
2637
2638         if (len > USHRT_MAX)
2639                 return false;
2640
2641         buf = memdup_user(p, len);
2642         if (IS_ERR(buf))
2643                 return false;
2644
2645         ret = !memchr_inv(buf, 0, len);
2646         kfree(buf);
2647         return ret;
2648 }
2649
2650 static inline bool ib_is_udata_cleared(struct ib_udata *udata,
2651                                        size_t offset,
2652                                        size_t len)
2653 {
2654         return ib_is_buffer_cleared(udata->inbuf + offset, len);
2655 }
2656
2657 /**
2658  * ib_is_destroy_retryable - Check whether the uobject destruction
2659  * is retryable.
2660  * @ret: The initial destruction return code
2661  * @why: remove reason
2662  * @uobj: The uobject that is destroyed
2663  *
2664  * This function is a helper function that IB layer and low-level drivers
2665  * can use to consider whether the destruction of the given uobject is
2666  * retry-able.
2667  * It checks the original return code, if it wasn't success the destruction
2668  * is retryable according to the ucontext state (i.e. cleanup_retryable) and
2669  * the remove reason. (i.e. why).
2670  * Must be called with the object locked for destroy.
2671  */
2672 static inline bool ib_is_destroy_retryable(int ret, enum rdma_remove_reason why,
2673                                            struct ib_uobject *uobj)
2674 {
2675         return ret && (why == RDMA_REMOVE_DESTROY ||
2676                        uobj->context->cleanup_retryable);
2677 }
2678
2679 /**
2680  * ib_destroy_usecnt - Called during destruction to check the usecnt
2681  * @usecnt: The usecnt atomic
2682  * @why: remove reason
2683  * @uobj: The uobject that is destroyed
2684  *
2685  * Non-zero usecnts will block destruction unless destruction was triggered by
2686  * a ucontext cleanup.
2687  */
2688 static inline int ib_destroy_usecnt(atomic_t *usecnt,
2689                                     enum rdma_remove_reason why,
2690                                     struct ib_uobject *uobj)
2691 {
2692         if (atomic_read(usecnt) && ib_is_destroy_retryable(-EBUSY, why, uobj))
2693                 return -EBUSY;
2694         return 0;
2695 }
2696
2697 /**
2698  * ib_modify_qp_is_ok - Check that the supplied attribute mask
2699  * contains all required attributes and no attributes not allowed for
2700  * the given QP state transition.
2701  * @cur_state: Current QP state
2702  * @next_state: Next QP state
2703  * @type: QP type
2704  * @mask: Mask of supplied QP attributes
2705  * @ll : link layer of port
2706  *
2707  * This function is a helper function that a low-level driver's
2708  * modify_qp method can use to validate the consumer's input.  It
2709  * checks that cur_state and next_state are valid QP states, that a
2710  * transition from cur_state to next_state is allowed by the IB spec,
2711  * and that the attribute mask supplied is allowed for the transition.
2712  */
2713 bool ib_modify_qp_is_ok(enum ib_qp_state cur_state, enum ib_qp_state next_state,
2714                         enum ib_qp_type type, enum ib_qp_attr_mask mask,
2715                         enum rdma_link_layer ll);
2716
2717 void ib_register_event_handler(struct ib_event_handler *event_handler);
2718 void ib_unregister_event_handler(struct ib_event_handler *event_handler);
2719 void ib_dispatch_event(struct ib_event *event);
2720
2721 int ib_query_port(struct ib_device *device,
2722                   u8 port_num, struct ib_port_attr *port_attr);
2723
2724 enum rdma_link_layer rdma_port_get_link_layer(struct ib_device *device,
2725                                                u8 port_num);
2726
2727 /**
2728  * rdma_cap_ib_switch - Check if the device is IB switch
2729  * @device: Device to check
2730  *
2731  * Device driver is responsible for setting is_switch bit on
2732  * in ib_device structure at init time.
2733  *
2734  * Return: true if the device is IB switch.
2735  */
2736 static inline bool rdma_cap_ib_switch(const struct ib_device *device)
2737 {
2738         return device->is_switch;
2739 }
2740
2741 /**
2742  * rdma_start_port - Return the first valid port number for the device
2743  * specified
2744  *
2745  * @device: Device to be checked
2746  *
2747  * Return start port number
2748  */
2749 static inline u8 rdma_start_port(const struct ib_device *device)
2750 {
2751         return rdma_cap_ib_switch(device) ? 0 : 1;
2752 }
2753
2754 /**
2755  * rdma_end_port - Return the last valid port number for the device
2756  * specified
2757  *
2758  * @device: Device to be checked
2759  *
2760  * Return last port number
2761  */
2762 static inline u8 rdma_end_port(const struct ib_device *device)
2763 {
2764         return rdma_cap_ib_switch(device) ? 0 : device->phys_port_cnt;
2765 }
2766
2767 static inline int rdma_is_port_valid(const struct ib_device *device,
2768                                      unsigned int port)
2769 {
2770         return (port >= rdma_start_port(device) &&
2771                 port <= rdma_end_port(device));
2772 }
2773
2774 static inline bool rdma_protocol_ib(const struct ib_device *device, u8 port_num)
2775 {
2776         return device->port_immutable[port_num].core_cap_flags & RDMA_CORE_CAP_PROT_IB;
2777 }
2778
2779 static inline bool rdma_protocol_roce(const struct ib_device *device, u8 port_num)
2780 {
2781         return device->port_immutable[port_num].core_cap_flags &
2782                 (RDMA_CORE_CAP_PROT_ROCE | RDMA_CORE_CAP_PROT_ROCE_UDP_ENCAP);
2783 }
2784
2785 static inline bool rdma_protocol_roce_udp_encap(const struct ib_device *device, u8 port_num)
2786 {
2787         return device->port_immutable[port_num].core_cap_flags & RDMA_CORE_CAP_PROT_ROCE_UDP_ENCAP;
2788 }
2789
2790 static inline bool rdma_protocol_roce_eth_encap(const struct ib_device *device, u8 port_num)
2791 {
2792         return device->port_immutable[port_num].core_cap_flags & RDMA_CORE_CAP_PROT_ROCE;
2793 }
2794
2795 static inline bool rdma_protocol_iwarp(const struct ib_device *device, u8 port_num)
2796 {
2797         return device->port_immutable[port_num].core_cap_flags & RDMA_CORE_CAP_PROT_IWARP;
2798 }
2799
2800 static inline bool rdma_ib_or_roce(const struct ib_device *device, u8 port_num)
2801 {
2802         return rdma_protocol_ib(device, port_num) ||
2803                 rdma_protocol_roce(device, port_num);
2804 }
2805
2806 static inline bool rdma_protocol_raw_packet(const struct ib_device *device, u8 port_num)
2807 {
2808         return device->port_immutable[port_num].core_cap_flags & RDMA_CORE_CAP_PROT_RAW_PACKET;
2809 }
2810
2811 static inline bool rdma_protocol_usnic(const struct ib_device *device, u8 port_num)
2812 {
2813         return device->port_immutable[port_num].core_cap_flags & RDMA_CORE_CAP_PROT_USNIC;
2814 }
2815
2816 /**
2817  * rdma_cap_ib_mad - Check if the port of a device supports Infiniband
2818  * Management Datagrams.
2819  * @device: Device to check
2820  * @port_num: Port number to check
2821  *
2822  * Management Datagrams (MAD) are a required part of the InfiniBand
2823  * specification and are supported on all InfiniBand devices.  A slightly
2824  * extended version are also supported on OPA interfaces.
2825  *
2826  * Return: true if the port supports sending/receiving of MAD packets.
2827  */
2828 static inline bool rdma_cap_ib_mad(const struct ib_device *device, u8 port_num)
2829 {
2830         return device->port_immutable[port_num].core_cap_flags & RDMA_CORE_CAP_IB_MAD;
2831 }
2832
2833 /**
2834  * rdma_cap_opa_mad - Check if the port of device provides support for OPA
2835  * Management Datagrams.
2836  * @device: Device to check
2837  * @port_num: Port number to check
2838  *
2839  * Intel OmniPath devices extend and/or replace the InfiniBand Management
2840  * datagrams with their own versions.  These OPA MADs share many but not all of
2841  * the characteristics of InfiniBand MADs.
2842  *
2843  * OPA MADs differ in the following ways:
2844  *
2845  *    1) MADs are variable size up to 2K
2846  *       IBTA defined MADs remain fixed at 256 bytes
2847  *    2) OPA SMPs must carry valid PKeys
2848  *    3) OPA SMP packets are a different format
2849  *
2850  * Return: true if the port supports OPA MAD packet formats.
2851  */
2852 static inline bool rdma_cap_opa_mad(struct ib_device *device, u8 port_num)
2853 {
2854         return (device->port_immutable[port_num].core_cap_flags & RDMA_CORE_CAP_OPA_MAD)
2855                 == RDMA_CORE_CAP_OPA_MAD;
2856 }
2857
2858 /**
2859  * rdma_cap_ib_smi - Check if the port of a device provides an Infiniband
2860  * Subnet Management Agent (SMA) on the Subnet Management Interface (SMI).
2861  * @device: Device to check
2862  * @port_num: Port number to check
2863  *
2864  * Each InfiniBand node is required to provide a Subnet Management Agent
2865  * that the subnet manager can access.  Prior to the fabric being fully
2866  * configured by the subnet manager, the SMA is accessed via a well known
2867  * interface called the Subnet Management Interface (SMI).  This interface
2868  * uses directed route packets to communicate with the SM to get around the
2869  * chicken and egg problem of the SM needing to know what's on the fabric
2870  * in order to configure the fabric, and needing to configure the fabric in
2871  * order to send packets to the devices on the fabric.  These directed
2872  * route packets do not need the fabric fully configured in order to reach
2873  * their destination.  The SMI is the only method allowed to send
2874  * directed route packets on an InfiniBand fabric.
2875  *
2876  * Return: true if the port provides an SMI.
2877  */
2878 static inline bool rdma_cap_ib_smi(const struct ib_device *device, u8 port_num)
2879 {
2880         return device->port_immutable[port_num].core_cap_flags & RDMA_CORE_CAP_IB_SMI;
2881 }
2882
2883 /**
2884  * rdma_cap_ib_cm - Check if the port of device has the capability Infiniband
2885  * Communication Manager.
2886  * @device: Device to check
2887  * @port_num: Port number to check
2888  *
2889  * The InfiniBand Communication Manager is one of many pre-defined General
2890  * Service Agents (GSA) that are accessed via the General Service
2891  * Interface (GSI).  It's role is to facilitate establishment of connections
2892  * between nodes as well as other management related tasks for established
2893  * connections.
2894  *
2895  * Return: true if the port supports an IB CM (this does not guarantee that
2896  * a CM is actually running however).
2897  */
2898 static inline bool rdma_cap_ib_cm(const struct ib_device *device, u8 port_num)
2899 {
2900         return device->port_immutable[port_num].core_cap_flags & RDMA_CORE_CAP_IB_CM;
2901 }
2902
2903 /**
2904  * rdma_cap_iw_cm - Check if the port of device has the capability IWARP
2905  * Communication Manager.
2906  * @device: Device to check
2907  * @port_num: Port number to check
2908  *
2909  * Similar to above, but specific to iWARP connections which have a different
2910  * managment protocol than InfiniBand.
2911  *
2912  * Return: true if the port supports an iWARP CM (this does not guarantee that
2913  * a CM is actually running however).
2914  */
2915 static inline bool rdma_cap_iw_cm(const struct ib_device *device, u8 port_num)
2916 {
2917         return device->port_immutable[port_num].core_cap_flags & RDMA_CORE_CAP_IW_CM;
2918 }
2919
2920 /**
2921  * rdma_cap_ib_sa - Check if the port of device has the capability Infiniband
2922  * Subnet Administration.
2923  * @device: Device to check
2924  * @port_num: Port number to check
2925  *
2926  * An InfiniBand Subnet Administration (SA) service is a pre-defined General
2927  * Service Agent (GSA) provided by the Subnet Manager (SM).  On InfiniBand
2928  * fabrics, devices should resolve routes to other hosts by contacting the
2929  * SA to query the proper route.
2930  *
2931  * Return: true if the port should act as a client to the fabric Subnet
2932  * Administration interface.  This does not imply that the SA service is
2933  * running locally.
2934  */
2935 static inline bool rdma_cap_ib_sa(const struct ib_device *device, u8 port_num)
2936 {
2937         return device->port_immutable[port_num].core_cap_flags & RDMA_CORE_CAP_IB_SA;
2938 }
2939
2940 /**
2941  * rdma_cap_ib_mcast - Check if the port of device has the capability Infiniband
2942  * Multicast.
2943  * @device: Device to check
2944  * @port_num: Port number to check
2945  *
2946  * InfiniBand multicast registration is more complex than normal IPv4 or
2947  * IPv6 multicast registration.  Each Host Channel Adapter must register
2948  * with the Subnet Manager when it wishes to join a multicast group.  It
2949  * should do so only once regardless of how many queue pairs it subscribes
2950  * to this group.  And it should leave the group only after all queue pairs
2951  * attached to the group have been detached.
2952  *
2953  * Return: true if the port must undertake the additional adminstrative
2954  * overhead of registering/unregistering with the SM and tracking of the
2955  * total number of queue pairs attached to the multicast group.
2956  */
2957 static inline bool rdma_cap_ib_mcast(const struct ib_device *device, u8 port_num)
2958 {
2959         return rdma_cap_ib_sa(device, port_num);
2960 }
2961
2962 /**
2963  * rdma_cap_af_ib - Check if the port of device has the capability
2964  * Native Infiniband Address.
2965  * @device: Device to check
2966  * @port_num: Port number to check
2967  *
2968  * InfiniBand addressing uses a port's GUID + Subnet Prefix to make a default
2969  * GID.  RoCE uses a different mechanism, but still generates a GID via
2970  * a prescribed mechanism and port specific data.
2971  *
2972  * Return: true if the port uses a GID address to identify devices on the
2973  * network.
2974  */
2975 static inline bool rdma_cap_af_ib(const struct ib_device *device, u8 port_num)
2976 {
2977         return device->port_immutable[port_num].core_cap_flags & RDMA_CORE_CAP_AF_IB;
2978 }
2979
2980 /**
2981  * rdma_cap_eth_ah - Check if the port of device has the capability
2982  * Ethernet Address Handle.
2983  * @device: Device to check
2984  * @port_num: Port number to check
2985  *
2986  * RoCE is InfiniBand over Ethernet, and it uses a well defined technique
2987  * to fabricate GIDs over Ethernet/IP specific addresses native to the
2988  * port.  Normally, packet headers are generated by the sending host
2989  * adapter, but when sending connectionless datagrams, we must manually
2990  * inject the proper headers for the fabric we are communicating over.
2991  *
2992  * Return: true if we are running as a RoCE port and must force the
2993  * addition of a Global Route Header built from our Ethernet Address
2994  * Handle into our header list for connectionless packets.
2995  */
2996 static inline bool rdma_cap_eth_ah(const struct ib_device *device, u8 port_num)
2997 {
2998         return device->port_immutable[port_num].core_cap_flags & RDMA_CORE_CAP_ETH_AH;
2999 }
3000
3001 /**
3002  * rdma_cap_opa_ah - Check if the port of device supports
3003  * OPA Address handles
3004  * @device: Device to check
3005  * @port_num: Port number to check
3006  *
3007  * Return: true if we are running on an OPA device which supports
3008  * the extended OPA addressing.
3009  */
3010 static inline bool rdma_cap_opa_ah(struct ib_device *device, u8 port_num)
3011 {
3012         return (device->port_immutable[port_num].core_cap_flags &
3013                 RDMA_CORE_CAP_OPA_AH) == RDMA_CORE_CAP_OPA_AH;
3014 }
3015
3016 /**
3017  * rdma_max_mad_size - Return the max MAD size required by this RDMA Port.
3018  *
3019  * @device: Device
3020  * @port_num: Port number
3021  *
3022  * This MAD size includes the MAD headers and MAD payload.  No other headers
3023  * are included.
3024  *
3025  * Return the max MAD size required by the Port.  Will return 0 if the port
3026  * does not support MADs
3027  */
3028 static inline size_t rdma_max_mad_size(const struct ib_device *device, u8 port_num)
3029 {
3030         return device->port_immutable[port_num].max_mad_size;
3031 }
3032
3033 /**
3034  * rdma_cap_roce_gid_table - Check if the port of device uses roce_gid_table
3035  * @device: Device to check
3036  * @port_num: Port number to check
3037  *
3038  * RoCE GID table mechanism manages the various GIDs for a device.
3039  *
3040  * NOTE: if allocating the port's GID table has failed, this call will still
3041  * return true, but any RoCE GID table API will fail.
3042  *
3043  * Return: true if the port uses RoCE GID table mechanism in order to manage
3044  * its GIDs.
3045  */
3046 static inline bool rdma_cap_roce_gid_table(const struct ib_device *device,
3047                                            u8 port_num)
3048 {
3049         return rdma_protocol_roce(device, port_num) &&
3050                 device->add_gid && device->del_gid;
3051 }
3052
3053 /*
3054  * Check if the device supports READ W/ INVALIDATE.
3055  */
3056 static inline bool rdma_cap_read_inv(struct ib_device *dev, u32 port_num)
3057 {
3058         /*
3059          * iWarp drivers must support READ W/ INVALIDATE.  No other protocol
3060          * has support for it yet.
3061          */
3062         return rdma_protocol_iwarp(dev, port_num);
3063 }
3064
3065 int ib_set_vf_link_state(struct ib_device *device, int vf, u8 port,
3066                          int state);
3067 int ib_get_vf_config(struct ib_device *device, int vf, u8 port,
3068                      struct ifla_vf_info *info);
3069 int ib_get_vf_stats(struct ib_device *device, int vf, u8 port,
3070                     struct ifla_vf_stats *stats);
3071 int ib_set_vf_guid(struct ib_device *device, int vf, u8 port, u64 guid,
3072                    int type);
3073
3074 int ib_query_pkey(struct ib_device *device,
3075                   u8 port_num, u16 index, u16 *pkey);
3076
3077 int ib_modify_device(struct ib_device *device,
3078                      int device_modify_mask,
3079                      struct ib_device_modify *device_modify);
3080
3081 int ib_modify_port(struct ib_device *device,
3082                    u8 port_num, int port_modify_mask,
3083                    struct ib_port_modify *port_modify);
3084
3085 int ib_find_gid(struct ib_device *device, union ib_gid *gid,
3086                 u8 *port_num, u16 *index);
3087
3088 int ib_find_pkey(struct ib_device *device,
3089                  u8 port_num, u16 pkey, u16 *index);
3090
3091 enum ib_pd_flags {
3092         /*
3093          * Create a memory registration for all memory in the system and place
3094          * the rkey for it into pd->unsafe_global_rkey.  This can be used by
3095          * ULPs to avoid the overhead of dynamic MRs.
3096          *
3097          * This flag is generally considered unsafe and must only be used in
3098          * extremly trusted environments.  Every use of it will log a warning
3099          * in the kernel log.
3100          */
3101         IB_PD_UNSAFE_GLOBAL_RKEY        = 0x01,
3102 };
3103
3104 struct ib_pd *__ib_alloc_pd(struct ib_device *device, unsigned int flags,
3105                 const char *caller);
3106 #define ib_alloc_pd(device, flags) \
3107         __ib_alloc_pd((device), (flags), KBUILD_MODNAME)
3108 void ib_dealloc_pd(struct ib_pd *pd);
3109
3110 /**
3111  * rdma_create_ah - Creates an address handle for the given address vector.
3112  * @pd: The protection domain associated with the address handle.
3113  * @ah_attr: The attributes of the address vector.
3114  *
3115  * The address handle is used to reference a local or global destination
3116  * in all UD QP post sends.
3117  */
3118 struct ib_ah *rdma_create_ah(struct ib_pd *pd, struct rdma_ah_attr *ah_attr);
3119
3120 /**
3121  * rdma_create_user_ah - Creates an address handle for the given address vector.
3122  * It resolves destination mac address for ah attribute of RoCE type.
3123  * @pd: The protection domain associated with the address handle.
3124  * @ah_attr: The attributes of the address vector.
3125  * @udata: pointer to user's input output buffer information need by
3126  *         provider driver.
3127  *
3128  * It returns 0 on success and returns appropriate error code on error.
3129  * The address handle is used to reference a local or global destination
3130  * in all UD QP post sends.
3131  */
3132 struct ib_ah *rdma_create_user_ah(struct ib_pd *pd,
3133                                   struct rdma_ah_attr *ah_attr,
3134                                   struct ib_udata *udata);
3135 /**
3136  * ib_get_gids_from_rdma_hdr - Get sgid and dgid from GRH or IPv4 header
3137  *   work completion.
3138  * @hdr: the L3 header to parse
3139  * @net_type: type of header to parse
3140  * @sgid: place to store source gid
3141  * @dgid: place to store destination gid
3142  */
3143 int ib_get_gids_from_rdma_hdr(const union rdma_network_hdr *hdr,
3144                               enum rdma_network_type net_type,
3145                               union ib_gid *sgid, union ib_gid *dgid);
3146
3147 /**
3148  * ib_get_rdma_header_version - Get the header version
3149  * @hdr: the L3 header to parse
3150  */
3151 int ib_get_rdma_header_version(const union rdma_network_hdr *hdr);
3152
3153 /**
3154  * ib_init_ah_attr_from_wc - Initializes address handle attributes from a
3155  *   work completion.
3156  * @device: Device on which the received message arrived.
3157  * @port_num: Port on which the received message arrived.
3158  * @wc: Work completion associated with the received message.
3159  * @grh: References the received global route header.  This parameter is
3160  *   ignored unless the work completion indicates that the GRH is valid.
3161  * @ah_attr: Returned attributes that can be used when creating an address
3162  *   handle for replying to the message.
3163  * When ib_init_ah_attr_from_wc() returns success,
3164  * (a) for IB link layer it optionally contains a reference to SGID attribute
3165  * when GRH is present for IB link layer.
3166  * (b) for RoCE link layer it contains a reference to SGID attribute.
3167  * User must invoke rdma_cleanup_ah_attr_gid_attr() to release reference to SGID
3168  * attributes which are initialized using ib_init_ah_attr_from_wc().
3169  *
3170  */
3171 int ib_init_ah_attr_from_wc(struct ib_device *device, u8 port_num,
3172                             const struct ib_wc *wc, const struct ib_grh *grh,
3173                             struct rdma_ah_attr *ah_attr);
3174
3175 /**
3176  * ib_create_ah_from_wc - Creates an address handle associated with the
3177  *   sender of the specified work completion.
3178  * @pd: The protection domain associated with the address handle.
3179  * @wc: Work completion information associated with a received message.
3180  * @grh: References the received global route header.  This parameter is
3181  *   ignored unless the work completion indicates that the GRH is valid.
3182  * @port_num: The outbound port number to associate with the address.
3183  *
3184  * The address handle is used to reference a local or global destination
3185  * in all UD QP post sends.
3186  */
3187 struct ib_ah *ib_create_ah_from_wc(struct ib_pd *pd, const struct ib_wc *wc,
3188                                    const struct ib_grh *grh, u8 port_num);
3189
3190 /**
3191  * rdma_modify_ah - Modifies the address vector associated with an address
3192  *   handle.
3193  * @ah: The address handle to modify.
3194  * @ah_attr: The new address vector attributes to associate with the
3195  *   address handle.
3196  */
3197 int rdma_modify_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr);
3198
3199 /**
3200  * rdma_query_ah - Queries the address vector associated with an address
3201  *   handle.
3202  * @ah: The address handle to query.
3203  * @ah_attr: The address vector attributes associated with the address
3204  *   handle.
3205  */
3206 int rdma_query_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr);
3207
3208 /**
3209  * rdma_destroy_ah - Destroys an address handle.
3210  * @ah: The address handle to destroy.
3211  */
3212 int rdma_destroy_ah(struct ib_ah *ah);
3213
3214 /**
3215  * ib_create_srq - Creates a SRQ associated with the specified protection
3216  *   domain.
3217  * @pd: The protection domain associated with the SRQ.
3218  * @srq_init_attr: A list of initial attributes required to create the
3219  *   SRQ.  If SRQ creation succeeds, then the attributes are updated to
3220  *   the actual capabilities of the created SRQ.
3221  *
3222  * srq_attr->max_wr and srq_attr->max_sge are read the determine the
3223  * requested size of the SRQ, and set to the actual values allocated
3224  * on return.  If ib_create_srq() succeeds, then max_wr and max_sge
3225  * will always be at least as large as the requested values.
3226  */
3227 struct ib_srq *ib_create_srq(struct ib_pd *pd,
3228                              struct ib_srq_init_attr *srq_init_attr);
3229
3230 /**
3231  * ib_modify_srq - Modifies the attributes for the specified SRQ.
3232  * @srq: The SRQ to modify.
3233  * @srq_attr: On input, specifies the SRQ attributes to modify.  On output,
3234  *   the current values of selected SRQ attributes are returned.
3235  * @srq_attr_mask: A bit-mask used to specify which attributes of the SRQ
3236  *   are being modified.
3237  *
3238  * The mask may contain IB_SRQ_MAX_WR to resize the SRQ and/or
3239  * IB_SRQ_LIMIT to set the SRQ's limit and request notification when
3240  * the number of receives queued drops below the limit.
3241  */
3242 int ib_modify_srq(struct ib_srq *srq,
3243                   struct ib_srq_attr *srq_attr,
3244                   enum ib_srq_attr_mask srq_attr_mask);
3245
3246 /**
3247  * ib_query_srq - Returns the attribute list and current values for the
3248  *   specified SRQ.
3249  * @srq: The SRQ to query.
3250  * @srq_attr: The attributes of the specified SRQ.
3251  */
3252 int ib_query_srq(struct ib_srq *srq,
3253                  struct ib_srq_attr *srq_attr);
3254
3255 /**
3256  * ib_destroy_srq - Destroys the specified SRQ.
3257  * @srq: The SRQ to destroy.
3258  */
3259 int ib_destroy_srq(struct ib_srq *srq);
3260
3261 /**
3262  * ib_post_srq_recv - Posts a list of work requests to the specified SRQ.
3263  * @srq: The SRQ to post the work request on.
3264  * @recv_wr: A list of work requests to post on the receive queue.
3265  * @bad_recv_wr: On an immediate failure, this parameter will reference
3266  *   the work request that failed to be posted on the QP.
3267  */
3268 static inline int ib_post_srq_recv(struct ib_srq *srq,
3269                                    struct ib_recv_wr *recv_wr,
3270                                    struct ib_recv_wr **bad_recv_wr)
3271 {
3272         return srq->device->post_srq_recv(srq, recv_wr, bad_recv_wr);
3273 }
3274
3275 /**
3276  * ib_create_qp - Creates a QP associated with the specified protection
3277  *   domain.
3278  * @pd: The protection domain associated with the QP.
3279  * @qp_init_attr: A list of initial attributes required to create the
3280  *   QP.  If QP creation succeeds, then the attributes are updated to
3281  *   the actual capabilities of the created QP.
3282  */
3283 struct ib_qp *ib_create_qp(struct ib_pd *pd,
3284                            struct ib_qp_init_attr *qp_init_attr);
3285
3286 /**
3287  * ib_modify_qp_with_udata - Modifies the attributes for the specified QP.
3288  * @qp: The QP to modify.
3289  * @attr: On input, specifies the QP attributes to modify.  On output,
3290  *   the current values of selected QP attributes are returned.
3291  * @attr_mask: A bit-mask used to specify which attributes of the QP
3292  *   are being modified.
3293  * @udata: pointer to user's input output buffer information
3294  *   are being modified.
3295  * It returns 0 on success and returns appropriate error code on error.
3296  */
3297 int ib_modify_qp_with_udata(struct ib_qp *qp,
3298                             struct ib_qp_attr *attr,
3299                             int attr_mask,
3300                             struct ib_udata *udata);
3301
3302 /**
3303  * ib_modify_qp - Modifies the attributes for the specified QP and then
3304  *   transitions the QP to the given state.
3305  * @qp: The QP to modify.
3306  * @qp_attr: On input, specifies the QP attributes to modify.  On output,
3307  *   the current values of selected QP attributes are returned.
3308  * @qp_attr_mask: A bit-mask used to specify which attributes of the QP
3309  *   are being modified.
3310  */
3311 int ib_modify_qp(struct ib_qp *qp,
3312                  struct ib_qp_attr *qp_attr,
3313                  int qp_attr_mask);
3314
3315 /**
3316  * ib_query_qp - Returns the attribute list and current values for the
3317  *   specified QP.
3318  * @qp: The QP to query.
3319  * @qp_attr: The attributes of the specified QP.
3320  * @qp_attr_mask: A bit-mask used to select specific attributes to query.
3321  * @qp_init_attr: Additional attributes of the selected QP.
3322  *
3323  * The qp_attr_mask may be used to limit the query to gathering only the
3324  * selected attributes.
3325  */
3326 int ib_query_qp(struct ib_qp *qp,
3327                 struct ib_qp_attr *qp_attr,
3328                 int qp_attr_mask,
3329                 struct ib_qp_init_attr *qp_init_attr);
3330
3331 /**
3332  * ib_destroy_qp - Destroys the specified QP.
3333  * @qp: The QP to destroy.
3334  */
3335 int ib_destroy_qp(struct ib_qp *qp);
3336
3337 /**
3338  * ib_open_qp - Obtain a reference to an existing sharable QP.
3339  * @xrcd - XRC domain
3340  * @qp_open_attr: Attributes identifying the QP to open.
3341  *
3342  * Returns a reference to a sharable QP.
3343  */
3344 struct ib_qp *ib_open_qp(struct ib_xrcd *xrcd,
3345                          struct ib_qp_open_attr *qp_open_attr);
3346
3347 /**
3348  * ib_close_qp - Release an external reference to a QP.
3349  * @qp: The QP handle to release
3350  *
3351  * The opened QP handle is released by the caller.  The underlying
3352  * shared QP is not destroyed until all internal references are released.
3353  */
3354 int ib_close_qp(struct ib_qp *qp);
3355
3356 /**
3357  * ib_post_send - Posts a list of work requests to the send queue of
3358  *   the specified QP.
3359  * @qp: The QP to post the work request on.
3360  * @send_wr: A list of work requests to post on the send queue.
3361  * @bad_send_wr: On an immediate failure, this parameter will reference
3362  *   the work request that failed to be posted on the QP.
3363  *
3364  * While IBA Vol. 1 section 11.4.1.1 specifies that if an immediate
3365  * error is returned, the QP state shall not be affected,
3366  * ib_post_send() will return an immediate error after queueing any
3367  * earlier work requests in the list.
3368  */
3369 static inline int ib_post_send(struct ib_qp *qp,
3370                                struct ib_send_wr *send_wr,
3371                                struct ib_send_wr **bad_send_wr)
3372 {
3373         return qp->device->post_send(qp, send_wr, bad_send_wr);
3374 }
3375
3376 /**
3377  * ib_post_recv - Posts a list of work requests to the receive queue of
3378  *   the specified QP.
3379  * @qp: The QP to post the work request on.
3380  * @recv_wr: A list of work requests to post on the receive queue.
3381  * @bad_recv_wr: On an immediate failure, this parameter will reference
3382  *   the work request that failed to be posted on the QP.
3383  */
3384 static inline int ib_post_recv(struct ib_qp *qp,
3385                                struct ib_recv_wr *recv_wr,
3386                                struct ib_recv_wr **bad_recv_wr)
3387 {
3388         return qp->device->post_recv(qp, recv_wr, bad_recv_wr);
3389 }
3390
3391 struct ib_cq *__ib_alloc_cq(struct ib_device *dev, void *private,
3392                             int nr_cqe, int comp_vector,
3393                             enum ib_poll_context poll_ctx, const char *caller);
3394 #define ib_alloc_cq(device, priv, nr_cqe, comp_vect, poll_ctx) \
3395         __ib_alloc_cq((device), (priv), (nr_cqe), (comp_vect), (poll_ctx), KBUILD_MODNAME)
3396
3397 void ib_free_cq(struct ib_cq *cq);
3398 int ib_process_cq_direct(struct ib_cq *cq, int budget);
3399
3400 /**
3401  * ib_create_cq - Creates a CQ on the specified device.
3402  * @device: The device on which to create the CQ.
3403  * @comp_handler: A user-specified callback that is invoked when a
3404  *   completion event occurs on the CQ.
3405  * @event_handler: A user-specified callback that is invoked when an
3406  *   asynchronous event not associated with a completion occurs on the CQ.
3407  * @cq_context: Context associated with the CQ returned to the user via
3408  *   the associated completion and event handlers.
3409  * @cq_attr: The attributes the CQ should be created upon.
3410  *
3411  * Users can examine the cq structure to determine the actual CQ size.
3412  */
3413 struct ib_cq *ib_create_cq(struct ib_device *device,
3414                            ib_comp_handler comp_handler,
3415                            void (*event_handler)(struct ib_event *, void *),
3416                            void *cq_context,
3417                            const struct ib_cq_init_attr *cq_attr);
3418
3419 /**
3420  * ib_resize_cq - Modifies the capacity of the CQ.
3421  * @cq: The CQ to resize.
3422  * @cqe: The minimum size of the CQ.
3423  *
3424  * Users can examine the cq structure to determine the actual CQ size.
3425  */
3426 int ib_resize_cq(struct ib_cq *cq, int cqe);
3427
3428 /**
3429  * rdma_set_cq_moderation - Modifies moderation params of the CQ
3430  * @cq: The CQ to modify.
3431  * @cq_count: number of CQEs that will trigger an event
3432  * @cq_period: max period of time in usec before triggering an event
3433  *
3434  */
3435 int rdma_set_cq_moderation(struct ib_cq *cq, u16 cq_count, u16 cq_period);
3436
3437 /**
3438  * ib_destroy_cq - Destroys the specified CQ.
3439  * @cq: The CQ to destroy.
3440  */
3441 int ib_destroy_cq(struct ib_cq *cq);
3442
3443 /**
3444  * ib_poll_cq - poll a CQ for completion(s)
3445  * @cq:the CQ being polled
3446  * @num_entries:maximum number of completions to return
3447  * @wc:array of at least @num_entries &struct ib_wc where completions
3448  *   will be returned
3449  *
3450  * Poll a CQ for (possibly multiple) completions.  If the return value
3451  * is < 0, an error occurred.  If the return value is >= 0, it is the
3452  * number of completions returned.  If the return value is
3453  * non-negative and < num_entries, then the CQ was emptied.
3454  */
3455 static inline int ib_poll_cq(struct ib_cq *cq, int num_entries,
3456                              struct ib_wc *wc)
3457 {
3458         return cq->device->poll_cq(cq, num_entries, wc);
3459 }
3460
3461 /**
3462  * ib_req_notify_cq - Request completion notification on a CQ.
3463  * @cq: The CQ to generate an event for.
3464  * @flags:
3465  *   Must contain exactly one of %IB_CQ_SOLICITED or %IB_CQ_NEXT_COMP
3466  *   to request an event on the next solicited event or next work
3467  *   completion at any type, respectively. %IB_CQ_REPORT_MISSED_EVENTS
3468  *   may also be |ed in to request a hint about missed events, as
3469  *   described below.
3470  *
3471  * Return Value:
3472  *    < 0 means an error occurred while requesting notification
3473  *   == 0 means notification was requested successfully, and if
3474  *        IB_CQ_REPORT_MISSED_EVENTS was passed in, then no events
3475  *        were missed and it is safe to wait for another event.  In
3476  *        this case is it guaranteed that any work completions added
3477  *        to the CQ since the last CQ poll will trigger a completion
3478  *        notification event.
3479  *    > 0 is only returned if IB_CQ_REPORT_MISSED_EVENTS was passed
3480  *        in.  It means that the consumer must poll the CQ again to
3481  *        make sure it is empty to avoid missing an event because of a
3482  *        race between requesting notification and an entry being
3483  *        added to the CQ.  This return value means it is possible
3484  *        (but not guaranteed) that a work completion has been added
3485  *        to the CQ since the last poll without triggering a
3486  *        completion notification event.
3487  */
3488 static inline int ib_req_notify_cq(struct ib_cq *cq,
3489                                    enum ib_cq_notify_flags flags)
3490 {
3491         return cq->device->req_notify_cq(cq, flags);
3492 }
3493
3494 /**
3495  * ib_req_ncomp_notif - Request completion notification when there are
3496  *   at least the specified number of unreaped completions on the CQ.
3497  * @cq: The CQ to generate an event for.
3498  * @wc_cnt: The number of unreaped completions that should be on the
3499  *   CQ before an event is generated.
3500  */
3501 static inline int ib_req_ncomp_notif(struct ib_cq *cq, int wc_cnt)
3502 {
3503         return cq->device->req_ncomp_notif ?
3504                 cq->device->req_ncomp_notif(cq, wc_cnt) :
3505                 -ENOSYS;
3506 }
3507
3508 /**
3509  * ib_dma_mapping_error - check a DMA addr for error
3510  * @dev: The device for which the dma_addr was created
3511  * @dma_addr: The DMA address to check
3512  */
3513 static inline int ib_dma_mapping_error(struct ib_device *dev, u64 dma_addr)
3514 {
3515         return dma_mapping_error(dev->dma_device, dma_addr);
3516 }
3517
3518 /**
3519  * ib_dma_map_single - Map a kernel virtual address to DMA address
3520  * @dev: The device for which the dma_addr is to be created
3521  * @cpu_addr: The kernel virtual address
3522  * @size: The size of the region in bytes
3523  * @direction: The direction of the DMA
3524  */
3525 static inline u64 ib_dma_map_single(struct ib_device *dev,
3526                                     void *cpu_addr, size_t size,
3527                                     enum dma_data_direction direction)
3528 {
3529         return dma_map_single(dev->dma_device, cpu_addr, size, direction);
3530 }
3531
3532 /**
3533  * ib_dma_unmap_single - Destroy a mapping created by ib_dma_map_single()
3534  * @dev: The device for which the DMA address was created
3535  * @addr: The DMA address
3536  * @size: The size of the region in bytes
3537  * @direction: The direction of the DMA
3538  */
3539 static inline void ib_dma_unmap_single(struct ib_device *dev,
3540                                        u64 addr, size_t size,
3541                                        enum dma_data_direction direction)
3542 {
3543         dma_unmap_single(dev->dma_device, addr, size, direction);
3544 }
3545
3546 /**
3547  * ib_dma_map_page - Map a physical page to DMA address
3548  * @dev: The device for which the dma_addr is to be created
3549  * @page: The page to be mapped
3550  * @offset: The offset within the page
3551  * @size: The size of the region in bytes
3552  * @direction: The direction of the DMA
3553  */
3554 static inline u64 ib_dma_map_page(struct ib_device *dev,
3555                                   struct page *page,
3556                                   unsigned long offset,
3557                                   size_t size,
3558                                          enum dma_data_direction direction)
3559 {
3560         return dma_map_page(dev->dma_device, page, offset, size, direction);
3561 }
3562
3563 /**
3564  * ib_dma_unmap_page - Destroy a mapping created by ib_dma_map_page()
3565  * @dev: The device for which the DMA address was created
3566  * @addr: The DMA address
3567  * @size: The size of the region in bytes
3568  * @direction: The direction of the DMA
3569  */
3570 static inline void ib_dma_unmap_page(struct ib_device *dev,
3571                                      u64 addr, size_t size,
3572                                      enum dma_data_direction direction)
3573 {
3574         dma_unmap_page(dev->dma_device, addr, size, direction);
3575 }
3576
3577 /**
3578  * ib_dma_map_sg - Map a scatter/gather list to DMA addresses
3579  * @dev: The device for which the DMA addresses are to be created
3580  * @sg: The array of scatter/gather entries
3581  * @nents: The number of scatter/gather entries
3582  * @direction: The direction of the DMA
3583  */
3584 static inline int ib_dma_map_sg(struct ib_device *dev,
3585                                 struct scatterlist *sg, int nents,
3586                                 enum dma_data_direction direction)
3587 {
3588         return dma_map_sg(dev->dma_device, sg, nents, direction);
3589 }
3590
3591 /**
3592  * ib_dma_unmap_sg - Unmap a scatter/gather list of DMA addresses
3593  * @dev: The device for which the DMA addresses were created
3594  * @sg: The array of scatter/gather entries
3595  * @nents: The number of scatter/gather entries
3596  * @direction: The direction of the DMA
3597  */
3598 static inline void ib_dma_unmap_sg(struct ib_device *dev,
3599                                    struct scatterlist *sg, int nents,
3600                                    enum dma_data_direction direction)
3601 {
3602         dma_unmap_sg(dev->dma_device, sg, nents, direction);
3603 }
3604
3605 static inline int ib_dma_map_sg_attrs(struct ib_device *dev,
3606                                       struct scatterlist *sg, int nents,
3607                                       enum dma_data_direction direction,
3608                                       unsigned long dma_attrs)
3609 {
3610         return dma_map_sg_attrs(dev->dma_device, sg, nents, direction,
3611                                 dma_attrs);
3612 }
3613
3614 static inline void ib_dma_unmap_sg_attrs(struct ib_device *dev,
3615                                          struct scatterlist *sg, int nents,
3616                                          enum dma_data_direction direction,
3617                                          unsigned long dma_attrs)
3618 {
3619         dma_unmap_sg_attrs(dev->dma_device, sg, nents, direction, dma_attrs);
3620 }
3621 /**
3622  * ib_sg_dma_address - Return the DMA address from a scatter/gather entry
3623  * @dev: The device for which the DMA addresses were created
3624  * @sg: The scatter/gather entry
3625  *
3626  * Note: this function is obsolete. To do: change all occurrences of
3627  * ib_sg_dma_address() into sg_dma_address().
3628  */
3629 static inline u64 ib_sg_dma_address(struct ib_device *dev,
3630                                     struct scatterlist *sg)
3631 {
3632         return sg_dma_address(sg);
3633 }
3634
3635 /**
3636  * ib_sg_dma_len - Return the DMA length from a scatter/gather entry
3637  * @dev: The device for which the DMA addresses were created
3638  * @sg: The scatter/gather entry
3639  *
3640  * Note: this function is obsolete. To do: change all occurrences of
3641  * ib_sg_dma_len() into sg_dma_len().
3642  */
3643 static inline unsigned int ib_sg_dma_len(struct ib_device *dev,
3644                                          struct scatterlist *sg)
3645 {
3646         return sg_dma_len(sg);
3647 }
3648
3649 /**
3650  * ib_dma_sync_single_for_cpu - Prepare DMA region to be accessed by CPU
3651  * @dev: The device for which the DMA address was created
3652  * @addr: The DMA address
3653  * @size: The size of the region in bytes
3654  * @dir: The direction of the DMA
3655  */
3656 static inline void ib_dma_sync_single_for_cpu(struct ib_device *dev,
3657                                               u64 addr,
3658                                               size_t size,
3659                                               enum dma_data_direction dir)
3660 {
3661         dma_sync_single_for_cpu(dev->dma_device, addr, size, dir);
3662 }
3663
3664 /**
3665  * ib_dma_sync_single_for_device - Prepare DMA region to be accessed by device
3666  * @dev: The device for which the DMA address was created
3667  * @addr: The DMA address
3668  * @size: The size of the region in bytes
3669  * @dir: The direction of the DMA
3670  */
3671 static inline void ib_dma_sync_single_for_device(struct ib_device *dev,
3672                                                  u64 addr,
3673                                                  size_t size,
3674                                                  enum dma_data_direction dir)
3675 {
3676         dma_sync_single_for_device(dev->dma_device, addr, size, dir);
3677 }
3678
3679 /**
3680  * ib_dma_alloc_coherent - Allocate memory and map it for DMA
3681  * @dev: The device for which the DMA address is requested
3682  * @size: The size of the region to allocate in bytes
3683  * @dma_handle: A pointer for returning the DMA address of the region
3684  * @flag: memory allocator flags
3685  */
3686 static inline void *ib_dma_alloc_coherent(struct ib_device *dev,
3687                                            size_t size,
3688                                            dma_addr_t *dma_handle,
3689                                            gfp_t flag)
3690 {
3691         return dma_alloc_coherent(dev->dma_device, size, dma_handle, flag);
3692 }
3693
3694 /**
3695  * ib_dma_free_coherent - Free memory allocated by ib_dma_alloc_coherent()
3696  * @dev: The device for which the DMA addresses were allocated
3697  * @size: The size of the region
3698  * @cpu_addr: the address returned by ib_dma_alloc_coherent()
3699  * @dma_handle: the DMA address returned by ib_dma_alloc_coherent()
3700  */
3701 static inline void ib_dma_free_coherent(struct ib_device *dev,
3702                                         size_t size, void *cpu_addr,
3703                                         dma_addr_t dma_handle)
3704 {
3705         dma_free_coherent(dev->dma_device, size, cpu_addr, dma_handle);
3706 }
3707
3708 /**
3709  * ib_dereg_mr - Deregisters a memory region and removes it from the
3710  *   HCA translation table.
3711  * @mr: The memory region to deregister.
3712  *
3713  * This function can fail, if the memory region has memory windows bound to it.
3714  */
3715 int ib_dereg_mr(struct ib_mr *mr);
3716
3717 struct ib_mr *ib_alloc_mr(struct ib_pd *pd,
3718                           enum ib_mr_type mr_type,
3719                           u32 max_num_sg);
3720
3721 /**
3722  * ib_update_fast_reg_key - updates the key portion of the fast_reg MR
3723  *   R_Key and L_Key.
3724  * @mr - struct ib_mr pointer to be updated.
3725  * @newkey - new key to be used.
3726  */
3727 static inline void ib_update_fast_reg_key(struct ib_mr *mr, u8 newkey)
3728 {
3729         mr->lkey = (mr->lkey & 0xffffff00) | newkey;
3730         mr->rkey = (mr->rkey & 0xffffff00) | newkey;
3731 }
3732
3733 /**
3734  * ib_inc_rkey - increments the key portion of the given rkey. Can be used
3735  * for calculating a new rkey for type 2 memory windows.
3736  * @rkey - the rkey to increment.
3737  */
3738 static inline u32 ib_inc_rkey(u32 rkey)
3739 {
3740         const u32 mask = 0x000000ff;
3741         return ((rkey + 1) & mask) | (rkey & ~mask);
3742 }
3743
3744 /**
3745  * ib_alloc_fmr - Allocates a unmapped fast memory region.
3746  * @pd: The protection domain associated with the unmapped region.
3747  * @mr_access_flags: Specifies the memory access rights.
3748  * @fmr_attr: Attributes of the unmapped region.
3749  *
3750  * A fast memory region must be mapped before it can be used as part of
3751  * a work request.
3752  */
3753 struct ib_fmr *ib_alloc_fmr(struct ib_pd *pd,
3754                             int mr_access_flags,
3755                             struct ib_fmr_attr *fmr_attr);
3756
3757 /**
3758  * ib_map_phys_fmr - Maps a list of physical pages to a fast memory region.
3759  * @fmr: The fast memory region to associate with the pages.
3760  * @page_list: An array of physical pages to map to the fast memory region.
3761  * @list_len: The number of pages in page_list.
3762  * @iova: The I/O virtual address to use with the mapped region.
3763  */
3764 static inline int ib_map_phys_fmr(struct ib_fmr *fmr,
3765                                   u64 *page_list, int list_len,
3766                                   u64 iova)
3767 {
3768         return fmr->device->map_phys_fmr(fmr, page_list, list_len, iova);
3769 }
3770
3771 /**
3772  * ib_unmap_fmr - Removes the mapping from a list of fast memory regions.
3773  * @fmr_list: A linked list of fast memory regions to unmap.
3774  */
3775 int ib_unmap_fmr(struct list_head *fmr_list);
3776
3777 /**
3778  * ib_dealloc_fmr - Deallocates a fast memory region.
3779  * @fmr: The fast memory region to deallocate.
3780  */
3781 int ib_dealloc_fmr(struct ib_fmr *fmr);
3782
3783 /**
3784  * ib_attach_mcast - Attaches the specified QP to a multicast group.
3785  * @qp: QP to attach to the multicast group.  The QP must be type
3786  *   IB_QPT_UD.
3787  * @gid: Multicast group GID.
3788  * @lid: Multicast group LID in host byte order.
3789  *
3790  * In order to send and receive multicast packets, subnet
3791  * administration must have created the multicast group and configured
3792  * the fabric appropriately.  The port associated with the specified
3793  * QP must also be a member of the multicast group.
3794  */
3795 int ib_attach_mcast(struct ib_qp *qp, union ib_gid *gid, u16 lid);
3796
3797 /**
3798  * ib_detach_mcast - Detaches the specified QP from a multicast group.
3799  * @qp: QP to detach from the multicast group.
3800  * @gid: Multicast group GID.
3801  * @lid: Multicast group LID in host byte order.
3802  */
3803 int ib_detach_mcast(struct ib_qp *qp, union ib_gid *gid, u16 lid);
3804
3805 /**
3806  * ib_alloc_xrcd - Allocates an XRC domain.
3807  * @device: The device on which to allocate the XRC domain.
3808  * @caller: Module name for kernel consumers
3809  */
3810 struct ib_xrcd *__ib_alloc_xrcd(struct ib_device *device, const char *caller);
3811 #define ib_alloc_xrcd(device) \
3812         __ib_alloc_xrcd((device), KBUILD_MODNAME)
3813
3814 /**
3815  * ib_dealloc_xrcd - Deallocates an XRC domain.
3816  * @xrcd: The XRC domain to deallocate.
3817  */
3818 int ib_dealloc_xrcd(struct ib_xrcd *xrcd);
3819
3820 static inline int ib_check_mr_access(int flags)
3821 {
3822         /*
3823          * Local write permission is required if remote write or
3824          * remote atomic permission is also requested.
3825          */
3826         if (flags & (IB_ACCESS_REMOTE_ATOMIC | IB_ACCESS_REMOTE_WRITE) &&
3827             !(flags & IB_ACCESS_LOCAL_WRITE))
3828                 return -EINVAL;
3829
3830         return 0;
3831 }
3832
3833 static inline bool ib_access_writable(int access_flags)
3834 {
3835         /*
3836          * We have writable memory backing the MR if any of the following
3837          * access flags are set.  "Local write" and "remote write" obviously
3838          * require write access.  "Remote atomic" can do things like fetch and
3839          * add, which will modify memory, and "MW bind" can change permissions
3840          * by binding a window.
3841          */
3842         return access_flags &
3843                 (IB_ACCESS_LOCAL_WRITE   | IB_ACCESS_REMOTE_WRITE |
3844                  IB_ACCESS_REMOTE_ATOMIC | IB_ACCESS_MW_BIND);
3845 }
3846
3847 /**
3848  * ib_check_mr_status: lightweight check of MR status.
3849  *     This routine may provide status checks on a selected
3850  *     ib_mr. first use is for signature status check.
3851  *
3852  * @mr: A memory region.
3853  * @check_mask: Bitmask of which checks to perform from
3854  *     ib_mr_status_check enumeration.
3855  * @mr_status: The container of relevant status checks.
3856  *     failed checks will be indicated in the status bitmask
3857  *     and the relevant info shall be in the error item.
3858  */
3859 int ib_check_mr_status(struct ib_mr *mr, u32 check_mask,
3860                        struct ib_mr_status *mr_status);
3861
3862 struct net_device *ib_get_net_dev_by_params(struct ib_device *dev, u8 port,
3863                                             u16 pkey, const union ib_gid *gid,
3864                                             const struct sockaddr *addr);
3865 struct ib_wq *ib_create_wq(struct ib_pd *pd,
3866                            struct ib_wq_init_attr *init_attr);
3867 int ib_destroy_wq(struct ib_wq *wq);
3868 int ib_modify_wq(struct ib_wq *wq, struct ib_wq_attr *attr,
3869                  u32 wq_attr_mask);
3870 struct ib_rwq_ind_table *ib_create_rwq_ind_table(struct ib_device *device,
3871                                                  struct ib_rwq_ind_table_init_attr*
3872                                                  wq_ind_table_init_attr);
3873 int ib_destroy_rwq_ind_table(struct ib_rwq_ind_table *wq_ind_table);
3874
3875 int ib_map_mr_sg(struct ib_mr *mr, struct scatterlist *sg, int sg_nents,
3876                  unsigned int *sg_offset, unsigned int page_size);
3877
3878 static inline int
3879 ib_map_mr_sg_zbva(struct ib_mr *mr, struct scatterlist *sg, int sg_nents,
3880                   unsigned int *sg_offset, unsigned int page_size)
3881 {
3882         int n;
3883
3884         n = ib_map_mr_sg(mr, sg, sg_nents, sg_offset, page_size);
3885         mr->iova = 0;
3886
3887         return n;
3888 }
3889
3890 int ib_sg_to_pages(struct ib_mr *mr, struct scatterlist *sgl, int sg_nents,
3891                 unsigned int *sg_offset, int (*set_page)(struct ib_mr *, u64));
3892
3893 void ib_drain_rq(struct ib_qp *qp);
3894 void ib_drain_sq(struct ib_qp *qp);
3895 void ib_drain_qp(struct ib_qp *qp);
3896
3897 int ib_get_eth_speed(struct ib_device *dev, u8 port_num, u8 *speed, u8 *width);
3898
3899 static inline u8 *rdma_ah_retrieve_dmac(struct rdma_ah_attr *attr)
3900 {
3901         if (attr->type == RDMA_AH_ATTR_TYPE_ROCE)
3902                 return attr->roce.dmac;
3903         return NULL;
3904 }
3905
3906 static inline void rdma_ah_set_dlid(struct rdma_ah_attr *attr, u32 dlid)
3907 {
3908         if (attr->type == RDMA_AH_ATTR_TYPE_IB)
3909                 attr->ib.dlid = (u16)dlid;
3910         else if (attr->type == RDMA_AH_ATTR_TYPE_OPA)
3911                 attr->opa.dlid = dlid;
3912 }
3913
3914 static inline u32 rdma_ah_get_dlid(const struct rdma_ah_attr *attr)
3915 {
3916         if (attr->type == RDMA_AH_ATTR_TYPE_IB)
3917                 return attr->ib.dlid;
3918         else if (attr->type == RDMA_AH_ATTR_TYPE_OPA)
3919                 return attr->opa.dlid;
3920         return 0;
3921 }
3922
3923 static inline void rdma_ah_set_sl(struct rdma_ah_attr *attr, u8 sl)
3924 {
3925         attr->sl = sl;
3926 }
3927
3928 static inline u8 rdma_ah_get_sl(const struct rdma_ah_attr *attr)
3929 {
3930         return attr->sl;
3931 }
3932
3933 static inline void rdma_ah_set_path_bits(struct rdma_ah_attr *attr,
3934                                          u8 src_path_bits)
3935 {
3936         if (attr->type == RDMA_AH_ATTR_TYPE_IB)
3937                 attr->ib.src_path_bits = src_path_bits;
3938         else if (attr->type == RDMA_AH_ATTR_TYPE_OPA)
3939                 attr->opa.src_path_bits = src_path_bits;
3940 }
3941
3942 static inline u8 rdma_ah_get_path_bits(const struct rdma_ah_attr *attr)
3943 {
3944         if (attr->type == RDMA_AH_ATTR_TYPE_IB)
3945                 return attr->ib.src_path_bits;
3946         else if (attr->type == RDMA_AH_ATTR_TYPE_OPA)
3947                 return attr->opa.src_path_bits;
3948         return 0;
3949 }
3950
3951 static inline void rdma_ah_set_make_grd(struct rdma_ah_attr *attr,
3952                                         bool make_grd)
3953 {
3954         if (attr->type == RDMA_AH_ATTR_TYPE_OPA)
3955                 attr->opa.make_grd = make_grd;
3956 }
3957
3958 static inline bool rdma_ah_get_make_grd(const struct rdma_ah_attr *attr)
3959 {
3960         if (attr->type == RDMA_AH_ATTR_TYPE_OPA)
3961                 return attr->opa.make_grd;
3962         return false;
3963 }
3964
3965 static inline void rdma_ah_set_port_num(struct rdma_ah_attr *attr, u8 port_num)
3966 {
3967         attr->port_num = port_num;
3968 }
3969
3970 static inline u8 rdma_ah_get_port_num(const struct rdma_ah_attr *attr)
3971 {
3972         return attr->port_num;
3973 }
3974
3975 static inline void rdma_ah_set_static_rate(struct rdma_ah_attr *attr,
3976                                            u8 static_rate)
3977 {
3978         attr->static_rate = static_rate;
3979 }
3980
3981 static inline u8 rdma_ah_get_static_rate(const struct rdma_ah_attr *attr)
3982 {
3983         return attr->static_rate;
3984 }
3985
3986 static inline void rdma_ah_set_ah_flags(struct rdma_ah_attr *attr,
3987                                         enum ib_ah_flags flag)
3988 {
3989         attr->ah_flags = flag;
3990 }
3991
3992 static inline enum ib_ah_flags
3993                 rdma_ah_get_ah_flags(const struct rdma_ah_attr *attr)
3994 {
3995         return attr->ah_flags;
3996 }
3997
3998 static inline const struct ib_global_route
3999                 *rdma_ah_read_grh(const struct rdma_ah_attr *attr)
4000 {
4001         return &attr->grh;
4002 }
4003
4004 /*To retrieve and modify the grh */
4005 static inline struct ib_global_route
4006                 *rdma_ah_retrieve_grh(struct rdma_ah_attr *attr)
4007 {
4008         return &attr->grh;
4009 }
4010
4011 static inline void rdma_ah_set_dgid_raw(struct rdma_ah_attr *attr, void *dgid)
4012 {
4013         struct ib_global_route *grh = rdma_ah_retrieve_grh(attr);
4014
4015         memcpy(grh->dgid.raw, dgid, sizeof(grh->dgid));
4016 }
4017
4018 static inline void rdma_ah_set_subnet_prefix(struct rdma_ah_attr *attr,
4019                                              __be64 prefix)
4020 {
4021         struct ib_global_route *grh = rdma_ah_retrieve_grh(attr);
4022
4023         grh->dgid.global.subnet_prefix = prefix;
4024 }
4025
4026 static inline void rdma_ah_set_interface_id(struct rdma_ah_attr *attr,
4027                                             __be64 if_id)
4028 {
4029         struct ib_global_route *grh = rdma_ah_retrieve_grh(attr);
4030
4031         grh->dgid.global.interface_id = if_id;
4032 }
4033
4034 static inline void rdma_ah_set_grh(struct rdma_ah_attr *attr,
4035                                    union ib_gid *dgid, u32 flow_label,
4036                                    u8 sgid_index, u8 hop_limit,
4037                                    u8 traffic_class)
4038 {
4039         struct ib_global_route *grh = rdma_ah_retrieve_grh(attr);
4040
4041         attr->ah_flags = IB_AH_GRH;
4042         if (dgid)
4043                 grh->dgid = *dgid;
4044         grh->flow_label = flow_label;
4045         grh->sgid_index = sgid_index;
4046         grh->hop_limit = hop_limit;
4047         grh->traffic_class = traffic_class;
4048         grh->sgid_attr = NULL;
4049 }
4050
4051 void rdma_destroy_ah_attr(struct rdma_ah_attr *ah_attr);
4052 void rdma_move_grh_sgid_attr(struct rdma_ah_attr *attr, union ib_gid *dgid,
4053                              u32 flow_label, u8 hop_limit, u8 traffic_class,
4054                              const struct ib_gid_attr *sgid_attr);
4055 void rdma_copy_ah_attr(struct rdma_ah_attr *dest,
4056                        const struct rdma_ah_attr *src);
4057 void rdma_replace_ah_attr(struct rdma_ah_attr *old,
4058                           const struct rdma_ah_attr *new);
4059 void rdma_move_ah_attr(struct rdma_ah_attr *dest, struct rdma_ah_attr *src);
4060
4061 /**
4062  * rdma_ah_find_type - Return address handle type.
4063  *
4064  * @dev: Device to be checked
4065  * @port_num: Port number
4066  */
4067 static inline enum rdma_ah_attr_type rdma_ah_find_type(struct ib_device *dev,
4068                                                        u8 port_num)
4069 {
4070         if (rdma_protocol_roce(dev, port_num))
4071                 return RDMA_AH_ATTR_TYPE_ROCE;
4072         if (rdma_protocol_ib(dev, port_num)) {
4073                 if (rdma_cap_opa_ah(dev, port_num))
4074                         return RDMA_AH_ATTR_TYPE_OPA;
4075                 return RDMA_AH_ATTR_TYPE_IB;
4076         }
4077
4078         return RDMA_AH_ATTR_TYPE_UNDEFINED;
4079 }
4080
4081 /**
4082  * ib_lid_cpu16 - Return lid in 16bit CPU encoding.
4083  *     In the current implementation the only way to get
4084  *     get the 32bit lid is from other sources for OPA.
4085  *     For IB, lids will always be 16bits so cast the
4086  *     value accordingly.
4087  *
4088  * @lid: A 32bit LID
4089  */
4090 static inline u16 ib_lid_cpu16(u32 lid)
4091 {
4092         WARN_ON_ONCE(lid & 0xFFFF0000);
4093         return (u16)lid;
4094 }
4095
4096 /**
4097  * ib_lid_be16 - Return lid in 16bit BE encoding.
4098  *
4099  * @lid: A 32bit LID
4100  */
4101 static inline __be16 ib_lid_be16(u32 lid)
4102 {
4103         WARN_ON_ONCE(lid & 0xFFFF0000);
4104         return cpu_to_be16((u16)lid);
4105 }
4106
4107 /**
4108  * ib_get_vector_affinity - Get the affinity mappings of a given completion
4109  *   vector
4110  * @device:         the rdma device
4111  * @comp_vector:    index of completion vector
4112  *
4113  * Returns NULL on failure, otherwise a corresponding cpu map of the
4114  * completion vector (returns all-cpus map if the device driver doesn't
4115  * implement get_vector_affinity).
4116  */
4117 static inline const struct cpumask *
4118 ib_get_vector_affinity(struct ib_device *device, int comp_vector)
4119 {
4120         if (comp_vector < 0 || comp_vector >= device->num_comp_vectors ||
4121             !device->get_vector_affinity)
4122                 return NULL;
4123
4124         return device->get_vector_affinity(device, comp_vector);
4125
4126 }
4127
4128 /**
4129  * rdma_roce_rescan_device - Rescan all of the network devices in the system
4130  * and add their gids, as needed, to the relevant RoCE devices.
4131  *
4132  * @device:         the rdma device
4133  */
4134 void rdma_roce_rescan_device(struct ib_device *ibdev);
4135
4136 struct ib_ucontext *ib_uverbs_get_ucontext(struct ib_uverbs_file *ufile);
4137
4138 #endif /* IB_VERBS_H */
This page took 0.270168 seconds and 4 git commands to generate.