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 ;
unsigned int fua_write_emulated : 1 ;
unsigned int write_cache_emulated : 1 ;
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 * ) ;
int ( * transport_complete ) ( struct se_task * task ) ;
struct se_task * ( * alloc_task ) ( unsigned char * cdb ) ;
int ( * do_task ) ( struct se_task * ) ;
int ( * do_discard ) ( struct se_device * , sector_t , u32 ) ;
2012-04-23 19:35:33 +04:00
void ( * do_sync_cache ) ( struct se_cmd * ) ;
2011-11-16 18:46:48 +04:00
void ( * free_task ) ( struct se_task * ) ;
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 * ) ;
unsigned char * ( * get_sense_buffer ) ( struct se_task * ) ;
} ;
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 * ) ;
void transport_complete_sync_cache ( struct se_cmd * , int ) ;
void transport_complete_task ( struct se_task * , int ) ;
2012-04-23 19:35:33 +04:00
void target_complete_cmd ( struct se_cmd * , u8 ) ;
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 */