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