1 #ifndef TARGET_CORE_BASE_H 2 #define TARGET_CORE_BASE_H 3 4 #include <linux/in.h> 5 #include <linux/configfs.h> 6 #include <linux/dma-mapping.h> 7 #include <linux/blkdev.h> 8 #include <linux/percpu_ida.h> 9 #include <net/sock.h> 10 #include <net/tcp.h> 11 12 #define TARGET_CORE_MOD_VERSION "v4.1.0" 13 #define TARGET_CORE_VERSION TARGET_CORE_MOD_VERSION 14 15 /* Maximum Number of LUNs per Target Portal Group */ 16 /* Don't raise above 511 or REPORT_LUNS needs to handle >1 page */ 17 #define TRANSPORT_MAX_LUNS_PER_TPG 256 18 /* 19 * Maximum size of a CDB that can be stored in se_cmd without allocating 20 * memory dynamically for the CDB. 21 */ 22 #define TCM_MAX_COMMAND_SIZE 32 23 /* 24 * From include/scsi/scsi_cmnd.h:SCSI_SENSE_BUFFERSIZE, currently 25 * defined 96, but the real limit is 252 (or 260 including the header) 26 */ 27 #define TRANSPORT_SENSE_BUFFER 96 28 /* Used by transport_send_check_condition_and_sense() */ 29 #define SPC_SENSE_KEY_OFFSET 2 30 #define SPC_ADD_SENSE_LEN_OFFSET 7 31 #define SPC_DESC_TYPE_OFFSET 8 32 #define SPC_ADDITIONAL_DESC_LEN_OFFSET 9 33 #define SPC_VALIDITY_OFFSET 10 34 #define SPC_ASC_KEY_OFFSET 12 35 #define SPC_ASCQ_KEY_OFFSET 13 36 #define TRANSPORT_IQN_LEN 224 37 /* Used by target_core_store_alua_lu_gp() and target_core_alua_lu_gp_show_attr_members() */ 38 #define LU_GROUP_NAME_BUF 256 39 /* Used by core_alua_store_tg_pt_gp_info() and target_core_alua_tg_pt_gp_show_attr_members() */ 40 #define TG_PT_GROUP_NAME_BUF 256 41 /* Used to parse VPD into struct t10_vpd */ 42 #define VPD_TMP_BUF_SIZE 254 43 /* Used by transport_generic_cmd_sequencer() */ 44 #define READ_BLOCK_LEN 6 45 #define READ_CAP_LEN 8 46 #define READ_POSITION_LEN 20 47 #define INQUIRY_LEN 36 48 /* Used by transport_get_inquiry_vpd_serial() */ 49 #define INQUIRY_VPD_SERIAL_LEN 254 50 /* Used by transport_get_inquiry_vpd_device_ident() */ 51 #define INQUIRY_VPD_DEVICE_IDENTIFIER_LEN 254 52 53 /* Attempts before moving from SHORT to LONG */ 54 #define PYX_TRANSPORT_WINDOW_CLOSED_THRESHOLD 3 55 #define PYX_TRANSPORT_WINDOW_CLOSED_WAIT_SHORT 3 /* In milliseconds */ 56 #define PYX_TRANSPORT_WINDOW_CLOSED_WAIT_LONG 10 /* In milliseconds */ 57 58 #define PYX_TRANSPORT_STATUS_INTERVAL 5 /* In seconds */ 59 60 /* struct se_dev_attrib sanity values */ 61 /* Default max_unmap_lba_count */ 62 #define DA_MAX_UNMAP_LBA_COUNT 0 63 /* Default max_unmap_block_desc_count */ 64 #define DA_MAX_UNMAP_BLOCK_DESC_COUNT 0 65 /* Default unmap_granularity */ 66 #define DA_UNMAP_GRANULARITY_DEFAULT 0 67 /* Default unmap_granularity_alignment */ 68 #define DA_UNMAP_GRANULARITY_ALIGNMENT_DEFAULT 0 69 /* Default max_write_same_len, disabled by default */ 70 #define DA_MAX_WRITE_SAME_LEN 0 71 /* Use a model alias based on the configfs backend device name */ 72 #define DA_EMULATE_MODEL_ALIAS 0 73 /* Emulation for Direct Page Out */ 74 #define DA_EMULATE_DPO 0 75 /* Emulation for Forced Unit Access WRITEs */ 76 #define DA_EMULATE_FUA_WRITE 1 77 /* Emulation for Forced Unit Access READs */ 78 #define DA_EMULATE_FUA_READ 0 79 /* Emulation for WriteCache and SYNCHRONIZE_CACHE */ 80 #define DA_EMULATE_WRITE_CACHE 0 81 /* Emulation for UNIT ATTENTION Interlock Control */ 82 #define DA_EMULATE_UA_INTLLCK_CTRL 0 83 /* Emulation for TASK_ABORTED status (TAS) by default */ 84 #define DA_EMULATE_TAS 1 85 /* Emulation for Thin Provisioning UNMAP using block/blk-lib.c:blkdev_issue_discard() */ 86 #define DA_EMULATE_TPU 0 87 /* 88 * Emulation for Thin Provisioning WRITE_SAME w/ UNMAP=1 bit using 89 * block/blk-lib.c:blkdev_issue_discard() 90 */ 91 #define DA_EMULATE_TPWS 0 92 /* Emulation for CompareAndWrite (AtomicTestandSet) by default */ 93 #define DA_EMULATE_CAW 1 94 /* Emulation for 3rd Party Copy (ExtendedCopy) by default */ 95 #define DA_EMULATE_3PC 1 96 /* No Emulation for PSCSI by default */ 97 #define DA_EMULATE_ALUA 0 98 /* Enforce SCSI Initiator Port TransportID with 'ISID' for PR */ 99 #define DA_ENFORCE_PR_ISIDS 1 100 /* Force SPC-3 PR Activate Persistence across Target Power Loss */ 101 #define DA_FORCE_PR_APTPL 0 102 #define DA_STATUS_MAX_SECTORS_MIN 16 103 #define DA_STATUS_MAX_SECTORS_MAX 8192 104 /* By default don't report non-rotating (solid state) medium */ 105 #define DA_IS_NONROT 0 106 /* Queue Algorithm Modifier default for restricted reordering in control mode page */ 107 #define DA_EMULATE_REST_REORD 0 108 109 #define SE_INQUIRY_BUF 1024 110 #define SE_MODE_PAGE_BUF 512 111 #define SE_SENSE_BUF 96 112 113 /* struct se_hba->hba_flags */ 114 enum hba_flags_table { 115 HBA_FLAGS_INTERNAL_USE = 0x01, 116 HBA_FLAGS_PSCSI_MODE = 0x02, 117 }; 118 119 /* struct se_lun->lun_status */ 120 enum transport_lun_status_table { 121 TRANSPORT_LUN_STATUS_FREE = 0, 122 TRANSPORT_LUN_STATUS_ACTIVE = 1, 123 }; 124 125 /* struct se_portal_group->se_tpg_type */ 126 enum transport_tpg_type_table { 127 TRANSPORT_TPG_TYPE_NORMAL = 0, 128 TRANSPORT_TPG_TYPE_DISCOVERY = 1, 129 }; 130 131 /* Special transport agnostic struct se_cmd->t_states */ 132 enum transport_state_table { 133 TRANSPORT_NO_STATE = 0, 134 TRANSPORT_NEW_CMD = 1, 135 TRANSPORT_WRITE_PENDING = 3, 136 TRANSPORT_PROCESSING = 5, 137 TRANSPORT_COMPLETE = 6, 138 TRANSPORT_ISTATE_PROCESSING = 11, 139 TRANSPORT_COMPLETE_QF_WP = 18, 140 TRANSPORT_COMPLETE_QF_OK = 19, 141 }; 142 143 /* Used for struct se_cmd->se_cmd_flags */ 144 enum se_cmd_flags_table { 145 SCF_SUPPORTED_SAM_OPCODE = 0x00000001, 146 SCF_TRANSPORT_TASK_SENSE = 0x00000002, 147 SCF_EMULATED_TASK_SENSE = 0x00000004, 148 SCF_SCSI_DATA_CDB = 0x00000008, 149 SCF_SCSI_TMR_CDB = 0x00000010, 150 SCF_FUA = 0x00000080, 151 SCF_SE_LUN_CMD = 0x00000100, 152 SCF_BIDI = 0x00000400, 153 SCF_SENT_CHECK_CONDITION = 0x00000800, 154 SCF_OVERFLOW_BIT = 0x00001000, 155 SCF_UNDERFLOW_BIT = 0x00002000, 156 SCF_SEND_DELAYED_TAS = 0x00004000, 157 SCF_ALUA_NON_OPTIMIZED = 0x00008000, 158 SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC = 0x00020000, 159 SCF_COMPARE_AND_WRITE = 0x00080000, 160 SCF_COMPARE_AND_WRITE_POST = 0x00100000, 161 }; 162 163 /* struct se_dev_entry->lun_flags and struct se_lun->lun_access */ 164 enum transport_lunflags_table { 165 TRANSPORT_LUNFLAGS_NO_ACCESS = 0x00, 166 TRANSPORT_LUNFLAGS_INITIATOR_ACCESS = 0x01, 167 TRANSPORT_LUNFLAGS_READ_ONLY = 0x02, 168 TRANSPORT_LUNFLAGS_READ_WRITE = 0x04, 169 }; 170 171 /* 172 * Used by transport_send_check_condition_and_sense() 173 * to signal which ASC/ASCQ sense payload should be built. 174 */ 175 typedef unsigned __bitwise__ sense_reason_t; 176 177 enum tcm_sense_reason_table { 178 #define R(x) (__force sense_reason_t )(x) 179 TCM_NO_SENSE = R(0x00), 180 TCM_NON_EXISTENT_LUN = R(0x01), 181 TCM_UNSUPPORTED_SCSI_OPCODE = R(0x02), 182 TCM_INCORRECT_AMOUNT_OF_DATA = R(0x03), 183 TCM_UNEXPECTED_UNSOLICITED_DATA = R(0x04), 184 TCM_SERVICE_CRC_ERROR = R(0x05), 185 TCM_SNACK_REJECTED = R(0x06), 186 TCM_SECTOR_COUNT_TOO_MANY = R(0x07), 187 TCM_INVALID_CDB_FIELD = R(0x08), 188 TCM_INVALID_PARAMETER_LIST = R(0x09), 189 TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE = R(0x0a), 190 TCM_UNKNOWN_MODE_PAGE = R(0x0b), 191 TCM_WRITE_PROTECTED = R(0x0c), 192 TCM_CHECK_CONDITION_ABORT_CMD = R(0x0d), 193 TCM_CHECK_CONDITION_UNIT_ATTENTION = R(0x0e), 194 TCM_CHECK_CONDITION_NOT_READY = R(0x0f), 195 TCM_RESERVATION_CONFLICT = R(0x10), 196 TCM_ADDRESS_OUT_OF_RANGE = R(0x11), 197 TCM_OUT_OF_RESOURCES = R(0x12), 198 TCM_PARAMETER_LIST_LENGTH_ERROR = R(0x13), 199 TCM_MISCOMPARE_VERIFY = R(0x14), 200 TCM_LOGICAL_BLOCK_GUARD_CHECK_FAILED = R(0x15), 201 TCM_LOGICAL_BLOCK_APP_TAG_CHECK_FAILED = R(0x16), 202 TCM_LOGICAL_BLOCK_REF_TAG_CHECK_FAILED = R(0x17), 203 #undef R 204 }; 205 206 enum target_sc_flags_table { 207 TARGET_SCF_BIDI_OP = 0x01, 208 TARGET_SCF_ACK_KREF = 0x02, 209 TARGET_SCF_UNKNOWN_SIZE = 0x04, 210 }; 211 212 /* fabric independent task management function values */ 213 enum tcm_tmreq_table { 214 TMR_ABORT_TASK = 1, 215 TMR_ABORT_TASK_SET = 2, 216 TMR_CLEAR_ACA = 3, 217 TMR_CLEAR_TASK_SET = 4, 218 TMR_LUN_RESET = 5, 219 TMR_TARGET_WARM_RESET = 6, 220 TMR_TARGET_COLD_RESET = 7, 221 }; 222 223 /* fabric independent task management response values */ 224 enum tcm_tmrsp_table { 225 TMR_FUNCTION_FAILED = 0, 226 TMR_FUNCTION_COMPLETE = 1, 227 TMR_TASK_DOES_NOT_EXIST = 2, 228 TMR_LUN_DOES_NOT_EXIST = 3, 229 TMR_TASK_MGMT_FUNCTION_NOT_SUPPORTED = 4, 230 TMR_FUNCTION_REJECTED = 5, 231 }; 232 233 /* 234 * Used for target SCSI statistics 235 */ 236 typedef enum { 237 SCSI_INST_INDEX, 238 SCSI_DEVICE_INDEX, 239 SCSI_AUTH_INTR_INDEX, 240 SCSI_INDEX_TYPE_MAX 241 } scsi_index_t; 242 243 struct se_cmd; 244 245 struct t10_alua_lba_map_member { 246 struct list_head lba_map_mem_list; 247 int lba_map_mem_alua_state; 248 int lba_map_mem_alua_pg_id; 249 }; 250 251 struct t10_alua_lba_map { 252 u64 lba_map_first_lba; 253 u64 lba_map_last_lba; 254 struct list_head lba_map_list; 255 struct list_head lba_map_mem_list; 256 }; 257 258 struct t10_alua { 259 /* ALUA Target Port Group ID */ 260 u16 alua_tg_pt_gps_counter; 261 u32 alua_tg_pt_gps_count; 262 /* Referrals support */ 263 spinlock_t lba_map_lock; 264 u32 lba_map_segment_size; 265 u32 lba_map_segment_multiplier; 266 struct list_head lba_map_list; 267 spinlock_t tg_pt_gps_lock; 268 struct se_device *t10_dev; 269 /* Used for default ALUA Target Port Group */ 270 struct t10_alua_tg_pt_gp *default_tg_pt_gp; 271 /* Used for default ALUA Target Port Group ConfigFS group */ 272 struct config_group alua_tg_pt_gps_group; 273 struct list_head tg_pt_gps_list; 274 }; 275 276 struct t10_alua_lu_gp { 277 u16 lu_gp_id; 278 int lu_gp_valid_id; 279 u32 lu_gp_members; 280 atomic_t lu_gp_ref_cnt; 281 spinlock_t lu_gp_lock; 282 struct config_group lu_gp_group; 283 struct list_head lu_gp_node; 284 struct list_head lu_gp_mem_list; 285 }; 286 287 struct t10_alua_lu_gp_member { 288 bool lu_gp_assoc; 289 atomic_t lu_gp_mem_ref_cnt; 290 spinlock_t lu_gp_mem_lock; 291 struct t10_alua_lu_gp *lu_gp; 292 struct se_device *lu_gp_mem_dev; 293 struct list_head lu_gp_mem_list; 294 }; 295 296 struct t10_alua_tg_pt_gp { 297 u16 tg_pt_gp_id; 298 int tg_pt_gp_valid_id; 299 int tg_pt_gp_alua_supported_states; 300 int tg_pt_gp_alua_pending_state; 301 int tg_pt_gp_alua_previous_state; 302 int tg_pt_gp_alua_access_status; 303 int tg_pt_gp_alua_access_type; 304 int tg_pt_gp_nonop_delay_msecs; 305 int tg_pt_gp_trans_delay_msecs; 306 int tg_pt_gp_implicit_trans_secs; 307 int tg_pt_gp_pref; 308 int tg_pt_gp_write_metadata; 309 u32 tg_pt_gp_members; 310 atomic_t tg_pt_gp_alua_access_state; 311 atomic_t tg_pt_gp_ref_cnt; 312 spinlock_t tg_pt_gp_lock; 313 struct mutex tg_pt_gp_md_mutex; 314 struct se_device *tg_pt_gp_dev; 315 struct config_group tg_pt_gp_group; 316 struct list_head tg_pt_gp_list; 317 struct list_head tg_pt_gp_mem_list; 318 struct se_port *tg_pt_gp_alua_port; 319 struct se_node_acl *tg_pt_gp_alua_nacl; 320 struct delayed_work tg_pt_gp_transition_work; 321 struct completion *tg_pt_gp_transition_complete; 322 }; 323 324 struct t10_alua_tg_pt_gp_member { 325 bool tg_pt_gp_assoc; 326 atomic_t tg_pt_gp_mem_ref_cnt; 327 spinlock_t tg_pt_gp_mem_lock; 328 struct t10_alua_tg_pt_gp *tg_pt_gp; 329 struct se_port *tg_pt; 330 struct list_head tg_pt_gp_mem_list; 331 }; 332 333 struct t10_vpd { 334 unsigned char device_identifier[INQUIRY_VPD_DEVICE_IDENTIFIER_LEN]; 335 int protocol_identifier_set; 336 u32 protocol_identifier; 337 u32 device_identifier_code_set; 338 u32 association; 339 u32 device_identifier_type; 340 struct list_head vpd_list; 341 }; 342 343 struct t10_wwn { 344 char vendor[8]; 345 char model[16]; 346 char revision[4]; 347 char unit_serial[INQUIRY_VPD_SERIAL_LEN]; 348 spinlock_t t10_vpd_lock; 349 struct se_device *t10_dev; 350 struct config_group t10_wwn_group; 351 struct list_head t10_vpd_list; 352 }; 353 354 struct t10_pr_registration { 355 /* Used for fabrics that contain WWN+ISID */ 356 #define PR_REG_ISID_LEN 16 357 /* PR_REG_ISID_LEN + ',i,0x' */ 358 #define PR_REG_ISID_ID_LEN (PR_REG_ISID_LEN + 5) 359 char pr_reg_isid[PR_REG_ISID_LEN]; 360 /* Used during APTPL metadata reading */ 361 #define PR_APTPL_MAX_IPORT_LEN 256 362 unsigned char pr_iport[PR_APTPL_MAX_IPORT_LEN]; 363 /* Used during APTPL metadata reading */ 364 #define PR_APTPL_MAX_TPORT_LEN 256 365 unsigned char pr_tport[PR_APTPL_MAX_TPORT_LEN]; 366 u16 pr_aptpl_rpti; 367 u16 pr_reg_tpgt; 368 /* Reservation effects all target ports */ 369 int pr_reg_all_tg_pt; 370 /* Activate Persistence across Target Power Loss */ 371 int pr_reg_aptpl; 372 int pr_res_holder; 373 int pr_res_type; 374 int pr_res_scope; 375 /* Used for fabric initiator WWPNs using a ISID */ 376 bool isid_present_at_reg; 377 u32 pr_res_mapped_lun; 378 u32 pr_aptpl_target_lun; 379 u32 pr_res_generation; 380 u64 pr_reg_bin_isid; 381 u64 pr_res_key; 382 atomic_t pr_res_holders; 383 struct se_node_acl *pr_reg_nacl; 384 struct se_dev_entry *pr_reg_deve; 385 struct se_lun *pr_reg_tg_pt_lun; 386 struct list_head pr_reg_list; 387 struct list_head pr_reg_abort_list; 388 struct list_head pr_reg_aptpl_list; 389 struct list_head pr_reg_atp_list; 390 struct list_head pr_reg_atp_mem_list; 391 }; 392 393 struct t10_reservation { 394 /* Reservation effects all target ports */ 395 int pr_all_tg_pt; 396 /* Activate Persistence across Target Power Loss enabled 397 * for SCSI device */ 398 int pr_aptpl_active; 399 #define PR_APTPL_BUF_LEN 262144 400 u32 pr_generation; 401 spinlock_t registration_lock; 402 spinlock_t aptpl_reg_lock; 403 /* 404 * This will always be set by one individual I_T Nexus. 405 * However with all_tg_pt=1, other I_T Nexus from the 406 * same initiator can access PR reg/res info on a different 407 * target port. 408 * 409 * There is also the 'All Registrants' case, where there is 410 * a single *pr_res_holder of the reservation, but all 411 * registrations are considered reservation holders. 412 */ 413 struct se_node_acl *pr_res_holder; 414 struct list_head registration_list; 415 struct list_head aptpl_reg_list; 416 }; 417 418 struct se_tmr_req { 419 /* Task Management function to be performed */ 420 u8 function; 421 /* Task Management response to send */ 422 u8 response; 423 int call_transport; 424 /* Reference to ITT that Task Mgmt should be performed */ 425 u32 ref_task_tag; 426 void *fabric_tmr_ptr; 427 struct se_cmd *task_cmd; 428 struct se_device *tmr_dev; 429 struct se_lun *tmr_lun; 430 struct list_head tmr_list; 431 }; 432 433 enum target_prot_op { 434 TARGET_PROT_NORMAL = 0, 435 TARGET_PROT_DIN_INSERT = (1 << 0), 436 TARGET_PROT_DOUT_INSERT = (1 << 1), 437 TARGET_PROT_DIN_STRIP = (1 << 2), 438 TARGET_PROT_DOUT_STRIP = (1 << 3), 439 TARGET_PROT_DIN_PASS = (1 << 4), 440 TARGET_PROT_DOUT_PASS = (1 << 5), 441 }; 442 443 #define TARGET_PROT_ALL TARGET_PROT_DIN_INSERT | TARGET_PROT_DOUT_INSERT | \ 444 TARGET_PROT_DIN_STRIP | TARGET_PROT_DOUT_STRIP | \ 445 TARGET_PROT_DIN_PASS | TARGET_PROT_DOUT_PASS 446 447 enum target_prot_type { 448 TARGET_DIF_TYPE0_PROT, 449 TARGET_DIF_TYPE1_PROT, 450 TARGET_DIF_TYPE2_PROT, 451 TARGET_DIF_TYPE3_PROT, 452 }; 453 454 enum target_core_dif_check { 455 TARGET_DIF_CHECK_GUARD = 0x1 << 0, 456 TARGET_DIF_CHECK_APPTAG = 0x1 << 1, 457 TARGET_DIF_CHECK_REFTAG = 0x1 << 2, 458 }; 459 460 struct se_dif_v1_tuple { 461 __be16 guard_tag; 462 __be16 app_tag; 463 __be32 ref_tag; 464 }; 465 466 /* for sam_task_attr */ 467 #define TCM_SIMPLE_TAG 0x20 468 #define TCM_HEAD_TAG 0x21 469 #define TCM_ORDERED_TAG 0x22 470 #define TCM_ACA_TAG 0x24 471 472 struct se_cmd { 473 /* SAM response code being sent to initiator */ 474 u8 scsi_status; 475 u8 scsi_asc; 476 u8 scsi_ascq; 477 u16 scsi_sense_length; 478 /* Delay for ALUA Active/NonOptimized state access in milliseconds */ 479 int alua_nonop_delay; 480 /* See include/linux/dma-mapping.h */ 481 enum dma_data_direction data_direction; 482 /* For SAM Task Attribute */ 483 int sam_task_attr; 484 /* Used for se_sess->sess_tag_pool */ 485 unsigned int map_tag; 486 /* Transport protocol dependent state, see transport_state_table */ 487 enum transport_state_table t_state; 488 unsigned cmd_wait_set:1; 489 unsigned unknown_data_length:1; 490 /* See se_cmd_flags_table */ 491 u32 se_cmd_flags; 492 u32 se_ordered_id; 493 /* Total size in bytes associated with command */ 494 u32 data_length; 495 u32 residual_count; 496 u32 orig_fe_lun; 497 /* Persistent Reservation key */ 498 u64 pr_res_key; 499 /* Used for sense data */ 500 void *sense_buffer; 501 struct list_head se_delayed_node; 502 struct list_head se_qf_node; 503 struct se_device *se_dev; 504 struct se_dev_entry *se_deve; 505 struct se_lun *se_lun; 506 /* Only used for internal passthrough and legacy TCM fabric modules */ 507 struct se_session *se_sess; 508 struct se_tmr_req *se_tmr_req; 509 struct list_head se_cmd_list; 510 struct completion cmd_wait_comp; 511 struct kref cmd_kref; 512 const struct target_core_fabric_ops *se_tfo; 513 sense_reason_t (*execute_cmd)(struct se_cmd *); 514 sense_reason_t (*execute_rw)(struct se_cmd *, struct scatterlist *, 515 u32, enum dma_data_direction); 516 sense_reason_t (*transport_complete_callback)(struct se_cmd *, bool); 517 518 unsigned char *t_task_cdb; 519 unsigned char __t_task_cdb[TCM_MAX_COMMAND_SIZE]; 520 unsigned long long t_task_lba; 521 unsigned int t_task_nolb; 522 unsigned int transport_state; 523 #define CMD_T_ABORTED (1 << 0) 524 #define CMD_T_ACTIVE (1 << 1) 525 #define CMD_T_COMPLETE (1 << 2) 526 #define CMD_T_SENT (1 << 4) 527 #define CMD_T_STOP (1 << 5) 528 #define CMD_T_DEV_ACTIVE (1 << 7) 529 #define CMD_T_REQUEST_STOP (1 << 8) 530 #define CMD_T_BUSY (1 << 9) 531 spinlock_t t_state_lock; 532 struct completion t_transport_stop_comp; 533 534 struct work_struct work; 535 536 struct scatterlist *t_data_sg; 537 struct scatterlist *t_data_sg_orig; 538 unsigned int t_data_nents; 539 unsigned int t_data_nents_orig; 540 void *t_data_vmap; 541 struct scatterlist *t_bidi_data_sg; 542 unsigned int t_bidi_data_nents; 543 544 struct list_head state_list; 545 bool state_active; 546 547 /* old task stop completion, consider merging with some of the above */ 548 struct completion task_stop_comp; 549 550 /* backend private data */ 551 void *priv; 552 553 /* Used for lun->lun_ref counting */ 554 int lun_ref_active; 555 556 /* DIF related members */ 557 enum target_prot_op prot_op; 558 enum target_prot_type prot_type; 559 u8 prot_checks; 560 u32 prot_length; 561 u32 reftag_seed; 562 struct scatterlist *t_prot_sg; 563 unsigned int t_prot_nents; 564 sense_reason_t pi_err; 565 sector_t bad_sector; 566 bool prot_pto; 567 }; 568 569 struct se_ua { 570 u8 ua_asc; 571 u8 ua_ascq; 572 struct se_node_acl *ua_nacl; 573 struct list_head ua_nacl_list; 574 }; 575 576 struct se_node_acl { 577 char initiatorname[TRANSPORT_IQN_LEN]; 578 /* Used to signal demo mode created ACL, disabled by default */ 579 bool dynamic_node_acl; 580 bool acl_stop:1; 581 u32 queue_depth; 582 u32 acl_index; 583 enum target_prot_type saved_prot_type; 584 #define MAX_ACL_TAG_SIZE 64 585 char acl_tag[MAX_ACL_TAG_SIZE]; 586 /* Used for PR SPEC_I_PT=1 and REGISTER_AND_MOVE */ 587 atomic_t acl_pr_ref_count; 588 struct se_dev_entry **device_list; 589 struct se_session *nacl_sess; 590 struct se_portal_group *se_tpg; 591 spinlock_t device_list_lock; 592 spinlock_t nacl_sess_lock; 593 struct config_group acl_group; 594 struct config_group acl_attrib_group; 595 struct config_group acl_auth_group; 596 struct config_group acl_param_group; 597 struct config_group acl_fabric_stat_group; 598 struct config_group *acl_default_groups[5]; 599 struct list_head acl_list; 600 struct list_head acl_sess_list; 601 struct completion acl_free_comp; 602 struct kref acl_kref; 603 }; 604 605 struct se_session { 606 unsigned sess_tearing_down:1; 607 u64 sess_bin_isid; 608 enum target_prot_op sup_prot_ops; 609 enum target_prot_type sess_prot_type; 610 struct se_node_acl *se_node_acl; 611 struct se_portal_group *se_tpg; 612 void *fabric_sess_ptr; 613 struct list_head sess_list; 614 struct list_head sess_acl_list; 615 struct list_head sess_cmd_list; 616 struct list_head sess_wait_list; 617 spinlock_t sess_cmd_lock; 618 struct kref sess_kref; 619 void *sess_cmd_map; 620 struct percpu_ida sess_tag_pool; 621 }; 622 623 struct se_device; 624 struct se_transform_info; 625 struct scatterlist; 626 627 struct se_ml_stat_grps { 628 struct config_group stat_group; 629 struct config_group scsi_auth_intr_group; 630 struct config_group scsi_att_intr_port_group; 631 }; 632 633 struct se_lun_acl { 634 char initiatorname[TRANSPORT_IQN_LEN]; 635 u32 mapped_lun; 636 struct se_node_acl *se_lun_nacl; 637 struct se_lun *se_lun; 638 struct list_head lacl_list; 639 struct config_group se_lun_group; 640 struct se_ml_stat_grps ml_stat_grps; 641 }; 642 643 struct se_dev_entry { 644 bool def_pr_registered; 645 /* See transport_lunflags_table */ 646 u32 lun_flags; 647 u32 mapped_lun; 648 u32 total_cmds; 649 u64 pr_res_key; 650 u64 creation_time; 651 u32 attach_count; 652 u64 read_bytes; 653 u64 write_bytes; 654 atomic_t ua_count; 655 /* Used for PR SPEC_I_PT=1 and REGISTER_AND_MOVE */ 656 atomic_t pr_ref_count; 657 struct se_lun_acl *se_lun_acl; 658 spinlock_t ua_lock; 659 struct se_lun *se_lun; 660 struct list_head alua_port_list; 661 struct list_head ua_list; 662 }; 663 664 struct se_dev_attrib { 665 int emulate_model_alias; 666 int emulate_dpo; 667 int emulate_fua_write; 668 int emulate_fua_read; 669 int emulate_write_cache; 670 int emulate_ua_intlck_ctrl; 671 int emulate_tas; 672 int emulate_tpu; 673 int emulate_tpws; 674 int emulate_caw; 675 int emulate_3pc; 676 int pi_prot_format; 677 enum target_prot_type pi_prot_type; 678 enum target_prot_type hw_pi_prot_type; 679 int enforce_pr_isids; 680 int force_pr_aptpl; 681 int is_nonrot; 682 int emulate_rest_reord; 683 u32 hw_block_size; 684 u32 block_size; 685 u32 hw_max_sectors; 686 u32 optimal_sectors; 687 u32 hw_queue_depth; 688 u32 queue_depth; 689 u32 max_unmap_lba_count; 690 u32 max_unmap_block_desc_count; 691 u32 unmap_granularity; 692 u32 unmap_granularity_alignment; 693 u32 max_write_same_len; 694 u32 max_bytes_per_io; 695 struct se_device *da_dev; 696 struct config_group da_group; 697 }; 698 699 struct se_port_stat_grps { 700 struct config_group stat_group; 701 struct config_group scsi_port_group; 702 struct config_group scsi_tgt_port_group; 703 struct config_group scsi_transport_group; 704 }; 705 706 struct se_lun { 707 #define SE_LUN_LINK_MAGIC 0xffff7771 708 u32 lun_link_magic; 709 /* See transport_lun_status_table */ 710 enum transport_lun_status_table lun_status; 711 u32 lun_access; 712 u32 lun_flags; 713 u32 unpacked_lun; 714 atomic_t lun_acl_count; 715 spinlock_t lun_acl_lock; 716 spinlock_t lun_sep_lock; 717 struct completion lun_shutdown_comp; 718 struct list_head lun_acl_list; 719 struct se_device *lun_se_dev; 720 struct se_port *lun_sep; 721 struct config_group lun_group; 722 struct se_port_stat_grps port_stat_grps; 723 struct completion lun_ref_comp; 724 struct percpu_ref lun_ref; 725 }; 726 727 struct se_dev_stat_grps { 728 struct config_group stat_group; 729 struct config_group scsi_dev_group; 730 struct config_group scsi_tgt_dev_group; 731 struct config_group scsi_lu_group; 732 }; 733 734 struct se_device { 735 #define SE_DEV_LINK_MAGIC 0xfeeddeef 736 u32 dev_link_magic; 737 /* RELATIVE TARGET PORT IDENTIFER Counter */ 738 u16 dev_rpti_counter; 739 /* Used for SAM Task Attribute ordering */ 740 u32 dev_cur_ordered_id; 741 u32 dev_flags; 742 #define DF_CONFIGURED 0x00000001 743 #define DF_FIRMWARE_VPD_UNIT_SERIAL 0x00000002 744 #define DF_EMULATED_VPD_UNIT_SERIAL 0x00000004 745 #define DF_USING_UDEV_PATH 0x00000008 746 #define DF_USING_ALIAS 0x00000010 747 u32 dev_port_count; 748 /* Physical device queue depth */ 749 u32 queue_depth; 750 /* Used for SPC-2 reservations enforce of ISIDs */ 751 u64 dev_res_bin_isid; 752 /* Pointer to transport specific device structure */ 753 u32 dev_index; 754 u64 creation_time; 755 atomic_long_t num_resets; 756 atomic_long_t num_cmds; 757 atomic_long_t read_bytes; 758 atomic_long_t write_bytes; 759 /* Active commands on this virtual SE device */ 760 atomic_t simple_cmds; 761 atomic_t dev_ordered_id; 762 atomic_t dev_ordered_sync; 763 atomic_t dev_qf_count; 764 int export_count; 765 spinlock_t delayed_cmd_lock; 766 spinlock_t execute_task_lock; 767 spinlock_t dev_reservation_lock; 768 unsigned int dev_reservation_flags; 769 #define DRF_SPC2_RESERVATIONS 0x00000001 770 #define DRF_SPC2_RESERVATIONS_WITH_ISID 0x00000002 771 spinlock_t se_port_lock; 772 spinlock_t se_tmr_lock; 773 spinlock_t qf_cmd_lock; 774 struct semaphore caw_sem; 775 /* Used for legacy SPC-2 reservationsa */ 776 struct se_node_acl *dev_reserved_node_acl; 777 /* Used for ALUA Logical Unit Group membership */ 778 struct t10_alua_lu_gp_member *dev_alua_lu_gp_mem; 779 /* Used for SPC-3 Persistent Reservations */ 780 struct t10_pr_registration *dev_pr_res_holder; 781 struct list_head dev_sep_list; 782 struct list_head dev_tmr_list; 783 struct workqueue_struct *tmr_wq; 784 struct work_struct qf_work_queue; 785 struct list_head delayed_cmd_list; 786 struct list_head state_list; 787 struct list_head qf_cmd_list; 788 struct list_head g_dev_node; 789 /* Pointer to associated SE HBA */ 790 struct se_hba *se_hba; 791 /* T10 Inquiry and VPD WWN Information */ 792 struct t10_wwn t10_wwn; 793 /* T10 Asymmetric Logical Unit Assignment for Target Ports */ 794 struct t10_alua t10_alua; 795 /* T10 SPC-2 + SPC-3 Reservations */ 796 struct t10_reservation t10_pr; 797 struct se_dev_attrib dev_attrib; 798 struct config_group dev_group; 799 struct config_group dev_pr_group; 800 struct se_dev_stat_grps dev_stat_grps; 801 #define SE_DEV_ALIAS_LEN 512 /* must be less than PAGE_SIZE */ 802 unsigned char dev_alias[SE_DEV_ALIAS_LEN]; 803 #define SE_UDEV_PATH_LEN 512 /* must be less than PAGE_SIZE */ 804 unsigned char udev_path[SE_UDEV_PATH_LEN]; 805 /* Pointer to template of function pointers for transport */ 806 struct se_subsystem_api *transport; 807 /* Linked list for struct se_hba struct se_device list */ 808 struct list_head dev_list; 809 struct se_lun xcopy_lun; 810 /* Protection Information */ 811 int prot_length; 812 }; 813 814 struct se_hba { 815 u16 hba_tpgt; 816 u32 hba_id; 817 /* See hba_flags_table */ 818 u32 hba_flags; 819 /* Virtual iSCSI devices attached. */ 820 u32 dev_count; 821 u32 hba_index; 822 /* Pointer to transport specific host structure. */ 823 void *hba_ptr; 824 struct list_head hba_node; 825 spinlock_t device_lock; 826 struct config_group hba_group; 827 struct mutex hba_access_mutex; 828 struct se_subsystem_api *transport; 829 }; 830 831 struct scsi_port_stats { 832 u64 cmd_pdus; 833 u64 tx_data_octets; 834 u64 rx_data_octets; 835 }; 836 837 struct se_port { 838 /* RELATIVE TARGET PORT IDENTIFER */ 839 u16 sep_rtpi; 840 int sep_tg_pt_secondary_stat; 841 int sep_tg_pt_secondary_write_md; 842 u32 sep_index; 843 struct scsi_port_stats sep_stats; 844 /* Used for ALUA Target Port Groups membership */ 845 atomic_t sep_tg_pt_secondary_offline; 846 /* Used for PR ALL_TG_PT=1 */ 847 atomic_t sep_tg_pt_ref_cnt; 848 spinlock_t sep_alua_lock; 849 struct mutex sep_tg_pt_md_mutex; 850 struct t10_alua_tg_pt_gp_member *sep_alua_tg_pt_gp_mem; 851 struct se_lun *sep_lun; 852 struct se_portal_group *sep_tpg; 853 struct list_head sep_alua_list; 854 struct list_head sep_list; 855 }; 856 857 struct se_tpg_np { 858 struct se_portal_group *tpg_np_parent; 859 struct config_group tpg_np_group; 860 }; 861 862 struct se_portal_group { 863 /* Type of target portal group, see transport_tpg_type_table */ 864 enum transport_tpg_type_table se_tpg_type; 865 /* Number of ACLed Initiator Nodes for this TPG */ 866 u32 num_node_acls; 867 /* Used for PR SPEC_I_PT=1 and REGISTER_AND_MOVE */ 868 atomic_t tpg_pr_ref_count; 869 /* Spinlock for adding/removing ACLed Nodes */ 870 spinlock_t acl_node_lock; 871 /* Spinlock for adding/removing sessions */ 872 spinlock_t session_lock; 873 spinlock_t tpg_lun_lock; 874 /* Pointer to $FABRIC_MOD portal group */ 875 void *se_tpg_fabric_ptr; 876 struct list_head se_tpg_node; 877 /* linked list for initiator ACL list */ 878 struct list_head acl_node_list; 879 struct se_lun **tpg_lun_list; 880 struct se_lun tpg_virt_lun0; 881 /* List of TCM sessions associated wth this TPG */ 882 struct list_head tpg_sess_list; 883 /* Pointer to $FABRIC_MOD dependent code */ 884 const struct target_core_fabric_ops *se_tpg_tfo; 885 struct se_wwn *se_tpg_wwn; 886 struct config_group tpg_group; 887 struct config_group *tpg_default_groups[7]; 888 struct config_group tpg_lun_group; 889 struct config_group tpg_np_group; 890 struct config_group tpg_acl_group; 891 struct config_group tpg_attrib_group; 892 struct config_group tpg_auth_group; 893 struct config_group tpg_param_group; 894 }; 895 896 struct se_wwn { 897 struct target_fabric_configfs *wwn_tf; 898 struct config_group wwn_group; 899 struct config_group *wwn_default_groups[2]; 900 struct config_group fabric_stat_group; 901 }; 902 903 static inline void atomic_inc_mb(atomic_t *v) 904 { 905 smp_mb__before_atomic(); 906 atomic_inc(v); 907 smp_mb__after_atomic(); 908 } 909 910 static inline void atomic_dec_mb(atomic_t *v) 911 { 912 smp_mb__before_atomic(); 913 atomic_dec(v); 914 smp_mb__after_atomic(); 915 } 916 917 #endif /* TARGET_CORE_BASE_H */ 918