diff options
Diffstat (limited to 'include/scsi/scsi_transport_iscsi.h')
-rw-r--r-- | include/scsi/scsi_transport_iscsi.h | 47 |
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; | |||
37 | struct iscsi_conn; | 37 | struct iscsi_conn; |
38 | struct iscsi_task; | 38 | struct iscsi_task; |
39 | struct sockaddr; | 39 | struct sockaddr; |
40 | struct iscsi_iface; | ||
41 | struct 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 | */ |
151 | extern void iscsi_conn_error_event(struct iscsi_cls_conn *conn, | 158 | extern void iscsi_conn_error_event(struct iscsi_cls_conn *conn, |
152 | enum iscsi_err error); | 159 | enum iscsi_err error); |
160 | extern void iscsi_conn_login_event(struct iscsi_cls_conn *conn, | ||
161 | enum iscsi_conn_state state); | ||
153 | extern int iscsi_recv_pdu(struct iscsi_cls_conn *conn, struct iscsi_hdr *hdr, | 162 | extern 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 { | |||
216 | struct iscsi_cls_host { | 232 | struct 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 | |||
221 | extern void iscsi_host_for_each_session(struct Scsi_Host *shost, | 241 | extern 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 | ||
251 | struct 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 | ||
240 | extern int iscsi_session_chkready(struct iscsi_cls_session *session); | 274 | extern int iscsi_session_chkready(struct iscsi_cls_session *session); |
275 | extern int iscsi_is_session_online(struct iscsi_cls_session *session); | ||
241 | extern struct iscsi_cls_session *iscsi_alloc_session(struct Scsi_Host *shost, | 276 | extern 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); |
243 | extern int iscsi_add_session(struct iscsi_cls_session *session, | 278 | extern int iscsi_add_session(struct iscsi_cls_session *session, |
@@ -261,5 +296,11 @@ extern struct iscsi_endpoint *iscsi_create_endpoint(int dd_size); | |||
261 | extern void iscsi_destroy_endpoint(struct iscsi_endpoint *ep); | 296 | extern void iscsi_destroy_endpoint(struct iscsi_endpoint *ep); |
262 | extern struct iscsi_endpoint *iscsi_lookup_endpoint(u64 handle); | 297 | extern struct iscsi_endpoint *iscsi_lookup_endpoint(u64 handle); |
263 | extern int iscsi_block_scsi_eh(struct scsi_cmnd *cmd); | 298 | extern int iscsi_block_scsi_eh(struct scsi_cmnd *cmd); |
299 | extern 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); | ||
303 | extern void iscsi_destroy_iface(struct iscsi_iface *iface); | ||
304 | extern struct iscsi_iface *iscsi_lookup_iface(int handle); | ||
264 | 305 | ||
265 | #endif | 306 | #endif |