0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #ifndef IBMVSCSI_H
0017 #define IBMVSCSI_H
0018 #include <linux/types.h>
0019 #include <linux/list.h>
0020 #include <linux/completion.h>
0021 #include <linux/interrupt.h>
0022 #include <scsi/viosrp.h>
0023
0024 struct scsi_cmnd;
0025 struct Scsi_Host;
0026
0027
0028
0029
0030
0031 #define MAX_INDIRECT_BUFS 10
0032
0033 #define IBMVSCSI_MAX_REQUESTS_DEFAULT 100
0034 #define IBMVSCSI_CMDS_PER_LUN_DEFAULT 16
0035 #define IBMVSCSI_MAX_SECTORS_DEFAULT 256
0036 #define IBMVSCSI_MAX_CMDS_PER_LUN 64
0037 #define IBMVSCSI_MAX_LUN 32
0038
0039
0040
0041
0042
0043 struct crq_queue {
0044 struct viosrp_crq *msgs;
0045 int size, cur;
0046 dma_addr_t msg_token;
0047 spinlock_t lock;
0048 };
0049
0050
0051 struct srp_event_struct {
0052 union viosrp_iu *xfer_iu;
0053 struct scsi_cmnd *cmnd;
0054 struct list_head list;
0055 void (*done) (struct srp_event_struct *);
0056 struct viosrp_crq crq;
0057 struct ibmvscsi_host_data *hostdata;
0058 atomic_t free;
0059 union viosrp_iu iu;
0060 void (*cmnd_done) (struct scsi_cmnd *);
0061 struct completion comp;
0062 struct timer_list timer;
0063 union viosrp_iu *sync_srp;
0064 struct srp_direct_buf *ext_list;
0065 dma_addr_t ext_list_token;
0066 };
0067
0068
0069 struct event_pool {
0070 struct srp_event_struct *events;
0071 u32 size;
0072 int next;
0073 union viosrp_iu *iu_storage;
0074 dma_addr_t iu_token;
0075 };
0076
0077 enum ibmvscsi_host_action {
0078 IBMVSCSI_HOST_ACTION_NONE = 0,
0079 IBMVSCSI_HOST_ACTION_RESET,
0080 IBMVSCSI_HOST_ACTION_REENABLE,
0081 IBMVSCSI_HOST_ACTION_UNBLOCK,
0082 };
0083
0084
0085 struct ibmvscsi_host_data {
0086 struct list_head host_list;
0087 atomic_t request_limit;
0088 int client_migrated;
0089 enum ibmvscsi_host_action action;
0090 struct device *dev;
0091 struct event_pool pool;
0092 struct crq_queue queue;
0093 struct tasklet_struct srp_task;
0094 struct list_head sent;
0095 struct Scsi_Host *host;
0096 struct task_struct *work_thread;
0097 wait_queue_head_t work_wait_q;
0098 struct mad_adapter_info_data madapter_info;
0099 struct capabilities caps;
0100 dma_addr_t caps_addr;
0101 dma_addr_t adapter_info_addr;
0102 };
0103
0104 #endif