1*4b1a56afSjsg /* $OpenBSD: if_ocereg.h,v 1.8 2022/01/09 05:42:54 jsg Exp $ */ 2b2b84680Smikeb 3b2b84680Smikeb /*- 4b2b84680Smikeb * Copyright (C) 2012 Emulex 5b2b84680Smikeb * All rights reserved. 6b2b84680Smikeb * 7b2b84680Smikeb * Redistribution and use in source and binary forms, with or without 8b2b84680Smikeb * modification, are permitted provided that the following conditions are met: 9b2b84680Smikeb * 10b2b84680Smikeb * 1. Redistributions of source code must retain the above copyright notice, 11b2b84680Smikeb * this list of conditions and the following disclaimer. 12b2b84680Smikeb * 13b2b84680Smikeb * 2. Redistributions in binary form must reproduce the above copyright 14b2b84680Smikeb * notice, this list of conditions and the following disclaimer in the 15b2b84680Smikeb * documentation and/or other materials provided with the distribution. 16b2b84680Smikeb * 17b2b84680Smikeb * 3. Neither the name of the Emulex Corporation nor the names of its 18b2b84680Smikeb * contributors may be used to endorse or promote products derived from 19b2b84680Smikeb * this software without specific prior written permission. 20b2b84680Smikeb * 21b2b84680Smikeb * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22b2b84680Smikeb * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23b2b84680Smikeb * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24b2b84680Smikeb * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 25b2b84680Smikeb * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26b2b84680Smikeb * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27b2b84680Smikeb * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28b2b84680Smikeb * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29b2b84680Smikeb * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30b2b84680Smikeb * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31b2b84680Smikeb * POSSIBILITY OF SUCH DAMAGE. 32b2b84680Smikeb * 33b2b84680Smikeb * Contact Information: 34b2b84680Smikeb * freebsd-drivers@emulex.com 35b2b84680Smikeb * 36b2b84680Smikeb * Emulex 37b2b84680Smikeb * 3333 Susan Street 38b2b84680Smikeb * Costa Mesa, CA 92626 39b2b84680Smikeb */ 40b2b84680Smikeb 41b2b84680Smikeb #define OCE_BAR_CFG 0x10 42b2b84680Smikeb #define OCE_BAR_CFG_BE2 0x14 43b2b84680Smikeb #define OCE_BAR_CSR 0x18 44b2b84680Smikeb #define OCE_BAR_DB 0x20 45b2b84680Smikeb 46ad7594eeSmikeb /* MPU semaphore */ 47ad7594eeSmikeb #define MPU_EP_SEM_BE 0x0ac 48ad7594eeSmikeb #define MPU_EP_SEM_XE201 0x400 49b2b84680Smikeb #define MPU_EP_SEMAPHORE(sc) \ 50ad7594eeSmikeb ((IS_BE(sc)) ? MPU_EP_SEM_BE : MPU_EP_SEM_XE201) 51b2b84680Smikeb #define MPU_EP_SEM_STAGE_MASK 0xffff 52b2b84680Smikeb #define MPU_EP_SEM_ERROR (1<<31) 53b2b84680Smikeb 54b2b84680Smikeb #define PCI_INTR_CTRL 0xfc 55b2b84680Smikeb #define HOSTINTR_MASK (1<<29) 56b2b84680Smikeb 57b2b84680Smikeb /* POST status reg struct */ 58b2b84680Smikeb #define POST_STAGE_POWER_ON_RESET 0x00 59b2b84680Smikeb #define POST_STAGE_AWAITING_HOST_RDY 0x01 60b2b84680Smikeb #define POST_STAGE_HOST_RDY 0x02 61b2b84680Smikeb #define POST_STAGE_CHIP_RESET 0x03 62b2b84680Smikeb #define POST_STAGE_ARMFW_READY 0xc000 63b2b84680Smikeb #define POST_STAGE_ARMFW_UE 0xf000 64b2b84680Smikeb 65b2b84680Smikeb /* DOORBELL registers */ 66b2b84680Smikeb #define PD_TXULP_DB 0x0060 67ad7594eeSmikeb #define PD_RXULP_DB 0x0100 68b2b84680Smikeb #define PD_CQ_DB 0x0120 69ad7594eeSmikeb #define PD_EQ_DB 0x0120 /* same as CQ */ 70b2b84680Smikeb #define PD_EQ_DB_EVENT (1<<10) 71b2b84680Smikeb #define PD_MQ_DB 0x0140 72ad7594eeSmikeb #define PD_MPU_MBOX_DB 0x0160 73b2b84680Smikeb 74b2b84680Smikeb /* Hardware Address types */ 75b2b84680Smikeb #define MAC_ADDRESS_TYPE_STORAGE 0x0 /* (Storage MAC Address) */ 76b2b84680Smikeb #define MAC_ADDRESS_TYPE_NETWORK 0x1 /* (Network MAC Address) */ 77b2b84680Smikeb #define MAC_ADDRESS_TYPE_PD 0x2 /* (Protection Domain MAC Addr) */ 78b2b84680Smikeb #define MAC_ADDRESS_TYPE_MANAGEMENT 0x3 /* (Management MAC Address) */ 79b2b84680Smikeb #define MAC_ADDRESS_TYPE_FCOE 0x4 /* (FCoE MAC Address) */ 80b2b84680Smikeb 81b2b84680Smikeb /* CREATE_IFACE capability and cap_en flags */ 82a8db2785Smikeb #define MBX_RX_IFACE_RSS 0x000004 83a8db2785Smikeb #define MBX_RX_IFACE_PROMISC 0x000008 84a8db2785Smikeb #define MBX_RX_IFACE_BROADCAST 0x000010 85a8db2785Smikeb #define MBX_RX_IFACE_UNTAGGED 0x000020 86a8db2785Smikeb #define MBX_RX_IFACE_VLAN_PROMISC 0x000080 87a8db2785Smikeb #define MBX_RX_IFACE_VLAN 0x000100 88a8db2785Smikeb #define MBX_RX_IFACE_MCAST_PROMISC 0x000200 89a8db2785Smikeb #define MBX_RX_IFACE_PASS_L2_ERR 0x000400 90a8db2785Smikeb #define MBX_RX_IFACE_PASS_L3L4_ERR 0x000800 91a8db2785Smikeb #define MBX_RX_IFACE_MCAST 0x001000 92a8db2785Smikeb #define MBX_RX_IFACE_MCAST_HASH 0x002000 93a8db2785Smikeb #define MBX_RX_IFACE_HDS 0x004000 94a8db2785Smikeb #define MBX_RX_IFACE_DIRECTED 0x008000 95a8db2785Smikeb #define MBX_RX_IFACE_VMQ 0x010000 96a8db2785Smikeb #define MBX_RX_IFACE_NETQ 0x020000 97a8db2785Smikeb #define MBX_RX_IFACE_QGROUPS 0x040000 98a8db2785Smikeb #define MBX_RX_IFACE_LSO 0x080000 99a8db2785Smikeb #define MBX_RX_IFACE_LRO 0x100000 100b2b84680Smikeb 101b2b84680Smikeb #define ASYNC_EVENT_CODE_LINK_STATE 0x1 102b2b84680Smikeb #define ASYNC_EVENT_LINK_UP 0x1 103b2b84680Smikeb #define ASYNC_EVENT_LINK_DOWN 0x0 104b2b84680Smikeb #define ASYNC_EVENT_GRP5 0x5 105b2b84680Smikeb #define ASYNC_EVENT_PVID_STATE 0x3 106b2b84680Smikeb #define VLAN_VID_MASK 0x0FFF 107b2b84680Smikeb 108b2b84680Smikeb /* port link_status */ 109b2b84680Smikeb #define ASYNC_EVENT_LOGICAL 0x02 110b2b84680Smikeb 111b2b84680Smikeb /* Logical Link Status */ 112b2b84680Smikeb #define NTWK_LOGICAL_LINK_DOWN 0 113b2b84680Smikeb #define NTWK_LOGICAL_LINK_UP 1 114b2b84680Smikeb 115b2b84680Smikeb /* max SGE per mbx */ 116b2b84680Smikeb #define MAX_MBX_SGE 19 117b2b84680Smikeb 118b2b84680Smikeb /* Max multicast filter size */ 119b2b84680Smikeb #define OCE_MAX_MC_FILTER_SIZE 32 120b2b84680Smikeb 121b2b84680Smikeb /* PCI SLI (Service Level Interface) capabilities register */ 122b2b84680Smikeb #define OCE_INTF_REG_OFFSET 0x58 123b2b84680Smikeb #define OCE_INTF_VALID_SIG 6 /* register's signature */ 124b2b84680Smikeb #define OCE_INTF_FUNC_RESET_REQD 1 125b2b84680Smikeb #define OCE_INTF_HINT1_NOHINT 0 126b2b84680Smikeb #define OCE_INTF_HINT1_SEMAINIT 1 127b2b84680Smikeb #define OCE_INTF_HINT1_STATCTRL 2 128b2b84680Smikeb #define OCE_INTF_IF_TYPE_0 0 129b2b84680Smikeb #define OCE_INTF_IF_TYPE_1 1 130b2b84680Smikeb #define OCE_INTF_IF_TYPE_2 2 131b2b84680Smikeb #define OCE_INTF_IF_TYPE_3 3 132b2b84680Smikeb #define OCE_INTF_SLI_REV3 3 /* not supported by driver */ 133b2b84680Smikeb #define OCE_INTF_SLI_REV4 4 /* driver supports SLI-4 */ 134b2b84680Smikeb #define OCE_INTF_PHYS_FUNC 0 135b2b84680Smikeb #define OCE_INTF_VIRT_FUNC 1 136b2b84680Smikeb #define OCE_INTF_FAMILY_BE2 0 /* not supported by driver */ 137b2b84680Smikeb #define OCE_INTF_FAMILY_BE3 1 /* driver supports BE3 */ 138b2b84680Smikeb #define OCE_INTF_FAMILY_A0_CHIP 0xA /* Lancer A0 chip (supported) */ 139b2b84680Smikeb #define OCE_INTF_FAMILY_B0_CHIP 0xB /* Lancer B0 chip (future) */ 140b2b84680Smikeb 141b2b84680Smikeb #define NIC_WQE_SIZE 16 142b2b84680Smikeb 143b2b84680Smikeb #define NIC_WQ_TYPE_FORWARDING 0x01 144b2b84680Smikeb #define NIC_WQ_TYPE_STANDARD 0x02 145b2b84680Smikeb #define NIC_WQ_TYPE_LOW_LATENCY 0x04 146b2b84680Smikeb 147b2b84680Smikeb #define OCE_TXP_SW_SZ 48 148b2b84680Smikeb 149b2b84680Smikeb #define OCE_SLI_FUNCTION(reg) ((reg) & 0x1) 150b2b84680Smikeb #define OCE_SLI_REVISION(reg) (((reg) >> 4) & 0xf) 151b2b84680Smikeb #define OCE_SLI_FAMILY(reg) (((reg) >> 8) & 0xf) 152b2b84680Smikeb #define OCE_SLI_IFTYPE(reg) (((reg) >> 12) & 0xf) 153b2b84680Smikeb #define OCE_SLI_HINT1(reg) (((reg) >> 16) & 0xff) 154b2b84680Smikeb #define OCE_SLI_HINT2(reg) (((reg) >> 24) & 0x1f) 155b2b84680Smikeb #define OCE_SLI_SIGNATURE(reg) (((reg) >> 29) & 0x7) 156b2b84680Smikeb 157b2b84680Smikeb #define PD_MPU_MBOX_DB_READY (1<<0) 158b2b84680Smikeb #define PD_MPU_MBOX_DB_HI (1<<1) 159b2b84680Smikeb #define PD_MPU_MBOX_DB_ADDR_SHIFT 2 160b2b84680Smikeb 1619ec9e807Smikeb struct oce_pa { 1629ec9e807Smikeb uint64_t addr; 163b2b84680Smikeb } __packed; 164b2b84680Smikeb 1659ec9e807Smikeb struct oce_sge { 1669ec9e807Smikeb uint64_t addr; 167b2b84680Smikeb uint32_t length; 168b2b84680Smikeb } __packed; 169b2b84680Smikeb 1709ec9e807Smikeb struct mbx_hdr { 1719ec9e807Smikeb uint8_t opcode; 1729ec9e807Smikeb uint8_t subsys; 1739ec9e807Smikeb uint8_t port; 1749ec9e807Smikeb uint8_t domain; 1759ec9e807Smikeb uint32_t timeout; 1769ec9e807Smikeb uint32_t length; 1779ec9e807Smikeb uint8_t version; 1789ec9e807Smikeb #define OCE_MBX_VER_V2 0x0002 1799ec9e807Smikeb #define OCE_MBX_VER_V1 0x0001 1809ec9e807Smikeb #define OCE_MBX_VER_V0 0x0000 1819ec9e807Smikeb uint8_t _rsvd[3]; 182b2b84680Smikeb } __packed; 183b2b84680Smikeb 1849ec9e807Smikeb /* payload can contain an SGL or an embedded array of upto 59 dwords */ 1859ec9e807Smikeb #define OCE_MBX_PAYLOAD (59 * 4) 186b2b84680Smikeb 1879ec9e807Smikeb struct oce_mbx { 1889ec9e807Smikeb uint32_t flags; 1899ec9e807Smikeb #define OCE_MBX_F_EMBED (1<<0) 1909ec9e807Smikeb #define OCE_MBX_F_SGE (1<<3) 191b2b84680Smikeb uint32_t payload_length; 192b2b84680Smikeb uint32_t tag[2]; 1939ec9e807Smikeb uint32_t _rsvd; 1949ec9e807Smikeb union { 1959ec9e807Smikeb struct oce_sge sgl[MAX_MBX_SGE]; 1969ec9e807Smikeb uint8_t data[OCE_MBX_PAYLOAD]; 1979ec9e807Smikeb } pld; 198b2b84680Smikeb } __packed; 199b2b84680Smikeb 200b2b84680Smikeb /* completion queue entry for MQ */ 201b2b84680Smikeb struct oce_mq_cqe { 202b2b84680Smikeb union { 203b2b84680Smikeb struct { 204b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 205b2b84680Smikeb /* dw0 */ 206b2b84680Smikeb uint32_t extended_status:16; 207b2b84680Smikeb uint32_t completion_status:16; 208b2b84680Smikeb /* dw1 dw2 */ 209b2b84680Smikeb uint32_t mq_tag[2]; 210b2b84680Smikeb /* dw3 */ 211b2b84680Smikeb uint32_t valid:1; 212b2b84680Smikeb uint32_t async_event:1; 213b2b84680Smikeb uint32_t hpi_buffer_cmpl:1; 214b2b84680Smikeb uint32_t completed:1; 215b2b84680Smikeb uint32_t consumed:1; 216b2b84680Smikeb uint32_t rsvd0:3; 217b2b84680Smikeb uint32_t async_type:8; 218b2b84680Smikeb uint32_t event_type:8; 219b2b84680Smikeb uint32_t rsvd1:8; 220b2b84680Smikeb #else 221b2b84680Smikeb /* dw0 */ 222b2b84680Smikeb uint32_t completion_status:16; 223b2b84680Smikeb uint32_t extended_status:16; 224b2b84680Smikeb /* dw1 dw2 */ 225b2b84680Smikeb uint32_t mq_tag[2]; 226b2b84680Smikeb /* dw3 */ 227b2b84680Smikeb uint32_t rsvd1:8; 228b2b84680Smikeb uint32_t event_type:8; 229b2b84680Smikeb uint32_t async_type:8; 230b2b84680Smikeb uint32_t rsvd0:3; 231b2b84680Smikeb uint32_t consumed:1; 232b2b84680Smikeb uint32_t completed:1; 233b2b84680Smikeb uint32_t hpi_buffer_cmpl:1; 234b2b84680Smikeb uint32_t async_event:1; 235b2b84680Smikeb uint32_t valid:1; 236b2b84680Smikeb #endif 237b2b84680Smikeb } s; 238b2b84680Smikeb uint32_t dw[4]; 239b2b84680Smikeb } u0; 240b2b84680Smikeb } __packed; 241b2b84680Smikeb 2427d5bbea0Smikeb #define MQ_CQE_VALID(_cqe) ((_cqe)->u0.dw[3]) 2437d5bbea0Smikeb #define MQ_CQE_INVALIDATE(_cqe) ((_cqe)->u0.dw[3] = 0) 2447d5bbea0Smikeb 245b2b84680Smikeb /* Mailbox Completion Status Codes */ 246b2b84680Smikeb enum MBX_COMPLETION_STATUS { 247b2b84680Smikeb MBX_CQE_STATUS_SUCCESS = 0x00, 248b2b84680Smikeb MBX_CQE_STATUS_INSUFFICIENT_PRIVILEDGES = 0x01, 249b2b84680Smikeb MBX_CQE_STATUS_INVALID_PARAMETER = 0x02, 250b2b84680Smikeb MBX_CQE_STATUS_INSUFFICIENT_RESOURCES = 0x03, 251b2b84680Smikeb MBX_CQE_STATUS_QUEUE_FLUSHING = 0x04, 252b2b84680Smikeb MBX_CQE_STATUS_DMA_FAILED = 0x05 253b2b84680Smikeb }; 254b2b84680Smikeb 255b2b84680Smikeb struct oce_async_cqe_link_state { 256b2b84680Smikeb union { 257b2b84680Smikeb struct { 258b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 259b2b84680Smikeb /* dw0 */ 260b2b84680Smikeb uint8_t speed; 261b2b84680Smikeb uint8_t duplex; 262b2b84680Smikeb uint8_t link_status; 263b2b84680Smikeb uint8_t phy_port; 264b2b84680Smikeb /* dw1 */ 265b2b84680Smikeb uint16_t qos_link_speed; 266b2b84680Smikeb uint8_t rsvd0; 267b2b84680Smikeb uint8_t fault; 268b2b84680Smikeb /* dw2 */ 269b2b84680Smikeb uint32_t event_tag; 270b2b84680Smikeb /* dw3 */ 271b2b84680Smikeb uint32_t valid:1; 272b2b84680Smikeb uint32_t async_event:1; 273b2b84680Smikeb uint32_t rsvd2:6; 274b2b84680Smikeb uint32_t event_type:8; 275b2b84680Smikeb uint32_t event_code:8; 276b2b84680Smikeb uint32_t rsvd1:8; 277b2b84680Smikeb #else 278b2b84680Smikeb /* dw0 */ 279b2b84680Smikeb uint8_t phy_port; 280b2b84680Smikeb uint8_t link_status; 281b2b84680Smikeb uint8_t duplex; 282b2b84680Smikeb uint8_t speed; 283b2b84680Smikeb /* dw1 */ 284b2b84680Smikeb uint8_t fault; 285b2b84680Smikeb uint8_t rsvd0; 286b2b84680Smikeb uint16_t qos_link_speed; 287b2b84680Smikeb /* dw2 */ 288b2b84680Smikeb uint32_t event_tag; 289b2b84680Smikeb /* dw3 */ 290b2b84680Smikeb uint32_t rsvd1:8; 291b2b84680Smikeb uint32_t event_code:8; 292b2b84680Smikeb uint32_t event_type:8; 293b2b84680Smikeb uint32_t rsvd2:6; 294b2b84680Smikeb uint32_t async_event:1; 295b2b84680Smikeb uint32_t valid:1; 296b2b84680Smikeb #endif 297b2b84680Smikeb } s; 298b2b84680Smikeb uint32_t dw[4]; 299b2b84680Smikeb } u0; 300b2b84680Smikeb } __packed; 301b2b84680Smikeb 302b2b84680Smikeb /* PVID aync event */ 303b2b84680Smikeb struct oce_async_event_grp5_pvid_state { 304b2b84680Smikeb uint8_t enabled; 305b2b84680Smikeb uint8_t rsvd0; 306b2b84680Smikeb uint16_t tag; 307b2b84680Smikeb uint32_t event_tag; 308b2b84680Smikeb uint32_t rsvd1; 309b2b84680Smikeb uint32_t code; 310b2b84680Smikeb } __packed; 311b2b84680Smikeb 312b2b84680Smikeb union oce_mq_ext_ctx { 313b2b84680Smikeb uint32_t dw[6]; 314b2b84680Smikeb struct { 315b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 316b2b84680Smikeb /* dw0 */ 317b2b84680Smikeb uint32_t dw4rsvd1:16; 318b2b84680Smikeb uint32_t num_pages:16; 319b2b84680Smikeb /* dw1 */ 320b2b84680Smikeb uint32_t async_evt_bitmap; 321b2b84680Smikeb /* dw2 */ 322b2b84680Smikeb uint32_t cq_id:10; 323b2b84680Smikeb uint32_t dw5rsvd2:2; 324b2b84680Smikeb uint32_t ring_size:4; 325b2b84680Smikeb uint32_t dw5rsvd1:16; 326b2b84680Smikeb /* dw3 */ 327b2b84680Smikeb uint32_t valid:1; 328b2b84680Smikeb uint32_t dw6rsvd1:31; 329b2b84680Smikeb /* dw4 */ 330b2b84680Smikeb uint32_t dw7rsvd1:21; 331b2b84680Smikeb uint32_t async_cq_id:10; 332b2b84680Smikeb uint32_t async_cq_valid:1; 333b2b84680Smikeb #else 334b2b84680Smikeb /* dw0 */ 335b2b84680Smikeb uint32_t num_pages:16; 336b2b84680Smikeb uint32_t dw4rsvd1:16; 337b2b84680Smikeb /* dw1 */ 338b2b84680Smikeb uint32_t async_evt_bitmap; 339b2b84680Smikeb /* dw2 */ 340b2b84680Smikeb uint32_t dw5rsvd1:16; 341b2b84680Smikeb uint32_t ring_size:4; 342b2b84680Smikeb uint32_t dw5rsvd2:2; 343b2b84680Smikeb uint32_t cq_id:10; 344b2b84680Smikeb /* dw3 */ 345b2b84680Smikeb uint32_t dw6rsvd1:31; 346b2b84680Smikeb uint32_t valid:1; 347b2b84680Smikeb /* dw4 */ 348b2b84680Smikeb uint32_t async_cq_valid:1; 349b2b84680Smikeb uint32_t async_cq_id:10; 350b2b84680Smikeb uint32_t dw7rsvd1:21; 351b2b84680Smikeb #endif 352b2b84680Smikeb /* dw5 */ 353b2b84680Smikeb uint32_t dw8rsvd1; 354b2b84680Smikeb } v0; 355b2b84680Smikeb } __packed; 356b2b84680Smikeb 357b2b84680Smikeb /* MQ mailbox structure */ 358b2b84680Smikeb struct oce_bmbx { 359b2b84680Smikeb struct oce_mbx mbx; 360b2b84680Smikeb struct oce_mq_cqe cqe; 361b2b84680Smikeb } __packed; 362b2b84680Smikeb 363b2b84680Smikeb /* MBXs sub system codes */ 364b2b84680Smikeb enum SUBSYS_CODES { 365b2b84680Smikeb SUBSYS_RSVD = 0, 366b2b84680Smikeb SUBSYS_COMMON = 1, 367b2b84680Smikeb SUBSYS_COMMON_ISCSI = 2, 368b2b84680Smikeb SUBSYS_NIC = 3, 369b2b84680Smikeb SUBSYS_TOE = 4, 370b2b84680Smikeb SUBSYS_PXE_UNDI = 5, 371b2b84680Smikeb SUBSYS_ISCSI_INI = 6, 372b2b84680Smikeb SUBSYS_ISCSI_TGT = 7, 373b2b84680Smikeb SUBSYS_MILI_PTL = 8, 374b2b84680Smikeb SUBSYS_MILI_TMD = 9, 375b2b84680Smikeb SUBSYS_RDMA = 10, 376b2b84680Smikeb SUBSYS_LOWLEVEL = 11, 377b2b84680Smikeb SUBSYS_LRO = 13, 378b2b84680Smikeb SUBSYS_DCBX = 15, 379b2b84680Smikeb SUBSYS_DIAG = 16, 380b2b84680Smikeb SUBSYS_VENDOR = 17 381b2b84680Smikeb }; 382b2b84680Smikeb 383b2b84680Smikeb /* common ioctl opcodes */ 384b2b84680Smikeb enum COMMON_SUBSYS_OPCODES { 385b2b84680Smikeb /* These opcodes are common to both networking and storage PCI functions 386b2b84680Smikeb * They are used to reserve resources and configure CNA. These opcodes 387b2b84680Smikeb * all use the SUBSYS_COMMON subsystem code. 388b2b84680Smikeb */ 389b2b84680Smikeb OPCODE_COMMON_QUERY_IFACE_MAC = 1, 390b2b84680Smikeb OPCODE_COMMON_SET_IFACE_MAC = 2, 391b2b84680Smikeb OPCODE_COMMON_SET_IFACE_MULTICAST = 3, 392b2b84680Smikeb OPCODE_COMMON_CONFIG_IFACE_VLAN = 4, 393b2b84680Smikeb OPCODE_COMMON_QUERY_LINK_CONFIG = 5, 394b2b84680Smikeb OPCODE_COMMON_READ_FLASHROM = 6, 395b2b84680Smikeb OPCODE_COMMON_WRITE_FLASHROM = 7, 396b2b84680Smikeb OPCODE_COMMON_QUERY_MAX_MBX_BUFFER_SIZE = 8, 397b2b84680Smikeb OPCODE_COMMON_CREATE_CQ = 12, 398b2b84680Smikeb OPCODE_COMMON_CREATE_EQ = 13, 399b2b84680Smikeb OPCODE_COMMON_CREATE_MQ = 21, 400b2b84680Smikeb OPCODE_COMMON_GET_QOS = 27, 401b2b84680Smikeb OPCODE_COMMON_SET_QOS = 28, 402b2b84680Smikeb OPCODE_COMMON_READ_EPROM = 30, 403b2b84680Smikeb OPCODE_COMMON_GET_CNTL_ATTRIBUTES = 32, 404b2b84680Smikeb OPCODE_COMMON_NOP = 33, 405b2b84680Smikeb OPCODE_COMMON_SET_IFACE_RX_FILTER = 34, 406b2b84680Smikeb OPCODE_COMMON_GET_FW_VERSION = 35, 407b2b84680Smikeb OPCODE_COMMON_SET_FLOW_CONTROL = 36, 408b2b84680Smikeb OPCODE_COMMON_GET_FLOW_CONTROL = 37, 409b2b84680Smikeb OPCODE_COMMON_SET_FRAME_SIZE = 39, 410b2b84680Smikeb OPCODE_COMMON_MODIFY_EQ_DELAY = 41, 411b2b84680Smikeb OPCODE_COMMON_CREATE_IFACE = 50, 412b2b84680Smikeb OPCODE_COMMON_DESTROY_IFACE = 51, 413b2b84680Smikeb OPCODE_COMMON_MODIFY_MSI_MESSAGES = 52, 414b2b84680Smikeb OPCODE_COMMON_DESTROY_MQ = 53, 415b2b84680Smikeb OPCODE_COMMON_DESTROY_CQ = 54, 416b2b84680Smikeb OPCODE_COMMON_DESTROY_EQ = 55, 417b2b84680Smikeb OPCODE_COMMON_UPLOAD_TCP = 56, 418b2b84680Smikeb OPCODE_COMMON_SET_NTWK_LINK_SPEED = 57, 419b2b84680Smikeb OPCODE_COMMON_QUERY_FIRMWARE_CONFIG = 58, 420b2b84680Smikeb OPCODE_COMMON_ADD_IFACE_MAC = 59, 421b2b84680Smikeb OPCODE_COMMON_DEL_IFACE_MAC = 60, 422b2b84680Smikeb OPCODE_COMMON_FUNCTION_RESET = 61, 423b2b84680Smikeb OPCODE_COMMON_SET_PHYSICAL_LINK_CONFIG = 62, 424b2b84680Smikeb OPCODE_COMMON_GET_BOOT_CONFIG = 66, 425b2b84680Smikeb OPCPDE_COMMON_SET_BOOT_CONFIG = 67, 426b2b84680Smikeb OPCODE_COMMON_SET_BEACON_CONFIG = 69, 427b2b84680Smikeb OPCODE_COMMON_GET_BEACON_CONFIG = 70, 428b2b84680Smikeb OPCODE_COMMON_GET_PHYSICAL_LINK_CONFIG = 71, 429b2b84680Smikeb OPCODE_COMMON_GET_OEM_ATTRIBUTES = 76, 430b2b84680Smikeb OPCODE_COMMON_GET_PORT_NAME = 77, 431b2b84680Smikeb OPCODE_COMMON_GET_CONFIG_SIGNATURE = 78, 432b2b84680Smikeb OPCODE_COMMON_SET_CONFIG_SIGNATURE = 79, 433b2b84680Smikeb OPCODE_COMMON_SET_LOGICAL_LINK_CONFIG = 80, 434b2b84680Smikeb OPCODE_COMMON_GET_BE_CONFIGURATION_RESOURCES = 81, 435b2b84680Smikeb OPCODE_COMMON_SET_BE_CONFIGURATION_RESOURCES = 82, 436b2b84680Smikeb OPCODE_COMMON_GET_RESET_NEEDED = 84, 437b2b84680Smikeb OPCODE_COMMON_GET_SERIAL_NUMBER = 85, 438b2b84680Smikeb OPCODE_COMMON_GET_NCSI_CONFIG = 86, 439b2b84680Smikeb OPCODE_COMMON_SET_NCSI_CONFIG = 87, 440b2b84680Smikeb OPCODE_COMMON_CREATE_MQ_EXT = 90, 441b2b84680Smikeb OPCODE_COMMON_SET_FUNCTION_PRIVILEGES = 100, 442b2b84680Smikeb OPCODE_COMMON_SET_VF_PORT_TYPE = 101, 443b2b84680Smikeb OPCODE_COMMON_GET_PHY_CONFIG = 102, 444b2b84680Smikeb OPCODE_COMMON_SET_FUNCTIONAL_CAPS = 103, 445b2b84680Smikeb OPCODE_COMMON_GET_ADAPTER_ID = 110, 446b2b84680Smikeb OPCODE_COMMON_GET_UPGRADE_FEATURES = 111, 447b2b84680Smikeb OPCODE_COMMON_GET_INSTALLED_FEATURES = 112, 448b2b84680Smikeb OPCODE_COMMON_GET_AVAIL_PERSONALITIES = 113, 449b2b84680Smikeb OPCODE_COMMON_GET_CONFIG_PERSONALITIES = 114, 450b2b84680Smikeb OPCODE_COMMON_SEND_ACTIVATION = 115, 451b2b84680Smikeb OPCODE_COMMON_RESET_LICENSES = 116, 452b2b84680Smikeb OPCODE_COMMON_GET_CNTL_ADDL_ATTRIBUTES = 121, 453b2b84680Smikeb OPCODE_COMMON_QUERY_TCB = 144, 454b2b84680Smikeb OPCODE_COMMON_ADD_IFACE_QUEUE_FILTER = 145, 455b2b84680Smikeb OPCODE_COMMON_DEL_IFACE_QUEUE_FILTER = 146, 456b2b84680Smikeb OPCODE_COMMON_GET_IFACE_MAC_LIST = 147, 457b2b84680Smikeb OPCODE_COMMON_SET_IFACE_MAC_LIST = 148, 458b2b84680Smikeb OPCODE_COMMON_MODIFY_CQ = 149, 459b2b84680Smikeb OPCODE_COMMON_GET_IFACE_VLAN_LIST = 150, 460b2b84680Smikeb OPCODE_COMMON_SET_IFACE_VLAN_LIST = 151, 461b2b84680Smikeb OPCODE_COMMON_GET_HSW_CONFIG = 152, 462b2b84680Smikeb OPCODE_COMMON_SET_HSW_CONFIG = 153, 463b2b84680Smikeb OPCODE_COMMON_GET_RESOURCE_EXTENT_INFO = 154, 464b2b84680Smikeb OPCODE_COMMON_GET_ALLOCATED_RESOURCE_EXTENTS = 155, 465b2b84680Smikeb OPCODE_COMMON_ALLOC_RESOURCE_EXTENTS = 156, 466b2b84680Smikeb OPCODE_COMMON_DEALLOC_RESOURCE_EXTENTS = 157, 467b2b84680Smikeb OPCODE_COMMON_SET_DIAG_REGISTERS = 158, 468b2b84680Smikeb OPCODE_COMMON_GET_FUNCTION_CONFIG = 160, 469b2b84680Smikeb OPCODE_COMMON_GET_PROFILE_CAPACITIES = 161, 470b2b84680Smikeb OPCODE_COMMON_GET_MR_PROFILE_CAPACITIES = 162, 471b2b84680Smikeb OPCODE_COMMON_SET_MR_PROFILE_CAPACITIES = 163, 472b2b84680Smikeb OPCODE_COMMON_GET_PROFILE_CONFIG = 164, 473b2b84680Smikeb OPCODE_COMMON_SET_PROFILE_CONFIG = 165, 474b2b84680Smikeb OPCODE_COMMON_GET_PROFILE_LIST = 166, 475b2b84680Smikeb OPCODE_COMMON_GET_ACTIVE_PROFILE = 167, 476b2b84680Smikeb OPCODE_COMMON_SET_ACTIVE_PROFILE = 168, 477b2b84680Smikeb OPCODE_COMMON_GET_FUNCTION_PRIVILEGES = 170, 478b2b84680Smikeb OPCODE_COMMON_READ_OBJECT = 171, 479b2b84680Smikeb OPCODE_COMMON_WRITE_OBJECT = 172 480b2b84680Smikeb }; 481b2b84680Smikeb 482b2b84680Smikeb /* [05] OPCODE_COMMON_QUERY_LINK_CONFIG */ 483b2b84680Smikeb struct mbx_query_common_link_config { 484b2b84680Smikeb struct mbx_hdr hdr; 485b2b84680Smikeb union { 486b2b84680Smikeb struct { 487b2b84680Smikeb uint32_t rsvd0; 488b2b84680Smikeb } req; 489b2b84680Smikeb 490b2b84680Smikeb struct { 491b2b84680Smikeb /* dw 0 */ 492b2b84680Smikeb uint8_t physical_port; 493b2b84680Smikeb uint8_t mac_duplex; 494b2b84680Smikeb uint8_t mac_speed; 495b2b84680Smikeb uint8_t mac_fault; 496b2b84680Smikeb /* dw 1 */ 497b2b84680Smikeb uint8_t mgmt_mac_duplex; 498b2b84680Smikeb uint8_t mgmt_mac_speed; 499b2b84680Smikeb uint16_t qos_link_speed; 500b2b84680Smikeb uint32_t logical_link_status; 501b2b84680Smikeb } rsp; 502b2b84680Smikeb } params; 503b2b84680Smikeb } __packed; 504b2b84680Smikeb 505b2b84680Smikeb /* [57] OPCODE_COMMON_SET_LINK_SPEED */ 506b2b84680Smikeb struct mbx_set_common_link_speed { 507b2b84680Smikeb struct mbx_hdr hdr; 508b2b84680Smikeb union { 509b2b84680Smikeb struct { 510b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 511b2b84680Smikeb uint8_t rsvd0; 512b2b84680Smikeb uint8_t mac_speed; 513b2b84680Smikeb uint8_t virtual_port; 514b2b84680Smikeb uint8_t physical_port; 515b2b84680Smikeb #else 516b2b84680Smikeb uint8_t physical_port; 517b2b84680Smikeb uint8_t virtual_port; 518b2b84680Smikeb uint8_t mac_speed; 519b2b84680Smikeb uint8_t rsvd0; 520b2b84680Smikeb #endif 521b2b84680Smikeb } req; 522b2b84680Smikeb 523b2b84680Smikeb struct { 524b2b84680Smikeb uint32_t rsvd0; 525b2b84680Smikeb } rsp; 526b2b84680Smikeb 527b2b84680Smikeb uint32_t dw; 528b2b84680Smikeb } params; 529b2b84680Smikeb } __packed; 530b2b84680Smikeb 531b2b84680Smikeb struct mac_address_format { 532b2b84680Smikeb uint16_t size_of_struct; 533b2b84680Smikeb uint8_t mac_addr[6]; 534b2b84680Smikeb } __packed; 535b2b84680Smikeb 536b2b84680Smikeb /* [01] OPCODE_COMMON_QUERY_IFACE_MAC */ 537b2b84680Smikeb struct mbx_query_common_iface_mac { 538b2b84680Smikeb struct mbx_hdr hdr; 539b2b84680Smikeb union { 540b2b84680Smikeb struct { 541b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 542b2b84680Smikeb uint16_t if_id; 543b2b84680Smikeb uint8_t permanent; 544b2b84680Smikeb uint8_t type; 545b2b84680Smikeb #else 546b2b84680Smikeb uint8_t type; 547b2b84680Smikeb uint8_t permanent; 548b2b84680Smikeb uint16_t if_id; 549b2b84680Smikeb #endif 550b2b84680Smikeb 551b2b84680Smikeb } req; 552b2b84680Smikeb 553b2b84680Smikeb struct { 554b2b84680Smikeb struct mac_address_format mac; 555b2b84680Smikeb } rsp; 556b2b84680Smikeb } params; 557b2b84680Smikeb } __packed; 558b2b84680Smikeb 559b2b84680Smikeb /* [02] OPCODE_COMMON_SET_IFACE_MAC */ 560b2b84680Smikeb struct mbx_set_common_iface_mac { 561b2b84680Smikeb struct mbx_hdr hdr; 562b2b84680Smikeb union { 563b2b84680Smikeb struct { 564b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 565b2b84680Smikeb /* dw 0 */ 566b2b84680Smikeb uint16_t if_id; 567b2b84680Smikeb uint8_t invalidate; 568b2b84680Smikeb uint8_t type; 569b2b84680Smikeb #else 570b2b84680Smikeb /* dw 0 */ 571b2b84680Smikeb uint8_t type; 572b2b84680Smikeb uint8_t invalidate; 573b2b84680Smikeb uint16_t if_id; 574b2b84680Smikeb #endif 575b2b84680Smikeb /* dw 1 */ 576b2b84680Smikeb struct mac_address_format mac; 577b2b84680Smikeb } req; 578b2b84680Smikeb 579b2b84680Smikeb struct { 580b2b84680Smikeb uint32_t rsvd0; 581b2b84680Smikeb } rsp; 582b2b84680Smikeb 583b2b84680Smikeb uint32_t dw[2]; 584b2b84680Smikeb } params; 585b2b84680Smikeb } __packed; 586b2b84680Smikeb 587b2b84680Smikeb /* [03] OPCODE_COMMON_SET_IFACE_MULTICAST */ 588b2b84680Smikeb struct mbx_set_common_iface_multicast { 589b2b84680Smikeb struct mbx_hdr hdr; 590b2b84680Smikeb union { 591b2b84680Smikeb struct { 592b2b84680Smikeb /* dw 0 */ 593b2b84680Smikeb uint16_t num_mac; 594b2b84680Smikeb uint8_t promiscuous; 595b2b84680Smikeb uint8_t if_id; 596b2b84680Smikeb /* dw 1-48 */ 597b2b84680Smikeb struct { 598b2b84680Smikeb uint8_t byte[6]; 599b2b84680Smikeb } mac[32]; 600b2b84680Smikeb 601b2b84680Smikeb } req; 602b2b84680Smikeb 603b2b84680Smikeb struct { 604b2b84680Smikeb uint32_t rsvd0; 605b2b84680Smikeb } rsp; 606b2b84680Smikeb 607b2b84680Smikeb uint32_t dw[49]; 608b2b84680Smikeb } params; 609b2b84680Smikeb } __packed; 610b2b84680Smikeb 611b2b84680Smikeb struct qinq_vlan { 612b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 613b2b84680Smikeb uint16_t inner; 614b2b84680Smikeb uint16_t outer; 615b2b84680Smikeb #else 616b2b84680Smikeb uint16_t outer; 617b2b84680Smikeb uint16_t inner; 618b2b84680Smikeb #endif 619b2b84680Smikeb } __packed; 620b2b84680Smikeb 621b2b84680Smikeb struct normal_vlan { 622b2b84680Smikeb uint16_t vtag; 623b2b84680Smikeb } __packed; 624b2b84680Smikeb 625b2b84680Smikeb struct ntwk_if_vlan_tag { 626b2b84680Smikeb union { 627b2b84680Smikeb struct normal_vlan normal; 628b2b84680Smikeb struct qinq_vlan qinq; 629b2b84680Smikeb } u0; 630b2b84680Smikeb } __packed; 631b2b84680Smikeb 632b2b84680Smikeb /* [50] OPCODE_COMMON_CREATE_IFACE */ 633b2b84680Smikeb struct mbx_create_common_iface { 634b2b84680Smikeb struct mbx_hdr hdr; 635b2b84680Smikeb union { 636b2b84680Smikeb struct { 637b2b84680Smikeb uint32_t version; 638b2b84680Smikeb uint32_t cap_flags; 639b2b84680Smikeb uint32_t enable_flags; 640b2b84680Smikeb uint8_t mac_addr[6]; 641b2b84680Smikeb uint8_t rsvd0; 642b2b84680Smikeb uint8_t mac_invalid; 643b2b84680Smikeb struct ntwk_if_vlan_tag vlan_tag; 644b2b84680Smikeb } req; 645b2b84680Smikeb 646b2b84680Smikeb struct { 647b2b84680Smikeb uint32_t if_id; 648b2b84680Smikeb uint32_t pmac_id; 649b2b84680Smikeb } rsp; 650b2b84680Smikeb uint32_t dw[4]; 651b2b84680Smikeb } params; 652b2b84680Smikeb } __packed; 653b2b84680Smikeb 654b2b84680Smikeb /* [51] OPCODE_COMMON_DESTROY_IFACE */ 655b2b84680Smikeb struct mbx_destroy_common_iface { 656b2b84680Smikeb struct mbx_hdr hdr; 657b2b84680Smikeb union { 658b2b84680Smikeb struct { 659b2b84680Smikeb uint32_t if_id; 660b2b84680Smikeb } req; 661b2b84680Smikeb 662b2b84680Smikeb struct { 663b2b84680Smikeb uint32_t rsvd0; 664b2b84680Smikeb } rsp; 665b2b84680Smikeb 666b2b84680Smikeb uint32_t dw; 667b2b84680Smikeb } params; 668b2b84680Smikeb } __packed; 669b2b84680Smikeb 6709ec9e807Smikeb /* 6719ec9e807Smikeb * Event Queue Entry 6729ec9e807Smikeb */ 6739ec9e807Smikeb struct oce_eqe { 6749ec9e807Smikeb uint32_t evnt; 6759ec9e807Smikeb } __packed; 6769ec9e807Smikeb 677b2b84680Smikeb /* event queue context structure */ 678b2b84680Smikeb struct oce_eq_ctx { 679b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 680b2b84680Smikeb uint32_t dw4rsvd1:16; 681b2b84680Smikeb uint32_t num_pages:16; 682b2b84680Smikeb 683b2b84680Smikeb uint32_t size:1; 684b2b84680Smikeb uint32_t dw5rsvd2:1; 685b2b84680Smikeb uint32_t valid:1; 686b2b84680Smikeb uint32_t dw5rsvd1:29; 687b2b84680Smikeb 688b2b84680Smikeb uint32_t armed:1; 689b2b84680Smikeb uint32_t dw6rsvd2:2; 690b2b84680Smikeb uint32_t count:3; 691b2b84680Smikeb uint32_t dw6rsvd1:26; 692b2b84680Smikeb 693b2b84680Smikeb uint32_t dw7rsvd2:9; 694b2b84680Smikeb uint32_t delay_mult:10; 695b2b84680Smikeb uint32_t dw7rsvd1:13; 696b2b84680Smikeb 697b2b84680Smikeb uint32_t dw8rsvd1; 698b2b84680Smikeb #else 699b2b84680Smikeb uint32_t num_pages:16; 700b2b84680Smikeb uint32_t dw4rsvd1:16; 701b2b84680Smikeb 702b2b84680Smikeb uint32_t dw5rsvd1:29; 703b2b84680Smikeb uint32_t valid:1; 704b2b84680Smikeb uint32_t dw5rsvd2:1; 705b2b84680Smikeb uint32_t size:1; 706b2b84680Smikeb 707b2b84680Smikeb uint32_t dw6rsvd1:26; 708b2b84680Smikeb uint32_t count:3; 709b2b84680Smikeb uint32_t dw6rsvd2:2; 710b2b84680Smikeb uint32_t armed:1; 711b2b84680Smikeb 712b2b84680Smikeb uint32_t dw7rsvd1:13; 713b2b84680Smikeb uint32_t delay_mult:10; 714b2b84680Smikeb uint32_t dw7rsvd2:9; 715b2b84680Smikeb 716b2b84680Smikeb uint32_t dw8rsvd1; 717b2b84680Smikeb #endif 718b2b84680Smikeb } __packed; 719b2b84680Smikeb 720b2b84680Smikeb /* [13] OPCODE_COMMON_CREATE_EQ */ 721b2b84680Smikeb struct mbx_create_common_eq { 722b2b84680Smikeb struct mbx_hdr hdr; 723b2b84680Smikeb union { 724b2b84680Smikeb struct { 725b2b84680Smikeb struct oce_eq_ctx ctx; 7269ec9e807Smikeb struct oce_pa pages[8]; 727b2b84680Smikeb } req; 728b2b84680Smikeb 729b2b84680Smikeb struct { 730b2b84680Smikeb uint16_t eq_id; 731b2b84680Smikeb uint16_t rsvd0; 732b2b84680Smikeb } rsp; 733b2b84680Smikeb } params; 734b2b84680Smikeb } __packed; 735b2b84680Smikeb 736b2b84680Smikeb /* [55] OPCODE_COMMON_DESTROY_EQ */ 737b2b84680Smikeb struct mbx_destroy_common_eq { 738b2b84680Smikeb struct mbx_hdr hdr; 739b2b84680Smikeb union { 740b2b84680Smikeb struct { 741b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 742b2b84680Smikeb uint16_t rsvd0; 743b2b84680Smikeb uint16_t id; 744b2b84680Smikeb #else 745b2b84680Smikeb uint16_t id; 746b2b84680Smikeb uint16_t rsvd0; 747b2b84680Smikeb #endif 748b2b84680Smikeb } req; 749b2b84680Smikeb 750b2b84680Smikeb struct { 751b2b84680Smikeb uint32_t rsvd0; 752b2b84680Smikeb } rsp; 753b2b84680Smikeb } params; 754b2b84680Smikeb } __packed; 755b2b84680Smikeb 756b2b84680Smikeb /* SLI-4 CQ context - use version V0 for B3, version V2 for Lancer */ 757b2b84680Smikeb union oce_cq_ctx { 758b2b84680Smikeb uint32_t dw[5]; 759b2b84680Smikeb struct { 760b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 761b2b84680Smikeb /* dw4 */ 762b2b84680Smikeb uint32_t dw4rsvd1:16; 763b2b84680Smikeb uint32_t num_pages:16; 764b2b84680Smikeb /* dw5 */ 765b2b84680Smikeb uint32_t eventable:1; 766b2b84680Smikeb uint32_t dw5rsvd3:1; 767b2b84680Smikeb uint32_t valid:1; 768b2b84680Smikeb uint32_t count:2; 769b2b84680Smikeb uint32_t dw5rsvd2:12; 770b2b84680Smikeb uint32_t nodelay:1; 771b2b84680Smikeb uint32_t coalesce_wm:2; 772b2b84680Smikeb uint32_t dw5rsvd1:12; 773b2b84680Smikeb /* dw6 */ 774b2b84680Smikeb uint32_t armed:1; 775b2b84680Smikeb uint32_t dw6rsvd2:1; 776b2b84680Smikeb uint32_t eq_id:8; 777b2b84680Smikeb uint32_t dw6rsvd1:22; 778b2b84680Smikeb #else 779b2b84680Smikeb /* dw4 */ 780b2b84680Smikeb uint32_t num_pages:16; 781b2b84680Smikeb uint32_t dw4rsvd1:16; 782b2b84680Smikeb /* dw5 */ 783b2b84680Smikeb uint32_t dw5rsvd1:12; 784b2b84680Smikeb uint32_t coalesce_wm:2; 785b2b84680Smikeb uint32_t nodelay:1; 786b2b84680Smikeb uint32_t dw5rsvd2:12; 787b2b84680Smikeb uint32_t count:2; 788b2b84680Smikeb uint32_t valid:1; 789b2b84680Smikeb uint32_t dw5rsvd3:1; 790b2b84680Smikeb uint32_t eventable:1; 791b2b84680Smikeb /* dw6 */ 792b2b84680Smikeb uint32_t dw6rsvd1:22; 793b2b84680Smikeb uint32_t eq_id:8; 794b2b84680Smikeb uint32_t dw6rsvd2:1; 795b2b84680Smikeb uint32_t armed:1; 796b2b84680Smikeb #endif 797b2b84680Smikeb /* dw7 */ 798b2b84680Smikeb uint32_t dw7rsvd1; 799b2b84680Smikeb /* dw8 */ 800b2b84680Smikeb uint32_t dw8rsvd1; 801b2b84680Smikeb } v0; 802b2b84680Smikeb struct { 803b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 804b2b84680Smikeb /* dw4 */ 805b2b84680Smikeb uint32_t dw4rsvd1:8; 806b2b84680Smikeb uint32_t page_size:8; 807b2b84680Smikeb uint32_t num_pages:16; 808b2b84680Smikeb /* dw5 */ 809b2b84680Smikeb uint32_t eventable:1; 810b2b84680Smikeb uint32_t dw5rsvd3:1; 811b2b84680Smikeb uint32_t valid:1; 812b2b84680Smikeb uint32_t count:2; 813b2b84680Smikeb uint32_t dw5rsvd2:11; 814b2b84680Smikeb uint32_t autovalid:1; 815b2b84680Smikeb uint32_t nodelay:1; 816b2b84680Smikeb uint32_t coalesce_wm:2; 817b2b84680Smikeb uint32_t dw5rsvd1:12; 818b2b84680Smikeb /* dw6 */ 819b2b84680Smikeb uint32_t armed:1; 820b2b84680Smikeb uint32_t dw6rsvd1:15; 821b2b84680Smikeb uint32_t eq_id:16; 822b2b84680Smikeb /* dw7 */ 823b2b84680Smikeb uint32_t dw7rsvd1:16; 824b2b84680Smikeb uint32_t cqe_count:16; 825b2b84680Smikeb #else 826b2b84680Smikeb /* dw4 */ 827b2b84680Smikeb uint32_t num_pages:16; 828b2b84680Smikeb uint32_t page_size:8; 829b2b84680Smikeb uint32_t dw4rsvd1:8; 830b2b84680Smikeb /* dw5 */ 831b2b84680Smikeb uint32_t dw5rsvd1:12; 832b2b84680Smikeb uint32_t coalesce_wm:2; 833b2b84680Smikeb uint32_t nodelay:1; 834b2b84680Smikeb uint32_t autovalid:1; 835b2b84680Smikeb uint32_t dw5rsvd2:11; 836b2b84680Smikeb uint32_t count:2; 837b2b84680Smikeb uint32_t valid:1; 838b2b84680Smikeb uint32_t dw5rsvd3:1; 839b2b84680Smikeb uint32_t eventable:1; 840b2b84680Smikeb /* dw6 */ 841b2b84680Smikeb uint32_t eq_id:8; 842b2b84680Smikeb uint32_t dw6rsvd1:15; 843b2b84680Smikeb uint32_t armed:1; 844b2b84680Smikeb /* dw7 */ 845b2b84680Smikeb uint32_t cqe_count:16; 846b2b84680Smikeb uint32_t dw7rsvd1:16; 847b2b84680Smikeb #endif 848b2b84680Smikeb /* dw8 */ 849b2b84680Smikeb uint32_t dw8rsvd1; 850b2b84680Smikeb } v2; 851b2b84680Smikeb } __packed; 852b2b84680Smikeb 853b2b84680Smikeb /* [12] OPCODE_COMMON_CREATE_CQ */ 854b2b84680Smikeb struct mbx_create_common_cq { 855b2b84680Smikeb struct mbx_hdr hdr; 856b2b84680Smikeb union { 857b2b84680Smikeb struct { 858b2b84680Smikeb union oce_cq_ctx cq_ctx; 8599ec9e807Smikeb struct oce_pa pages[4]; 860b2b84680Smikeb } req; 861b2b84680Smikeb 862b2b84680Smikeb struct { 863b2b84680Smikeb uint16_t cq_id; 864b2b84680Smikeb uint16_t rsvd0; 865b2b84680Smikeb } rsp; 866b2b84680Smikeb } params; 867b2b84680Smikeb } __packed; 868b2b84680Smikeb 869b2b84680Smikeb /* [54] OPCODE_COMMON_DESTROY_CQ */ 870b2b84680Smikeb struct mbx_destroy_common_cq { 871b2b84680Smikeb struct mbx_hdr hdr; 872b2b84680Smikeb union { 873b2b84680Smikeb struct { 874b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 875b2b84680Smikeb uint16_t rsvd0; 876b2b84680Smikeb uint16_t id; 877b2b84680Smikeb #else 878b2b84680Smikeb uint16_t id; 879b2b84680Smikeb uint16_t rsvd0; 880b2b84680Smikeb #endif 881b2b84680Smikeb } req; 882b2b84680Smikeb 883b2b84680Smikeb struct { 884b2b84680Smikeb uint32_t rsvd0; 885b2b84680Smikeb } rsp; 886b2b84680Smikeb } params; 887b2b84680Smikeb } __packed; 888b2b84680Smikeb 889b2b84680Smikeb union oce_mq_ctx { 890b2b84680Smikeb uint32_t dw[5]; 891b2b84680Smikeb struct { 892b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 893b2b84680Smikeb /* dw4 */ 894b2b84680Smikeb uint32_t dw4rsvd1:16; 895b2b84680Smikeb uint32_t num_pages:16; 896b2b84680Smikeb /* dw5 */ 897b2b84680Smikeb uint32_t cq_id:10; 898b2b84680Smikeb uint32_t dw5rsvd2:2; 899b2b84680Smikeb uint32_t ring_size:4; 900b2b84680Smikeb uint32_t dw5rsvd1:16; 901b2b84680Smikeb /* dw6 */ 902b2b84680Smikeb uint32_t valid:1; 903b2b84680Smikeb uint32_t dw6rsvd1:31; 904b2b84680Smikeb /* dw7 */ 905b2b84680Smikeb uint32_t dw7rsvd1:21; 906b2b84680Smikeb uint32_t async_cq_id:10; 907b2b84680Smikeb uint32_t async_cq_valid:1; 908b2b84680Smikeb #else 909b2b84680Smikeb /* dw4 */ 910b2b84680Smikeb uint32_t num_pages:16; 911b2b84680Smikeb uint32_t dw4rsvd1:16; 912b2b84680Smikeb /* dw5 */ 913b2b84680Smikeb uint32_t dw5rsvd1:16; 914b2b84680Smikeb uint32_t ring_size:4; 915b2b84680Smikeb uint32_t dw5rsvd2:2; 916b2b84680Smikeb uint32_t cq_id:10; 917b2b84680Smikeb /* dw6 */ 918b2b84680Smikeb uint32_t dw6rsvd1:31; 919b2b84680Smikeb uint32_t valid:1; 920b2b84680Smikeb /* dw7 */ 921b2b84680Smikeb uint32_t async_cq_valid:1; 922b2b84680Smikeb uint32_t async_cq_id:10; 923b2b84680Smikeb uint32_t dw7rsvd1:21; 924b2b84680Smikeb #endif 925b2b84680Smikeb /* dw8 */ 926b2b84680Smikeb uint32_t dw8rsvd1; 927b2b84680Smikeb } v0; 928b2b84680Smikeb } __packed; 929b2b84680Smikeb 930b2b84680Smikeb /** 931b2b84680Smikeb * @brief [21] OPCODE_COMMON_CREATE_MQ 932b2b84680Smikeb * A MQ must be at least 16 entries deep (corresponding to 1 page) and 933b2b84680Smikeb * at most 128 entries deep (corresponding to 8 pages). 934b2b84680Smikeb */ 935b2b84680Smikeb struct mbx_create_common_mq { 936b2b84680Smikeb struct mbx_hdr hdr; 937b2b84680Smikeb union { 938b2b84680Smikeb struct { 939b2b84680Smikeb union oce_mq_ctx context; 9409ec9e807Smikeb struct oce_pa pages[8]; 941b2b84680Smikeb } req; 942b2b84680Smikeb 943b2b84680Smikeb struct { 944b2b84680Smikeb uint32_t mq_id:16; 945b2b84680Smikeb uint32_t rsvd0:16; 946b2b84680Smikeb } rsp; 947b2b84680Smikeb } params; 948b2b84680Smikeb } __packed; 949b2b84680Smikeb 950b2b84680Smikeb struct mbx_create_common_mq_ex { 951b2b84680Smikeb struct mbx_hdr hdr; 952b2b84680Smikeb union { 953b2b84680Smikeb struct { 954b2b84680Smikeb union oce_mq_ext_ctx context; 9559ec9e807Smikeb struct oce_pa pages[8]; 956b2b84680Smikeb } req; 957b2b84680Smikeb 958b2b84680Smikeb struct { 959b2b84680Smikeb uint32_t mq_id:16; 960b2b84680Smikeb uint32_t rsvd0:16; 961b2b84680Smikeb } rsp; 962b2b84680Smikeb } params; 963b2b84680Smikeb } __packed; 964b2b84680Smikeb 965b2b84680Smikeb /* [53] OPCODE_COMMON_DESTROY_MQ */ 966b2b84680Smikeb struct mbx_destroy_common_mq { 967b2b84680Smikeb struct mbx_hdr hdr; 968b2b84680Smikeb union { 969b2b84680Smikeb struct { 970b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 971b2b84680Smikeb uint16_t rsvd0; 972b2b84680Smikeb uint16_t id; 973b2b84680Smikeb #else 974b2b84680Smikeb uint16_t id; 975b2b84680Smikeb uint16_t rsvd0; 976b2b84680Smikeb #endif 977b2b84680Smikeb } req; 978b2b84680Smikeb 979b2b84680Smikeb struct { 980b2b84680Smikeb uint32_t rsvd0; 981b2b84680Smikeb } rsp; 982b2b84680Smikeb } params; 983b2b84680Smikeb } __packed; 984b2b84680Smikeb 985b2b84680Smikeb /* [35] OPCODE_COMMON_GET_ FW_VERSION */ 986b2b84680Smikeb struct mbx_get_common_fw_version { 987b2b84680Smikeb struct mbx_hdr hdr; 988b2b84680Smikeb union { 989b2b84680Smikeb struct { 990b2b84680Smikeb uint32_t rsvd0; 991b2b84680Smikeb } req; 992b2b84680Smikeb 993b2b84680Smikeb struct { 994b2b84680Smikeb uint8_t fw_ver_str[32]; 995b2b84680Smikeb uint8_t fw_on_flash_ver_str[32]; 996b2b84680Smikeb } rsp; 997b2b84680Smikeb } params; 998b2b84680Smikeb } __packed; 999b2b84680Smikeb 1000b2b84680Smikeb /* [52] OPCODE_COMMON_CEV_MODIFY_MSI_MESSAGES */ 1001b2b84680Smikeb struct mbx_common_cev_modify_msi_messages { 1002b2b84680Smikeb struct mbx_hdr hdr; 1003b2b84680Smikeb union { 1004b2b84680Smikeb struct { 1005b2b84680Smikeb uint32_t num_msi_msgs; 1006b2b84680Smikeb } req; 1007b2b84680Smikeb 1008b2b84680Smikeb struct { 1009b2b84680Smikeb uint32_t rsvd0; 1010b2b84680Smikeb } rsp; 1011b2b84680Smikeb } params; 1012b2b84680Smikeb } __packed; 1013b2b84680Smikeb 1014b2b84680Smikeb /* [36] OPCODE_COMMON_SET_FLOW_CONTROL */ 1015b2b84680Smikeb /* [37] OPCODE_COMMON_GET_FLOW_CONTROL */ 1016b2b84680Smikeb struct mbx_common_get_set_flow_control { 1017b2b84680Smikeb struct mbx_hdr hdr; 1018b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 1019b2b84680Smikeb uint16_t tx_flow_control; 1020b2b84680Smikeb uint16_t rx_flow_control; 1021b2b84680Smikeb #else 1022b2b84680Smikeb uint16_t rx_flow_control; 1023b2b84680Smikeb uint16_t tx_flow_control; 1024b2b84680Smikeb #endif 1025b2b84680Smikeb } __packed; 1026b2b84680Smikeb 1027b2b84680Smikeb struct oce_phy_info { 1028b2b84680Smikeb uint16_t phy_type; 1029b2b84680Smikeb uint16_t interface_type; 1030b2b84680Smikeb uint32_t misc_params; 1031b2b84680Smikeb uint16_t ext_phy_details; 1032b2b84680Smikeb uint16_t rsvd; 1033b2b84680Smikeb uint16_t auto_speeds_supported; 1034b2b84680Smikeb uint16_t fixed_speeds_supported; 1035b2b84680Smikeb uint32_t future_use[2]; 1036b2b84680Smikeb } __packed; 1037b2b84680Smikeb 1038b2b84680Smikeb struct mbx_common_phy_info { 1039b2b84680Smikeb struct mbx_hdr hdr; 1040b2b84680Smikeb union { 1041b2b84680Smikeb struct { 1042b2b84680Smikeb uint32_t rsvd0[4]; 1043b2b84680Smikeb } req; 1044b2b84680Smikeb struct { 1045b2b84680Smikeb struct oce_phy_info phy_info; 1046b2b84680Smikeb } rsp; 1047b2b84680Smikeb } params; 1048b2b84680Smikeb } __packed; 1049b2b84680Smikeb 1050b2b84680Smikeb /*Lancer firmware*/ 1051b2b84680Smikeb 1052b2b84680Smikeb struct mbx_lancer_common_write_object { 1053b2b84680Smikeb union { 1054b2b84680Smikeb struct { 1055b2b84680Smikeb struct mbx_hdr hdr; 1056b2b84680Smikeb uint32_t write_length: 24; 1057b2b84680Smikeb uint32_t rsvd: 7; 1058b2b84680Smikeb uint32_t eof: 1; 1059b2b84680Smikeb uint32_t write_offset; 1060b2b84680Smikeb uint8_t object_name[104]; 1061b2b84680Smikeb uint32_t descriptor_count; 1062b2b84680Smikeb uint32_t buffer_length; 1063b2b84680Smikeb uint32_t address_lower; 1064b2b84680Smikeb uint32_t address_upper; 1065b2b84680Smikeb } req; 1066b2b84680Smikeb struct { 1067b2b84680Smikeb uint8_t opcode; 1068b2b84680Smikeb uint8_t subsystem; 1069b2b84680Smikeb uint8_t rsvd1[2]; 1070b2b84680Smikeb uint8_t status; 1071b2b84680Smikeb uint8_t additional_status; 1072b2b84680Smikeb uint8_t rsvd2[2]; 1073b2b84680Smikeb uint32_t response_length; 1074b2b84680Smikeb uint32_t actual_response_length; 1075b2b84680Smikeb uint32_t actual_write_length; 1076b2b84680Smikeb } rsp; 1077b2b84680Smikeb } params; 1078b2b84680Smikeb } __packed; 1079b2b84680Smikeb 1080b2b84680Smikeb /** 1081*4b1a56afSjsg * @brief MBX Common Query Firmware Config 1082b2b84680Smikeb * This command retrieves firmware configuration parameters and adapter 1083b2b84680Smikeb * resources available to the driver originating the request. The firmware 1084b2b84680Smikeb * configuration defines supported protocols by the installed adapter firmware. 1085b2b84680Smikeb * This includes which ULP processors support the specified protocols and 1086b2b84680Smikeb * the number of TCP connections allowed for that protocol. 1087b2b84680Smikeb */ 1088b2b84680Smikeb struct mbx_common_query_fw_config { 1089b2b84680Smikeb struct mbx_hdr hdr; 1090b2b84680Smikeb union { 1091b2b84680Smikeb struct { 1092b2b84680Smikeb uint32_t rsvd0[30]; 1093b2b84680Smikeb } req; 1094b2b84680Smikeb 1095b2b84680Smikeb struct { 1096b2b84680Smikeb uint32_t config_number; 1097b2b84680Smikeb uint32_t asic_revision; 1098b2b84680Smikeb uint32_t port_id; /* used for stats retrieval */ 1099b2b84680Smikeb uint32_t function_mode; 1100b2b84680Smikeb struct { 1101b2b84680Smikeb 1102b2b84680Smikeb uint32_t ulp_mode; 1103b2b84680Smikeb uint32_t nic_wqid_base; 1104b2b84680Smikeb uint32_t nic_wq_tot; 1105b2b84680Smikeb uint32_t toe_wqid_base; 1106b2b84680Smikeb uint32_t toe_wq_tot; 1107b2b84680Smikeb uint32_t toe_rqid_base; 1108b2b84680Smikeb uint32_t toe_rqid_tot; 1109b2b84680Smikeb uint32_t toe_defrqid_base; 1110b2b84680Smikeb uint32_t toe_defrqid_count; 1111b2b84680Smikeb uint32_t lro_rqid_base; 1112b2b84680Smikeb uint32_t lro_rqid_tot; 1113b2b84680Smikeb uint32_t iscsi_icd_base; 1114b2b84680Smikeb uint32_t iscsi_icd_count; 1115b2b84680Smikeb } ulp[2]; 1116b2b84680Smikeb uint32_t function_caps; 1117b2b84680Smikeb uint32_t cqid_base; 1118b2b84680Smikeb uint32_t cqid_tot; 1119b2b84680Smikeb uint32_t eqid_base; 1120b2b84680Smikeb uint32_t eqid_tot; 1121b2b84680Smikeb } rsp; 1122b2b84680Smikeb } params; 1123b2b84680Smikeb } __packed; 1124b2b84680Smikeb 1125b2b84680Smikeb enum CQFW_CONFIG_NUMBER { 1126b2b84680Smikeb FCN_NIC_ISCSI_Initiator = 0x0, 1127b2b84680Smikeb FCN_ISCSI_Target = 0x3, 1128b2b84680Smikeb FCN_FCoE = 0x7, 1129b2b84680Smikeb FCN_ISCSI_Initiator_Target = 0x9, 1130b2b84680Smikeb FCN_NIC_RDMA_TOE = 0xA, 1131b2b84680Smikeb FCN_NIC_RDMA_FCoE = 0xB, 1132b2b84680Smikeb FCN_NIC_RDMA_iSCSI = 0xC, 1133b2b84680Smikeb FCN_NIC_iSCSI_FCoE = 0xD 1134b2b84680Smikeb }; 1135b2b84680Smikeb 1136b2b84680Smikeb /** 1137*4b1a56afSjsg * @brief Function Capabilities 1138b2b84680Smikeb * This field contains the flags indicating the capabilities of 1139b2b84680Smikeb * the SLI Host’s PCI function. 1140b2b84680Smikeb */ 1141b2b84680Smikeb enum CQFW_FUNCTION_CAPABILITIES { 1142b2b84680Smikeb FNC_UNCLASSIFIED_STATS = 0x1, 1143b2b84680Smikeb FNC_RSS = 0x2, 1144b2b84680Smikeb FNC_PROMISCUOUS = 0x4, 1145b2b84680Smikeb FNC_LEGACY_MODE = 0x8, 1146b2b84680Smikeb FNC_HDS = 0x4000, 1147b2b84680Smikeb FNC_VMQ = 0x10000, 1148b2b84680Smikeb FNC_NETQ = 0x20000, 1149b2b84680Smikeb FNC_QGROUPS = 0x40000, 1150b2b84680Smikeb FNC_LRO = 0x100000, 1151b2b84680Smikeb FNC_VLAN_OFFLOAD = 0x800000 1152b2b84680Smikeb }; 1153b2b84680Smikeb 1154b2b84680Smikeb enum CQFW_ULP_MODES_SUPPORTED { 1155b2b84680Smikeb ULP_TOE_MODE = 0x1, 1156b2b84680Smikeb ULP_NIC_MODE = 0x2, 1157b2b84680Smikeb ULP_RDMA_MODE = 0x4, 1158b2b84680Smikeb ULP_ISCSI_INI_MODE = 0x10, 1159b2b84680Smikeb ULP_ISCSI_TGT_MODE = 0x20, 1160b2b84680Smikeb ULP_FCOE_INI_MODE = 0x40, 1161b2b84680Smikeb ULP_FCOE_TGT_MODE = 0x80, 1162b2b84680Smikeb ULP_DAL_MODE = 0x100, 1163b2b84680Smikeb ULP_LRO_MODE = 0x200 1164b2b84680Smikeb }; 1165b2b84680Smikeb 1166b2b84680Smikeb /** 1167b2b84680Smikeb * @brief Function Modes Supported 1168b2b84680Smikeb * Valid function modes (or protocol-types) supported on the SLI-Host’s 1169b2b84680Smikeb * PCIe function. This field is a logical OR of the following values: 1170b2b84680Smikeb */ 1171b2b84680Smikeb enum CQFW_FUNCTION_MODES_SUPPORTED { 1172b2b84680Smikeb FNM_TOE_MODE = 0x1, /* TCP offload supported */ 1173b2b84680Smikeb FNM_NIC_MODE = 0x2, /* Raw Ethernet supported */ 1174b2b84680Smikeb FNM_RDMA_MODE = 0x4, /* RDMA protocol supported */ 1175b2b84680Smikeb FNM_VM_MODE = 0x8, /* Virtual Machines supported */ 1176b2b84680Smikeb FNM_ISCSI_INI_MODE = 0x10, /* iSCSI initiator supported */ 1177b2b84680Smikeb FNM_ISCSI_TGT_MODE = 0x20, /* iSCSI target plus initiator */ 1178b2b84680Smikeb FNM_FCOE_INI_MODE = 0x40, /* FCoE Initiator supported */ 1179b2b84680Smikeb FNM_FCOE_TGT_MODE = 0x80, /* FCoE target supported */ 1180b2b84680Smikeb FNM_DAL_MODE = 0x100, /* DAL supported */ 1181b2b84680Smikeb FNM_LRO_MODE = 0x200, /* LRO supported */ 1182b2b84680Smikeb FNM_FLEX10_MODE = 0x400, /* QinQ, FLEX-10 or VNIC */ 1183b2b84680Smikeb FNM_NCSI_MODE = 0x800, /* NCSI supported */ 1184b2b84680Smikeb FNM_IPV6_MODE = 0x1000, /* IPV6 stack enabled */ 1185b2b84680Smikeb FNM_BE2_COMPAT_MODE = 0x2000, /* BE2 compatibility (BE3 disable)*/ 1186b2b84680Smikeb FNM_INVALID_MODE = 0x8000, /* Invalid */ 1187b2b84680Smikeb FNM_BE3_COMPAT_MODE = 0x10000, /* BE3 features */ 1188b2b84680Smikeb FNM_VNIC_MODE = 0x20000, /* Set when IBM vNIC mode is set */ 1189b2b84680Smikeb FNM_VNTAG_MODE = 0x40000, /* Set when VNTAG mode is set */ 1190b2b84680Smikeb FNM_UMC_MODE = 0x1000000, /* Set when UMC mode is set */ 1191b2b84680Smikeb FNM_UMC_DEF_EN = 0x100000, /* Set when UMC Default is set */ 1192b2b84680Smikeb FNM_ONE_GB_EN = 0x200000, /* Set when 1GB Default is set */ 1193b2b84680Smikeb FNM_VNIC_DEF_VALID = 0x400000, /* Set when VNIC_DEF_EN is valid */ 1194b2b84680Smikeb FNM_VNIC_DEF_EN = 0x800000 /* Set when VNIC Default enabled */ 1195b2b84680Smikeb }; 1196b2b84680Smikeb 1197b2b84680Smikeb struct mbx_common_config_vlan { 1198b2b84680Smikeb struct mbx_hdr hdr; 1199b2b84680Smikeb union { 1200b2b84680Smikeb struct { 1201b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 1202b2b84680Smikeb uint8_t num_vlans; 1203b2b84680Smikeb uint8_t untagged; 1204b2b84680Smikeb uint8_t promisc; 1205b2b84680Smikeb uint8_t if_id; 1206b2b84680Smikeb #else 1207b2b84680Smikeb uint8_t if_id; 1208b2b84680Smikeb uint8_t promisc; 1209b2b84680Smikeb uint8_t untagged; 1210b2b84680Smikeb uint8_t num_vlans; 1211b2b84680Smikeb #endif 1212b2b84680Smikeb union { 1213b2b84680Smikeb struct normal_vlan normal_vlans[64]; 1214b2b84680Smikeb struct qinq_vlan qinq_vlans[32]; 1215b2b84680Smikeb } tags; 1216b2b84680Smikeb } req; 1217b2b84680Smikeb 1218b2b84680Smikeb struct { 1219b2b84680Smikeb uint32_t rsvd; 1220b2b84680Smikeb } rsp; 1221b2b84680Smikeb } params; 1222b2b84680Smikeb } __packed; 1223b2b84680Smikeb 1224b2b84680Smikeb struct iface_rx_filter_ctx { 1225b2b84680Smikeb uint32_t global_flags_mask; 1226b2b84680Smikeb uint32_t global_flags; 1227b2b84680Smikeb uint32_t iface_flags_mask; 1228b2b84680Smikeb uint32_t iface_flags; 1229b2b84680Smikeb uint32_t if_id; 1230b2b84680Smikeb #define IFACE_RX_NUM_MCAST_MAX 64 1231b2b84680Smikeb uint32_t num_mcast; 1232b2b84680Smikeb struct mbx_mcast_addr { 1233b2b84680Smikeb uint8_t byte[6]; 1234b2b84680Smikeb } mac[IFACE_RX_NUM_MCAST_MAX]; 1235b2b84680Smikeb } __packed; 1236b2b84680Smikeb 1237b2b84680Smikeb /* [34] OPCODE_COMMON_SET_IFACE_RX_FILTER */ 1238b2b84680Smikeb struct mbx_set_common_iface_rx_filter { 1239b2b84680Smikeb struct mbx_hdr hdr; 1240b2b84680Smikeb union { 1241b2b84680Smikeb struct iface_rx_filter_ctx req; 1242b2b84680Smikeb struct iface_rx_filter_ctx rsp; 1243b2b84680Smikeb } params; 1244b2b84680Smikeb } __packed; 1245b2b84680Smikeb 1246b2b84680Smikeb /* [41] OPCODE_COMMON_MODIFY_EQ_DELAY */ 1247b2b84680Smikeb struct mbx_modify_common_eq_delay { 1248b2b84680Smikeb struct mbx_hdr hdr; 1249b2b84680Smikeb union { 1250b2b84680Smikeb struct { 1251b2b84680Smikeb uint32_t num_eq; 1252b2b84680Smikeb struct { 1253b2b84680Smikeb uint32_t eq_id; 1254b2b84680Smikeb uint32_t phase; 1255b2b84680Smikeb uint32_t dm; 1256b2b84680Smikeb } delay[8]; 1257b2b84680Smikeb } req; 1258b2b84680Smikeb 1259b2b84680Smikeb struct { 1260b2b84680Smikeb uint32_t rsvd0; 1261b2b84680Smikeb } rsp; 1262b2b84680Smikeb } params; 1263b2b84680Smikeb } __packed; 1264b2b84680Smikeb 1265b2b84680Smikeb /* [59] OPCODE_ADD_COMMON_IFACE_MAC */ 1266b2b84680Smikeb struct mbx_add_common_iface_mac { 1267b2b84680Smikeb struct mbx_hdr hdr; 1268b2b84680Smikeb union { 1269b2b84680Smikeb struct { 1270b2b84680Smikeb uint32_t if_id; 1271b2b84680Smikeb uint8_t mac_address[6]; 1272b2b84680Smikeb uint8_t rsvd0[2]; 1273b2b84680Smikeb } req; 1274b2b84680Smikeb struct { 1275b2b84680Smikeb uint32_t pmac_id; 1276b2b84680Smikeb } rsp; 1277b2b84680Smikeb } params; 1278b2b84680Smikeb } __packed; 1279b2b84680Smikeb 1280b2b84680Smikeb /* [60] OPCODE_DEL_COMMON_IFACE_MAC */ 1281b2b84680Smikeb struct mbx_del_common_iface_mac { 1282b2b84680Smikeb struct mbx_hdr hdr; 1283b2b84680Smikeb union { 1284b2b84680Smikeb struct { 1285b2b84680Smikeb uint32_t if_id; 1286b2b84680Smikeb uint32_t pmac_id; 1287b2b84680Smikeb } req; 1288b2b84680Smikeb struct { 1289b2b84680Smikeb uint32_t rsvd0; 1290b2b84680Smikeb } rsp; 1291b2b84680Smikeb } params; 1292b2b84680Smikeb } __packed; 1293b2b84680Smikeb 1294b2b84680Smikeb /* [8] OPCODE_QUERY_COMMON_MAX_MBX_BUFFER_SIZE */ 1295b2b84680Smikeb struct mbx_query_common_max_mbx_buffer_size { 1296b2b84680Smikeb struct mbx_hdr hdr; 1297b2b84680Smikeb struct { 1298b2b84680Smikeb uint32_t max_ioctl_bufsz; 1299b2b84680Smikeb } rsp; 1300b2b84680Smikeb } __packed; 1301b2b84680Smikeb 1302b2b84680Smikeb /* [61] OPCODE_COMMON_FUNCTION_RESET */ 1303b2b84680Smikeb struct ioctl_common_function_reset { 1304b2b84680Smikeb struct mbx_hdr hdr; 1305b2b84680Smikeb } __packed; 1306b2b84680Smikeb 1307b2b84680Smikeb /* [80] OPCODE_COMMON_FUNCTION_LINK_CONFIG */ 1308b2b84680Smikeb struct mbx_common_func_link_cfg { 1309b2b84680Smikeb struct mbx_hdr hdr; 1310b2b84680Smikeb union { 1311b2b84680Smikeb struct { 1312b2b84680Smikeb uint32_t enable; 1313b2b84680Smikeb } req; 1314b2b84680Smikeb struct { 1315b2b84680Smikeb uint32_t rsvd0; 1316b2b84680Smikeb } rsp; 1317b2b84680Smikeb } params; 1318b2b84680Smikeb } __packed; 1319b2b84680Smikeb 1320b2b84680Smikeb /* [103] OPCODE_COMMON_SET_FUNCTIONAL_CAPS */ 1321b2b84680Smikeb #define CAP_SW_TIMESTAMPS 2 1322b2b84680Smikeb #define CAP_BE3_NATIVE_ERX_API 4 1323b2b84680Smikeb 1324b2b84680Smikeb struct mbx_common_set_function_cap { 1325b2b84680Smikeb struct mbx_hdr hdr; 1326b2b84680Smikeb union { 1327b2b84680Smikeb struct { 1328b2b84680Smikeb uint32_t valid_capability_flags; 1329b2b84680Smikeb uint32_t capability_flags; 1330b2b84680Smikeb uint8_t sbz[212]; 1331b2b84680Smikeb } req; 1332b2b84680Smikeb struct { 1333b2b84680Smikeb uint32_t valid_capability_flags; 1334b2b84680Smikeb uint32_t capability_flags; 1335b2b84680Smikeb uint8_t sbz[212]; 1336b2b84680Smikeb } rsp; 1337b2b84680Smikeb } params; 1338b2b84680Smikeb } __packed; 1339b2b84680Smikeb struct mbx_lowlevel_test_loopback_mode { 1340b2b84680Smikeb struct mbx_hdr hdr; 1341b2b84680Smikeb union { 1342b2b84680Smikeb struct { 1343b2b84680Smikeb uint32_t loopback_type; 1344b2b84680Smikeb uint32_t num_pkts; 1345b2b84680Smikeb uint64_t pattern; 1346b2b84680Smikeb uint32_t src_port; 1347b2b84680Smikeb uint32_t dest_port; 1348b2b84680Smikeb uint32_t pkt_size; 1349b2b84680Smikeb }req; 1350b2b84680Smikeb struct { 1351b2b84680Smikeb uint32_t status; 1352b2b84680Smikeb uint32_t num_txfer; 1353b2b84680Smikeb uint32_t num_rx; 1354b2b84680Smikeb uint32_t miscomp_off; 1355b2b84680Smikeb uint32_t ticks_compl; 1356b2b84680Smikeb }rsp; 1357b2b84680Smikeb } params; 1358b2b84680Smikeb } __packed; 1359b2b84680Smikeb 1360b2b84680Smikeb struct mbx_lowlevel_set_loopback_mode { 1361b2b84680Smikeb struct mbx_hdr hdr; 1362b2b84680Smikeb union { 1363b2b84680Smikeb struct { 1364b2b84680Smikeb uint8_t src_port; 1365b2b84680Smikeb uint8_t dest_port; 1366b2b84680Smikeb uint8_t loopback_type; 1367b2b84680Smikeb uint8_t loopback_state; 1368b2b84680Smikeb } req; 1369b2b84680Smikeb struct { 1370b2b84680Smikeb uint8_t rsvd0[4]; 1371b2b84680Smikeb } rsp; 1372b2b84680Smikeb } params; 1373b2b84680Smikeb } __packed; 1374b2b84680Smikeb 1375b2b84680Smikeb enum LOWLEVEL_SUBSYS_OPCODES { 1376*4b1a56afSjsg /* Opcodes used for lowlevel functions common to many subsystems. 1377b2b84680Smikeb * Some of these opcodes are used for diagnostic functions only. 1378b2b84680Smikeb * These opcodes use the SUBSYS_LOWLEVEL subsystem code. 1379b2b84680Smikeb */ 1380b2b84680Smikeb OPCODE_LOWLEVEL_TEST_LOOPBACK = 18, 1381b2b84680Smikeb OPCODE_LOWLEVEL_SET_LOOPBACK_MODE = 19, 1382b2b84680Smikeb OPCODE_LOWLEVEL_GET_LOOPBACK_MODE = 20 1383b2b84680Smikeb }; 1384b2b84680Smikeb 1385b2b84680Smikeb enum LLDP_SUBSYS_OPCODES { 1386*4b1a56afSjsg /* Opcodes used for LLDP subsystem for configuring the LLDP state machines. */ 1387b2b84680Smikeb OPCODE_LLDP_GET_CFG = 1, 1388b2b84680Smikeb OPCODE_LLDP_SET_CFG = 2, 1389b2b84680Smikeb OPCODE_LLDP_GET_STATS = 3 1390b2b84680Smikeb }; 1391b2b84680Smikeb 1392b2b84680Smikeb enum DCBX_SUBSYS_OPCODES { 1393b2b84680Smikeb /* Opcodes used for DCBX. */ 1394b2b84680Smikeb OPCODE_DCBX_GET_CFG = 1, 1395b2b84680Smikeb OPCODE_DCBX_SET_CFG = 2, 1396b2b84680Smikeb OPCODE_DCBX_GET_MIB_INFO = 3, 1397b2b84680Smikeb OPCODE_DCBX_GET_DCBX_MODE = 4, 1398b2b84680Smikeb OPCODE_DCBX_SET_MODE = 5 1399b2b84680Smikeb }; 1400b2b84680Smikeb 1401b2b84680Smikeb enum DMTF_SUBSYS_OPCODES { 1402b2b84680Smikeb /* Opcodes used for DCBX subsystem. */ 1403b2b84680Smikeb OPCODE_DMTF_EXEC_CLP_CMD = 1 1404b2b84680Smikeb }; 1405b2b84680Smikeb 1406b2b84680Smikeb enum DIAG_SUBSYS_OPCODES { 1407b2b84680Smikeb /* Opcodes used for diag functions common to many subsystems. */ 1408b2b84680Smikeb OPCODE_DIAG_RUN_DMA_TEST = 1, 1409b2b84680Smikeb OPCODE_DIAG_RUN_MDIO_TEST = 2, 1410b2b84680Smikeb OPCODE_DIAG_RUN_NLB_TEST = 3, 1411b2b84680Smikeb OPCODE_DIAG_RUN_ARM_TIMER_TEST = 4, 1412b2b84680Smikeb OPCODE_DIAG_GET_MAC = 5 1413b2b84680Smikeb }; 1414b2b84680Smikeb 1415b2b84680Smikeb enum VENDOR_SUBSYS_OPCODES { 1416b2b84680Smikeb /* Opcodes used for Vendor subsystem. */ 1417b2b84680Smikeb OPCODE_VENDOR_SLI = 1 1418b2b84680Smikeb }; 1419b2b84680Smikeb 1420b2b84680Smikeb /* Management Status Codes */ 1421b2b84680Smikeb enum MGMT_STATUS_SUCCESS { 1422b2b84680Smikeb MGMT_SUCCESS = 0, 1423b2b84680Smikeb MGMT_FAILED = 1, 1424b2b84680Smikeb MGMT_ILLEGAL_REQUEST = 2, 1425b2b84680Smikeb MGMT_ILLEGAL_FIELD = 3, 1426b2b84680Smikeb MGMT_INSUFFICIENT_BUFFER = 4, 1427b2b84680Smikeb MGMT_UNAUTHORIZED_REQUEST = 5, 1428b2b84680Smikeb MGMT_INVALID_ISNS_ADDRESS = 10, 1429b2b84680Smikeb MGMT_INVALID_IPADDR = 11, 1430b2b84680Smikeb MGMT_INVALID_GATEWAY = 12, 1431b2b84680Smikeb MGMT_INVALID_SUBNETMASK = 13, 1432b2b84680Smikeb MGMT_INVALID_TARGET_IPADDR = 16, 1433b2b84680Smikeb MGMT_TGTTBL_FULL = 20, 1434b2b84680Smikeb MGMT_FLASHROM_SAVE_FAILED = 23, 1435b2b84680Smikeb MGMT_IOCTLHANDLE_ALLOC_FAILED = 27, 1436b2b84680Smikeb MGMT_INVALID_SESSION = 31, 1437b2b84680Smikeb MGMT_INVALID_CONNECTION = 32, 1438b2b84680Smikeb MGMT_BTL_PATH_EXCEEDS_OSM_LIMIT = 33, 1439b2b84680Smikeb MGMT_BTL_TGTID_EXCEEDS_OSM_LIMIT = 34, 1440b2b84680Smikeb MGMT_BTL_PATH_TGTID_OCCUPIED = 35, 1441b2b84680Smikeb MGMT_BTL_NO_FREE_SLOT_PATH = 36, 1442b2b84680Smikeb MGMT_BTL_NO_FREE_SLOT_TGTID = 37, 1443b2b84680Smikeb MGMT_POLL_IOCTL_TIMEOUT = 40, 1444b2b84680Smikeb MGMT_ERROR_ACITISCSI = 41, 1445b2b84680Smikeb MGMT_BUFFER_SIZE_EXCEED_OSM_OR_OS_LIMIT = 43, 1446b2b84680Smikeb MGMT_REBOOT_REQUIRED = 44, 1447b2b84680Smikeb MGMT_INSUFFICIENT_TIMEOUT = 45, 1448b2b84680Smikeb MGMT_IPADDR_NOT_SET = 46, 1449b2b84680Smikeb MGMT_IPADDR_DUP_DETECTED = 47, 1450b2b84680Smikeb MGMT_CANT_REMOVE_LAST_CONNECTION = 48, 1451b2b84680Smikeb MGMT_TARGET_BUSY = 49, 1452b2b84680Smikeb MGMT_TGT_ERR_LISTEN_SOCKET = 50, 1453b2b84680Smikeb MGMT_TGT_ERR_BIND_SOCKET = 51, 1454b2b84680Smikeb MGMT_TGT_ERR_NO_SOCKET = 52, 1455b2b84680Smikeb MGMT_TGT_ERR_ISNS_COMM_FAILED = 55, 1456b2b84680Smikeb MGMT_CANNOT_DELETE_BOOT_TARGET = 56, 1457b2b84680Smikeb MGMT_TGT_PORTAL_MODE_IN_LISTEN = 57, 1458b2b84680Smikeb MGMT_FCF_IN_USE = 58 , 1459b2b84680Smikeb MGMT_NO_CQE = 59, 1460b2b84680Smikeb MGMT_TARGET_NOT_FOUND = 65, 1461b2b84680Smikeb MGMT_NOT_SUPPORTED = 66, 1462b2b84680Smikeb MGMT_NO_FCF_RECORDS = 67, 1463b2b84680Smikeb MGMT_FEATURE_NOT_SUPPORTED = 68, 1464b2b84680Smikeb MGMT_VPD_FUNCTION_OUT_OF_RANGE = 69, 1465b2b84680Smikeb MGMT_VPD_FUNCTION_TYPE_INCORRECT = 70, 1466b2b84680Smikeb MGMT_INVALID_NON_EMBEDDED_WRB = 71, 1467b2b84680Smikeb MGMT_OOR = 100, 1468b2b84680Smikeb MGMT_INVALID_PD = 101, 1469b2b84680Smikeb MGMT_STATUS_PD_INUSE = 102, 1470b2b84680Smikeb MGMT_INVALID_CQ = 103, 1471b2b84680Smikeb MGMT_INVALID_QP = 104, 1472b2b84680Smikeb MGMT_INVALID_STAG = 105, 1473b2b84680Smikeb MGMT_ORD_EXCEEDS = 106, 1474b2b84680Smikeb MGMT_IRD_EXCEEDS = 107, 1475b2b84680Smikeb MGMT_SENDQ_WQE_EXCEEDS = 108, 1476b2b84680Smikeb MGMT_RECVQ_RQE_EXCEEDS = 109, 1477b2b84680Smikeb MGMT_SGE_SEND_EXCEEDS = 110, 1478b2b84680Smikeb MGMT_SGE_WRITE_EXCEEDS = 111, 1479b2b84680Smikeb MGMT_SGE_RECV_EXCEEDS = 112, 1480b2b84680Smikeb MGMT_INVALID_STATE_CHANGE = 113, 1481b2b84680Smikeb MGMT_MW_BOUND = 114, 1482b2b84680Smikeb MGMT_INVALID_VA = 115, 1483b2b84680Smikeb MGMT_INVALID_LENGTH = 116, 1484b2b84680Smikeb MGMT_INVALID_FBO = 117, 1485b2b84680Smikeb MGMT_INVALID_ACC_RIGHTS = 118, 1486b2b84680Smikeb MGMT_INVALID_PBE_SIZE = 119, 1487b2b84680Smikeb MGMT_INVALID_PBL_ENTRY = 120, 1488b2b84680Smikeb MGMT_INVALID_PBL_OFFSET = 121, 1489b2b84680Smikeb MGMT_ADDR_NON_EXIST = 122, 1490b2b84680Smikeb MGMT_INVALID_VLANID = 123, 1491b2b84680Smikeb MGMT_INVALID_MTU = 124, 1492b2b84680Smikeb MGMT_INVALID_BACKLOG = 125, 1493b2b84680Smikeb MGMT_CONNECTION_INPROGRESS = 126, 1494b2b84680Smikeb MGMT_INVALID_RQE_SIZE = 127, 1495b2b84680Smikeb MGMT_INVALID_RQE_ENTRY = 128 1496b2b84680Smikeb }; 1497b2b84680Smikeb 1498b2b84680Smikeb /* Additional Management Status Codes */ 1499b2b84680Smikeb enum MGMT_ADDI_STATUS { 1500b2b84680Smikeb MGMT_ADDI_NO_STATUS = 0, 1501b2b84680Smikeb MGMT_ADDI_INVALID_IPTYPE = 1, 1502b2b84680Smikeb MGMT_ADDI_TARGET_HANDLE_NOT_FOUND = 9, 1503b2b84680Smikeb MGMT_ADDI_SESSION_HANDLE_NOT_FOUND = 10, 1504b2b84680Smikeb MGMT_ADDI_CONNECTION_HANDLE_NOT_FOUND = 11, 1505b2b84680Smikeb MGMT_ADDI_ACTIVE_SESSIONS_PRESENT = 16, 1506b2b84680Smikeb MGMT_ADDI_SESSION_ALREADY_OPENED = 17, 1507b2b84680Smikeb MGMT_ADDI_SESSION_ALREADY_CLOSED = 18, 1508b2b84680Smikeb MGMT_ADDI_DEST_HOST_UNREACHABLE = 19, 1509b2b84680Smikeb MGMT_ADDI_LOGIN_IN_PROGRESS = 20, 1510b2b84680Smikeb MGMT_ADDI_TCP_CONNECT_FAILED = 21, 1511b2b84680Smikeb MGMT_ADDI_INSUFFICIENT_RESOURCES = 22, 1512b2b84680Smikeb MGMT_ADDI_LINK_DOWN = 23, 1513b2b84680Smikeb MGMT_ADDI_DHCP_ERROR = 24, 1514b2b84680Smikeb MGMT_ADDI_CONNECTION_OFFLOADED = 25, 1515b2b84680Smikeb MGMT_ADDI_CONNECTION_NOT_OFFLOADED = 26, 1516b2b84680Smikeb MGMT_ADDI_CONNECTION_UPLOAD_IN_PROGRESS = 27, 1517b2b84680Smikeb MGMT_ADDI_REQUEST_REJECTED = 28, 1518b2b84680Smikeb MGMT_ADDI_INVALID_SUBSYSTEM = 29, 1519b2b84680Smikeb MGMT_ADDI_INVALID_OPCODE = 30, 1520b2b84680Smikeb MGMT_ADDI_INVALID_MAXCONNECTION_PARAM = 31, 1521b2b84680Smikeb MGMT_ADDI_INVALID_KEY = 32, 1522b2b84680Smikeb MGMT_ADDI_INVALID_DOMAIN = 35, 1523b2b84680Smikeb MGMT_ADDI_LOGIN_INITIATOR_ERROR = 43, 1524b2b84680Smikeb MGMT_ADDI_LOGIN_AUTHENTICATION_ERROR = 44, 1525b2b84680Smikeb MGMT_ADDI_LOGIN_AUTHORIZATION_ERROR = 45, 1526b2b84680Smikeb MGMT_ADDI_LOGIN_NOT_FOUND = 46, 1527b2b84680Smikeb MGMT_ADDI_LOGIN_TARGET_REMOVED = 47, 1528b2b84680Smikeb MGMT_ADDI_LOGIN_UNSUPPORTED_VERSION = 48, 1529b2b84680Smikeb MGMT_ADDI_LOGIN_TOO_MANY_CONNECTIONS = 49, 1530b2b84680Smikeb MGMT_ADDI_LOGIN_MISSING_PARAMETER = 50, 1531b2b84680Smikeb MGMT_ADDI_LOGIN_NO_SESSION_SPANNING = 51, 1532b2b84680Smikeb MGMT_ADDI_LOGIN_SESSION_TYPE_NOT_SUPPORTED = 52, 1533b2b84680Smikeb MGMT_ADDI_LOGIN_SESSION_DOES_NOT_EXIST = 53, 1534b2b84680Smikeb MGMT_ADDI_LOGIN_INVALID_DURING_LOGIN = 54, 1535b2b84680Smikeb MGMT_ADDI_LOGIN_TARGET_ERROR = 55, 1536b2b84680Smikeb MGMT_ADDI_LOGIN_SERVICE_UNAVAILABLE = 56, 1537b2b84680Smikeb MGMT_ADDI_LOGIN_OUT_OF_RESOURCES = 57, 1538b2b84680Smikeb MGMT_ADDI_SAME_CHAP_SECRET = 58, 1539b2b84680Smikeb MGMT_ADDI_INVALID_SECRET_LENGTH = 59, 1540b2b84680Smikeb MGMT_ADDI_DUPLICATE_ENTRY = 60, 1541b2b84680Smikeb MGMT_ADDI_SETTINGS_MODIFIED_REBOOT_REQD = 63, 1542b2b84680Smikeb MGMT_ADDI_INVALID_EXTENDED_TIMEOUT = 64, 1543b2b84680Smikeb MGMT_ADDI_INVALID_INTERFACE_HANDLE = 65, 1544b2b84680Smikeb MGMT_ADDI_ERR_VLAN_ON_DEF_INTERFACE = 66, 1545b2b84680Smikeb MGMT_ADDI_INTERFACE_DOES_NOT_EXIST = 67, 1546b2b84680Smikeb MGMT_ADDI_INTERFACE_ALREADY_EXISTS = 68, 1547b2b84680Smikeb MGMT_ADDI_INVALID_VLAN_RANGE = 69, 1548b2b84680Smikeb MGMT_ADDI_ERR_SET_VLAN = 70, 1549b2b84680Smikeb MGMT_ADDI_ERR_DEL_VLAN = 71, 1550b2b84680Smikeb MGMT_ADDI_CANNOT_DEL_DEF_INTERFACE = 72, 1551b2b84680Smikeb MGMT_ADDI_DHCP_REQ_ALREADY_PENDING = 73, 1552b2b84680Smikeb MGMT_ADDI_TOO_MANY_INTERFACES = 74, 1553b2b84680Smikeb MGMT_ADDI_INVALID_REQUEST = 75 1554b2b84680Smikeb }; 1555b2b84680Smikeb 1556b2b84680Smikeb enum NIC_SUBSYS_OPCODES { 1557b2b84680Smikeb /** 1558b2b84680Smikeb * @brief NIC Subsystem Opcodes (see Network SLI-4 manual >= Rev4, v21-2) 1559b2b84680Smikeb * These opcodes are used for configuring the Ethernet interfaces. 1560b2b84680Smikeb * These opcodes all use the SUBSYS_NIC subsystem code. 1561b2b84680Smikeb */ 1562b2b84680Smikeb OPCODE_NIC_CONFIG_RSS = 1, 1563b2b84680Smikeb OPCODE_NIC_CONFIG_ACPI = 2, 1564b2b84680Smikeb OPCODE_NIC_CONFIG_PROMISCUOUS = 3, 1565b2b84680Smikeb OPCODE_NIC_GET_STATS = 4, 1566b2b84680Smikeb OPCODE_NIC_CREATE_WQ = 7, 1567b2b84680Smikeb OPCODE_NIC_CREATE_RQ = 8, 1568b2b84680Smikeb OPCODE_NIC_DELETE_WQ = 9, 1569b2b84680Smikeb OPCODE_NIC_DELETE_RQ = 10, 1570b2b84680Smikeb OPCODE_NIC_CONFIG_ACPI_WOL_MAGIC = 12, 1571b2b84680Smikeb OPCODE_NIC_GET_NETWORK_STATS = 13, 1572b2b84680Smikeb OPCODE_NIC_CREATE_HDS_RQ = 16, 1573b2b84680Smikeb OPCODE_NIC_DELETE_HDS_RQ = 17, 1574b2b84680Smikeb OPCODE_NIC_GET_PPORT_STATS = 18, 1575b2b84680Smikeb OPCODE_NIC_GET_VPORT_STATS = 19, 1576b2b84680Smikeb OPCODE_NIC_GET_QUEUE_STATS = 20 1577b2b84680Smikeb }; 1578b2b84680Smikeb 1579b2b84680Smikeb /* NIC header WQE */ 1580b2b84680Smikeb struct oce_nic_hdr_wqe { 1581b2b84680Smikeb union { 1582b2b84680Smikeb struct { 1583b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 1584b2b84680Smikeb /* dw0 */ 1585b2b84680Smikeb uint32_t rsvd0; 1586b2b84680Smikeb 1587b2b84680Smikeb /* dw1 */ 1588b2b84680Smikeb uint32_t last_seg_udp_len:14; 1589b2b84680Smikeb uint32_t rsvd1:18; 1590b2b84680Smikeb 1591b2b84680Smikeb /* dw2 */ 1592b2b84680Smikeb uint32_t lso_mss:14; 1593b2b84680Smikeb uint32_t num_wqe:5; 1594b2b84680Smikeb uint32_t rsvd4:2; 1595b2b84680Smikeb uint32_t vlan:1; 1596b2b84680Smikeb uint32_t lso:1; 1597b2b84680Smikeb uint32_t tcpcs:1; 1598b2b84680Smikeb uint32_t udpcs:1; 1599b2b84680Smikeb uint32_t ipcs:1; 1600b2b84680Smikeb uint32_t rsvd3:1; 1601b2b84680Smikeb uint32_t rsvd2:1; 1602b2b84680Smikeb uint32_t forward:1; 1603b2b84680Smikeb uint32_t crc:1; 1604b2b84680Smikeb uint32_t event:1; 1605b2b84680Smikeb uint32_t complete:1; 1606b2b84680Smikeb 1607b2b84680Smikeb /* dw3 */ 1608b2b84680Smikeb uint32_t vlan_tag:16; 1609b2b84680Smikeb uint32_t total_length:16; 1610b2b84680Smikeb #else 1611b2b84680Smikeb /* dw0 */ 1612b2b84680Smikeb uint32_t rsvd0; 1613b2b84680Smikeb 1614b2b84680Smikeb /* dw1 */ 1615b2b84680Smikeb uint32_t rsvd1:18; 1616b2b84680Smikeb uint32_t last_seg_udp_len:14; 1617b2b84680Smikeb 1618b2b84680Smikeb /* dw2 */ 1619b2b84680Smikeb uint32_t complete:1; 1620b2b84680Smikeb uint32_t event:1; 1621b2b84680Smikeb uint32_t crc:1; 1622b2b84680Smikeb uint32_t forward:1; 1623b2b84680Smikeb uint32_t rsvd2:1; 1624b2b84680Smikeb uint32_t rsvd3:1; 1625b2b84680Smikeb uint32_t ipcs:1; 1626b2b84680Smikeb uint32_t udpcs:1; 1627b2b84680Smikeb uint32_t tcpcs:1; 1628b2b84680Smikeb uint32_t lso:1; 1629b2b84680Smikeb uint32_t vlan:1; 1630b2b84680Smikeb uint32_t rsvd4:2; 1631b2b84680Smikeb uint32_t num_wqe:5; 1632b2b84680Smikeb uint32_t lso_mss:14; 1633b2b84680Smikeb 1634b2b84680Smikeb /* dw3 */ 1635b2b84680Smikeb uint32_t total_length:16; 1636b2b84680Smikeb uint32_t vlan_tag:16; 1637b2b84680Smikeb #endif 1638b2b84680Smikeb } s; 1639b2b84680Smikeb uint32_t dw[4]; 1640b2b84680Smikeb } u0; 1641b2b84680Smikeb } __packed; 1642b2b84680Smikeb 1643b2b84680Smikeb /* NIC fragment WQE */ 1644b2b84680Smikeb struct oce_nic_frag_wqe { 1645b2b84680Smikeb union { 1646b2b84680Smikeb struct { 1647b2b84680Smikeb /* dw0 */ 1648b2b84680Smikeb uint32_t frag_pa_hi; 1649b2b84680Smikeb /* dw1 */ 1650b2b84680Smikeb uint32_t frag_pa_lo; 1651b2b84680Smikeb /* dw2 */ 1652b2b84680Smikeb uint32_t rsvd0; 1653b2b84680Smikeb uint32_t frag_len; 1654b2b84680Smikeb } s; 1655b2b84680Smikeb uint32_t dw[4]; 1656b2b84680Smikeb } u0; 1657b2b84680Smikeb } __packed; 1658b2b84680Smikeb 1659b2b84680Smikeb /* Ethernet Tx Completion Descriptor */ 1660b2b84680Smikeb struct oce_nic_tx_cqe { 1661b2b84680Smikeb union { 1662b2b84680Smikeb struct { 1663b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 1664b2b84680Smikeb /* dw 0 */ 1665b2b84680Smikeb uint32_t status:4; 1666b2b84680Smikeb uint32_t rsvd0:8; 1667b2b84680Smikeb uint32_t port:2; 1668b2b84680Smikeb uint32_t ct:2; 1669b2b84680Smikeb uint32_t wqe_index:16; 1670b2b84680Smikeb /* dw 1 */ 1671b2b84680Smikeb uint32_t rsvd1:5; 1672b2b84680Smikeb uint32_t cast_enc:2; 1673b2b84680Smikeb uint32_t lso:1; 1674b2b84680Smikeb uint32_t nwh_bytes:8; 1675b2b84680Smikeb uint32_t user_bytes:16; 1676b2b84680Smikeb /* dw 2 */ 1677b2b84680Smikeb uint32_t rsvd2; 1678b2b84680Smikeb /* dw 3 */ 1679b2b84680Smikeb uint32_t valid:1; 1680b2b84680Smikeb uint32_t rsvd3:4; 1681b2b84680Smikeb uint32_t wq_id:11; 1682b2b84680Smikeb uint32_t num_pkts:16; 1683b2b84680Smikeb #else 1684b2b84680Smikeb /* dw 0 */ 1685b2b84680Smikeb uint32_t wqe_index:16; 1686b2b84680Smikeb uint32_t ct:2; 1687b2b84680Smikeb uint32_t port:2; 1688b2b84680Smikeb uint32_t rsvd0:8; 1689b2b84680Smikeb uint32_t status:4; 1690b2b84680Smikeb /* dw 1 */ 1691b2b84680Smikeb uint32_t user_bytes:16; 1692b2b84680Smikeb uint32_t nwh_bytes:8; 1693b2b84680Smikeb uint32_t lso:1; 1694b2b84680Smikeb uint32_t cast_enc:2; 1695b2b84680Smikeb uint32_t rsvd1:5; 1696b2b84680Smikeb /* dw 2 */ 1697b2b84680Smikeb uint32_t rsvd2; 1698b2b84680Smikeb /* dw 3 */ 1699b2b84680Smikeb uint32_t num_pkts:16; 1700b2b84680Smikeb uint32_t wq_id:11; 1701b2b84680Smikeb uint32_t rsvd3:4; 1702b2b84680Smikeb uint32_t valid:1; 1703b2b84680Smikeb #endif 1704b2b84680Smikeb } s; 1705b2b84680Smikeb uint32_t dw[4]; 1706b2b84680Smikeb } u0; 1707b2b84680Smikeb } __packed; 17087d5bbea0Smikeb #define WQ_CQE_VALID(_cqe) ((_cqe)->u0.dw[3]) 17097d5bbea0Smikeb #define WQ_CQE_INVALIDATE(_cqe) ((_cqe)->u0.dw[3] = 0) 1710b2b84680Smikeb 1711b2b84680Smikeb /* Receive Queue Entry (RQE) */ 1712b2b84680Smikeb struct oce_nic_rqe { 1713b2b84680Smikeb union { 1714b2b84680Smikeb struct { 1715b2b84680Smikeb uint32_t frag_pa_hi; 1716b2b84680Smikeb uint32_t frag_pa_lo; 1717b2b84680Smikeb } s; 1718b2b84680Smikeb uint32_t dw[2]; 1719b2b84680Smikeb } u0; 1720b2b84680Smikeb } __packed; 1721b2b84680Smikeb 1722b2b84680Smikeb /* NIC Receive CQE */ 1723b2b84680Smikeb struct oce_nic_rx_cqe { 1724b2b84680Smikeb union { 1725b2b84680Smikeb struct { 1726b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 1727b2b84680Smikeb /* dw 0 */ 1728b2b84680Smikeb uint32_t ip_options:1; 1729b2b84680Smikeb uint32_t port:1; 1730b2b84680Smikeb uint32_t pkt_size:14; 1731b2b84680Smikeb uint32_t vlan_tag:16; 1732b2b84680Smikeb /* dw 1 */ 1733b2b84680Smikeb uint32_t num_fragments:3; 1734b2b84680Smikeb uint32_t switched:1; 1735b2b84680Smikeb uint32_t ct:2; 1736b2b84680Smikeb uint32_t frag_index:10; 1737b2b84680Smikeb uint32_t rsvd0:1; 1738b2b84680Smikeb uint32_t vlan_tag_present:1; 1739b2b84680Smikeb uint32_t mac_dst:6; 1740b2b84680Smikeb uint32_t ip_ver:1; 1741b2b84680Smikeb uint32_t l4_cksum_pass:1; 1742b2b84680Smikeb uint32_t ip_cksum_pass:1; 1743b2b84680Smikeb uint32_t udpframe:1; 1744b2b84680Smikeb uint32_t tcpframe:1; 1745b2b84680Smikeb uint32_t ipframe:1; 1746b2b84680Smikeb uint32_t rss_hp:1; 1747b2b84680Smikeb uint32_t error:1; 1748b2b84680Smikeb /* dw 2 */ 1749b2b84680Smikeb uint32_t valid:1; 1750b2b84680Smikeb uint32_t hds_type:2; 1751b2b84680Smikeb uint32_t lro_pkt:1; 1752b2b84680Smikeb uint32_t rsvd4:1; 1753b2b84680Smikeb uint32_t hds_hdr_size:12; 1754b2b84680Smikeb uint32_t hds_hdr_frag_index:10; 1755b2b84680Smikeb uint32_t rss_bank:1; 1756b2b84680Smikeb uint32_t qnq:1; 1757b2b84680Smikeb uint32_t pkt_type:2; 1758b2b84680Smikeb uint32_t rss_flush:1; 1759b2b84680Smikeb /* dw 3 */ 1760b2b84680Smikeb uint32_t rss_hash_value; 1761b2b84680Smikeb #else 1762b2b84680Smikeb /* dw 0 */ 1763b2b84680Smikeb uint32_t vlan_tag:16; 1764b2b84680Smikeb uint32_t pkt_size:14; 1765b2b84680Smikeb uint32_t port:1; 1766b2b84680Smikeb uint32_t ip_options:1; 1767b2b84680Smikeb /* dw 1 */ 1768b2b84680Smikeb uint32_t error:1; 1769b2b84680Smikeb uint32_t rss_hp:1; 1770b2b84680Smikeb uint32_t ipframe:1; 1771b2b84680Smikeb uint32_t tcpframe:1; 1772b2b84680Smikeb uint32_t udpframe:1; 1773b2b84680Smikeb uint32_t ip_cksum_pass:1; 1774b2b84680Smikeb uint32_t l4_cksum_pass:1; 1775b2b84680Smikeb uint32_t ip_ver:1; 1776b2b84680Smikeb uint32_t mac_dst:6; 1777b2b84680Smikeb uint32_t vlan_tag_present:1; 1778b2b84680Smikeb uint32_t rsvd0:1; 1779b2b84680Smikeb uint32_t frag_index:10; 1780b2b84680Smikeb uint32_t ct:2; 1781b2b84680Smikeb uint32_t switched:1; 1782b2b84680Smikeb uint32_t num_fragments:3; 1783b2b84680Smikeb /* dw 2 */ 1784b2b84680Smikeb uint32_t rss_flush:1; 1785b2b84680Smikeb uint32_t pkt_type:2; 1786b2b84680Smikeb uint32_t qnq:1; 1787b2b84680Smikeb uint32_t rss_bank:1; 1788b2b84680Smikeb uint32_t hds_hdr_frag_index:10; 1789b2b84680Smikeb uint32_t hds_hdr_size:12; 1790b2b84680Smikeb uint32_t rsvd4:1; 1791b2b84680Smikeb uint32_t lro_pkt:1; 1792b2b84680Smikeb uint32_t hds_type:2; 1793b2b84680Smikeb uint32_t valid:1; 1794b2b84680Smikeb /* dw 3 */ 1795b2b84680Smikeb uint32_t rss_hash_value; 1796b2b84680Smikeb #endif 1797b2b84680Smikeb } s; 1798b2b84680Smikeb uint32_t dw[4]; 1799b2b84680Smikeb } u0; 1800b2b84680Smikeb } __packed; 1801b2b84680Smikeb 1802b2b84680Smikeb /* NIC Receive CQE_v1 */ 1803b2b84680Smikeb struct oce_nic_rx_cqe_v1 { 1804b2b84680Smikeb union { 1805b2b84680Smikeb struct { 1806b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 1807b2b84680Smikeb /* dw 0 */ 1808b2b84680Smikeb uint32_t ip_options:1; 1809b2b84680Smikeb uint32_t vlan_tag_present:1; 1810b2b84680Smikeb uint32_t pkt_size:14; 1811b2b84680Smikeb uint32_t vlan_tag:16; 1812b2b84680Smikeb /* dw 1 */ 1813b2b84680Smikeb uint32_t num_fragments:3; 1814b2b84680Smikeb uint32_t switched:1; 1815b2b84680Smikeb uint32_t ct:2; 1816b2b84680Smikeb uint32_t frag_index:10; 1817b2b84680Smikeb uint32_t rsvd0:1; 1818b2b84680Smikeb uint32_t mac_dst:7; 1819b2b84680Smikeb uint32_t ip_ver:1; 1820b2b84680Smikeb uint32_t l4_cksum_pass:1; 1821b2b84680Smikeb uint32_t ip_cksum_pass:1; 1822b2b84680Smikeb uint32_t udpframe:1; 1823b2b84680Smikeb uint32_t tcpframe:1; 1824b2b84680Smikeb uint32_t ipframe:1; 1825b2b84680Smikeb uint32_t rss_hp:1; 1826b2b84680Smikeb uint32_t error:1; 1827b2b84680Smikeb /* dw 2 */ 1828b2b84680Smikeb uint32_t valid:1; 1829b2b84680Smikeb uint32_t rsvd4:13; 1830b2b84680Smikeb uint32_t hds_hdr_size:2; 1831b2b84680Smikeb uint32_t hds_hdr_frag_index:8; 1832b2b84680Smikeb uint32_t vlantag:1; 1833b2b84680Smikeb uint32_t port:2; 1834b2b84680Smikeb uint32_t rss_bank:1; 1835b2b84680Smikeb uint32_t qnq:1; 1836b2b84680Smikeb uint32_t pkt_type:2; 1837b2b84680Smikeb uint32_t rss_flush:1; 1838b2b84680Smikeb /* dw 3 */ 1839b2b84680Smikeb uint32_t rss_hash_value; 1840b2b84680Smikeb #else 1841b2b84680Smikeb /* dw 0 */ 1842b2b84680Smikeb uint32_t vlan_tag:16; 1843b2b84680Smikeb uint32_t pkt_size:14; 1844b2b84680Smikeb uint32_t vlan_tag_present:1; 1845b2b84680Smikeb uint32_t ip_options:1; 1846b2b84680Smikeb /* dw 1 */ 1847b2b84680Smikeb uint32_t error:1; 1848b2b84680Smikeb uint32_t rss_hp:1; 1849b2b84680Smikeb uint32_t ipframe:1; 1850b2b84680Smikeb uint32_t tcpframe:1; 1851b2b84680Smikeb uint32_t udpframe:1; 1852b2b84680Smikeb uint32_t ip_cksum_pass:1; 1853b2b84680Smikeb uint32_t l4_cksum_pass:1; 1854b2b84680Smikeb uint32_t ip_ver:1; 1855b2b84680Smikeb uint32_t mac_dst:7; 1856b2b84680Smikeb uint32_t rsvd0:1; 1857b2b84680Smikeb uint32_t frag_index:10; 1858b2b84680Smikeb uint32_t ct:2; 1859b2b84680Smikeb uint32_t switched:1; 1860b2b84680Smikeb uint32_t num_fragments:3; 1861b2b84680Smikeb /* dw 2 */ 1862b2b84680Smikeb uint32_t rss_flush:1; 1863b2b84680Smikeb uint32_t pkt_type:2; 1864b2b84680Smikeb uint32_t qnq:1; 1865b2b84680Smikeb uint32_t rss_bank:1; 1866b2b84680Smikeb uint32_t port:2; 1867b2b84680Smikeb uint32_t vlantag:1; 1868b2b84680Smikeb uint32_t hds_hdr_frag_index:8; 1869b2b84680Smikeb uint32_t hds_hdr_size:2; 1870b2b84680Smikeb uint32_t rsvd4:13; 1871b2b84680Smikeb uint32_t valid:1; 1872b2b84680Smikeb /* dw 3 */ 1873b2b84680Smikeb uint32_t rss_hash_value; 1874b2b84680Smikeb #endif 1875b2b84680Smikeb } s; 1876b2b84680Smikeb uint32_t dw[4]; 1877b2b84680Smikeb } u0; 1878b2b84680Smikeb } __packed; 1879b2b84680Smikeb 18807d5bbea0Smikeb #define RQ_CQE_VALID(_cqe) ((_cqe)->u0.dw[2]) 18817d5bbea0Smikeb #define RQ_CQE_INVALIDATE(_cqe) ((_cqe)->u0.dw[2] = 0) 1882b2b84680Smikeb 1883b2b84680Smikeb struct mbx_config_nic_promiscuous { 1884b2b84680Smikeb struct mbx_hdr hdr; 1885b2b84680Smikeb union { 1886b2b84680Smikeb struct { 1887b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 1888b2b84680Smikeb uint16_t rsvd0; 1889b2b84680Smikeb uint8_t port1_promisc; 1890b2b84680Smikeb uint8_t port0_promisc; 1891b2b84680Smikeb #else 1892b2b84680Smikeb uint8_t port0_promisc; 1893b2b84680Smikeb uint8_t port1_promisc; 1894b2b84680Smikeb uint16_t rsvd0; 1895b2b84680Smikeb #endif 1896b2b84680Smikeb } req; 1897b2b84680Smikeb 1898b2b84680Smikeb struct { 1899b2b84680Smikeb uint32_t rsvd0; 1900b2b84680Smikeb } rsp; 1901b2b84680Smikeb } params; 1902b2b84680Smikeb } __packed; 1903b2b84680Smikeb 1904b2b84680Smikeb union oce_wq_ctx { 1905b2b84680Smikeb uint32_t dw[17]; 1906b2b84680Smikeb struct { 1907b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 1908b2b84680Smikeb /* dw4 */ 1909b2b84680Smikeb uint32_t dw4rsvd2:8; 1910b2b84680Smikeb uint32_t nic_wq_type:8; 1911b2b84680Smikeb uint32_t dw4rsvd1:8; 1912b2b84680Smikeb uint32_t num_pages:8; 1913b2b84680Smikeb /* dw5 */ 1914b2b84680Smikeb uint32_t dw5rsvd2:12; 1915b2b84680Smikeb uint32_t wq_size:4; 1916b2b84680Smikeb uint32_t dw5rsvd1:16; 1917b2b84680Smikeb /* dw6 */ 1918b2b84680Smikeb uint32_t valid:1; 1919b2b84680Smikeb uint32_t dw6rsvd1:31; 1920b2b84680Smikeb /* dw7 */ 1921b2b84680Smikeb uint32_t dw7rsvd1:16; 1922b2b84680Smikeb uint32_t cq_id:16; 1923b2b84680Smikeb #else 1924b2b84680Smikeb /* dw4 */ 1925b2b84680Smikeb uint32_t num_pages:8; 1926b2b84680Smikeb #if 0 1927b2b84680Smikeb uint32_t dw4rsvd1:8; 1928b2b84680Smikeb #else 1929b2b84680Smikeb /* PSP: this workaround is not documented: fill 0x01 for ulp_mask */ 1930b2b84680Smikeb uint32_t ulp_mask:8; 1931b2b84680Smikeb #endif 1932b2b84680Smikeb uint32_t nic_wq_type:8; 1933b2b84680Smikeb uint32_t dw4rsvd2:8; 1934b2b84680Smikeb /* dw5 */ 1935b2b84680Smikeb uint32_t dw5rsvd1:16; 1936b2b84680Smikeb uint32_t wq_size:4; 1937b2b84680Smikeb uint32_t dw5rsvd2:12; 1938b2b84680Smikeb /* dw6 */ 1939b2b84680Smikeb uint32_t dw6rsvd1:31; 1940b2b84680Smikeb uint32_t valid:1; 1941b2b84680Smikeb /* dw7 */ 1942b2b84680Smikeb uint32_t cq_id:16; 1943b2b84680Smikeb uint32_t dw7rsvd1:16; 1944b2b84680Smikeb #endif 1945b2b84680Smikeb /* dw8 - dw20 */ 1946b2b84680Smikeb uint32_t dw8_20rsvd1[13]; 1947b2b84680Smikeb } v0; 1948b2b84680Smikeb struct { 1949b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 1950b2b84680Smikeb /* dw4 */ 1951b2b84680Smikeb uint32_t dw4rsvd2:8; 1952b2b84680Smikeb uint32_t nic_wq_type:8; 1953b2b84680Smikeb uint32_t dw4rsvd1:8; 1954b2b84680Smikeb uint32_t num_pages:8; 1955b2b84680Smikeb /* dw5 */ 1956b2b84680Smikeb uint32_t dw5rsvd2:12; 1957b2b84680Smikeb uint32_t wq_size:4; 1958b2b84680Smikeb uint32_t iface_id:16; 1959b2b84680Smikeb /* dw6 */ 1960b2b84680Smikeb uint32_t valid:1; 1961b2b84680Smikeb uint32_t dw6rsvd1:31; 1962b2b84680Smikeb /* dw7 */ 1963b2b84680Smikeb uint32_t dw7rsvd1:16; 1964b2b84680Smikeb uint32_t cq_id:16; 1965b2b84680Smikeb #else 1966b2b84680Smikeb /* dw4 */ 1967b2b84680Smikeb uint32_t num_pages:8; 1968b2b84680Smikeb uint32_t dw4rsvd1:8; 1969b2b84680Smikeb uint32_t nic_wq_type:8; 1970b2b84680Smikeb uint32_t dw4rsvd2:8; 1971b2b84680Smikeb /* dw5 */ 1972b2b84680Smikeb uint32_t iface_id:16; 1973b2b84680Smikeb uint32_t wq_size:4; 1974b2b84680Smikeb uint32_t dw5rsvd2:12; 1975b2b84680Smikeb /* dw6 */ 1976b2b84680Smikeb uint32_t dw6rsvd1:31; 1977b2b84680Smikeb uint32_t valid:1; 1978b2b84680Smikeb /* dw7 */ 1979b2b84680Smikeb uint32_t cq_id:16; 1980b2b84680Smikeb uint32_t dw7rsvd1:16; 1981b2b84680Smikeb #endif 1982b2b84680Smikeb /* dw8 - dw20 */ 1983b2b84680Smikeb uint32_t dw8_20rsvd1[13]; 1984b2b84680Smikeb } v1; 1985b2b84680Smikeb } __packed; 1986b2b84680Smikeb 1987b2b84680Smikeb /** 1988b2b84680Smikeb * @brief [07] NIC_CREATE_WQ 1989b2b84680Smikeb * @note 1990b2b84680Smikeb * Lancer requires an InterfaceID to be specified with every WQ. This 1991b2b84680Smikeb * is the basis for NIC IOV where the Interface maps to a vPort and maps 1992b2b84680Smikeb * to both Tx and Rx sides. 1993b2b84680Smikeb */ 1994b2b84680Smikeb #define OCE_WQ_TYPE_FORWARDING 0x1 /* wq forwards pkts to TOE */ 1995b2b84680Smikeb #define OCE_WQ_TYPE_STANDARD 0x2 /* wq sends network pkts */ 1996b2b84680Smikeb struct mbx_create_nic_wq { 1997b2b84680Smikeb struct mbx_hdr hdr; 1998b2b84680Smikeb union { 1999b2b84680Smikeb struct { 2000b2b84680Smikeb uint8_t num_pages; 2001b2b84680Smikeb uint8_t ulp_num; 2002b2b84680Smikeb uint16_t nic_wq_type; 2003b2b84680Smikeb uint16_t if_id; 2004b2b84680Smikeb uint8_t wq_size; 2005b2b84680Smikeb uint8_t rsvd1; 2006b2b84680Smikeb uint32_t rsvd2; 2007b2b84680Smikeb uint16_t cq_id; 2008b2b84680Smikeb uint16_t rsvd3; 2009b2b84680Smikeb uint32_t rsvd4[13]; 20109ec9e807Smikeb struct oce_pa pages[8]; 2011b2b84680Smikeb } req; 2012b2b84680Smikeb 2013b2b84680Smikeb struct { 2014b2b84680Smikeb uint16_t wq_id; 2015b2b84680Smikeb uint16_t rid; 2016b2b84680Smikeb uint32_t db_offset; 2017b2b84680Smikeb uint8_t tc_id; 2018b2b84680Smikeb uint8_t rsvd0[3]; 2019b2b84680Smikeb } rsp; 2020b2b84680Smikeb } params; 2021b2b84680Smikeb } __packed; 2022b2b84680Smikeb 2023b2b84680Smikeb /* [09] NIC_DELETE_WQ */ 2024b2b84680Smikeb struct mbx_delete_nic_wq { 2025b2b84680Smikeb /* dw0 - dw3 */ 2026b2b84680Smikeb struct mbx_hdr hdr; 2027b2b84680Smikeb union { 2028b2b84680Smikeb struct { 2029b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 2030b2b84680Smikeb /* dw4 */ 2031b2b84680Smikeb uint16_t rsvd0; 2032b2b84680Smikeb uint16_t wq_id; 2033b2b84680Smikeb #else 2034b2b84680Smikeb /* dw4 */ 2035b2b84680Smikeb uint16_t wq_id; 2036b2b84680Smikeb uint16_t rsvd0; 2037b2b84680Smikeb #endif 2038b2b84680Smikeb } req; 2039b2b84680Smikeb struct { 2040b2b84680Smikeb uint32_t rsvd0; 2041b2b84680Smikeb } rsp; 2042b2b84680Smikeb } params; 2043b2b84680Smikeb } __packed; 2044b2b84680Smikeb 2045b2b84680Smikeb struct mbx_create_nic_rq { 2046b2b84680Smikeb struct mbx_hdr hdr; 2047b2b84680Smikeb union { 2048b2b84680Smikeb struct { 2049b2b84680Smikeb uint16_t cq_id; 2050b2b84680Smikeb uint8_t frag_size; 2051b2b84680Smikeb uint8_t num_pages; 20529ec9e807Smikeb struct oce_pa pages[2]; 2053b2b84680Smikeb uint32_t if_id; 2054b2b84680Smikeb uint16_t max_frame_size; 2055b2b84680Smikeb uint16_t page_size; 2056b2b84680Smikeb uint32_t is_rss_queue; 2057b2b84680Smikeb } req; 2058b2b84680Smikeb 2059b2b84680Smikeb struct { 2060b2b84680Smikeb uint16_t rq_id; 2061b2b84680Smikeb uint8_t rss_cpuid; 2062b2b84680Smikeb uint8_t rsvd0; 2063b2b84680Smikeb } rsp; 2064b2b84680Smikeb } params; 2065b2b84680Smikeb } __packed; 2066b2b84680Smikeb 2067b2b84680Smikeb /* [10] NIC_DELETE_RQ */ 2068b2b84680Smikeb struct mbx_delete_nic_rq { 2069b2b84680Smikeb /* dw0 - dw3 */ 2070b2b84680Smikeb struct mbx_hdr hdr; 2071b2b84680Smikeb union { 2072b2b84680Smikeb struct { 2073b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 2074b2b84680Smikeb /* dw4 */ 2075b2b84680Smikeb uint16_t bypass_flush; 2076b2b84680Smikeb uint16_t rq_id; 2077b2b84680Smikeb #else 2078b2b84680Smikeb /* dw4 */ 2079b2b84680Smikeb uint16_t rq_id; 2080b2b84680Smikeb uint16_t bypass_flush; 2081b2b84680Smikeb #endif 2082b2b84680Smikeb } req; 2083b2b84680Smikeb 2084b2b84680Smikeb struct { 2085b2b84680Smikeb /* dw4 */ 2086b2b84680Smikeb uint32_t rsvd0; 2087b2b84680Smikeb } rsp; 2088b2b84680Smikeb } params; 2089b2b84680Smikeb } __packed; 2090b2b84680Smikeb 2091b2b84680Smikeb struct oce_port_rxf_stats_v0 { 2092b2b84680Smikeb uint32_t rx_bytes_lsd; /* dword 0*/ 2093b2b84680Smikeb uint32_t rx_bytes_msd; /* dword 1*/ 2094b2b84680Smikeb uint32_t rx_total_frames; /* dword 2*/ 2095b2b84680Smikeb uint32_t rx_unicast_frames; /* dword 3*/ 2096b2b84680Smikeb uint32_t rx_multicast_frames; /* dword 4*/ 2097b2b84680Smikeb uint32_t rx_broadcast_frames; /* dword 5*/ 2098b2b84680Smikeb uint32_t rx_crc_errors; /* dword 6*/ 2099b2b84680Smikeb uint32_t rx_alignment_symbol_errors; /* dword 7*/ 2100b2b84680Smikeb uint32_t rx_pause_frames; /* dword 8*/ 2101b2b84680Smikeb uint32_t rx_control_frames; /* dword 9*/ 2102b2b84680Smikeb uint32_t rx_in_range_errors; /* dword 10*/ 2103b2b84680Smikeb uint32_t rx_out_range_errors; /* dword 11*/ 2104b2b84680Smikeb uint32_t rx_frame_too_long; /* dword 12*/ 2105b2b84680Smikeb uint32_t rx_address_match_errors; /* dword 13*/ 2106b2b84680Smikeb uint32_t rx_vlan_mismatch; /* dword 14*/ 2107b2b84680Smikeb uint32_t rx_dropped_too_small; /* dword 15*/ 2108b2b84680Smikeb uint32_t rx_dropped_too_short; /* dword 16*/ 2109b2b84680Smikeb uint32_t rx_dropped_header_too_small; /* dword 17*/ 2110b2b84680Smikeb uint32_t rx_dropped_tcp_length; /* dword 18*/ 2111b2b84680Smikeb uint32_t rx_dropped_runt; /* dword 19*/ 2112b2b84680Smikeb uint32_t rx_64_byte_packets; /* dword 20*/ 2113b2b84680Smikeb uint32_t rx_65_127_byte_packets; /* dword 21*/ 2114b2b84680Smikeb uint32_t rx_128_256_byte_packets; /* dword 22*/ 2115b2b84680Smikeb uint32_t rx_256_511_byte_packets; /* dword 23*/ 2116b2b84680Smikeb uint32_t rx_512_1023_byte_packets; /* dword 24*/ 2117b2b84680Smikeb uint32_t rx_1024_1518_byte_packets; /* dword 25*/ 2118b2b84680Smikeb uint32_t rx_1519_2047_byte_packets; /* dword 26*/ 2119b2b84680Smikeb uint32_t rx_2048_4095_byte_packets; /* dword 27*/ 2120b2b84680Smikeb uint32_t rx_4096_8191_byte_packets; /* dword 28*/ 2121b2b84680Smikeb uint32_t rx_8192_9216_byte_packets; /* dword 29*/ 2122b2b84680Smikeb uint32_t rx_ip_checksum_errs; /* dword 30*/ 2123b2b84680Smikeb uint32_t rx_tcp_checksum_errs; /* dword 31*/ 2124b2b84680Smikeb uint32_t rx_udp_checksum_errs; /* dword 32*/ 2125b2b84680Smikeb uint32_t rx_non_rss_packets; /* dword 33*/ 2126b2b84680Smikeb uint32_t rx_ipv4_packets; /* dword 34*/ 2127b2b84680Smikeb uint32_t rx_ipv6_packets; /* dword 35*/ 2128b2b84680Smikeb uint32_t rx_ipv4_bytes_lsd; /* dword 36*/ 2129b2b84680Smikeb uint32_t rx_ipv4_bytes_msd; /* dword 37*/ 2130b2b84680Smikeb uint32_t rx_ipv6_bytes_lsd; /* dword 38*/ 2131b2b84680Smikeb uint32_t rx_ipv6_bytes_msd; /* dword 39*/ 2132b2b84680Smikeb uint32_t rx_chute1_packets; /* dword 40*/ 2133b2b84680Smikeb uint32_t rx_chute2_packets; /* dword 41*/ 2134b2b84680Smikeb uint32_t rx_chute3_packets; /* dword 42*/ 2135b2b84680Smikeb uint32_t rx_management_packets; /* dword 43*/ 2136b2b84680Smikeb uint32_t rx_switched_unicast_packets; /* dword 44*/ 2137b2b84680Smikeb uint32_t rx_switched_multicast_packets; /* dword 45*/ 2138b2b84680Smikeb uint32_t rx_switched_broadcast_packets; /* dword 46*/ 2139b2b84680Smikeb uint32_t tx_bytes_lsd; /* dword 47*/ 2140b2b84680Smikeb uint32_t tx_bytes_msd; /* dword 48*/ 2141b2b84680Smikeb uint32_t tx_unicastframes; /* dword 49*/ 2142b2b84680Smikeb uint32_t tx_multicastframes; /* dword 50*/ 2143b2b84680Smikeb uint32_t tx_broadcastframes; /* dword 51*/ 2144b2b84680Smikeb uint32_t tx_pauseframes; /* dword 52*/ 2145b2b84680Smikeb uint32_t tx_controlframes; /* dword 53*/ 2146b2b84680Smikeb uint32_t tx_64_byte_packets; /* dword 54*/ 2147b2b84680Smikeb uint32_t tx_65_127_byte_packets; /* dword 55*/ 2148b2b84680Smikeb uint32_t tx_128_256_byte_packets; /* dword 56*/ 2149b2b84680Smikeb uint32_t tx_256_511_byte_packets; /* dword 57*/ 2150b2b84680Smikeb uint32_t tx_512_1023_byte_packets; /* dword 58*/ 2151b2b84680Smikeb uint32_t tx_1024_1518_byte_packets; /* dword 59*/ 2152b2b84680Smikeb uint32_t tx_1519_2047_byte_packets; /* dword 60*/ 2153b2b84680Smikeb uint32_t tx_2048_4095_byte_packets; /* dword 61*/ 2154b2b84680Smikeb uint32_t tx_4096_8191_byte_packets; /* dword 62*/ 2155b2b84680Smikeb uint32_t tx_8192_9216_byte_packets; /* dword 63*/ 2156b2b84680Smikeb uint32_t rxpp_fifo_overflow_drop; /* dword 64*/ 2157b2b84680Smikeb uint32_t rx_input_fifo_overflow_drop; /* dword 65*/ 2158b2b84680Smikeb } __packed; 2159b2b84680Smikeb 2160b2b84680Smikeb struct oce_rxf_stats_v0 { 2161b2b84680Smikeb struct oce_port_rxf_stats_v0 port[2]; 2162b2b84680Smikeb uint32_t rx_drops_no_pbuf; /* dword 132*/ 2163b2b84680Smikeb uint32_t rx_drops_no_txpb; /* dword 133*/ 2164b2b84680Smikeb uint32_t rx_drops_no_erx_descr; /* dword 134*/ 2165b2b84680Smikeb uint32_t rx_drops_no_tpre_descr; /* dword 135*/ 2166b2b84680Smikeb uint32_t management_rx_port_packets; /* dword 136*/ 2167b2b84680Smikeb uint32_t management_rx_port_bytes; /* dword 137*/ 2168b2b84680Smikeb uint32_t management_rx_port_pause_frames;/* dword 138*/ 2169b2b84680Smikeb uint32_t management_rx_port_errors; /* dword 139*/ 2170b2b84680Smikeb uint32_t management_tx_port_packets; /* dword 140*/ 2171b2b84680Smikeb uint32_t management_tx_port_bytes; /* dword 141*/ 2172b2b84680Smikeb uint32_t management_tx_port_pause; /* dword 142*/ 2173b2b84680Smikeb uint32_t management_rx_port_rxfifo_overflow; /* dword 143*/ 2174b2b84680Smikeb uint32_t rx_drops_too_many_frags; /* dword 144*/ 2175b2b84680Smikeb uint32_t rx_drops_invalid_ring; /* dword 145*/ 2176b2b84680Smikeb uint32_t forwarded_packets; /* dword 146*/ 2177b2b84680Smikeb uint32_t rx_drops_mtu; /* dword 147*/ 2178b2b84680Smikeb uint32_t rsvd0[7]; 2179b2b84680Smikeb uint32_t port0_jabber_events; 2180b2b84680Smikeb uint32_t port1_jabber_events; 2181b2b84680Smikeb uint32_t rsvd1[6]; 2182b2b84680Smikeb } __packed; 2183b2b84680Smikeb 2184b2b84680Smikeb struct oce_port_rxf_stats_v1 { 2185b2b84680Smikeb uint32_t rsvd0[12]; 2186b2b84680Smikeb uint32_t rx_crc_errors; 2187b2b84680Smikeb uint32_t rx_alignment_symbol_errors; 2188b2b84680Smikeb uint32_t rx_pause_frames; 2189b2b84680Smikeb uint32_t rx_priority_pause_frames; 2190b2b84680Smikeb uint32_t rx_control_frames; 2191b2b84680Smikeb uint32_t rx_in_range_errors; 2192b2b84680Smikeb uint32_t rx_out_range_errors; 2193b2b84680Smikeb uint32_t rx_frame_too_long; 2194b2b84680Smikeb uint32_t rx_address_match_errors; 2195b2b84680Smikeb uint32_t rx_dropped_too_small; 2196b2b84680Smikeb uint32_t rx_dropped_too_short; 2197b2b84680Smikeb uint32_t rx_dropped_header_too_small; 2198b2b84680Smikeb uint32_t rx_dropped_tcp_length; 2199b2b84680Smikeb uint32_t rx_dropped_runt; 2200b2b84680Smikeb uint32_t rsvd1[10]; 2201b2b84680Smikeb uint32_t rx_ip_checksum_errs; 2202b2b84680Smikeb uint32_t rx_tcp_checksum_errs; 2203b2b84680Smikeb uint32_t rx_udp_checksum_errs; 2204b2b84680Smikeb uint32_t rsvd2[7]; 2205b2b84680Smikeb uint32_t rx_switched_unicast_packets; 2206b2b84680Smikeb uint32_t rx_switched_multicast_packets; 2207b2b84680Smikeb uint32_t rx_switched_broadcast_packets; 2208b2b84680Smikeb uint32_t rsvd3[3]; 2209b2b84680Smikeb uint32_t tx_pauseframes; 2210b2b84680Smikeb uint32_t tx_priority_pauseframes; 2211b2b84680Smikeb uint32_t tx_controlframes; 2212b2b84680Smikeb uint32_t rsvd4[10]; 2213b2b84680Smikeb uint32_t rxpp_fifo_overflow_drop; 2214b2b84680Smikeb uint32_t rx_input_fifo_overflow_drop; 2215b2b84680Smikeb uint32_t pmem_fifo_overflow_drop; 2216b2b84680Smikeb uint32_t jabber_events; 2217b2b84680Smikeb uint32_t rsvd5[3]; 2218b2b84680Smikeb } __packed; 2219b2b84680Smikeb 2220b2b84680Smikeb struct oce_rxf_stats_v1 { 2221b2b84680Smikeb struct oce_port_rxf_stats_v1 port[4]; 2222b2b84680Smikeb uint32_t rsvd0[2]; 2223b2b84680Smikeb uint32_t rx_drops_no_pbuf; 2224b2b84680Smikeb uint32_t rx_drops_no_txpb; 2225b2b84680Smikeb uint32_t rx_drops_no_erx_descr; 2226b2b84680Smikeb uint32_t rx_drops_no_tpre_descr; 2227b2b84680Smikeb uint32_t rsvd1[6]; 2228b2b84680Smikeb uint32_t rx_drops_too_many_frags; 2229b2b84680Smikeb uint32_t rx_drops_invalid_ring; 2230b2b84680Smikeb uint32_t forwarded_packets; 2231b2b84680Smikeb uint32_t rx_drops_mtu; 2232b2b84680Smikeb uint32_t rsvd2[14]; 2233b2b84680Smikeb } __packed; 2234b2b84680Smikeb 2235b2b84680Smikeb struct oce_erx_stats_v1 { 2236b2b84680Smikeb uint32_t rx_drops_no_fragments[68]; 2237b2b84680Smikeb uint32_t rsvd[4]; 2238b2b84680Smikeb } __packed; 2239b2b84680Smikeb 2240b2b84680Smikeb 2241b2b84680Smikeb struct oce_erx_stats_v0 { 2242b2b84680Smikeb uint32_t rx_drops_no_fragments[44]; 2243b2b84680Smikeb uint32_t rsvd[4]; 2244b2b84680Smikeb } __packed; 2245b2b84680Smikeb 2246b2b84680Smikeb struct oce_pmem_stats { 2247b2b84680Smikeb uint32_t eth_red_drops; 2248b2b84680Smikeb uint32_t rsvd[5]; 2249b2b84680Smikeb } __packed; 2250b2b84680Smikeb 2251b2b84680Smikeb struct oce_hw_stats_v1 { 2252b2b84680Smikeb struct oce_rxf_stats_v1 rxf; 2253b2b84680Smikeb uint32_t rsvd0[OCE_TXP_SW_SZ]; 2254b2b84680Smikeb struct oce_erx_stats_v1 erx; 2255b2b84680Smikeb struct oce_pmem_stats pmem; 2256b2b84680Smikeb uint32_t rsvd1[18]; 2257b2b84680Smikeb } __packed; 2258b2b84680Smikeb 2259b2b84680Smikeb struct oce_hw_stats_v0 { 2260b2b84680Smikeb struct oce_rxf_stats_v0 rxf; 2261b2b84680Smikeb uint32_t rsvd[48]; 2262b2b84680Smikeb struct oce_erx_stats_v0 erx; 2263b2b84680Smikeb struct oce_pmem_stats pmem; 2264b2b84680Smikeb } __packed; 2265b2b84680Smikeb 2266b2b84680Smikeb struct mbx_get_nic_stats_v0 { 2267b2b84680Smikeb struct mbx_hdr hdr; 2268b2b84680Smikeb union { 2269b2b84680Smikeb struct { 2270b2b84680Smikeb uint32_t rsvd0; 2271b2b84680Smikeb } req; 2272b2b84680Smikeb 2273b2b84680Smikeb union { 2274b2b84680Smikeb struct oce_hw_stats_v0 stats; 2275b2b84680Smikeb } rsp; 2276b2b84680Smikeb } params; 2277b2b84680Smikeb } __packed; 2278b2b84680Smikeb 2279b2b84680Smikeb struct mbx_get_nic_stats { 2280b2b84680Smikeb struct mbx_hdr hdr; 2281b2b84680Smikeb union { 2282b2b84680Smikeb struct { 2283b2b84680Smikeb uint32_t rsvd0; 2284b2b84680Smikeb } req; 2285b2b84680Smikeb 2286b2b84680Smikeb struct { 2287b2b84680Smikeb struct oce_hw_stats_v1 stats; 2288b2b84680Smikeb } rsp; 2289b2b84680Smikeb } params; 2290b2b84680Smikeb } __packed; 2291b2b84680Smikeb 2292b2b84680Smikeb /* [18(0x12)] NIC_GET_PPORT_STATS */ 2293b2b84680Smikeb struct oce_pport_stats { 2294b2b84680Smikeb uint64_t tx_pkts; 2295b2b84680Smikeb uint64_t tx_unicast_pkts; 2296b2b84680Smikeb uint64_t tx_multicast_pkts; 2297b2b84680Smikeb uint64_t tx_broadcast_pkts; 2298b2b84680Smikeb uint64_t tx_bytes; 2299b2b84680Smikeb uint64_t tx_unicast_bytes; 2300b2b84680Smikeb uint64_t tx_multicast_bytes; 2301b2b84680Smikeb uint64_t tx_broadcast_bytes; 2302b2b84680Smikeb uint64_t tx_discards; 2303b2b84680Smikeb uint64_t tx_errors; 2304b2b84680Smikeb uint64_t tx_pause_frames; 2305b2b84680Smikeb uint64_t tx_pause_on_frames; 2306b2b84680Smikeb uint64_t tx_pause_off_frames; 2307b2b84680Smikeb uint64_t tx_internal_mac_errors; 2308b2b84680Smikeb uint64_t tx_control_frames; 2309b2b84680Smikeb uint64_t tx_pkts_64_bytes; 2310b2b84680Smikeb uint64_t tx_pkts_65_to_127_bytes; 2311b2b84680Smikeb uint64_t tx_pkts_128_to_255_bytes; 2312b2b84680Smikeb uint64_t tx_pkts_256_to_511_bytes; 2313b2b84680Smikeb uint64_t tx_pkts_512_to_1023_bytes; 2314b2b84680Smikeb uint64_t tx_pkts_1024_to_1518_bytes; 2315b2b84680Smikeb uint64_t tx_pkts_1519_to_2047_bytes; 2316b2b84680Smikeb uint64_t tx_pkts_2048_to_4095_bytes; 2317b2b84680Smikeb uint64_t tx_pkts_4096_to_8191_bytes; 2318b2b84680Smikeb uint64_t tx_pkts_8192_to_9216_bytes; 2319b2b84680Smikeb uint64_t tx_lso_pkts; 2320b2b84680Smikeb uint64_t rx_pkts; 2321b2b84680Smikeb uint64_t rx_unicast_pkts; 2322b2b84680Smikeb uint64_t rx_multicast_pkts; 2323b2b84680Smikeb uint64_t rx_broadcast_pkts; 2324b2b84680Smikeb uint64_t rx_bytes; 2325b2b84680Smikeb uint64_t rx_unicast_bytes; 2326b2b84680Smikeb uint64_t rx_multicast_bytes; 2327b2b84680Smikeb uint64_t rx_broadcast_bytes; 2328b2b84680Smikeb uint32_t rx_unknown_protos; 2329b2b84680Smikeb uint32_t reserved_word69; 2330b2b84680Smikeb uint64_t rx_discards; 2331b2b84680Smikeb uint64_t rx_errors; 2332b2b84680Smikeb uint64_t rx_crc_errors; 2333b2b84680Smikeb uint64_t rx_alignment_errors; 2334b2b84680Smikeb uint64_t rx_symbol_errors; 2335b2b84680Smikeb uint64_t rx_pause_frames; 2336b2b84680Smikeb uint64_t rx_pause_on_frames; 2337b2b84680Smikeb uint64_t rx_pause_off_frames; 2338b2b84680Smikeb uint64_t rx_frames_too_long; 2339b2b84680Smikeb uint64_t rx_internal_mac_errors; 2340b2b84680Smikeb uint32_t rx_undersize_pkts; 2341b2b84680Smikeb uint32_t rx_oversize_pkts; 2342b2b84680Smikeb uint32_t rx_fragment_pkts; 2343b2b84680Smikeb uint32_t rx_jabbers; 2344b2b84680Smikeb uint64_t rx_control_frames; 2345b2b84680Smikeb uint64_t rx_control_frames_unknown_opcode; 2346b2b84680Smikeb uint32_t rx_in_range_errors; 2347b2b84680Smikeb uint32_t rx_out_of_range_errors; 2348b2b84680Smikeb uint32_t rx_address_match_errors; 2349b2b84680Smikeb uint32_t rx_vlan_mismatch_errors; 2350b2b84680Smikeb uint32_t rx_dropped_too_small; 2351b2b84680Smikeb uint32_t rx_dropped_too_short; 2352b2b84680Smikeb uint32_t rx_dropped_header_too_small; 2353b2b84680Smikeb uint32_t rx_dropped_invalid_tcp_length; 2354b2b84680Smikeb uint32_t rx_dropped_runt; 2355b2b84680Smikeb uint32_t rx_ip_checksum_errors; 2356b2b84680Smikeb uint32_t rx_tcp_checksum_errors; 2357b2b84680Smikeb uint32_t rx_udp_checksum_errors; 2358b2b84680Smikeb uint32_t rx_non_rss_pkts; 2359b2b84680Smikeb uint64_t reserved_word111; 2360b2b84680Smikeb uint64_t rx_ipv4_pkts; 2361b2b84680Smikeb uint64_t rx_ipv6_pkts; 2362b2b84680Smikeb uint64_t rx_ipv4_bytes; 2363b2b84680Smikeb uint64_t rx_ipv6_bytes; 2364b2b84680Smikeb uint64_t rx_nic_pkts; 2365b2b84680Smikeb uint64_t rx_tcp_pkts; 2366b2b84680Smikeb uint64_t rx_iscsi_pkts; 2367b2b84680Smikeb uint64_t rx_management_pkts; 2368b2b84680Smikeb uint64_t rx_switched_unicast_pkts; 2369b2b84680Smikeb uint64_t rx_switched_multicast_pkts; 2370b2b84680Smikeb uint64_t rx_switched_broadcast_pkts; 2371b2b84680Smikeb uint64_t num_forwards; 2372b2b84680Smikeb uint32_t rx_fifo_overflow; 2373b2b84680Smikeb uint32_t rx_input_fifo_overflow; 2374b2b84680Smikeb uint64_t rx_drops_too_many_frags; 2375b2b84680Smikeb uint32_t rx_drops_invalid_queue; 2376b2b84680Smikeb uint32_t reserved_word141; 2377b2b84680Smikeb uint64_t rx_drops_mtu; 2378b2b84680Smikeb uint64_t rx_pkts_64_bytes; 2379b2b84680Smikeb uint64_t rx_pkts_65_to_127_bytes; 2380b2b84680Smikeb uint64_t rx_pkts_128_to_255_bytes; 2381b2b84680Smikeb uint64_t rx_pkts_256_to_511_bytes; 2382b2b84680Smikeb uint64_t rx_pkts_512_to_1023_bytes; 2383b2b84680Smikeb uint64_t rx_pkts_1024_to_1518_bytes; 2384b2b84680Smikeb uint64_t rx_pkts_1519_to_2047_bytes; 2385b2b84680Smikeb uint64_t rx_pkts_2048_to_4095_bytes; 2386b2b84680Smikeb uint64_t rx_pkts_4096_to_8191_bytes; 2387b2b84680Smikeb uint64_t rx_pkts_8192_to_9216_bytes; 2388b2b84680Smikeb } __packed; 2389b2b84680Smikeb 2390b2b84680Smikeb struct mbx_get_pport_stats { 2391b2b84680Smikeb /* dw0 - dw3 */ 2392b2b84680Smikeb struct mbx_hdr hdr; 2393b2b84680Smikeb union { 2394b2b84680Smikeb struct { 2395b2b84680Smikeb /* dw4 */ 2396b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 2397b2b84680Smikeb uint32_t reset_stats:8; 2398b2b84680Smikeb uint32_t rsvd0:8; 2399b2b84680Smikeb uint32_t port_number:16; 2400b2b84680Smikeb #else 2401b2b84680Smikeb uint32_t port_number:16; 2402b2b84680Smikeb uint32_t rsvd0:8; 2403b2b84680Smikeb uint32_t reset_stats:8; 2404b2b84680Smikeb #endif 2405b2b84680Smikeb } req; 2406b2b84680Smikeb 2407b2b84680Smikeb union { 2408b2b84680Smikeb struct oce_pport_stats pps; 2409b2b84680Smikeb uint32_t pport_stats[164 - 4 + 1]; 2410b2b84680Smikeb } rsp; 2411b2b84680Smikeb } params; 2412b2b84680Smikeb } __packed; 2413b2b84680Smikeb 2414b2b84680Smikeb /* [19(0x13)] NIC_GET_VPORT_STATS */ 2415b2b84680Smikeb struct oce_vport_stats { 2416b2b84680Smikeb uint64_t tx_pkts; 2417b2b84680Smikeb uint64_t tx_unicast_pkts; 2418b2b84680Smikeb uint64_t tx_multicast_pkts; 2419b2b84680Smikeb uint64_t tx_broadcast_pkts; 2420b2b84680Smikeb uint64_t tx_bytes; 2421b2b84680Smikeb uint64_t tx_unicast_bytes; 2422b2b84680Smikeb uint64_t tx_multicast_bytes; 2423b2b84680Smikeb uint64_t tx_broadcast_bytes; 2424b2b84680Smikeb uint64_t tx_discards; 2425b2b84680Smikeb uint64_t tx_errors; 2426b2b84680Smikeb uint64_t tx_pkts_64_bytes; 2427b2b84680Smikeb uint64_t tx_pkts_65_to_127_bytes; 2428b2b84680Smikeb uint64_t tx_pkts_128_to_255_bytes; 2429b2b84680Smikeb uint64_t tx_pkts_256_to_511_bytes; 2430b2b84680Smikeb uint64_t tx_pkts_512_to_1023_bytes; 2431b2b84680Smikeb uint64_t tx_pkts_1024_to_1518_bytes; 2432b2b84680Smikeb uint64_t tx_pkts_1519_to_9699_bytes; 2433b2b84680Smikeb uint64_t tx_pkts_over_9699_bytes; 2434b2b84680Smikeb uint64_t rx_pkts; 2435b2b84680Smikeb uint64_t rx_unicast_pkts; 2436b2b84680Smikeb uint64_t rx_multicast_pkts; 2437b2b84680Smikeb uint64_t rx_broadcast_pkts; 2438b2b84680Smikeb uint64_t rx_bytes; 2439b2b84680Smikeb uint64_t rx_unicast_bytes; 2440b2b84680Smikeb uint64_t rx_multicast_bytes; 2441b2b84680Smikeb uint64_t rx_broadcast_bytes; 2442b2b84680Smikeb uint64_t rx_discards; 2443b2b84680Smikeb uint64_t rx_errors; 2444b2b84680Smikeb uint64_t rx_pkts_64_bytes; 2445b2b84680Smikeb uint64_t rx_pkts_65_to_127_bytes; 2446b2b84680Smikeb uint64_t rx_pkts_128_to_255_bytes; 2447b2b84680Smikeb uint64_t rx_pkts_256_to_511_bytes; 2448b2b84680Smikeb uint64_t rx_pkts_512_to_1023_bytes; 2449b2b84680Smikeb uint64_t rx_pkts_1024_to_1518_bytes; 2450b2b84680Smikeb uint64_t rx_pkts_1519_to_9699_bytes; 2451b2b84680Smikeb uint64_t rx_pkts_gt_9699_bytes; 2452b2b84680Smikeb } __packed; 2453b2b84680Smikeb struct mbx_get_vport_stats { 2454b2b84680Smikeb /* dw0 - dw3 */ 2455b2b84680Smikeb struct mbx_hdr hdr; 2456b2b84680Smikeb union { 2457b2b84680Smikeb struct { 2458b2b84680Smikeb /* dw4 */ 2459b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 2460b2b84680Smikeb uint32_t reset_stats:8; 2461b2b84680Smikeb uint32_t rsvd0:8; 2462b2b84680Smikeb uint32_t vport_number:16; 2463b2b84680Smikeb #else 2464b2b84680Smikeb uint32_t vport_number:16; 2465b2b84680Smikeb uint32_t rsvd0:8; 2466b2b84680Smikeb uint32_t reset_stats:8; 2467b2b84680Smikeb #endif 2468b2b84680Smikeb } req; 2469b2b84680Smikeb 2470b2b84680Smikeb union { 2471b2b84680Smikeb struct oce_vport_stats vps; 2472b2b84680Smikeb uint32_t vport_stats[75 - 4 + 1]; 2473b2b84680Smikeb } rsp; 2474b2b84680Smikeb } params; 2475b2b84680Smikeb } __packed; 2476b2b84680Smikeb 2477c0000edeSmikeb /* Hash option flags for RSS enable */ 2478c0000edeSmikeb enum RSS_ENABLE_FLAGS { 2479c0000edeSmikeb RSS_ENABLE_NONE = 0x0, /* (No RSS) */ 2480c0000edeSmikeb RSS_ENABLE_IPV4 = 0x1, /* (IPV4 HASH enabled ) */ 2481c0000edeSmikeb RSS_ENABLE_TCP_IPV4 = 0x2, /* (TCP IPV4 Hash enabled) */ 2482c0000edeSmikeb RSS_ENABLE_IPV6 = 0x4, /* (IPV6 HASH enabled) */ 2483c0000edeSmikeb RSS_ENABLE_TCP_IPV6 = 0x8 /* (TCP IPV6 HASH */ 2484c0000edeSmikeb }; 2485b2b84680Smikeb 2486b2b84680Smikeb /* [01] NIC_CONFIG_RSS */ 2487b2b84680Smikeb #define OCE_HASH_TBL_SZ 10 2488b2b84680Smikeb #define OCE_CPU_TBL_SZ 128 2489b2b84680Smikeb #define OCE_FLUSH 1 /* RSS flush completion per CQ port */ 2490b2b84680Smikeb struct mbx_config_nic_rss { 2491b2b84680Smikeb struct mbx_hdr hdr; 2492b2b84680Smikeb union { 2493b2b84680Smikeb struct { 2494b2b84680Smikeb #if _BYTE_ORDER == BIG_ENDIAN 2495b2b84680Smikeb uint32_t if_id; 2496b2b84680Smikeb uint16_t cpu_tbl_sz_log2; 2497b2b84680Smikeb uint16_t enable_rss; 2498b2b84680Smikeb uint32_t hash[OCE_HASH_TBL_SZ]; 2499b2b84680Smikeb uint8_t cputable[OCE_CPU_TBL_SZ]; 2500b2b84680Smikeb uint8_t rsvd[3]; 2501b2b84680Smikeb uint8_t flush; 2502b2b84680Smikeb #else 2503b2b84680Smikeb uint32_t if_id; 2504b2b84680Smikeb uint16_t enable_rss; 2505b2b84680Smikeb uint16_t cpu_tbl_sz_log2; 2506b2b84680Smikeb uint32_t hash[OCE_HASH_TBL_SZ]; 2507b2b84680Smikeb uint8_t cputable[OCE_CPU_TBL_SZ]; 2508b2b84680Smikeb uint8_t flush; 2509b2b84680Smikeb uint8_t rsvd[3]; 2510b2b84680Smikeb #endif 2511b2b84680Smikeb } req; 2512b2b84680Smikeb struct { 2513b2b84680Smikeb uint8_t rsvd[3]; 2514b2b84680Smikeb uint8_t rss_bank; 2515b2b84680Smikeb } rsp; 2516b2b84680Smikeb } params; 2517b2b84680Smikeb } __packed; 2518