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
scsi
srp.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2005 Cisco Systems. 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
* $Id$
33
*/
34
35
#ifndef SCSI_SRP_H
36
#define SCSI_SRP_H
37
38
/*
39
* Structures and constants for the SCSI RDMA Protocol (SRP) as
40
* defined by the INCITS T10 committee. This file was written using
41
* draft Revision 16a of the SRP standard.
42
*/
43
44
#include <linux/types.h>
45
46
enum
{
47
SRP_LOGIN_REQ
= 0x00,
48
SRP_TSK_MGMT
= 0x01,
49
SRP_CMD
= 0x02,
50
SRP_I_LOGOUT
= 0x03,
51
SRP_LOGIN_RSP
= 0xc0,
52
SRP_RSP
= 0xc1,
53
SRP_LOGIN_REJ
= 0xc2,
54
SRP_T_LOGOUT
= 0x80,
55
SRP_CRED_REQ
= 0x81,
56
SRP_AER_REQ
= 0x82,
57
SRP_CRED_RSP
= 0x41,
58
SRP_AER_RSP
= 0x42
59
};
60
61
enum
{
62
SRP_BUF_FORMAT_DIRECT
= 1 << 1,
63
SRP_BUF_FORMAT_INDIRECT
= 1 << 2
64
};
65
66
enum
{
67
SRP_NO_DATA_DESC
= 0,
68
SRP_DATA_DESC_DIRECT
= 1,
69
SRP_DATA_DESC_INDIRECT
= 2
70
};
71
72
enum
{
73
SRP_TSK_ABORT_TASK
= 0x01,
74
SRP_TSK_ABORT_TASK_SET
= 0x02,
75
SRP_TSK_CLEAR_TASK_SET
= 0x04,
76
SRP_TSK_LUN_RESET
= 0x08,
77
SRP_TSK_CLEAR_ACA
= 0x40
78
};
79
80
enum
srp_login_rej_reason
{
81
SRP_LOGIN_REJ_UNABLE_ESTABLISH_CHANNEL
= 0x00010000,
82
SRP_LOGIN_REJ_INSUFFICIENT_RESOURCES
= 0x00010001,
83
SRP_LOGIN_REJ_REQ_IT_IU_LENGTH_TOO_LARGE
= 0x00010002,
84
SRP_LOGIN_REJ_UNABLE_ASSOCIATE_CHANNEL
= 0x00010003,
85
SRP_LOGIN_REJ_UNSUPPORTED_DESCRIPTOR_FMT
= 0x00010004,
86
SRP_LOGIN_REJ_MULTI_CHANNEL_UNSUPPORTED
= 0x00010005,
87
SRP_LOGIN_REJ_CHANNEL_LIMIT_REACHED
= 0x00010006
88
};
89
90
enum
{
91
SRP_REV10_IB_IO_CLASS
= 0xff00,
92
SRP_REV16A_IB_IO_CLASS
= 0x0100
93
};
94
95
struct
srp_direct_buf
{
96
__be64
va
;
97
__be32
key
;
98
__be32
len
;
99
};
100
101
/*
102
* We need the packed attribute because the SRP spec puts the list of
103
* descriptors at an offset of 20, which is not aligned to the size of
104
* struct srp_direct_buf. The whole structure must be packed to avoid
105
* having the 20-byte structure padded to 24 bytes on 64-bit architectures.
106
*/
107
struct
srp_indirect_buf
{
108
struct
srp_direct_buf
table_desc
;
109
__be32
len
;
110
struct
srp_direct_buf
desc_list
[0];
111
}
__attribute__
((packed));
112
113
enum
{
114
SRP_MULTICHAN_SINGLE
= 0,
115
SRP_MULTICHAN_MULTI
= 1
116
};
117
118
struct
srp_login_req
{
119
u8
opcode
;
120
u8
reserved1
[7];
121
u64
tag
;
122
__be32
req_it_iu_len
;
123
u8
reserved2
[4];
124
__be16
req_buf_fmt
;
125
u8
req_flags
;
126
u8
reserved3
[5];
127
u8
initiator_port_id
[16];
128
u8
target_port_id
[16];
129
};
130
131
/*
132
* The SRP spec defines the size of the LOGIN_RSP structure to be 52
133
* bytes, so it needs to be packed to avoid having it padded to 56
134
* bytes on 64-bit architectures.
135
*/
136
struct
srp_login_rsp
{
137
u8
opcode
;
138
u8
reserved1
[3];
139
__be32
req_lim_delta
;
140
u64
tag
;
141
__be32
max_it_iu_len
;
142
__be32
max_ti_iu_len
;
143
__be16
buf_fmt
;
144
u8
rsp_flags
;
145
u8
reserved2
[25];
146
}
__attribute__
((packed));
147
148
struct
srp_login_rej
{
149
u8
opcode
;
150
u8
reserved1
[3];
151
__be32
reason
;
152
u64
tag
;
153
u8
reserved2
[8];
154
__be16
buf_fmt
;
155
u8
reserved3
[6];
156
};
157
158
struct
srp_i_logout
{
159
u8
opcode
;
160
u8
reserved
[7];
161
u64
tag
;
162
};
163
164
struct
srp_t_logout
{
165
u8
opcode
;
166
u8
sol_not
;
167
u8
reserved
[2];
168
__be32
reason
;
169
u64
tag
;
170
};
171
172
/*
173
* We need the packed attribute because the SRP spec only aligns the
174
* 8-byte LUN field to 4 bytes.
175
*/
176
struct
srp_tsk_mgmt
{
177
u8
opcode
;
178
u8
sol_not
;
179
u8
reserved1
[6];
180
u64
tag
;
181
u8
reserved2
[4];
182
__be64
lun
__attribute__
((packed));
183
u8
reserved3
[2];
184
u8
tsk_mgmt_func
;
185
u8
reserved4
;
186
u64
task_tag
;
187
u8
reserved5
[8];
188
};
189
190
/*
191
* We need the packed attribute because the SRP spec only aligns the
192
* 8-byte LUN field to 4 bytes.
193
*/
194
struct
srp_cmd
{
195
u8
opcode
;
196
u8
sol_not
;
197
u8
reserved1
[3];
198
u8
buf_fmt
;
199
u8
data_out_desc_cnt
;
200
u8
data_in_desc_cnt
;
201
u64
tag
;
202
u8
reserved2
[4];
203
__be64
lun
__attribute__
((packed));
204
u8
reserved3
;
205
u8
task_attr
;
206
u8
reserved4
;
207
u8
add_cdb_len
;
208
u8
cdb
[16];
209
u8
add_data
[0];
210
};
211
212
enum
{
213
SRP_RSP_FLAG_RSPVALID
= 1 << 0,
214
SRP_RSP_FLAG_SNSVALID
= 1 << 1,
215
SRP_RSP_FLAG_DOOVER
= 1 << 2,
216
SRP_RSP_FLAG_DOUNDER
= 1 << 3,
217
SRP_RSP_FLAG_DIOVER
= 1 << 4,
218
SRP_RSP_FLAG_DIUNDER
= 1 << 5
219
};
220
221
/*
222
* The SRP spec defines the size of the RSP structure to be 36 bytes,
223
* so it needs to be packed to avoid having it padded to 40 bytes on
224
* 64-bit architectures.
225
*/
226
struct
srp_rsp
{
227
u8
opcode
;
228
u8
sol_not
;
229
u8
reserved1
[2];
230
__be32
req_lim_delta
;
231
u64
tag
;
232
u8
reserved2
[2];
233
u8
flags
;
234
u8
status
;
235
__be32
data_out_res_cnt
;
236
__be32
data_in_res_cnt
;
237
__be32
sense_data_len
;
238
__be32
resp_data_len
;
239
u8
data
[0];
240
}
__attribute__
((packed));
241
242
struct
srp_cred_req
{
243
u8
opcode
;
244
u8
sol_not
;
245
u8
reserved
[2];
246
__be32
req_lim_delta
;
247
u64
tag
;
248
};
249
250
struct
srp_cred_rsp
{
251
u8
opcode
;
252
u8
reserved
[7];
253
u64
tag
;
254
};
255
256
/*
257
* The SRP spec defines the fixed portion of the AER_REQ structure to be
258
* 36 bytes, so it needs to be packed to avoid having it padded to 40 bytes
259
* on 64-bit architectures.
260
*/
261
struct
srp_aer_req
{
262
u8
opcode
;
263
u8
sol_not
;
264
u8
reserved
[2];
265
__be32
req_lim_delta
;
266
u64
tag
;
267
u32
reserved2
;
268
__be64
lun
;
269
__be32
sense_data_len
;
270
u32
reserved3
;
271
u8
sense_data
[0];
272
}
__attribute__
((packed));
273
274
struct
srp_aer_rsp
{
275
u8
opcode
;
276
u8
reserved
[7];
277
u64
tag
;
278
};
279
280
#endif
/* SCSI_SRP_H */
Generated on Thu Jan 10 2013 14:53:29 for Linux Kernel by
1.8.2