linux/drivers/net/ethernet/brocade/bna/bfi_enet.h
<<
>>
Prefs
   1/*
   2 * Linux network driver for Brocade Converged Network Adapter.
   3 *
   4 * This program is free software; you can redistribute it and/or modify it
   5 * under the terms of the GNU General Public License (GPL) Version 2 as
   6 * published by the Free Software Foundation
   7 *
   8 * This program is distributed in the hope that it will be useful, but
   9 * WITHOUT ANY WARRANTY; without even the implied warranty of
  10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  11 * General Public License for more details.
  12 */
  13/*
  14 * Copyright (c) 2005-2011 Brocade Communications Systems, Inc.
  15 * All rights reserved
  16 * www.brocade.com
  17 */
  18
  19/* BNA Hardware and Firmware Interface */
  20
  21/* Skipping statistics collection to avoid clutter.
  22 * Command is no longer needed:
  23 *      MTU
  24 *      TxQ Stop
  25 *      RxQ Stop
  26 *      RxF Enable/Disable
  27 *
  28 * HDS-off request is dynamic
  29 * keep structures as multiple of 32-bit fields for alignment.
  30 * All values must be written in big-endian.
  31 */
  32#ifndef __BFI_ENET_H__
  33#define __BFI_ENET_H__
  34
  35#include "bfa_defs.h"
  36#include "bfi.h"
  37
  38#pragma pack(1)
  39
  40#define BFI_ENET_CFG_MAX                32      /* Max resources per PF */
  41
  42#define BFI_ENET_TXQ_PRIO_MAX           8
  43#define BFI_ENET_RX_QSET_MAX            16
  44#define BFI_ENET_TXQ_WI_VECT_MAX        4
  45
  46#define BFI_ENET_VLAN_ID_MAX            4096
  47#define BFI_ENET_VLAN_BLOCK_SIZE        512     /* in bits */
  48#define BFI_ENET_VLAN_BLOCKS_MAX                                        \
  49        (BFI_ENET_VLAN_ID_MAX / BFI_ENET_VLAN_BLOCK_SIZE)
  50#define BFI_ENET_VLAN_WORD_SIZE         32      /* in bits */
  51#define BFI_ENET_VLAN_WORDS_MAX                                         \
  52        (BFI_ENET_VLAN_BLOCK_SIZE / BFI_ENET_VLAN_WORD_SIZE)
  53
  54#define BFI_ENET_RSS_RIT_MAX            64      /* entries */
  55#define BFI_ENET_RSS_KEY_LEN            10      /* 32-bit words */
  56
  57union bfi_addr_be_u {
  58        struct {
  59                u32     addr_hi;        /* Most Significant 32-bits */
  60                u32     addr_lo;        /* Least Significant 32-Bits */
  61        } a32;
  62};
  63
  64/*      T X   Q U E U E   D E F I N E S      */
  65/* TxQ Vector (a.k.a. Tx-Buffer Descriptor) */
  66/* TxQ Entry Opcodes */
  67#define BFI_ENET_TXQ_WI_SEND            (0x402) /* Single Frame Transmission */
  68#define BFI_ENET_TXQ_WI_SEND_LSO        (0x403) /* Multi-Frame Transmission */
  69#define BFI_ENET_TXQ_WI_EXTENSION       (0x104) /* Extension WI */
  70
  71/* TxQ Entry Control Flags */
  72#define BFI_ENET_TXQ_WI_CF_FCOE_CRC     (1 << 8)
  73#define BFI_ENET_TXQ_WI_CF_IPID_MODE    (1 << 5)
  74#define BFI_ENET_TXQ_WI_CF_INS_PRIO     (1 << 4)
  75#define BFI_ENET_TXQ_WI_CF_INS_VLAN     (1 << 3)
  76#define BFI_ENET_TXQ_WI_CF_UDP_CKSUM    (1 << 2)
  77#define BFI_ENET_TXQ_WI_CF_TCP_CKSUM    (1 << 1)
  78#define BFI_ENET_TXQ_WI_CF_IP_CKSUM     (1 << 0)
  79
  80struct bfi_enet_txq_wi_base {
  81        u8                      reserved;
  82        u8                      num_vectors;    /* number of vectors present */
  83        u16                     opcode;
  84                        /* BFI_ENET_TXQ_WI_SEND or BFI_ENET_TXQ_WI_SEND_LSO */
  85        u16                     flags;          /* OR of all the flags */
  86        u16                     l4_hdr_size_n_offset;
  87        u16                     vlan_tag;
  88        u16                     lso_mss;        /* Only 14 LSB are valid */
  89        u32                     frame_length;   /* Only 24 LSB are valid */
  90};
  91
  92struct bfi_enet_txq_wi_ext {
  93        u16                     reserved;
  94        u16                     opcode;         /* BFI_ENET_TXQ_WI_EXTENSION */
  95        u32                     reserved2[3];
  96};
  97
  98struct bfi_enet_txq_wi_vector {                 /* Tx Buffer Descriptor */
  99        u16                     reserved;
 100        u16                     length;         /* Only 14 LSB are valid */
 101        union bfi_addr_be_u     addr;
 102};
 103
 104/*  TxQ Entry Structure  */
 105struct bfi_enet_txq_entry {
 106        union {
 107                struct bfi_enet_txq_wi_base     base;
 108                struct bfi_enet_txq_wi_ext      ext;
 109        } wi;
 110        struct bfi_enet_txq_wi_vector vector[BFI_ENET_TXQ_WI_VECT_MAX];
 111};
 112
 113#define wi_hdr          wi.base
 114#define wi_ext_hdr      wi.ext
 115
 116#define BFI_ENET_TXQ_WI_L4_HDR_N_OFFSET(_hdr_size, _offset) \
 117                (((_hdr_size) << 10) | ((_offset) & 0x3FF))
 118
 119/*   R X   Q U E U E   D E F I N E S   */
 120struct bfi_enet_rxq_entry {
 121        union bfi_addr_be_u  rx_buffer;
 122};
 123
 124/*   R X   C O M P L E T I O N   Q U E U E   D E F I N E S   */
 125/* CQ Entry Flags */
 126#define BFI_ENET_CQ_EF_MAC_ERROR        (1 <<  0)
 127#define BFI_ENET_CQ_EF_FCS_ERROR        (1 <<  1)
 128#define BFI_ENET_CQ_EF_TOO_LONG         (1 <<  2)
 129#define BFI_ENET_CQ_EF_FC_CRC_OK        (1 <<  3)
 130
 131#define BFI_ENET_CQ_EF_RSVD1            (1 <<  4)
 132#define BFI_ENET_CQ_EF_L4_CKSUM_OK      (1 <<  5)
 133#define BFI_ENET_CQ_EF_L3_CKSUM_OK      (1 <<  6)
 134#define BFI_ENET_CQ_EF_HDS_HEADER       (1 <<  7)
 135
 136#define BFI_ENET_CQ_EF_UDP              (1 <<  8)
 137#define BFI_ENET_CQ_EF_TCP              (1 <<  9)
 138#define BFI_ENET_CQ_EF_IP_OPTIONS       (1 << 10)
 139#define BFI_ENET_CQ_EF_IPV6             (1 << 11)
 140
 141#define BFI_ENET_CQ_EF_IPV4             (1 << 12)
 142#define BFI_ENET_CQ_EF_VLAN             (1 << 13)
 143#define BFI_ENET_CQ_EF_RSS              (1 << 14)
 144#define BFI_ENET_CQ_EF_RSVD2            (1 << 15)
 145
 146#define BFI_ENET_CQ_EF_MCAST_MATCH      (1 << 16)
 147#define BFI_ENET_CQ_EF_MCAST            (1 << 17)
 148#define BFI_ENET_CQ_EF_BCAST            (1 << 18)
 149#define BFI_ENET_CQ_EF_REMOTE           (1 << 19)
 150
 151#define BFI_ENET_CQ_EF_LOCAL            (1 << 20)
 152
 153/* CQ Entry Structure */
 154struct bfi_enet_cq_entry {
 155        u32 flags;
 156        u16     vlan_tag;
 157        u16     length;
 158        u32     rss_hash;
 159        u8      valid;
 160        u8      reserved1;
 161        u8      reserved2;
 162        u8      rxq_id;
 163};
 164
 165/*   E N E T   C O N T R O L   P A T H   C O M M A N D S   */
 166struct bfi_enet_q {
 167        union bfi_addr_u        pg_tbl;
 168        union bfi_addr_u        first_entry;
 169        u16             pages;  /* # of pages */
 170        u16             page_sz;
 171};
 172
 173struct bfi_enet_txq {
 174        struct bfi_enet_q       q;
 175        u8                      priority;
 176        u8                      rsvd[3];
 177};
 178
 179struct bfi_enet_rxq {
 180        struct bfi_enet_q       q;
 181        u16             rx_buffer_size;
 182        u16             rsvd;
 183};
 184
 185struct bfi_enet_cq {
 186        struct bfi_enet_q       q;
 187};
 188
 189struct bfi_enet_ib_cfg {
 190        u8              int_pkt_dma;
 191        u8              int_enabled;
 192        u8              int_pkt_enabled;
 193        u8              continuous_coalescing;
 194        u8              msix;
 195        u8              rsvd[3];
 196        u32     coalescing_timeout;
 197        u32     inter_pkt_timeout;
 198        u8              inter_pkt_count;
 199        u8              rsvd1[3];
 200};
 201
 202struct bfi_enet_ib {
 203        union bfi_addr_u        index_addr;
 204        union {
 205                u16     msix_index;
 206                u16     intx_bitmask;
 207        } intr;
 208        u16             rsvd;
 209};
 210
 211/* ENET command messages */
 212enum bfi_enet_h2i_msgs {
 213        /* Rx Commands */
 214        BFI_ENET_H2I_RX_CFG_SET_REQ = 1,
 215        BFI_ENET_H2I_RX_CFG_CLR_REQ = 2,
 216
 217        BFI_ENET_H2I_RIT_CFG_REQ = 3,
 218        BFI_ENET_H2I_RSS_CFG_REQ = 4,
 219        BFI_ENET_H2I_RSS_ENABLE_REQ = 5,
 220        BFI_ENET_H2I_RX_PROMISCUOUS_REQ = 6,
 221        BFI_ENET_H2I_RX_DEFAULT_REQ = 7,
 222
 223        BFI_ENET_H2I_MAC_UCAST_SET_REQ = 8,
 224        BFI_ENET_H2I_MAC_UCAST_CLR_REQ = 9,
 225        BFI_ENET_H2I_MAC_UCAST_ADD_REQ = 10,
 226        BFI_ENET_H2I_MAC_UCAST_DEL_REQ = 11,
 227
 228        BFI_ENET_H2I_MAC_MCAST_ADD_REQ = 12,
 229        BFI_ENET_H2I_MAC_MCAST_DEL_REQ = 13,
 230        BFI_ENET_H2I_MAC_MCAST_FILTER_REQ = 14,
 231
 232        BFI_ENET_H2I_RX_VLAN_SET_REQ = 15,
 233        BFI_ENET_H2I_RX_VLAN_STRIP_ENABLE_REQ = 16,
 234
 235        /* Tx Commands */
 236        BFI_ENET_H2I_TX_CFG_SET_REQ = 17,
 237        BFI_ENET_H2I_TX_CFG_CLR_REQ = 18,
 238
 239        /* Port Commands */
 240        BFI_ENET_H2I_PORT_ADMIN_UP_REQ = 19,
 241        BFI_ENET_H2I_SET_PAUSE_REQ = 20,
 242        BFI_ENET_H2I_DIAG_LOOPBACK_REQ = 21,
 243
 244        /* Get Attributes Command */
 245        BFI_ENET_H2I_GET_ATTR_REQ = 22,
 246
 247        /*  Statistics Commands */
 248        BFI_ENET_H2I_STATS_GET_REQ = 23,
 249        BFI_ENET_H2I_STATS_CLR_REQ = 24,
 250
 251        BFI_ENET_H2I_WOL_MAGIC_REQ = 25,
 252        BFI_ENET_H2I_WOL_FRAME_REQ = 26,
 253
 254        BFI_ENET_H2I_MAX = 27,
 255};
 256
 257enum bfi_enet_i2h_msgs {
 258        /* Rx Responses */
 259        BFI_ENET_I2H_RX_CFG_SET_RSP =
 260                BFA_I2HM(BFI_ENET_H2I_RX_CFG_SET_REQ),
 261        BFI_ENET_I2H_RX_CFG_CLR_RSP =
 262                BFA_I2HM(BFI_ENET_H2I_RX_CFG_CLR_REQ),
 263
 264        BFI_ENET_I2H_RIT_CFG_RSP =
 265                BFA_I2HM(BFI_ENET_H2I_RIT_CFG_REQ),
 266        BFI_ENET_I2H_RSS_CFG_RSP =
 267                BFA_I2HM(BFI_ENET_H2I_RSS_CFG_REQ),
 268        BFI_ENET_I2H_RSS_ENABLE_RSP =
 269                BFA_I2HM(BFI_ENET_H2I_RSS_ENABLE_REQ),
 270        BFI_ENET_I2H_RX_PROMISCUOUS_RSP =
 271                BFA_I2HM(BFI_ENET_H2I_RX_PROMISCUOUS_REQ),
 272        BFI_ENET_I2H_RX_DEFAULT_RSP =
 273                BFA_I2HM(BFI_ENET_H2I_RX_DEFAULT_REQ),
 274
 275        BFI_ENET_I2H_MAC_UCAST_SET_RSP =
 276                BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_SET_REQ),
 277        BFI_ENET_I2H_MAC_UCAST_CLR_RSP =
 278                BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_CLR_REQ),
 279        BFI_ENET_I2H_MAC_UCAST_ADD_RSP =
 280                BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_ADD_REQ),
 281        BFI_ENET_I2H_MAC_UCAST_DEL_RSP =
 282                BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_DEL_REQ),
 283
 284        BFI_ENET_I2H_MAC_MCAST_ADD_RSP =
 285                BFA_I2HM(BFI_ENET_H2I_MAC_MCAST_ADD_REQ),
 286        BFI_ENET_I2H_MAC_MCAST_DEL_RSP =
 287                BFA_I2HM(BFI_ENET_H2I_MAC_MCAST_DEL_REQ),
 288        BFI_ENET_I2H_MAC_MCAST_FILTER_RSP =
 289                BFA_I2HM(BFI_ENET_H2I_MAC_MCAST_FILTER_REQ),
 290
 291        BFI_ENET_I2H_RX_VLAN_SET_RSP =
 292                BFA_I2HM(BFI_ENET_H2I_RX_VLAN_SET_REQ),
 293
 294        BFI_ENET_I2H_RX_VLAN_STRIP_ENABLE_RSP =
 295                BFA_I2HM(BFI_ENET_H2I_RX_VLAN_STRIP_ENABLE_REQ),
 296
 297        /* Tx Responses */
 298        BFI_ENET_I2H_TX_CFG_SET_RSP =
 299                BFA_I2HM(BFI_ENET_H2I_TX_CFG_SET_REQ),
 300        BFI_ENET_I2H_TX_CFG_CLR_RSP =
 301                BFA_I2HM(BFI_ENET_H2I_TX_CFG_CLR_REQ),
 302
 303        /* Port Responses */
 304        BFI_ENET_I2H_PORT_ADMIN_RSP =
 305                BFA_I2HM(BFI_ENET_H2I_PORT_ADMIN_UP_REQ),
 306
 307        BFI_ENET_I2H_SET_PAUSE_RSP =
 308                BFA_I2HM(BFI_ENET_H2I_SET_PAUSE_REQ),
 309        BFI_ENET_I2H_DIAG_LOOPBACK_RSP =
 310                BFA_I2HM(BFI_ENET_H2I_DIAG_LOOPBACK_REQ),
 311
 312        /*  Attributes Response */
 313        BFI_ENET_I2H_GET_ATTR_RSP =
 314                BFA_I2HM(BFI_ENET_H2I_GET_ATTR_REQ),
 315
 316        /* Statistics Responses */
 317        BFI_ENET_I2H_STATS_GET_RSP =
 318                BFA_I2HM(BFI_ENET_H2I_STATS_GET_REQ),
 319        BFI_ENET_I2H_STATS_CLR_RSP =
 320                BFA_I2HM(BFI_ENET_H2I_STATS_CLR_REQ),
 321
 322        BFI_ENET_I2H_WOL_MAGIC_RSP =
 323                BFA_I2HM(BFI_ENET_H2I_WOL_MAGIC_REQ),
 324        BFI_ENET_I2H_WOL_FRAME_RSP =
 325                BFA_I2HM(BFI_ENET_H2I_WOL_FRAME_REQ),
 326
 327        /* AENs */
 328        BFI_ENET_I2H_LINK_DOWN_AEN = BFA_I2HM(BFI_ENET_H2I_MAX),
 329        BFI_ENET_I2H_LINK_UP_AEN = BFA_I2HM(BFI_ENET_H2I_MAX + 1),
 330
 331        BFI_ENET_I2H_PORT_ENABLE_AEN = BFA_I2HM(BFI_ENET_H2I_MAX + 2),
 332        BFI_ENET_I2H_PORT_DISABLE_AEN = BFA_I2HM(BFI_ENET_H2I_MAX + 3),
 333
 334        BFI_ENET_I2H_BW_UPDATE_AEN = BFA_I2HM(BFI_ENET_H2I_MAX + 4),
 335};
 336
 337/* The following error codes can be returned by the enet commands */
 338enum bfi_enet_err {
 339        BFI_ENET_CMD_OK         = 0,
 340        BFI_ENET_CMD_FAIL       = 1,
 341        BFI_ENET_CMD_DUP_ENTRY  = 2,    /* !< Duplicate entry in CAM */
 342        BFI_ENET_CMD_CAM_FULL   = 3,    /* !< CAM is full */
 343        BFI_ENET_CMD_NOT_OWNER  = 4,    /* !< Not permitted, b'cos not owner */
 344        BFI_ENET_CMD_NOT_EXEC   = 5,    /* !< Was not sent to f/w at all */
 345        BFI_ENET_CMD_WAITING    = 6,    /* !< Waiting for completion */
 346        BFI_ENET_CMD_PORT_DISABLED = 7, /* !< port in disabled state */
 347};
 348
 349/* Generic Request
 350 *
 351 * bfi_enet_req is used by:
 352 *      BFI_ENET_H2I_RX_CFG_CLR_REQ
 353 *      BFI_ENET_H2I_TX_CFG_CLR_REQ
 354 */
 355struct bfi_enet_req {
 356        struct bfi_msgq_mhdr mh;
 357};
 358
 359/* Enable/Disable Request
 360 *
 361 * bfi_enet_enable_req is used by:
 362 *      BFI_ENET_H2I_RSS_ENABLE_REQ     (enet_id must be zero)
 363 *      BFI_ENET_H2I_RX_PROMISCUOUS_REQ (enet_id must be zero)
 364 *      BFI_ENET_H2I_RX_DEFAULT_REQ     (enet_id must be zero)
 365 *      BFI_ENET_H2I_RX_MAC_MCAST_FILTER_REQ
 366 *      BFI_ENET_H2I_PORT_ADMIN_UP_REQ  (enet_id must be zero)
 367 */
 368struct bfi_enet_enable_req {
 369        struct          bfi_msgq_mhdr mh;
 370        u8              enable;         /* 1 = enable;  0 = disable */
 371        u8              rsvd[3];
 372};
 373
 374/* Generic Response */
 375struct bfi_enet_rsp {
 376        struct bfi_msgq_mhdr mh;
 377        u8              error;          /*!< if error see cmd_offset */
 378        u8              rsvd;
 379        u16             cmd_offset;     /*!< offset to invalid parameter */
 380};
 381
 382/* GLOBAL CONFIGURATION */
 383
 384/* bfi_enet_attr_req is used by:
 385 *      BFI_ENET_H2I_GET_ATTR_REQ
 386 */
 387struct bfi_enet_attr_req {
 388        struct bfi_msgq_mhdr    mh;
 389};
 390
 391/* bfi_enet_attr_rsp is used by:
 392 *      BFI_ENET_I2H_GET_ATTR_RSP
 393 */
 394struct bfi_enet_attr_rsp {
 395        struct bfi_msgq_mhdr mh;
 396        u8              error;          /*!< if error see cmd_offset */
 397        u8              rsvd;
 398        u16             cmd_offset;     /*!< offset to invalid parameter */
 399        u32             max_cfg;
 400        u32             max_ucmac;
 401        u32             rit_size;
 402};
 403
 404/* Tx Configuration
 405 *
 406 * bfi_enet_tx_cfg is used by:
 407 *      BFI_ENET_H2I_TX_CFG_SET_REQ
 408 */
 409enum bfi_enet_tx_vlan_mode {
 410        BFI_ENET_TX_VLAN_NOP    = 0,
 411        BFI_ENET_TX_VLAN_INS    = 1,
 412        BFI_ENET_TX_VLAN_WI     = 2,
 413};
 414
 415struct bfi_enet_tx_cfg {
 416        u8              vlan_mode;      /*!< processing mode */
 417        u8              rsvd;
 418        u16             vlan_id;
 419        u8              admit_tagged_frame;
 420        u8              apply_vlan_filter;
 421        u8              add_to_vswitch;
 422        u8              rsvd1[1];
 423};
 424
 425struct bfi_enet_tx_cfg_req {
 426        struct bfi_msgq_mhdr mh;
 427        u8                      num_queues;     /* # of Tx Queues */
 428        u8                      rsvd[3];
 429
 430        struct {
 431                struct bfi_enet_txq     q;
 432                struct bfi_enet_ib      ib;
 433        } q_cfg[BFI_ENET_TXQ_PRIO_MAX];
 434
 435        struct bfi_enet_ib_cfg  ib_cfg;
 436
 437        struct bfi_enet_tx_cfg  tx_cfg;
 438};
 439
 440struct bfi_enet_tx_cfg_rsp {
 441        struct          bfi_msgq_mhdr mh;
 442        u8              error;
 443        u8              hw_id;          /* For debugging */
 444        u8              rsvd[2];
 445        struct {
 446                u32     q_dbell;        /* PCI base address offset */
 447                u32     i_dbell;        /* PCI base address offset */
 448                u8      hw_qid;         /* For debugging */
 449                u8      rsvd[3];
 450        } q_handles[BFI_ENET_TXQ_PRIO_MAX];
 451};
 452
 453/* Rx Configuration
 454 *
 455 * bfi_enet_rx_cfg is used by:
 456 *      BFI_ENET_H2I_RX_CFG_SET_REQ
 457 */
 458enum bfi_enet_rxq_type {
 459        BFI_ENET_RXQ_SINGLE             = 1,
 460        BFI_ENET_RXQ_LARGE_SMALL        = 2,
 461        BFI_ENET_RXQ_HDS                = 3,
 462        BFI_ENET_RXQ_HDS_OPT_BASED      = 4,
 463};
 464
 465enum bfi_enet_hds_type {
 466        BFI_ENET_HDS_FORCED     = 0x01,
 467        BFI_ENET_HDS_IPV6_UDP   = 0x02,
 468        BFI_ENET_HDS_IPV6_TCP   = 0x04,
 469        BFI_ENET_HDS_IPV4_TCP   = 0x08,
 470        BFI_ENET_HDS_IPV4_UDP   = 0x10,
 471};
 472
 473struct bfi_enet_rx_cfg {
 474        u8              rxq_type;
 475        u8              rsvd[3];
 476
 477        struct {
 478                u8                      max_header_size;
 479                u8                      force_offset;
 480                u8                      type;
 481                u8                      rsvd1;
 482        } hds;
 483
 484        u8              multi_buffer;
 485        u8              strip_vlan;
 486        u8              drop_untagged;
 487        u8              rsvd2;
 488};
 489
 490/*
 491 * Multicast frames are received on the ql of q-set index zero.
 492 * On the completion queue.  RxQ ID = even is for large/data buffer queues
 493 * and RxQ ID = odd is for small/header buffer queues.
 494 */
 495struct bfi_enet_rx_cfg_req {
 496        struct bfi_msgq_mhdr mh;
 497        u8                      num_queue_sets; /* # of Rx Queue Sets */
 498        u8                      rsvd[3];
 499
 500        struct {
 501                struct bfi_enet_rxq     ql;     /* large/data/single buffers */
 502                struct bfi_enet_rxq     qs;     /* small/header buffers */
 503                struct bfi_enet_cq      cq;
 504                struct bfi_enet_ib      ib;
 505        } q_cfg[BFI_ENET_RX_QSET_MAX];
 506
 507        struct bfi_enet_ib_cfg  ib_cfg;
 508
 509        struct bfi_enet_rx_cfg  rx_cfg;
 510};
 511
 512struct bfi_enet_rx_cfg_rsp {
 513        struct bfi_msgq_mhdr mh;
 514        u8              error;
 515        u8              hw_id;   /* For debugging */
 516        u8              rsvd[2];
 517        struct {
 518                u32     ql_dbell; /* PCI base address offset */
 519                u32     qs_dbell; /* PCI base address offset */
 520                u32     i_dbell;  /* PCI base address offset */
 521                u8              hw_lqid;  /* For debugging */
 522                u8              hw_sqid;  /* For debugging */
 523                u8              hw_cqid;  /* For debugging */
 524                u8              rsvd;
 525        } q_handles[BFI_ENET_RX_QSET_MAX];
 526};
 527
 528/* RIT
 529 *
 530 * bfi_enet_rit_req is used by:
 531 *      BFI_ENET_H2I_RIT_CFG_REQ
 532 */
 533struct bfi_enet_rit_req {
 534        struct  bfi_msgq_mhdr mh;
 535        u16     size;                   /* number of table-entries used */
 536        u8      rsvd[2];
 537        u8      table[BFI_ENET_RSS_RIT_MAX];
 538};
 539
 540/* RSS
 541 *
 542 * bfi_enet_rss_cfg_req is used by:
 543 *      BFI_ENET_H2I_RSS_CFG_REQ
 544 */
 545enum bfi_enet_rss_type {
 546        BFI_ENET_RSS_IPV6       = 0x01,
 547        BFI_ENET_RSS_IPV6_TCP   = 0x02,
 548        BFI_ENET_RSS_IPV4       = 0x04,
 549        BFI_ENET_RSS_IPV4_TCP   = 0x08
 550};
 551
 552struct bfi_enet_rss_cfg {
 553        u8      type;
 554        u8      mask;
 555        u8      rsvd[2];
 556        u32     key[BFI_ENET_RSS_KEY_LEN];
 557};
 558
 559struct bfi_enet_rss_cfg_req {
 560        struct bfi_msgq_mhdr    mh;
 561        struct bfi_enet_rss_cfg cfg;
 562};
 563
 564/* MAC Unicast
 565 *
 566 * bfi_enet_rx_vlan_req is used by:
 567 *      BFI_ENET_H2I_MAC_UCAST_SET_REQ
 568 *      BFI_ENET_H2I_MAC_UCAST_CLR_REQ
 569 *      BFI_ENET_H2I_MAC_UCAST_ADD_REQ
 570 *      BFI_ENET_H2I_MAC_UCAST_DEL_REQ
 571 */
 572struct bfi_enet_ucast_req {
 573        struct bfi_msgq_mhdr    mh;
 574        mac_t                   mac_addr;
 575        u8                      rsvd[2];
 576};
 577
 578/* MAC Unicast + VLAN */
 579struct bfi_enet_mac_n_vlan_req {
 580        struct bfi_msgq_mhdr    mh;
 581        u16                     vlan_id;
 582        mac_t                   mac_addr;
 583};
 584
 585/* MAC Multicast
 586 *
 587 * bfi_enet_mac_mfilter_add_req is used by:
 588 *      BFI_ENET_H2I_MAC_MCAST_ADD_REQ
 589 */
 590struct bfi_enet_mcast_add_req {
 591        struct bfi_msgq_mhdr    mh;
 592        mac_t                   mac_addr;
 593        u8                      rsvd[2];
 594};
 595
 596/* bfi_enet_mac_mfilter_add_rsp is used by:
 597 *      BFI_ENET_I2H_MAC_MCAST_ADD_RSP
 598 */
 599struct bfi_enet_mcast_add_rsp {
 600        struct bfi_msgq_mhdr    mh;
 601        u8                      error;
 602        u8                      rsvd;
 603        u16                     cmd_offset;
 604        u16                     handle;
 605        u8                      rsvd1[2];
 606};
 607
 608/* bfi_enet_mac_mfilter_del_req is used by:
 609 *      BFI_ENET_H2I_MAC_MCAST_DEL_REQ
 610 */
 611struct bfi_enet_mcast_del_req {
 612        struct bfi_msgq_mhdr    mh;
 613        u16                     handle;
 614        u8                      rsvd[2];
 615};
 616
 617/* VLAN
 618 *
 619 * bfi_enet_rx_vlan_req is used by:
 620 *      BFI_ENET_H2I_RX_VLAN_SET_REQ
 621 */
 622struct bfi_enet_rx_vlan_req {
 623        struct bfi_msgq_mhdr    mh;
 624        u8                      block_idx;
 625        u8                      rsvd[3];
 626        u32                     bit_mask[BFI_ENET_VLAN_WORDS_MAX];
 627};
 628
 629/* PAUSE
 630 *
 631 * bfi_enet_set_pause_req is used by:
 632 *      BFI_ENET_H2I_SET_PAUSE_REQ
 633 */
 634struct bfi_enet_set_pause_req {
 635        struct bfi_msgq_mhdr    mh;
 636        u8                      rsvd[2];
 637        u8                      tx_pause;       /* 1 = enable;  0 = disable */
 638        u8                      rx_pause;       /* 1 = enable;  0 = disable */
 639};
 640
 641/* DIAGNOSTICS
 642 *
 643 * bfi_enet_diag_lb_req is used by:
 644 *      BFI_ENET_H2I_DIAG_LOOPBACK
 645 */
 646struct bfi_enet_diag_lb_req {
 647        struct bfi_msgq_mhdr    mh;
 648        u8                      rsvd[2];
 649        u8                      mode;           /* cable or Serdes */
 650        u8                      enable;         /* 1 = enable;  0 = disable */
 651};
 652
 653/* enum for Loopback opmodes */
 654enum {
 655        BFI_ENET_DIAG_LB_OPMODE_EXT = 0,
 656        BFI_ENET_DIAG_LB_OPMODE_CBL = 1,
 657};
 658
 659/* STATISTICS
 660 *
 661 * bfi_enet_stats_req is used by:
 662 *    BFI_ENET_H2I_STATS_GET_REQ
 663 *    BFI_ENET_I2H_STATS_CLR_REQ
 664 */
 665struct bfi_enet_stats_req {
 666        struct bfi_msgq_mhdr    mh;
 667        u16                     stats_mask;
 668        u8                      rsvd[2];
 669        u32                     rx_enet_mask;
 670        u32                     tx_enet_mask;
 671        union bfi_addr_u        host_buffer;
 672};
 673
 674/* defines for "stats_mask" above. */
 675#define BFI_ENET_STATS_MAC    (1 << 0)    /* !< MAC Statistics */
 676#define BFI_ENET_STATS_BPC    (1 << 1)    /* !< Pause Stats from BPC */
 677#define BFI_ENET_STATS_RAD    (1 << 2)    /* !< Rx Admission Statistics */
 678#define BFI_ENET_STATS_RX_FC  (1 << 3)    /* !< Rx FC Stats from RxA */
 679#define BFI_ENET_STATS_TX_FC  (1 << 4)    /* !< Tx FC Stats from TxA */
 680
 681#define BFI_ENET_STATS_ALL    0x1f
 682
 683/* TxF Frame Statistics */
 684struct bfi_enet_stats_txf {
 685        u64 ucast_octets;
 686        u64 ucast;
 687        u64 ucast_vlan;
 688
 689        u64 mcast_octets;
 690        u64 mcast;
 691        u64 mcast_vlan;
 692
 693        u64 bcast_octets;
 694        u64 bcast;
 695        u64 bcast_vlan;
 696
 697        u64 errors;
 698        u64 filter_vlan;      /* frames filtered due to VLAN */
 699        u64 filter_mac_sa;    /* frames filtered due to SA check */
 700};
 701
 702/* RxF Frame Statistics */
 703struct bfi_enet_stats_rxf {
 704        u64 ucast_octets;
 705        u64 ucast;
 706        u64 ucast_vlan;
 707
 708        u64 mcast_octets;
 709        u64 mcast;
 710        u64 mcast_vlan;
 711
 712        u64 bcast_octets;
 713        u64 bcast;
 714        u64 bcast_vlan;
 715        u64 frame_drops;
 716};
 717
 718/* FC Tx Frame Statistics */
 719struct bfi_enet_stats_fc_tx {
 720        u64 txf_ucast_octets;
 721        u64 txf_ucast;
 722        u64 txf_ucast_vlan;
 723
 724        u64 txf_mcast_octets;
 725        u64 txf_mcast;
 726        u64 txf_mcast_vlan;
 727
 728        u64 txf_bcast_octets;
 729        u64 txf_bcast;
 730        u64 txf_bcast_vlan;
 731
 732        u64 txf_parity_errors;
 733        u64 txf_timeout;
 734        u64 txf_fid_parity_errors;
 735};
 736
 737/* FC Rx Frame Statistics */
 738struct bfi_enet_stats_fc_rx {
 739        u64 rxf_ucast_octets;
 740        u64 rxf_ucast;
 741        u64 rxf_ucast_vlan;
 742
 743        u64 rxf_mcast_octets;
 744        u64 rxf_mcast;
 745        u64 rxf_mcast_vlan;
 746
 747        u64 rxf_bcast_octets;
 748        u64 rxf_bcast;
 749        u64 rxf_bcast_vlan;
 750};
 751
 752/* RAD Frame Statistics */
 753struct bfi_enet_stats_rad {
 754        u64 rx_frames;
 755        u64 rx_octets;
 756        u64 rx_vlan_frames;
 757
 758        u64 rx_ucast;
 759        u64 rx_ucast_octets;
 760        u64 rx_ucast_vlan;
 761
 762        u64 rx_mcast;
 763        u64 rx_mcast_octets;
 764        u64 rx_mcast_vlan;
 765
 766        u64 rx_bcast;
 767        u64 rx_bcast_octets;
 768        u64 rx_bcast_vlan;
 769
 770        u64 rx_drops;
 771};
 772
 773/* BPC Tx Registers */
 774struct bfi_enet_stats_bpc {
 775        /* transmit stats */
 776        u64 tx_pause[8];
 777        u64 tx_zero_pause[8];   /*!< Pause cancellation */
 778        /*!<Pause initiation rather than retention */
 779        u64 tx_first_pause[8];
 780
 781        /* receive stats */
 782        u64 rx_pause[8];
 783        u64 rx_zero_pause[8];   /*!< Pause cancellation */
 784        /*!<Pause initiation rather than retention */
 785        u64 rx_first_pause[8];
 786};
 787
 788/* MAC Rx Statistics */
 789struct bfi_enet_stats_mac {
 790        u64 stats_clr_cnt;      /* times this stats cleared */
 791        u64 frame_64;           /* both rx and tx counter */
 792        u64 frame_65_127;               /* both rx and tx counter */
 793        u64 frame_128_255;              /* both rx and tx counter */
 794        u64 frame_256_511;              /* both rx and tx counter */
 795        u64 frame_512_1023;     /* both rx and tx counter */
 796        u64 frame_1024_1518;    /* both rx and tx counter */
 797        u64 frame_1519_1522;    /* both rx and tx counter */
 798
 799        /* receive stats */
 800        u64 rx_bytes;
 801        u64 rx_packets;
 802        u64 rx_fcs_error;
 803        u64 rx_multicast;
 804        u64 rx_broadcast;
 805        u64 rx_control_frames;
 806        u64 rx_pause;
 807        u64 rx_unknown_opcode;
 808        u64 rx_alignment_error;
 809        u64 rx_frame_length_error;
 810        u64 rx_code_error;
 811        u64 rx_carrier_sense_error;
 812        u64 rx_undersize;
 813        u64 rx_oversize;
 814        u64 rx_fragments;
 815        u64 rx_jabber;
 816        u64 rx_drop;
 817
 818        /* transmit stats */
 819        u64 tx_bytes;
 820        u64 tx_packets;
 821        u64 tx_multicast;
 822        u64 tx_broadcast;
 823        u64 tx_pause;
 824        u64 tx_deferral;
 825        u64 tx_excessive_deferral;
 826        u64 tx_single_collision;
 827        u64 tx_muliple_collision;
 828        u64 tx_late_collision;
 829        u64 tx_excessive_collision;
 830        u64 tx_total_collision;
 831        u64 tx_pause_honored;
 832        u64 tx_drop;
 833        u64 tx_jabber;
 834        u64 tx_fcs_error;
 835        u64 tx_control_frame;
 836        u64 tx_oversize;
 837        u64 tx_undersize;
 838        u64 tx_fragments;
 839};
 840
 841/* Complete statistics, DMAed from fw to host followed by
 842 * BFI_ENET_I2H_STATS_GET_RSP
 843 */
 844struct bfi_enet_stats {
 845        struct bfi_enet_stats_mac       mac_stats;
 846        struct bfi_enet_stats_bpc       bpc_stats;
 847        struct bfi_enet_stats_rad       rad_stats;
 848        struct bfi_enet_stats_rad       rlb_stats;
 849        struct bfi_enet_stats_fc_rx     fc_rx_stats;
 850        struct bfi_enet_stats_fc_tx     fc_tx_stats;
 851        struct bfi_enet_stats_rxf       rxf_stats[BFI_ENET_CFG_MAX];
 852        struct bfi_enet_stats_txf       txf_stats[BFI_ENET_CFG_MAX];
 853};
 854
 855#pragma pack()
 856
 857#endif  /* __BFI_ENET_H__ */
 858