Merge git://git.samba.org/sfrench/cifs-2.6
[sfrench/cifs-2.6.git] / drivers / scsi / bfa / bfa_defs_svc.h
1 /*
2  * Copyright (c) 2005-2010 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_SVC_H__
19 #define __BFA_DEFS_SVC_H__
20
21 #include "bfa_defs.h"
22 #include "bfa_fc.h"
23 #include "bfi.h"
24
25 #define BFA_IOCFC_INTR_DELAY    1125
26 #define BFA_IOCFC_INTR_LATENCY  225
27 #define BFA_IOCFCOE_INTR_DELAY  25
28 #define BFA_IOCFCOE_INTR_LATENCY 5
29
30 /*
31  * Interrupt coalescing configuration.
32  */
33 #pragma pack(1)
34 struct bfa_iocfc_intr_attr_s {
35         u8              coalesce;       /*  enable/disable coalescing */
36         u8              rsvd[3];
37         __be16          latency;        /*  latency in microseconds   */
38         __be16          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_fwtio_reqs; /* number of TM IO reqs in FW   */
51         u16             num_fcxp_reqs;  /*  unassisted FC exchanges     */
52         u16             num_uf_bufs;    /*  unsolicited recv buffers    */
53         u8              num_cqs;
54         u8              fw_tick_res;    /*  FW clock resolution in ms */
55         u8              rsvd[2];
56 };
57 #pragma pack()
58
59 struct bfa_iocfc_drvcfg_s {
60         u16             num_reqq_elems; /*  number of req queue elements */
61         u16             num_rspq_elems; /*  number of rsp queue elements */
62         u16             num_sgpgs;      /*  number of total SG pages     */
63         u16             num_sboot_tgts; /*  number of SAN boot targets   */
64         u16             num_sboot_luns; /*  number of SAN boot luns      */
65         u16             ioc_recover;    /*  IOC recovery mode            */
66         u16             min_cfg;        /*  minimum configuration        */
67         u16             path_tov;       /*  device path timeout         */
68         u16             num_tio_reqs;   /* number of TM IO reqs */
69         u8              port_mode;
70         u8              rsvd_a;
71         bfa_boolean_t   delay_comp;     /* delay completion of failed
72                                          * inflight IOs */
73         u16             num_ttsk_reqs;   /* TM task management requests */
74         u32             rsvd;
75 };
76
77 /*
78  * IOC configuration
79  */
80 struct bfa_iocfc_cfg_s {
81         struct bfa_iocfc_fwcfg_s        fwcfg;  /*  firmware side config */
82         struct bfa_iocfc_drvcfg_s       drvcfg; /*  driver side config    */
83 };
84
85 /*
86  * IOC firmware IO stats
87  */
88 struct bfa_fw_ioim_stats_s {
89         u32     host_abort;             /*  IO aborted by host driver*/
90         u32     host_cleanup;           /*  IO clean up by host driver */
91
92         u32     fw_io_timeout;          /*  IOs timedout */
93         u32     fw_frm_parse;           /*  frame parsed by f/w */
94         u32     fw_frm_data;            /*  fcp_data frame parsed by f/w */
95         u32     fw_frm_rsp;             /*  fcp_rsp frame parsed by f/w */
96         u32     fw_frm_xfer_rdy;        /*  xfer_rdy frame parsed by f/w */
97         u32     fw_frm_bls_acc;         /*  BLS ACC  frame parsed by f/w */
98         u32     fw_frm_tgt_abort;       /*  target ABTS parsed by f/w */
99         u32     fw_frm_unknown;         /*  unknown parsed by f/w */
100         u32     fw_data_dma;            /*  f/w DMA'ed the data frame */
101         u32     fw_frm_drop;            /*  f/w drop the frame */
102
103         u32     rec_timeout;            /*  FW rec timed out */
104         u32     error_rec;              /*  FW sending rec on
105                                          *  an error condition*/
106         u32     wait_for_si;            /*  FW wait for SI */
107         u32     rec_rsp_inval;          /*  REC rsp invalid */
108         u32     seqr_io_abort;          /*  target does not know cmd so abort */
109         u32     seqr_io_retry;          /*  SEQR failed so retry IO */
110
111         u32     itn_cisc_upd_rsp;       /*  ITN cisc updated on fcp_rsp */
112         u32     itn_cisc_upd_data;      /*  ITN cisc updated on fcp_data */
113         u32     itn_cisc_upd_xfer_rdy;  /*  ITN cisc updated on fcp_data */
114
115         u32     fcp_data_lost;          /*  fcp data lost */
116
117         u32     ro_set_in_xfer_rdy;     /*  Target set RO in Xfer_rdy frame */
118         u32     xfer_rdy_ooo_err;       /*  Out of order Xfer_rdy received */
119         u32     xfer_rdy_unknown_err;   /*  unknown error in xfer_rdy frame */
120
121         u32     io_abort_timeout;       /*  ABTS timedout  */
122         u32     sler_initiated;         /*  SLER initiated */
123
124         u32     unexp_fcp_rsp;          /*  fcp response in wrong state */
125
126         u32     fcp_rsp_under_run;      /*  fcp rsp IO underrun */
127         u32     fcp_rsp_under_run_wr;   /*  fcp rsp IO underrun for write */
128         u32     fcp_rsp_under_run_err;  /*  fcp rsp IO underrun error */
129         u32     fcp_rsp_resid_inval;    /*  invalid residue */
130         u32     fcp_rsp_over_run;       /*  fcp rsp IO overrun */
131         u32     fcp_rsp_over_run_err;   /*  fcp rsp IO overrun error */
132         u32     fcp_rsp_proto_err;      /*  protocol error in fcp rsp */
133         u32     fcp_rsp_sense_err;      /*  error in sense info in fcp rsp */
134         u32     fcp_conf_req;           /*  FCP conf requested */
135
136         u32     tgt_aborted_io;         /*  target initiated abort */
137
138         u32     ioh_edtov_timeout_event;/*  IOH edtov timer popped */
139         u32     ioh_fcp_rsp_excp_event; /*  IOH FCP_RSP exception */
140         u32     ioh_fcp_conf_event;     /*  IOH FCP_CONF */
141         u32     ioh_mult_frm_rsp_event; /*  IOH multi_frame FCP_RSP */
142         u32     ioh_hit_class2_event;   /*  IOH hit class2 */
143         u32     ioh_miss_other_event;   /*  IOH miss other */
144         u32     ioh_seq_cnt_err_event;  /*  IOH seq cnt error */
145         u32     ioh_len_err_event;      /*  IOH len error - fcp_dl !=
146                                          *  bytes xfered */
147         u32     ioh_seq_len_err_event;  /*  IOH seq len error */
148         u32     ioh_data_oor_event;     /*  Data out of range */
149         u32     ioh_ro_ooo_event;       /*  Relative offset out of range */
150         u32     ioh_cpu_owned_event;    /*  IOH hit -iost owned by f/w */
151         u32     ioh_unexp_frame_event;  /*  unexpected frame received
152                                          *  count */
153         u32     ioh_err_int;            /*  IOH error int during data-phase
154                                          *  for scsi write */
155 };
156
157 struct bfa_fw_tio_stats_s {
158         u32     tio_conf_proc;      /* TIO CONF processed */
159         u32     tio_conf_drop;      /* TIO CONF dropped */
160         u32     tio_cleanup_req;    /* TIO cleanup requested */
161         u32     tio_cleanup_comp;   /* TIO cleanup completed */
162         u32     tio_abort_rsp;      /* TIO abort response */
163         u32     tio_abort_rsp_comp; /* TIO abort rsp completed */
164         u32     tio_abts_req;       /* TIO ABTS requested */
165         u32     tio_abts_ack;       /* TIO ABTS ack-ed */
166         u32     tio_abts_ack_nocomp;/* TIO ABTS ack-ed but not completed */
167         u32     tio_abts_tmo;       /* TIO ABTS timeout */
168         u32     tio_snsdata_dma;    /* TIO sense data DMA */
169         u32     tio_rxwchan_wait;   /* TIO waiting for RX wait channel */
170         u32     tio_rxwchan_avail;  /* TIO RX wait channel available */
171         u32     tio_hit_bls;        /* TIO IOH BLS event */
172         u32     tio_uf_recv;        /* TIO received UF */
173         u32     tio_rd_invalid_sm;  /* TIO read reqst in wrong state machine */
174         u32     tio_wr_invalid_sm;  /* TIO write reqst in wrong state machine */
175
176         u32     ds_rxwchan_wait;    /* DS waiting for RX wait channel */
177         u32     ds_rxwchan_avail;   /* DS RX wait channel available */
178         u32     ds_unaligned_rd;    /* DS unaligned read */
179         u32     ds_rdcomp_invalid_sm; /* DS read completed in wrong state
180                                        * machine */
181         u32     ds_wrcomp_invalid_sm; /* DS write completed in wrong state
182                                        * machine */
183         u32     ds_flush_req;       /* DS flush requested */
184         u32     ds_flush_comp;      /* DS flush completed */
185         u32     ds_xfrdy_exp;       /* DS XFER_RDY expired */
186         u32     ds_seq_cnt_err;     /* DS seq cnt error */
187         u32     ds_seq_len_err;     /* DS seq len error */
188         u32     ds_data_oor;        /* DS data out of order */
189         u32     ds_hit_bls;         /* DS hit BLS */
190         u32     ds_edtov_timer_exp; /* DS edtov expired */
191         u32     ds_cpu_owned;       /* DS cpu owned */
192         u32     ds_hit_class2;      /* DS hit class2 */
193         u32     ds_length_err;      /* DS length error */
194         u32     ds_ro_ooo_err;      /* DS relative offset out-of-order error */
195         u32     ds_rectov_timer_exp;/* DS rectov expired */
196         u32     ds_unexp_fr_err;    /* DS unexp frame error */
197 };
198
199 /*
200  * IOC firmware IO stats
201  */
202 struct bfa_fw_io_stats_s {
203         struct bfa_fw_ioim_stats_s      ioim_stats;
204         struct bfa_fw_tio_stats_s       tio_stats;
205 };
206
207 /*
208  * IOC port firmware stats
209  */
210
211 struct bfa_fw_port_fpg_stats_s {
212         u32    intr_evt;
213         u32    intr;
214         u32    intr_excess;
215         u32    intr_cause0;
216         u32    intr_other;
217         u32    intr_other_ign;
218         u32    sig_lost;
219         u32    sig_regained;
220         u32    sync_lost;
221         u32    sync_to;
222         u32    sync_regained;
223         u32    div2_overflow;
224         u32    div2_underflow;
225         u32    efifo_overflow;
226         u32    efifo_underflow;
227         u32    idle_rx;
228         u32    lrr_rx;
229         u32    lr_rx;
230         u32    ols_rx;
231         u32    nos_rx;
232         u32    lip_rx;
233         u32    arbf0_rx;
234         u32    arb_rx;
235         u32    mrk_rx;
236         u32    const_mrk_rx;
237         u32    prim_unknown;
238 };
239
240
241 struct bfa_fw_port_lksm_stats_s {
242         u32    hwsm_success;       /*  hwsm state machine success          */
243         u32    hwsm_fails;         /*  hwsm fails                          */
244         u32    hwsm_wdtov;         /*  hwsm timed out                      */
245         u32    swsm_success;       /*  swsm success                        */
246         u32    swsm_fails;         /*  swsm fails                          */
247         u32    swsm_wdtov;         /*  swsm timed out                      */
248         u32    busybufs;           /*  link init failed due to busybuf     */
249         u32    buf_waits;          /*  bufwait state entries               */
250         u32    link_fails;         /*  link failures                       */
251         u32    psp_errors;         /*  primitive sequence protocol errors  */
252         u32    lr_unexp;           /*  No. of times LR rx-ed unexpectedly  */
253         u32    lrr_unexp;          /*  No. of times LRR rx-ed unexpectedly */
254         u32    lr_tx;              /*  No. of times LR tx started          */
255         u32    lrr_tx;             /*  No. of times LRR tx started         */
256         u32    ols_tx;             /*  No. of times OLS tx started         */
257         u32    nos_tx;             /*  No. of times NOS tx started         */
258         u32    hwsm_lrr_rx;        /*  No. of times LRR rx-ed by HWSM      */
259         u32    hwsm_lr_rx;         /*  No. of times LR rx-ed by HWSM       */
260         u32    bbsc_lr;            /* LKSM LR tx for credit recovery       */
261 };
262
263 struct bfa_fw_port_snsm_stats_s {
264         u32    hwsm_success;       /*  Successful hwsm terminations        */
265         u32    hwsm_fails;         /*  hwsm fail count                     */
266         u32    hwsm_wdtov;         /*  hwsm timed out                      */
267         u32    swsm_success;       /*  swsm success                        */
268         u32    swsm_wdtov;         /*  swsm timed out                      */
269         u32    error_resets;       /*  error resets initiated by upsm      */
270         u32    sync_lost;          /*  Sync loss count                     */
271         u32    sig_lost;           /*  Signal loss count                   */
272         u32    asn8g_attempts;     /* SNSM HWSM at 8Gbps attempts          */
273 };
274
275 struct bfa_fw_port_physm_stats_s {
276         u32    module_inserts;     /*  Module insert count                 */
277         u32    module_xtracts;     /*  Module extracts count               */
278         u32    module_invalids;    /*  Invalid module inserted count       */
279         u32    module_read_ign;    /*  Module validation status ignored    */
280         u32    laser_faults;       /*  Laser fault count                   */
281         u32    rsvd;
282 };
283
284 struct bfa_fw_fip_stats_s {
285         u32    vlan_req;           /*  vlan discovery requests             */
286         u32    vlan_notify;        /*  vlan notifications                  */
287         u32    vlan_err;           /*  vlan response error                 */
288         u32    vlan_timeouts;      /*  vlan disvoery timeouts              */
289         u32    vlan_invalids;      /*  invalid vlan in discovery advert.   */
290         u32    disc_req;           /*  Discovery solicit requests          */
291         u32    disc_rsp;           /*  Discovery solicit response          */
292         u32    disc_err;           /*  Discovery advt. parse errors        */
293         u32    disc_unsol;         /*  Discovery unsolicited               */
294         u32    disc_timeouts;      /*  Discovery timeouts                  */
295         u32    disc_fcf_unavail;   /*  Discovery FCF Not Avail.            */
296         u32    linksvc_unsupp;     /*  Unsupported link service req        */
297         u32    linksvc_err;        /*  Parse error in link service req     */
298         u32    logo_req;           /*  FIP logos received                  */
299         u32    clrvlink_req;       /*  Clear virtual link req              */
300         u32    op_unsupp;          /*  Unsupported FIP operation           */
301         u32    untagged;           /*  Untagged frames (ignored)           */
302         u32    invalid_version;    /*  Invalid FIP version                 */
303 };
304
305 struct bfa_fw_lps_stats_s {
306         u32    mac_invalids;       /*  Invalid mac assigned                */
307         u32    rsvd;
308 };
309
310 struct bfa_fw_fcoe_stats_s {
311         u32    cee_linkups;        /*  CEE link up count                   */
312         u32    cee_linkdns;        /*  CEE link down count                 */
313         u32    fip_linkups;        /*  FIP link up count                   */
314         u32    fip_linkdns;        /*  FIP link up count                   */
315         u32    fip_fails;          /*  FIP fail count                      */
316         u32    mac_invalids;       /*  Invalid mac assigned                */
317 };
318
319 /*
320  * IOC firmware FCoE port stats
321  */
322 struct bfa_fw_fcoe_port_stats_s {
323         struct bfa_fw_fcoe_stats_s              fcoe_stats;
324         struct bfa_fw_fip_stats_s               fip_stats;
325 };
326
327 /*
328  * IOC firmware FC uport stats
329  */
330 struct bfa_fw_fc_uport_stats_s {
331         struct bfa_fw_port_snsm_stats_s         snsm_stats;
332         struct bfa_fw_port_lksm_stats_s         lksm_stats;
333 };
334
335 /*
336  * IOC firmware FC port stats
337  */
338 union bfa_fw_fc_port_stats_s {
339         struct bfa_fw_fc_uport_stats_s          fc_stats;
340         struct bfa_fw_fcoe_port_stats_s         fcoe_stats;
341 };
342
343 /*
344  * IOC firmware port stats
345  */
346 struct bfa_fw_port_stats_s {
347         struct bfa_fw_port_fpg_stats_s          fpg_stats;
348         struct bfa_fw_port_physm_stats_s        physm_stats;
349         union  bfa_fw_fc_port_stats_s           fc_port;
350 };
351
352 /*
353  * fcxchg module statistics
354  */
355 struct bfa_fw_fcxchg_stats_s {
356         u32     ua_tag_inv;
357         u32     ua_state_inv;
358 };
359
360 struct bfa_fw_lpsm_stats_s {
361         u32     cls_rx;
362         u32     cls_tx;
363 };
364
365 /*
366  *  Trunk statistics
367  */
368 struct bfa_fw_trunk_stats_s {
369         u32 emt_recvd;          /*  Trunk EMT received          */
370         u32 emt_accepted;       /*  Trunk EMT Accepted          */
371         u32 emt_rejected;       /*  Trunk EMT rejected          */
372         u32 etp_recvd;          /*  Trunk ETP received          */
373         u32 etp_accepted;       /*  Trunk ETP Accepted          */
374         u32 etp_rejected;       /*  Trunk ETP rejected          */
375         u32 lr_recvd;           /*  Trunk LR received           */
376         u32 rsvd;               /*  padding for 64 bit alignment */
377 };
378
379 struct bfa_fw_advsm_stats_s {
380         u32 flogi_sent;         /*  Flogi sent                  */
381         u32 flogi_acc_recvd;    /*  Flogi Acc received          */
382         u32 flogi_rjt_recvd;    /*  Flogi rejects received      */
383         u32 flogi_retries;      /*  Flogi retries               */
384
385         u32 elp_recvd;          /*  ELP received                */
386         u32 elp_accepted;       /*  ELP Accepted                */
387         u32 elp_rejected;       /*  ELP rejected                */
388         u32 elp_dropped;        /*  ELP dropped                 */
389 };
390
391 /*
392  * IOCFC firmware stats
393  */
394 struct bfa_fw_iocfc_stats_s {
395         u32     cfg_reqs;       /*  cfg request */
396         u32     updq_reqs;      /*  update queue request */
397         u32     ic_reqs;        /*  interrupt coalesce reqs */
398         u32     unknown_reqs;
399         u32     set_intr_reqs;  /*  set interrupt reqs */
400 };
401
402 /*
403  * IOC attributes returned in queries
404  */
405 struct bfa_iocfc_attr_s {
406         struct bfa_iocfc_cfg_s          config;         /*  IOCFC config   */
407         struct bfa_iocfc_intr_attr_s    intr_attr;      /*  interrupt attr */
408 };
409
410 /*
411  * Eth_sndrcv mod stats
412  */
413 struct bfa_fw_eth_sndrcv_stats_s {
414         u32     crc_err;
415         u32     rsvd;           /*  64bit align    */
416 };
417
418 /*
419  * CT MAC mod stats
420  */
421 struct bfa_fw_mac_mod_stats_s {
422         u32     mac_on;         /*  MAC got turned-on */
423         u32     link_up;        /*  link-up */
424         u32     signal_off;     /*  lost signal */
425         u32     dfe_on;         /*  DFE on */
426         u32     mac_reset;      /*  # of MAC reset to bring lnk up */
427         u32     pcs_reset;      /*  # of PCS reset to bring lnk up */
428         u32     loopback;       /*  MAC got into serdes loopback */
429         u32     lb_mac_reset;
430                         /*  # of MAC reset to bring link up in loopback */
431         u32     lb_pcs_reset;
432                         /*  # of PCS reset to bring link up in loopback */
433         u32     rsvd;           /*  64bit align    */
434 };
435
436 /*
437  * CT MOD stats
438  */
439 struct bfa_fw_ct_mod_stats_s {
440         u32     rxa_rds_undrun; /*  RxA RDS underrun */
441         u32     rad_bpc_ovfl;   /*  RAD BPC overflow */
442         u32     rad_rlb_bpc_ovfl; /*  RAD RLB BPC overflow */
443         u32     bpc_fcs_err;    /*  BPC FCS_ERR */
444         u32     txa_tso_hdr;    /*  TxA TSO header too long */
445         u32     rsvd;           /*  64bit align    */
446 };
447
448 /*
449  * IOC firmware stats
450  */
451 struct bfa_fw_stats_s {
452         struct bfa_fw_ioc_stats_s       ioc_stats;
453         struct bfa_fw_iocfc_stats_s     iocfc_stats;
454         struct bfa_fw_io_stats_s        io_stats;
455         struct bfa_fw_port_stats_s      port_stats;
456         struct bfa_fw_fcxchg_stats_s    fcxchg_stats;
457         struct bfa_fw_lpsm_stats_s      lpsm_stats;
458         struct bfa_fw_lps_stats_s       lps_stats;
459         struct bfa_fw_trunk_stats_s     trunk_stats;
460         struct bfa_fw_advsm_stats_s     advsm_stats;
461         struct bfa_fw_mac_mod_stats_s   macmod_stats;
462         struct bfa_fw_ct_mod_stats_s    ctmod_stats;
463         struct bfa_fw_eth_sndrcv_stats_s        ethsndrcv_stats;
464 };
465
466 #define BFA_IOCFC_PATHTOV_MAX   60
467 #define BFA_IOCFC_QDEPTH_MAX    2000
468
469 /*
470  * QoS states
471  */
472 enum bfa_qos_state {
473         BFA_QOS_DISABLED = 0,           /* QoS is disabled */
474         BFA_QOS_ONLINE = 1,             /*  QoS is online */
475         BFA_QOS_OFFLINE = 2,            /*  QoS is offline */
476 };
477
478 /*
479  * QoS  Priority levels.
480  */
481 enum bfa_qos_priority {
482         BFA_QOS_UNKNOWN = 0,
483         BFA_QOS_HIGH  = 1,      /*  QoS Priority Level High */
484         BFA_QOS_MED  =  2,      /*  QoS Priority Level Medium */
485         BFA_QOS_LOW  =  3,      /*  QoS Priority Level Low */
486 };
487
488 /*
489  * QoS  bandwidth allocation for each priority level
490  */
491 enum bfa_qos_bw_alloc {
492         BFA_QOS_BW_HIGH  = 60,  /*  bandwidth allocation for High */
493         BFA_QOS_BW_MED  =  30,  /*  bandwidth allocation for Medium */
494         BFA_QOS_BW_LOW  =  10,  /*  bandwidth allocation for Low */
495 };
496 #pragma pack(1)
497 /*
498  * QoS attribute returned in QoS Query
499  */
500 struct bfa_qos_attr_s {
501         u8              state;          /*  QoS current state */
502         u8              rsvd[3];
503         u32  total_bb_cr;               /*  Total BB Credits */
504 };
505
506 /*
507  * These fields should be displayed only from the CLI.
508  * There will be a separate BFAL API (get_qos_vc_attr ?)
509  * to retrieve this.
510  *
511  */
512 #define  BFA_QOS_MAX_VC  16
513
514 struct bfa_qos_vc_info_s {
515         u8 vc_credit;
516         u8 borrow_credit;
517         u8 priority;
518         u8 resvd;
519 };
520
521 struct bfa_qos_vc_attr_s {
522         u16  total_vc_count;                    /*  Total VC Count */
523         u16  shared_credit;
524         u32  elp_opmode_flags;
525         struct bfa_qos_vc_info_s vc_info[BFA_QOS_MAX_VC];  /* as many as
526                                                             * total_vc_count */
527 };
528
529 /*
530  * QoS statistics
531  */
532 struct bfa_qos_stats_s {
533         u32     flogi_sent;             /*  QoS Flogi sent */
534         u32     flogi_acc_recvd;        /*  QoS Flogi Acc received */
535         u32     flogi_rjt_recvd;        /*  QoS Flogi rejects received */
536         u32     flogi_retries;          /*  QoS Flogi retries */
537
538         u32     elp_recvd;              /*  QoS ELP received */
539         u32     elp_accepted;           /*  QoS ELP Accepted */
540         u32     elp_rejected;           /*  QoS ELP rejected */
541         u32     elp_dropped;            /*  QoS ELP dropped  */
542
543         u32     qos_rscn_recvd;         /*  QoS RSCN received */
544         u32     rsvd;                   /* padding for 64 bit alignment */
545 };
546
547 /*
548  * FCoE statistics
549  */
550 struct bfa_fcoe_stats_s {
551         u64     secs_reset;     /*  Seconds since stats reset        */
552         u64     cee_linkups;    /*  CEE link up                      */
553         u64     cee_linkdns;    /*  CEE link down                    */
554         u64     fip_linkups;    /*  FIP link up                      */
555         u64     fip_linkdns;    /*  FIP link down                    */
556         u64     fip_fails;      /*  FIP failures                     */
557         u64     mac_invalids;   /*  Invalid mac assignments          */
558         u64     vlan_req;       /*  Vlan requests                    */
559         u64     vlan_notify;    /*  Vlan notifications               */
560         u64     vlan_err;       /*  Vlan notification errors         */
561         u64     vlan_timeouts;  /*  Vlan request timeouts            */
562         u64     vlan_invalids;  /*  Vlan invalids                    */
563         u64     disc_req;       /*  Discovery requests               */
564         u64     disc_rsp;       /*  Discovery responses              */
565         u64     disc_err;       /*  Discovery error frames           */
566         u64     disc_unsol;     /*  Discovery unsolicited            */
567         u64     disc_timeouts;  /*  Discovery timeouts               */
568         u64     disc_fcf_unavail; /*  Discovery FCF not avail        */
569         u64     linksvc_unsupp; /*  FIP link service req unsupp      */
570         u64     linksvc_err;    /*  FIP link service req errors      */
571         u64     logo_req;       /*  FIP logos received               */
572         u64     clrvlink_req;   /*  Clear virtual link requests      */
573         u64     op_unsupp;      /*  FIP operation unsupp.            */
574         u64     untagged;       /*  FIP untagged frames              */
575         u64     txf_ucast;      /*  Tx FCoE unicast frames           */
576         u64     txf_ucast_vlan; /*  Tx FCoE unicast vlan frames      */
577         u64     txf_ucast_octets; /*  Tx FCoE unicast octets         */
578         u64     txf_mcast;      /*  Tx FCoE multicast frames         */
579         u64     txf_mcast_vlan; /*  Tx FCoE multicast vlan frames    */
580         u64     txf_mcast_octets; /*  Tx FCoE multicast octets       */
581         u64     txf_bcast;      /*  Tx FCoE broadcast frames         */
582         u64     txf_bcast_vlan; /*  Tx FCoE broadcast vlan frames    */
583         u64     txf_bcast_octets; /*  Tx FCoE broadcast octets       */
584         u64     txf_timeout;      /*  Tx timeouts                    */
585         u64     txf_parity_errors; /*  Transmit parity err           */
586         u64     txf_fid_parity_errors; /*  Transmit FID parity err   */
587         u64     rxf_ucast_octets; /*  Rx FCoE unicast octets         */
588         u64     rxf_ucast;      /*  Rx FCoE unicast frames           */
589         u64     rxf_ucast_vlan; /*  Rx FCoE unicast vlan frames      */
590         u64     rxf_mcast_octets; /*  Rx FCoE multicast octets       */
591         u64     rxf_mcast;      /*  Rx FCoE multicast frames         */
592         u64     rxf_mcast_vlan; /*  Rx FCoE multicast vlan frames    */
593         u64     rxf_bcast_octets; /*  Rx FCoE broadcast octets       */
594         u64     rxf_bcast;      /*  Rx FCoE broadcast frames         */
595         u64     rxf_bcast_vlan; /*  Rx FCoE broadcast vlan frames    */
596 };
597
598 /*
599  * QoS or FCoE stats (fcport stats excluding physical FC port stats)
600  */
601 union bfa_fcport_stats_u {
602         struct bfa_qos_stats_s  fcqos;
603         struct bfa_fcoe_stats_s fcoe;
604 };
605 #pragma pack()
606
607 struct bfa_fcpim_del_itn_stats_s {
608         u32     del_itn_iocomp_aborted;    /* Aborted IO requests             */
609         u32     del_itn_iocomp_timedout;   /* IO timeouts                     */
610         u32     del_itn_iocom_sqer_needed; /* IO retry for SQ error recovery  */
611         u32     del_itn_iocom_res_free;    /* Delayed freeing of IO resources */
612         u32     del_itn_iocom_hostabrts;   /* Host IO abort requests          */
613         u32     del_itn_total_ios;         /* Total IO count                  */
614         u32     del_io_iocdowns;           /* IO cleaned-up due to IOC down   */
615         u32     del_tm_iocdowns;           /* TM cleaned-up due to IOC down   */
616 };
617
618 struct bfa_itnim_iostats_s {
619
620         u32     total_ios;              /*  Total IO Requests           */
621         u32     input_reqs;             /*  Data in-bound requests      */
622         u32     output_reqs;            /*  Data out-bound requests     */
623         u32     io_comps;               /*  Total IO Completions        */
624         u32     wr_throughput;          /*  Write data transferred in bytes */
625         u32     rd_throughput;          /*  Read data transferred in bytes  */
626
627         u32     iocomp_ok;              /*  Slowpath IO completions     */
628         u32     iocomp_underrun;        /*  IO underrun         */
629         u32     iocomp_overrun;         /*  IO overrun                  */
630         u32     qwait;                  /*  IO Request-Q wait           */
631         u32     qresumes;               /*  IO Request-Q wait done      */
632         u32     no_iotags;              /*  No free IO tag              */
633         u32     iocomp_timedout;        /*  IO timeouts         */
634         u32     iocom_nexus_abort;      /*  IO failure due to target offline */
635         u32     iocom_proto_err;        /*  IO protocol errors          */
636         u32     iocom_dif_err;          /*  IO SBC-3 protection errors  */
637
638         u32     iocom_sqer_needed;      /*  fcp-2 error recovery failed */
639         u32     iocom_res_free;         /*  Delayed freeing of IO tag   */
640
641
642         u32     io_aborts;              /*  Host IO abort requests      */
643         u32     iocom_hostabrts;        /*  Host IO abort completions   */
644         u32     io_cleanups;            /*  IO clean-up requests        */
645         u32     path_tov_expired;       /*  IO path tov expired */
646         u32     iocomp_aborted;         /*  IO abort completions        */
647         u32     io_iocdowns;            /*  IO cleaned-up due to IOC down */
648         u32     iocom_utags;            /*  IO comp with unknown tags   */
649
650         u32     io_tmaborts;            /*  Abort request due to TM command */
651         u32     tm_io_comps;            /* Abort completion due to TM command */
652
653         u32     creates;                /*  IT Nexus create requests    */
654         u32     fw_create;              /*  IT Nexus FW create requests */
655         u32     create_comps;           /*  IT Nexus FW create completions */
656         u32     onlines;                /*  IT Nexus onlines            */
657         u32     offlines;               /*  IT Nexus offlines           */
658         u32     fw_delete;              /*  IT Nexus FW delete requests */
659         u32     delete_comps;           /*  IT Nexus FW delete completions */
660         u32     deletes;                /*  IT Nexus delete requests       */
661         u32     sler_events;            /*  SLER events         */
662         u32     ioc_disabled;           /*  Num IOC disables            */
663         u32     cleanup_comps;          /*  IT Nexus cleanup completions    */
664
665         u32     tm_cmnds;               /*  TM Requests         */
666         u32     tm_fw_rsps;             /*  TM Completions              */
667         u32     tm_success;             /*  TM initiated IO cleanup success */
668         u32     tm_failures;            /*  TM initiated IO cleanup failure */
669         u32     no_tskims;              /*  No free TM tag              */
670         u32     tm_qwait;               /*  TM Request-Q wait           */
671         u32     tm_qresumes;            /*  TM Request-Q wait done      */
672
673         u32     tm_iocdowns;            /*  TM cleaned-up due to IOC down   */
674         u32     tm_cleanups;            /*  TM cleanup requests */
675         u32     tm_cleanup_comps;       /*  TM cleanup completions      */
676         u32     rsvd[6];
677 };
678
679 /* Modify char* port_stt[] in bfal_port.c if a new state was added */
680 enum bfa_port_states {
681         BFA_PORT_ST_UNINIT              = 1,
682         BFA_PORT_ST_ENABLING_QWAIT      = 2,
683         BFA_PORT_ST_ENABLING            = 3,
684         BFA_PORT_ST_LINKDOWN            = 4,
685         BFA_PORT_ST_LINKUP              = 5,
686         BFA_PORT_ST_DISABLING_QWAIT     = 6,
687         BFA_PORT_ST_DISABLING           = 7,
688         BFA_PORT_ST_DISABLED            = 8,
689         BFA_PORT_ST_STOPPED             = 9,
690         BFA_PORT_ST_IOCDOWN             = 10,
691         BFA_PORT_ST_IOCDIS              = 11,
692         BFA_PORT_ST_FWMISMATCH          = 12,
693         BFA_PORT_ST_PREBOOT_DISABLED    = 13,
694         BFA_PORT_ST_TOGGLING_QWAIT      = 14,
695         BFA_PORT_ST_ACQ_ADDR            = 15,
696         BFA_PORT_ST_MAX_STATE,
697 };
698
699 /*
700  *      Port operational type (in sync with SNIA port type).
701  */
702 enum bfa_port_type {
703         BFA_PORT_TYPE_UNKNOWN   = 1,    /*  port type is unknown */
704         BFA_PORT_TYPE_NPORT     = 5,    /*  P2P with switched fabric */
705         BFA_PORT_TYPE_NLPORT    = 6,    /*  public loop */
706         BFA_PORT_TYPE_LPORT     = 20,   /*  private loop */
707         BFA_PORT_TYPE_P2P       = 21,   /*  P2P with no switched fabric */
708         BFA_PORT_TYPE_VPORT     = 22,   /*  NPIV - virtual port */
709 };
710
711 /*
712  *      Port topology setting. A port's topology and fabric login status
713  *      determine its operational type.
714  */
715 enum bfa_port_topology {
716         BFA_PORT_TOPOLOGY_NONE = 0,     /*  No valid topology */
717         BFA_PORT_TOPOLOGY_P2P  = 1,     /*  P2P only */
718         BFA_PORT_TOPOLOGY_LOOP = 2,     /*  LOOP topology */
719         BFA_PORT_TOPOLOGY_AUTO = 3,     /*  auto topology selection */
720 };
721
722 /*
723  *      Physical port loopback types.
724  */
725 enum bfa_port_opmode {
726         BFA_PORT_OPMODE_NORMAL   = 0x00, /*  normal non-loopback mode */
727         BFA_PORT_OPMODE_LB_INT   = 0x01, /*  internal loop back */
728         BFA_PORT_OPMODE_LB_SLW   = 0x02, /*  serial link wrapback (serdes) */
729         BFA_PORT_OPMODE_LB_EXT   = 0x04, /*  external loop back (serdes) */
730         BFA_PORT_OPMODE_LB_CBL   = 0x08, /*  cabled loop back */
731         BFA_PORT_OPMODE_LB_NLINT = 0x20, /*  NL_Port internal loopback */
732 };
733
734 #define BFA_PORT_OPMODE_LB_HARD(_mode)                  \
735         ((_mode == BFA_PORT_OPMODE_LB_INT) ||           \
736         (_mode == BFA_PORT_OPMODE_LB_SLW) ||            \
737         (_mode == BFA_PORT_OPMODE_LB_EXT))
738
739 /*
740  *      Port link state
741  */
742 enum bfa_port_linkstate {
743         BFA_PORT_LINKUP         = 1,    /*  Physical port/Trunk link up */
744         BFA_PORT_LINKDOWN       = 2,    /*  Physical port/Trunk link down */
745 };
746
747 /*
748  *      Port link state reason code
749  */
750 enum bfa_port_linkstate_rsn {
751         BFA_PORT_LINKSTATE_RSN_NONE             = 0,
752         BFA_PORT_LINKSTATE_RSN_DISABLED         = 1,
753         BFA_PORT_LINKSTATE_RSN_RX_NOS           = 2,
754         BFA_PORT_LINKSTATE_RSN_RX_OLS           = 3,
755         BFA_PORT_LINKSTATE_RSN_RX_LIP           = 4,
756         BFA_PORT_LINKSTATE_RSN_RX_LIPF7         = 5,
757         BFA_PORT_LINKSTATE_RSN_SFP_REMOVED      = 6,
758         BFA_PORT_LINKSTATE_RSN_PORT_FAULT       = 7,
759         BFA_PORT_LINKSTATE_RSN_RX_LOS           = 8,
760         BFA_PORT_LINKSTATE_RSN_LOCAL_FAULT      = 9,
761         BFA_PORT_LINKSTATE_RSN_REMOTE_FAULT     = 10,
762         BFA_PORT_LINKSTATE_RSN_TIMEOUT          = 11,
763
764
765
766         /* CEE related reason codes/errors */
767         CEE_LLDP_INFO_AGED_OUT                  = 20,
768         CEE_LLDP_SHUTDOWN_TLV_RCVD              = 21,
769         CEE_PEER_NOT_ADVERTISE_DCBX             = 22,
770         CEE_PEER_NOT_ADVERTISE_PG               = 23,
771         CEE_PEER_NOT_ADVERTISE_PFC              = 24,
772         CEE_PEER_NOT_ADVERTISE_FCOE             = 25,
773         CEE_PG_NOT_COMPATIBLE                   = 26,
774         CEE_PFC_NOT_COMPATIBLE                  = 27,
775         CEE_FCOE_NOT_COMPATIBLE                 = 28,
776         CEE_BAD_PG_RCVD                         = 29,
777         CEE_BAD_BW_RCVD                         = 30,
778         CEE_BAD_PFC_RCVD                        = 31,
779         CEE_BAD_APP_PRI_RCVD                    = 32,
780         CEE_FCOE_PRI_PFC_OFF                    = 33,
781         CEE_DUP_CONTROL_TLV_RCVD                = 34,
782         CEE_DUP_FEAT_TLV_RCVD                   = 35,
783         CEE_APPLY_NEW_CFG                       = 36, /* reason, not error */
784         CEE_PROTOCOL_INIT                       = 37, /* reason, not error */
785         CEE_PHY_LINK_DOWN                       = 38,
786         CEE_LLS_FCOE_ABSENT                     = 39,
787         CEE_LLS_FCOE_DOWN                       = 40,
788         CEE_ISCSI_NOT_COMPATIBLE                = 41,
789         CEE_ISCSI_PRI_PFC_OFF                   = 42,
790         CEE_ISCSI_PRI_OVERLAP_FCOE_PRI          = 43
791 };
792
793 #define MAX_LUN_MASK_CFG 16
794
795 /*
796  * Initially flash content may be fff. On making LUN mask enable and disable
797  * state chnage.  when report lun command is being processed it goes from
798  * BFA_LUN_MASK_ACTIVE to BFA_LUN_MASK_FETCH and comes back to
799  * BFA_LUN_MASK_ACTIVE.
800  */
801 enum bfa_ioim_lun_mask_state_s {
802         BFA_IOIM_LUN_MASK_INACTIVE = 0,
803         BFA_IOIM_LUN_MASK_ACTIVE = 1,
804         BFA_IOIM_LUN_MASK_FETCHED = 2,
805 };
806
807 enum bfa_lunmask_state_s {
808         BFA_LUNMASK_DISABLED = 0x00,
809         BFA_LUNMASK_ENABLED = 0x01,
810         BFA_LUNMASK_MINCFG = 0x02,
811         BFA_LUNMASK_UNINITIALIZED = 0xff,
812 };
813
814 #pragma pack(1)
815 /*
816  * LUN mask configuration
817  */
818 struct bfa_lun_mask_s {
819         wwn_t           lp_wwn;
820         wwn_t           rp_wwn;
821         struct scsi_lun lun;
822         u8              ua;
823         u8              rsvd[3];
824         u16             rp_tag;
825         u8              lp_tag;
826         u8              state;
827 };
828
829 #define MAX_LUN_MASK_CFG 16
830 struct bfa_lunmask_cfg_s {
831         u32     status;
832         u32     rsvd;
833         struct bfa_lun_mask_s   lun_list[MAX_LUN_MASK_CFG];
834 };
835
836 /*
837  *      Physical port configuration
838  */
839 struct bfa_port_cfg_s {
840         u8       topology;      /*  bfa_port_topology           */
841         u8       speed;         /*  enum bfa_port_speed */
842         u8       trunked;       /*  trunked or not              */
843         u8       qos_enabled;   /*  qos enabled or not          */
844         u8       cfg_hardalpa;  /*  is hard alpa configured     */
845         u8       hardalpa;      /*  configured hard alpa        */
846         __be16   maxfrsize;     /*  maximum frame size          */
847         u8       rx_bbcredit;   /*  receive buffer credits      */
848         u8       tx_bbcredit;   /*  transmit buffer credits     */
849         u8       ratelimit;     /*  ratelimit enabled or not    */
850         u8       trl_def_speed; /*  ratelimit default speed     */
851         u8       bb_scn;        /*  BB_SCN value from FLOGI Exchg */
852         u8       bb_scn_state;  /*  Config state of BB_SCN */
853         u8       faa_state;     /*  FAA enabled/disabled        */
854         u8       rsvd[1];
855         u16      path_tov;      /*  device path timeout */
856         u16      q_depth;       /*  SCSI Queue depth            */
857 };
858 #pragma pack()
859
860 /*
861  *      Port attribute values.
862  */
863 struct bfa_port_attr_s {
864         /*
865          * Static fields
866          */
867         wwn_t                   nwwn;           /*  node wwn */
868         wwn_t                   pwwn;           /*  port wwn */
869         wwn_t                   factorynwwn;    /*  factory node wwn */
870         wwn_t                   factorypwwn;    /*  factory port wwn */
871         enum fc_cos             cos_supported;  /*  supported class of
872                                                  *  services */
873         u32                     rsvd;
874         struct fc_symname_s     port_symname;   /*  port symbolic name */
875         enum bfa_port_speed     speed_supported; /* supported speeds */
876         bfa_boolean_t           pbind_enabled;
877
878         /*
879          * Configured values
880          */
881         struct bfa_port_cfg_s   pport_cfg;      /*  pport cfg */
882
883         /*
884          * Dynamic field - info from BFA
885          */
886         enum bfa_port_states    port_state;     /*  current port state */
887         enum bfa_port_speed     speed;          /*  current speed */
888         enum bfa_port_topology  topology;       /*  current topology */
889         bfa_boolean_t           beacon;         /*  current beacon status */
890         bfa_boolean_t           link_e2e_beacon; /* link beacon is on */
891         bfa_boolean_t           bbsc_op_status; /* fc credit recovery oper
892                                                  * state */
893
894         /*
895          * Dynamic field - info from FCS
896          */
897         u32                     pid;            /*  port ID */
898         enum bfa_port_type      port_type;      /*  current topology */
899         u32                     loopback;       /*  external loopback */
900         u32                     authfail;       /*  auth fail state */
901
902         /* FCoE specific  */
903         u16                     fcoe_vlan;
904         u8                      rsvd1[2];
905 };
906
907 /*
908  *            Port FCP mappings.
909  */
910 struct bfa_port_fcpmap_s {
911         char    osdevname[256];
912         u32     bus;
913         u32     target;
914         u32     oslun;
915         u32     fcid;
916         wwn_t   nwwn;
917         wwn_t   pwwn;
918         u64     fcplun;
919         char    luid[256];
920 };
921
922 /*
923  *            Port RNID info.
924  */
925 struct bfa_port_rnid_s {
926         wwn_t     wwn;
927         u32       unittype;
928         u32       portid;
929         u32       attached_nodes_num;
930         u16       ip_version;
931         u16       udp_port;
932         u8        ipaddr[16];
933         u16       rsvd;
934         u16       topologydiscoveryflags;
935 };
936
937 #pragma pack(1)
938 struct bfa_fcport_fcf_s {
939         wwn_t   name;           /*  FCF name               */
940         wwn_t   fabric_name;    /*  Fabric Name            */
941         u8      fipenabled;     /*  FIP enabled or not     */
942         u8      fipfailed;      /*  FIP failed or not      */
943         u8      resv[2];
944         u8      pri;            /*  FCF priority           */
945         u8      version;        /*  FIP version used       */
946         u8      available;      /*  Available for login    */
947         u8      fka_disabled;   /*  FKA is disabled        */
948         u8      maxsz_verified; /*  FCoE max size verified */
949         u8      fc_map[3];      /*  FC map                 */
950         __be16  vlan;           /*  FCoE vlan tag/priority */
951         u32     fka_adv_per;    /*  FIP  ka advert. period */
952         mac_t   mac;            /*  FCF mac                */
953 };
954
955 /*
956  *      Trunk states for BCU/BFAL
957  */
958 enum bfa_trunk_state {
959         BFA_TRUNK_DISABLED      = 0,    /*  Trunk is not configured     */
960         BFA_TRUNK_ONLINE        = 1,    /*  Trunk is online             */
961         BFA_TRUNK_OFFLINE       = 2,    /*  Trunk is offline            */
962 };
963
964 /*
965  *      VC attributes for trunked link
966  */
967 struct bfa_trunk_vc_attr_s {
968         u32 bb_credit;
969         u32 elp_opmode_flags;
970         u32 req_credit;
971         u16 vc_credits[8];
972 };
973
974 /*
975  *      Link state information
976  */
977 struct bfa_port_link_s {
978         u8       linkstate;     /*  Link state bfa_port_linkstate */
979         u8       linkstate_rsn; /*  bfa_port_linkstate_rsn_t */
980         u8       topology;      /*  P2P/LOOP bfa_port_topology */
981         u8       speed;         /*  Link speed (1/2/4/8 G) */
982         u32      linkstate_opt; /*  Linkstate optional data (debug) */
983         u8       trunked;       /*  Trunked or not (1 or 0) */
984         u8       resvd[3];
985         struct bfa_qos_attr_s  qos_attr;   /* QoS Attributes */
986         union {
987                 struct bfa_qos_vc_attr_s qos_vc_attr;  /*  VC info from ELP */
988                 struct bfa_trunk_vc_attr_s trunk_vc_attr;
989                 struct bfa_fcport_fcf_s fcf; /*  FCF information (for FCoE) */
990         } vc_fcf;
991 };
992 #pragma pack()
993
994 enum bfa_trunk_link_fctl {
995         BFA_TRUNK_LINK_FCTL_NORMAL,
996         BFA_TRUNK_LINK_FCTL_VC,
997         BFA_TRUNK_LINK_FCTL_VC_QOS,
998 };
999
1000 enum bfa_trunk_link_state {
1001         BFA_TRUNK_LINK_STATE_UP = 1,            /* link part of trunk */
1002         BFA_TRUNK_LINK_STATE_DN_LINKDN = 2,     /* physical link down */
1003         BFA_TRUNK_LINK_STATE_DN_GRP_MIS = 3,    /* trunk group different */
1004         BFA_TRUNK_LINK_STATE_DN_SPD_MIS = 4,    /* speed mismatch */
1005         BFA_TRUNK_LINK_STATE_DN_MODE_MIS = 5,   /* remote port not trunked */
1006 };
1007
1008 #define BFA_TRUNK_MAX_PORTS     2
1009 struct bfa_trunk_link_attr_s {
1010         wwn_t    trunk_wwn;
1011         enum bfa_trunk_link_fctl fctl;
1012         enum bfa_trunk_link_state link_state;
1013         enum bfa_port_speed     speed;
1014         u32 deskew;
1015 };
1016
1017 struct bfa_trunk_attr_s {
1018         enum bfa_trunk_state    state;
1019         enum bfa_port_speed     speed;
1020         u32             port_id;
1021         u32             rsvd;
1022         struct bfa_trunk_link_attr_s link_attr[BFA_TRUNK_MAX_PORTS];
1023 };
1024
1025 struct bfa_rport_hal_stats_s {
1026         u32        sm_un_cr;        /*  uninit: create events      */
1027         u32        sm_un_unexp;     /*  uninit: exception events   */
1028         u32        sm_cr_on;        /*  created: online events     */
1029         u32        sm_cr_del;       /*  created: delete events     */
1030         u32        sm_cr_hwf;       /*  created: IOC down          */
1031         u32        sm_cr_unexp;     /*  created: exception events  */
1032         u32        sm_fwc_rsp;      /*  fw create: f/w responses   */
1033         u32        sm_fwc_del;      /*  fw create: delete events   */
1034         u32        sm_fwc_off;      /*  fw create: offline events  */
1035         u32        sm_fwc_hwf;      /*  fw create: IOC down        */
1036         u32        sm_fwc_unexp;    /*  fw create: exception events*/
1037         u32        sm_on_off;       /*  online: offline events     */
1038         u32        sm_on_del;       /*  online: delete events      */
1039         u32        sm_on_hwf;       /*  online: IOC down events    */
1040         u32        sm_on_unexp;     /*  online: exception events   */
1041         u32        sm_fwd_rsp;      /*  fw delete: fw responses    */
1042         u32        sm_fwd_del;      /*  fw delete: delete events   */
1043         u32        sm_fwd_hwf;      /*  fw delete: IOC down events */
1044         u32        sm_fwd_unexp;    /*  fw delete: exception events*/
1045         u32        sm_off_del;      /*  offline: delete events     */
1046         u32        sm_off_on;       /*  offline: online events     */
1047         u32        sm_off_hwf;      /*  offline: IOC down events   */
1048         u32        sm_off_unexp;    /*  offline: exception events  */
1049         u32        sm_del_fwrsp;    /*  delete: fw responses       */
1050         u32        sm_del_hwf;      /*  delete: IOC down events    */
1051         u32        sm_del_unexp;    /*  delete: exception events   */
1052         u32        sm_delp_fwrsp;   /*  delete pend: fw responses  */
1053         u32        sm_delp_hwf;     /*  delete pend: IOC downs     */
1054         u32        sm_delp_unexp;   /*  delete pend: exceptions    */
1055         u32        sm_offp_fwrsp;   /*  off-pending: fw responses  */
1056         u32        sm_offp_del;     /*  off-pending: deletes       */
1057         u32        sm_offp_hwf;     /*  off-pending: IOC downs     */
1058         u32        sm_offp_unexp;   /*  off-pending: exceptions    */
1059         u32        sm_iocd_off;     /*  IOC down: offline events   */
1060         u32        sm_iocd_del;     /*  IOC down: delete events    */
1061         u32        sm_iocd_on;      /*  IOC down: online events    */
1062         u32        sm_iocd_unexp;   /*  IOC down: exceptions       */
1063         u32        rsvd;
1064 };
1065 #pragma pack(1)
1066 /*
1067  *  Rport's QoS attributes
1068  */
1069 struct bfa_rport_qos_attr_s {
1070         u8              qos_priority;   /*  rport's QoS priority   */
1071         u8              rsvd[3];
1072         u32             qos_flow_id;    /*  QoS flow Id  */
1073 };
1074 #pragma pack()
1075
1076 #define BFA_IOBUCKET_MAX 14
1077
1078 struct bfa_itnim_latency_s {
1079         u32 min[BFA_IOBUCKET_MAX];
1080         u32 max[BFA_IOBUCKET_MAX];
1081         u32 count[BFA_IOBUCKET_MAX];
1082         u32 avg[BFA_IOBUCKET_MAX];
1083 };
1084
1085 struct bfa_itnim_ioprofile_s {
1086         u32 clock_res_mul;
1087         u32 clock_res_div;
1088         u32 index;
1089         u32 io_profile_start_time;      /*  IO profile start time       */
1090         u32 iocomps[BFA_IOBUCKET_MAX];  /*  IO completed        */
1091         struct bfa_itnim_latency_s io_latency;
1092 };
1093
1094 /*
1095  *      vHBA port attribute values.
1096  */
1097 struct bfa_vhba_attr_s {
1098         wwn_t   nwwn;       /* node wwn */
1099         wwn_t   pwwn;       /* port wwn */
1100         u32     pid;        /* port ID */
1101         bfa_boolean_t       io_profile; /* get it from fcpim mod */
1102         bfa_boolean_t       plog_enabled;   /* portlog is enabled */
1103         u16     path_tov;
1104         u8      rsvd[2];
1105 };
1106
1107 /*
1108  * FC physical port statistics.
1109  */
1110 struct bfa_port_fc_stats_s {
1111         u64     secs_reset;     /*  Seconds since stats is reset */
1112         u64     tx_frames;      /*  Tx frames                   */
1113         u64     tx_words;       /*  Tx words                    */
1114         u64     tx_lip;         /*  Tx LIP                      */
1115         u64     tx_nos;         /*  Tx NOS                      */
1116         u64     tx_ols;         /*  Tx OLS                      */
1117         u64     tx_lr;          /*  Tx LR                       */
1118         u64     tx_lrr;         /*  Tx LRR                      */
1119         u64     rx_frames;      /*  Rx frames                   */
1120         u64     rx_words;       /*  Rx words                    */
1121         u64     lip_count;      /*  Rx LIP                      */
1122         u64     nos_count;      /*  Rx NOS                      */
1123         u64     ols_count;      /*  Rx OLS                      */
1124         u64     lr_count;       /*  Rx LR                       */
1125         u64     lrr_count;      /*  Rx LRR                      */
1126         u64     invalid_crcs;   /*  Rx CRC err frames           */
1127         u64     invalid_crc_gd_eof; /*  Rx CRC err good EOF frames */
1128         u64     undersized_frm; /*  Rx undersized frames        */
1129         u64     oversized_frm;  /*  Rx oversized frames */
1130         u64     bad_eof_frm;    /*  Rx frames with bad EOF      */
1131         u64     error_frames;   /*  Errored frames              */
1132         u64     dropped_frames; /*  Dropped frames              */
1133         u64     link_failures;  /*  Link Failure (LF) count     */
1134         u64     loss_of_syncs;  /*  Loss of sync count          */
1135         u64     loss_of_signals; /*  Loss of signal count       */
1136         u64     primseq_errs;   /*  Primitive sequence protocol err. */
1137         u64     bad_os_count;   /*  Invalid ordered sets        */
1138         u64     err_enc_out;    /*  Encoding err nonframe_8b10b */
1139         u64     err_enc;        /*  Encoding err frame_8b10b    */
1140         u64     bbsc_frames_lost; /* Credit Recovery-Frames Lost  */
1141         u64     bbsc_credits_lost; /* Credit Recovery-Credits Lost */
1142         u64     bbsc_link_resets; /* Credit Recovery-Link Resets   */
1143 };
1144
1145 /*
1146  * Eth Physical Port statistics.
1147  */
1148 struct bfa_port_eth_stats_s {
1149         u64     secs_reset;     /*  Seconds since stats is reset */
1150         u64     frame_64;       /*  Frames 64 bytes             */
1151         u64     frame_65_127;   /*  Frames 65-127 bytes */
1152         u64     frame_128_255;  /*  Frames 128-255 bytes        */
1153         u64     frame_256_511;  /*  Frames 256-511 bytes        */
1154         u64     frame_512_1023; /*  Frames 512-1023 bytes       */
1155         u64     frame_1024_1518; /*  Frames 1024-1518 bytes     */
1156         u64     frame_1519_1522; /*  Frames 1519-1522 bytes     */
1157         u64     tx_bytes;       /*  Tx bytes                    */
1158         u64     tx_packets;      /*  Tx packets         */
1159         u64     tx_mcast_packets; /*  Tx multicast packets      */
1160         u64     tx_bcast_packets; /*  Tx broadcast packets      */
1161         u64     tx_control_frame; /*  Tx control frame          */
1162         u64     tx_drop;        /*  Tx drops                    */
1163         u64     tx_jabber;      /*  Tx jabber                   */
1164         u64     tx_fcs_error;   /*  Tx FCS errors               */
1165         u64     tx_fragments;   /*  Tx fragments                */
1166         u64     rx_bytes;       /*  Rx bytes                    */
1167         u64     rx_packets;     /*  Rx packets                  */
1168         u64     rx_mcast_packets; /*  Rx multicast packets      */
1169         u64     rx_bcast_packets; /*  Rx broadcast packets      */
1170         u64     rx_control_frames; /*  Rx control frames        */
1171         u64     rx_unknown_opcode; /*  Rx unknown opcode        */
1172         u64     rx_drop;        /*  Rx drops                    */
1173         u64     rx_jabber;      /*  Rx jabber                   */
1174         u64     rx_fcs_error;   /*  Rx FCS errors               */
1175         u64     rx_alignment_error; /*  Rx alignment errors     */
1176         u64     rx_frame_length_error; /*  Rx frame len errors  */
1177         u64     rx_code_error;  /*  Rx code errors              */
1178         u64     rx_fragments;   /*  Rx fragments                */
1179         u64     rx_pause;       /*  Rx pause                    */
1180         u64     rx_zero_pause;  /*  Rx zero pause               */
1181         u64     tx_pause;       /*  Tx pause                    */
1182         u64     tx_zero_pause;  /*  Tx zero pause               */
1183         u64     rx_fcoe_pause;  /*  Rx FCoE pause               */
1184         u64     rx_fcoe_zero_pause; /*  Rx FCoE zero pause      */
1185         u64     tx_fcoe_pause;  /*  Tx FCoE pause               */
1186         u64     tx_fcoe_zero_pause; /*  Tx FCoE zero pause      */
1187         u64     rx_iscsi_pause; /*  Rx iSCSI pause              */
1188         u64     rx_iscsi_zero_pause; /*  Rx iSCSI zero pause    */
1189         u64     tx_iscsi_pause; /*  Tx iSCSI pause              */
1190         u64     tx_iscsi_zero_pause; /*  Tx iSCSI zero pause    */
1191 };
1192
1193 /*
1194  *              Port statistics.
1195  */
1196 union bfa_port_stats_u {
1197         struct bfa_port_fc_stats_s      fc;
1198         struct bfa_port_eth_stats_s     eth;
1199 };
1200
1201 struct bfa_port_cfg_mode_s {
1202         u16             max_pf;
1203         u16             max_vf;
1204         enum bfa_mode_s mode;
1205 };
1206
1207 #pragma pack(1)
1208
1209 #define BFA_CEE_LLDP_MAX_STRING_LEN     (128)
1210 #define BFA_CEE_DCBX_MAX_PRIORITY       (8)
1211 #define BFA_CEE_DCBX_MAX_PGID           (8)
1212
1213 struct bfa_cee_lldp_str_s {
1214         u8      sub_type;
1215         u8      len;
1216         u8      rsvd[2];
1217         u8      value[BFA_CEE_LLDP_MAX_STRING_LEN];
1218 };
1219
1220 struct bfa_cee_lldp_cfg_s {
1221         struct bfa_cee_lldp_str_s chassis_id;
1222         struct bfa_cee_lldp_str_s port_id;
1223         struct bfa_cee_lldp_str_s port_desc;
1224         struct bfa_cee_lldp_str_s sys_name;
1225         struct bfa_cee_lldp_str_s sys_desc;
1226         struct bfa_cee_lldp_str_s mgmt_addr;
1227         u16     time_to_live;
1228         u16     enabled_system_cap;
1229 };
1230
1231 /* CEE/DCBX parameters */
1232 struct bfa_cee_dcbx_cfg_s {
1233         u8      pgid[BFA_CEE_DCBX_MAX_PRIORITY];
1234         u8      pg_percentage[BFA_CEE_DCBX_MAX_PGID];
1235         u8      pfc_primap; /* bitmap of priorties with PFC enabled */
1236         u8      fcoe_primap; /* bitmap of priorities used for FcoE traffic */
1237         u8      iscsi_primap; /* bitmap of priorities used for iSCSI traffic */
1238         u8      dcbx_version; /* operating version:CEE or preCEE */
1239         u8      lls_fcoe; /* FCoE Logical Link Status */
1240         u8      lls_lan; /* LAN Logical Link Status */
1241         u8      rsvd[2];
1242 };
1243
1244 /* CEE Query */
1245 struct bfa_cee_attr_s {
1246         u8      cee_status;
1247         u8      error_reason;
1248         struct bfa_cee_lldp_cfg_s lldp_remote;
1249         struct bfa_cee_dcbx_cfg_s dcbx_remote;
1250         mac_t src_mac;
1251         u8      link_speed;
1252         u8      nw_priority;
1253         u8      filler[2];
1254 };
1255
1256 /* LLDP/DCBX/CEE Statistics */
1257 struct bfa_cee_stats_s {
1258         u32             lldp_tx_frames;         /* LLDP Tx Frames */
1259         u32             lldp_rx_frames;         /* LLDP Rx Frames */
1260         u32             lldp_rx_frames_invalid; /* LLDP Rx Frames invalid */
1261         u32             lldp_rx_frames_new;     /* LLDP Rx Frames new */
1262         u32             lldp_tlvs_unrecognized; /* LLDP Rx unrecog. TLVs */
1263         u32             lldp_rx_shutdown_tlvs;  /* LLDP Rx shutdown TLVs */
1264         u32             lldp_info_aged_out;     /* LLDP remote info aged */
1265         u32             dcbx_phylink_ups;       /* DCBX phy link ups */
1266         u32             dcbx_phylink_downs;     /* DCBX phy link downs */
1267         u32             dcbx_rx_tlvs;           /* DCBX Rx TLVs */
1268         u32             dcbx_rx_tlvs_invalid;   /* DCBX Rx TLVs invalid */
1269         u32             dcbx_control_tlv_error; /* DCBX control TLV errors */
1270         u32             dcbx_feature_tlv_error; /* DCBX feature TLV errors */
1271         u32             dcbx_cee_cfg_new;       /* DCBX new CEE cfg rcvd */
1272         u32             cee_status_down;        /* DCB status down */
1273         u32             cee_status_up;          /* DCB status up */
1274         u32             cee_hw_cfg_changed;     /* DCB hw cfg changed */
1275         u32             cee_rx_invalid_cfg;     /* DCB invalid cfg */
1276 };
1277
1278 #pragma pack()
1279
1280 /*
1281  *                      AEN related definitions
1282  */
1283 #define BFAD_NL_VENDOR_ID (((u64)0x01 << SCSI_NL_VID_TYPE_SHIFT) \
1284                            | BFA_PCI_VENDOR_ID_BROCADE)
1285
1286 /* BFA remote port events */
1287 enum bfa_rport_aen_event {
1288         BFA_RPORT_AEN_ONLINE     = 1,   /* RPort online event */
1289         BFA_RPORT_AEN_OFFLINE    = 2,   /* RPort offline event */
1290         BFA_RPORT_AEN_DISCONNECT = 3,   /* RPort disconnect event */
1291         BFA_RPORT_AEN_QOS_PRIO   = 4,   /* QOS priority change event */
1292         BFA_RPORT_AEN_QOS_FLOWID = 5,   /* QOS flow Id change event */
1293 };
1294
1295 struct bfa_rport_aen_data_s {
1296         u16             vf_id;  /* vf_id of this logical port */
1297         u16             rsvd[3];
1298         wwn_t           ppwwn;  /* WWN of its physical port */
1299         wwn_t           lpwwn;  /* WWN of this logical port */
1300         wwn_t           rpwwn;  /* WWN of this remote port */
1301         union {
1302                 struct bfa_rport_qos_attr_s qos;
1303         } priv;
1304 };
1305
1306 union bfa_aen_data_u {
1307         struct bfa_adapter_aen_data_s   adapter;
1308         struct bfa_port_aen_data_s      port;
1309         struct bfa_lport_aen_data_s     lport;
1310         struct bfa_rport_aen_data_s     rport;
1311         struct bfa_itnim_aen_data_s     itnim;
1312         struct bfa_audit_aen_data_s     audit;
1313         struct bfa_ioc_aen_data_s       ioc;
1314 };
1315
1316 #define BFA_AEN_MAX_ENTRY       512
1317
1318 struct bfa_aen_entry_s {
1319         struct list_head        qe;
1320         enum bfa_aen_category   aen_category;
1321         u32                     aen_type;
1322         union bfa_aen_data_u    aen_data;
1323         struct timeval          aen_tv;
1324         u32                     seq_num;
1325         u32                     bfad_num;
1326 };
1327
1328 #endif /* __BFA_DEFS_SVC_H__ */