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)
34struct 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 */
44struct 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[6];
56};
57#pragma pack()
58
59struct 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 */
80struct 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 */
88struct 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
157struct 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 */
202struct 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
211struct 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
241struct 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
263struct 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
275struct 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
284struct 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
305struct bfa_fw_lps_stats_s {
306	u32    mac_invalids;       /*  Invalid mac assigned                */
307	u32    rsvd;
308};
309
310struct 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 */
322struct 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 */
330struct 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 */
338union 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 */
346struct 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 */
355struct bfa_fw_fcxchg_stats_s {
356	u32	ua_tag_inv;
357	u32	ua_state_inv;
358};
359
360struct bfa_fw_lpsm_stats_s {
361	u32	cls_rx;
362	u32	cls_tx;
363};
364
365/*
366 *  Trunk statistics
367 */
368struct 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
379struct 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 */
394struct 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 */
405struct 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 */
413struct bfa_fw_eth_sndrcv_stats_s {
414	u32	crc_err;
415	u32	rsvd;		/*  64bit align    */
416};
417
418/*
419 * CT MAC mod stats
420 */
421struct 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 */
439struct 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 */
451struct 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 */
472enum 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 */
481enum 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 */
491enum 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 */
500struct 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
514struct bfa_qos_vc_info_s {
515	u8 vc_credit;
516	u8 borrow_credit;
517	u8 priority;
518	u8 resvd;
519};
520
521struct 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 */
532struct 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 */
550struct 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 */
601union bfa_fcport_stats_u {
602	struct bfa_qos_stats_s	fcqos;
603	struct bfa_fcoe_stats_s	fcoe;
604};
605#pragma pack()
606
607struct 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
618struct 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 */
680enum 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 */
702enum 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 */
715enum 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 */
725enum 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 */
742enum 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 */
750enum 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 */
801enum 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
807enum 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 */
818struct 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
830struct 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 */
839struct 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 */
863struct 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 */
910struct 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 */
925struct 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)
938struct 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 */
958enum 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 */
967struct 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 */
977struct 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
994enum 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
1000enum 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
1009struct 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
1017struct 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
1025struct 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 */
1069struct 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
1078struct 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
1085struct 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 */
1097struct 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 */
1110struct 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 */
1148struct 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 */
1196union bfa_port_stats_u {
1197	struct bfa_port_fc_stats_s      fc;
1198	struct bfa_port_eth_stats_s     eth;
1199};
1200
1201struct 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
1213struct 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
1220struct 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 */
1232struct 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 */
1245struct 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 */
1257struct 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 */
1287enum 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
1295struct 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
1306union 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
1318struct 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__ */
1329