311 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			311 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * Copyright (c) 2005-2009 Brocade Communications Systems, Inc.
 | 
						|
 * All rights reserved
 | 
						|
 * www.brocade.com
 | 
						|
 *
 | 
						|
 * Linux driver for Brocade Fibre Channel Host Bus Adapter.
 | 
						|
 *
 | 
						|
 * This program is free software; you can redistribute it and/or modify it
 | 
						|
 * under the terms of the GNU General Public License (GPL) Version 2 as
 | 
						|
 * published by the Free Software Foundation
 | 
						|
 *
 | 
						|
 * This program is distributed in the hope that it will be useful, but
 | 
						|
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						|
 * General Public License for more details.
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef __BFA_DEFS_IOCFC_H__
 | 
						|
#define __BFA_DEFS_IOCFC_H__
 | 
						|
 | 
						|
#include <protocol/types.h>
 | 
						|
#include <defs/bfa_defs_types.h>
 | 
						|
#include <defs/bfa_defs_version.h>
 | 
						|
#include <defs/bfa_defs_adapter.h>
 | 
						|
#include <defs/bfa_defs_pm.h>
 | 
						|
 | 
						|
#define BFA_IOCFC_INTR_DELAY	1125
 | 
						|
#define BFA_IOCFC_INTR_LATENCY	225
 | 
						|
 | 
						|
/**
 | 
						|
 * Interrupt coalescing configuration.
 | 
						|
 */
 | 
						|
struct bfa_iocfc_intr_attr_s {
 | 
						|
	bfa_boolean_t	coalesce;	/*  enable/disable coalescing */
 | 
						|
	u16	latency;	/*  latency in microseconds   */
 | 
						|
	u16	delay;		/*  delay in microseconds     */
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * IOC firmware configuraton
 | 
						|
 */
 | 
						|
struct bfa_iocfc_fwcfg_s {
 | 
						|
	u16        num_fabrics;	/*  number of fabrics		*/
 | 
						|
	u16        num_lports;	/*  number of local lports	*/
 | 
						|
	u16        num_rports;	/*  number of remote ports	*/
 | 
						|
	u16        num_ioim_reqs;	/*  number of IO reqs		*/
 | 
						|
	u16        num_tskim_reqs;	/*  task management requests	*/
 | 
						|
	u16        num_iotm_reqs;	/*  number of TM IO reqs	*/
 | 
						|
	u16        num_tsktm_reqs;	/*  TM task management requests*/
 | 
						|
	u16        num_fcxp_reqs;	/*  unassisted FC exchanges	*/
 | 
						|
	u16        num_uf_bufs;	/*  unsolicited recv buffers	*/
 | 
						|
	u8		num_cqs;
 | 
						|
	u8		rsvd;
 | 
						|
};
 | 
						|
 | 
						|
struct bfa_iocfc_drvcfg_s {
 | 
						|
	u16        num_reqq_elems;	/*  number of req queue elements */
 | 
						|
	u16        num_rspq_elems;	/*  number of rsp queue elements */
 | 
						|
	u16        num_sgpgs;	/*  number of total SG pages	  */
 | 
						|
	u16        num_sboot_tgts;	/*  number of SAN boot targets	  */
 | 
						|
	u16        num_sboot_luns;	/*  number of SAN boot luns	  */
 | 
						|
	u16	    ioc_recover;	/*  IOC recovery mode		  */
 | 
						|
	u16	    min_cfg;	/*  minimum configuration	  */
 | 
						|
	u16        path_tov;	/*  device path timeout	  */
 | 
						|
	bfa_boolean_t   delay_comp; /*  delay completion of
 | 
						|
							failed inflight IOs */
 | 
						|
	u32		rsvd;
 | 
						|
};
 | 
						|
/**
 | 
						|
 * IOC configuration
 | 
						|
 */
 | 
						|
struct bfa_iocfc_cfg_s {
 | 
						|
	struct bfa_iocfc_fwcfg_s	fwcfg;	/*  firmware side config */
 | 
						|
	struct bfa_iocfc_drvcfg_s	drvcfg;	/*  driver side config	  */
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * IOC firmware IO stats
 | 
						|
 */
 | 
						|
struct bfa_fw_io_stats_s {
 | 
						|
	u32	host_abort;		/*  IO aborted by host driver*/
 | 
						|
	u32	host_cleanup;		/*  IO clean up by host driver */
 | 
						|
 | 
						|
	u32	fw_io_timeout;		/*  IOs timedout */
 | 
						|
	u32	fw_frm_parse;		/*  frame parsed by f/w */
 | 
						|
	u32	fw_frm_data;		/*  fcp_data frame parsed by f/w */
 | 
						|
	u32	fw_frm_rsp;		/*  fcp_rsp frame parsed by f/w */
 | 
						|
	u32	fw_frm_xfer_rdy;	/*  xfer_rdy frame parsed by f/w */
 | 
						|
	u32	fw_frm_bls_acc;		/*  BLS ACC  frame parsed by f/w */
 | 
						|
	u32	fw_frm_tgt_abort;	/*  target ABTS parsed by f/w */
 | 
						|
	u32	fw_frm_unknown;		/*  unknown parsed by f/w */
 | 
						|
	u32	fw_data_dma;		/*  f/w DMA'ed the data frame */
 | 
						|
	u32	fw_frm_drop;		/*  f/w drop the frame */
 | 
						|
 | 
						|
	u32	rec_timeout;		/*  FW rec timed out */
 | 
						|
	u32	error_rec;			/*  FW sending rec on
 | 
						|
							* an error condition*/
 | 
						|
	u32	wait_for_si;		/*  FW wait for SI */
 | 
						|
	u32	rec_rsp_inval;		/*  REC rsp invalid */
 | 
						|
	u32	seqr_io_abort;		/*  target does not know cmd so abort */
 | 
						|
	u32	seqr_io_retry;		/*  SEQR failed so retry IO */
 | 
						|
 | 
						|
	u32	itn_cisc_upd_rsp;	/*  ITN cisc updated on fcp_rsp */
 | 
						|
	u32	itn_cisc_upd_data;	/*  ITN cisc updated on fcp_data */
 | 
						|
	u32	itn_cisc_upd_xfer_rdy;	/*  ITN cisc updated on fcp_data */
 | 
						|
 | 
						|
	u32	fcp_data_lost;		/*  fcp data lost */
 | 
						|
 | 
						|
	u32	ro_set_in_xfer_rdy;	/*  Target set RO in Xfer_rdy frame */
 | 
						|
	u32	xfer_rdy_ooo_err;	/*  Out of order Xfer_rdy received */
 | 
						|
	u32	xfer_rdy_unknown_err;	/*  unknown error in xfer_rdy frame */
 | 
						|
 | 
						|
	u32	io_abort_timeout;	/*  ABTS timedout  */
 | 
						|
	u32	sler_initiated;		/*  SLER initiated */
 | 
						|
 | 
						|
	u32	unexp_fcp_rsp;		/*  fcp response in wrong state */
 | 
						|
 | 
						|
	u32	fcp_rsp_under_run;	/*  fcp rsp IO underrun */
 | 
						|
	u32        fcp_rsp_under_run_wr;   /*  fcp rsp IO underrun for write */
 | 
						|
	u32	fcp_rsp_under_run_err;	/*  fcp rsp IO underrun error */
 | 
						|
	u32        fcp_rsp_resid_inval;    /*  invalid residue */
 | 
						|
	u32	fcp_rsp_over_run;	/*  fcp rsp IO overrun */
 | 
						|
	u32	fcp_rsp_over_run_err;	/*  fcp rsp IO overrun error */
 | 
						|
	u32	fcp_rsp_proto_err;	/*  protocol error in fcp rsp */
 | 
						|
	u32	fcp_rsp_sense_err;	/*  error in sense info in fcp rsp */
 | 
						|
	u32	fcp_conf_req;		/*  FCP conf requested */
 | 
						|
 | 
						|
	u32	tgt_aborted_io;		/*  target initiated abort */
 | 
						|
 | 
						|
	u32	ioh_edtov_timeout_event;/*  IOH edtov timer popped */
 | 
						|
	u32	ioh_fcp_rsp_excp_event;	/*  IOH FCP_RSP exception */
 | 
						|
	u32	ioh_fcp_conf_event;	/*  IOH FCP_CONF */
 | 
						|
	u32	ioh_mult_frm_rsp_event;	/*  IOH multi_frame FCP_RSP */
 | 
						|
	u32	ioh_hit_class2_event;	/*  IOH hit class2 */
 | 
						|
	u32	ioh_miss_other_event;	/*  IOH miss other */
 | 
						|
	u32	ioh_seq_cnt_err_event;	/*  IOH seq cnt error */
 | 
						|
	u32	ioh_len_err_event;		/*  IOH len error - fcp_dl !=
 | 
						|
							* bytes xfered */
 | 
						|
	u32	ioh_seq_len_err_event;	/*  IOH seq len error */
 | 
						|
	u32	ioh_data_oor_event;	/*  Data out of range */
 | 
						|
	u32	ioh_ro_ooo_event;	/*  Relative offset out of range */
 | 
						|
	u32	ioh_cpu_owned_event;	/*  IOH hit -iost owned by f/w */
 | 
						|
	u32	ioh_unexp_frame_event;	/*  unexpected frame recieved
 | 
						|
						 *   count */
 | 
						|
	u32	ioh_err_int;		/*  IOH error int during data-phase
 | 
						|
						 *   for scsi write
 | 
						|
						 */
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * IOC port firmware stats
 | 
						|
 */
 | 
						|
 | 
						|
struct bfa_fw_port_fpg_stats_s {
 | 
						|
    u32    intr_evt;
 | 
						|
    u32    intr;
 | 
						|
    u32    intr_excess;
 | 
						|
    u32    intr_cause0;
 | 
						|
    u32    intr_other;
 | 
						|
    u32    intr_other_ign;
 | 
						|
    u32    sig_lost;
 | 
						|
    u32    sig_regained;
 | 
						|
    u32    sync_lost;
 | 
						|
    u32    sync_to;
 | 
						|
    u32    sync_regained;
 | 
						|
    u32    div2_overflow;
 | 
						|
    u32    div2_underflow;
 | 
						|
    u32    efifo_overflow;
 | 
						|
    u32    efifo_underflow;
 | 
						|
    u32    idle_rx;
 | 
						|
    u32    lrr_rx;
 | 
						|
    u32    lr_rx;
 | 
						|
    u32    ols_rx;
 | 
						|
    u32    nos_rx;
 | 
						|
    u32    lip_rx;
 | 
						|
    u32    arbf0_rx;
 | 
						|
    u32    mrk_rx;
 | 
						|
    u32    const_mrk_rx;
 | 
						|
    u32    prim_unknown;
 | 
						|
    u32    rsvd;
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
struct bfa_fw_port_lksm_stats_s {
 | 
						|
    u32    hwsm_success;       /*  hwsm state machine success          */
 | 
						|
    u32    hwsm_fails;         /*  hwsm fails                          */
 | 
						|
    u32    hwsm_wdtov;         /*  hwsm timed out                      */
 | 
						|
    u32    swsm_success;       /*  swsm success                        */
 | 
						|
    u32    swsm_fails;         /*  swsm fails                          */
 | 
						|
    u32    swsm_wdtov;         /*  swsm timed out                      */
 | 
						|
    u32    busybufs;           /*  link init failed due to busybuf     */
 | 
						|
    u32    buf_waits;          /*  bufwait state entries               */
 | 
						|
    u32    link_fails;         /*  link failures                       */
 | 
						|
    u32    psp_errors;         /*  primitive sequence protocol errors  */
 | 
						|
    u32    lr_unexp;           /*  No. of times LR rx-ed unexpectedly  */
 | 
						|
    u32    lrr_unexp;          /*  No. of times LRR rx-ed unexpectedly */
 | 
						|
    u32    lr_tx;              /*  No. of times LR tx started          */
 | 
						|
    u32    lrr_tx;             /*  No. of times LRR tx started         */
 | 
						|
    u32    ols_tx;             /*  No. of times OLS tx started         */
 | 
						|
    u32    nos_tx;             /*  No. of times NOS tx started         */
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
struct bfa_fw_port_snsm_stats_s {
 | 
						|
    u32    hwsm_success;       /*  Successful hwsm terminations        */
 | 
						|
    u32    hwsm_fails;         /*  hwsm fail count                     */
 | 
						|
    u32    hwsm_wdtov;         /*  hwsm timed out                      */
 | 
						|
    u32    swsm_success;       /*  swsm success                        */
 | 
						|
    u32    swsm_wdtov;         /*  swsm timed out                      */
 | 
						|
    u32    error_resets;       /*  error resets initiated by upsm      */
 | 
						|
    u32    sync_lost;          /*  Sync loss count                     */
 | 
						|
    u32    sig_lost;           /*  Signal loss count                   */
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
struct bfa_fw_port_physm_stats_s {
 | 
						|
    u32    module_inserts;     /*  Module insert count                 */
 | 
						|
    u32    module_xtracts;     /*  Module extracts count               */
 | 
						|
    u32    module_invalids;    /*  Invalid module inserted count       */
 | 
						|
    u32    module_read_ign;    /*  Module validation status ignored    */
 | 
						|
    u32    laser_faults;       /*  Laser fault count                   */
 | 
						|
    u32    rsvd;
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
struct bfa_fw_fip_stats_s {
 | 
						|
    u32    disc_req;           /*  Discovery solicit requests          */
 | 
						|
    u32    disc_rsp;           /*  Discovery solicit response          */
 | 
						|
    u32    disc_err;           /*  Discovery advt. parse errors        */
 | 
						|
    u32    disc_unsol;         /*  Discovery unsolicited               */
 | 
						|
    u32    disc_timeouts;      /*  Discovery timeouts                  */
 | 
						|
    u32    linksvc_unsupp;     /*  Unsupported link service req        */
 | 
						|
    u32    linksvc_err;        /*  Parse error in link service req     */
 | 
						|
    u32    logo_req;           /*  Number of FIP logos received        */
 | 
						|
    u32    clrvlink_req;       /*  Clear virtual link req              */
 | 
						|
    u32    op_unsupp;          /*  Unsupported FIP operation           */
 | 
						|
    u32    untagged;           /*  Untagged frames (ignored)           */
 | 
						|
    u32    rsvd;
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
struct bfa_fw_lps_stats_s {
 | 
						|
    u32    mac_invalids;       /*  Invalid mac assigned                */
 | 
						|
    u32    rsvd;
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
struct bfa_fw_fcoe_stats_s {
 | 
						|
    u32    cee_linkups;        /*  CEE link up count                   */
 | 
						|
    u32    cee_linkdns;        /*  CEE link down count                 */
 | 
						|
    u32    fip_linkups;        /*  FIP link up count                   */
 | 
						|
    u32    fip_linkdns;        /*  FIP link up count                   */
 | 
						|
    u32    fip_fails;          /*  FIP fail count                      */
 | 
						|
    u32    mac_invalids;       /*  Invalid mac assigned                */
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * IOC firmware FCoE port stats
 | 
						|
 */
 | 
						|
struct bfa_fw_fcoe_port_stats_s {
 | 
						|
    struct bfa_fw_fcoe_stats_s  fcoe_stats;
 | 
						|
    struct bfa_fw_fip_stats_s   fip_stats;
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * IOC firmware FC port stats
 | 
						|
 */
 | 
						|
struct bfa_fw_fc_port_stats_s {
 | 
						|
	struct bfa_fw_port_fpg_stats_s		fpg_stats;
 | 
						|
	struct bfa_fw_port_physm_stats_s	physm_stats;
 | 
						|
	struct bfa_fw_port_snsm_stats_s		snsm_stats;
 | 
						|
	struct bfa_fw_port_lksm_stats_s		lksm_stats;
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * IOC firmware FC port stats
 | 
						|
 */
 | 
						|
union bfa_fw_port_stats_s {
 | 
						|
	struct bfa_fw_fc_port_stats_s	fc_stats;
 | 
						|
	struct bfa_fw_fcoe_port_stats_s	fcoe_stats;
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * IOC firmware stats
 | 
						|
 */
 | 
						|
struct bfa_fw_stats_s {
 | 
						|
	struct bfa_fw_ioc_stats_s	ioc_stats;
 | 
						|
	struct bfa_fw_io_stats_s	io_stats;
 | 
						|
	union  bfa_fw_port_stats_s	port_stats;
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * IOC statistics
 | 
						|
 */
 | 
						|
struct bfa_iocfc_stats_s {
 | 
						|
	struct bfa_fw_stats_s 	fw_stats;	/*  firmware IOC stats      */
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * IOC attributes returned in queries
 | 
						|
 */
 | 
						|
struct bfa_iocfc_attr_s {
 | 
						|
	struct bfa_iocfc_cfg_s		config;		/*  IOCFC config   */
 | 
						|
	struct bfa_iocfc_intr_attr_s	intr_attr;	/*  interrupt attr */
 | 
						|
};
 | 
						|
 | 
						|
#define BFA_IOCFC_PATHTOV_MAX	60
 | 
						|
#define BFA_IOCFC_QDEPTH_MAX	2000
 | 
						|
 | 
						|
#endif /* __BFA_DEFS_IOC_H__ */
 |