2011-11-16 18:46:48 +04:00
# ifndef TARGET_CORE_FABRIC_H
# define TARGET_CORE_FABRIC_H
[SCSI] target: Add LIO target core v4.0.0-rc6
LIO target is a full featured in-kernel target framework with the
following feature set:
High-performance, non-blocking, multithreaded architecture with SIMD
support.
Advanced SCSI feature set:
* Persistent Reservations (PRs)
* Asymmetric Logical Unit Assignment (ALUA)
* Protocol and intra-nexus multiplexing, load-balancing and failover (MC/S)
* Full Error Recovery (ERL=0,1,2)
* Active/active task migration and session continuation (ERL=2)
* Thin LUN provisioning (UNMAP and WRITE_SAMExx)
Multiprotocol target plugins
Storage media independence:
* Virtualization of all storage media; transparent mapping of IO to LUNs
* No hard limits on number of LUNs per Target; maximum LUN size ~750 TB
* Backstores: SATA, SAS, SCSI, BluRay, DVD, FLASH, USB, ramdisk, etc.
Standards compliance:
* Full compliance with IETF (RFC 3720)
* Full implementation of SPC-4 PRs and ALUA
Significant code cleanups done by Christoph Hellwig.
[jejb: fix up for new block bdev exclusive interface. Minor fixes from
Randy Dunlap and Dan Carpenter.]
Signed-off-by: Nicholas A. Bellinger <nab@linux-iscsi.org>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
2010-12-17 22:11:26 +03:00
struct target_core_fabric_ops {
2015-04-08 21:01:35 +03:00
struct module * module ;
const char * name ;
2015-04-13 20:51:16 +03:00
size_t node_acl_size ;
2015-07-31 04:28:13 +03:00
/*
* Limits number of scatterlist entries per SCF_SCSI_DATA_CDB payload .
* Setting this value tells target - core to enforce this limit , and
* report as INQUIRY EVPD = b0 MAXIMUM TRANSFER LENGTH .
*
* target - core will currently reset se_cmd - > data_length to this
* maximum size , and set UNDERFLOW residual count if length exceeds
* this limit .
*
* XXX : Not all initiator hosts honor this block - limit EVPD
* XXX : Currently assumes single PAGE_SIZE per scatterlist entry
*/
u32 max_data_sg_nents ;
[SCSI] target: Add LIO target core v4.0.0-rc6
LIO target is a full featured in-kernel target framework with the
following feature set:
High-performance, non-blocking, multithreaded architecture with SIMD
support.
Advanced SCSI feature set:
* Persistent Reservations (PRs)
* Asymmetric Logical Unit Assignment (ALUA)
* Protocol and intra-nexus multiplexing, load-balancing and failover (MC/S)
* Full Error Recovery (ERL=0,1,2)
* Active/active task migration and session continuation (ERL=2)
* Thin LUN provisioning (UNMAP and WRITE_SAMExx)
Multiprotocol target plugins
Storage media independence:
* Virtualization of all storage media; transparent mapping of IO to LUNs
* No hard limits on number of LUNs per Target; maximum LUN size ~750 TB
* Backstores: SATA, SAS, SCSI, BluRay, DVD, FLASH, USB, ramdisk, etc.
Standards compliance:
* Full compliance with IETF (RFC 3720)
* Full implementation of SPC-4 PRs and ALUA
Significant code cleanups done by Christoph Hellwig.
[jejb: fix up for new block bdev exclusive interface. Minor fixes from
Randy Dunlap and Dan Carpenter.]
Signed-off-by: Nicholas A. Bellinger <nab@linux-iscsi.org>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
2010-12-17 22:11:26 +03:00
char * ( * get_fabric_name ) ( void ) ;
char * ( * tpg_get_wwn ) ( struct se_portal_group * ) ;
u16 ( * tpg_get_tag ) ( struct se_portal_group * ) ;
u32 ( * tpg_get_default_depth ) ( struct se_portal_group * ) ;
int ( * tpg_check_demo_mode ) ( struct se_portal_group * ) ;
int ( * tpg_check_demo_mode_cache ) ( struct se_portal_group * ) ;
int ( * tpg_check_demo_mode_write_protect ) ( struct se_portal_group * ) ;
int ( * tpg_check_prod_mode_write_protect ) ( struct se_portal_group * ) ;
2011-07-27 04:48:43 +04:00
/*
* Optionally used by fabrics to allow demo - mode login , but not
* expose any TPG LUNs , and return ' not connected ' in standard
* inquiry response
*/
int ( * tpg_check_demo_mode_login_only ) ( struct se_portal_group * ) ;
2015-02-28 09:05:21 +03:00
/*
* Optionally used as a configfs tunable to determine when
* target - core should signal the PROTECT = 1 feature bit for
* backends that don ' t support T10 - PI , so that either fabric
* HW offload or target - core emulation performs the associated
* WRITE_STRIP and READ_INSERT operations .
*/
int ( * tpg_check_prot_fabric_only ) ( struct se_portal_group * ) ;
[SCSI] target: Add LIO target core v4.0.0-rc6
LIO target is a full featured in-kernel target framework with the
following feature set:
High-performance, non-blocking, multithreaded architecture with SIMD
support.
Advanced SCSI feature set:
* Persistent Reservations (PRs)
* Asymmetric Logical Unit Assignment (ALUA)
* Protocol and intra-nexus multiplexing, load-balancing and failover (MC/S)
* Full Error Recovery (ERL=0,1,2)
* Active/active task migration and session continuation (ERL=2)
* Thin LUN provisioning (UNMAP and WRITE_SAMExx)
Multiprotocol target plugins
Storage media independence:
* Virtualization of all storage media; transparent mapping of IO to LUNs
* No hard limits on number of LUNs per Target; maximum LUN size ~750 TB
* Backstores: SATA, SAS, SCSI, BluRay, DVD, FLASH, USB, ramdisk, etc.
Standards compliance:
* Full compliance with IETF (RFC 3720)
* Full implementation of SPC-4 PRs and ALUA
Significant code cleanups done by Christoph Hellwig.
[jejb: fix up for new block bdev exclusive interface. Minor fixes from
Randy Dunlap and Dan Carpenter.]
Signed-off-by: Nicholas A. Bellinger <nab@linux-iscsi.org>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
2010-12-17 22:11:26 +03:00
u32 ( * tpg_get_inst_index ) ( struct se_portal_group * ) ;
/*
* Optional to release struct se_cmd and fabric dependent allocated
2011-11-02 14:33:16 +04:00
* I / O descriptor in transport_cmd_check_stop ( ) .
*
* Returning 1 will signal a descriptor has been released .
* Returning 0 will signal a descriptor has not been released .
[SCSI] target: Add LIO target core v4.0.0-rc6
LIO target is a full featured in-kernel target framework with the
following feature set:
High-performance, non-blocking, multithreaded architecture with SIMD
support.
Advanced SCSI feature set:
* Persistent Reservations (PRs)
* Asymmetric Logical Unit Assignment (ALUA)
* Protocol and intra-nexus multiplexing, load-balancing and failover (MC/S)
* Full Error Recovery (ERL=0,1,2)
* Active/active task migration and session continuation (ERL=2)
* Thin LUN provisioning (UNMAP and WRITE_SAMExx)
Multiprotocol target plugins
Storage media independence:
* Virtualization of all storage media; transparent mapping of IO to LUNs
* No hard limits on number of LUNs per Target; maximum LUN size ~750 TB
* Backstores: SATA, SAS, SCSI, BluRay, DVD, FLASH, USB, ramdisk, etc.
Standards compliance:
* Full compliance with IETF (RFC 3720)
* Full implementation of SPC-4 PRs and ALUA
Significant code cleanups done by Christoph Hellwig.
[jejb: fix up for new block bdev exclusive interface. Minor fixes from
Randy Dunlap and Dan Carpenter.]
Signed-off-by: Nicholas A. Bellinger <nab@linux-iscsi.org>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
2010-12-17 22:11:26 +03:00
*/
2011-11-02 14:33:16 +04:00
int ( * check_stop_free ) ( struct se_cmd * ) ;
2011-06-01 07:56:57 +04:00
void ( * release_cmd ) ( struct se_cmd * ) ;
[SCSI] target: Add LIO target core v4.0.0-rc6
LIO target is a full featured in-kernel target framework with the
following feature set:
High-performance, non-blocking, multithreaded architecture with SIMD
support.
Advanced SCSI feature set:
* Persistent Reservations (PRs)
* Asymmetric Logical Unit Assignment (ALUA)
* Protocol and intra-nexus multiplexing, load-balancing and failover (MC/S)
* Full Error Recovery (ERL=0,1,2)
* Active/active task migration and session continuation (ERL=2)
* Thin LUN provisioning (UNMAP and WRITE_SAMExx)
Multiprotocol target plugins
Storage media independence:
* Virtualization of all storage media; transparent mapping of IO to LUNs
* No hard limits on number of LUNs per Target; maximum LUN size ~750 TB
* Backstores: SATA, SAS, SCSI, BluRay, DVD, FLASH, USB, ramdisk, etc.
Standards compliance:
* Full compliance with IETF (RFC 3720)
* Full implementation of SPC-4 PRs and ALUA
Significant code cleanups done by Christoph Hellwig.
[jejb: fix up for new block bdev exclusive interface. Minor fixes from
Randy Dunlap and Dan Carpenter.]
Signed-off-by: Nicholas A. Bellinger <nab@linux-iscsi.org>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
2010-12-17 22:11:26 +03:00
void ( * close_session ) ( struct se_session * ) ;
u32 ( * sess_get_index ) ( struct se_session * ) ;
/*
* Used only for SCSI fabrics that contain multi - value TransportIDs
* ( like iSCSI ) . All other SCSI fabrics should set this to NULL .
*/
u32 ( * sess_get_initiator_sid ) ( struct se_session * ,
unsigned char * , u32 ) ;
int ( * write_pending ) ( struct se_cmd * ) ;
int ( * write_pending_status ) ( struct se_cmd * ) ;
void ( * set_default_node_attributes ) ( struct se_node_acl * ) ;
int ( * get_cmd_state ) ( struct se_cmd * ) ;
int ( * queue_data_in ) ( struct se_cmd * ) ;
int ( * queue_status ) ( struct se_cmd * ) ;
2013-07-03 19:22:17 +04:00
void ( * queue_tm_rsp ) ( struct se_cmd * ) ;
2014-03-23 01:55:56 +04:00
void ( * aborted_task ) ( struct se_cmd * ) ;
[SCSI] target: Add LIO target core v4.0.0-rc6
LIO target is a full featured in-kernel target framework with the
following feature set:
High-performance, non-blocking, multithreaded architecture with SIMD
support.
Advanced SCSI feature set:
* Persistent Reservations (PRs)
* Asymmetric Logical Unit Assignment (ALUA)
* Protocol and intra-nexus multiplexing, load-balancing and failover (MC/S)
* Full Error Recovery (ERL=0,1,2)
* Active/active task migration and session continuation (ERL=2)
* Thin LUN provisioning (UNMAP and WRITE_SAMExx)
Multiprotocol target plugins
Storage media independence:
* Virtualization of all storage media; transparent mapping of IO to LUNs
* No hard limits on number of LUNs per Target; maximum LUN size ~750 TB
* Backstores: SATA, SAS, SCSI, BluRay, DVD, FLASH, USB, ramdisk, etc.
Standards compliance:
* Full compliance with IETF (RFC 3720)
* Full implementation of SPC-4 PRs and ALUA
Significant code cleanups done by Christoph Hellwig.
[jejb: fix up for new block bdev exclusive interface. Minor fixes from
Randy Dunlap and Dan Carpenter.]
Signed-off-by: Nicholas A. Bellinger <nab@linux-iscsi.org>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
2010-12-17 22:11:26 +03:00
/*
* fabric module calls for target_core_fabric_configfs . c
*/
struct se_wwn * ( * fabric_make_wwn ) ( struct target_fabric_configfs * ,
struct config_group * , const char * ) ;
void ( * fabric_drop_wwn ) ( struct se_wwn * ) ;
2016-03-29 14:03:35 +03:00
void ( * add_wwn_groups ) ( struct se_wwn * ) ;
[SCSI] target: Add LIO target core v4.0.0-rc6
LIO target is a full featured in-kernel target framework with the
following feature set:
High-performance, non-blocking, multithreaded architecture with SIMD
support.
Advanced SCSI feature set:
* Persistent Reservations (PRs)
* Asymmetric Logical Unit Assignment (ALUA)
* Protocol and intra-nexus multiplexing, load-balancing and failover (MC/S)
* Full Error Recovery (ERL=0,1,2)
* Active/active task migration and session continuation (ERL=2)
* Thin LUN provisioning (UNMAP and WRITE_SAMExx)
Multiprotocol target plugins
Storage media independence:
* Virtualization of all storage media; transparent mapping of IO to LUNs
* No hard limits on number of LUNs per Target; maximum LUN size ~750 TB
* Backstores: SATA, SAS, SCSI, BluRay, DVD, FLASH, USB, ramdisk, etc.
Standards compliance:
* Full compliance with IETF (RFC 3720)
* Full implementation of SPC-4 PRs and ALUA
Significant code cleanups done by Christoph Hellwig.
[jejb: fix up for new block bdev exclusive interface. Minor fixes from
Randy Dunlap and Dan Carpenter.]
Signed-off-by: Nicholas A. Bellinger <nab@linux-iscsi.org>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
2010-12-17 22:11:26 +03:00
struct se_portal_group * ( * fabric_make_tpg ) ( struct se_wwn * ,
struct config_group * , const char * ) ;
void ( * fabric_drop_tpg ) ( struct se_portal_group * ) ;
int ( * fabric_post_link ) ( struct se_portal_group * ,
struct se_lun * ) ;
void ( * fabric_pre_unlink ) ( struct se_portal_group * ,
struct se_lun * ) ;
struct se_tpg_np * ( * fabric_make_np ) ( struct se_portal_group * ,
struct config_group * , const char * ) ;
void ( * fabric_drop_np ) ( struct se_tpg_np * ) ;
2015-04-13 20:51:14 +03:00
int ( * fabric_init_nodeacl ) ( struct se_node_acl * , const char * ) ;
2015-04-08 21:01:35 +03:00
struct configfs_attribute * * tfc_discovery_attrs ;
struct configfs_attribute * * tfc_wwn_attrs ;
struct configfs_attribute * * tfc_tpg_base_attrs ;
struct configfs_attribute * * tfc_tpg_np_base_attrs ;
struct configfs_attribute * * tfc_tpg_attrib_attrs ;
struct configfs_attribute * * tfc_tpg_auth_attrs ;
struct configfs_attribute * * tfc_tpg_param_attrs ;
struct configfs_attribute * * tfc_tpg_nacl_base_attrs ;
struct configfs_attribute * * tfc_tpg_nacl_attrib_attrs ;
struct configfs_attribute * * tfc_tpg_nacl_auth_attrs ;
struct configfs_attribute * * tfc_tpg_nacl_param_attrs ;
[SCSI] target: Add LIO target core v4.0.0-rc6
LIO target is a full featured in-kernel target framework with the
following feature set:
High-performance, non-blocking, multithreaded architecture with SIMD
support.
Advanced SCSI feature set:
* Persistent Reservations (PRs)
* Asymmetric Logical Unit Assignment (ALUA)
* Protocol and intra-nexus multiplexing, load-balancing and failover (MC/S)
* Full Error Recovery (ERL=0,1,2)
* Active/active task migration and session continuation (ERL=2)
* Thin LUN provisioning (UNMAP and WRITE_SAMExx)
Multiprotocol target plugins
Storage media independence:
* Virtualization of all storage media; transparent mapping of IO to LUNs
* No hard limits on number of LUNs per Target; maximum LUN size ~750 TB
* Backstores: SATA, SAS, SCSI, BluRay, DVD, FLASH, USB, ramdisk, etc.
Standards compliance:
* Full compliance with IETF (RFC 3720)
* Full implementation of SPC-4 PRs and ALUA
Significant code cleanups done by Christoph Hellwig.
[jejb: fix up for new block bdev exclusive interface. Minor fixes from
Randy Dunlap and Dan Carpenter.]
Signed-off-by: Nicholas A. Bellinger <nab@linux-iscsi.org>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
2010-12-17 22:11:26 +03:00
} ;
2011-11-16 18:46:48 +04:00
2015-04-08 21:01:35 +03:00
int target_register_template ( const struct target_core_fabric_ops * fo ) ;
void target_unregister_template ( const struct target_core_fabric_ops * fo ) ;
2015-05-03 09:50:52 +03:00
int target_depend_item ( struct config_item * item ) ;
void target_undepend_item ( struct config_item * item ) ;
2016-01-09 16:29:24 +03:00
struct se_session * target_alloc_session ( struct se_portal_group * ,
unsigned int , unsigned int , enum target_prot_op prot_op ,
const char * , void * ,
int ( * callback ) ( struct se_portal_group * ,
struct se_session * , void * ) ) ;
2014-04-02 23:52:38 +04:00
struct se_session * transport_init_session ( enum target_prot_op ) ;
2013-06-08 04:38:58 +04:00
int transport_alloc_session_tags ( struct se_session * , unsigned int ,
unsigned int ) ;
2014-04-02 23:52:38 +04:00
struct se_session * transport_init_session_tags ( unsigned int , unsigned int ,
enum target_prot_op ) ;
2011-11-16 18:46:48 +04:00
void __transport_register_session ( struct se_portal_group * ,
struct se_node_acl * , struct se_session * , void * ) ;
void transport_register_session ( struct se_portal_group * ,
struct se_node_acl * , struct se_session * , void * ) ;
2015-03-07 07:34:32 +03:00
ssize_t target_show_dynamic_sessions ( struct se_portal_group * , char * ) ;
2011-11-16 18:46:48 +04:00
void transport_free_session ( struct se_session * ) ;
2012-03-09 11:45:02 +04:00
void target_put_nacl ( struct se_node_acl * ) ;
2011-11-16 18:46:48 +04:00
void transport_deregister_session_configfs ( struct se_session * ) ;
void transport_deregister_session ( struct se_session * ) ;
2015-04-08 21:01:35 +03:00
void transport_init_se_cmd ( struct se_cmd * ,
const struct target_core_fabric_ops * ,
2011-11-16 18:46:48 +04:00
struct se_session * , u32 , int , int , unsigned char * ) ;
2015-06-10 09:41:22 +03:00
sense_reason_t transport_lookup_cmd_lun ( struct se_cmd * , u64 ) ;
2012-11-07 00:24:09 +04:00
sense_reason_t target_setup_cmd_from_cdb ( struct se_cmd * , unsigned char * ) ;
2012-10-02 04:23:22 +04:00
int target_submit_cmd_map_sgls ( struct se_cmd * , struct se_session * ,
2015-06-10 09:41:22 +03:00
unsigned char * , unsigned char * , u64 , u32 , int , int , int ,
2013-12-24 00:38:30 +04:00
struct scatterlist * , u32 , struct scatterlist * , u32 ,
struct scatterlist * , u32 ) ;
2012-07-16 22:04:39 +04:00
int target_submit_cmd ( struct se_cmd * , struct se_session * , unsigned char * ,
2015-06-10 09:41:22 +03:00
unsigned char * , u64 , u32 , int , int , int ) ;
2012-02-25 13:40:24 +04:00
int target_submit_tmr ( struct se_cmd * se_cmd , struct se_session * se_sess ,
2015-06-10 09:41:22 +03:00
unsigned char * sense , u64 unpacked_lun ,
2012-02-25 17:10:04 +04:00
void * fabric_tmr_ptr , unsigned char tm_type ,
2016-01-05 16:46:39 +03:00
gfp_t , u64 , int ) ;
2011-11-16 18:46:48 +04:00
int transport_handle_cdb_direct ( struct se_cmd * ) ;
2012-11-07 00:24:09 +04:00
sense_reason_t transport_generic_new_cmd ( struct se_cmd * ) ;
2011-11-16 18:46:48 +04:00
2012-07-08 23:58:39 +04:00
void target_execute_cmd ( struct se_cmd * cmd ) ;
2011-11-16 18:46:48 +04:00
2013-05-31 11:46:11 +04:00
int transport_generic_free_cmd ( struct se_cmd * , int ) ;
2011-11-16 18:46:48 +04:00
bool transport_wait_for_tasks ( struct se_cmd * ) ;
int transport_check_aborted_status ( struct se_cmd * , int ) ;
2012-11-07 00:24:09 +04:00
int transport_send_check_condition_and_sense ( struct se_cmd * ,
sense_reason_t , int ) ;
2015-04-27 14:52:36 +03:00
int target_get_sess_cmd ( struct se_cmd * , bool ) ;
int target_put_sess_cmd ( struct se_cmd * ) ;
2012-07-16 22:04:42 +04:00
void target_sess_cmd_list_set_waiting ( struct se_session * ) ;
2013-05-15 11:44:07 +04:00
void target_wait_for_sess_cmds ( struct se_session * ) ;
2011-11-16 18:46:48 +04:00
int core_alua_check_nonop_delay ( struct se_cmd * ) ;
2012-01-20 01:39:17 +04:00
int core_tmr_alloc_req ( struct se_cmd * , void * , u8 , gfp_t ) ;
2011-11-16 18:46:48 +04:00
void core_tmr_release_req ( struct se_tmr_req * ) ;
int transport_generic_handle_tmr ( struct se_cmd * ) ;
2012-11-07 00:24:09 +04:00
void transport_generic_request_failure ( struct se_cmd * , sense_reason_t ) ;
2013-08-22 03:04:10 +04:00
void __target_execute_cmd ( struct se_cmd * ) ;
2015-06-10 09:41:22 +03:00
int transport_lookup_tmr_lun ( struct se_cmd * , u64 ) ;
2015-06-18 12:43:38 +03:00
void core_allocate_nexus_loss_ua ( struct se_node_acl * acl ) ;
2011-11-16 18:46:48 +04:00
2013-10-08 01:13:02 +04:00
struct se_node_acl * core_tpg_get_initiator_node_acl ( struct se_portal_group * tpg ,
unsigned char * ) ;
2016-01-08 09:09:27 +03:00
bool target_tpg_has_node_acl ( struct se_portal_group * tpg ,
const char * ) ;
2011-11-16 18:46:48 +04:00
struct se_node_acl * core_tpg_check_initiator_node_acl ( struct se_portal_group * ,
unsigned char * ) ;
2016-01-08 09:15:06 +03:00
int core_tpg_set_initiator_node_queue_depth ( struct se_node_acl * , u32 ) ;
2012-12-12 04:30:53 +04:00
int core_tpg_set_initiator_node_tag ( struct se_portal_group * ,
struct se_node_acl * , const char * ) ;
2015-05-21 07:48:03 +03:00
int core_tpg_register ( struct se_wwn * , struct se_portal_group * , int ) ;
2011-11-16 18:46:48 +04:00
int core_tpg_deregister ( struct se_portal_group * ) ;
2013-08-22 01:54:54 +04:00
/*
* The LIO target core uses DMA_TO_DEVICE to mean that data is going
* to the target ( eg handling a WRITE ) and DMA_FROM_DEVICE to mean
* that data is coming from the target ( eg handling a READ ) . However ,
* this is just the opposite of what we have to tell the DMA mapping
* layer - - eg when handling a READ , the HBA will have to DMA the data
* out of memory so it can send it to the initiator , which means we
* need to use DMA_TO_DEVICE when we map the data .
*/
static inline enum dma_data_direction
target_reverse_dma_direction ( struct se_cmd * se_cmd )
{
if ( se_cmd - > se_cmd_flags & SCF_BIDI )
return DMA_BIDIRECTIONAL ;
switch ( se_cmd - > data_direction ) {
case DMA_TO_DEVICE :
return DMA_FROM_DEVICE ;
case DMA_FROM_DEVICE :
return DMA_TO_DEVICE ;
case DMA_NONE :
default :
return DMA_NONE ;
}
}
2011-11-16 18:46:48 +04:00
# endif /* TARGET_CORE_FABRICH */