iscsi_transport.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #include <linux/module.h>
  2. #include <linux/list.h>
  3. #include "../../../drivers/target/iscsi/iscsi_target_core.h"
  4. struct iscsit_transport {
  5. #define ISCSIT_TRANSPORT_NAME 16
  6. char name[ISCSIT_TRANSPORT_NAME];
  7. int transport_type;
  8. int priv_size;
  9. struct module *owner;
  10. struct list_head t_node;
  11. int (*iscsit_setup_np)(struct iscsi_np *, struct __kernel_sockaddr_storage *);
  12. int (*iscsit_accept_np)(struct iscsi_np *, struct iscsi_conn *);
  13. void (*iscsit_free_np)(struct iscsi_np *);
  14. void (*iscsit_free_conn)(struct iscsi_conn *);
  15. int (*iscsit_get_login_rx)(struct iscsi_conn *, struct iscsi_login *);
  16. int (*iscsit_put_login_tx)(struct iscsi_conn *, struct iscsi_login *, u32);
  17. int (*iscsit_immediate_queue)(struct iscsi_conn *, struct iscsi_cmd *, int);
  18. int (*iscsit_response_queue)(struct iscsi_conn *, struct iscsi_cmd *, int);
  19. int (*iscsit_get_dataout)(struct iscsi_conn *, struct iscsi_cmd *, bool);
  20. int (*iscsit_queue_data_in)(struct iscsi_conn *, struct iscsi_cmd *);
  21. int (*iscsit_queue_status)(struct iscsi_conn *, struct iscsi_cmd *);
  22. };
  23. static inline void *iscsit_priv_cmd(struct iscsi_cmd *cmd)
  24. {
  25. return (void *)(cmd + 1);
  26. }
  27. /*
  28. * From iscsi_target_transport.c
  29. */
  30. extern int iscsit_register_transport(struct iscsit_transport *);
  31. extern void iscsit_unregister_transport(struct iscsit_transport *);
  32. extern struct iscsit_transport *iscsit_get_transport(int);
  33. extern void iscsit_put_transport(struct iscsit_transport *);
  34. /*
  35. * From iscsi_target.c
  36. */
  37. extern int iscsit_setup_scsi_cmd(struct iscsi_conn *, struct iscsi_cmd *,
  38. unsigned char *);
  39. extern void iscsit_set_unsoliticed_dataout(struct iscsi_cmd *);
  40. extern int iscsit_process_scsi_cmd(struct iscsi_conn *, struct iscsi_cmd *,
  41. struct iscsi_scsi_req *);
  42. extern int iscsit_check_dataout_hdr(struct iscsi_conn *, unsigned char *,
  43. struct iscsi_cmd **);
  44. extern int iscsit_check_dataout_payload(struct iscsi_cmd *, struct iscsi_data *,
  45. bool);
  46. extern int iscsit_setup_nop_out(struct iscsi_conn *, struct iscsi_cmd *,
  47. struct iscsi_nopout *);
  48. extern int iscsit_process_nop_out(struct iscsi_conn *, struct iscsi_cmd *,
  49. struct iscsi_nopout *);
  50. extern int iscsit_handle_logout_cmd(struct iscsi_conn *, struct iscsi_cmd *,
  51. unsigned char *);
  52. extern int iscsit_handle_task_mgt_cmd(struct iscsi_conn *, struct iscsi_cmd *,
  53. unsigned char *);
  54. extern int iscsit_setup_text_cmd(struct iscsi_conn *, struct iscsi_cmd *,
  55. struct iscsi_text *);
  56. extern int iscsit_process_text_cmd(struct iscsi_conn *, struct iscsi_cmd *,
  57. struct iscsi_text *);
  58. extern void iscsit_build_rsp_pdu(struct iscsi_cmd *, struct iscsi_conn *,
  59. bool, struct iscsi_scsi_rsp *);
  60. extern void iscsit_build_nopin_rsp(struct iscsi_cmd *, struct iscsi_conn *,
  61. struct iscsi_nopin *, bool);
  62. extern void iscsit_build_task_mgt_rsp(struct iscsi_cmd *, struct iscsi_conn *,
  63. struct iscsi_tm_rsp *);
  64. extern int iscsit_build_text_rsp(struct iscsi_cmd *, struct iscsi_conn *,
  65. struct iscsi_text_rsp *);
  66. extern void iscsit_build_reject(struct iscsi_cmd *, struct iscsi_conn *,
  67. struct iscsi_reject *);
  68. extern int iscsit_build_logout_rsp(struct iscsi_cmd *, struct iscsi_conn *,
  69. struct iscsi_logout_rsp *);
  70. extern int iscsit_logout_post_handler(struct iscsi_cmd *, struct iscsi_conn *);
  71. /*
  72. * From iscsi_target_device.c
  73. */
  74. extern void iscsit_increment_maxcmdsn(struct iscsi_cmd *, struct iscsi_session *);
  75. /*
  76. * From iscsi_target_erl0.c
  77. */
  78. extern void iscsit_cause_connection_reinstatement(struct iscsi_conn *, int);
  79. /*
  80. * From iscsi_target_erl1.c
  81. */
  82. extern void iscsit_stop_dataout_timer(struct iscsi_cmd *);
  83. /*
  84. * From iscsi_target_tmr.c
  85. */
  86. extern int iscsit_tmr_post_handler(struct iscsi_cmd *, struct iscsi_conn *);
  87. /*
  88. * From iscsi_target_util.c
  89. */
  90. extern struct iscsi_cmd *iscsit_allocate_cmd(struct iscsi_conn *, gfp_t);
  91. extern int iscsit_sequence_cmd(struct iscsi_conn *, struct iscsi_cmd *,
  92. unsigned char *, __be32);
  93. extern void iscsit_release_cmd(struct iscsi_cmd *);