aboutsummaryrefslogtreecommitdiffstats
path: root/include/scsi/scsi_transport_iscsi.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/scsi/scsi_transport_iscsi.h')
-rw-r--r--include/scsi/scsi_transport_iscsi.h47
1 files changed, 44 insertions, 3 deletions
diff --git a/include/scsi/scsi_transport_iscsi.h b/include/scsi/scsi_transport_iscsi.h
index bf8f52965675..5994bcc1b017 100644
--- a/include/scsi/scsi_transport_iscsi.h
+++ b/include/scsi/scsi_transport_iscsi.h
@@ -37,6 +37,8 @@ struct iscsi_cls_conn;
37struct iscsi_conn; 37struct iscsi_conn;
38struct iscsi_task; 38struct iscsi_task;
39struct sockaddr; 39struct sockaddr;
40struct iscsi_iface;
41struct bsg_job;
40 42
41/** 43/**
42 * struct iscsi_transport - iSCSI Transport template 44 * struct iscsi_transport - iSCSI Transport template
@@ -84,9 +86,7 @@ struct iscsi_transport {
84 struct module *owner; 86 struct module *owner;
85 char *name; 87 char *name;
86 unsigned int caps; 88 unsigned int caps;
87 /* LLD sets this to indicate what values it can export to sysfs */ 89
88 uint64_t param_mask;
89 uint64_t host_param_mask;
90 struct iscsi_cls_session *(*create_session) (struct iscsi_endpoint *ep, 90 struct iscsi_cls_session *(*create_session) (struct iscsi_endpoint *ep,
91 uint16_t cmds_max, uint16_t qdepth, 91 uint16_t cmds_max, uint16_t qdepth,
92 uint32_t sn); 92 uint32_t sn);
@@ -137,6 +137,13 @@ struct iscsi_transport {
137 int (*tgt_dscvr) (struct Scsi_Host *shost, enum iscsi_tgt_dscvr type, 137 int (*tgt_dscvr) (struct Scsi_Host *shost, enum iscsi_tgt_dscvr type,
138 uint32_t enable, struct sockaddr *dst_addr); 138 uint32_t enable, struct sockaddr *dst_addr);
139 int (*set_path) (struct Scsi_Host *shost, struct iscsi_path *params); 139 int (*set_path) (struct Scsi_Host *shost, struct iscsi_path *params);
140 int (*set_iface_param) (struct Scsi_Host *shost, void *data,
141 uint32_t len);
142 int (*get_iface_param) (struct iscsi_iface *iface,
143 enum iscsi_param_type param_type,
144 int param, char *buf);
145 mode_t (*attr_is_visible)(int param_type, int param);
146 int (*bsg_request)(struct bsg_job *job);
140}; 147};
141 148
142/* 149/*
@@ -150,6 +157,8 @@ extern int iscsi_unregister_transport(struct iscsi_transport *tt);
150 */ 157 */
151extern void iscsi_conn_error_event(struct iscsi_cls_conn *conn, 158extern void iscsi_conn_error_event(struct iscsi_cls_conn *conn,
152 enum iscsi_err error); 159 enum iscsi_err error);
160extern void iscsi_conn_login_event(struct iscsi_cls_conn *conn,
161 enum iscsi_conn_state state);
153extern int iscsi_recv_pdu(struct iscsi_cls_conn *conn, struct iscsi_hdr *hdr, 162extern int iscsi_recv_pdu(struct iscsi_cls_conn *conn, struct iscsi_hdr *hdr,
154 char *data, uint32_t data_size); 163 char *data, uint32_t data_size);
155 164
@@ -171,6 +180,9 @@ struct iscsi_cls_conn {
171#define iscsi_dev_to_conn(_dev) \ 180#define iscsi_dev_to_conn(_dev) \
172 container_of(_dev, struct iscsi_cls_conn, dev) 181 container_of(_dev, struct iscsi_cls_conn, dev)
173 182
183#define transport_class_to_conn(_cdev) \
184 iscsi_dev_to_conn(_cdev->parent)
185
174#define iscsi_conn_to_session(_conn) \ 186#define iscsi_conn_to_session(_conn) \
175 iscsi_dev_to_session(_conn->dev.parent) 187 iscsi_dev_to_session(_conn->dev.parent)
176 188
@@ -197,6 +209,7 @@ struct iscsi_cls_session {
197 struct delayed_work recovery_work; 209 struct delayed_work recovery_work;
198 210
199 unsigned int target_id; 211 unsigned int target_id;
212 bool ida_used;
200 213
201 int state; 214 int state;
202 int sid; /* session id */ 215 int sid; /* session id */
@@ -207,6 +220,9 @@ struct iscsi_cls_session {
207#define iscsi_dev_to_session(_dev) \ 220#define iscsi_dev_to_session(_dev) \
208 container_of(_dev, struct iscsi_cls_session, dev) 221 container_of(_dev, struct iscsi_cls_session, dev)
209 222
223#define transport_class_to_session(_cdev) \
224 iscsi_dev_to_session(_cdev->parent)
225
210#define iscsi_session_to_shost(_session) \ 226#define iscsi_session_to_shost(_session) \
211 dev_to_shost(_session->dev.parent) 227 dev_to_shost(_session->dev.parent)
212 228
@@ -216,8 +232,12 @@ struct iscsi_cls_session {
216struct iscsi_cls_host { 232struct iscsi_cls_host {
217 atomic_t nr_scans; 233 atomic_t nr_scans;
218 struct mutex mutex; 234 struct mutex mutex;
235 struct request_queue *bsg_q;
219}; 236};
220 237
238#define iscsi_job_to_shost(_job) \
239 dev_to_shost(_job->dev)
240
221extern void iscsi_host_for_each_session(struct Scsi_Host *shost, 241extern void iscsi_host_for_each_session(struct Scsi_Host *shost,
222 void (*fn)(struct iscsi_cls_session *)); 242 void (*fn)(struct iscsi_cls_session *));
223 243
@@ -228,6 +248,20 @@ struct iscsi_endpoint {
228 struct iscsi_cls_conn *conn; 248 struct iscsi_cls_conn *conn;
229}; 249};
230 250
251struct iscsi_iface {
252 struct device dev;
253 struct iscsi_transport *transport;
254 uint32_t iface_type; /* IPv4 or IPv6 */
255 uint32_t iface_num; /* iface number, 0 - n */
256 void *dd_data; /* LLD private data */
257};
258
259#define iscsi_dev_to_iface(_dev) \
260 container_of(_dev, struct iscsi_iface, dev)
261
262#define iscsi_iface_to_shost(_iface) \
263 dev_to_shost(_iface->dev.parent)
264
231/* 265/*
232 * session and connection functions that can be used by HW iSCSI LLDs 266 * session and connection functions that can be used by HW iSCSI LLDs
233 */ 267 */
@@ -238,6 +272,7 @@ struct iscsi_endpoint {
238 dev_printk(prefix, &(_cls_conn)->dev, fmt, ##a) 272 dev_printk(prefix, &(_cls_conn)->dev, fmt, ##a)
239 273
240extern int iscsi_session_chkready(struct iscsi_cls_session *session); 274extern int iscsi_session_chkready(struct iscsi_cls_session *session);
275extern int iscsi_is_session_online(struct iscsi_cls_session *session);
241extern struct iscsi_cls_session *iscsi_alloc_session(struct Scsi_Host *shost, 276extern struct iscsi_cls_session *iscsi_alloc_session(struct Scsi_Host *shost,
242 struct iscsi_transport *transport, int dd_size); 277 struct iscsi_transport *transport, int dd_size);
243extern int iscsi_add_session(struct iscsi_cls_session *session, 278extern int iscsi_add_session(struct iscsi_cls_session *session,
@@ -261,5 +296,11 @@ extern struct iscsi_endpoint *iscsi_create_endpoint(int dd_size);
261extern void iscsi_destroy_endpoint(struct iscsi_endpoint *ep); 296extern void iscsi_destroy_endpoint(struct iscsi_endpoint *ep);
262extern struct iscsi_endpoint *iscsi_lookup_endpoint(u64 handle); 297extern struct iscsi_endpoint *iscsi_lookup_endpoint(u64 handle);
263extern int iscsi_block_scsi_eh(struct scsi_cmnd *cmd); 298extern int iscsi_block_scsi_eh(struct scsi_cmnd *cmd);
299extern struct iscsi_iface *iscsi_create_iface(struct Scsi_Host *shost,
300 struct iscsi_transport *t,
301 uint32_t iface_type,
302 uint32_t iface_num, int dd_size);
303extern void iscsi_destroy_iface(struct iscsi_iface *iface);
304extern struct iscsi_iface *iscsi_lookup_iface(int handle);
264 305
265#endif 306#endif