linux/drivers/net/ethernet/brocade/bna/bfi_enet.h
<<
>>
Prefs
   1/*
   2 * Linux network driver for QLogic BR-series 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-2014 Brocade Communications Systems, Inc.
  15 * Copyright (c) 2014-2015 QLogic Corporation
  16 * All rights reserved
  17 * www.qlogic.com
  18 */
  19
  20/* BNA Hardware and Firmware Interface */
  21
  22/* Skipping statistics collection to avoid clutter.
  23 * Command is no longer needed:
  24 *      MTU
  25 *      TxQ Stop
  26 *      RxQ Stop
  27 *      RxF Enable/Disable
  28 *
  29 * HDS-off request is dynamic
  30 * keep structures as multiple of 32-bit fields for alignment.
  31 * All values must be written in big-endian.
  32 */
  33#ifndef __BFI_ENET_H__
  34#define __BFI_ENET_H__
  35
  36#include "bfa_defs.h"
  37#include "bfi.h"
  38
  39#define BFI_ENET_CFG_MAX                32      /* Max resources per PF */
  40
  41#define BFI_ENET_TXQ_PRIO_MAX           8
  42#define BFI_ENET_RX_QSET_MAX            16
  43#define BFI_ENET_TXQ_WI_VECT_MAX        4
  44
  45#define BFI_ENET_VLAN_ID_MAX            4096
  46#define BFI_ENET_VLAN_BLOCK_SIZE        512     /* in bits */
  47#define BFI_ENET_VLAN_BLOCKS_MAX                                        \
  48        (BFI_ENET_VLAN_ID_MAX / BFI_ENET_VLAN_BLOCK_SIZE)
  49#define BFI_ENET_VLAN_WORD_SIZE         32      /* in bits */
  50#define BFI_ENET_VLAN_WORDS_MAX                                         \
  51        (BFI_ENET_VLAN_BLOCK_SIZE / BFI_ENET_VLAN_WORD_SIZE)
  52
  53#define BFI_ENET_RSS_RIT_MAX            64      /* entries */
  54#define BFI_ENET_RSS_KEY_LEN            10      /* 32-bit words */
  55
  56union bfi_addr_be_u {
  57        struct {
  58                u32     addr_hi;        /* Most Significant 32-bits */
  59                u32     addr_lo;        /* Least Significant 32-Bits */
  60        } __packed a32;
  61} __packed;
  62
  63/*      T X   Q U E U E   D E F I N E S      */
  64/* TxQ Vector (a.k.a. Tx-Buffer Descriptor) */
  65/* TxQ Entry Opcodes */
  66#define BFI_ENET_TXQ_WI_SEND            (0x402) /* Single Frame Transmission */
  67#define BFI_ENET_TXQ_WI_SEND_LSO        (0x403) /* Multi-Frame Transmission */
  68#define BFI_ENET_TXQ_WI_EXTENSION       (0x104) /* Extension WI */
  69
  70/* TxQ Entry Control Flags */
  71#define BFI_ENET_TXQ_WI_CF_FCOE_CRC     BIT(8)
  72#define BFI_ENET_TXQ_WI_CF_IPID_MODE    BIT(5)
  73#define BFI_ENET_TXQ_WI_CF_INS_PRIO     BIT(4)
  74#define BFI_ENET_TXQ_WI_CF_INS_VLAN     BIT(3)
  75#define BFI_ENET_TXQ_WI_CF_UDP_CKSUM    BIT(2)
  76#define BFI_ENET_TXQ_WI_CF_TCP_CKSUM    BIT(1)
  77#define BFI_ENET_TXQ_WI_CF_IP_CKSUM     BIT(0)
  78
  79struct bfi_enet_txq_wi_base {
  80        u8                      reserved;
  81        u8                      num_vectors;    /* number of vectors present */
  82        u16                     opcode;
  83                        /* BFI_ENET_TXQ_WI_SEND or BFI_ENET_TXQ_WI_SEND_LSO */
  84        u16                     flags;          /* OR of all the flags */
  85        u16                     l4_hdr_size_n_offset;
  86        u16                     vlan_tag;
  87        u16                     lso_mss;        /* Only 14 LSB are valid */
  88        u32                     frame_length;   /* Only 24 LSB are valid */
  89} __packed;
  90
  91struct bfi_enet_txq_wi_ext {
  92        u16                     reserved;
  93        u16                     opcode;         /* BFI_ENET_TXQ_WI_EXTENSION */
  94        u32                     reserved2[3];
  95} __packed;
  96
  97struct bfi_enet_txq_wi_vector {                 /* Tx Buffer Descriptor */
  98        u16                     reserved;
  99        u16                     length;         /* Only 14 LSB are valid */
 100        union bfi_addr_be_u     addr;
 101} __packed;
 102
 103/*  TxQ Entry Structure  */
 104struct bfi_enet_txq_entry {
 105        union {
 106                struct bfi_enet_txq_wi_base     base;
 107                struct bfi_enet_txq_wi_ext      ext;
 108        } __packed wi;
 109        struct bfi_enet_txq_wi_vector vector[BFI_ENET_TXQ_WI_VECT_MAX];
 110} __packed;
 111
 112#define wi_hdr          wi.base
 113#define wi_ext_hdr      wi.ext
 114
 115#define BFI_ENET_TXQ_WI_L4_HDR_N_OFFSET(_hdr_size, _offset) \
 116                (((_hdr_size) << 10) | ((_offset) & 0x3FF))
 117
 118/*   R X   Q U E U E   D E F I N E S   */
 119struct bfi_enet_rxq_entry {
 120        union bfi_addr_be_u  rx_buffer;
 121} __packed;
 122
 123/*   R X   C O M P L E T I O N   Q U E U E   D E F I N E S   */
 124/* CQ Entry Flags */
 125#define BFI_ENET_CQ_EF_MAC_ERROR        BIT(0)
 126#define BFI_ENET_CQ_EF_FCS_ERROR        BIT(1)
 127#define BFI_ENET_CQ_EF_TOO_LONG         BIT(2)
 128#define BFI_ENET_CQ_EF_FC_CRC_OK        BIT(3)
 129
 130#define BFI_ENET_CQ_EF_RSVD1            BIT(4)
 131#define BFI_ENET_CQ_EF_L4_CKSUM_OK      BIT(5)
 132#define BFI_ENET_CQ_EF_L3_CKSUM_OK      BIT(6)
 133#define BFI_ENET_CQ_EF_HDS_HEADER       BIT(7)
 134
 135#define BFI_ENET_CQ_EF_UDP              BIT(8)
 136#define BFI_ENET_CQ_EF_TCP              BIT(9)
 137#define BFI_ENET_CQ_EF_IP_OPTIONS       BIT(10)
 138#define BFI_ENET_CQ_EF_IPV6             BIT(11)
 139
 140#define BFI_ENET_CQ_EF_IPV4             BIT(12)
 141#define BFI_ENET_CQ_EF_VLAN             BIT(13)
 142#define BFI_ENET_CQ_EF_RSS              BIT(14)
 143#define BFI_ENET_CQ_EF_RSVD2            BIT(15)
 144
 145#define BFI_ENET_CQ_EF_MCAST_MATCH      BIT(16)
 146#define BFI_ENET_CQ_EF_MCAST            BIT(17)
 147#define BFI_ENET_CQ_EF_BCAST            BIT(18)
 148#define BFI_ENET_CQ_EF_REMOTE           BIT(19)
 149
 150#define BFI_ENET_CQ_EF_LOCAL            BIT(20)
 151
 152/* CQ Entry Structure */
 153struct bfi_enet_cq_entry {
 154        u32 flags;
 155        u16     vlan_tag;
 156        u16     length;
 157        u32     rss_hash;
 158        u8      valid;
 159        u8      reserved1;
 160        u8      reserved2;
 161        u8      rxq_id;
 162} __packed;
 163
 164/*   E N E T   C O N T R O L   P A T H   C O M M A N D S   */
 165struct bfi_enet_q {
 166        union bfi_addr_u        pg_tbl;
 167        union bfi_addr_u        first_entry;
 168        u16             pages;  /* # of pages */
 169        u16             page_sz;
 170} __packed;
 171
 172struct bfi_enet_txq {
 173        struct bfi_enet_q       q;
 174        u8                      priority;
 175        u8                      rsvd[3];
 176} __packed;
 177
 178struct bfi_enet_rxq {
 179        struct bfi_enet_q       q;
 180        u16             rx_buffer_size;
 181        u16             rsvd;
 182} __packed;
 183
 184struct bfi_enet_cq {
 185        struct bfi_enet_q       q;
 186} __packed;
 187
 188struct bfi_enet_ib_cfg {
 189        u8              int_pkt_dma;
 190        u8              int_enabled;
 191        u8              int_pkt_enabled;
 192        u8              continuous_coalescing;
 193        u8              msix;
 194        u8              rsvd[3];
 195        u32     coalescing_timeout;
 196        u32     inter_pkt_timeout;
 197        u8              inter_pkt_count;
 198        u8              rsvd1[3];
 199} __packed;
 200
 201struct bfi_enet_ib {
 202        union bfi_addr_u        index_addr;
 203        union {
 204                u16     msix_index;
 205                u16     intx_bitmask;
 206        } __packed intr;
 207        u16             rsvd;
 208} __packed;
 209
 210/* ENET command messages */
 211enum bfi_enet_h2i_msgs {
 212        /* Rx Commands */
 213        BFI_ENET_H2I_RX_CFG_SET_REQ = 1,
 214        BFI_ENET_H2I_RX_CFG_CLR_REQ = 2,
 215
 216        BFI_ENET_H2I_RIT_CFG_REQ = 3,
 217        BFI_ENET_H2I_RSS_CFG_REQ = 4,
 218        BFI_ENET_H2I_RSS_ENABLE_REQ = 5,
 219        BFI_ENET_H2I_RX_PROMISCUOUS_REQ = 6,
 220        BFI_ENET_H2I_RX_DEFAULT_REQ = 7,
 221
 222        BFI_ENET_H2I_MAC_UCAST_SET_REQ = 8,
 223        BFI_ENET_H2I_MAC_UCAST_CLR_REQ = 9,
 224        BFI_ENET_H2I_MAC_UCAST_ADD_REQ = 10,
 225        BFI_ENET_H2I_MAC_UCAST_DEL_REQ = 11,
 226
 227        BFI_ENET_H2I_MAC_MCAST_ADD_REQ = 12,
 228        BFI_ENET_H2I_MAC_MCAST_DEL_REQ = 13,
 229        BFI_ENET_H2I_MAC_MCAST_FILTER_REQ = 14,
 230
 231        BFI_ENET_H2I_RX_VLAN_SET_REQ = 15,
 232        BFI_ENET_H2I_RX_VLAN_STRIP_ENABLE_REQ = 16,
 233
 234        /* Tx Commands */
 235        BFI_ENET_H2I_TX_CFG_SET_REQ = 17,
 236        BFI_ENET_H2I_TX_CFG_CLR_REQ = 18,
 237
 238        /* Port Commands */
 239        BFI_ENET_H2I_PORT_ADMIN_UP_REQ = 19,
 240        BFI_ENET_H2I_SET_PAUSE_REQ = 20,
 241        BFI_ENET_H2I_DIAG_LOOPBACK_REQ = 21,
 242
 243        /* Get Attributes Command */
 244        BFI_ENET_H2I_GET_ATTR_REQ = 22,
 245
 246        /*  Statistics Commands */
 247        BFI_ENET_H2I_STATS_GET_REQ = 23,
 248        BFI_ENET_H2I_STATS_CLR_REQ = 24,
 249
 250        BFI_ENET_H2I_WOL_MAGIC_REQ = 25,
 251        BFI_ENET_H2I_WOL_FRAME_REQ = 26,
 252
 253        BFI_ENET_H2I_MAX = 27,
 254};
 255
 256enum bfi_enet_i2h_msgs {
 257        /* Rx Responses */
 258        BFI_ENET_I2H_RX_CFG_SET_RSP =
 259                BFA_I2HM(BFI_ENET_H2I_RX_CFG_SET_REQ),
 260        BFI_ENET_I2H_RX_CFG_CLR_RSP =
 261                BFA_I2HM(BFI_ENET_H2I_RX_CFG_CLR_REQ),
 262
 263        BFI_ENET_I2H_RIT_CFG_RSP =
 264                BFA_I2HM(BFI_ENET_H2I_RIT_CFG_REQ),
 265        BFI_ENET_I2H_RSS_CFG_RSP =
 266                BFA_I2HM(BFI_ENET_H2I_RSS_CFG_REQ),
 267        BFI_ENET_I2H_RSS_ENABLE_RSP =
 268                BFA_I2HM(BFI_ENET_H2I_RSS_ENABLE_REQ),
 269        BFI_ENET_I2H_RX_PROMISCUOUS_RSP =
 270                BFA_I2HM(BFI_ENET_H2I_RX_PROMISCUOUS_REQ),
 271        BFI_ENET_I2H_RX_DEFAULT_RSP =
 272                BFA_I2HM(BFI_ENET_H2I_RX_DEFAULT_REQ),
 273
 274        BFI_ENET_I2H_MAC_UCAST_SET_RSP =
 275                BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_SET_REQ),
 276        BFI_ENET_I2H_MAC_UCAST_CLR_RSP =
 277                BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_CLR_REQ),
 278        BFI_ENET_I2H_MAC_UCAST_ADD_RSP =
 279                BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_ADD_REQ),
 280        BFI_ENET_I2H_MAC_UCAST_DEL_RSP =
 281                BFA_I2HM(BFI_ENET_H2I_MAC_UCAST_DEL_REQ),
 282
 283        BFI_ENET_I2H_MAC_MCAST_ADD_RSP =
 284                BFA_I2HM(BFI_ENET_H2I_MAC_MCAST_ADD_REQ),
 285        BFI_ENET_I2H_MAC_MCAST_DEL_RSP =
 286                BFA_I2HM(BFI_ENET_H2I_MAC_MCAST_DEL_REQ),
 287        BFI_ENET_I2H_MAC_MCAST_FILTER_RSP =
 288                BFA_I2HM(BFI_ENET_H2I_MAC_MCAST_FILTER_REQ),
 289
 290        BFI_ENET_I2H_RX_VLAN_SET_RSP =
 291                BFA_I2HM(BFI_ENET_H2I_RX_VLAN_SET_REQ),
 292
 293        BFI_ENET_I2H_RX_VLAN_STRIP_ENABLE_RSP =
 294                BFA_I2HM(BFI_ENET_H2I_RX_VLAN_STRIP_ENABLE_REQ),
 295
 296        /* Tx Responses */
 297        BFI_ENET_I2H_TX_CFG_SET_RSP =
 298                BFA_I2HM(BFI_ENET_H2I_TX_CFG_SET_REQ),
 299        BFI_ENET_I2H_TX_CFG_CLR_RSP =
 300                BFA_I2HM(BFI_ENET_H2I_TX_CFG_CLR_REQ),
 301
 302        /* Port Responses */
 303        BFI_ENET_I2H_PORT_ADMIN_RSP =
 304                BFA_I2HM(BFI_ENET_H2I_PORT_ADMIN_UP_REQ),
 305
 306        BFI_ENET_I2H_SET_PAUSE_RSP =
 307                BFA_I2HM(BFI_ENET_H2I_SET_PAUSE_REQ),
 308        BFI_ENET_I2H_DIAG_LOOPBACK_RSP =
 309                BFA_I2HM(BFI_ENET_H2I_DIAG_LOOPBACK_REQ),
 310
 311        /*  Attributes Response */
 312        BFI_ENET_I2H_GET_ATTR_RSP =
 313                BFA_I2HM(BFI_ENET_H2I_GET_ATTR_REQ),
 314
 315        /* Statistics Responses */
 316        BFI_ENET_I2H_STATS_GET_RSP =
 317                BFA_I2HM(BFI_ENET_H2I_STATS_GET_REQ),
 318        BFI_ENET_I2H_STATS_CLR_RSP =
 319                BFA_I2HM(BFI_ENET_H2I_STATS_CLR_REQ),
 320
 321        BFI_ENET_I2H_WOL_MAGIC_RSP =
 322                BFA_I2HM(BFI_ENET_H2I_WOL_MAGIC_REQ),
 323        BFI_ENET_I2H_WOL_FRAME_RSP =
 324                BFA_I2HM(BFI_ENET_H2I_WOL_FRAME_REQ),
 325
 326        /* AENs */
 327        BFI_ENET_I2H_LINK_DOWN_AEN = BFA_I2HM(BFI_ENET_H2I_MAX),
 328        BFI_ENET_I2H_LINK_UP_AEN = BFA_I2HM(BFI_ENET_H2I_MAX + 1),
 329
 330        BFI_ENET_I2H_PORT_ENABLE_AEN = BFA_I2HM(BFI_ENET_H2I_MAX + 2),
 331        BFI_ENET_I2H_PORT_DISABLE_AEN = BFA_I2HM(BFI_ENET_H2I_MAX + 3),
 332
 333        BFI_ENET_I2H_BW_UPDATE_AEN = BFA_I2HM(BFI_ENET_H2I_MAX + 4),
 334};
 335
 336/* The following error codes can be returned by the enet commands */
 337enum bfi_enet_err {
 338        BFI_ENET_CMD_OK         = 0,
 339        BFI_ENET_CMD_FAIL       = 1,
 340        BFI_ENET_CMD_DUP_ENTRY  = 2,    /* !< Duplicate entry in CAM */
 341        BFI_ENET_CMD_CAM_FULL   = 3,    /* !< CAM is full */
 342        BFI_ENET_CMD_NOT_OWNER  = 4,    /* !< Not permitted, b'cos not owner */
 343        BFI_ENET_CMD_NOT_EXEC   = 5,    /* !< Was not sent to f/w at all */
 344        BFI_ENET_CMD_WAITING    = 6,    /* !< Waiting for completion */
 345        BFI_ENET_CMD_PORT_DISABLED = 7, /* !< port in disabled state */
 346};
 347
 348/* Generic Request
 349 *
 350 * bfi_enet_req is used by:
 351 *      BFI_ENET_H2I_RX_CFG_CLR_REQ
 352 *      BFI_ENET_H2I_TX_CFG_CLR_REQ
 353 */
 354struct bfi_enet_req {
 355        struct bfi_msgq_mhdr mh;
 356} __packed;
 357
 358/* Enable/Disable Request
 359 *
 360 * bfi_enet_enable_req is used by:
 361 *      BFI_ENET_H2I_RSS_ENABLE_REQ     (enet_id must be zero)
 362 *      BFI_ENET_H2I_RX_PROMISCUOUS_REQ (enet_id must be zero)
 363 *      BFI_ENET_H2I_RX_DEFAULT_REQ     (enet_id must be zero)
 364 *      BFI_ENET_H2I_RX_MAC_MCAST_FILTER_REQ
 365 *      BFI_ENET_H2I_PORT_ADMIN_UP_REQ  (enet_id must be zero)
 366 */
 367struct bfi_enet_enable_req {
 368        struct          bfi_msgq_mhdr mh;
 369        u8              enable;         /* 1 = enable;  0 = disable */
 370        u8              rsvd[3];
 371} __packed;
 372
 373/* Generic Response */
 374struct bfi_enet_rsp {
 375        struct bfi_msgq_mhdr mh;
 376        u8              error;          /*!< if error see cmd_offset */
 377        u8              rsvd;
 378        u16             cmd_offset;     /*!< offset to invalid parameter */
 379} __packed;
 380
 381/* GLOBAL CONFIGURATION */
 382
 383/* bfi_enet_attr_req is used by:
 384 *      BFI_ENET_H2I_GET_ATTR_REQ
 385 */
 386struct bfi_enet_attr_req {
 387        struct bfi_msgq_mhdr    mh;
 388} __packed;
 389
 390/* bfi_enet_attr_rsp is used by:
 391 *      BFI_ENET_I2H_GET_ATTR_RSP
 392 */
 393struct bfi_enet_attr_rsp {
 394        struct bfi_msgq_mhdr mh;
 395        u8              error;          /*!< if error see cmd_offset */
 396        u8              rsvd;
 397        u16             cmd_offset;     /*!< offset to invalid parameter */
 398        u32             max_cfg;
 399        u32             max_ucmac;
 400        u32             rit_size;
 401} __packed;
 402
 403/* Tx Configuration
 404 *
 405 * bfi_enet_tx_cfg is used by:
 406 *      BFI_ENET_H2I_TX_CFG_SET_REQ
 407 */
 408enum bfi_enet_tx_vlan_mode {
 409        BFI_ENET_TX_VLAN_NOP    = 0,
 410        BFI_ENET_TX_VLAN_INS    = 1,
 411        BFI_ENET_TX_VLAN_WI     = 2,
 412};
 413
 414struct bfi_enet_tx_cfg {
 415        u8              vlan_mode;      /*!< processing mode */
 416        u8              rsvd;
 417        u16             vlan_id;
 418        u8              admit_tagged_frame;
 419        u8              apply_vlan_filter;
 420        u8              add_to_vswitch;
 421        u8              rsvd1[1];
 422} __packed;
 423
 424struct bfi_enet_tx_cfg_req {
 425        struct bfi_msgq_mhdr mh;
 426        u8                      num_queues;     /* # of Tx Queues */
 427        u8                      rsvd[3];
 428
 429        struct {
 430                struct bfi_enet_txq     q;
 431                struct bfi_enet_ib      ib;
 432        } __packed q_cfg[BFI_ENET_TXQ_PRIO_MAX];
 433
 434        struct bfi_enet_ib_cfg  ib_cfg;
 435
 436        struct bfi_enet_tx_cfg  tx_cfg;
 437};
 438
 439struct bfi_enet_tx_cfg_rsp {
 440        struct          bfi_msgq_mhdr mh;
 441        u8              error;
 442        u8              hw_id;          /* For debugging */
 443        u8              rsvd[2];
 444        struct {
 445                u32     q_dbell;        /* PCI base address offset */
 446                u32     i_dbell;        /* PCI base address offset */
 447                u8      hw_qid;         /* For debugging */
 448                u8      rsvd[3];
 449        } __packed q_handles[BFI_ENET_TXQ_PRIO_MAX];
 450};
 451
 452/* Rx Configuration
 453 *
 454 * bfi_enet_rx_cfg is used by:
 455 *      BFI_ENET_H2I_RX_CFG_SET_REQ
 456 */
 457enum bfi_enet_rxq_type {
 458        BFI_ENET_RXQ_SINGLE             = 1,
 459        BFI_ENET_RXQ_LARGE_SMALL        = 2,
 460        BFI_ENET_RXQ_HDS                = 3,
 461        BFI_ENET_RXQ_HDS_OPT_BASED      = 4,
 462};
 463
 464enum bfi_enet_hds_type {
 465        BFI_ENET_HDS_FORCED     = 0x01,
 466        BFI_ENET_HDS_IPV6_UDP   = 0x02,
 467        BFI_ENET_HDS_IPV6_TCP   = 0x04,
 468        BFI_ENET_HDS_IPV4_TCP   = 0x08,
 469        BFI_ENET_HDS_IPV4_UDP   = 0x10,
 470};
 471
 472struct bfi_enet_rx_cfg {
 473        u8              rxq_type;
 474        u8              rsvd[1];
 475        u16             frame_size;
 476
 477        struct {
 478                u8                      max_header_size;
 479                u8                      force_offset;
 480                u8                      type;
 481                u8                      rsvd1;
 482        } __packed hds;
 483
 484        u8              multi_buffer;
 485        u8              strip_vlan;
 486        u8              drop_untagged;
 487        u8              rsvd2;
 488} __packed;
 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        } __packed 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} __packed;
 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        } __packed q_handles[BFI_ENET_RX_QSET_MAX];
 526} __packed;
 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} __packed;
 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} __packed;
 558
 559struct bfi_enet_rss_cfg_req {
 560        struct bfi_msgq_mhdr    mh;
 561        struct bfi_enet_rss_cfg cfg;
 562} __packed;
 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        u8                      mac_addr[ETH_ALEN];
 575        u8                      rsvd[2];
 576} __packed;
 577
 578/* MAC Unicast + VLAN */
 579struct bfi_enet_mac_n_vlan_req {
 580        struct bfi_msgq_mhdr    mh;
 581        u16                     vlan_id;
 582        u8                      mac_addr[ETH_ALEN];
 583} __packed;
 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        u8                      mac_addr[ETH_ALEN];
 593        u8                      rsvd[2];
 594} __packed;
 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} __packed;
 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} __packed;
 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} __packed;
 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} __packed;
 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} __packed;
 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} __packed;
 673
 674/* defines for "stats_mask" above. */
 675#define BFI_ENET_STATS_MAC    BIT(0)    /* !< MAC Statistics */
 676#define BFI_ENET_STATS_BPC    BIT(1)    /* !< Pause Stats from BPC */
 677#define BFI_ENET_STATS_RAD    BIT(2)    /* !< Rx Admission Statistics */
 678#define BFI_ENET_STATS_RX_FC  BIT(3)    /* !< Rx FC Stats from RxA */
 679#define BFI_ENET_STATS_TX_FC  BIT(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} __packed;
 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} __packed;
 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} __packed;
 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} __packed;
 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} __packed;
 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} __packed;
 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} __packed;
 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} __packed;
 854
 855#endif  /* __BFI_ENET_H__ */
 856