ib.h (664b0bae0b87f69bc9deb098f5e0158b9cf18e04) ib.h (eee2fa6ab3225192d6d894c54a6fb02ac9efdff6)
1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _RDS_IB_H
3#define _RDS_IB_H
4
5#include <rdma/ib_verbs.h>
6#include <rdma/rdma_cm.h>
7#include <linux/interrupt.h>
8#include <linux/pci.h>

--- 43 unchanged lines hidden (view full) ---

52};
53
54struct rds_ib_refill_cache {
55 struct rds_ib_cache_head __percpu *percpu;
56 struct list_head *xfer;
57 struct list_head *ready;
58};
59
1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _RDS_IB_H
3#define _RDS_IB_H
4
5#include <rdma/ib_verbs.h>
6#include <rdma/rdma_cm.h>
7#include <linux/interrupt.h>
8#include <linux/pci.h>

--- 43 unchanged lines hidden (view full) ---

52};
53
54struct rds_ib_refill_cache {
55 struct rds_ib_cache_head __percpu *percpu;
56 struct list_head *xfer;
57 struct list_head *ready;
58};
59
60/* This is the common structure for the IB private data exchange in setting up
61 * an RDS connection. The exchange is different for IPv4 and IPv6 connections.
62 * The reason is that the address size is different and the addresses
63 * exchanged are in the beginning of the structure. Hence it is not possible
64 * for interoperability if same structure is used.
65 */
66struct rds_ib_conn_priv_cmn {
67 u8 ricpc_protocol_major;
68 u8 ricpc_protocol_minor;
69 __be16 ricpc_protocol_minor_mask; /* bitmask */
70 __be32 ricpc_reserved1;
71 __be64 ricpc_ack_seq;
72 __be32 ricpc_credit; /* non-zero enables flow ctl */
73};
74
60struct rds_ib_connect_private {
61 /* Add new fields at the end, and don't permute existing fields. */
75struct rds_ib_connect_private {
76 /* Add new fields at the end, and don't permute existing fields. */
62 __be32 dp_saddr;
63 __be32 dp_daddr;
64 u8 dp_protocol_major;
65 u8 dp_protocol_minor;
66 __be16 dp_protocol_minor_mask; /* bitmask */
67 __be32 dp_reserved1;
68 __be64 dp_ack_seq;
69 __be32 dp_credit; /* non-zero enables flow ctl */
77 __be32 dp_saddr;
78 __be32 dp_daddr;
79 struct rds_ib_conn_priv_cmn dp_cmn;
70};
71
80};
81
82struct rds6_ib_connect_private {
83 /* Add new fields at the end, and don't permute existing fields. */
84 struct in6_addr dp_saddr;
85 struct in6_addr dp_daddr;
86 struct rds_ib_conn_priv_cmn dp_cmn;
87};
88
89#define dp_protocol_major dp_cmn.ricpc_protocol_major
90#define dp_protocol_minor dp_cmn.ricpc_protocol_minor
91#define dp_protocol_minor_mask dp_cmn.ricpc_protocol_minor_mask
92#define dp_ack_seq dp_cmn.ricpc_ack_seq
93#define dp_credit dp_cmn.ricpc_credit
94
95union rds_ib_conn_priv {
96 struct rds_ib_connect_private ricp_v4;
97 struct rds6_ib_connect_private ricp_v6;
98};
99
72struct rds_ib_send_work {
73 void *s_op;
74 union {
75 struct ib_send_wr s_wr;
76 struct ib_rdma_wr s_rdma_wr;
77 struct ib_atomic_wr s_atomic_wr;
78 };
79 struct ib_sge s_sge[RDS_IB_MAX_SGE];

--- 266 unchanged lines hidden (view full) ---

346int rds_ib_conn_path_connect(struct rds_conn_path *cp);
347void rds_ib_conn_path_shutdown(struct rds_conn_path *cp);
348void rds_ib_state_change(struct sock *sk);
349int rds_ib_listen_init(void);
350void rds_ib_listen_stop(void);
351__printf(2, 3)
352void __rds_ib_conn_error(struct rds_connection *conn, const char *, ...);
353int rds_ib_cm_handle_connect(struct rdma_cm_id *cm_id,
100struct rds_ib_send_work {
101 void *s_op;
102 union {
103 struct ib_send_wr s_wr;
104 struct ib_rdma_wr s_rdma_wr;
105 struct ib_atomic_wr s_atomic_wr;
106 };
107 struct ib_sge s_sge[RDS_IB_MAX_SGE];

--- 266 unchanged lines hidden (view full) ---

374int rds_ib_conn_path_connect(struct rds_conn_path *cp);
375void rds_ib_conn_path_shutdown(struct rds_conn_path *cp);
376void rds_ib_state_change(struct sock *sk);
377int rds_ib_listen_init(void);
378void rds_ib_listen_stop(void);
379__printf(2, 3)
380void __rds_ib_conn_error(struct rds_connection *conn, const char *, ...);
381int rds_ib_cm_handle_connect(struct rdma_cm_id *cm_id,
354 struct rdma_cm_event *event);
355int rds_ib_cm_initiate_connect(struct rdma_cm_id *cm_id);
382 struct rdma_cm_event *event, bool isv6);
383int rds_ib_cm_initiate_connect(struct rdma_cm_id *cm_id, bool isv6);
356void rds_ib_cm_connect_complete(struct rds_connection *conn,
357 struct rdma_cm_event *event);
358
359
360#define rds_ib_conn_error(conn, fmt...) \
361 __rds_ib_conn_error(conn, KERN_WARNING "RDS/IB: " fmt)
362
363/* ib_rdma.c */
384void rds_ib_cm_connect_complete(struct rds_connection *conn,
385 struct rdma_cm_event *event);
386
387
388#define rds_ib_conn_error(conn, fmt...) \
389 __rds_ib_conn_error(conn, KERN_WARNING "RDS/IB: " fmt)
390
391/* ib_rdma.c */
364int rds_ib_update_ipaddr(struct rds_ib_device *rds_ibdev, __be32 ipaddr);
392int rds_ib_update_ipaddr(struct rds_ib_device *rds_ibdev,
393 struct in6_addr *ipaddr);
365void rds_ib_add_conn(struct rds_ib_device *rds_ibdev, struct rds_connection *conn);
366void rds_ib_remove_conn(struct rds_ib_device *rds_ibdev, struct rds_connection *conn);
367void rds_ib_destroy_nodev_conns(void);
368void rds_ib_mr_cqe_handler(struct rds_ib_connection *ic, struct ib_wc *wc);
369
370/* ib_recv.c */
371int rds_ib_recv_init(void);
372void rds_ib_recv_exit(void);

--- 62 unchanged lines hidden ---
394void rds_ib_add_conn(struct rds_ib_device *rds_ibdev, struct rds_connection *conn);
395void rds_ib_remove_conn(struct rds_ib_device *rds_ibdev, struct rds_connection *conn);
396void rds_ib_destroy_nodev_conns(void);
397void rds_ib_mr_cqe_handler(struct rds_ib_connection *ic, struct ib_wc *wc);
398
399/* ib_recv.c */
400int rds_ib_recv_init(void);
401void rds_ib_recv_exit(void);

--- 62 unchanged lines hidden ---