linux/include/target/target_core_backend.h
<<
>>
Prefs
   1#ifndef TARGET_CORE_BACKEND_H
   2#define TARGET_CORE_BACKEND_H
   3
   4#define TRANSPORT_FLAG_PASSTHROUGH              1
   5
   6struct target_backend_ops {
   7        char name[16];
   8        char inquiry_prod[16];
   9        char inquiry_rev[4];
  10        struct module *owner;
  11
  12        u8 transport_flags;
  13
  14        int (*attach_hba)(struct se_hba *, u32);
  15        void (*detach_hba)(struct se_hba *);
  16        int (*pmode_enable_hba)(struct se_hba *, unsigned long);
  17
  18        struct se_device *(*alloc_device)(struct se_hba *, const char *);
  19        int (*configure_device)(struct se_device *);
  20        void (*free_device)(struct se_device *device);
  21
  22        ssize_t (*set_configfs_dev_params)(struct se_device *,
  23                                           const char *, ssize_t);
  24        ssize_t (*show_configfs_dev_params)(struct se_device *, char *);
  25
  26        void (*transport_complete)(struct se_cmd *cmd,
  27                                   struct scatterlist *,
  28                                   unsigned char *);
  29
  30        sense_reason_t (*parse_cdb)(struct se_cmd *cmd);
  31        u32 (*get_device_type)(struct se_device *);
  32        sector_t (*get_blocks)(struct se_device *);
  33        sector_t (*get_alignment_offset_lbas)(struct se_device *);
  34        /* lbppbe = logical blocks per physical block exponent. see SBC-3 */
  35        unsigned int (*get_lbppbe)(struct se_device *);
  36        unsigned int (*get_io_min)(struct se_device *);
  37        unsigned int (*get_io_opt)(struct se_device *);
  38        unsigned char *(*get_sense_buffer)(struct se_cmd *);
  39        bool (*get_write_cache)(struct se_device *);
  40        int (*init_prot)(struct se_device *);
  41        int (*format_prot)(struct se_device *);
  42        void (*free_prot)(struct se_device *);
  43
  44        struct configfs_attribute **tb_dev_attrib_attrs;
  45};
  46
  47struct sbc_ops {
  48        sense_reason_t (*execute_rw)(struct se_cmd *cmd, struct scatterlist *,
  49                                     u32, enum dma_data_direction);
  50        sense_reason_t (*execute_sync_cache)(struct se_cmd *cmd);
  51        sense_reason_t (*execute_write_same)(struct se_cmd *cmd);
  52        sense_reason_t (*execute_unmap)(struct se_cmd *cmd,
  53                                sector_t lba, sector_t nolb);
  54};
  55
  56int     transport_backend_register(const struct target_backend_ops *);
  57void    target_backend_unregister(const struct target_backend_ops *);
  58
  59void    target_complete_cmd(struct se_cmd *, u8);
  60void    target_complete_cmd_with_length(struct se_cmd *, u8, int);
  61
  62sense_reason_t  spc_parse_cdb(struct se_cmd *cmd, unsigned int *size);
  63sense_reason_t  spc_emulate_report_luns(struct se_cmd *cmd);
  64sense_reason_t  spc_emulate_inquiry_std(struct se_cmd *, unsigned char *);
  65sense_reason_t  spc_emulate_evpd_83(struct se_cmd *, unsigned char *);
  66
  67sense_reason_t  sbc_parse_cdb(struct se_cmd *cmd, struct sbc_ops *ops);
  68u32     sbc_get_device_rev(struct se_device *dev);
  69u32     sbc_get_device_type(struct se_device *dev);
  70sector_t        sbc_get_write_same_sectors(struct se_cmd *cmd);
  71void    sbc_dif_generate(struct se_cmd *);
  72sense_reason_t  sbc_dif_verify(struct se_cmd *, sector_t, unsigned int,
  73                                     unsigned int, struct scatterlist *, int);
  74void sbc_dif_copy_prot(struct se_cmd *, unsigned int, bool,
  75                       struct scatterlist *, int);
  76void    transport_set_vpd_proto_id(struct t10_vpd *, unsigned char *);
  77int     transport_set_vpd_assoc(struct t10_vpd *, unsigned char *);
  78int     transport_set_vpd_ident_type(struct t10_vpd *, unsigned char *);
  79int     transport_set_vpd_ident(struct t10_vpd *, unsigned char *);
  80
  81extern struct configfs_attribute *sbc_attrib_attrs[];
  82extern struct configfs_attribute *passthrough_attrib_attrs[];
  83
  84/* core helpers also used by command snooping in pscsi */
  85void    *transport_kmap_data_sg(struct se_cmd *);
  86void    transport_kunmap_data_sg(struct se_cmd *);
  87/* core helpers also used by xcopy during internal command setup */
  88int     target_alloc_sgl(struct scatterlist **, unsigned int *, u32, bool);
  89sense_reason_t  transport_generic_map_mem_to_cmd(struct se_cmd *,
  90                struct scatterlist *, u32, struct scatterlist *, u32);
  91
  92bool    target_lun_is_rdonly(struct se_cmd *);
  93sense_reason_t passthrough_parse_cdb(struct se_cmd *cmd,
  94        sense_reason_t (*exec_cmd)(struct se_cmd *cmd));
  95
  96bool target_sense_desc_format(struct se_device *dev);
  97sector_t target_to_linux_sector(struct se_device *dev, sector_t lb);
  98bool target_configure_unmap_from_queue(struct se_dev_attrib *attrib,
  99                                       struct request_queue *q, int block_size);
 100
 101#endif /* TARGET_CORE_BACKEND_H */
 102