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