Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
mlx4
qp.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2007 Cisco Systems, Inc. All rights reserved.
3
*
4
* This software is available to you under a choice of one of two
5
* licenses. You may choose to be licensed under the terms of the GNU
6
* General Public License (GPL) Version 2, available from the file
7
* COPYING in the main directory of this source tree, or the
8
* OpenIB.org BSD license below:
9
*
10
* Redistribution and use in source and binary forms, with or
11
* without modification, are permitted provided that the following
12
* conditions are met:
13
*
14
* - Redistributions of source code must retain the above
15
* copyright notice, this list of conditions and the following
16
* disclaimer.
17
*
18
* - Redistributions in binary form must reproduce the above
19
* copyright notice, this list of conditions and the following
20
* disclaimer in the documentation and/or other materials
21
* provided with the distribution.
22
*
23
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30
* SOFTWARE.
31
*/
32
33
#ifndef MLX4_QP_H
34
#define MLX4_QP_H
35
36
#include <linux/types.h>
37
38
#include <
linux/mlx4/device.h
>
39
40
#define MLX4_INVALID_LKEY 0x100
41
42
enum
mlx4_qp_optpar
{
43
MLX4_QP_OPTPAR_ALT_ADDR_PATH
= 1 << 0,
44
MLX4_QP_OPTPAR_RRE
= 1 << 1,
45
MLX4_QP_OPTPAR_RAE
= 1 << 2,
46
MLX4_QP_OPTPAR_RWE
= 1 << 3,
47
MLX4_QP_OPTPAR_PKEY_INDEX
= 1 << 4,
48
MLX4_QP_OPTPAR_Q_KEY
= 1 << 5,
49
MLX4_QP_OPTPAR_RNR_TIMEOUT
= 1 << 6,
50
MLX4_QP_OPTPAR_PRIMARY_ADDR_PATH
= 1 << 7,
51
MLX4_QP_OPTPAR_SRA_MAX
= 1 << 8,
52
MLX4_QP_OPTPAR_RRA_MAX
= 1 << 9,
53
MLX4_QP_OPTPAR_PM_STATE
= 1 << 10,
54
MLX4_QP_OPTPAR_RETRY_COUNT
= 1 << 12,
55
MLX4_QP_OPTPAR_RNR_RETRY
= 1 << 13,
56
MLX4_QP_OPTPAR_ACK_TIMEOUT
= 1 << 14,
57
MLX4_QP_OPTPAR_SCHED_QUEUE
= 1 << 16,
58
MLX4_QP_OPTPAR_COUNTER_INDEX
= 1 << 20
59
};
60
61
enum
mlx4_qp_state
{
62
MLX4_QP_STATE_RST
= 0,
63
MLX4_QP_STATE_INIT
= 1,
64
MLX4_QP_STATE_RTR
= 2,
65
MLX4_QP_STATE_RTS
= 3,
66
MLX4_QP_STATE_SQER
= 4,
67
MLX4_QP_STATE_SQD
= 5,
68
MLX4_QP_STATE_ERR
= 6,
69
MLX4_QP_STATE_SQ_DRAINING
= 7,
70
MLX4_QP_NUM_STATE
71
};
72
73
enum
{
74
MLX4_QP_ST_RC
= 0x0,
75
MLX4_QP_ST_UC
= 0x1,
76
MLX4_QP_ST_RD
= 0x2,
77
MLX4_QP_ST_UD
= 0x3,
78
MLX4_QP_ST_XRC
= 0x6,
79
MLX4_QP_ST_MLX
= 0x7
80
};
81
82
enum
{
83
MLX4_QP_PM_MIGRATED
= 0x3,
84
MLX4_QP_PM_ARMED
= 0x0,
85
MLX4_QP_PM_REARM
= 0x1
86
};
87
88
enum
{
89
/* params1 */
90
MLX4_QP_BIT_SRE
= 1 << 15,
91
MLX4_QP_BIT_SWE
= 1 << 14,
92
MLX4_QP_BIT_SAE
= 1 << 13,
93
/* params2 */
94
MLX4_QP_BIT_RRE
= 1 << 15,
95
MLX4_QP_BIT_RWE
= 1 << 14,
96
MLX4_QP_BIT_RAE
= 1 << 13,
97
MLX4_QP_BIT_RIC
= 1 << 4,
98
};
99
100
enum
{
101
MLX4_RSS_HASH_XOR
= 0,
102
MLX4_RSS_HASH_TOP
= 1,
103
104
MLX4_RSS_UDP_IPV6
= 1 << 0,
105
MLX4_RSS_UDP_IPV4
= 1 << 1,
106
MLX4_RSS_TCP_IPV6
= 1 << 2,
107
MLX4_RSS_IPV6
= 1 << 3,
108
MLX4_RSS_TCP_IPV4
= 1 << 4,
109
MLX4_RSS_IPV4
= 1 << 5,
110
111
/* offset of mlx4_rss_context within mlx4_qp_context.pri_path */
112
MLX4_RSS_OFFSET_IN_QPC_PRI_PATH
= 0x24,
113
/* offset of being RSS indirection QP within mlx4_qp_context.flags */
114
MLX4_RSS_QPC_FLAG_OFFSET
= 13,
115
};
116
117
struct
mlx4_rss_context
{
118
__be32
base_qpn
;
119
__be32
default_qpn
;
120
u16
reserved
;
121
u8
hash_fn
;
122
u8
flags
;
123
__be32
rss_key
[10];
124
__be32
base_qpn_udp
;
125
};
126
127
struct
mlx4_qp_path
{
128
u8
fl
;
129
u8
reserved1
[1];
130
u8
disable_pkey_check
;
131
u8
pkey_index
;
132
u8
counter_index
;
133
u8
grh_mylmc
;
134
__be16
rlid
;
135
u8
ackto
;
136
u8
mgid_index
;
137
u8
static_rate
;
138
u8
hop_limit
;
139
__be32
tclass_flowlabel
;
140
u8
rgid
[16];
141
u8
sched_queue
;
142
u8
vlan_index
;
143
u8
feup
;
144
u8
reserved3
;
145
u8
reserved4
[2];
146
u8
dmac
[6];
147
};
148
149
struct
mlx4_qp_context
{
150
__be32
flags
;
151
__be32
pd
;
152
u8
mtu_msgmax
;
153
u8
rq_size_stride
;
154
u8
sq_size_stride
;
155
u8
rlkey
;
156
__be32
usr_page
;
157
__be32
local_qpn
;
158
__be32
remote_qpn
;
159
struct
mlx4_qp_path
pri_path
;
160
struct
mlx4_qp_path
alt_path
;
161
__be32
params1
;
162
u32
reserved1
;
163
__be32
next_send_psn
;
164
__be32
cqn_send
;
165
u32
reserved2
[2];
166
__be32
last_acked_psn
;
167
__be32
ssn
;
168
__be32
params2
;
169
__be32
rnr_nextrecvpsn
;
170
__be32
xrcd
;
171
__be32
cqn_recv
;
172
__be64
db_rec_addr
;
173
__be32
qkey
;
174
__be32
srqn
;
175
__be32
msn
;
176
__be16
rq_wqe_counter
;
177
__be16
sq_wqe_counter
;
178
u32
reserved3
[2];
179
__be32
param3
;
180
__be32
nummmcpeers_basemkey
;
181
u8
log_page_size
;
182
u8
reserved4
[2];
183
u8
mtt_base_addr_h
;
184
__be32
mtt_base_addr_l
;
185
u32
reserved5
[10];
186
};
187
188
/* Which firmware version adds support for NEC (NoErrorCompletion) bit */
189
#define MLX4_FW_VER_WQE_CTRL_NEC mlx4_fw_ver(2, 2, 232)
190
191
enum
{
192
MLX4_WQE_CTRL_NEC
= 1 << 29,
193
MLX4_WQE_CTRL_FENCE
= 1 << 6,
194
MLX4_WQE_CTRL_CQ_UPDATE
= 3 << 2,
195
MLX4_WQE_CTRL_SOLICITED
= 1 << 1,
196
MLX4_WQE_CTRL_IP_CSUM
= 1 << 4,
197
MLX4_WQE_CTRL_TCP_UDP_CSUM
= 1 << 5,
198
MLX4_WQE_CTRL_INS_VLAN
= 1 << 6,
199
MLX4_WQE_CTRL_STRONG_ORDER
= 1 << 7,
200
MLX4_WQE_CTRL_FORCE_LOOPBACK
= 1 << 0,
201
};
202
203
struct
mlx4_wqe_ctrl_seg
{
204
__be32
owner_opcode
;
205
__be16
vlan_tag
;
206
u8
ins_vlan
;
207
u8
fence_size
;
208
/*
209
* High 24 bits are SRC remote buffer; low 8 bits are flags:
210
* [7] SO (strong ordering)
211
* [5] TCP/UDP checksum
212
* [4] IP checksum
213
* [3:2] C (generate completion queue entry)
214
* [1] SE (solicited event)
215
* [0] FL (force loopback)
216
*/
217
union
{
218
__be32
srcrb_flags
;
219
__be16
srcrb_flags16
[2];
220
};
221
/*
222
* imm is immediate data for send/RDMA write w/ immediate;
223
* also invalidation key for send with invalidate; input
224
* modifier for WQEs on CCQs.
225
*/
226
__be32
imm
;
227
};
228
229
enum
{
230
MLX4_WQE_MLX_VL15
= 1 << 17,
231
MLX4_WQE_MLX_SLR
= 1 << 16
232
};
233
234
struct
mlx4_wqe_mlx_seg
{
235
u8
owner
;
236
u8
reserved1
[2];
237
u8
opcode
;
238
__be16
sched_prio
;
239
u8
reserved2
;
240
u8
size
;
241
/*
242
* [17] VL15
243
* [16] SLR
244
* [15:12] static rate
245
* [11:8] SL
246
* [4] ICRC
247
* [3:2] C
248
* [0] FL (force loopback)
249
*/
250
__be32
flags
;
251
__be16
rlid
;
252
u16
reserved3
;
253
};
254
255
struct
mlx4_wqe_datagram_seg
{
256
__be32
av
[8];
257
__be32
dqpn
;
258
__be32
qkey
;
259
__be16
vlan
;
260
u8
mac
[6];
261
};
262
263
struct
mlx4_wqe_lso_seg
{
264
__be32
mss_hdr_size
;
265
__be32
header
[0];
266
};
267
268
struct
mlx4_wqe_bind_seg
{
269
__be32
flags1
;
270
__be32
flags2
;
271
__be32
new_rkey
;
272
__be32
lkey
;
273
__be64
addr
;
274
__be64
length
;
275
};
276
277
enum
{
278
MLX4_WQE_FMR_PERM_LOCAL_READ
= 1 << 27,
279
MLX4_WQE_FMR_PERM_LOCAL_WRITE
= 1 << 28,
280
MLX4_WQE_FMR_PERM_REMOTE_READ
= 1 << 29,
281
MLX4_WQE_FMR_PERM_REMOTE_WRITE
= 1 << 30,
282
MLX4_WQE_FMR_PERM_ATOMIC
= 1 << 31
283
};
284
285
struct
mlx4_wqe_fmr_seg
{
286
__be32
flags
;
287
__be32
mem_key
;
288
__be64
buf_list
;
289
__be64
start_addr
;
290
__be64
reg_len
;
291
__be32
offset
;
292
__be32
page_size
;
293
u32
reserved
[2];
294
};
295
296
struct
mlx4_wqe_fmr_ext_seg
{
297
u8
flags
;
298
u8
reserved
;
299
__be16
app_mask
;
300
__be16
wire_app_tag
;
301
__be16
mem_app_tag
;
302
__be32
wire_ref_tag_base
;
303
__be32
mem_ref_tag_base
;
304
};
305
306
struct
mlx4_wqe_local_inval_seg
{
307
__be32
flags
;
308
u32
reserved1
;
309
__be32
mem_key
;
310
u32
reserved2
[2];
311
__be32
guest_id
;
312
__be64
pa
;
313
};
314
315
struct
mlx4_wqe_raddr_seg
{
316
__be64
raddr
;
317
__be32
rkey
;
318
u32
reserved
;
319
};
320
321
struct
mlx4_wqe_atomic_seg
{
322
__be64
swap_add
;
323
__be64
compare
;
324
};
325
326
struct
mlx4_wqe_masked_atomic_seg
{
327
__be64
swap_add
;
328
__be64
compare
;
329
__be64
swap_add_mask
;
330
__be64
compare_mask
;
331
};
332
333
struct
mlx4_wqe_data_seg
{
334
__be32
byte_count
;
335
__be32
lkey
;
336
__be64
addr
;
337
};
338
339
enum
{
340
MLX4_INLINE_ALIGN
= 64,
341
MLX4_INLINE_SEG
= 1 << 31,
342
};
343
344
struct
mlx4_wqe_inline_seg
{
345
__be32
byte_count
;
346
};
347
348
int
mlx4_qp_modify
(
struct
mlx4_dev
*
dev
,
struct
mlx4_mtt
*mtt,
349
enum
mlx4_qp_state
cur_state,
enum
mlx4_qp_state
new_state
,
350
struct
mlx4_qp_context
*
context
,
enum
mlx4_qp_optpar
optpar,
351
int
sqd_event,
struct
mlx4_qp
*qp);
352
353
int
mlx4_qp_query
(
struct
mlx4_dev
*
dev
,
struct
mlx4_qp
*qp,
354
struct
mlx4_qp_context
*
context
);
355
356
int
mlx4_qp_to_ready
(
struct
mlx4_dev
*
dev
,
struct
mlx4_mtt
*mtt,
357
struct
mlx4_qp_context
*
context
,
358
struct
mlx4_qp
*qp,
enum
mlx4_qp_state
*
qp_state
);
359
360
static
inline
struct
mlx4_qp
*__mlx4_qp_lookup(
struct
mlx4_dev
*
dev
,
u32
qpn
)
361
{
362
return
radix_tree_lookup
(&dev->
qp_table_tree
, qpn & (dev->
caps
.num_qps - 1));
363
}
364
365
void
mlx4_qp_remove
(
struct
mlx4_dev
*
dev
,
struct
mlx4_qp
*qp);
366
367
#endif
/* MLX4_QP_H */
Generated on Thu Jan 10 2013 14:51:59 for Linux Kernel by
1.8.2