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_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	*/
54 	u8		num_cqs;
55 	u8		fw_tick_res;	/*  FW clock resolution in ms */
56 	u8		rsvd[4];
57 };
58 #pragma pack()
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 /*
75  * IOC configuration
76  */
77 struct bfa_iocfc_cfg_s {
78 	struct bfa_iocfc_fwcfg_s	fwcfg;	/*  firmware side config */
79 	struct bfa_iocfc_drvcfg_s	drvcfg;	/*  driver side config	  */
80 };
81 
82 /*
83  * IOC firmware IO stats
84  */
85 struct bfa_fw_io_stats_s {
86 	u32	host_abort;		/*  IO aborted by host driver*/
87 	u32	host_cleanup;		/*  IO clean up by host driver */
88 
89 	u32	fw_io_timeout;		/*  IOs timedout */
90 	u32	fw_frm_parse;		/*  frame parsed by f/w */
91 	u32	fw_frm_data;		/*  fcp_data frame parsed by f/w */
92 	u32	fw_frm_rsp;		/*  fcp_rsp frame parsed by f/w */
93 	u32	fw_frm_xfer_rdy;	/*  xfer_rdy frame parsed by f/w */
94 	u32	fw_frm_bls_acc;		/*  BLS ACC  frame parsed by f/w */
95 	u32	fw_frm_tgt_abort;	/*  target ABTS parsed by f/w */
96 	u32	fw_frm_unknown;		/*  unknown parsed by f/w */
97 	u32	fw_data_dma;		/*  f/w DMA'ed the data frame */
98 	u32	fw_frm_drop;		/*  f/w drop the frame */
99 
100 	u32	rec_timeout;		/*  FW rec timed out */
101 	u32	error_rec;			/*  FW sending rec on
102 							* an error condition*/
103 	u32	wait_for_si;		/*  FW wait for SI */
104 	u32	rec_rsp_inval;		/*  REC rsp invalid */
105 	u32	seqr_io_abort;		/*  target does not know cmd so abort */
106 	u32	seqr_io_retry;		/*  SEQR failed so retry IO */
107 
108 	u32	itn_cisc_upd_rsp;	/*  ITN cisc updated on fcp_rsp */
109 	u32	itn_cisc_upd_data;	/*  ITN cisc updated on fcp_data */
110 	u32	itn_cisc_upd_xfer_rdy;	/*  ITN cisc updated on fcp_data */
111 
112 	u32	fcp_data_lost;		/*  fcp data lost */
113 
114 	u32	ro_set_in_xfer_rdy;	/*  Target set RO in Xfer_rdy frame */
115 	u32	xfer_rdy_ooo_err;	/*  Out of order Xfer_rdy received */
116 	u32	xfer_rdy_unknown_err;	/*  unknown error in xfer_rdy frame */
117 
118 	u32	io_abort_timeout;	/*  ABTS timedout  */
119 	u32	sler_initiated;		/*  SLER initiated */
120 
121 	u32	unexp_fcp_rsp;		/*  fcp response in wrong state */
122 
123 	u32	fcp_rsp_under_run;	/*  fcp rsp IO underrun */
124 	u32        fcp_rsp_under_run_wr;   /*  fcp rsp IO underrun for write */
125 	u32	fcp_rsp_under_run_err;	/*  fcp rsp IO underrun error */
126 	u32        fcp_rsp_resid_inval;    /*  invalid residue */
127 	u32	fcp_rsp_over_run;	/*  fcp rsp IO overrun */
128 	u32	fcp_rsp_over_run_err;	/*  fcp rsp IO overrun error */
129 	u32	fcp_rsp_proto_err;	/*  protocol error in fcp rsp */
130 	u32	fcp_rsp_sense_err;	/*  error in sense info in fcp rsp */
131 	u32	fcp_conf_req;		/*  FCP conf requested */
132 
133 	u32	tgt_aborted_io;		/*  target initiated abort */
134 
135 	u32	ioh_edtov_timeout_event;/*  IOH edtov timer popped */
136 	u32	ioh_fcp_rsp_excp_event;	/*  IOH FCP_RSP exception */
137 	u32	ioh_fcp_conf_event;	/*  IOH FCP_CONF */
138 	u32	ioh_mult_frm_rsp_event;	/*  IOH multi_frame FCP_RSP */
139 	u32	ioh_hit_class2_event;	/*  IOH hit class2 */
140 	u32	ioh_miss_other_event;	/*  IOH miss other */
141 	u32	ioh_seq_cnt_err_event;	/*  IOH seq cnt error */
142 	u32	ioh_len_err_event;		/*  IOH len error - fcp_dl !=
143 							* bytes xfered */
144 	u32	ioh_seq_len_err_event;	/*  IOH seq len error */
145 	u32	ioh_data_oor_event;	/*  Data out of range */
146 	u32	ioh_ro_ooo_event;	/*  Relative offset out of range */
147 	u32	ioh_cpu_owned_event;	/*  IOH hit -iost owned by f/w */
148 	u32	ioh_unexp_frame_event;	/*  unexpected frame received
149 						 *   count */
150 	u32	ioh_err_int;		/*  IOH error int during data-phase
151 						 *   for scsi write
152 						 */
153 };
154 
155 /*
156  * IOC port firmware stats
157  */
158 
159 struct bfa_fw_port_fpg_stats_s {
160     u32    intr_evt;
161     u32    intr;
162     u32    intr_excess;
163     u32    intr_cause0;
164     u32    intr_other;
165     u32    intr_other_ign;
166     u32    sig_lost;
167     u32    sig_regained;
168     u32    sync_lost;
169     u32    sync_to;
170     u32    sync_regained;
171     u32    div2_overflow;
172     u32    div2_underflow;
173     u32    efifo_overflow;
174     u32    efifo_underflow;
175     u32    idle_rx;
176     u32    lrr_rx;
177     u32    lr_rx;
178     u32    ols_rx;
179     u32    nos_rx;
180     u32    lip_rx;
181     u32    arbf0_rx;
182     u32    arb_rx;
183     u32    mrk_rx;
184     u32    const_mrk_rx;
185     u32    prim_unknown;
186 };
187 
188 
189 struct bfa_fw_port_lksm_stats_s {
190     u32    hwsm_success;       /*  hwsm state machine success          */
191     u32    hwsm_fails;         /*  hwsm fails                          */
192     u32    hwsm_wdtov;         /*  hwsm timed out                      */
193     u32    swsm_success;       /*  swsm success                        */
194     u32    swsm_fails;         /*  swsm fails                          */
195     u32    swsm_wdtov;         /*  swsm timed out                      */
196     u32    busybufs;           /*  link init failed due to busybuf     */
197     u32    buf_waits;          /*  bufwait state entries               */
198     u32    link_fails;         /*  link failures                       */
199     u32    psp_errors;         /*  primitive sequence protocol errors  */
200     u32    lr_unexp;           /*  No. of times LR rx-ed unexpectedly  */
201     u32    lrr_unexp;          /*  No. of times LRR rx-ed unexpectedly */
202     u32    lr_tx;              /*  No. of times LR tx started          */
203     u32    lrr_tx;             /*  No. of times LRR tx started         */
204     u32    ols_tx;             /*  No. of times OLS tx started         */
205     u32    nos_tx;             /*  No. of times NOS tx started         */
206     u32    hwsm_lrr_rx;        /*  No. of times LRR rx-ed by HWSM      */
207     u32    hwsm_lr_rx;         /*  No. of times LR rx-ed by HWSM      */
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 struct bfa_fw_port_physm_stats_s {
222     u32    module_inserts;     /*  Module insert count                 */
223     u32    module_xtracts;     /*  Module extracts count               */
224     u32    module_invalids;    /*  Invalid module inserted count       */
225     u32    module_read_ign;    /*  Module validation status ignored    */
226     u32    laser_faults;       /*  Laser fault count                   */
227     u32    rsvd;
228 };
229 
230 struct bfa_fw_fip_stats_s {
231     u32    vlan_req;           /*  vlan discovery requests             */
232     u32    vlan_notify;        /*  vlan notifications                  */
233     u32    vlan_err;           /*  vlan response error                 */
234     u32    vlan_timeouts;      /*  vlan disvoery timeouts              */
235     u32    vlan_invalids;      /*  invalid vlan in discovery advert.   */
236     u32    disc_req;           /*  Discovery solicit requests          */
237     u32    disc_rsp;           /*  Discovery solicit response          */
238     u32    disc_err;           /*  Discovery advt. parse errors        */
239     u32    disc_unsol;         /*  Discovery unsolicited               */
240     u32    disc_timeouts;      /*  Discovery timeouts                  */
241     u32    disc_fcf_unavail;   /*  Discovery FCF Not Avail.            */
242     u32    linksvc_unsupp;     /*  Unsupported link service req        */
243     u32    linksvc_err;        /*  Parse error in link service req     */
244     u32    logo_req;           /*  FIP logos received                  */
245     u32    clrvlink_req;       /*  Clear virtual link req              */
246     u32    op_unsupp;          /*  Unsupported FIP operation           */
247     u32    untagged;           /*  Untagged frames (ignored)           */
248     u32    invalid_version;    /*  Invalid FIP version                 */
249 };
250 
251 struct bfa_fw_lps_stats_s {
252     u32    mac_invalids;       /*  Invalid mac assigned                */
253     u32    rsvd;
254 };
255 
256 struct bfa_fw_fcoe_stats_s {
257     u32    cee_linkups;        /*  CEE link up count                   */
258     u32    cee_linkdns;        /*  CEE link down count                 */
259     u32    fip_linkups;        /*  FIP link up count                   */
260     u32    fip_linkdns;        /*  FIP link up count                   */
261     u32    fip_fails;          /*  FIP fail count                      */
262     u32    mac_invalids;       /*  Invalid mac assigned                */
263 };
264 
265 /*
266  * IOC firmware FCoE port stats
267  */
268 struct bfa_fw_fcoe_port_stats_s {
269     struct bfa_fw_fcoe_stats_s  fcoe_stats;
270     struct bfa_fw_fip_stats_s   fip_stats;
271 };
272 
273 /*
274  * IOC firmware FC uport stats
275  */
276 struct bfa_fw_fc_uport_stats_s {
277 	struct bfa_fw_port_snsm_stats_s		snsm_stats;
278 	struct bfa_fw_port_lksm_stats_s		lksm_stats;
279 };
280 
281 /*
282  * IOC firmware FC port stats
283  */
284 union bfa_fw_fc_port_stats_s {
285 	struct bfa_fw_fc_uport_stats_s	fc_stats;
286 	struct bfa_fw_fcoe_port_stats_s	fcoe_stats;
287 };
288 
289 /*
290  * IOC firmware port stats
291  */
292 struct bfa_fw_port_stats_s {
293 	struct bfa_fw_port_fpg_stats_s		fpg_stats;
294 	struct bfa_fw_port_physm_stats_s	physm_stats;
295 	union  bfa_fw_fc_port_stats_s		fc_port;
296 };
297 
298 /*
299  * fcxchg module statistics
300  */
301 struct bfa_fw_fcxchg_stats_s {
302 	u32	ua_tag_inv;
303 	u32	ua_state_inv;
304 };
305 
306 struct bfa_fw_lpsm_stats_s {
307 	u32	cls_rx;
308 	u32	cls_tx;
309 };
310 
311 /*
312  *  Trunk statistics
313  */
314 struct bfa_fw_trunk_stats_s {
315 	u32 emt_recvd;		/*  Trunk EMT received		*/
316 	u32 emt_accepted;		/*  Trunk EMT Accepted		*/
317 	u32 emt_rejected;		/*  Trunk EMT rejected		*/
318 	u32 etp_recvd;		/*  Trunk ETP received		*/
319 	u32 etp_accepted;		/*  Trunk ETP Accepted		*/
320 	u32 etp_rejected;		/*  Trunk ETP rejected		*/
321 	u32 lr_recvd;		/*  Trunk LR received		*/
322 	u32 rsvd;			/*  padding for 64 bit alignment */
323 };
324 
325 struct bfa_fw_advsm_stats_s {
326 	u32 flogi_sent;		/*  Flogi sent			*/
327 	u32 flogi_acc_recvd;	/*  Flogi Acc received		*/
328 	u32 flogi_rjt_recvd;	/*  Flogi rejects received	*/
329 	u32 flogi_retries;		/*  Flogi retries		*/
330 
331 	u32 elp_recvd;		/*  ELP received		*/
332 	u32 elp_accepted;		/*  ELP Accepted		*/
333 	u32 elp_rejected;		/*  ELP rejected		*/
334 	u32 elp_dropped;		/*  ELP dropped		*/
335 };
336 
337 /*
338  * IOCFC firmware stats
339  */
340 struct bfa_fw_iocfc_stats_s {
341 	u32	cfg_reqs;	/*  cfg request */
342 	u32	updq_reqs;	/*  update queue request */
343 	u32	ic_reqs;	/*  interrupt coalesce reqs */
344 	u32	unknown_reqs;
345 	u32	set_intr_reqs;	/*  set interrupt reqs */
346 };
347 
348 /*
349  * IOC attributes returned in queries
350  */
351 struct bfa_iocfc_attr_s {
352 	struct bfa_iocfc_cfg_s		config;		/*  IOCFC config   */
353 	struct bfa_iocfc_intr_attr_s	intr_attr;	/*  interrupt attr */
354 };
355 
356 /*
357  * Eth_sndrcv mod stats
358  */
359 struct bfa_fw_eth_sndrcv_stats_s {
360 	u32	crc_err;
361 	u32	rsvd;		/*  64bit align    */
362 };
363 
364 /*
365  * CT MAC mod stats
366  */
367 struct bfa_fw_mac_mod_stats_s {
368 	u32	mac_on;		/*  MAC got turned-on */
369 	u32	link_up;	/*  link-up */
370 	u32	signal_off;	/*  lost signal */
371 	u32	dfe_on;		/*  DFE on */
372 	u32	mac_reset;	/*  # of MAC reset to bring lnk up */
373 	u32	pcs_reset;	/*  # of PCS reset to bring lnk up */
374 	u32	loopback;	/*  MAC got into serdes loopback */
375 	u32	lb_mac_reset;
376 			/*  # of MAC reset to bring link up in loopback */
377 	u32	lb_pcs_reset;
378 			/*  # of PCS reset to bring link up in loopback */
379 	u32	rsvd;		/*  64bit align    */
380 };
381 
382 /*
383  * CT MOD stats
384  */
385 struct bfa_fw_ct_mod_stats_s {
386 	u32	rxa_rds_undrun;	/*  RxA RDS underrun */
387 	u32	rad_bpc_ovfl;	/*  RAD BPC overflow */
388 	u32	rad_rlb_bpc_ovfl; /*  RAD RLB BPC overflow */
389 	u32	bpc_fcs_err;	/*  BPC FCS_ERR */
390 	u32	txa_tso_hdr;	/*  TxA TSO header too long */
391 	u32	rsvd;		/*  64bit align    */
392 };
393 
394 /*
395  * IOC firmware stats
396  */
397 struct bfa_fw_stats_s {
398 	struct bfa_fw_ioc_stats_s	ioc_stats;
399 	struct bfa_fw_iocfc_stats_s	iocfc_stats;
400 	struct bfa_fw_io_stats_s	io_stats;
401 	struct bfa_fw_port_stats_s	port_stats;
402 	struct bfa_fw_fcxchg_stats_s	fcxchg_stats;
403 	struct bfa_fw_lpsm_stats_s	lpsm_stats;
404 	struct bfa_fw_lps_stats_s	lps_stats;
405 	struct bfa_fw_trunk_stats_s	trunk_stats;
406 	struct bfa_fw_advsm_stats_s	advsm_stats;
407 	struct bfa_fw_mac_mod_stats_s	macmod_stats;
408 	struct bfa_fw_ct_mod_stats_s	ctmod_stats;
409 	struct bfa_fw_eth_sndrcv_stats_s	ethsndrcv_stats;
410 };
411 
412 #define BFA_IOCFC_PATHTOV_MAX	60
413 #define BFA_IOCFC_QDEPTH_MAX	2000
414 
415 /*
416  * QoS states
417  */
418 enum bfa_qos_state {
419 	BFA_QOS_ONLINE = 1,		/*  QoS is online */
420 	BFA_QOS_OFFLINE = 2,		/*  QoS is offline */
421 };
422 
423 /*
424  * QoS  Priority levels.
425  */
426 enum bfa_qos_priority {
427 	BFA_QOS_UNKNOWN = 0,
428 	BFA_QOS_HIGH  = 1,	/*  QoS Priority Level High */
429 	BFA_QOS_MED  =  2,	/*  QoS Priority Level Medium */
430 	BFA_QOS_LOW  =  3,	/*  QoS Priority Level Low */
431 };
432 
433 /*
434  * QoS  bandwidth allocation for each priority level
435  */
436 enum bfa_qos_bw_alloc {
437 	BFA_QOS_BW_HIGH  = 60,	/*  bandwidth allocation for High */
438 	BFA_QOS_BW_MED  =  30,	/*  bandwidth allocation for Medium */
439 	BFA_QOS_BW_LOW  =  10,	/*  bandwidth allocation for Low */
440 };
441 #pragma pack(1)
442 /*
443  * QoS attribute returned in QoS Query
444  */
445 struct bfa_qos_attr_s {
446 	u8		state;		/*  QoS current state */
447 	u8		rsvd[3];
448 	u32  total_bb_cr;		/*  Total BB Credits */
449 };
450 
451 /*
452  * These fields should be displayed only from the CLI.
453  * There will be a separate BFAL API (get_qos_vc_attr ?)
454  * to retrieve this.
455  *
456  */
457 #define  BFA_QOS_MAX_VC  16
458 
459 struct bfa_qos_vc_info_s {
460 	u8 vc_credit;
461 	u8 borrow_credit;
462 	u8 priority;
463 	u8 resvd;
464 };
465 
466 struct bfa_qos_vc_attr_s {
467 	u16  total_vc_count;                    /*  Total VC Count */
468 	u16  shared_credit;
469 	u32  elp_opmode_flags;
470 	struct bfa_qos_vc_info_s vc_info[BFA_QOS_MAX_VC];  /*   as many as
471 							    * total_vc_count */
472 };
473 
474 /*
475  * QoS statistics
476  */
477 struct bfa_qos_stats_s {
478 	u32	flogi_sent;		/*  QoS Flogi sent */
479 	u32	flogi_acc_recvd;	/*  QoS Flogi Acc received */
480 	u32	flogi_rjt_recvd; /*  QoS Flogi rejects received */
481 	u32	flogi_retries;		/*  QoS Flogi retries */
482 
483 	u32	elp_recvd;		/*  QoS ELP received */
484 	u32	elp_accepted;		/*  QoS ELP Accepted */
485 	u32	elp_rejected;       /*  QoS ELP rejected */
486 	u32	elp_dropped;        /*  QoS ELP dropped  */
487 
488 	u32	qos_rscn_recvd;     /*  QoS RSCN received */
489 	u32	rsvd;		    /* padding for 64 bit alignment */
490 };
491 
492 /*
493  * FCoE statistics
494  */
495 struct bfa_fcoe_stats_s {
496 	u64	secs_reset;	/*  Seconds since stats reset	     */
497 	u64	cee_linkups;	/*  CEE link up		     */
498 	u64	cee_linkdns;	/*  CEE link down		     */
499 	u64	fip_linkups;	/*  FIP link up		     */
500 	u64	fip_linkdns;	/*  FIP link down		     */
501 	u64	fip_fails;	/*  FIP failures		     */
502 	u64	mac_invalids;	/*  Invalid mac assignments	     */
503 	u64	vlan_req;	/*  Vlan requests		     */
504 	u64	vlan_notify;	/*  Vlan notifications		     */
505 	u64	vlan_err;	/*  Vlan notification errors	     */
506 	u64	vlan_timeouts;	/*  Vlan request timeouts	     */
507 	u64	vlan_invalids;	/*  Vlan invalids		     */
508 	u64	disc_req;	/*  Discovery requests		     */
509 	u64	disc_rsp;	/*  Discovery responses	     */
510 	u64	disc_err;	/*  Discovery error frames	     */
511 	u64	disc_unsol;	/*  Discovery unsolicited	     */
512 	u64	disc_timeouts;	/*  Discovery timeouts		     */
513 	u64	disc_fcf_unavail; /*  Discovery FCF not avail	     */
514 	u64	linksvc_unsupp;	/*  FIP link service req unsupp.    */
515 	u64	linksvc_err;	/*  FIP link service req errors     */
516 	u64	logo_req;	/*  FIP logos received		     */
517 	u64	clrvlink_req;	/*  Clear virtual link requests     */
518 	u64	op_unsupp;	/*  FIP operation unsupp.	     */
519 	u64	untagged;	/*  FIP untagged frames	     */
520 	u64	txf_ucast;	/*  Tx FCoE unicast frames	     */
521 	u64	txf_ucast_vlan;	/*  Tx FCoE unicast vlan frames     */
522 	u64	txf_ucast_octets; /*  Tx FCoE unicast octets	     */
523 	u64	txf_mcast;	/*  Tx FCoE multicast frames	     */
524 	u64	txf_mcast_vlan;	/*  Tx FCoE multicast vlan frames   */
525 	u64	txf_mcast_octets; /*  Tx FCoE multicast octets	     */
526 	u64	txf_bcast;	/*  Tx FCoE broadcast frames	     */
527 	u64	txf_bcast_vlan;	/*  Tx FCoE broadcast vlan frames   */
528 	u64	txf_bcast_octets; /*  Tx FCoE broadcast octets	     */
529 	u64	txf_timeout;	/*  Tx timeouts		     */
530 	u64	txf_parity_errors; /*  Transmit parity err	     */
531 	u64	txf_fid_parity_errors; /*  Transmit FID parity err  */
532 	u64	rxf_ucast_octets; /*  Rx FCoE unicast octets	     */
533 	u64	rxf_ucast;	/*  Rx FCoE unicast frames	     */
534 	u64	rxf_ucast_vlan;	/*  Rx FCoE unicast vlan frames     */
535 	u64	rxf_mcast_octets; /*  Rx FCoE multicast octets	     */
536 	u64	rxf_mcast;	/*  Rx FCoE multicast frames	     */
537 	u64	rxf_mcast_vlan;	/*  Rx FCoE multicast vlan frames   */
538 	u64	rxf_bcast_octets; /*  Rx FCoE broadcast octets	     */
539 	u64	rxf_bcast;	/*  Rx FCoE broadcast frames	     */
540 	u64	rxf_bcast_vlan;	/*  Rx FCoE broadcast vlan frames   */
541 };
542 
543 /*
544  * QoS or FCoE stats (fcport stats excluding physical FC port stats)
545  */
546 union bfa_fcport_stats_u {
547 	struct bfa_qos_stats_s	fcqos;
548 	struct bfa_fcoe_stats_s	fcoe;
549 };
550 #pragma pack()
551 
552 struct bfa_fcpim_del_itn_stats_s {
553 	u32	del_itn_iocomp_aborted;	   /* Aborted IO requests	      */
554 	u32	del_itn_iocomp_timedout;   /* IO timeouts		      */
555 	u32	del_itn_iocom_sqer_needed; /* IO retry for SQ error recovery  */
556 	u32	del_itn_iocom_res_free;    /* Delayed freeing of IO resources */
557 	u32	del_itn_iocom_hostabrts;   /* Host IO abort requests	      */
558 	u32	del_itn_total_ios;	   /* Total IO count		      */
559 	u32	del_io_iocdowns;	   /* IO cleaned-up due to IOC down   */
560 	u32	del_tm_iocdowns;	   /* TM cleaned-up due to IOC down   */
561 };
562 
563 struct bfa_itnim_iostats_s {
564 
565 	u32	total_ios;		/*  Total IO Requests		*/
566 	u32	input_reqs;		/*  Data in-bound requests	*/
567 	u32	output_reqs;		/*  Data out-bound requests	*/
568 	u32	io_comps;		/*  Total IO Completions	*/
569 	u32	wr_throughput;		/*  Write data transferred in bytes */
570 	u32	rd_throughput;		/*  Read data transferred in bytes  */
571 
572 	u32	iocomp_ok;		/*  Slowpath IO completions	*/
573 	u32	iocomp_underrun;	/*  IO underrun		*/
574 	u32	iocomp_overrun;		/*  IO overrun			*/
575 	u32	qwait;			/*  IO Request-Q wait		*/
576 	u32	qresumes;		/*  IO Request-Q wait done	*/
577 	u32	no_iotags;		/*  No free IO tag		*/
578 	u32	iocomp_timedout;	/*  IO timeouts		*/
579 	u32	iocom_nexus_abort;	/*  IO failure due to target offline */
580 	u32	iocom_proto_err;	/*  IO protocol errors		*/
581 	u32	iocom_dif_err;		/*  IO SBC-3 protection errors	*/
582 
583 	u32	iocom_sqer_needed;	/*  fcp-2 error recovery failed	*/
584 	u32	iocom_res_free;		/*  Delayed freeing of IO tag	*/
585 
586 
587 	u32	io_aborts;		/*  Host IO abort requests	*/
588 	u32	iocom_hostabrts;	/*  Host IO abort completions	*/
589 	u32	io_cleanups;		/*  IO clean-up requests	*/
590 	u32	path_tov_expired;	/*  IO path tov expired	*/
591 	u32	iocomp_aborted;		/*  IO abort completions	*/
592 	u32	io_iocdowns;		/*  IO cleaned-up due to IOC down */
593 	u32	iocom_utags;		/*  IO comp with unknown tags	*/
594 
595 	u32	io_tmaborts;		/*  Abort request due to TM command */
596 	u32	tm_io_comps;		/* Abort completion due to TM command */
597 
598 	u32	creates;		/*  IT Nexus create requests	*/
599 	u32	fw_create;		/*  IT Nexus FW create requests	*/
600 	u32	create_comps;		/*  IT Nexus FW create completions */
601 	u32	onlines;		/*  IT Nexus onlines		*/
602 	u32	offlines;		/*  IT Nexus offlines		*/
603 	u32	fw_delete;		/*  IT Nexus FW delete requests	*/
604 	u32	delete_comps;		/*  IT Nexus FW delete completions */
605 	u32	deletes;		/*  IT Nexus delete requests	   */
606 	u32	sler_events;		/*  SLER events		*/
607 	u32	ioc_disabled;		/*  Num IOC disables		*/
608 	u32	cleanup_comps;		/*  IT Nexus cleanup completions    */
609 
610 	u32	tm_cmnds;		/*  TM Requests		*/
611 	u32	tm_fw_rsps;		/*  TM Completions		*/
612 	u32	tm_success;		/*  TM initiated IO cleanup success */
613 	u32	tm_failures;		/*  TM initiated IO cleanup failure */
614 	u32	no_tskims;		/*  No free TM tag		*/
615 	u32	tm_qwait;		/*  TM Request-Q wait		*/
616 	u32	tm_qresumes;		/*  TM Request-Q wait done	*/
617 
618 	u32	tm_iocdowns;		/*  TM cleaned-up due to IOC down   */
619 	u32	tm_cleanups;		/*  TM cleanup requests	*/
620 	u32	tm_cleanup_comps;	/*  TM cleanup completions	*/
621 };
622 
623 /* Modify char* port_stt[] in bfal_port.c if a new state was added */
624 enum bfa_port_states {
625 	BFA_PORT_ST_UNINIT		= 1,
626 	BFA_PORT_ST_ENABLING_QWAIT	= 2,
627 	BFA_PORT_ST_ENABLING		= 3,
628 	BFA_PORT_ST_LINKDOWN		= 4,
629 	BFA_PORT_ST_LINKUP		= 5,
630 	BFA_PORT_ST_DISABLING_QWAIT	= 6,
631 	BFA_PORT_ST_DISABLING		= 7,
632 	BFA_PORT_ST_DISABLED		= 8,
633 	BFA_PORT_ST_STOPPED		= 9,
634 	BFA_PORT_ST_IOCDOWN		= 10,
635 	BFA_PORT_ST_IOCDIS		= 11,
636 	BFA_PORT_ST_FWMISMATCH		= 12,
637 	BFA_PORT_ST_PREBOOT_DISABLED	= 13,
638 	BFA_PORT_ST_TOGGLING_QWAIT	= 14,
639 	BFA_PORT_ST_MAX_STATE,
640 };
641 
642 /*
643  *	Port operational type (in sync with SNIA port type).
644  */
645 enum bfa_port_type {
646 	BFA_PORT_TYPE_UNKNOWN	= 1,	/*  port type is unknown */
647 	BFA_PORT_TYPE_NPORT	= 5,	/*  P2P with switched fabric */
648 	BFA_PORT_TYPE_NLPORT	= 6,	/*  public loop */
649 	BFA_PORT_TYPE_LPORT	= 20,	/*  private loop */
650 	BFA_PORT_TYPE_P2P	= 21,	/*  P2P with no switched fabric */
651 	BFA_PORT_TYPE_VPORT	= 22,	/*  NPIV - virtual port */
652 };
653 
654 /*
655  *	Port topology setting. A port's topology and fabric login status
656  *	determine its operational type.
657  */
658 enum bfa_port_topology {
659 	BFA_PORT_TOPOLOGY_NONE = 0,	/*  No valid topology */
660 	BFA_PORT_TOPOLOGY_P2P  = 1,	/*  P2P only */
661 	BFA_PORT_TOPOLOGY_LOOP = 2,	/*  LOOP topology */
662 	BFA_PORT_TOPOLOGY_AUTO = 3,	/*  auto topology selection */
663 };
664 
665 /*
666  *	Physical port loopback types.
667  */
668 enum bfa_port_opmode {
669 	BFA_PORT_OPMODE_NORMAL   = 0x00, /*  normal non-loopback mode */
670 	BFA_PORT_OPMODE_LB_INT   = 0x01, /*  internal loop back */
671 	BFA_PORT_OPMODE_LB_SLW   = 0x02, /*  serial link wrapback (serdes) */
672 	BFA_PORT_OPMODE_LB_EXT   = 0x04, /*  external loop back (serdes) */
673 	BFA_PORT_OPMODE_LB_CBL   = 0x08, /*  cabled loop back */
674 	BFA_PORT_OPMODE_LB_NLINT = 0x20, /*  NL_Port internal loopback */
675 };
676 
677 #define BFA_PORT_OPMODE_LB_HARD(_mode)			\
678 	((_mode == BFA_PORT_OPMODE_LB_INT) ||		\
679 	(_mode == BFA_PORT_OPMODE_LB_SLW) ||		\
680 	(_mode == BFA_PORT_OPMODE_LB_EXT))
681 
682 /*
683  *	Port link state
684  */
685 enum bfa_port_linkstate {
686 	BFA_PORT_LINKUP		= 1,	/*  Physical port/Trunk link up */
687 	BFA_PORT_LINKDOWN	= 2,	/*  Physical port/Trunk link down */
688 };
689 
690 /*
691  *	Port link state reason code
692  */
693 enum bfa_port_linkstate_rsn {
694 	BFA_PORT_LINKSTATE_RSN_NONE		= 0,
695 	BFA_PORT_LINKSTATE_RSN_DISABLED		= 1,
696 	BFA_PORT_LINKSTATE_RSN_RX_NOS		= 2,
697 	BFA_PORT_LINKSTATE_RSN_RX_OLS		= 3,
698 	BFA_PORT_LINKSTATE_RSN_RX_LIP		= 4,
699 	BFA_PORT_LINKSTATE_RSN_RX_LIPF7		= 5,
700 	BFA_PORT_LINKSTATE_RSN_SFP_REMOVED	= 6,
701 	BFA_PORT_LINKSTATE_RSN_PORT_FAULT	= 7,
702 	BFA_PORT_LINKSTATE_RSN_RX_LOS		= 8,
703 	BFA_PORT_LINKSTATE_RSN_LOCAL_FAULT	= 9,
704 	BFA_PORT_LINKSTATE_RSN_REMOTE_FAULT	= 10,
705 	BFA_PORT_LINKSTATE_RSN_TIMEOUT		= 11,
706 
707 
708 
709 	/* CEE related reason codes/errors */
710 	CEE_LLDP_INFO_AGED_OUT			= 20,
711 	CEE_LLDP_SHUTDOWN_TLV_RCVD		= 21,
712 	CEE_PEER_NOT_ADVERTISE_DCBX		= 22,
713 	CEE_PEER_NOT_ADVERTISE_PG		= 23,
714 	CEE_PEER_NOT_ADVERTISE_PFC		= 24,
715 	CEE_PEER_NOT_ADVERTISE_FCOE		= 25,
716 	CEE_PG_NOT_COMPATIBLE			= 26,
717 	CEE_PFC_NOT_COMPATIBLE			= 27,
718 	CEE_FCOE_NOT_COMPATIBLE			= 28,
719 	CEE_BAD_PG_RCVD				= 29,
720 	CEE_BAD_BW_RCVD				= 30,
721 	CEE_BAD_PFC_RCVD			= 31,
722 	CEE_BAD_APP_PRI_RCVD			= 32,
723 	CEE_FCOE_PRI_PFC_OFF			= 33,
724 	CEE_DUP_CONTROL_TLV_RCVD		= 34,
725 	CEE_DUP_FEAT_TLV_RCVD			= 35,
726 	CEE_APPLY_NEW_CFG			= 36, /* reason, not error */
727 	CEE_PROTOCOL_INIT			= 37, /* reason, not error */
728 	CEE_PHY_LINK_DOWN			= 38,
729 	CEE_LLS_FCOE_ABSENT			= 39,
730 	CEE_LLS_FCOE_DOWN			= 40,
731 	CEE_ISCSI_NOT_COMPATIBLE		= 41,
732 	CEE_ISCSI_PRI_PFC_OFF			= 42,
733 	CEE_ISCSI_PRI_OVERLAP_FCOE_PRI		= 43
734 };
735 #pragma pack(1)
736 /*
737  *      Physical port configuration
738  */
739 struct bfa_port_cfg_s {
740 	u8	 topology;	/*  bfa_port_topology		*/
741 	u8	 speed;		/*  enum bfa_port_speed	*/
742 	u8	 trunked;	/*  trunked or not		*/
743 	u8	 qos_enabled;	/*  qos enabled or not		*/
744 	u8	 cfg_hardalpa;	/*  is hard alpa configured	*/
745 	u8	 hardalpa;	/*  configured hard alpa	*/
746 	__be16	 maxfrsize;	/*  maximum frame size		*/
747 	u8	 rx_bbcredit;	/*  receive buffer credits	*/
748 	u8	 tx_bbcredit;	/*  transmit buffer credits	*/
749 	u8	 ratelimit;	/*  ratelimit enabled or not	*/
750 	u8	 trl_def_speed;	/*  ratelimit default speed	*/
751 	u16 path_tov;	/*  device path timeout	*/
752 	u16 q_depth;	/*  SCSI Queue depth		*/
753 };
754 #pragma pack()
755 
756 /*
757  *	Port attribute values.
758  */
759 struct bfa_port_attr_s {
760 	/*
761 	 * Static fields
762 	 */
763 	wwn_t	   nwwn;		/*  node wwn */
764 	wwn_t	   pwwn;		/*  port wwn */
765 	wwn_t	   factorynwwn;	/*  factory node wwn */
766 	wwn_t	   factorypwwn;	/*  factory port wwn */
767 	enum fc_cos	cos_supported;	/*  supported class of services */
768 	u32	rsvd;
769 	struct fc_symname_s	port_symname;	/*  port symbolic name */
770 	enum bfa_port_speed speed_supported; /*  supported speeds */
771 	bfa_boolean_t   pbind_enabled;
772 
773 	/*
774 	 * Configured values
775 	 */
776 	struct bfa_port_cfg_s pport_cfg;	/*  pport cfg */
777 
778 	/*
779 	 * Dynamic field - info from BFA
780 	 */
781 	enum bfa_port_states	port_state;	/*  current port state */
782 	enum bfa_port_speed	speed;		/*  current speed */
783 	enum bfa_port_topology	topology;	/*  current topology */
784 	bfa_boolean_t		beacon;		/*  current beacon status */
785 	bfa_boolean_t		link_e2e_beacon; /*  link beacon is on */
786 	bfa_boolean_t		plog_enabled;	/*  portlog is enabled */
787 
788 	/*
789 	 * Dynamic field - info from FCS
790 	 */
791 	u32		pid;		/*  port ID */
792 	enum bfa_port_type	port_type;	/*  current topology */
793 	u32		loopback;	/*  external loopback */
794 	u32		authfail;	/*  auth fail state */
795 	bfa_boolean_t		io_profile;	/*  get it from fcpim mod */
796 	u8			pad[4];		/*  for 64-bit alignement */
797 
798 	/* FCoE specific  */
799 	u16		fcoe_vlan;
800 	u8			rsvd1[6];
801 };
802 
803 /*
804  *	      Port FCP mappings.
805  */
806 struct bfa_port_fcpmap_s {
807 	char		osdevname[256];
808 	u32	bus;
809 	u32	target;
810 	u32	oslun;
811 	u32	fcid;
812 	wwn_t	   nwwn;
813 	wwn_t	   pwwn;
814 	u64	fcplun;
815 	char		luid[256];
816 };
817 
818 /*
819  *	      Port RNID info.
820  */
821 struct bfa_port_rnid_s {
822 	wwn_t	     wwn;
823 	u32	  unittype;
824 	u32	  portid;
825 	u32	  attached_nodes_num;
826 	u16	  ip_version;
827 	u16	  udp_port;
828 	u8	   ipaddr[16];
829 	u16	  rsvd;
830 	u16	  topologydiscoveryflags;
831 };
832 
833 #pragma pack(1)
834 struct bfa_fcport_fcf_s {
835 	wwn_t	   name;	   /*  FCF name		 */
836 	wwn_t	   fabric_name;    /*  Fabric Name	      */
837 	u8		fipenabled;	/*  FIP enabled or not */
838 	u8		fipfailed;	/*  FIP failed or not	*/
839 	u8		resv[2];
840 	u8	 pri;	    /*  FCF priority	     */
841 	u8	 version;	/*  FIP version used	 */
842 	u8	 available;      /*  Available  for  login    */
843 	u8	 fka_disabled;   /*  FKA is disabled	  */
844 	u8	 maxsz_verified; /*  FCoE max size verified   */
845 	u8	 fc_map[3];      /*  FC map		   */
846 	__be16	 vlan;	   /*  FCoE vlan tag/priority   */
847 	u32	fka_adv_per;    /*  FIP  ka advert. period   */
848 	mac_t	   mac;	    /*  FCF mac		  */
849 };
850 
851 /*
852  *	Trunk states for BCU/BFAL
853  */
854 enum bfa_trunk_state {
855 	BFA_TRUNK_DISABLED	= 0,	/*  Trunk is not configured	*/
856 	BFA_TRUNK_ONLINE	= 1,	/*  Trunk is online		*/
857 	BFA_TRUNK_OFFLINE	= 2,	/*  Trunk is offline		*/
858 };
859 
860 /*
861  *	VC attributes for trunked link
862  */
863 struct bfa_trunk_vc_attr_s {
864 	u32 bb_credit;
865 	u32 elp_opmode_flags;
866 	u32 req_credit;
867 	u16 vc_credits[8];
868 };
869 
870 /*
871  *	Link state information
872  */
873 struct bfa_port_link_s {
874 	u8	 linkstate;	/*  Link state bfa_port_linkstate */
875 	u8	 linkstate_rsn;	/*  bfa_port_linkstate_rsn_t */
876 	u8	 topology;	/*  P2P/LOOP bfa_port_topology */
877 	u8	 speed;		/*  Link speed (1/2/4/8 G) */
878 	u32	linkstate_opt;  /*  Linkstate optional data (debug) */
879 	u8	 trunked;	/*  Trunked or not (1 or 0) */
880 	u8	 resvd[3];
881 	struct bfa_qos_attr_s  qos_attr;   /* QoS Attributes */
882 	union {
883 		struct bfa_qos_vc_attr_s qos_vc_attr;  /*  VC info from ELP */
884 		struct bfa_trunk_vc_attr_s trunk_vc_attr;
885 		struct bfa_fcport_fcf_s fcf; /*  FCF information (for FCoE) */
886 	} vc_fcf;
887 };
888 #pragma pack()
889 
890 enum bfa_trunk_link_fctl {
891 	BFA_TRUNK_LINK_FCTL_NORMAL,
892 	BFA_TRUNK_LINK_FCTL_VC,
893 	BFA_TRUNK_LINK_FCTL_VC_QOS,
894 };
895 
896 enum bfa_trunk_link_state {
897 	BFA_TRUNK_LINK_STATE_UP = 1,		/* link part of trunk */
898 	BFA_TRUNK_LINK_STATE_DN_LINKDN = 2,	/* physical link down */
899 	BFA_TRUNK_LINK_STATE_DN_GRP_MIS = 3,	/* trunk group different */
900 	BFA_TRUNK_LINK_STATE_DN_SPD_MIS = 4,	/* speed mismatch */
901 	BFA_TRUNK_LINK_STATE_DN_MODE_MIS = 5,	/* remote port not trunked */
902 };
903 
904 #define BFA_TRUNK_MAX_PORTS	2
905 struct bfa_trunk_link_attr_s {
906 	wwn_t    trunk_wwn;
907 	enum bfa_trunk_link_fctl fctl;
908 	enum bfa_trunk_link_state link_state;
909 	enum bfa_port_speed	speed;
910 	u32 deskew;
911 };
912 
913 struct bfa_trunk_attr_s {
914 	enum bfa_trunk_state	state;
915 	enum bfa_port_speed	speed;
916 	u32		port_id;
917 	u32		rsvd;
918 	struct bfa_trunk_link_attr_s link_attr[BFA_TRUNK_MAX_PORTS];
919 };
920 
921 struct bfa_rport_hal_stats_s {
922 	u32        sm_un_cr;	    /*  uninit: create events      */
923 	u32        sm_un_unexp;	    /*  uninit: exception events   */
924 	u32        sm_cr_on;	    /*  created: online events     */
925 	u32        sm_cr_del;	    /*  created: delete events     */
926 	u32        sm_cr_hwf;	    /*  created: IOC down          */
927 	u32        sm_cr_unexp;	    /*  created: exception events  */
928 	u32        sm_fwc_rsp;	    /*  fw create: f/w responses   */
929 	u32        sm_fwc_del;	    /*  fw create: delete events   */
930 	u32        sm_fwc_off;	    /*  fw create: offline events  */
931 	u32        sm_fwc_hwf;	    /*  fw create: IOC down        */
932 	u32        sm_fwc_unexp;	    /*  fw create: exception events*/
933 	u32        sm_on_off;	    /*  online: offline events     */
934 	u32        sm_on_del;	    /*  online: delete events      */
935 	u32        sm_on_hwf;	    /*  online: IOC down events    */
936 	u32        sm_on_unexp;	    /*  online: exception events   */
937 	u32        sm_fwd_rsp;	    /*  fw delete: fw responses    */
938 	u32        sm_fwd_del;	    /*  fw delete: delete events   */
939 	u32        sm_fwd_hwf;	    /*  fw delete: IOC down events */
940 	u32        sm_fwd_unexp;	    /*  fw delete: exception events*/
941 	u32        sm_off_del;	    /*  offline: delete events     */
942 	u32        sm_off_on;	    /*  offline: online events     */
943 	u32        sm_off_hwf;	    /*  offline: IOC down events   */
944 	u32        sm_off_unexp;	    /*  offline: exception events  */
945 	u32        sm_del_fwrsp;	    /*  delete: fw responses       */
946 	u32        sm_del_hwf;	    /*  delete: IOC down events    */
947 	u32        sm_del_unexp;	    /*  delete: exception events   */
948 	u32        sm_delp_fwrsp;	    /*  delete pend: fw responses  */
949 	u32        sm_delp_hwf;	    /*  delete pend: IOC downs     */
950 	u32        sm_delp_unexp;	    /*  delete pend: exceptions    */
951 	u32        sm_offp_fwrsp;	    /*  off-pending: fw responses  */
952 	u32        sm_offp_del;	    /*  off-pending: deletes       */
953 	u32        sm_offp_hwf;	    /*  off-pending: IOC downs     */
954 	u32        sm_offp_unexp;	    /*  off-pending: exceptions    */
955 	u32        sm_iocd_off;	    /*  IOC down: offline events   */
956 	u32        sm_iocd_del;	    /*  IOC down: delete events    */
957 	u32        sm_iocd_on;	    /*  IOC down: online events    */
958 	u32        sm_iocd_unexp;	    /*  IOC down: exceptions       */
959 	u32        rsvd;
960 };
961 #pragma pack(1)
962 /*
963  *  Rport's QoS attributes
964  */
965 struct bfa_rport_qos_attr_s {
966 	u8			qos_priority;  /*  rport's QoS priority   */
967 	u8			rsvd[3];
968 	u32	       qos_flow_id;	  /*  QoS flow Id	 */
969 };
970 #pragma pack()
971 
972 #define BFA_IOBUCKET_MAX 14
973 
974 struct bfa_itnim_latency_s {
975 	u32 min[BFA_IOBUCKET_MAX];
976 	u32 max[BFA_IOBUCKET_MAX];
977 	u32 count[BFA_IOBUCKET_MAX];
978 	u32 avg[BFA_IOBUCKET_MAX];
979 };
980 
981 struct bfa_itnim_ioprofile_s {
982 	u32 clock_res_mul;
983 	u32 clock_res_div;
984 	u32 index;
985 	u32 io_profile_start_time;	/*  IO profile start time	*/
986 	u32 iocomps[BFA_IOBUCKET_MAX];	/*  IO completed	*/
987 	struct bfa_itnim_latency_s io_latency;
988 };
989 
990 /*
991  * FC physical port statistics.
992  */
993 struct bfa_port_fc_stats_s {
994 	u64     secs_reset;     /*  Seconds since stats is reset */
995 	u64     tx_frames;      /*  Tx frames                   */
996 	u64     tx_words;       /*  Tx words                    */
997 	u64     tx_lip;         /*  Tx LIP                      */
998 	u64     tx_nos;         /*  Tx NOS                      */
999 	u64     tx_ols;         /*  Tx OLS                      */
1000 	u64     tx_lr;          /*  Tx LR                       */
1001 	u64     tx_lrr;         /*  Tx LRR                      */
1002 	u64     rx_frames;      /*  Rx frames                   */
1003 	u64     rx_words;       /*  Rx words                    */
1004 	u64     lip_count;      /*  Rx LIP                      */
1005 	u64     nos_count;      /*  Rx NOS                      */
1006 	u64     ols_count;      /*  Rx OLS                      */
1007 	u64     lr_count;       /*  Rx LR                       */
1008 	u64     lrr_count;      /*  Rx LRR                      */
1009 	u64     invalid_crcs;   /*  Rx CRC err frames           */
1010 	u64     invalid_crc_gd_eof; /*  Rx CRC err good EOF frames */
1011 	u64     undersized_frm; /*  Rx undersized frames        */
1012 	u64     oversized_frm;  /*  Rx oversized frames */
1013 	u64     bad_eof_frm;    /*  Rx frames with bad EOF      */
1014 	u64     error_frames;   /*  Errored frames              */
1015 	u64     dropped_frames; /*  Dropped frames              */
1016 	u64     link_failures;  /*  Link Failure (LF) count     */
1017 	u64     loss_of_syncs;  /*  Loss of sync count          */
1018 	u64     loss_of_signals; /*  Loss of signal count       */
1019 	u64     primseq_errs;   /*  Primitive sequence protocol err. */
1020 	u64     bad_os_count;   /*  Invalid ordered sets        */
1021 	u64     err_enc_out;    /*  Encoding err nonframe_8b10b */
1022 	u64     err_enc;        /*  Encoding err frame_8b10b    */
1023 };
1024 
1025 /*
1026  * Eth Physical Port statistics.
1027  */
1028 struct bfa_port_eth_stats_s {
1029 	u64     secs_reset;     /*  Seconds since stats is reset */
1030 	u64     frame_64;       /*  Frames 64 bytes             */
1031 	u64     frame_65_127;   /*  Frames 65-127 bytes */
1032 	u64     frame_128_255;  /*  Frames 128-255 bytes        */
1033 	u64     frame_256_511;  /*  Frames 256-511 bytes        */
1034 	u64     frame_512_1023; /*  Frames 512-1023 bytes       */
1035 	u64     frame_1024_1518; /*  Frames 1024-1518 bytes     */
1036 	u64     frame_1519_1522; /*  Frames 1519-1522 bytes     */
1037 	u64     tx_bytes;       /*  Tx bytes                    */
1038 	u64     tx_packets;      /*  Tx packets         */
1039 	u64     tx_mcast_packets; /*  Tx multicast packets      */
1040 	u64     tx_bcast_packets; /*  Tx broadcast packets      */
1041 	u64     tx_control_frame; /*  Tx control frame          */
1042 	u64     tx_drop;        /*  Tx drops                    */
1043 	u64     tx_jabber;      /*  Tx jabber                   */
1044 	u64     tx_fcs_error;   /*  Tx FCS errors               */
1045 	u64     tx_fragments;   /*  Tx fragments                */
1046 	u64     rx_bytes;       /*  Rx bytes                    */
1047 	u64     rx_packets;     /*  Rx packets                  */
1048 	u64     rx_mcast_packets; /*  Rx multicast packets      */
1049 	u64     rx_bcast_packets; /*  Rx broadcast packets      */
1050 	u64     rx_control_frames; /*  Rx control frames        */
1051 	u64     rx_unknown_opcode; /*  Rx unknown opcode        */
1052 	u64     rx_drop;        /*  Rx drops                    */
1053 	u64     rx_jabber;      /*  Rx jabber                   */
1054 	u64     rx_fcs_error;   /*  Rx FCS errors               */
1055 	u64     rx_alignment_error; /*  Rx alignment errors     */
1056 	u64     rx_frame_length_error; /*  Rx frame len errors  */
1057 	u64     rx_code_error;  /*  Rx code errors              */
1058 	u64     rx_fragments;   /*  Rx fragments                */
1059 	u64     rx_pause;       /*  Rx pause                    */
1060 	u64     rx_zero_pause;  /*  Rx zero pause               */
1061 	u64     tx_pause;       /*  Tx pause                    */
1062 	u64     tx_zero_pause;  /*  Tx zero pause               */
1063 	u64     rx_fcoe_pause;  /*  Rx FCoE pause               */
1064 	u64     rx_fcoe_zero_pause; /*  Rx FCoE zero pause      */
1065 	u64     tx_fcoe_pause;  /*  Tx FCoE pause               */
1066 	u64     tx_fcoe_zero_pause; /*  Tx FCoE zero pause      */
1067 	u64     rx_iscsi_pause; /*  Rx iSCSI pause              */
1068 	u64     rx_iscsi_zero_pause; /*  Rx iSCSI zero pause    */
1069 	u64     tx_iscsi_pause; /*  Tx iSCSI pause              */
1070 	u64     tx_iscsi_zero_pause; /*  Tx iSCSI zero pause    */
1071 };
1072 
1073 /*
1074  *              Port statistics.
1075  */
1076 union bfa_port_stats_u {
1077 	struct bfa_port_fc_stats_s      fc;
1078 	struct bfa_port_eth_stats_s     eth;
1079 };
1080 
1081 #endif /* __BFA_DEFS_SVC_H__ */
1082