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
s390
scsi
zfcp_def.h
Go to the documentation of this file.
1
/*
2
* zfcp device driver
3
*
4
* Global definitions for the zfcp device driver.
5
*
6
* Copyright IBM Corp. 2002, 2010
7
*/
8
9
#ifndef ZFCP_DEF_H
10
#define ZFCP_DEF_H
11
12
/*************************** INCLUDES *****************************************/
13
14
#include <
linux/init.h
>
15
#include <
linux/moduleparam.h
>
16
#include <
linux/major.h
>
17
#include <
linux/blkdev.h
>
18
#include <
linux/delay.h
>
19
#include <
linux/timer.h
>
20
#include <linux/slab.h>
21
#include <
linux/mempool.h
>
22
#include <
linux/syscalls.h
>
23
#include <
linux/scatterlist.h
>
24
#include <
linux/ioctl.h
>
25
#include <
scsi/fc/fc_fs.h
>
26
#include <
scsi/fc/fc_gs.h
>
27
#include <scsi/scsi.h>
28
#include <
scsi/scsi_tcq.h
>
29
#include <
scsi/scsi_cmnd.h
>
30
#include <
scsi/scsi_device.h
>
31
#include <
scsi/scsi_host.h
>
32
#include <
scsi/scsi_transport.h
>
33
#include <
scsi/scsi_transport_fc.h
>
34
#include <
scsi/scsi_bsg_fc.h
>
35
#include <
asm/ccwdev.h
>
36
#include <asm/debug.h>
37
#include <
asm/ebcdic.h
>
38
#include <asm/sysinfo.h>
39
#include "
zfcp_fsf.h
"
40
#include "
zfcp_fc.h
"
41
#include "
zfcp_qdio.h
"
42
43
struct
zfcp_reqlist
;
44
45
/********************* SCSI SPECIFIC DEFINES *********************************/
46
#define ZFCP_SCSI_ER_TIMEOUT (10*HZ)
47
48
/********************* FSF SPECIFIC DEFINES *********************************/
49
50
/* ATTENTION: value must not be used by hardware */
51
#define FSF_QTCB_UNSOLICITED_STATUS 0x6305
52
53
/* timeout value for "default timer" for fsf requests */
54
#define ZFCP_FSF_REQUEST_TIMEOUT (60*HZ)
55
56
/*************** ADAPTER/PORT/UNIT AND FSF_REQ STATUS FLAGS ******************/
57
58
/*
59
* Note, the leftmost status byte is common among adapter, port
60
* and unit
61
*/
62
#define ZFCP_COMMON_FLAGS 0xfff00000
63
64
/* common status bits */
65
#define ZFCP_STATUS_COMMON_RUNNING 0x40000000
66
#define ZFCP_STATUS_COMMON_ERP_FAILED 0x20000000
67
#define ZFCP_STATUS_COMMON_UNBLOCKED 0x10000000
68
#define ZFCP_STATUS_COMMON_OPEN 0x04000000
69
#define ZFCP_STATUS_COMMON_ERP_INUSE 0x01000000
70
#define ZFCP_STATUS_COMMON_ACCESS_DENIED 0x00800000
71
#define ZFCP_STATUS_COMMON_ACCESS_BOXED 0x00400000
72
#define ZFCP_STATUS_COMMON_NOESC 0x00200000
73
74
/* adapter status */
75
#define ZFCP_STATUS_ADAPTER_MB_ACT 0x00000001
76
#define ZFCP_STATUS_ADAPTER_QDIOUP 0x00000002
77
#define ZFCP_STATUS_ADAPTER_SIOSL_ISSUED 0x00000004
78
#define ZFCP_STATUS_ADAPTER_XCONFIG_OK 0x00000008
79
#define ZFCP_STATUS_ADAPTER_HOST_CON_INIT 0x00000010
80
#define ZFCP_STATUS_ADAPTER_SUSPENDED 0x00000040
81
#define ZFCP_STATUS_ADAPTER_ERP_PENDING 0x00000100
82
#define ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED 0x00000200
83
#define ZFCP_STATUS_ADAPTER_DATA_DIV_ENABLED 0x00000400
84
85
/* remote port status */
86
#define ZFCP_STATUS_PORT_PHYS_OPEN 0x00000001
87
#define ZFCP_STATUS_PORT_LINK_TEST 0x00000002
88
89
/* logical unit status */
90
#define ZFCP_STATUS_LUN_SHARED 0x00000004
91
#define ZFCP_STATUS_LUN_READONLY 0x00000008
92
93
/* FSF request status (this does not have a common part) */
94
#define ZFCP_STATUS_FSFREQ_ERROR 0x00000008
95
#define ZFCP_STATUS_FSFREQ_CLEANUP 0x00000010
96
#define ZFCP_STATUS_FSFREQ_ABORTSUCCEEDED 0x00000040
97
#define ZFCP_STATUS_FSFREQ_ABORTNOTNEEDED 0x00000080
98
#define ZFCP_STATUS_FSFREQ_TMFUNCFAILED 0x00000200
99
#define ZFCP_STATUS_FSFREQ_DISMISSED 0x00001000
100
101
/************************* STRUCTURE DEFINITIONS *****************************/
102
103
struct
zfcp_fsf_req
;
104
105
/* holds various memory pools of an adapter */
106
struct
zfcp_adapter_mempool
{
107
mempool_t
*
erp_req
;
108
mempool_t
*
gid_pn_req
;
109
mempool_t
*
scsi_req
;
110
mempool_t
*
scsi_abort
;
111
mempool_t
*
status_read_req
;
112
mempool_t
*
sr_data
;
113
mempool_t
*
gid_pn
;
114
mempool_t
*
qtcb_pool
;
115
};
116
117
struct
zfcp_erp_action
{
118
struct
list_head
list
;
119
int
action
;
/* requested action code */
120
struct
zfcp_adapter
*
adapter
;
/* device which should be recovered */
121
struct
zfcp_port
*
port
;
122
struct
scsi_device
*
sdev
;
123
u32
status
;
/* recovery status */
124
u32
step
;
/* active step of this erp action */
125
unsigned
long
fsf_req_id
;
126
struct
timer_list
timer
;
127
};
128
129
struct
fsf_latency_record
{
130
u32
min
;
131
u32
max
;
132
u64
sum
;
133
};
134
135
struct
latency_cont
{
136
struct
fsf_latency_record
channel
;
137
struct
fsf_latency_record
fabric
;
138
u64
counter
;
139
};
140
141
struct
zfcp_latencies
{
142
struct
latency_cont
read
;
143
struct
latency_cont
write
;
144
struct
latency_cont
cmd
;
145
spinlock_t
lock
;
146
};
147
148
struct
zfcp_adapter
{
149
struct
kref
ref
;
150
u64
peer_wwnn
;
/* P2P peer WWNN */
151
u64
peer_wwpn
;
/* P2P peer WWPN */
152
u32
peer_d_id
;
/* P2P peer D_ID */
153
struct
ccw_device
*
ccw_device
;
/* S/390 ccw device */
154
struct
zfcp_qdio
*
qdio
;
155
u32
hydra_version
;
/* Hydra version */
156
u32
fsf_lic_version
;
157
u32
adapter_features
;
/* FCP channel features */
158
u32
connection_features
;
/* host connection features */
159
u32
hardware_version
;
/* of FCP channel */
160
u16
timer_ticks
;
/* time int for a tick */
161
struct
Scsi_Host
*
scsi_host
;
/* Pointer to mid-layer */
162
struct
list_head
port_list
;
/* remote port list */
163
rwlock_t
port_list_lock
;
/* port list lock */
164
unsigned
long
req_no
;
/* unique FSF req number */
165
struct
zfcp_reqlist
*
req_list
;
166
u32
fsf_req_seq_no
;
/* FSF cmnd seq number */
167
rwlock_t
abort_lock
;
/* Protects against SCSI
168
stack abort/command
169
completion races */
170
atomic_t
stat_miss
;
/* # missing status reads*/
171
unsigned
int
stat_read_buf_num
;
172
struct
work_struct
stat_work
;
173
atomic_t
status
;
/* status of this adapter */
174
struct
list_head
erp_ready_head
;
/* error recovery for this
175
adapter/devices */
176
wait_queue_head_t
erp_ready_wq
;
177
struct
list_head
erp_running_head
;
178
rwlock_t
erp_lock
;
179
wait_queue_head_t
erp_done_wqh
;
180
struct
zfcp_erp_action
erp_action
;
/* pending error recovery */
181
atomic_t
erp_counter
;
182
u32
erp_total_count
;
/* total nr of enqueued erp
183
actions */
184
u32
erp_low_mem_count
;
/* nr of erp actions waiting
185
for memory */
186
struct
task_struct
*
erp_thread
;
187
struct
zfcp_fc_wka_ports *
gs
;
/* generic services */
188
struct
zfcp_dbf
*
dbf
;
/* debug traces */
189
struct
zfcp_adapter_mempool
pool
;
/* Adapter memory pools */
190
struct
fc_host_statistics
*
fc_stats
;
191
struct
fsf_qtcb_bottom_port
*
stats_reset_data
;
192
unsigned
long
stats_reset
;
193
struct
work_struct
scan_work
;
194
struct
work_struct
ns_up_work
;
195
struct
service_level
service_level
;
196
struct
workqueue_struct
*
work_queue
;
197
struct
device_dma_parameters
dma_parms
;
198
struct
zfcp_fc_events
events
;
199
};
200
201
struct
zfcp_port
{
202
struct
device
dev
;
203
struct
fc_rport
*
rport
;
/* rport of fc transport class */
204
struct
list_head
list
;
/* list of remote ports */
205
struct
zfcp_adapter
*
adapter
;
/* adapter used to access port */
206
struct
list_head
unit_list
;
/* head of logical unit list */
207
rwlock_t
unit_list_lock
;
/* unit list lock */
208
atomic_t
units
;
/* zfcp_unit count */
209
atomic_t
status
;
/* status of this remote port */
210
u64
wwnn
;
/* WWNN if known */
211
u64
wwpn
;
/* WWPN */
212
u32
d_id
;
/* D_ID */
213
u32
handle
;
/* handle assigned by FSF */
214
struct
zfcp_erp_action
erp_action
;
/* pending error recovery */
215
atomic_t
erp_counter
;
216
u32
maxframe_size
;
217
u32
supported_classes
;
218
struct
work_struct
gid_pn_work
;
219
struct
work_struct
test_link_work
;
220
struct
work_struct
rport_work
;
221
enum
{
RPORT_NONE
,
RPORT_ADD
,
RPORT_DEL
}
rport_task
;
222
unsigned
int
starget_id
;
223
};
224
237
struct
zfcp_unit
{
238
struct
device
dev
;
239
struct
list_head
list
;
240
struct
zfcp_port
*
port
;
241
u64
fcp_lun
;
242
struct
work_struct
scsi_work
;
243
};
244
254
struct
zfcp_scsi_dev
{
255
atomic_t
status
;
256
u32
lun_handle
;
257
struct
zfcp_erp_action
erp_action
;
258
atomic_t
erp_counter
;
259
struct
zfcp_latencies
latencies
;
260
struct
zfcp_port
*
port
;
261
};
262
267
static
inline
struct
zfcp_scsi_dev
*sdev_to_zfcp(
struct
scsi_device
*sdev)
268
{
269
return
scsi_transport_device_data(sdev);
270
}
271
276
static
inline
u64
zfcp_scsi_dev_lun(
struct
scsi_device
*sdev)
277
{
278
u64
fcp_lun
;
279
280
int_to_scsilun
(sdev->
lun
, (
struct
scsi_lun
*)&fcp_lun);
281
return
fcp_lun
;
282
}
283
302
struct
zfcp_fsf_req
{
303
struct
list_head
list
;
304
unsigned
long
req_id
;
305
struct
zfcp_adapter
*
adapter
;
306
struct
zfcp_qdio_req
qdio_req
;
307
struct
completion
completion
;
308
u32
status
;
309
u32
fsf_command
;
310
struct
fsf_qtcb
*
qtcb
;
311
u32
seq_no
;
312
void
*
data
;
313
struct
timer_list
timer
;
314
struct
zfcp_erp_action
*
erp_action
;
315
mempool_t
*
pool
;
316
unsigned
long
long
issued
;
317
void
(*
handler
)(
struct
zfcp_fsf_req
*);
318
};
319
320
static
inline
321
int
zfcp_adapter_multi_buffer_active(
struct
zfcp_adapter
*
adapter
)
322
{
323
return
atomic_read
(&adapter->
status
) &
ZFCP_STATUS_ADAPTER_MB_ACT
;
324
}
325
326
#endif
/* ZFCP_DEF_H */
Generated on Thu Jan 10 2013 14:18:24 for Linux Kernel by
1.8.2