diff options
| author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-15 19:51:54 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-15 19:51:54 -0400 |
| commit | bc06cffdec85d487c77109dffcd2f285bdc502d3 (patch) | |
| tree | adc6e6398243da87e66c56102840597a329183a0 /include | |
| parent | d3502d7f25b22cfc9762bf1781faa9db1bb3be2e (diff) | |
| parent | 9413d7b8aa777dd1fc7db9563ce5e80d769fe7b5 (diff) | |
Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (166 commits)
[SCSI] ibmvscsi: convert to use the data buffer accessors
[SCSI] dc395x: convert to use the data buffer accessors
[SCSI] ncr53c8xx: convert to use the data buffer accessors
[SCSI] sym53c8xx: convert to use the data buffer accessors
[SCSI] ppa: coding police and printk levels
[SCSI] aic7xxx_old: remove redundant GFP_ATOMIC from kmalloc
[SCSI] i2o: remove redundant GFP_ATOMIC from kmalloc from device.c
[SCSI] remove the dead CYBERSTORMIII_SCSI option
[SCSI] don't build scsi_dma_{map,unmap} for !HAS_DMA
[SCSI] Clean up scsi_add_lun a bit
[SCSI] 53c700: Remove printk, which triggers because of low scsi clock on SNI RMs
[SCSI] sni_53c710: Cleanup
[SCSI] qla4xxx: Fix underrun/overrun conditions
[SCSI] megaraid_mbox: use mutex instead of semaphore
[SCSI] aacraid: add 51245, 51645 and 52245 adapters to documentation.
[SCSI] qla2xxx: update version to 8.02.00-k1.
[SCSI] qla2xxx: add support for NPIV
[SCSI] stex: use resid for xfer len information
[SCSI] Add Brownie 1200U3P to blacklist
[SCSI] scsi.c: convert to use the data buffer accessors
...
Diffstat (limited to 'include')
| -rw-r--r-- | include/scsi/iscsi_if.h | 34 | ||||
| -rw-r--r-- | include/scsi/libiscsi.h | 67 | ||||
| -rw-r--r-- | include/scsi/scsi_cmnd.h | 20 | ||||
| -rw-r--r-- | include/scsi/scsi_device.h | 2 | ||||
| -rw-r--r-- | include/scsi/scsi_host.h | 10 | ||||
| -rw-r--r-- | include/scsi/scsi_transport_fc.h | 186 | ||||
| -rw-r--r-- | include/scsi/scsi_transport_iscsi.h | 16 |
7 files changed, 284 insertions, 51 deletions
diff --git a/include/scsi/iscsi_if.h b/include/scsi/iscsi_if.h index 55ebf035e620..50e907f42048 100644 --- a/include/scsi/iscsi_if.h +++ b/include/scsi/iscsi_if.h | |||
| @@ -48,6 +48,7 @@ enum iscsi_uevent_e { | |||
| 48 | ISCSI_UEVENT_TRANSPORT_EP_DISCONNECT = UEVENT_BASE + 14, | 48 | ISCSI_UEVENT_TRANSPORT_EP_DISCONNECT = UEVENT_BASE + 14, |
| 49 | 49 | ||
| 50 | ISCSI_UEVENT_TGT_DSCVR = UEVENT_BASE + 15, | 50 | ISCSI_UEVENT_TGT_DSCVR = UEVENT_BASE + 15, |
| 51 | ISCSI_UEVENT_SET_HOST_PARAM = UEVENT_BASE + 16, | ||
| 51 | 52 | ||
| 52 | /* up events */ | 53 | /* up events */ |
| 53 | ISCSI_KEVENT_RECV_PDU = KEVENT_BASE + 1, | 54 | ISCSI_KEVENT_RECV_PDU = KEVENT_BASE + 1, |
| @@ -71,6 +72,8 @@ struct iscsi_uevent { | |||
| 71 | /* messages u -> k */ | 72 | /* messages u -> k */ |
| 72 | struct msg_create_session { | 73 | struct msg_create_session { |
| 73 | uint32_t initial_cmdsn; | 74 | uint32_t initial_cmdsn; |
| 75 | uint16_t cmds_max; | ||
| 76 | uint16_t queue_depth; | ||
| 74 | } c_session; | 77 | } c_session; |
| 75 | struct msg_destroy_session { | 78 | struct msg_destroy_session { |
| 76 | uint32_t sid; | 79 | uint32_t sid; |
| @@ -136,6 +139,11 @@ struct iscsi_uevent { | |||
| 136 | */ | 139 | */ |
| 137 | uint32_t enable; | 140 | uint32_t enable; |
| 138 | } tgt_dscvr; | 141 | } tgt_dscvr; |
| 142 | struct msg_set_host_param { | ||
| 143 | uint32_t host_no; | ||
| 144 | uint32_t param; /* enum iscsi_host_param */ | ||
| 145 | uint32_t len; | ||
| 146 | } set_host_param; | ||
| 139 | } u; | 147 | } u; |
| 140 | union { | 148 | union { |
| 141 | /* messages k -> u */ | 149 | /* messages k -> u */ |
| @@ -223,6 +231,11 @@ enum iscsi_param { | |||
| 223 | ISCSI_PARAM_CONN_PORT, | 231 | ISCSI_PARAM_CONN_PORT, |
| 224 | ISCSI_PARAM_CONN_ADDRESS, | 232 | ISCSI_PARAM_CONN_ADDRESS, |
| 225 | 233 | ||
| 234 | ISCSI_PARAM_USERNAME, | ||
| 235 | ISCSI_PARAM_USERNAME_IN, | ||
| 236 | ISCSI_PARAM_PASSWORD, | ||
| 237 | ISCSI_PARAM_PASSWORD_IN, | ||
| 238 | |||
| 226 | /* must always be last */ | 239 | /* must always be last */ |
| 227 | ISCSI_PARAM_MAX, | 240 | ISCSI_PARAM_MAX, |
| 228 | }; | 241 | }; |
| @@ -249,6 +262,24 @@ enum iscsi_param { | |||
| 249 | #define ISCSI_SESS_RECOVERY_TMO (1 << ISCSI_PARAM_SESS_RECOVERY_TMO) | 262 | #define ISCSI_SESS_RECOVERY_TMO (1 << ISCSI_PARAM_SESS_RECOVERY_TMO) |
| 250 | #define ISCSI_CONN_PORT (1 << ISCSI_PARAM_CONN_PORT) | 263 | #define ISCSI_CONN_PORT (1 << ISCSI_PARAM_CONN_PORT) |
| 251 | #define ISCSI_CONN_ADDRESS (1 << ISCSI_PARAM_CONN_ADDRESS) | 264 | #define ISCSI_CONN_ADDRESS (1 << ISCSI_PARAM_CONN_ADDRESS) |
| 265 | #define ISCSI_USERNAME (1 << ISCSI_PARAM_USERNAME) | ||
| 266 | #define ISCSI_USERNAME_IN (1 << ISCSI_PARAM_USERNAME_IN) | ||
| 267 | #define ISCSI_PASSWORD (1 << ISCSI_PARAM_PASSWORD) | ||
| 268 | #define ISCSI_PASSWORD_IN (1 << ISCSI_PARAM_PASSWORD_IN) | ||
| 269 | |||
| 270 | /* iSCSI HBA params */ | ||
| 271 | enum iscsi_host_param { | ||
| 272 | ISCSI_HOST_PARAM_HWADDRESS, | ||
| 273 | ISCSI_HOST_PARAM_INITIATOR_NAME, | ||
| 274 | ISCSI_HOST_PARAM_NETDEV_NAME, | ||
| 275 | ISCSI_HOST_PARAM_IPADDRESS, | ||
| 276 | ISCSI_HOST_PARAM_MAX, | ||
| 277 | }; | ||
| 278 | |||
| 279 | #define ISCSI_HOST_HWADDRESS (1 << ISCSI_HOST_PARAM_HWADDRESS) | ||
| 280 | #define ISCSI_HOST_INITIATOR_NAME (1 << ISCSI_HOST_PARAM_INITIATOR_NAME) | ||
| 281 | #define ISCSI_HOST_NETDEV_NAME (1 << ISCSI_HOST_PARAM_NETDEV_NAME) | ||
| 282 | #define ISCSI_HOST_IPADDRESS (1 << ISCSI_HOST_PARAM_IPADDRESS) | ||
| 252 | 283 | ||
| 253 | #define iscsi_ptr(_handle) ((void*)(unsigned long)_handle) | 284 | #define iscsi_ptr(_handle) ((void*)(unsigned long)_handle) |
| 254 | #define iscsi_handle(_ptr) ((uint64_t)(unsigned long)_ptr) | 285 | #define iscsi_handle(_ptr) ((uint64_t)(unsigned long)_ptr) |
| @@ -272,6 +303,9 @@ enum iscsi_param { | |||
| 272 | #define CAP_MULTI_CONN 0x40 | 303 | #define CAP_MULTI_CONN 0x40 |
| 273 | #define CAP_TEXT_NEGO 0x80 | 304 | #define CAP_TEXT_NEGO 0x80 |
| 274 | #define CAP_MARKERS 0x100 | 305 | #define CAP_MARKERS 0x100 |
| 306 | #define CAP_FW_DB 0x200 | ||
| 307 | #define CAP_SENDTARGETS_OFFLOAD 0x400 | ||
| 308 | #define CAP_DATA_PATH_OFFLOAD 0x800 | ||
| 275 | 309 | ||
| 276 | /* | 310 | /* |
| 277 | * These flags describes reason of stop_conn() call | 311 | * These flags describes reason of stop_conn() call |
diff --git a/include/scsi/libiscsi.h b/include/scsi/libiscsi.h index ea0816d4904d..3f631b08a1ab 100644 --- a/include/scsi/libiscsi.h +++ b/include/scsi/libiscsi.h | |||
| @@ -48,9 +48,8 @@ struct iscsi_nopin; | |||
| 48 | #define debug_scsi(fmt...) | 48 | #define debug_scsi(fmt...) |
| 49 | #endif | 49 | #endif |
| 50 | 50 | ||
| 51 | #define ISCSI_XMIT_CMDS_MAX 128 /* must be power of 2 */ | 51 | #define ISCSI_DEF_XMIT_CMDS_MAX 128 /* must be power of 2 */ |
| 52 | #define ISCSI_MGMT_CMDS_MAX 32 /* must be power of 2 */ | 52 | #define ISCSI_MGMT_CMDS_MAX 16 /* must be power of 2 */ |
| 53 | #define ISCSI_CONN_MAX 1 | ||
| 54 | 53 | ||
| 55 | #define ISCSI_MGMT_ITT_OFFSET 0xa00 | 54 | #define ISCSI_MGMT_ITT_OFFSET 0xa00 |
| 56 | 55 | ||
| @@ -73,6 +72,8 @@ struct iscsi_nopin; | |||
| 73 | #define ISCSI_AGE_SHIFT 28 | 72 | #define ISCSI_AGE_SHIFT 28 |
| 74 | #define ISCSI_AGE_MASK (0xf << ISCSI_AGE_SHIFT) | 73 | #define ISCSI_AGE_MASK (0xf << ISCSI_AGE_SHIFT) |
| 75 | 74 | ||
| 75 | #define ISCSI_ADDRESS_BUF_LEN 64 | ||
| 76 | |||
| 76 | struct iscsi_mgmt_task { | 77 | struct iscsi_mgmt_task { |
| 77 | /* | 78 | /* |
| 78 | * Becuae LLDs allocate their hdr differently, this is a pointer to | 79 | * Becuae LLDs allocate their hdr differently, this is a pointer to |
| @@ -80,7 +81,7 @@ struct iscsi_mgmt_task { | |||
| 80 | */ | 81 | */ |
| 81 | struct iscsi_hdr *hdr; | 82 | struct iscsi_hdr *hdr; |
| 82 | char *data; /* mgmt payload */ | 83 | char *data; /* mgmt payload */ |
| 83 | int data_count; /* counts data to be sent */ | 84 | unsigned data_count; /* counts data to be sent */ |
| 84 | uint32_t itt; /* this ITT */ | 85 | uint32_t itt; /* this ITT */ |
| 85 | void *dd_data; /* driver/transport data */ | 86 | void *dd_data; /* driver/transport data */ |
| 86 | struct list_head running; | 87 | struct list_head running; |
| @@ -90,6 +91,7 @@ enum { | |||
| 90 | ISCSI_TASK_COMPLETED, | 91 | ISCSI_TASK_COMPLETED, |
| 91 | ISCSI_TASK_PENDING, | 92 | ISCSI_TASK_PENDING, |
| 92 | ISCSI_TASK_RUNNING, | 93 | ISCSI_TASK_RUNNING, |
| 94 | ISCSI_TASK_ABORTING, | ||
| 93 | }; | 95 | }; |
| 94 | 96 | ||
| 95 | struct iscsi_cmd_task { | 97 | struct iscsi_cmd_task { |
| @@ -99,16 +101,14 @@ struct iscsi_cmd_task { | |||
| 99 | */ | 101 | */ |
| 100 | struct iscsi_cmd *hdr; | 102 | struct iscsi_cmd *hdr; |
| 101 | int itt; /* this ITT */ | 103 | int itt; /* this ITT */ |
| 102 | int datasn; /* DataSN */ | ||
| 103 | 104 | ||
| 104 | uint32_t unsol_datasn; | 105 | uint32_t unsol_datasn; |
| 105 | int imm_count; /* imm-data (bytes) */ | 106 | unsigned imm_count; /* imm-data (bytes) */ |
| 106 | int unsol_count; /* unsolicited (bytes)*/ | 107 | unsigned unsol_count; /* unsolicited (bytes)*/ |
| 107 | /* offset in unsolicited stream (bytes); */ | 108 | /* offset in unsolicited stream (bytes); */ |
| 108 | int unsol_offset; | 109 | unsigned unsol_offset; |
| 109 | int data_count; /* remaining Data-Out */ | 110 | unsigned data_count; /* remaining Data-Out */ |
| 110 | struct scsi_cmnd *sc; /* associated SCSI cmd*/ | 111 | struct scsi_cmnd *sc; /* associated SCSI cmd*/ |
| 111 | int total_length; | ||
| 112 | struct iscsi_conn *conn; /* used connection */ | 112 | struct iscsi_conn *conn; /* used connection */ |
| 113 | struct iscsi_mgmt_task *mtask; /* tmf mtask in progr */ | 113 | struct iscsi_mgmt_task *mtask; /* tmf mtask in progr */ |
| 114 | 114 | ||
| @@ -152,18 +152,11 @@ struct iscsi_conn { | |||
| 152 | struct iscsi_cmd_task *ctask; /* xmit ctask in progress */ | 152 | struct iscsi_cmd_task *ctask; /* xmit ctask in progress */ |
| 153 | 153 | ||
| 154 | /* xmit */ | 154 | /* xmit */ |
| 155 | struct kfifo *immqueue; /* immediate xmit queue */ | ||
| 156 | struct kfifo *mgmtqueue; /* mgmt (control) xmit queue */ | 155 | struct kfifo *mgmtqueue; /* mgmt (control) xmit queue */ |
| 157 | struct list_head mgmt_run_list; /* list of control tasks */ | 156 | struct list_head mgmt_run_list; /* list of control tasks */ |
| 158 | struct list_head xmitqueue; /* data-path cmd queue */ | 157 | struct list_head xmitqueue; /* data-path cmd queue */ |
| 159 | struct list_head run_list; /* list of cmds in progress */ | 158 | struct list_head run_list; /* list of cmds in progress */ |
| 160 | struct work_struct xmitwork; /* per-conn. xmit workqueue */ | 159 | struct work_struct xmitwork; /* per-conn. xmit workqueue */ |
| 161 | /* | ||
| 162 | * serializes connection xmit, access to kfifos: | ||
| 163 | * xmitqueue, immqueue, mgmtqueue | ||
| 164 | */ | ||
| 165 | struct mutex xmitmutex; | ||
| 166 | |||
| 167 | unsigned long suspend_tx; /* suspend Tx */ | 160 | unsigned long suspend_tx; /* suspend Tx */ |
| 168 | unsigned long suspend_rx; /* suspend Rx */ | 161 | unsigned long suspend_rx; /* suspend Rx */ |
| 169 | 162 | ||
| @@ -174,8 +167,8 @@ struct iscsi_conn { | |||
| 174 | int tmabort_state; /* see TMABORT_INITIAL, etc.*/ | 167 | int tmabort_state; /* see TMABORT_INITIAL, etc.*/ |
| 175 | 168 | ||
| 176 | /* negotiated params */ | 169 | /* negotiated params */ |
| 177 | int max_recv_dlength; /* initiator_max_recv_dsl*/ | 170 | unsigned max_recv_dlength; /* initiator_max_recv_dsl*/ |
| 178 | int max_xmit_dlength; /* target_max_recv_dsl */ | 171 | unsigned max_xmit_dlength; /* target_max_recv_dsl */ |
| 179 | int hdrdgst_en; | 172 | int hdrdgst_en; |
| 180 | int datadgst_en; | 173 | int datadgst_en; |
| 181 | int ifmarker_en; | 174 | int ifmarker_en; |
| @@ -183,6 +176,12 @@ struct iscsi_conn { | |||
| 183 | /* values userspace uses to id a conn */ | 176 | /* values userspace uses to id a conn */ |
| 184 | int persistent_port; | 177 | int persistent_port; |
| 185 | char *persistent_address; | 178 | char *persistent_address; |
| 179 | /* remote portal currently connected to */ | ||
| 180 | int portal_port; | ||
| 181 | char portal_address[ISCSI_ADDRESS_BUF_LEN]; | ||
| 182 | /* local address */ | ||
| 183 | int local_port; | ||
| 184 | char local_address[ISCSI_ADDRESS_BUF_LEN]; | ||
| 186 | 185 | ||
| 187 | /* MIB-statistics */ | 186 | /* MIB-statistics */ |
| 188 | uint64_t txdata_octets; | 187 | uint64_t txdata_octets; |
| @@ -213,18 +212,25 @@ struct iscsi_session { | |||
| 213 | 212 | ||
| 214 | /* configuration */ | 213 | /* configuration */ |
| 215 | int initial_r2t_en; | 214 | int initial_r2t_en; |
| 216 | int max_r2t; | 215 | unsigned max_r2t; |
| 217 | int imm_data_en; | 216 | int imm_data_en; |
| 218 | int first_burst; | 217 | unsigned first_burst; |
| 219 | int max_burst; | 218 | unsigned max_burst; |
| 220 | int time2wait; | 219 | int time2wait; |
| 221 | int time2retain; | 220 | int time2retain; |
| 222 | int pdu_inorder_en; | 221 | int pdu_inorder_en; |
| 223 | int dataseq_inorder_en; | 222 | int dataseq_inorder_en; |
| 224 | int erl; | 223 | int erl; |
| 225 | int tpgt; | 224 | int tpgt; |
| 225 | char *username; | ||
| 226 | char *username_in; | ||
| 227 | char *password; | ||
| 228 | char *password_in; | ||
| 226 | char *targetname; | 229 | char *targetname; |
| 227 | 230 | char *initiatorname; | |
| 231 | /* hw address or netdev iscsi connection is bound to */ | ||
| 232 | char *hwaddress; | ||
| 233 | char *netdev; | ||
| 228 | /* control data */ | 234 | /* control data */ |
| 229 | struct iscsi_transport *tt; | 235 | struct iscsi_transport *tt; |
| 230 | struct Scsi_Host *host; | 236 | struct Scsi_Host *host; |
| @@ -255,12 +261,22 @@ extern int iscsi_eh_host_reset(struct scsi_cmnd *sc); | |||
| 255 | extern int iscsi_queuecommand(struct scsi_cmnd *sc, | 261 | extern int iscsi_queuecommand(struct scsi_cmnd *sc, |
| 256 | void (*done)(struct scsi_cmnd *)); | 262 | void (*done)(struct scsi_cmnd *)); |
| 257 | 263 | ||
| 264 | |||
| 265 | /* | ||
| 266 | * iSCSI host helpers. | ||
| 267 | */ | ||
| 268 | extern int iscsi_host_set_param(struct Scsi_Host *shost, | ||
| 269 | enum iscsi_host_param param, char *buf, | ||
| 270 | int buflen); | ||
| 271 | extern int iscsi_host_get_param(struct Scsi_Host *shost, | ||
| 272 | enum iscsi_host_param param, char *buf); | ||
| 273 | |||
| 258 | /* | 274 | /* |
| 259 | * session management | 275 | * session management |
| 260 | */ | 276 | */ |
| 261 | extern struct iscsi_cls_session * | 277 | extern struct iscsi_cls_session * |
| 262 | iscsi_session_setup(struct iscsi_transport *, struct scsi_transport_template *, | 278 | iscsi_session_setup(struct iscsi_transport *, struct scsi_transport_template *, |
| 263 | int, int, uint32_t, uint32_t *); | 279 | uint16_t, uint16_t, int, int, uint32_t, uint32_t *); |
| 264 | extern void iscsi_session_teardown(struct iscsi_cls_session *); | 280 | extern void iscsi_session_teardown(struct iscsi_cls_session *); |
| 265 | extern struct iscsi_session *class_to_transport_session(struct iscsi_cls_session *); | 281 | extern struct iscsi_session *class_to_transport_session(struct iscsi_cls_session *); |
| 266 | extern void iscsi_session_recovery_timedout(struct iscsi_cls_session *); | 282 | extern void iscsi_session_recovery_timedout(struct iscsi_cls_session *); |
| @@ -289,8 +305,7 @@ extern int iscsi_conn_get_param(struct iscsi_cls_conn *cls_conn, | |||
| 289 | /* | 305 | /* |
| 290 | * pdu and task processing | 306 | * pdu and task processing |
| 291 | */ | 307 | */ |
| 292 | extern int iscsi_check_assign_cmdsn(struct iscsi_session *, | 308 | extern void iscsi_update_cmdsn(struct iscsi_session *, struct iscsi_nopin *); |
| 293 | struct iscsi_nopin *); | ||
| 294 | extern void iscsi_prep_unsolicit_data_pdu(struct iscsi_cmd_task *, | 309 | extern void iscsi_prep_unsolicit_data_pdu(struct iscsi_cmd_task *, |
| 295 | struct iscsi_data *hdr); | 310 | struct iscsi_data *hdr); |
| 296 | extern int iscsi_conn_send_pdu(struct iscsi_cls_conn *, struct iscsi_hdr *, | 311 | extern int iscsi_conn_send_pdu(struct iscsi_cls_conn *, struct iscsi_hdr *, |
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h index a2e0c1032491..53e170586c26 100644 --- a/include/scsi/scsi_cmnd.h +++ b/include/scsi/scsi_cmnd.h | |||
| @@ -135,4 +135,24 @@ extern void scsi_kunmap_atomic_sg(void *virt); | |||
| 135 | extern struct scatterlist *scsi_alloc_sgtable(struct scsi_cmnd *, gfp_t); | 135 | extern struct scatterlist *scsi_alloc_sgtable(struct scsi_cmnd *, gfp_t); |
| 136 | extern void scsi_free_sgtable(struct scatterlist *, int); | 136 | extern void scsi_free_sgtable(struct scatterlist *, int); |
| 137 | 137 | ||
| 138 | extern int scsi_dma_map(struct scsi_cmnd *cmd); | ||
| 139 | extern void scsi_dma_unmap(struct scsi_cmnd *cmd); | ||
| 140 | |||
| 141 | #define scsi_sg_count(cmd) ((cmd)->use_sg) | ||
| 142 | #define scsi_sglist(cmd) ((struct scatterlist *)(cmd)->request_buffer) | ||
| 143 | #define scsi_bufflen(cmd) ((cmd)->request_bufflen) | ||
| 144 | |||
| 145 | static inline void scsi_set_resid(struct scsi_cmnd *cmd, int resid) | ||
| 146 | { | ||
| 147 | cmd->resid = resid; | ||
| 148 | } | ||
| 149 | |||
| 150 | static inline int scsi_get_resid(struct scsi_cmnd *cmd) | ||
| 151 | { | ||
| 152 | return cmd->resid; | ||
| 153 | } | ||
| 154 | |||
| 155 | #define scsi_for_each_sg(cmd, sg, nseg, __i) \ | ||
| 156 | for (__i = 0, sg = scsi_sglist(cmd); __i < (nseg); __i++, (sg)++) | ||
| 157 | |||
| 138 | #endif /* _SCSI_SCSI_CMND_H */ | 158 | #endif /* _SCSI_SCSI_CMND_H */ |
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h index 2f3c5b8b1d6a..d5057bc338ff 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h | |||
| @@ -209,7 +209,6 @@ extern struct scsi_device *__scsi_add_device(struct Scsi_Host *, | |||
| 209 | extern int scsi_add_device(struct Scsi_Host *host, uint channel, | 209 | extern int scsi_add_device(struct Scsi_Host *host, uint channel, |
| 210 | uint target, uint lun); | 210 | uint target, uint lun); |
| 211 | extern void scsi_remove_device(struct scsi_device *); | 211 | extern void scsi_remove_device(struct scsi_device *); |
| 212 | extern int scsi_device_cancel(struct scsi_device *, int); | ||
| 213 | 212 | ||
| 214 | extern int scsi_device_get(struct scsi_device *); | 213 | extern int scsi_device_get(struct scsi_device *); |
| 215 | extern void scsi_device_put(struct scsi_device *); | 214 | extern void scsi_device_put(struct scsi_device *); |
| @@ -287,6 +286,7 @@ extern void scsi_target_block(struct device *); | |||
| 287 | extern void scsi_target_unblock(struct device *); | 286 | extern void scsi_target_unblock(struct device *); |
| 288 | extern void scsi_remove_target(struct device *); | 287 | extern void scsi_remove_target(struct device *); |
| 289 | extern void int_to_scsilun(unsigned int, struct scsi_lun *); | 288 | extern void int_to_scsilun(unsigned int, struct scsi_lun *); |
| 289 | extern int scsilun_to_int(struct scsi_lun *); | ||
| 290 | extern const char *scsi_device_state_name(enum scsi_device_state); | 290 | extern const char *scsi_device_state_name(enum scsi_device_state); |
| 291 | extern int scsi_is_sdev_device(const struct device *); | 291 | extern int scsi_is_sdev_device(const struct device *); |
| 292 | extern int scsi_is_target_device(const struct device *); | 292 | extern int scsi_is_target_device(const struct device *); |
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h index 68f461b7a835..ba07cf7c04ba 100644 --- a/include/scsi/scsi_host.h +++ b/include/scsi/scsi_host.h | |||
| @@ -339,12 +339,6 @@ struct scsi_host_template { | |||
| 339 | enum scsi_eh_timer_return (* eh_timed_out)(struct scsi_cmnd *); | 339 | enum scsi_eh_timer_return (* eh_timed_out)(struct scsi_cmnd *); |
| 340 | 340 | ||
| 341 | /* | 341 | /* |
| 342 | * suspend support | ||
| 343 | */ | ||
| 344 | int (*resume)(struct scsi_device *); | ||
| 345 | int (*suspend)(struct scsi_device *, pm_message_t state); | ||
| 346 | |||
| 347 | /* | ||
| 348 | * Name of proc directory | 342 | * Name of proc directory |
| 349 | */ | 343 | */ |
| 350 | char *proc_name; | 344 | char *proc_name; |
| @@ -677,6 +671,10 @@ struct Scsi_Host { | |||
| 677 | #define shost_printk(prefix, shost, fmt, a...) \ | 671 | #define shost_printk(prefix, shost, fmt, a...) \ |
| 678 | dev_printk(prefix, &(shost)->shost_gendev, fmt, ##a) | 672 | dev_printk(prefix, &(shost)->shost_gendev, fmt, ##a) |
| 679 | 673 | ||
| 674 | static inline void *shost_priv(struct Scsi_Host *shost) | ||
| 675 | { | ||
| 676 | return (void *)shost->hostdata; | ||
| 677 | } | ||
| 680 | 678 | ||
| 681 | int scsi_is_host_device(const struct device *); | 679 | int scsi_is_host_device(const struct device *); |
| 682 | 680 | ||
diff --git a/include/scsi/scsi_transport_fc.h b/include/scsi/scsi_transport_fc.h index 1e797308640a..a0d80bcaa93d 100644 --- a/include/scsi/scsi_transport_fc.h +++ b/include/scsi/scsi_transport_fc.h | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * FiberChannel transport specific attributes exported to sysfs. | 2 | * FiberChannel transport specific attributes exported to sysfs. |
| 3 | * | 3 | * |
| 4 | * Copyright (c) 2003 Silicon Graphics, Inc. All rights reserved. | 4 | * Copyright (c) 2003 Silicon Graphics, Inc. All rights reserved. |
| @@ -19,7 +19,7 @@ | |||
| 19 | * | 19 | * |
| 20 | * ======== | 20 | * ======== |
| 21 | * | 21 | * |
| 22 | * Copyright (C) 2004-2005 James Smart, Emulex Corporation | 22 | * Copyright (C) 2004-2007 James Smart, Emulex Corporation |
| 23 | * Rewrite for host, target, device, and remote port attributes, | 23 | * Rewrite for host, target, device, and remote port attributes, |
| 24 | * statistics, and service functions... | 24 | * statistics, and service functions... |
| 25 | * | 25 | * |
| @@ -62,8 +62,10 @@ enum fc_port_type { | |||
| 62 | FC_PORTTYPE_NLPORT, /* (Public) Loop w/ FLPort */ | 62 | FC_PORTTYPE_NLPORT, /* (Public) Loop w/ FLPort */ |
| 63 | FC_PORTTYPE_LPORT, /* (Private) Loop w/o FLPort */ | 63 | FC_PORTTYPE_LPORT, /* (Private) Loop w/o FLPort */ |
| 64 | FC_PORTTYPE_PTP, /* Point to Point w/ another NPort */ | 64 | FC_PORTTYPE_PTP, /* Point to Point w/ another NPort */ |
| 65 | FC_PORTTYPE_NPIV, /* VPORT based on NPIV */ | ||
| 65 | }; | 66 | }; |
| 66 | 67 | ||
| 68 | |||
| 67 | /* | 69 | /* |
| 68 | * fc_port_state: If you alter this, you also need to alter scsi_transport_fc.c | 70 | * fc_port_state: If you alter this, you also need to alter scsi_transport_fc.c |
| 69 | * (for the ascii descriptions). | 71 | * (for the ascii descriptions). |
| @@ -83,7 +85,26 @@ enum fc_port_state { | |||
| 83 | }; | 85 | }; |
| 84 | 86 | ||
| 85 | 87 | ||
| 86 | /* | 88 | /* |
| 89 | * fc_vport_state: If you alter this, you also need to alter | ||
| 90 | * scsi_transport_fc.c (for the ascii descriptions). | ||
| 91 | */ | ||
| 92 | enum fc_vport_state { | ||
| 93 | FC_VPORT_UNKNOWN, | ||
| 94 | FC_VPORT_ACTIVE, | ||
| 95 | FC_VPORT_DISABLED, | ||
| 96 | FC_VPORT_LINKDOWN, | ||
| 97 | FC_VPORT_INITIALIZING, | ||
| 98 | FC_VPORT_NO_FABRIC_SUPP, | ||
| 99 | FC_VPORT_NO_FABRIC_RSCS, | ||
| 100 | FC_VPORT_FABRIC_LOGOUT, | ||
| 101 | FC_VPORT_FABRIC_REJ_WWN, | ||
| 102 | FC_VPORT_FAILED, | ||
| 103 | }; | ||
| 104 | |||
| 105 | |||
| 106 | |||
| 107 | /* | ||
| 87 | * FC Classes of Service | 108 | * FC Classes of Service |
| 88 | * Note: values are not enumerated, as they can be "or'd" together | 109 | * Note: values are not enumerated, as they can be "or'd" together |
| 89 | * for reporting (e.g. report supported_classes). If you alter this list, | 110 | * for reporting (e.g. report supported_classes). If you alter this list, |
| @@ -96,7 +117,7 @@ enum fc_port_state { | |||
| 96 | #define FC_COS_CLASS4 0x10 | 117 | #define FC_COS_CLASS4 0x10 |
| 97 | #define FC_COS_CLASS6 0x40 | 118 | #define FC_COS_CLASS6 0x40 |
| 98 | 119 | ||
| 99 | /* | 120 | /* |
| 100 | * FC Port Speeds | 121 | * FC Port Speeds |
| 101 | * Note: values are not enumerated, as they can be "or'd" together | 122 | * Note: values are not enumerated, as they can be "or'd" together |
| 102 | * for reporting (e.g. report supported_speeds). If you alter this list, | 123 | * for reporting (e.g. report supported_speeds). If you alter this list, |
| @@ -124,16 +145,114 @@ enum fc_tgtid_binding_type { | |||
| 124 | }; | 145 | }; |
| 125 | 146 | ||
| 126 | /* | 147 | /* |
| 127 | * FC Remote Port Roles | 148 | * FC Port Roles |
| 128 | * Note: values are not enumerated, as they can be "or'd" together | 149 | * Note: values are not enumerated, as they can be "or'd" together |
| 129 | * for reporting (e.g. report roles). If you alter this list, | 150 | * for reporting (e.g. report roles). If you alter this list, |
| 130 | * you also need to alter scsi_transport_fc.c (for the ascii descriptions). | 151 | * you also need to alter scsi_transport_fc.c (for the ascii descriptions). |
| 131 | */ | 152 | */ |
| 132 | #define FC_RPORT_ROLE_UNKNOWN 0x00 | 153 | #define FC_PORT_ROLE_UNKNOWN 0x00 |
| 133 | #define FC_RPORT_ROLE_FCP_TARGET 0x01 | 154 | #define FC_PORT_ROLE_FCP_TARGET 0x01 |
| 134 | #define FC_RPORT_ROLE_FCP_INITIATOR 0x02 | 155 | #define FC_PORT_ROLE_FCP_INITIATOR 0x02 |
| 135 | #define FC_RPORT_ROLE_IP_PORT 0x04 | 156 | #define FC_PORT_ROLE_IP_PORT 0x04 |
| 157 | |||
| 158 | /* The following are for compatibility */ | ||
| 159 | #define FC_RPORT_ROLE_UNKNOWN FC_PORT_ROLE_UNKNOWN | ||
| 160 | #define FC_RPORT_ROLE_FCP_TARGET FC_PORT_ROLE_FCP_TARGET | ||
| 161 | #define FC_RPORT_ROLE_FCP_INITIATOR FC_PORT_ROLE_FCP_INITIATOR | ||
| 162 | #define FC_RPORT_ROLE_IP_PORT FC_PORT_ROLE_IP_PORT | ||
| 163 | |||
| 164 | |||
| 165 | /* Macro for use in defining Virtual Port attributes */ | ||
| 166 | #define FC_VPORT_ATTR(_name,_mode,_show,_store) \ | ||
| 167 | struct class_device_attribute class_device_attr_vport_##_name = \ | ||
| 168 | __ATTR(_name,_mode,_show,_store) | ||
| 169 | |||
| 170 | |||
| 171 | /* | ||
| 172 | * FC Virtual Port Attributes | ||
| 173 | * | ||
| 174 | * This structure exists for each FC port is a virtual FC port. Virtual | ||
| 175 | * ports share the physical link with the Physical port. Each virtual | ||
| 176 | * ports has a unique presense on the SAN, and may be instantiated via | ||
| 177 | * NPIV, Virtual Fabrics, or via additional ALPAs. As the vport is a | ||
| 178 | * unique presense, each vport has it's own view of the fabric, | ||
| 179 | * authentication priviledge, and priorities. | ||
| 180 | * | ||
| 181 | * A virtual port may support 1 or more FC4 roles. Typically it is a | ||
| 182 | * FCP Initiator. It could be a FCP Target, or exist sole for an IP over FC | ||
| 183 | * roles. FC port attributes for the vport will be reported on any | ||
| 184 | * fc_host class object allocated for an FCP Initiator. | ||
| 185 | * | ||
| 186 | * -- | ||
| 187 | * | ||
| 188 | * Fixed attributes are not expected to change. The driver is | ||
| 189 | * expected to set these values after receiving the fc_vport structure | ||
| 190 | * via the vport_create() call from the transport. | ||
| 191 | * The transport fully manages all get functions w/o driver interaction. | ||
| 192 | * | ||
| 193 | * Dynamic attributes are expected to change. The driver participates | ||
| 194 | * in all get/set operations via functions provided by the driver. | ||
| 195 | * | ||
| 196 | * Private attributes are transport-managed values. They are fully | ||
| 197 | * managed by the transport w/o driver interaction. | ||
| 198 | */ | ||
| 136 | 199 | ||
| 200 | #define FC_VPORT_SYMBOLIC_NAMELEN 64 | ||
| 201 | struct fc_vport { | ||
| 202 | /* Fixed Attributes */ | ||
| 203 | |||
| 204 | /* Dynamic Attributes */ | ||
| 205 | |||
| 206 | /* Private (Transport-managed) Attributes */ | ||
| 207 | enum fc_vport_state vport_state; | ||
| 208 | enum fc_vport_state vport_last_state; | ||
| 209 | u64 node_name; | ||
| 210 | u64 port_name; | ||
| 211 | u32 roles; | ||
| 212 | u32 vport_id; /* Admin Identifier for the vport */ | ||
| 213 | enum fc_port_type vport_type; | ||
| 214 | char symbolic_name[FC_VPORT_SYMBOLIC_NAMELEN]; | ||
| 215 | |||
| 216 | /* exported data */ | ||
| 217 | void *dd_data; /* Used for driver-specific storage */ | ||
| 218 | |||
| 219 | /* internal data */ | ||
| 220 | struct Scsi_Host *shost; /* Physical Port Parent */ | ||
| 221 | unsigned int channel; | ||
| 222 | u32 number; | ||
| 223 | u8 flags; | ||
| 224 | struct list_head peers; | ||
| 225 | struct device dev; | ||
| 226 | struct work_struct vport_delete_work; | ||
| 227 | } __attribute__((aligned(sizeof(unsigned long)))); | ||
| 228 | |||
| 229 | /* bit field values for struct fc_vport "flags" field: */ | ||
| 230 | #define FC_VPORT_CREATING 0x01 | ||
| 231 | #define FC_VPORT_DELETING 0x02 | ||
| 232 | #define FC_VPORT_DELETED 0x04 | ||
| 233 | #define FC_VPORT_DEL 0x06 /* Any DELETE state */ | ||
| 234 | |||
| 235 | #define dev_to_vport(d) \ | ||
| 236 | container_of(d, struct fc_vport, dev) | ||
| 237 | #define transport_class_to_vport(classdev) \ | ||
| 238 | dev_to_vport(classdev->dev) | ||
| 239 | #define vport_to_shost(v) \ | ||
| 240 | (v->shost) | ||
| 241 | #define vport_to_shost_channel(v) \ | ||
| 242 | (v->channel) | ||
| 243 | #define vport_to_parent(v) \ | ||
| 244 | (v->dev.parent) | ||
| 245 | |||
| 246 | |||
| 247 | /* Error return codes for vport_create() callback */ | ||
| 248 | #define VPCERR_UNSUPPORTED -ENOSYS /* no driver/adapter | ||
| 249 | support */ | ||
| 250 | #define VPCERR_BAD_WWN -ENOTUNIQ /* driver validation | ||
| 251 | of WWNs failed */ | ||
| 252 | #define VPCERR_NO_FABRIC_SUPP -EOPNOTSUPP /* Fabric connection | ||
| 253 | is loop or the | ||
| 254 | Fabric Port does | ||
| 255 | not support NPIV */ | ||
| 137 | 256 | ||
| 138 | /* | 257 | /* |
| 139 | * fc_rport_identifiers: This set of data contains all elements | 258 | * fc_rport_identifiers: This set of data contains all elements |
| @@ -149,6 +268,7 @@ struct fc_rport_identifiers { | |||
| 149 | u32 roles; | 268 | u32 roles; |
| 150 | }; | 269 | }; |
| 151 | 270 | ||
| 271 | |||
| 152 | /* Macro for use in defining Remote Port attributes */ | 272 | /* Macro for use in defining Remote Port attributes */ |
| 153 | #define FC_RPORT_ATTR(_name,_mode,_show,_store) \ | 273 | #define FC_RPORT_ATTR(_name,_mode,_show,_store) \ |
| 154 | struct class_device_attribute class_device_attr_rport_##_name = \ | 274 | struct class_device_attribute class_device_attr_rport_##_name = \ |
| @@ -278,7 +398,7 @@ struct fc_host_statistics { | |||
| 278 | u64 prim_seq_protocol_err_count; | 398 | u64 prim_seq_protocol_err_count; |
| 279 | u64 invalid_tx_word_count; | 399 | u64 invalid_tx_word_count; |
| 280 | u64 invalid_crc_count; | 400 | u64 invalid_crc_count; |
| 281 | 401 | ||
| 282 | /* fc4 statistics (only FCP supported currently) */ | 402 | /* fc4 statistics (only FCP supported currently) */ |
| 283 | u64 fcp_input_requests; | 403 | u64 fcp_input_requests; |
| 284 | u64 fcp_output_requests; | 404 | u64 fcp_output_requests; |
| @@ -343,6 +463,7 @@ struct fc_host_attrs { | |||
| 343 | u8 supported_fc4s[FC_FC4_LIST_SIZE]; | 463 | u8 supported_fc4s[FC_FC4_LIST_SIZE]; |
| 344 | u32 supported_speeds; | 464 | u32 supported_speeds; |
| 345 | u32 maxframe_size; | 465 | u32 maxframe_size; |
| 466 | u16 max_npiv_vports; | ||
| 346 | char serial_number[FC_SERIAL_NUMBER_SIZE]; | 467 | char serial_number[FC_SERIAL_NUMBER_SIZE]; |
| 347 | 468 | ||
| 348 | /* Dynamic Attributes */ | 469 | /* Dynamic Attributes */ |
| @@ -361,8 +482,11 @@ struct fc_host_attrs { | |||
| 361 | /* internal data */ | 482 | /* internal data */ |
| 362 | struct list_head rports; | 483 | struct list_head rports; |
| 363 | struct list_head rport_bindings; | 484 | struct list_head rport_bindings; |
| 485 | struct list_head vports; | ||
| 364 | u32 next_rport_number; | 486 | u32 next_rport_number; |
| 365 | u32 next_target_id; | 487 | u32 next_target_id; |
| 488 | u32 next_vport_number; | ||
| 489 | u16 npiv_vports_inuse; | ||
| 366 | 490 | ||
| 367 | /* work queues for rport state manipulation */ | 491 | /* work queues for rport state manipulation */ |
| 368 | char work_q_name[KOBJ_NAME_LEN]; | 492 | char work_q_name[KOBJ_NAME_LEN]; |
| @@ -388,6 +512,8 @@ struct fc_host_attrs { | |||
| 388 | (((struct fc_host_attrs *)(x)->shost_data)->supported_speeds) | 512 | (((struct fc_host_attrs *)(x)->shost_data)->supported_speeds) |
| 389 | #define fc_host_maxframe_size(x) \ | 513 | #define fc_host_maxframe_size(x) \ |
| 390 | (((struct fc_host_attrs *)(x)->shost_data)->maxframe_size) | 514 | (((struct fc_host_attrs *)(x)->shost_data)->maxframe_size) |
| 515 | #define fc_host_max_npiv_vports(x) \ | ||
| 516 | (((struct fc_host_attrs *)(x)->shost_data)->max_npiv_vports) | ||
| 391 | #define fc_host_serial_number(x) \ | 517 | #define fc_host_serial_number(x) \ |
| 392 | (((struct fc_host_attrs *)(x)->shost_data)->serial_number) | 518 | (((struct fc_host_attrs *)(x)->shost_data)->serial_number) |
| 393 | #define fc_host_port_id(x) \ | 519 | #define fc_host_port_id(x) \ |
| @@ -412,10 +538,16 @@ struct fc_host_attrs { | |||
| 412 | (((struct fc_host_attrs *)(x)->shost_data)->rports) | 538 | (((struct fc_host_attrs *)(x)->shost_data)->rports) |
| 413 | #define fc_host_rport_bindings(x) \ | 539 | #define fc_host_rport_bindings(x) \ |
| 414 | (((struct fc_host_attrs *)(x)->shost_data)->rport_bindings) | 540 | (((struct fc_host_attrs *)(x)->shost_data)->rport_bindings) |
| 541 | #define fc_host_vports(x) \ | ||
| 542 | (((struct fc_host_attrs *)(x)->shost_data)->vports) | ||
| 415 | #define fc_host_next_rport_number(x) \ | 543 | #define fc_host_next_rport_number(x) \ |
| 416 | (((struct fc_host_attrs *)(x)->shost_data)->next_rport_number) | 544 | (((struct fc_host_attrs *)(x)->shost_data)->next_rport_number) |
| 417 | #define fc_host_next_target_id(x) \ | 545 | #define fc_host_next_target_id(x) \ |
| 418 | (((struct fc_host_attrs *)(x)->shost_data)->next_target_id) | 546 | (((struct fc_host_attrs *)(x)->shost_data)->next_target_id) |
| 547 | #define fc_host_next_vport_number(x) \ | ||
| 548 | (((struct fc_host_attrs *)(x)->shost_data)->next_vport_number) | ||
| 549 | #define fc_host_npiv_vports_inuse(x) \ | ||
| 550 | (((struct fc_host_attrs *)(x)->shost_data)->npiv_vports_inuse) | ||
| 419 | #define fc_host_work_q_name(x) \ | 551 | #define fc_host_work_q_name(x) \ |
| 420 | (((struct fc_host_attrs *)(x)->shost_data)->work_q_name) | 552 | (((struct fc_host_attrs *)(x)->shost_data)->work_q_name) |
| 421 | #define fc_host_work_q(x) \ | 553 | #define fc_host_work_q(x) \ |
| @@ -452,14 +584,20 @@ struct fc_function_template { | |||
| 452 | void (*dev_loss_tmo_callbk)(struct fc_rport *); | 584 | void (*dev_loss_tmo_callbk)(struct fc_rport *); |
| 453 | void (*terminate_rport_io)(struct fc_rport *); | 585 | void (*terminate_rport_io)(struct fc_rport *); |
| 454 | 586 | ||
| 587 | void (*set_vport_symbolic_name)(struct fc_vport *); | ||
| 588 | int (*vport_create)(struct fc_vport *, bool); | ||
| 589 | int (*vport_disable)(struct fc_vport *, bool); | ||
| 590 | int (*vport_delete)(struct fc_vport *); | ||
| 591 | |||
| 455 | /* allocation lengths for host-specific data */ | 592 | /* allocation lengths for host-specific data */ |
| 456 | u32 dd_fcrport_size; | 593 | u32 dd_fcrport_size; |
| 594 | u32 dd_fcvport_size; | ||
| 457 | 595 | ||
| 458 | /* | 596 | /* |
| 459 | * The driver sets these to tell the transport class it | 597 | * The driver sets these to tell the transport class it |
| 460 | * wants the attributes displayed in sysfs. If the show_ flag | 598 | * wants the attributes displayed in sysfs. If the show_ flag |
| 461 | * is not set, the attribute will be private to the transport | 599 | * is not set, the attribute will be private to the transport |
| 462 | * class | 600 | * class |
| 463 | */ | 601 | */ |
| 464 | 602 | ||
| 465 | /* remote port fixed attributes */ | 603 | /* remote port fixed attributes */ |
| @@ -512,7 +650,7 @@ fc_remote_port_chkready(struct fc_rport *rport) | |||
| 512 | 650 | ||
| 513 | switch (rport->port_state) { | 651 | switch (rport->port_state) { |
| 514 | case FC_PORTSTATE_ONLINE: | 652 | case FC_PORTSTATE_ONLINE: |
| 515 | if (rport->roles & FC_RPORT_ROLE_FCP_TARGET) | 653 | if (rport->roles & FC_PORT_ROLE_FCP_TARGET) |
| 516 | result = 0; | 654 | result = 0; |
| 517 | else if (rport->flags & FC_RPORT_DEVLOSS_PENDING) | 655 | else if (rport->flags & FC_RPORT_DEVLOSS_PENDING) |
| 518 | result = DID_IMM_RETRY << 16; | 656 | result = DID_IMM_RETRY << 16; |
| @@ -549,6 +687,27 @@ static inline void u64_to_wwn(u64 inm, u8 *wwn) | |||
| 549 | wwn[7] = inm & 0xff; | 687 | wwn[7] = inm & 0xff; |
| 550 | } | 688 | } |
| 551 | 689 | ||
| 690 | /** | ||
| 691 | * fc_vport_set_state() - called to set a vport's state. Saves the old state, | ||
| 692 | * excepting the transitory states of initializing and sending the ELS | ||
| 693 | * traffic to instantiate the vport on the link. | ||
| 694 | * | ||
| 695 | * Assumes the driver has surrounded this with the proper locking to ensure | ||
| 696 | * a coherent state change. | ||
| 697 | * | ||
| 698 | * @vport: virtual port whose state is changing | ||
| 699 | * @new_state: new state | ||
| 700 | **/ | ||
| 701 | static inline void | ||
| 702 | fc_vport_set_state(struct fc_vport *vport, enum fc_vport_state new_state) | ||
| 703 | { | ||
| 704 | if ((new_state != FC_VPORT_UNKNOWN) && | ||
| 705 | (new_state != FC_VPORT_INITIALIZING)) | ||
| 706 | vport->vport_last_state = vport->vport_state; | ||
| 707 | vport->vport_state = new_state; | ||
| 708 | } | ||
| 709 | |||
| 710 | |||
| 552 | struct scsi_transport_template *fc_attach_transport( | 711 | struct scsi_transport_template *fc_attach_transport( |
| 553 | struct fc_function_template *); | 712 | struct fc_function_template *); |
| 554 | void fc_release_transport(struct scsi_transport_template *); | 713 | void fc_release_transport(struct scsi_transport_template *); |
| @@ -567,5 +726,6 @@ void fc_host_post_vendor_event(struct Scsi_Host *shost, u32 event_number, | |||
| 567 | * be sure to read the Vendor Type and ID formatting requirements | 726 | * be sure to read the Vendor Type and ID formatting requirements |
| 568 | * specified in scsi_netlink.h | 727 | * specified in scsi_netlink.h |
| 569 | */ | 728 | */ |
| 729 | int fc_vport_terminate(struct fc_vport *vport); | ||
| 570 | 730 | ||
| 571 | #endif /* SCSI_TRANSPORT_FC_H */ | 731 | #endif /* SCSI_TRANSPORT_FC_H */ |
diff --git a/include/scsi/scsi_transport_iscsi.h b/include/scsi/scsi_transport_iscsi.h index d5c218ddc527..706c0cd36c14 100644 --- a/include/scsi/scsi_transport_iscsi.h +++ b/include/scsi/scsi_transport_iscsi.h | |||
| @@ -79,7 +79,8 @@ struct iscsi_transport { | |||
| 79 | char *name; | 79 | char *name; |
| 80 | unsigned int caps; | 80 | unsigned int caps; |
| 81 | /* LLD sets this to indicate what values it can export to sysfs */ | 81 | /* LLD sets this to indicate what values it can export to sysfs */ |
| 82 | unsigned int param_mask; | 82 | uint64_t param_mask; |
| 83 | uint64_t host_param_mask; | ||
| 83 | struct scsi_host_template *host_template; | 84 | struct scsi_host_template *host_template; |
| 84 | /* LLD connection data size */ | 85 | /* LLD connection data size */ |
| 85 | int conndata_size; | 86 | int conndata_size; |
| @@ -89,7 +90,8 @@ struct iscsi_transport { | |||
| 89 | unsigned int max_conn; | 90 | unsigned int max_conn; |
| 90 | unsigned int max_cmd_len; | 91 | unsigned int max_cmd_len; |
| 91 | struct iscsi_cls_session *(*create_session) (struct iscsi_transport *it, | 92 | struct iscsi_cls_session *(*create_session) (struct iscsi_transport *it, |
| 92 | struct scsi_transport_template *t, uint32_t sn, uint32_t *hn); | 93 | struct scsi_transport_template *t, uint16_t, uint16_t, |
| 94 | uint32_t sn, uint32_t *hn); | ||
| 93 | void (*destroy_session) (struct iscsi_cls_session *session); | 95 | void (*destroy_session) (struct iscsi_cls_session *session); |
| 94 | struct iscsi_cls_conn *(*create_conn) (struct iscsi_cls_session *sess, | 96 | struct iscsi_cls_conn *(*create_conn) (struct iscsi_cls_session *sess, |
| 95 | uint32_t cid); | 97 | uint32_t cid); |
| @@ -105,14 +107,18 @@ struct iscsi_transport { | |||
| 105 | enum iscsi_param param, char *buf); | 107 | enum iscsi_param param, char *buf); |
| 106 | int (*get_session_param) (struct iscsi_cls_session *session, | 108 | int (*get_session_param) (struct iscsi_cls_session *session, |
| 107 | enum iscsi_param param, char *buf); | 109 | enum iscsi_param param, char *buf); |
| 110 | int (*get_host_param) (struct Scsi_Host *shost, | ||
| 111 | enum iscsi_host_param param, char *buf); | ||
| 112 | int (*set_host_param) (struct Scsi_Host *shost, | ||
| 113 | enum iscsi_host_param param, char *buf, | ||
| 114 | int buflen); | ||
| 108 | int (*send_pdu) (struct iscsi_cls_conn *conn, struct iscsi_hdr *hdr, | 115 | int (*send_pdu) (struct iscsi_cls_conn *conn, struct iscsi_hdr *hdr, |
| 109 | char *data, uint32_t data_size); | 116 | char *data, uint32_t data_size); |
| 110 | void (*get_stats) (struct iscsi_cls_conn *conn, | 117 | void (*get_stats) (struct iscsi_cls_conn *conn, |
| 111 | struct iscsi_stats *stats); | 118 | struct iscsi_stats *stats); |
| 112 | void (*init_cmd_task) (struct iscsi_cmd_task *ctask); | 119 | void (*init_cmd_task) (struct iscsi_cmd_task *ctask); |
| 113 | void (*init_mgmt_task) (struct iscsi_conn *conn, | 120 | void (*init_mgmt_task) (struct iscsi_conn *conn, |
| 114 | struct iscsi_mgmt_task *mtask, | 121 | struct iscsi_mgmt_task *mtask); |
| 115 | char *data, uint32_t data_size); | ||
| 116 | int (*xmit_cmd_task) (struct iscsi_conn *conn, | 122 | int (*xmit_cmd_task) (struct iscsi_conn *conn, |
| 117 | struct iscsi_cmd_task *ctask); | 123 | struct iscsi_cmd_task *ctask); |
| 118 | void (*cleanup_cmd_task) (struct iscsi_conn *conn, | 124 | void (*cleanup_cmd_task) (struct iscsi_conn *conn, |
| @@ -124,7 +130,7 @@ struct iscsi_transport { | |||
| 124 | uint64_t *ep_handle); | 130 | uint64_t *ep_handle); |
| 125 | int (*ep_poll) (uint64_t ep_handle, int timeout_ms); | 131 | int (*ep_poll) (uint64_t ep_handle, int timeout_ms); |
| 126 | void (*ep_disconnect) (uint64_t ep_handle); | 132 | void (*ep_disconnect) (uint64_t ep_handle); |
| 127 | int (*tgt_dscvr) (enum iscsi_tgt_dscvr type, uint32_t host_no, | 133 | int (*tgt_dscvr) (struct Scsi_Host *shost, enum iscsi_tgt_dscvr type, |
| 128 | uint32_t enable, struct sockaddr *dst_addr); | 134 | uint32_t enable, struct sockaddr *dst_addr); |
| 129 | }; | 135 | }; |
| 130 | 136 | ||
