Commit | Line | Data |
---|---|---|
7725ccfd JH |
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 | ||
18 | #ifndef __BFA_DEFS_IOCFC_H__ | |
19 | #define __BFA_DEFS_IOCFC_H__ | |
20 | ||
21 | #include <protocol/types.h> | |
22 | #include <defs/bfa_defs_types.h> | |
23 | #include <defs/bfa_defs_version.h> | |
24 | #include <defs/bfa_defs_adapter.h> | |
25 | #include <defs/bfa_defs_pm.h> | |
26 | ||
27 | #define BFA_IOCFC_INTR_DELAY 1125 | |
28 | #define BFA_IOCFC_INTR_LATENCY 225 | |
7af074dc KG |
29 | #define BFA_IOCFCOE_INTR_DELAY 25 |
30 | #define BFA_IOCFCOE_INTR_LATENCY 5 | |
7725ccfd JH |
31 | |
32 | /** | |
33 | * Interrupt coalescing configuration. | |
34 | */ | |
35 | struct bfa_iocfc_intr_attr_s { | |
36 | bfa_boolean_t coalesce; /* enable/disable coalescing */ | |
37 | u16 latency; /* latency in microseconds */ | |
38 | u16 delay; /* delay in microseconds */ | |
39 | }; | |
40 | ||
41 | /** | |
42 | * IOC firmware configuraton | |
43 | */ | |
44 | struct bfa_iocfc_fwcfg_s { | |
45 | u16 num_fabrics; /* number of fabrics */ | |
46 | u16 num_lports; /* number of local lports */ | |
47 | u16 num_rports; /* number of remote ports */ | |
48 | u16 num_ioim_reqs; /* number of IO reqs */ | |
49 | u16 num_tskim_reqs; /* task management requests */ | |
50 | u16 num_iotm_reqs; /* number of TM IO reqs */ | |
51 | u16 num_tsktm_reqs; /* TM task management requests*/ | |
52 | u16 num_fcxp_reqs; /* unassisted FC exchanges */ | |
53 | u16 num_uf_bufs; /* unsolicited recv buffers */ | |
b85d045e JH |
54 | u8 num_cqs; |
55 | u8 fw_tick_res; /*!< FW clock resolution in ms */ | |
56 | u8 rsvd[4]; | |
57 | ||
7725ccfd JH |
58 | }; |
59 | ||
60 | struct bfa_iocfc_drvcfg_s { | |
61 | u16 num_reqq_elems; /* number of req queue elements */ | |
62 | u16 num_rspq_elems; /* number of rsp queue elements */ | |
63 | u16 num_sgpgs; /* number of total SG pages */ | |
64 | u16 num_sboot_tgts; /* number of SAN boot targets */ | |
65 | u16 num_sboot_luns; /* number of SAN boot luns */ | |
66 | u16 ioc_recover; /* IOC recovery mode */ | |
67 | u16 min_cfg; /* minimum configuration */ | |
68 | u16 path_tov; /* device path timeout */ | |
69 | bfa_boolean_t delay_comp; /* delay completion of | |
70 | failed inflight IOs */ | |
71 | u32 rsvd; | |
72 | }; | |
73 | /** | |
74 | * IOC configuration | |
75 | */ | |
76 | struct bfa_iocfc_cfg_s { | |
77 | struct bfa_iocfc_fwcfg_s fwcfg; /* firmware side config */ | |
78 | struct bfa_iocfc_drvcfg_s drvcfg; /* driver side config */ | |
79 | }; | |
80 | ||
81 | /** | |
82 | * IOC firmware IO stats | |
83 | */ | |
84 | struct bfa_fw_io_stats_s { | |
85 | u32 host_abort; /* IO aborted by host driver*/ | |
86 | u32 host_cleanup; /* IO clean up by host driver */ | |
87 | ||
88 | u32 fw_io_timeout; /* IOs timedout */ | |
89 | u32 fw_frm_parse; /* frame parsed by f/w */ | |
90 | u32 fw_frm_data; /* fcp_data frame parsed by f/w */ | |
91 | u32 fw_frm_rsp; /* fcp_rsp frame parsed by f/w */ | |
92 | u32 fw_frm_xfer_rdy; /* xfer_rdy frame parsed by f/w */ | |
93 | u32 fw_frm_bls_acc; /* BLS ACC frame parsed by f/w */ | |
94 | u32 fw_frm_tgt_abort; /* target ABTS parsed by f/w */ | |
95 | u32 fw_frm_unknown; /* unknown parsed by f/w */ | |
96 | u32 fw_data_dma; /* f/w DMA'ed the data frame */ | |
97 | u32 fw_frm_drop; /* f/w drop the frame */ | |
98 | ||
99 | u32 rec_timeout; /* FW rec timed out */ | |
100 | u32 error_rec; /* FW sending rec on | |
101 | * an error condition*/ | |
102 | u32 wait_for_si; /* FW wait for SI */ | |
103 | u32 rec_rsp_inval; /* REC rsp invalid */ | |
104 | u32 seqr_io_abort; /* target does not know cmd so abort */ | |
105 | u32 seqr_io_retry; /* SEQR failed so retry IO */ | |
106 | ||
107 | u32 itn_cisc_upd_rsp; /* ITN cisc updated on fcp_rsp */ | |
108 | u32 itn_cisc_upd_data; /* ITN cisc updated on fcp_data */ | |
109 | u32 itn_cisc_upd_xfer_rdy; /* ITN cisc updated on fcp_data */ | |
110 | ||
111 | u32 fcp_data_lost; /* fcp data lost */ | |
112 | ||
113 | u32 ro_set_in_xfer_rdy; /* Target set RO in Xfer_rdy frame */ | |
114 | u32 xfer_rdy_ooo_err; /* Out of order Xfer_rdy received */ | |
115 | u32 xfer_rdy_unknown_err; /* unknown error in xfer_rdy frame */ | |
116 | ||
117 | u32 io_abort_timeout; /* ABTS timedout */ | |
118 | u32 sler_initiated; /* SLER initiated */ | |
119 | ||
120 | u32 unexp_fcp_rsp; /* fcp response in wrong state */ | |
121 | ||
122 | u32 fcp_rsp_under_run; /* fcp rsp IO underrun */ | |
123 | u32 fcp_rsp_under_run_wr; /* fcp rsp IO underrun for write */ | |
124 | u32 fcp_rsp_under_run_err; /* fcp rsp IO underrun error */ | |
125 | u32 fcp_rsp_resid_inval; /* invalid residue */ | |
126 | u32 fcp_rsp_over_run; /* fcp rsp IO overrun */ | |
127 | u32 fcp_rsp_over_run_err; /* fcp rsp IO overrun error */ | |
128 | u32 fcp_rsp_proto_err; /* protocol error in fcp rsp */ | |
129 | u32 fcp_rsp_sense_err; /* error in sense info in fcp rsp */ | |
130 | u32 fcp_conf_req; /* FCP conf requested */ | |
131 | ||
132 | u32 tgt_aborted_io; /* target initiated abort */ | |
133 | ||
134 | u32 ioh_edtov_timeout_event;/* IOH edtov timer popped */ | |
135 | u32 ioh_fcp_rsp_excp_event; /* IOH FCP_RSP exception */ | |
136 | u32 ioh_fcp_conf_event; /* IOH FCP_CONF */ | |
137 | u32 ioh_mult_frm_rsp_event; /* IOH multi_frame FCP_RSP */ | |
138 | u32 ioh_hit_class2_event; /* IOH hit class2 */ | |
139 | u32 ioh_miss_other_event; /* IOH miss other */ | |
140 | u32 ioh_seq_cnt_err_event; /* IOH seq cnt error */ | |
141 | u32 ioh_len_err_event; /* IOH len error - fcp_dl != | |
142 | * bytes xfered */ | |
143 | u32 ioh_seq_len_err_event; /* IOH seq len error */ | |
144 | u32 ioh_data_oor_event; /* Data out of range */ | |
145 | u32 ioh_ro_ooo_event; /* Relative offset out of range */ | |
146 | u32 ioh_cpu_owned_event; /* IOH hit -iost owned by f/w */ | |
147 | u32 ioh_unexp_frame_event; /* unexpected frame recieved | |
148 | * count */ | |
149 | u32 ioh_err_int; /* IOH error int during data-phase | |
150 | * for scsi write | |
151 | */ | |
152 | }; | |
153 | ||
154 | /** | |
155 | * IOC port firmware stats | |
156 | */ | |
157 | ||
158 | struct bfa_fw_port_fpg_stats_s { | |
159 | u32 intr_evt; | |
160 | u32 intr; | |
161 | u32 intr_excess; | |
162 | u32 intr_cause0; | |
163 | u32 intr_other; | |
164 | u32 intr_other_ign; | |
165 | u32 sig_lost; | |
166 | u32 sig_regained; | |
167 | u32 sync_lost; | |
168 | u32 sync_to; | |
169 | u32 sync_regained; | |
170 | u32 div2_overflow; | |
171 | u32 div2_underflow; | |
172 | u32 efifo_overflow; | |
173 | u32 efifo_underflow; | |
174 | u32 idle_rx; | |
175 | u32 lrr_rx; | |
176 | u32 lr_rx; | |
177 | u32 ols_rx; | |
178 | u32 nos_rx; | |
179 | u32 lip_rx; | |
180 | u32 arbf0_rx; | |
b85d045e | 181 | u32 arb_rx; |
7725ccfd JH |
182 | u32 mrk_rx; |
183 | u32 const_mrk_rx; | |
184 | u32 prim_unknown; | |
7725ccfd JH |
185 | }; |
186 | ||
187 | ||
188 | struct bfa_fw_port_lksm_stats_s { | |
189 | u32 hwsm_success; /* hwsm state machine success */ | |
190 | u32 hwsm_fails; /* hwsm fails */ | |
191 | u32 hwsm_wdtov; /* hwsm timed out */ | |
192 | u32 swsm_success; /* swsm success */ | |
193 | u32 swsm_fails; /* swsm fails */ | |
194 | u32 swsm_wdtov; /* swsm timed out */ | |
195 | u32 busybufs; /* link init failed due to busybuf */ | |
196 | u32 buf_waits; /* bufwait state entries */ | |
197 | u32 link_fails; /* link failures */ | |
198 | u32 psp_errors; /* primitive sequence protocol errors */ | |
199 | u32 lr_unexp; /* No. of times LR rx-ed unexpectedly */ | |
200 | u32 lrr_unexp; /* No. of times LRR rx-ed unexpectedly */ | |
201 | u32 lr_tx; /* No. of times LR tx started */ | |
202 | u32 lrr_tx; /* No. of times LRR tx started */ | |
203 | u32 ols_tx; /* No. of times OLS tx started */ | |
204 | u32 nos_tx; /* No. of times NOS tx started */ | |
b85d045e JH |
205 | u32 hwsm_lrr_rx; /* No. of times LRR rx-ed by HWSM */ |
206 | u32 hwsm_lr_rx; /* No. of times LR rx-ed by HWSM */ | |
7725ccfd JH |
207 | }; |
208 | ||
209 | ||
210 | struct bfa_fw_port_snsm_stats_s { | |
211 | u32 hwsm_success; /* Successful hwsm terminations */ | |
212 | u32 hwsm_fails; /* hwsm fail count */ | |
213 | u32 hwsm_wdtov; /* hwsm timed out */ | |
214 | u32 swsm_success; /* swsm success */ | |
215 | u32 swsm_wdtov; /* swsm timed out */ | |
216 | u32 error_resets; /* error resets initiated by upsm */ | |
217 | u32 sync_lost; /* Sync loss count */ | |
218 | u32 sig_lost; /* Signal loss count */ | |
219 | }; | |
220 | ||
221 | ||
222 | struct bfa_fw_port_physm_stats_s { | |
223 | u32 module_inserts; /* Module insert count */ | |
224 | u32 module_xtracts; /* Module extracts count */ | |
225 | u32 module_invalids; /* Invalid module inserted count */ | |
226 | u32 module_read_ign; /* Module validation status ignored */ | |
227 | u32 laser_faults; /* Laser fault count */ | |
228 | u32 rsvd; | |
229 | }; | |
230 | ||
231 | ||
232 | struct bfa_fw_fip_stats_s { | |
7af074dc KG |
233 | u32 vlan_req; /* vlan discovery requests */ |
234 | u32 vlan_notify; /* vlan notifications */ | |
235 | u32 vlan_err; /* vlan response error */ | |
236 | u32 vlan_timeouts; /* vlan disvoery timeouts */ | |
237 | u32 vlan_invalids; /* invalid vlan in discovery advert. */ | |
7725ccfd JH |
238 | u32 disc_req; /* Discovery solicit requests */ |
239 | u32 disc_rsp; /* Discovery solicit response */ | |
240 | u32 disc_err; /* Discovery advt. parse errors */ | |
241 | u32 disc_unsol; /* Discovery unsolicited */ | |
242 | u32 disc_timeouts; /* Discovery timeouts */ | |
1c8a4c37 | 243 | u32 disc_fcf_unavail; /* Discovery FCF Not Avail. */ |
7725ccfd JH |
244 | u32 linksvc_unsupp; /* Unsupported link service req */ |
245 | u32 linksvc_err; /* Parse error in link service req */ | |
b85d045e | 246 | u32 logo_req; /* FIP logos received */ |
7725ccfd JH |
247 | u32 clrvlink_req; /* Clear virtual link req */ |
248 | u32 op_unsupp; /* Unsupported FIP operation */ | |
249 | u32 untagged; /* Untagged frames (ignored) */ | |
7af074dc | 250 | u32 invalid_version; /*!< Invalid FIP version */ |
7725ccfd JH |
251 | }; |
252 | ||
253 | ||
254 | struct bfa_fw_lps_stats_s { | |
255 | u32 mac_invalids; /* Invalid mac assigned */ | |
256 | u32 rsvd; | |
257 | }; | |
258 | ||
259 | ||
260 | struct bfa_fw_fcoe_stats_s { | |
261 | u32 cee_linkups; /* CEE link up count */ | |
262 | u32 cee_linkdns; /* CEE link down count */ | |
263 | u32 fip_linkups; /* FIP link up count */ | |
264 | u32 fip_linkdns; /* FIP link up count */ | |
265 | u32 fip_fails; /* FIP fail count */ | |
266 | u32 mac_invalids; /* Invalid mac assigned */ | |
267 | }; | |
268 | ||
269 | /** | |
270 | * IOC firmware FCoE port stats | |
271 | */ | |
272 | struct bfa_fw_fcoe_port_stats_s { | |
273 | struct bfa_fw_fcoe_stats_s fcoe_stats; | |
274 | struct bfa_fw_fip_stats_s fip_stats; | |
275 | }; | |
276 | ||
277 | /** | |
278 | * IOC firmware FC port stats | |
279 | */ | |
280 | struct bfa_fw_fc_port_stats_s { | |
281 | struct bfa_fw_port_fpg_stats_s fpg_stats; | |
282 | struct bfa_fw_port_physm_stats_s physm_stats; | |
283 | struct bfa_fw_port_snsm_stats_s snsm_stats; | |
284 | struct bfa_fw_port_lksm_stats_s lksm_stats; | |
285 | }; | |
286 | ||
287 | /** | |
288 | * IOC firmware FC port stats | |
289 | */ | |
290 | union bfa_fw_port_stats_s { | |
291 | struct bfa_fw_fc_port_stats_s fc_stats; | |
292 | struct bfa_fw_fcoe_port_stats_s fcoe_stats; | |
293 | }; | |
294 | ||
295 | /** | |
296 | * IOC firmware stats | |
297 | */ | |
298 | struct bfa_fw_stats_s { | |
299 | struct bfa_fw_ioc_stats_s ioc_stats; | |
300 | struct bfa_fw_io_stats_s io_stats; | |
301 | union bfa_fw_port_stats_s port_stats; | |
302 | }; | |
303 | ||
304 | /** | |
305 | * IOC statistics | |
306 | */ | |
307 | struct bfa_iocfc_stats_s { | |
308 | struct bfa_fw_stats_s fw_stats; /* firmware IOC stats */ | |
309 | }; | |
310 | ||
311 | /** | |
312 | * IOC attributes returned in queries | |
313 | */ | |
314 | struct bfa_iocfc_attr_s { | |
315 | struct bfa_iocfc_cfg_s config; /* IOCFC config */ | |
316 | struct bfa_iocfc_intr_attr_s intr_attr; /* interrupt attr */ | |
317 | }; | |
318 | ||
319 | #define BFA_IOCFC_PATHTOV_MAX 60 | |
320 | #define BFA_IOCFC_QDEPTH_MAX 2000 | |
321 | ||
322 | #endif /* __BFA_DEFS_IOC_H__ */ |