0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef ZFCP_DEF_H
0011 #define ZFCP_DEF_H
0012
0013
0014
0015 #include <linux/init.h>
0016 #include <linux/moduleparam.h>
0017 #include <linux/major.h>
0018 #include <linux/blkdev.h>
0019 #include <linux/delay.h>
0020 #include <linux/timer.h>
0021 #include <linux/slab.h>
0022 #include <linux/mempool.h>
0023 #include <linux/syscalls.h>
0024 #include <linux/scatterlist.h>
0025 #include <linux/ioctl.h>
0026 #include <scsi/fc/fc_fs.h>
0027 #include <scsi/fc/fc_gs.h>
0028 #include <scsi/scsi.h>
0029 #include <scsi/scsi_tcq.h>
0030 #include <scsi/scsi_cmnd.h>
0031 #include <scsi/scsi_device.h>
0032 #include <scsi/scsi_host.h>
0033 #include <scsi/scsi_transport.h>
0034 #include <scsi/scsi_transport_fc.h>
0035 #include <scsi/scsi_bsg_fc.h>
0036 #include <asm/ccwdev.h>
0037 #include <asm/debug.h>
0038 #include <asm/ebcdic.h>
0039 #include <asm/sysinfo.h>
0040 #include "zfcp_fsf.h"
0041 #include "zfcp_fc.h"
0042 #include "zfcp_qdio.h"
0043
0044
0045
0046
0047 #define FSF_QTCB_UNSOLICITED_STATUS 0x6305
0048
0049
0050
0051
0052
0053
0054
0055 #define ZFCP_COMMON_FLAGS 0xfff00000
0056
0057
0058 #define ZFCP_STATUS_COMMON_RUNNING 0x40000000
0059 #define ZFCP_STATUS_COMMON_ERP_FAILED 0x20000000
0060 #define ZFCP_STATUS_COMMON_UNBLOCKED 0x10000000
0061 #define ZFCP_STATUS_COMMON_OPEN 0x04000000
0062 #define ZFCP_STATUS_COMMON_ERP_INUSE 0x01000000
0063 #define ZFCP_STATUS_COMMON_ACCESS_DENIED 0x00800000
0064 #define ZFCP_STATUS_COMMON_ACCESS_BOXED 0x00400000
0065 #define ZFCP_STATUS_COMMON_NOESC 0x00200000
0066
0067
0068 #define ZFCP_STATUS_ADAPTER_MB_ACT 0x00000001
0069 #define ZFCP_STATUS_ADAPTER_QDIOUP 0x00000002
0070 #define ZFCP_STATUS_ADAPTER_SIOSL_ISSUED 0x00000004
0071 #define ZFCP_STATUS_ADAPTER_XCONFIG_OK 0x00000008
0072 #define ZFCP_STATUS_ADAPTER_HOST_CON_INIT 0x00000010
0073 #define ZFCP_STATUS_ADAPTER_ERP_PENDING 0x00000100
0074 #define ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED 0x00000200
0075 #define ZFCP_STATUS_ADAPTER_DATA_DIV_ENABLED 0x00000400
0076
0077
0078 #define ZFCP_STATUS_PORT_PHYS_OPEN 0x00000001
0079 #define ZFCP_STATUS_PORT_LINK_TEST 0x00000002
0080
0081
0082 #define ZFCP_STATUS_FSFREQ_ERROR 0x00000008
0083 #define ZFCP_STATUS_FSFREQ_CLEANUP 0x00000010
0084 #define ZFCP_STATUS_FSFREQ_ABORTSUCCEEDED 0x00000040
0085 #define ZFCP_STATUS_FSFREQ_ABORTNOTNEEDED 0x00000080
0086 #define ZFCP_STATUS_FSFREQ_TMFUNCFAILED 0x00000200
0087 #define ZFCP_STATUS_FSFREQ_DISMISSED 0x00001000
0088 #define ZFCP_STATUS_FSFREQ_XDATAINCOMPLETE 0x00020000
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103 enum zfcp_erp_act_type {
0104 ZFCP_ERP_ACTION_REOPEN_LUN = 1,
0105 ZFCP_ERP_ACTION_REOPEN_PORT = 2,
0106 ZFCP_ERP_ACTION_REOPEN_PORT_FORCED = 3,
0107 ZFCP_ERP_ACTION_REOPEN_ADAPTER = 4,
0108 };
0109
0110
0111
0112
0113
0114
0115 enum zfcp_erp_steps {
0116 ZFCP_ERP_STEP_UNINITIALIZED = 0x0000,
0117 ZFCP_ERP_STEP_PHYS_PORT_CLOSING = 0x0010,
0118 ZFCP_ERP_STEP_PORT_CLOSING = 0x0100,
0119 ZFCP_ERP_STEP_PORT_OPENING = 0x0800,
0120 ZFCP_ERP_STEP_LUN_CLOSING = 0x1000,
0121 ZFCP_ERP_STEP_LUN_OPENING = 0x2000,
0122 };
0123
0124 struct zfcp_erp_action {
0125 struct list_head list;
0126 enum zfcp_erp_act_type type;
0127 struct zfcp_adapter *adapter;
0128 struct zfcp_port *port;
0129 struct scsi_device *sdev;
0130 u32 status;
0131 enum zfcp_erp_steps step;
0132 unsigned long fsf_req_id;
0133 struct timer_list timer;
0134 };
0135
0136
0137 struct zfcp_adapter_mempool {
0138 mempool_t *erp_req;
0139 mempool_t *gid_pn_req;
0140 mempool_t *scsi_req;
0141 mempool_t *scsi_abort;
0142 mempool_t *status_read_req;
0143 mempool_t *sr_data;
0144 mempool_t *gid_pn;
0145 mempool_t *qtcb_pool;
0146 };
0147
0148 struct zfcp_adapter {
0149 struct kref ref;
0150 u64 peer_wwnn;
0151 u64 peer_wwpn;
0152 u32 peer_d_id;
0153 struct ccw_device *ccw_device;
0154 struct zfcp_qdio *qdio;
0155 u32 hydra_version;
0156 u32 fsf_lic_version;
0157 u32 adapter_features;
0158 u32 connection_features;
0159 u32 hardware_version;
0160 u32 fc_security_algorithms;
0161 u32 fc_security_algorithms_old;
0162 u16 timer_ticks;
0163 struct Scsi_Host *scsi_host;
0164 struct list_head port_list;
0165 rwlock_t port_list_lock;
0166 unsigned long req_no;
0167 struct zfcp_reqlist *req_list;
0168 u32 fsf_req_seq_no;
0169 rwlock_t abort_lock;
0170
0171
0172 atomic_t stat_miss;
0173 unsigned int stat_read_buf_num;
0174 struct work_struct stat_work;
0175 atomic_t status;
0176 struct list_head erp_ready_head;
0177
0178 wait_queue_head_t erp_ready_wq;
0179 struct list_head erp_running_head;
0180 rwlock_t erp_lock;
0181 wait_queue_head_t erp_done_wqh;
0182 struct zfcp_erp_action erp_action;
0183 atomic_t erp_counter;
0184 u32 erp_total_count;
0185
0186 u32 erp_low_mem_count;
0187
0188 struct task_struct *erp_thread;
0189 struct zfcp_fc_wka_ports *gs;
0190 struct zfcp_dbf *dbf;
0191 struct zfcp_adapter_mempool pool;
0192 struct fc_host_statistics *fc_stats;
0193 struct fsf_qtcb_bottom_port *stats_reset_data;
0194 unsigned long stats_reset;
0195 struct delayed_work scan_work;
0196 struct work_struct ns_up_work;
0197 struct service_level service_level;
0198 struct workqueue_struct *work_queue;
0199 struct device_dma_parameters dma_parms;
0200 struct zfcp_fc_events events;
0201 unsigned long next_port_scan;
0202 struct zfcp_diag_adapter *diagnostics;
0203 struct work_struct version_change_lost_work;
0204 };
0205
0206 struct zfcp_port {
0207 struct device dev;
0208 struct fc_rport *rport;
0209 struct list_head list;
0210 struct zfcp_adapter *adapter;
0211 struct list_head unit_list;
0212 rwlock_t unit_list_lock;
0213 atomic_t units;
0214 atomic_t status;
0215 u64 wwnn;
0216 u64 wwpn;
0217 u32 d_id;
0218 u32 handle;
0219 struct zfcp_erp_action erp_action;
0220 atomic_t erp_counter;
0221 u32 maxframe_size;
0222 u32 supported_classes;
0223 u32 connection_info;
0224 u32 connection_info_old;
0225 struct work_struct gid_pn_work;
0226 struct work_struct test_link_work;
0227 struct work_struct rport_work;
0228 enum { RPORT_NONE, RPORT_ADD, RPORT_DEL } rport_task;
0229 unsigned int starget_id;
0230 };
0231
0232 struct zfcp_latency_record {
0233 u32 min;
0234 u32 max;
0235 u64 sum;
0236 };
0237
0238 struct zfcp_latency_cont {
0239 struct zfcp_latency_record channel;
0240 struct zfcp_latency_record fabric;
0241 u64 counter;
0242 };
0243
0244 struct zfcp_latencies {
0245 struct zfcp_latency_cont read;
0246 struct zfcp_latency_cont write;
0247 struct zfcp_latency_cont cmd;
0248 spinlock_t lock;
0249 };
0250
0251
0252
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262
0263 struct zfcp_unit {
0264 struct device dev;
0265 struct list_head list;
0266 struct zfcp_port *port;
0267 u64 fcp_lun;
0268 struct work_struct scsi_work;
0269 };
0270
0271
0272
0273
0274
0275
0276
0277
0278
0279
0280 struct zfcp_scsi_dev {
0281 atomic_t status;
0282 u32 lun_handle;
0283 struct zfcp_erp_action erp_action;
0284 atomic_t erp_counter;
0285 struct zfcp_latencies latencies;
0286 struct zfcp_port *port;
0287 };
0288
0289
0290
0291
0292
0293 static inline struct zfcp_scsi_dev *sdev_to_zfcp(struct scsi_device *sdev)
0294 {
0295 return scsi_transport_device_data(sdev);
0296 }
0297
0298
0299
0300
0301
0302 static inline u64 zfcp_scsi_dev_lun(struct scsi_device *sdev)
0303 {
0304 u64 fcp_lun;
0305
0306 int_to_scsilun(sdev->lun, (struct scsi_lun *)&fcp_lun);
0307 return fcp_lun;
0308 }
0309
0310
0311
0312
0313
0314
0315
0316
0317
0318
0319
0320
0321
0322
0323
0324
0325
0326 struct zfcp_fsf_req {
0327 struct list_head list;
0328 unsigned long req_id;
0329 struct zfcp_adapter *adapter;
0330 struct zfcp_qdio_req qdio_req;
0331 struct completion completion;
0332 u32 status;
0333 struct fsf_qtcb *qtcb;
0334 void *data;
0335 struct timer_list timer;
0336 struct zfcp_erp_action *erp_action;
0337 mempool_t *pool;
0338 unsigned long long issued;
0339 void (*handler)(struct zfcp_fsf_req *);
0340 };
0341
0342 static inline
0343 int zfcp_adapter_multi_buffer_active(struct zfcp_adapter *adapter)
0344 {
0345 return atomic_read(&adapter->status) & ZFCP_STATUS_ADAPTER_MB_ACT;
0346 }
0347
0348 static inline bool zfcp_fsf_req_is_status_read_buffer(struct zfcp_fsf_req *req)
0349 {
0350 return req->qtcb == NULL;
0351 }
0352
0353 #endif