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_DEFS_IOCFC_H__
19 #define __BFA_DEFS_IOCFC_H__
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>
27 #define BFA_IOCFC_INTR_DELAY 1125
28 #define BFA_IOCFC_INTR_LATENCY 225
29 #define BFA_IOCFCOE_INTR_DELAY 25
30 #define BFA_IOCFCOE_INTR_LATENCY 5
33 * Interrupt coalescing configuration.
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 */
42 * IOC firmware configuraton
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 */
55 u8 fw_tick_res
; /*!< FW clock resolution in ms */
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 */
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 */
82 * IOC firmware IO stats
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 */
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 */
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 */
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 */
111 u32 fcp_data_lost
; /* fcp data lost */
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 */
117 u32 io_abort_timeout
; /* ABTS timedout */
118 u32 sler_initiated
; /* SLER initiated */
120 u32 unexp_fcp_rsp
; /* fcp response in wrong state */
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 */
132 u32 tgt_aborted_io
; /* target initiated abort */
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 !=
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
149 u32 ioh_err_int
; /* IOH error int during data-phase
155 * IOC port firmware stats
158 struct bfa_fw_port_fpg_stats_s
{
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 */
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 */
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 */
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 */
232 struct bfa_fw_fip_stats_s
{
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. */
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 */
243 u32 disc_fcf_unavail
; /* Discovery FCF Not Avail. */
244 u32 linksvc_unsupp
; /* Unsupported link service req */
245 u32 linksvc_err
; /* Parse error in link service req */
246 u32 logo_req
; /* FIP logos received */
247 u32 clrvlink_req
; /* Clear virtual link req */
248 u32 op_unsupp
; /* Unsupported FIP operation */
249 u32 untagged
; /* Untagged frames (ignored) */
250 u32 invalid_version
; /*!< Invalid FIP version */
254 struct bfa_fw_lps_stats_s
{
255 u32 mac_invalids
; /* Invalid mac assigned */
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 */
270 * IOC firmware FCoE port stats
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
;
278 * IOC firmware FC port stats
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
;
288 * IOC firmware FC port stats
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
;
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
;
307 struct bfa_iocfc_stats_s
{
308 struct bfa_fw_stats_s fw_stats
; /* firmware IOC stats */
312 * IOC attributes returned in queries
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 */
319 #define BFA_IOCFC_PATHTOV_MAX 60
320 #define BFA_IOCFC_QDEPTH_MAX 2000
322 #endif /* __BFA_DEFS_IOC_H__ */