diff options
Diffstat (limited to 'include/target')
-rw-r--r-- | include/target/target_core_base.h | 71 | ||||
-rw-r--r-- | include/target/target_core_tmr.h | 2 | ||||
-rw-r--r-- | include/target/target_core_transport.h | 75 |
3 files changed, 36 insertions, 112 deletions
diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h index 27040653005..35aa786f93d 100644 --- a/include/target/target_core_base.h +++ b/include/target/target_core_base.h | |||
@@ -10,10 +10,7 @@ | |||
10 | #include <net/tcp.h> | 10 | #include <net/tcp.h> |
11 | 11 | ||
12 | #define TARGET_CORE_MOD_VERSION "v4.1.0-rc1-ml" | 12 | #define TARGET_CORE_MOD_VERSION "v4.1.0-rc1-ml" |
13 | #define SHUTDOWN_SIGS (sigmask(SIGKILL)|sigmask(SIGINT)|sigmask(SIGABRT)) | ||
14 | 13 | ||
15 | /* Used by transport_generic_allocate_iovecs() */ | ||
16 | #define TRANSPORT_IOV_DATA_BUFFER 5 | ||
17 | /* Maximum Number of LUNs per Target Portal Group */ | 14 | /* Maximum Number of LUNs per Target Portal Group */ |
18 | /* Don't raise above 511 or REPORT_LUNS needs to handle >1 page */ | 15 | /* Don't raise above 511 or REPORT_LUNS needs to handle >1 page */ |
19 | #define TRANSPORT_MAX_LUNS_PER_TPG 256 | 16 | #define TRANSPORT_MAX_LUNS_PER_TPG 256 |
@@ -75,32 +72,26 @@ enum transport_tpg_type_table { | |||
75 | }; | 72 | }; |
76 | 73 | ||
77 | /* Used for generate timer flags */ | 74 | /* Used for generate timer flags */ |
78 | enum timer_flags_table { | 75 | enum se_task_flags { |
79 | TF_RUNNING = 0x01, | 76 | TF_ACTIVE = (1 << 0), |
80 | TF_STOP = 0x02, | 77 | TF_SENT = (1 << 1), |
78 | TF_REQUEST_STOP = (1 << 2), | ||
81 | }; | 79 | }; |
82 | 80 | ||
83 | /* Special transport agnostic struct se_cmd->t_states */ | 81 | /* Special transport agnostic struct se_cmd->t_states */ |
84 | enum transport_state_table { | 82 | enum transport_state_table { |
85 | TRANSPORT_NO_STATE = 0, | 83 | TRANSPORT_NO_STATE = 0, |
86 | TRANSPORT_NEW_CMD = 1, | 84 | TRANSPORT_NEW_CMD = 1, |
87 | TRANSPORT_DEFERRED_CMD = 2, | ||
88 | TRANSPORT_WRITE_PENDING = 3, | 85 | TRANSPORT_WRITE_PENDING = 3, |
89 | TRANSPORT_PROCESS_WRITE = 4, | 86 | TRANSPORT_PROCESS_WRITE = 4, |
90 | TRANSPORT_PROCESSING = 5, | 87 | TRANSPORT_PROCESSING = 5, |
91 | TRANSPORT_COMPLETE_OK = 6, | 88 | TRANSPORT_COMPLETE = 6, |
92 | TRANSPORT_COMPLETE_FAILURE = 7, | ||
93 | TRANSPORT_COMPLETE_TIMEOUT = 8, | ||
94 | TRANSPORT_PROCESS_TMR = 9, | 89 | TRANSPORT_PROCESS_TMR = 9, |
95 | TRANSPORT_TMR_COMPLETE = 10, | ||
96 | TRANSPORT_ISTATE_PROCESSING = 11, | 90 | TRANSPORT_ISTATE_PROCESSING = 11, |
97 | TRANSPORT_ISTATE_PROCESSED = 12, | ||
98 | TRANSPORT_KILL = 13, | ||
99 | TRANSPORT_REMOVE = 14, | ||
100 | TRANSPORT_FREE = 15, | ||
101 | TRANSPORT_NEW_CMD_MAP = 16, | 91 | TRANSPORT_NEW_CMD_MAP = 16, |
102 | TRANSPORT_FREE_CMD_INTR = 17, | 92 | TRANSPORT_FREE_CMD_INTR = 17, |
103 | TRANSPORT_COMPLETE_QF_WP = 18, | 93 | TRANSPORT_COMPLETE_QF_WP = 18, |
94 | TRANSPORT_COMPLETE_QF_OK = 19, | ||
104 | }; | 95 | }; |
105 | 96 | ||
106 | /* Used for struct se_cmd->se_cmd_flags */ | 97 | /* Used for struct se_cmd->se_cmd_flags */ |
@@ -125,7 +116,6 @@ enum se_cmd_flags_table { | |||
125 | SCF_UNUSED = 0x00100000, | 116 | SCF_UNUSED = 0x00100000, |
126 | SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC = 0x00400000, | 117 | SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC = 0x00400000, |
127 | SCF_EMULATE_CDB_ASYNC = 0x01000000, | 118 | SCF_EMULATE_CDB_ASYNC = 0x01000000, |
128 | SCF_EMULATE_QUEUE_FULL = 0x02000000, | ||
129 | }; | 119 | }; |
130 | 120 | ||
131 | /* struct se_dev_entry->lun_flags and struct se_lun->lun_access */ | 121 | /* struct se_dev_entry->lun_flags and struct se_lun->lun_access */ |
@@ -401,34 +391,22 @@ struct se_queue_obj { | |||
401 | } ____cacheline_aligned; | 391 | } ____cacheline_aligned; |
402 | 392 | ||
403 | struct se_task { | 393 | struct se_task { |
404 | unsigned char task_sense; | ||
405 | struct scatterlist *task_sg; | ||
406 | u32 task_sg_nents; | ||
407 | struct scatterlist *task_sg_bidi; | ||
408 | u8 task_scsi_status; | ||
409 | u8 task_flags; | ||
410 | int task_error_status; | ||
411 | int task_state_flags; | ||
412 | bool task_padded_sg; | ||
413 | unsigned long long task_lba; | 394 | unsigned long long task_lba; |
414 | u32 task_no; | 395 | u32 task_sectors; |
415 | u32 task_sectors; | 396 | u32 task_size; |
416 | u32 task_size; | 397 | struct se_cmd *task_se_cmd; |
398 | struct scatterlist *task_sg; | ||
399 | u32 task_sg_nents; | ||
400 | u16 task_flags; | ||
401 | u8 task_sense; | ||
402 | u8 task_scsi_status; | ||
403 | int task_error_status; | ||
417 | enum dma_data_direction task_data_direction; | 404 | enum dma_data_direction task_data_direction; |
418 | struct se_cmd *task_se_cmd; | 405 | atomic_t task_state_active; |
419 | struct se_device *se_dev; | 406 | struct list_head t_list; |
407 | struct list_head t_execute_list; | ||
408 | struct list_head t_state_list; | ||
420 | struct completion task_stop_comp; | 409 | struct completion task_stop_comp; |
421 | atomic_t task_active; | ||
422 | atomic_t task_execute_queue; | ||
423 | atomic_t task_timeout; | ||
424 | atomic_t task_sent; | ||
425 | atomic_t task_stop; | ||
426 | atomic_t task_state_active; | ||
427 | struct timer_list task_timer; | ||
428 | struct se_device *se_obj_ptr; | ||
429 | struct list_head t_list; | ||
430 | struct list_head t_execute_list; | ||
431 | struct list_head t_state_list; | ||
432 | } ____cacheline_aligned; | 410 | } ____cacheline_aligned; |
433 | 411 | ||
434 | struct se_cmd { | 412 | struct se_cmd { |
@@ -446,8 +424,6 @@ struct se_cmd { | |||
446 | int sam_task_attr; | 424 | int sam_task_attr; |
447 | /* Transport protocol dependent state, see transport_state_table */ | 425 | /* Transport protocol dependent state, see transport_state_table */ |
448 | enum transport_state_table t_state; | 426 | enum transport_state_table t_state; |
449 | /* Transport protocol dependent state for out of order CmdSNs */ | ||
450 | int deferred_t_state; | ||
451 | /* Transport specific error status */ | 427 | /* Transport specific error status */ |
452 | int transport_error_status; | 428 | int transport_error_status; |
453 | /* See se_cmd_flags_table */ | 429 | /* See se_cmd_flags_table */ |
@@ -461,7 +437,6 @@ struct se_cmd { | |||
461 | u32 orig_fe_lun; | 437 | u32 orig_fe_lun; |
462 | /* Persistent Reservation key */ | 438 | /* Persistent Reservation key */ |
463 | u64 pr_res_key; | 439 | u64 pr_res_key; |
464 | atomic_t transport_sent; | ||
465 | /* Used for sense data */ | 440 | /* Used for sense data */ |
466 | void *sense_buffer; | 441 | void *sense_buffer; |
467 | struct list_head se_delayed_node; | 442 | struct list_head se_delayed_node; |
@@ -479,10 +454,7 @@ struct se_cmd { | |||
479 | struct list_head se_queue_node; | 454 | struct list_head se_queue_node; |
480 | struct target_core_fabric_ops *se_tfo; | 455 | struct target_core_fabric_ops *se_tfo; |
481 | int (*transport_emulate_cdb)(struct se_cmd *); | 456 | int (*transport_emulate_cdb)(struct se_cmd *); |
482 | void (*transport_split_cdb)(unsigned long long, u32, unsigned char *); | ||
483 | void (*transport_wait_for_tasks)(struct se_cmd *, int, int); | ||
484 | void (*transport_complete_callback)(struct se_cmd *); | 457 | void (*transport_complete_callback)(struct se_cmd *); |
485 | int (*transport_qf_callback)(struct se_cmd *); | ||
486 | 458 | ||
487 | unsigned char *t_task_cdb; | 459 | unsigned char *t_task_cdb; |
488 | unsigned char __t_task_cdb[TCM_MAX_COMMAND_SIZE]; | 460 | unsigned char __t_task_cdb[TCM_MAX_COMMAND_SIZE]; |
@@ -495,7 +467,6 @@ struct se_cmd { | |||
495 | atomic_t t_se_count; | 467 | atomic_t t_se_count; |
496 | atomic_t t_task_cdbs_left; | 468 | atomic_t t_task_cdbs_left; |
497 | atomic_t t_task_cdbs_ex_left; | 469 | atomic_t t_task_cdbs_ex_left; |
498 | atomic_t t_task_cdbs_timeout_left; | ||
499 | atomic_t t_task_cdbs_sent; | 470 | atomic_t t_task_cdbs_sent; |
500 | atomic_t t_transport_aborted; | 471 | atomic_t t_transport_aborted; |
501 | atomic_t t_transport_active; | 472 | atomic_t t_transport_active; |
@@ -503,7 +474,6 @@ struct se_cmd { | |||
503 | atomic_t t_transport_queue_active; | 474 | atomic_t t_transport_queue_active; |
504 | atomic_t t_transport_sent; | 475 | atomic_t t_transport_sent; |
505 | atomic_t t_transport_stop; | 476 | atomic_t t_transport_stop; |
506 | atomic_t t_transport_timeout; | ||
507 | atomic_t transport_dev_active; | 477 | atomic_t transport_dev_active; |
508 | atomic_t transport_lun_active; | 478 | atomic_t transport_lun_active; |
509 | atomic_t transport_lun_fe_stop; | 479 | atomic_t transport_lun_fe_stop; |
@@ -514,6 +484,8 @@ struct se_cmd { | |||
514 | struct completion transport_lun_stop_comp; | 484 | struct completion transport_lun_stop_comp; |
515 | struct scatterlist *t_tasks_sg_chained; | 485 | struct scatterlist *t_tasks_sg_chained; |
516 | 486 | ||
487 | struct work_struct work; | ||
488 | |||
517 | /* | 489 | /* |
518 | * Used for pre-registered fabric SGL passthrough WRITE and READ | 490 | * Used for pre-registered fabric SGL passthrough WRITE and READ |
519 | * with the special SCF_PASSTHROUGH_CONTIG_TO_SG case for TCM_Loop | 491 | * with the special SCF_PASSTHROUGH_CONTIG_TO_SG case for TCM_Loop |
@@ -670,7 +642,6 @@ struct se_dev_attrib { | |||
670 | u32 optimal_sectors; | 642 | u32 optimal_sectors; |
671 | u32 hw_queue_depth; | 643 | u32 hw_queue_depth; |
672 | u32 queue_depth; | 644 | u32 queue_depth; |
673 | u32 task_timeout; | ||
674 | u32 max_unmap_lba_count; | 645 | u32 max_unmap_lba_count; |
675 | u32 max_unmap_block_desc_count; | 646 | u32 max_unmap_block_desc_count; |
676 | u32 unmap_granularity; | 647 | u32 unmap_granularity; |
diff --git a/include/target/target_core_tmr.h b/include/target/target_core_tmr.h index bd559680747..d5876e17d3f 100644 --- a/include/target/target_core_tmr.h +++ b/include/target/target_core_tmr.h | |||
@@ -27,7 +27,7 @@ enum tcm_tmrsp_table { | |||
27 | 27 | ||
28 | extern struct kmem_cache *se_tmr_req_cache; | 28 | extern struct kmem_cache *se_tmr_req_cache; |
29 | 29 | ||
30 | extern struct se_tmr_req *core_tmr_alloc_req(struct se_cmd *, void *, u8); | 30 | extern struct se_tmr_req *core_tmr_alloc_req(struct se_cmd *, void *, u8, gfp_t); |
31 | extern void core_tmr_release_req(struct se_tmr_req *); | 31 | extern void core_tmr_release_req(struct se_tmr_req *); |
32 | extern int core_tmr_lun_reset(struct se_device *, struct se_tmr_req *, | 32 | extern int core_tmr_lun_reset(struct se_device *, struct se_tmr_req *, |
33 | struct list_head *, struct se_cmd *); | 33 | struct list_head *, struct se_cmd *); |
diff --git a/include/target/target_core_transport.h b/include/target/target_core_transport.h index 46aae4f94ed..a037a1a6fbb 100644 --- a/include/target/target_core_transport.h +++ b/include/target/target_core_transport.h | |||
@@ -22,10 +22,9 @@ | |||
22 | #define PYX_TRANSPORT_LU_COMM_FAILURE -7 | 22 | #define PYX_TRANSPORT_LU_COMM_FAILURE -7 |
23 | #define PYX_TRANSPORT_UNKNOWN_MODE_PAGE -8 | 23 | #define PYX_TRANSPORT_UNKNOWN_MODE_PAGE -8 |
24 | #define PYX_TRANSPORT_WRITE_PROTECTED -9 | 24 | #define PYX_TRANSPORT_WRITE_PROTECTED -9 |
25 | #define PYX_TRANSPORT_TASK_TIMEOUT -10 | 25 | #define PYX_TRANSPORT_RESERVATION_CONFLICT -10 |
26 | #define PYX_TRANSPORT_RESERVATION_CONFLICT -11 | 26 | #define PYX_TRANSPORT_ILLEGAL_REQUEST -11 |
27 | #define PYX_TRANSPORT_ILLEGAL_REQUEST -12 | 27 | #define PYX_TRANSPORT_USE_SENSE_REASON -12 |
28 | #define PYX_TRANSPORT_USE_SENSE_REASON -13 | ||
29 | 28 | ||
30 | #ifndef SAM_STAT_RESERVATION_CONFLICT | 29 | #ifndef SAM_STAT_RESERVATION_CONFLICT |
31 | #define SAM_STAT_RESERVATION_CONFLICT 0x18 | 30 | #define SAM_STAT_RESERVATION_CONFLICT 0x18 |
@@ -38,16 +37,6 @@ | |||
38 | #define TRANSPORT_PLUGIN_VHBA_PDEV 2 | 37 | #define TRANSPORT_PLUGIN_VHBA_PDEV 2 |
39 | #define TRANSPORT_PLUGIN_VHBA_VDEV 3 | 38 | #define TRANSPORT_PLUGIN_VHBA_VDEV 3 |
40 | 39 | ||
41 | /* For SE OBJ Plugins, in seconds */ | ||
42 | #define TRANSPORT_TIMEOUT_TUR 10 | ||
43 | #define TRANSPORT_TIMEOUT_TYPE_DISK 60 | ||
44 | #define TRANSPORT_TIMEOUT_TYPE_ROM 120 | ||
45 | #define TRANSPORT_TIMEOUT_TYPE_TAPE 600 | ||
46 | #define TRANSPORT_TIMEOUT_TYPE_OTHER 300 | ||
47 | |||
48 | /* For se_task->task_state_flags */ | ||
49 | #define TSF_EXCEPTION_CLEARED 0x01 | ||
50 | |||
51 | /* | 40 | /* |
52 | * struct se_subsystem_dev->su_dev_flags | 41 | * struct se_subsystem_dev->su_dev_flags |
53 | */ | 42 | */ |
@@ -64,8 +53,6 @@ | |||
64 | #define DF_SPC2_RESERVATIONS_WITH_ISID 0x00000004 | 53 | #define DF_SPC2_RESERVATIONS_WITH_ISID 0x00000004 |
65 | 54 | ||
66 | /* struct se_dev_attrib sanity values */ | 55 | /* struct se_dev_attrib sanity values */ |
67 | /* 10 Minutes */ | ||
68 | #define DA_TASK_TIMEOUT_MAX 600 | ||
69 | /* Default max_unmap_lba_count */ | 56 | /* Default max_unmap_lba_count */ |
70 | #define DA_MAX_UNMAP_LBA_COUNT 0 | 57 | #define DA_MAX_UNMAP_LBA_COUNT 0 |
71 | /* Default max_unmap_block_desc_count */ | 58 | /* Default max_unmap_block_desc_count */ |
@@ -110,16 +97,13 @@ | |||
110 | 97 | ||
111 | #define MOD_MAX_SECTORS(ms, bs) (ms % (PAGE_SIZE / bs)) | 98 | #define MOD_MAX_SECTORS(ms, bs) (ms % (PAGE_SIZE / bs)) |
112 | 99 | ||
113 | struct se_mem; | ||
114 | struct se_subsystem_api; | 100 | struct se_subsystem_api; |
115 | 101 | ||
116 | extern struct kmem_cache *se_mem_cache; | ||
117 | |||
118 | extern int init_se_kmem_caches(void); | 102 | extern int init_se_kmem_caches(void); |
119 | extern void release_se_kmem_caches(void); | 103 | extern void release_se_kmem_caches(void); |
120 | extern u32 scsi_get_new_index(scsi_index_t); | 104 | extern u32 scsi_get_new_index(scsi_index_t); |
121 | extern void transport_init_queue_obj(struct se_queue_obj *); | 105 | extern void transport_init_queue_obj(struct se_queue_obj *); |
122 | extern int transport_subsystem_check_init(void); | 106 | extern void transport_subsystem_check_init(void); |
123 | extern int transport_subsystem_register(struct se_subsystem_api *); | 107 | extern int transport_subsystem_register(struct se_subsystem_api *); |
124 | extern void transport_subsystem_release(struct se_subsystem_api *); | 108 | extern void transport_subsystem_release(struct se_subsystem_api *); |
125 | extern void transport_load_plugins(void); | 109 | extern void transport_load_plugins(void); |
@@ -134,7 +118,6 @@ extern void transport_free_session(struct se_session *); | |||
134 | extern void transport_deregister_session_configfs(struct se_session *); | 118 | extern void transport_deregister_session_configfs(struct se_session *); |
135 | extern void transport_deregister_session(struct se_session *); | 119 | extern void transport_deregister_session(struct se_session *); |
136 | extern void transport_cmd_finish_abort(struct se_cmd *, int); | 120 | extern void transport_cmd_finish_abort(struct se_cmd *, int); |
137 | extern void transport_cmd_finish_abort_tmr(struct se_cmd *); | ||
138 | extern void transport_complete_sync_cache(struct se_cmd *, int); | 121 | extern void transport_complete_sync_cache(struct se_cmd *, int); |
139 | extern void transport_complete_task(struct se_task *, int); | 122 | extern void transport_complete_task(struct se_task *, int); |
140 | extern void transport_add_task_to_execute_queue(struct se_task *, | 123 | extern void transport_add_task_to_execute_queue(struct se_task *, |
@@ -142,6 +125,8 @@ extern void transport_add_task_to_execute_queue(struct se_task *, | |||
142 | struct se_device *); | 125 | struct se_device *); |
143 | extern void transport_remove_task_from_execute_queue(struct se_task *, | 126 | extern void transport_remove_task_from_execute_queue(struct se_task *, |
144 | struct se_device *); | 127 | struct se_device *); |
128 | extern void __transport_remove_task_from_execute_queue(struct se_task *, | ||
129 | struct se_device *); | ||
145 | unsigned char *transport_dump_cmd_direction(struct se_cmd *); | 130 | unsigned char *transport_dump_cmd_direction(struct se_cmd *); |
146 | extern void transport_dump_dev_state(struct se_device *, char *, int *); | 131 | extern void transport_dump_dev_state(struct se_device *, char *, int *); |
147 | extern void transport_dump_dev_info(struct se_device *, struct se_lun *, | 132 | extern void transport_dump_dev_info(struct se_device *, struct se_lun *, |
@@ -169,29 +154,24 @@ extern void transport_init_se_cmd(struct se_cmd *, | |||
169 | unsigned char *); | 154 | unsigned char *); |
170 | void *transport_kmap_first_data_page(struct se_cmd *cmd); | 155 | void *transport_kmap_first_data_page(struct se_cmd *cmd); |
171 | void transport_kunmap_first_data_page(struct se_cmd *cmd); | 156 | void transport_kunmap_first_data_page(struct se_cmd *cmd); |
172 | extern void transport_free_se_cmd(struct se_cmd *); | ||
173 | extern int transport_generic_allocate_tasks(struct se_cmd *, unsigned char *); | 157 | extern int transport_generic_allocate_tasks(struct se_cmd *, unsigned char *); |
174 | extern int transport_generic_handle_cdb(struct se_cmd *); | ||
175 | extern int transport_handle_cdb_direct(struct se_cmd *); | 158 | extern int transport_handle_cdb_direct(struct se_cmd *); |
176 | extern int transport_generic_handle_cdb_map(struct se_cmd *); | 159 | extern int transport_generic_handle_cdb_map(struct se_cmd *); |
177 | extern int transport_generic_handle_data(struct se_cmd *); | 160 | extern int transport_generic_handle_data(struct se_cmd *); |
178 | extern void transport_new_cmd_failure(struct se_cmd *); | 161 | extern void transport_new_cmd_failure(struct se_cmd *); |
179 | extern int transport_generic_handle_tmr(struct se_cmd *); | 162 | extern int transport_generic_handle_tmr(struct se_cmd *); |
180 | extern void transport_generic_free_cmd_intr(struct se_cmd *); | 163 | extern void transport_generic_free_cmd_intr(struct se_cmd *); |
181 | extern void __transport_stop_task_timer(struct se_task *, unsigned long *); | 164 | extern bool target_stop_task(struct se_task *task, unsigned long *flags); |
182 | extern int transport_generic_map_mem_to_cmd(struct se_cmd *cmd, struct scatterlist *, u32, | 165 | extern int transport_generic_map_mem_to_cmd(struct se_cmd *cmd, struct scatterlist *, u32, |
183 | struct scatterlist *, u32); | 166 | struct scatterlist *, u32); |
184 | extern int transport_clear_lun_from_sessions(struct se_lun *); | 167 | extern int transport_clear_lun_from_sessions(struct se_lun *); |
168 | extern void transport_wait_for_tasks(struct se_cmd *); | ||
185 | extern int transport_check_aborted_status(struct se_cmd *, int); | 169 | extern int transport_check_aborted_status(struct se_cmd *, int); |
186 | extern int transport_send_check_condition_and_sense(struct se_cmd *, u8, int); | 170 | extern int transport_send_check_condition_and_sense(struct se_cmd *, u8, int); |
187 | extern void transport_send_task_abort(struct se_cmd *); | 171 | extern void transport_send_task_abort(struct se_cmd *); |
188 | extern void transport_release_cmd(struct se_cmd *); | 172 | extern void transport_release_cmd(struct se_cmd *); |
189 | extern void transport_generic_free_cmd(struct se_cmd *, int, int); | 173 | extern void transport_generic_free_cmd(struct se_cmd *, int); |
190 | extern void transport_generic_wait_for_cmds(struct se_cmd *, int); | 174 | extern void transport_generic_wait_for_cmds(struct se_cmd *, int); |
191 | extern int transport_init_task_sg(struct se_task *, struct se_mem *, u32); | ||
192 | extern int transport_map_mem_to_sg(struct se_task *, struct list_head *, | ||
193 | struct scatterlist *, struct se_mem *, | ||
194 | struct se_mem **, u32 *, u32 *); | ||
195 | extern void transport_do_task_sg_chain(struct se_cmd *); | 175 | extern void transport_do_task_sg_chain(struct se_cmd *); |
196 | extern void transport_generic_process_write(struct se_cmd *); | 176 | extern void transport_generic_process_write(struct se_cmd *); |
197 | extern int transport_generic_new_cmd(struct se_cmd *); | 177 | extern int transport_generic_new_cmd(struct se_cmd *); |
@@ -200,6 +180,7 @@ extern int transport_generic_do_tmr(struct se_cmd *); | |||
200 | extern int core_alua_check_nonop_delay(struct se_cmd *); | 180 | extern int core_alua_check_nonop_delay(struct se_cmd *); |
201 | /* From target_core_cdb.c */ | 181 | /* From target_core_cdb.c */ |
202 | extern int transport_emulate_control_cdb(struct se_task *); | 182 | extern int transport_emulate_control_cdb(struct se_task *); |
183 | extern void target_get_task_cdb(struct se_task *task, unsigned char *cdb); | ||
203 | 184 | ||
204 | /* | 185 | /* |
205 | * Each se_transport_task_t can have N number of possible struct se_task's | 186 | * Each se_transport_task_t can have N number of possible struct se_task's |
@@ -227,6 +208,10 @@ struct se_subsystem_api { | |||
227 | * Transport Type. | 208 | * Transport Type. |
228 | */ | 209 | */ |
229 | u8 transport_type; | 210 | u8 transport_type; |
211 | |||
212 | unsigned int fua_write_emulated : 1; | ||
213 | unsigned int write_cache_emulated : 1; | ||
214 | |||
230 | /* | 215 | /* |
231 | * struct module for struct se_hba references | 216 | * struct module for struct se_hba references |
232 | */ | 217 | */ |
@@ -236,18 +221,6 @@ struct se_subsystem_api { | |||
236 | */ | 221 | */ |
237 | struct list_head sub_api_list; | 222 | struct list_head sub_api_list; |
238 | /* | 223 | /* |
239 | * For SCF_SCSI_NON_DATA_CDB | ||
240 | */ | ||
241 | int (*cdb_none)(struct se_task *); | ||
242 | /* | ||
243 | * For SCF_SCSI_DATA_SG_IO_CDB | ||
244 | */ | ||
245 | int (*map_data_SG)(struct se_task *); | ||
246 | /* | ||
247 | * For SCF_SCSI_CONTROL_SG_IO_CDB | ||
248 | */ | ||
249 | int (*map_control_SG)(struct se_task *); | ||
250 | /* | ||
251 | * attach_hba(): | 224 | * attach_hba(): |
252 | */ | 225 | */ |
253 | int (*attach_hba)(struct se_hba *, u32); | 226 | int (*attach_hba)(struct se_hba *, u32); |
@@ -275,22 +248,6 @@ struct se_subsystem_api { | |||
275 | void (*free_device)(void *); | 248 | void (*free_device)(void *); |
276 | 249 | ||
277 | /* | 250 | /* |
278 | * dpo_emulated(): | ||
279 | */ | ||
280 | int (*dpo_emulated)(struct se_device *); | ||
281 | /* | ||
282 | * fua_write_emulated(): | ||
283 | */ | ||
284 | int (*fua_write_emulated)(struct se_device *); | ||
285 | /* | ||
286 | * fua_read_emulated(): | ||
287 | */ | ||
288 | int (*fua_read_emulated)(struct se_device *); | ||
289 | /* | ||
290 | * write_cache_emulated(): | ||
291 | */ | ||
292 | int (*write_cache_emulated)(struct se_device *); | ||
293 | /* | ||
294 | * transport_complete(): | 251 | * transport_complete(): |
295 | * | 252 | * |
296 | * Use transport_generic_complete() for majority of DAS transport | 253 | * Use transport_generic_complete() for majority of DAS transport |
@@ -331,10 +288,6 @@ struct se_subsystem_api { | |||
331 | ssize_t (*show_configfs_dev_params)(struct se_hba *, struct se_subsystem_dev *, | 288 | ssize_t (*show_configfs_dev_params)(struct se_hba *, struct se_subsystem_dev *, |
332 | char *); | 289 | char *); |
333 | /* | 290 | /* |
334 | * get_cdb(): | ||
335 | */ | ||
336 | unsigned char *(*get_cdb)(struct se_task *); | ||
337 | /* | ||
338 | * get_device_rev(): | 291 | * get_device_rev(): |
339 | */ | 292 | */ |
340 | u32 (*get_device_rev)(struct se_device *); | 293 | u32 (*get_device_rev)(struct se_device *); |