2011-11-16 09:46:48 -05:00
# ifndef TARGET_CORE_BACKEND_H
# define TARGET_CORE_BACKEND_H
# define TRANSPORT_PLUGIN_PHBA_PDEV 1
# define TRANSPORT_PLUGIN_VHBA_PDEV 2
# define TRANSPORT_PLUGIN_VHBA_VDEV 3
struct se_subsystem_api {
struct list_head sub_api_list ;
char name [ 16 ] ;
struct module * owner ;
u8 transport_type ;
int ( * attach_hba ) ( struct se_hba * , u32 ) ;
void ( * detach_hba ) ( struct se_hba * ) ;
int ( * pmode_enable_hba ) ( struct se_hba * , unsigned long ) ;
void * ( * allocate_virtdevice ) ( struct se_hba * , const char * ) ;
struct se_device * ( * create_virtdevice ) ( struct se_hba * ,
struct se_subsystem_dev * , void * ) ;
void ( * free_device ) ( void * ) ;
2012-09-05 17:09:15 +02:00
void ( * transport_complete ) ( struct se_cmd * cmd ,
struct scatterlist * ,
unsigned char * ) ;
2012-05-20 11:59:14 -04:00
2012-05-20 11:59:15 -04:00
int ( * parse_cdb ) ( struct se_cmd * cmd ) ;
2011-11-16 09:46:48 -05:00
ssize_t ( * check_configfs_dev_params ) ( struct se_hba * ,
struct se_subsystem_dev * ) ;
ssize_t ( * set_configfs_dev_params ) ( struct se_hba * ,
struct se_subsystem_dev * , const char * , ssize_t ) ;
ssize_t ( * show_configfs_dev_params ) ( struct se_hba * ,
struct se_subsystem_dev * , char * ) ;
u32 ( * get_device_rev ) ( struct se_device * ) ;
u32 ( * get_device_type ) ( struct se_device * ) ;
sector_t ( * get_blocks ) ( struct se_device * ) ;
2012-04-24 00:25:06 -04:00
unsigned char * ( * get_sense_buffer ) ( struct se_cmd * ) ;
2011-11-16 09:46:48 -05:00
} ;
2012-06-17 18:40:52 -04:00
struct spc_ops {
int ( * execute_rw ) ( struct se_cmd * cmd ) ;
2012-06-17 18:40:53 -04:00
int ( * execute_sync_cache ) ( struct se_cmd * cmd ) ;
2012-06-17 18:40:54 -04:00
int ( * execute_write_same ) ( struct se_cmd * cmd ) ;
2012-06-17 18:40:55 -04:00
int ( * execute_unmap ) ( struct se_cmd * cmd ) ;
2012-06-17 18:40:52 -04:00
} ;
2011-11-16 09:46:48 -05:00
int transport_subsystem_register ( struct se_subsystem_api * ) ;
void transport_subsystem_release ( struct se_subsystem_api * ) ;
struct se_device * transport_add_device_to_core_hba ( struct se_hba * ,
struct se_subsystem_api * , struct se_subsystem_dev * , u32 ,
void * , struct se_dev_limits * , const char * , const char * ) ;
2012-04-23 11:35:33 -04:00
void target_complete_cmd ( struct se_cmd * , u8 ) ;
2011-11-16 09:46:48 -05:00
2012-06-17 18:40:52 -04:00
int sbc_parse_cdb ( struct se_cmd * cmd , struct spc_ops * ops ) ;
2012-05-20 11:59:15 -04:00
int spc_parse_cdb ( struct se_cmd * cmd , unsigned int * size ) ;
2012-06-17 18:40:54 -04:00
int spc_get_write_same_sectors ( struct se_cmd * cmd ) ;
2012-05-20 11:59:14 -04:00
2011-11-16 09:46:48 -05:00
void transport_set_vpd_proto_id ( struct t10_vpd * , unsigned char * ) ;
int transport_set_vpd_assoc ( struct t10_vpd * , unsigned char * ) ;
int transport_set_vpd_ident_type ( struct t10_vpd * , unsigned char * ) ;
int transport_set_vpd_ident ( struct t10_vpd * , unsigned char * ) ;
/* core helpers also used by command snooping in pscsi */
2012-01-16 16:57:08 -08:00
void * transport_kmap_data_sg ( struct se_cmd * ) ;
void transport_kunmap_data_sg ( struct se_cmd * ) ;
2011-11-16 09:46:48 -05:00
2012-03-15 15:05:12 -04:00
void array_free ( void * array , int n ) ;
2011-11-16 09:46:48 -05:00
# endif /* TARGET_CORE_BACKEND_H */