bfa_fcpim.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. /*
  2. * Copyright (c) 2005-2009 Brocade Communications Systems, Inc.
  3. * All rights reserved
  4. * www.brocade.com
  5. *
  6. * Linux driver for Brocade Fibre Channel Host Bus Adapter.
  7. *
  8. * This program is free software; you can redistribute it and/or modify it
  9. * under the terms of the GNU General Public License (GPL) Version 2 as
  10. * published by the Free Software Foundation
  11. *
  12. * This program is distributed in the hope that it will be useful, but
  13. * WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * General Public License for more details.
  16. */
  17. #ifndef __BFA_FCPIM_H__
  18. #define __BFA_FCPIM_H__
  19. #include <bfa.h>
  20. #include <bfa_svc.h>
  21. #include <bfi/bfi_fcpim.h>
  22. #include <defs/bfa_defs_fcpim.h>
  23. /*
  24. * forward declarations
  25. */
  26. struct bfa_itnim_s;
  27. struct bfa_ioim_s;
  28. struct bfa_tskim_s;
  29. struct bfad_ioim_s;
  30. struct bfad_tskim_s;
  31. /*
  32. * bfa fcpim module API functions
  33. */
  34. void bfa_fcpim_path_tov_set(struct bfa_s *bfa, u16 path_tov);
  35. u16 bfa_fcpim_path_tov_get(struct bfa_s *bfa);
  36. void bfa_fcpim_qdepth_set(struct bfa_s *bfa, u16 q_depth);
  37. u16 bfa_fcpim_qdepth_get(struct bfa_s *bfa);
  38. bfa_status_t bfa_fcpim_get_modstats(struct bfa_s *bfa,
  39. struct bfa_fcpim_stats_s *modstats);
  40. bfa_status_t bfa_fcpim_clr_modstats(struct bfa_s *bfa);
  41. void bfa_fcpim_set_ioredirect(struct bfa_s *bfa, bfa_boolean_t state);
  42. void bfa_fcpim_update_ioredirect(struct bfa_s *bfa);
  43. void bfa_cb_ioredirect_state_change(void *hcb_bfad, bfa_boolean_t ioredirect);
  44. #define bfa_fcpim_ioredirect_enabled(__bfa) \
  45. (((struct bfa_fcpim_mod_s *)(BFA_FCPIM_MOD(__bfa)))->ioredirect)
  46. #define bfa_fcpim_get_next_reqq(__bfa, __qid) \
  47. { \
  48. struct bfa_fcpim_mod_s *__fcpim = BFA_FCPIM_MOD(__bfa); \
  49. __fcpim->reqq++; \
  50. __fcpim->reqq &= (BFI_IOC_MAX_CQS - 1); \
  51. *(__qid) = __fcpim->reqq; \
  52. }
  53. #define bfa_iocfc_map_msg_to_qid(__msg, __qid) \
  54. *(__qid) = (u8)((__msg) & (BFI_IOC_MAX_CQS - 1));
  55. /*
  56. * bfa itnim API functions
  57. */
  58. struct bfa_itnim_s *bfa_itnim_create(struct bfa_s *bfa,
  59. struct bfa_rport_s *rport, void *itnim);
  60. void bfa_itnim_delete(struct bfa_itnim_s *itnim);
  61. void bfa_itnim_online(struct bfa_itnim_s *itnim,
  62. bfa_boolean_t seq_rec);
  63. void bfa_itnim_offline(struct bfa_itnim_s *itnim);
  64. void bfa_itnim_get_stats(struct bfa_itnim_s *itnim,
  65. struct bfa_itnim_hal_stats_s *stats);
  66. void bfa_itnim_clear_stats(struct bfa_itnim_s *itnim);
  67. #define bfa_itnim_get_reqq(__ioim) (((struct bfa_ioim_s *)__ioim)->itnim->reqq)
  68. /**
  69. * BFA completion callback for bfa_itnim_online().
  70. *
  71. * @param[in] itnim FCS or driver itnim instance
  72. *
  73. * return None
  74. */
  75. void bfa_cb_itnim_online(void *itnim);
  76. /**
  77. * BFA completion callback for bfa_itnim_offline().
  78. *
  79. * @param[in] itnim FCS or driver itnim instance
  80. *
  81. * return None
  82. */
  83. void bfa_cb_itnim_offline(void *itnim);
  84. void bfa_cb_itnim_tov_begin(void *itnim);
  85. void bfa_cb_itnim_tov(void *itnim);
  86. /**
  87. * BFA notification to FCS/driver for second level error recovery.
  88. *
  89. * Atleast one I/O request has timedout and target is unresponsive to
  90. * repeated abort requests. Second level error recovery should be initiated
  91. * by starting implicit logout and recovery procedures.
  92. *
  93. * @param[in] itnim FCS or driver itnim instance
  94. *
  95. * return None
  96. */
  97. void bfa_cb_itnim_sler(void *itnim);
  98. /*
  99. * bfa ioim API functions
  100. */
  101. struct bfa_ioim_s *bfa_ioim_alloc(struct bfa_s *bfa,
  102. struct bfad_ioim_s *dio,
  103. struct bfa_itnim_s *itnim,
  104. u16 nsgles);
  105. void bfa_ioim_free(struct bfa_ioim_s *ioim);
  106. void bfa_ioim_start(struct bfa_ioim_s *ioim);
  107. void bfa_ioim_abort(struct bfa_ioim_s *ioim);
  108. void bfa_ioim_delayed_comp(struct bfa_ioim_s *ioim,
  109. bfa_boolean_t iotov);
  110. /**
  111. * I/O completion notification.
  112. *
  113. * @param[in] dio driver IO structure
  114. * @param[in] io_status IO completion status
  115. * @param[in] scsi_status SCSI status returned by target
  116. * @param[in] sns_len SCSI sense length, 0 if none
  117. * @param[in] sns_info SCSI sense data, if any
  118. * @param[in] residue Residual length
  119. *
  120. * @return None
  121. */
  122. void bfa_cb_ioim_done(void *bfad, struct bfad_ioim_s *dio,
  123. enum bfi_ioim_status io_status,
  124. u8 scsi_status, int sns_len,
  125. u8 *sns_info, s32 residue);
  126. /**
  127. * I/O good completion notification.
  128. *
  129. * @param[in] dio driver IO structure
  130. *
  131. * @return None
  132. */
  133. void bfa_cb_ioim_good_comp(void *bfad, struct bfad_ioim_s *dio);
  134. /**
  135. * I/O abort completion notification
  136. *
  137. * @param[in] dio driver IO that was aborted
  138. *
  139. * @return None
  140. */
  141. void bfa_cb_ioim_abort(void *bfad, struct bfad_ioim_s *dio);
  142. void bfa_cb_ioim_resfree(void *hcb_bfad);
  143. void bfa_cb_ioim_resfree(void *hcb_bfad);
  144. /*
  145. * bfa tskim API functions
  146. */
  147. struct bfa_tskim_s *bfa_tskim_alloc(struct bfa_s *bfa,
  148. struct bfad_tskim_s *dtsk);
  149. void bfa_tskim_free(struct bfa_tskim_s *tskim);
  150. void bfa_tskim_start(struct bfa_tskim_s *tskim,
  151. struct bfa_itnim_s *itnim, lun_t lun,
  152. enum fcp_tm_cmnd tm, u8 t_secs);
  153. void bfa_cb_tskim_done(void *bfad, struct bfad_tskim_s *dtsk,
  154. enum bfi_tskim_status tsk_status);
  155. #endif /* __BFA_FCPIM_H__ */