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