1 #define TCM_LOOP_VERSION "v2.1-rc1" 2 #define TL_WWN_ADDR_LEN 256 3 #define TL_TPGS_PER_HBA 32 4 /* 5 * Defaults for struct scsi_host_template tcm_loop_driver_template 6 * 7 * We use large can_queue and cmd_per_lun here and let TCM enforce 8 * the underlying se_device_t->queue_depth. 9 */ 10 #define TL_SCSI_CAN_QUEUE 1024 11 #define TL_SCSI_CMD_PER_LUN 1024 12 #define TL_SCSI_MAX_SECTORS 1024 13 #define TL_SCSI_SG_TABLESIZE 256 14 /* 15 * Used in tcm_loop_driver_probe() for struct Scsi_Host->max_cmd_len 16 */ 17 #define TL_SCSI_MAX_CMD_LEN 32 18 19 #ifdef CONFIG_LOOPBACK_TARGET_CDB_DEBUG 20 # define TL_CDB_DEBUG(x...) printk(KERN_INFO x) 21 #else 22 # define TL_CDB_DEBUG(x...) 23 #endif 24 25 struct tcm_loop_cmd { 26 /* State of Linux/SCSI CDB+Data descriptor */ 27 u32 sc_cmd_state; 28 /* Pointer to the CDB+Data descriptor from Linux/SCSI subsystem */ 29 struct scsi_cmnd *sc; 30 struct list_head *tl_cmd_list; 31 /* The TCM I/O descriptor that is accessed via container_of() */ 32 struct se_cmd tl_se_cmd; 33 /* Sense buffer that will be mapped into outgoing status */ 34 unsigned char tl_sense_buf[TRANSPORT_SENSE_BUFFER]; 35 }; 36 37 struct tcm_loop_tmr { 38 atomic_t tmr_complete; 39 wait_queue_head_t tl_tmr_wait; 40 }; 41 42 struct tcm_loop_nexus { 43 int it_nexus_active; 44 /* 45 * Pointer to Linux/SCSI HBA from linux/include/scsi_host.h 46 */ 47 struct scsi_host *sh; 48 /* 49 * Pointer to TCM session for I_T Nexus 50 */ 51 struct se_session *se_sess; 52 }; 53 54 struct tcm_loop_nacl { 55 struct se_node_acl se_node_acl; 56 }; 57 58 struct tcm_loop_tpg { 59 unsigned short tl_tpgt; 60 atomic_t tl_tpg_port_count; 61 struct se_portal_group tl_se_tpg; 62 struct tcm_loop_hba *tl_hba; 63 }; 64 65 struct tcm_loop_hba { 66 u8 tl_proto_id; 67 unsigned char tl_wwn_address[TL_WWN_ADDR_LEN]; 68 struct se_hba_s *se_hba; 69 struct se_lun *tl_hba_lun; 70 struct se_port *tl_hba_lun_sep; 71 struct se_device_s *se_dev_hba_ptr; 72 struct tcm_loop_nexus *tl_nexus; 73 struct device dev; 74 struct Scsi_Host *sh; 75 struct tcm_loop_tpg tl_hba_tpgs[TL_TPGS_PER_HBA]; 76 struct se_wwn tl_hba_wwn; 77 }; 78