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
drivers
infiniband
ulp
srp
ib_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
33
#ifndef IB_SRP_H
34
#define IB_SRP_H
35
36
#include <linux/types.h>
37
#include <linux/list.h>
38
#include <
linux/mutex.h
>
39
#include <
linux/scatterlist.h
>
40
41
#include <
scsi/scsi_host.h
>
42
#include <
scsi/scsi_cmnd.h
>
43
44
#include <
rdma/ib_verbs.h
>
45
#include <
rdma/ib_sa.h
>
46
#include <
rdma/ib_cm.h
>
47
#include <
rdma/ib_fmr_pool.h
>
48
49
enum
{
50
SRP_PATH_REC_TIMEOUT_MS
= 1000,
51
SRP_ABORT_TIMEOUT_MS
= 5000,
52
53
SRP_PORT_REDIRECT
= 1,
54
SRP_DLID_REDIRECT
= 2,
55
SRP_STALE_CONN
= 3,
56
57
SRP_MAX_LUN
= 512,
58
SRP_DEF_SG_TABLESIZE
= 12,
59
60
SRP_RQ_SHIFT
= 6,
61
SRP_RQ_SIZE
= 1 <<
SRP_RQ_SHIFT
,
62
63
SRP_SQ_SIZE
=
SRP_RQ_SIZE
,
64
SRP_RSP_SQ_SIZE
= 1,
65
SRP_REQ_SQ_SIZE
=
SRP_SQ_SIZE
-
SRP_RSP_SQ_SIZE
,
66
SRP_TSK_MGMT_SQ_SIZE
= 1,
67
SRP_CMD_SQ_SIZE
=
SRP_REQ_SQ_SIZE
-
SRP_TSK_MGMT_SQ_SIZE
,
68
69
SRP_TAG_NO_REQ
= ~0
U
,
70
SRP_TAG_TSK_MGMT
= 1
U
<< 31,
71
72
SRP_FMR_SIZE
= 512,
73
SRP_FMR_MIN_SIZE
= 128,
74
SRP_FMR_POOL_SIZE
= 1024,
75
SRP_FMR_DIRTY_SIZE
=
SRP_FMR_POOL_SIZE
/ 4,
76
77
SRP_MAP_ALLOW_FMR
= 0,
78
SRP_MAP_NO_FMR
= 1,
79
};
80
81
enum
srp_target_state
{
82
SRP_TARGET_LIVE
,
83
SRP_TARGET_CONNECTING
,
84
SRP_TARGET_DEAD
,
85
SRP_TARGET_REMOVED
86
};
87
88
enum
srp_iu_type
{
89
SRP_IU_CMD
,
90
SRP_IU_TSK_MGMT
,
91
SRP_IU_RSP
,
92
};
93
94
struct
srp_device
{
95
struct
list_head
dev_list
;
96
struct
ib_device
*
dev
;
97
struct
ib_pd
*
pd
;
98
struct
ib_mr
*
mr
;
99
struct
ib_fmr_pool
*
fmr_pool
;
100
u64
fmr_page_mask
;
101
int
fmr_page_size
;
102
int
fmr_max_size
;
103
};
104
105
struct
srp_host
{
106
struct
srp_device
*
srp_dev
;
107
u8
port
;
108
struct
device
dev
;
109
struct
list_head
target_list
;
110
spinlock_t
target_lock
;
111
struct
completion
released
;
112
struct
list_head
list
;
113
};
114
115
struct
srp_request
{
116
struct
list_head
list
;
117
struct
scsi_cmnd
*
scmnd
;
118
struct
srp_iu
*
cmd
;
119
struct
ib_pool_fmr
**
fmr_list
;
120
u64
*
map_page
;
121
struct
srp_direct_buf
*
indirect_desc
;
122
dma_addr_t
indirect_dma_addr
;
123
short
nfmr
;
124
short
index
;
125
};
126
127
struct
srp_target_port
{
128
/* These are RW in the hot path, and commonly used together */
129
struct
list_head
free_tx
;
130
struct
list_head
free_reqs
;
131
spinlock_t
lock
;
132
s32
req_lim
;
133
134
/* These are read-only in the hot path */
135
struct
ib_cq
*send_cq
____cacheline_aligned_in_smp
;
136
struct
ib_cq
*
recv_cq
;
137
struct
ib_qp
*
qp
;
138
u32
lkey
;
139
u32
rkey
;
140
enum
srp_target_state
state
;
141
unsigned
int
max_iu_len
;
142
unsigned
int
cmd_sg_cnt
;
143
unsigned
int
indirect_size
;
144
bool
allow_ext_sg
;
145
146
/* Everything above this point is used in the hot path of
147
* command processing. Try to keep them packed into cachelines.
148
*/
149
150
__be64
id_ext
;
151
__be64
ioc_guid
;
152
__be64
service_id
;
153
__be64
initiator_ext
;
154
u16
io_class
;
155
struct
srp_host
*
srp_host
;
156
struct
Scsi_Host
*
scsi_host
;
157
char
target_name
[32];
158
unsigned
int
scsi_id
;
159
unsigned
int
sg_tablesize
;
160
161
struct
ib_sa_path_rec
path
;
162
__be16
orig_dgid
[8];
163
struct
ib_sa_query
*
path_query
;
164
int
path_query_id
;
165
166
struct
ib_cm_id
*
cm_id
;
167
168
int
max_ti_iu_len
;
169
170
int
zero_req_lim
;
171
172
struct
srp_iu
*
tx_ring
[
SRP_SQ_SIZE
];
173
struct
srp_iu
*
rx_ring
[
SRP_RQ_SIZE
];
174
struct
srp_request
req_ring
[
SRP_CMD_SQ_SIZE
];
175
176
struct
work_struct
work
;
177
178
struct
list_head
list
;
179
struct
completion
done
;
180
int
status
;
181
int
qp_in_error
;
182
183
struct
completion
tsk_mgmt_done
;
184
u8
tsk_mgmt_status
;
185
};
186
187
struct
srp_iu
{
188
struct
list_head
list
;
189
u64
dma
;
190
void
*
buf
;
191
size_t
size
;
192
enum
dma_data_direction
direction
;
193
};
194
195
struct
srp_map_state
{
196
struct
ib_pool_fmr
**
next_fmr
;
197
struct
srp_direct_buf
*
desc
;
198
u64
*
pages
;
199
dma_addr_t
base_dma_addr
;
200
u32
fmr_len
;
201
u32
total_len
;
202
unsigned
int
npages
;
203
unsigned
int
nfmr
;
204
unsigned
int
ndesc
;
205
struct
scatterlist
*
unmapped_sg
;
206
int
unmapped_index
;
207
dma_addr_t
unmapped_addr
;
208
};
209
210
#endif
/* IB_SRP_H */
Generated on Thu Jan 10 2013 13:38:43 for Linux Kernel by
1.8.2