linux/include/target/target_core_backend.h
<<
>>
Prefs
   1#ifndef TARGET_CORE_BACKEND_H
   2#define TARGET_CORE_BACKEND_H
   3
   4#define TRANSPORT_PLUGIN_PHBA_PDEV              1
   5#define TRANSPORT_PLUGIN_VHBA_PDEV              2
   6#define TRANSPORT_PLUGIN_VHBA_VDEV              3
   7
   8struct se_subsystem_api {
   9        struct list_head sub_api_list;
  10
  11        char name[16];
  12        struct module *owner;
  13
  14        u8 transport_type;
  15
  16        unsigned int fua_write_emulated : 1;
  17        unsigned int write_cache_emulated : 1;
  18
  19        int (*attach_hba)(struct se_hba *, u32);
  20        void (*detach_hba)(struct se_hba *);
  21        int (*pmode_enable_hba)(struct se_hba *, unsigned long);
  22        void *(*allocate_virtdevice)(struct se_hba *, const char *);
  23        struct se_device *(*create_virtdevice)(struct se_hba *,
  24                                struct se_subsystem_dev *, void *);
  25        void (*free_device)(void *);
  26        void (*transport_complete)(struct se_cmd *cmd,
  27                                   struct scatterlist *,
  28                                   unsigned char *);
  29
  30        int (*parse_cdb)(struct se_cmd *cmd);
  31        ssize_t (*check_configfs_dev_params)(struct se_hba *,
  32                        struct se_subsystem_dev *);
  33        ssize_t (*set_configfs_dev_params)(struct se_hba *,
  34                        struct se_subsystem_dev *, const char *, ssize_t);
  35        ssize_t (*show_configfs_dev_params)(struct se_hba *,
  36                        struct se_subsystem_dev *, char *);
  37        u32 (*get_device_rev)(struct se_device *);
  38        u32 (*get_device_type)(struct se_device *);
  39        sector_t (*get_blocks)(struct se_device *);
  40        unsigned char *(*get_sense_buffer)(struct se_cmd *);
  41};
  42
  43struct spc_ops {
  44        int (*execute_rw)(struct se_cmd *cmd);
  45        int (*execute_sync_cache)(struct se_cmd *cmd);
  46        int (*execute_write_same)(struct se_cmd *cmd);
  47        int (*execute_unmap)(struct se_cmd *cmd);
  48};
  49
  50int     transport_subsystem_register(struct se_subsystem_api *);
  51void    transport_subsystem_release(struct se_subsystem_api *);
  52
  53struct se_device *transport_add_device_to_core_hba(struct se_hba *,
  54                struct se_subsystem_api *, struct se_subsystem_dev *, u32,
  55                void *, struct se_dev_limits *, const char *, const char *);
  56
  57void    target_complete_cmd(struct se_cmd *, u8);
  58
  59int     sbc_parse_cdb(struct se_cmd *cmd, struct spc_ops *ops);
  60int     spc_parse_cdb(struct se_cmd *cmd, unsigned int *size);
  61int     spc_get_write_same_sectors(struct se_cmd *cmd);
  62
  63void    transport_set_vpd_proto_id(struct t10_vpd *, unsigned char *);
  64int     transport_set_vpd_assoc(struct t10_vpd *, unsigned char *);
  65int     transport_set_vpd_ident_type(struct t10_vpd *, unsigned char *);
  66int     transport_set_vpd_ident(struct t10_vpd *, unsigned char *);
  67
  68/* core helpers also used by command snooping in pscsi */
  69void    *transport_kmap_data_sg(struct se_cmd *);
  70void    transport_kunmap_data_sg(struct se_cmd *);
  71
  72void    array_free(void *array, int n);
  73
  74#endif /* TARGET_CORE_BACKEND_H */
  75
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.