Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/uapi/rdma/rdma_user_rxe.h
26288 views
1
/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR Linux-OpenIB) */
2
/*
3
* Copyright (c) 2016 Mellanox Technologies Ltd. All rights reserved.
4
*
5
* This software is available to you under a choice of one of two
6
* licenses. You may choose to be licensed under the terms of the GNU
7
* General Public License (GPL) Version 2, available from the file
8
* COPYING in the main directory of this source tree, or the
9
* OpenIB.org BSD license below:
10
*
11
* Redistribution and use in source and binary forms, with or
12
* without modification, are permitted provided that the following
13
* conditions are met:
14
*
15
* - Redistributions of source code must retain the above
16
* copyright notice, this list of conditions and the following
17
* disclaimer.
18
*
19
* - Redistributions in binary form must reproduce the above
20
* copyright notice, this list of conditions and the following
21
* disclaimer in the documentation and/or other materials
22
* provided with the distribution.
23
*
24
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
28
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
29
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
30
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
31
* SOFTWARE.
32
*/
33
34
#ifndef RDMA_USER_RXE_H
35
#define RDMA_USER_RXE_H
36
37
#include <linux/types.h>
38
#include <linux/socket.h>
39
#include <linux/in.h>
40
#include <linux/in6.h>
41
42
enum {
43
RXE_NETWORK_TYPE_IPV4 = 1,
44
RXE_NETWORK_TYPE_IPV6 = 2,
45
};
46
47
union rxe_gid {
48
__u8 raw[16];
49
struct {
50
__be64 subnet_prefix;
51
__be64 interface_id;
52
} global;
53
};
54
55
struct rxe_global_route {
56
union rxe_gid dgid;
57
__u32 flow_label;
58
__u8 sgid_index;
59
__u8 hop_limit;
60
__u8 traffic_class;
61
};
62
63
struct rxe_av {
64
__u8 port_num;
65
/* From RXE_NETWORK_TYPE_* */
66
__u8 network_type;
67
__u8 dmac[6];
68
struct rxe_global_route grh;
69
union {
70
struct sockaddr_in _sockaddr_in;
71
struct sockaddr_in6 _sockaddr_in6;
72
} sgid_addr, dgid_addr;
73
};
74
75
struct rxe_send_wr {
76
__aligned_u64 wr_id;
77
__u32 reserved;
78
__u32 opcode;
79
__u32 send_flags;
80
union {
81
__be32 imm_data;
82
__u32 invalidate_rkey;
83
} ex;
84
union {
85
struct {
86
__aligned_u64 remote_addr;
87
__u32 length;
88
__u32 rkey;
89
__u8 type;
90
__u8 level;
91
} flush;
92
struct {
93
__aligned_u64 remote_addr;
94
__u32 rkey;
95
__u32 reserved;
96
} rdma;
97
struct {
98
__aligned_u64 remote_addr;
99
__aligned_u64 compare_add;
100
__aligned_u64 swap;
101
__u32 rkey;
102
__u32 reserved;
103
} atomic;
104
struct {
105
__u32 remote_qpn;
106
__u32 remote_qkey;
107
__u16 pkey_index;
108
__u16 reserved;
109
__u32 ah_num;
110
__u32 pad[4];
111
struct rxe_av av;
112
} ud;
113
struct {
114
__aligned_u64 addr;
115
__aligned_u64 length;
116
__u32 mr_lkey;
117
__u32 mw_rkey;
118
__u32 rkey;
119
__u32 access;
120
} mw;
121
/* reg is only used by the kernel and is not part of the uapi */
122
#ifdef __KERNEL__
123
struct {
124
union {
125
struct ib_mr *mr;
126
__aligned_u64 reserved;
127
};
128
__u32 key;
129
__u32 access;
130
} reg;
131
#endif
132
} wr;
133
};
134
135
struct rxe_sge {
136
__aligned_u64 addr;
137
__u32 length;
138
__u32 lkey;
139
};
140
141
struct mminfo {
142
__aligned_u64 offset;
143
__u32 size;
144
__u32 pad;
145
};
146
147
struct rxe_dma_info {
148
__u32 length;
149
__u32 resid;
150
__u32 cur_sge;
151
__u32 num_sge;
152
__u32 sge_offset;
153
__u32 reserved;
154
union {
155
__DECLARE_FLEX_ARRAY(__u8, inline_data);
156
__DECLARE_FLEX_ARRAY(__u8, atomic_wr);
157
__DECLARE_FLEX_ARRAY(struct rxe_sge, sge);
158
};
159
};
160
161
struct rxe_send_wqe {
162
struct rxe_send_wr wr;
163
__u32 status;
164
__u32 state;
165
__aligned_u64 iova;
166
__u32 mask;
167
__u32 first_psn;
168
__u32 last_psn;
169
__u32 ack_length;
170
__u32 ssn;
171
__u32 has_rd_atomic;
172
struct rxe_dma_info dma;
173
};
174
175
struct rxe_recv_wqe {
176
__aligned_u64 wr_id;
177
__u32 reserved;
178
__u32 padding;
179
struct rxe_dma_info dma;
180
};
181
182
struct rxe_create_ah_resp {
183
__u32 ah_num;
184
__u32 reserved;
185
};
186
187
struct rxe_create_cq_resp {
188
struct mminfo mi;
189
};
190
191
struct rxe_resize_cq_resp {
192
struct mminfo mi;
193
};
194
195
struct rxe_create_qp_resp {
196
struct mminfo rq_mi;
197
struct mminfo sq_mi;
198
};
199
200
struct rxe_create_srq_resp {
201
struct mminfo mi;
202
__u32 srq_num;
203
__u32 reserved;
204
};
205
206
struct rxe_modify_srq_cmd {
207
__aligned_u64 mmap_info_addr;
208
};
209
210
/* This data structure is stored at the base of work and
211
* completion queues shared between user space and kernel space.
212
* It contains the producer and consumer indices. Is also
213
* contains a copy of the queue size parameters for user space
214
* to use but the kernel must use the parameters in the
215
* rxe_queue struct. For performance reasons arrange to have
216
* producer and consumer indices in separate cache lines
217
* the kernel should always mask the indices to avoid accessing
218
* memory outside of the data area
219
*/
220
struct rxe_queue_buf {
221
__u32 log2_elem_size;
222
__u32 index_mask;
223
__u32 pad_1[30];
224
__u32 producer_index;
225
__u32 pad_2[31];
226
__u32 consumer_index;
227
__u32 pad_3[31];
228
__u8 data[];
229
};
230
231
#endif /* RDMA_USER_RXE_H */
232
233