2011-11-16 18:46:48 +04: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 19:09:15 +04:00
void ( * transport_complete ) ( struct se_cmd * cmd ,
struct scatterlist * ,
unsigned char * ) ;
2012-05-20 19:59:14 +04:00
2012-05-20 19:59:15 +04:00
int ( * parse_cdb ) ( struct se_cmd * cmd ) ;
2011-11-16 18:46:48 +04: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 08:25:06 +04:00
unsigned char * ( * get_sense_buffer ) ( struct se_cmd * ) ;
2011-11-16 18:46:48 +04:00
} ;
2012-06-18 02:40:52 +04:00
struct spc_ops {
int ( * execute_rw ) ( struct se_cmd * cmd ) ;
2012-06-18 02:40:53 +04:00
int ( * execute_sync_cache ) ( struct se_cmd * cmd ) ;
2012-06-18 02:40:54 +04:00
int ( * execute_write_same ) ( struct se_cmd * cmd ) ;
2012-06-18 02:40:55 +04:00
int ( * execute_unmap ) ( struct se_cmd * cmd ) ;
2012-06-18 02:40:52 +04:00
} ;
2011-11-16 18:46:48 +04: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 19:35:33 +04:00
void target_complete_cmd ( struct se_cmd * , u8 ) ;
2011-11-16 18:46:48 +04:00
2012-06-18 02:40:52 +04:00
int sbc_parse_cdb ( struct se_cmd * cmd , struct spc_ops * ops ) ;
2012-05-20 19:59:15 +04:00
int spc_parse_cdb ( struct se_cmd * cmd , unsigned int * size ) ;
2012-06-18 02:40:54 +04:00
int spc_get_write_same_sectors ( struct se_cmd * cmd ) ;
2012-05-20 19:59:14 +04:00
2011-11-16 18:46:48 +04: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-17 04:57:08 +04:00
void * transport_kmap_data_sg ( struct se_cmd * ) ;
void transport_kunmap_data_sg ( struct se_cmd * ) ;
2011-11-16 18:46:48 +04:00
2012-03-15 23:05:12 +04:00
void array_free ( void * array , int n ) ;
2011-11-16 18:46:48 +04:00
# endif /* TARGET_CORE_BACKEND_H */