2 * Copyright (c) 2005-2009 Brocade Communications Systems, Inc.
6 * Linux driver for Brocade Fibre Channel Host Bus Adapter.
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
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.
18 #ifndef __BFA_FCPIM_H__
19 #define __BFA_FCPIM_H__
23 #include <bfi/bfi_fcpim.h>
24 #include <defs/bfa_defs_fcpim.h>
27 * forward declarations
36 * bfa fcpim module API functions
38 void bfa_fcpim_path_tov_set(struct bfa_s
*bfa
, u16 path_tov
);
39 u16
bfa_fcpim_path_tov_get(struct bfa_s
*bfa
);
40 void bfa_fcpim_qdepth_set(struct bfa_s
*bfa
, u16 q_depth
);
41 u16
bfa_fcpim_qdepth_get(struct bfa_s
*bfa
);
42 bfa_status_t
bfa_fcpim_get_modstats(struct bfa_s
*bfa
,
43 struct bfa_fcpim_stats_s
*modstats
);
44 bfa_status_t
bfa_fcpim_clr_modstats(struct bfa_s
*bfa
);
45 void bfa_fcpim_set_ioredirect(struct bfa_s
*bfa
, bfa_boolean_t state
);
46 void bfa_fcpim_update_ioredirect(struct bfa_s
*bfa
);
47 void bfa_cb_ioredirect_state_change(void *hcb_bfad
, bfa_boolean_t ioredirect
);
49 #define bfa_fcpim_ioredirect_enabled(__bfa) \
50 (((struct bfa_fcpim_mod_s *)(BFA_FCPIM_MOD(__bfa)))->ioredirect)
52 #define bfa_fcpim_get_next_reqq(__bfa, __qid) \
54 struct bfa_fcpim_mod_s *__fcpim = BFA_FCPIM_MOD(__bfa); \
56 __fcpim->reqq &= (BFI_IOC_MAX_CQS - 1); \
57 *(__qid) = __fcpim->reqq; \
60 #define bfa_iocfc_map_msg_to_qid(__msg, __qid) \
61 *(__qid) = (u8)((__msg) & (BFI_IOC_MAX_CQS - 1));
65 * bfa itnim API functions
67 struct bfa_itnim_s
*bfa_itnim_create(struct bfa_s
*bfa
,
68 struct bfa_rport_s
*rport
, void *itnim
);
69 void bfa_itnim_delete(struct bfa_itnim_s
*itnim
);
70 void bfa_itnim_online(struct bfa_itnim_s
*itnim
,
71 bfa_boolean_t seq_rec
);
72 void bfa_itnim_offline(struct bfa_itnim_s
*itnim
);
73 void bfa_itnim_get_stats(struct bfa_itnim_s
*itnim
,
74 struct bfa_itnim_hal_stats_s
*stats
);
75 void bfa_itnim_clear_stats(struct bfa_itnim_s
*itnim
);
77 #define bfa_itnim_get_reqq(__ioim) (((struct bfa_ioim_s *)__ioim)->itnim->reqq)
80 * BFA completion callback for bfa_itnim_online().
82 * @param[in] itnim FCS or driver itnim instance
86 void bfa_cb_itnim_online(void *itnim
);
89 * BFA completion callback for bfa_itnim_offline().
91 * @param[in] itnim FCS or driver itnim instance
95 void bfa_cb_itnim_offline(void *itnim
);
96 void bfa_cb_itnim_tov_begin(void *itnim
);
97 void bfa_cb_itnim_tov(void *itnim
);
100 * BFA notification to FCS/driver for second level error recovery.
102 * Atleast one I/O request has timedout and target is unresponsive to
103 * repeated abort requests. Second level error recovery should be initiated
104 * by starting implicit logout and recovery procedures.
106 * @param[in] itnim FCS or driver itnim instance
110 void bfa_cb_itnim_sler(void *itnim
);
113 * bfa ioim API functions
115 struct bfa_ioim_s
*bfa_ioim_alloc(struct bfa_s
*bfa
,
116 struct bfad_ioim_s
*dio
,
117 struct bfa_itnim_s
*itnim
,
120 void bfa_ioim_free(struct bfa_ioim_s
*ioim
);
121 void bfa_ioim_start(struct bfa_ioim_s
*ioim
);
122 void bfa_ioim_abort(struct bfa_ioim_s
*ioim
);
123 void bfa_ioim_delayed_comp(struct bfa_ioim_s
*ioim
,
124 bfa_boolean_t iotov
);
128 * I/O completion notification.
130 * @param[in] dio driver IO structure
131 * @param[in] io_status IO completion status
132 * @param[in] scsi_status SCSI status returned by target
133 * @param[in] sns_len SCSI sense length, 0 if none
134 * @param[in] sns_info SCSI sense data, if any
135 * @param[in] residue Residual length
139 void bfa_cb_ioim_done(void *bfad
, struct bfad_ioim_s
*dio
,
140 enum bfi_ioim_status io_status
,
141 u8 scsi_status
, int sns_len
,
142 u8
*sns_info
, s32 residue
);
145 * I/O good completion notification.
147 * @param[in] dio driver IO structure
151 void bfa_cb_ioim_good_comp(void *bfad
, struct bfad_ioim_s
*dio
);
154 * I/O abort completion notification
156 * @param[in] dio driver IO that was aborted
160 void bfa_cb_ioim_abort(void *bfad
, struct bfad_ioim_s
*dio
);
161 void bfa_cb_ioim_resfree(void *hcb_bfad
);
163 void bfa_cb_ioim_resfree(void *hcb_bfad
);
166 * bfa tskim API functions
168 struct bfa_tskim_s
*bfa_tskim_alloc(struct bfa_s
*bfa
,
169 struct bfad_tskim_s
*dtsk
);
170 void bfa_tskim_free(struct bfa_tskim_s
*tskim
);
171 void bfa_tskim_start(struct bfa_tskim_s
*tskim
,
172 struct bfa_itnim_s
*itnim
, lun_t lun
,
173 enum fcp_tm_cmnd tm
, u8 t_secs
);
174 void bfa_cb_tskim_done(void *bfad
, struct bfad_tskim_s
*dtsk
,
175 enum bfi_tskim_status tsk_status
);
177 #endif /* __BFA_FCPIM_H__ */