]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - include/target/target_core_fabric.h
target: remove ->put_session method
[karo-tx-linux.git] / include / target / target_core_fabric.h
index 22a4e98eec807ecaa93a735ad63fd05ef26809a9..55654c90350d104d4a3a372850acb2637e5b6749 100644 (file)
@@ -2,21 +2,13 @@
 #define TARGET_CORE_FABRIC_H
 
 struct target_core_fabric_ops {
-       struct configfs_subsystem *tf_subsys;
+       struct module *module;
+       const char *name;
+       size_t node_acl_size;
        char *(*get_fabric_name)(void);
-       u8 (*get_fabric_proto_ident)(struct se_portal_group *);
        char *(*tpg_get_wwn)(struct se_portal_group *);
        u16 (*tpg_get_tag)(struct se_portal_group *);
        u32 (*tpg_get_default_depth)(struct se_portal_group *);
-       u32 (*tpg_get_pr_transport_id)(struct se_portal_group *,
-                               struct se_node_acl *,
-                               struct t10_pr_registration *, int *,
-                               unsigned char *);
-       u32 (*tpg_get_pr_transport_id_len)(struct se_portal_group *,
-                               struct se_node_acl *,
-                               struct t10_pr_registration *, int *);
-       char *(*tpg_parse_pr_out_transport_id)(struct se_portal_group *,
-                               const char *, u32 *, char **);
        int (*tpg_check_demo_mode)(struct se_portal_group *);
        int (*tpg_check_demo_mode_cache)(struct se_portal_group *);
        int (*tpg_check_demo_mode_write_protect)(struct se_portal_group *);
@@ -27,10 +19,14 @@ struct target_core_fabric_ops {
         * inquiry response
         */
        int (*tpg_check_demo_mode_login_only)(struct se_portal_group *);
-       struct se_node_acl *(*tpg_alloc_fabric_acl)(
-                                       struct se_portal_group *);
-       void (*tpg_release_fabric_acl)(struct se_portal_group *,
-                                       struct se_node_acl *);
+       /*
+        * Optionally used as a configfs tunable to determine when
+        * target-core should signal the PROTECT=1 feature bit for
+        * backends that don't support T10-PI, so that either fabric
+        * HW offload or target-core emulation performs the associated
+        * WRITE_STRIP and READ_INSERT operations.
+        */
+       int (*tpg_check_prot_fabric_only)(struct se_portal_group *);
        u32 (*tpg_get_inst_index)(struct se_portal_group *);
        /*
         * Optional to release struct se_cmd and fabric dependent allocated
@@ -41,7 +37,6 @@ struct target_core_fabric_ops {
         */
        int (*check_stop_free)(struct se_cmd *);
        void (*release_cmd)(struct se_cmd *);
-       void (*put_session)(struct se_session *);
        /*
         * Called with spin_lock_bh(struct se_portal_group->session_lock held.
         */
@@ -57,7 +52,6 @@ struct target_core_fabric_ops {
        int (*write_pending)(struct se_cmd *);
        int (*write_pending_status)(struct se_cmd *);
        void (*set_default_node_attributes)(struct se_node_acl *);
-       u32 (*get_task_tag)(struct se_cmd *);
        int (*get_cmd_state)(struct se_cmd *);
        int (*queue_data_in)(struct se_cmd *);
        int (*queue_status)(struct se_cmd *);
@@ -79,11 +73,28 @@ struct target_core_fabric_ops {
        struct se_tpg_np *(*fabric_make_np)(struct se_portal_group *,
                                struct config_group *, const char *);
        void (*fabric_drop_np)(struct se_tpg_np *);
-       struct se_node_acl *(*fabric_make_nodeacl)(struct se_portal_group *,
-                               struct config_group *, const char *);
-       void (*fabric_drop_nodeacl)(struct se_node_acl *);
+       int (*fabric_init_nodeacl)(struct se_node_acl *, const char *);
+       void (*fabric_cleanup_nodeacl)(struct se_node_acl *);
+
+       struct configfs_attribute **tfc_discovery_attrs;
+       struct configfs_attribute **tfc_wwn_attrs;
+       struct configfs_attribute **tfc_tpg_base_attrs;
+       struct configfs_attribute **tfc_tpg_np_base_attrs;
+       struct configfs_attribute **tfc_tpg_attrib_attrs;
+       struct configfs_attribute **tfc_tpg_auth_attrs;
+       struct configfs_attribute **tfc_tpg_param_attrs;
+       struct configfs_attribute **tfc_tpg_nacl_base_attrs;
+       struct configfs_attribute **tfc_tpg_nacl_attrib_attrs;
+       struct configfs_attribute **tfc_tpg_nacl_auth_attrs;
+       struct configfs_attribute **tfc_tpg_nacl_param_attrs;
 };
 
+int target_register_template(const struct target_core_fabric_ops *fo);
+void target_unregister_template(const struct target_core_fabric_ops *fo);
+
+int target_depend_item(struct config_item *item);
+void target_undepend_item(struct config_item *item);
+
 struct se_session *transport_init_session(enum target_prot_op);
 int transport_alloc_session_tags(struct se_session *, unsigned int,
                unsigned int);
@@ -95,13 +106,15 @@ void       transport_register_session(struct se_portal_group *,
                struct se_node_acl *, struct se_session *, void *);
 void   target_get_session(struct se_session *);
 void   target_put_session(struct se_session *);
+ssize_t        target_show_dynamic_sessions(struct se_portal_group *, char *);
 void   transport_free_session(struct se_session *);
 void   target_put_nacl(struct se_node_acl *);
 void   transport_deregister_session_configfs(struct se_session *);
 void   transport_deregister_session(struct se_session *);
 
 
-void   transport_init_se_cmd(struct se_cmd *, struct target_core_fabric_ops *,
+void   transport_init_se_cmd(struct se_cmd *,
+               const struct target_core_fabric_ops *,
                struct se_session *, u32, int, int, unsigned char *);
 sense_reason_t transport_lookup_cmd_lun(struct se_cmd *, u32);
 sense_reason_t target_setup_cmd_from_cdb(struct se_cmd *, unsigned char *);
@@ -126,8 +139,8 @@ bool        transport_wait_for_tasks(struct se_cmd *);
 int    transport_check_aborted_status(struct se_cmd *, int);
 int    transport_send_check_condition_and_sense(struct se_cmd *,
                sense_reason_t, int);
-int    target_get_sess_cmd(struct se_session *, struct se_cmd *, bool);
-int    target_put_sess_cmd(struct se_session *, struct se_cmd *);
+int    target_get_sess_cmd(struct se_cmd *, bool);
+int    target_put_sess_cmd(struct se_cmd *);
 void   target_sess_cmd_list_set_waiting(struct se_session *);
 void   target_wait_for_sess_cmds(struct se_session *);
 
@@ -145,45 +158,14 @@ struct se_node_acl *core_tpg_get_initiator_node_acl(struct se_portal_group *tpg,
 struct se_node_acl *core_tpg_check_initiator_node_acl(struct se_portal_group *,
                unsigned char *);
 void   core_tpg_clear_object_luns(struct se_portal_group *);
-struct se_node_acl *core_tpg_add_initiator_node_acl(struct se_portal_group *,
-               struct se_node_acl *, const char *, u32);
-int    core_tpg_del_initiator_node_acl(struct se_portal_group *,
-               struct se_node_acl *, int);
 int    core_tpg_set_initiator_node_queue_depth(struct se_portal_group *,
                unsigned char *, u32, int);
 int    core_tpg_set_initiator_node_tag(struct se_portal_group *,
                struct se_node_acl *, const char *);
-int    core_tpg_register(struct target_core_fabric_ops *, struct se_wwn *,
-               struct se_portal_group *, void *, int);
+int    core_tpg_register(const struct target_core_fabric_ops *,
+               struct se_wwn *, struct se_portal_group *, int);
 int    core_tpg_deregister(struct se_portal_group *);
 
-/* SAS helpers */
-u8     sas_get_fabric_proto_ident(struct se_portal_group *);
-u32    sas_get_pr_transport_id(struct se_portal_group *, struct se_node_acl *,
-               struct t10_pr_registration *, int *, unsigned char *);
-u32    sas_get_pr_transport_id_len(struct se_portal_group *, struct se_node_acl *,
-               struct t10_pr_registration *, int *);
-char   *sas_parse_pr_out_transport_id(struct se_portal_group *, const char *,
-               u32 *, char **);
-
-/* FC helpers */
-u8     fc_get_fabric_proto_ident(struct se_portal_group *);
-u32    fc_get_pr_transport_id(struct se_portal_group *, struct se_node_acl *,
-               struct t10_pr_registration *, int *, unsigned char *);
-u32    fc_get_pr_transport_id_len(struct se_portal_group *, struct se_node_acl *,
-               struct t10_pr_registration *, int *);
-char   *fc_parse_pr_out_transport_id(struct se_portal_group *, const char *,
-               u32 *, char **);
-
-/* iSCSI helpers */
-u8     iscsi_get_fabric_proto_ident(struct se_portal_group *);
-u32    iscsi_get_pr_transport_id(struct se_portal_group *, struct se_node_acl *,
-               struct t10_pr_registration *, int *, unsigned char *);
-u32    iscsi_get_pr_transport_id_len(struct se_portal_group *, struct se_node_acl *,
-               struct t10_pr_registration *, int *);
-char   *iscsi_parse_pr_out_transport_id(struct se_portal_group *, const char *,
-               u32 *, char **);
-
 /*
  * The LIO target core uses DMA_TO_DEVICE to mean that data is going
  * to the target (eg handling a WRITE) and DMA_FROM_DEVICE to mean