1f21fb3edSRaghu Vatsavayi /********************************************************************** 2f21fb3edSRaghu Vatsavayi * Author: Cavium, Inc. 3f21fb3edSRaghu Vatsavayi * 4f21fb3edSRaghu Vatsavayi * Contact: support@cavium.com 5f21fb3edSRaghu Vatsavayi * Please include "LiquidIO" in the subject. 6f21fb3edSRaghu Vatsavayi * 7f21fb3edSRaghu Vatsavayi * Copyright (c) 2003-2015 Cavium, Inc. 8f21fb3edSRaghu Vatsavayi * 9f21fb3edSRaghu Vatsavayi * This file is free software; you can redistribute it and/or modify 10f21fb3edSRaghu Vatsavayi * it under the terms of the GNU General Public License, Version 2, as 11f21fb3edSRaghu Vatsavayi * published by the Free Software Foundation. 12f21fb3edSRaghu Vatsavayi * 13f21fb3edSRaghu Vatsavayi * This file is distributed in the hope that it will be useful, but 14f21fb3edSRaghu Vatsavayi * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty 15f21fb3edSRaghu Vatsavayi * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or 16f21fb3edSRaghu Vatsavayi * NONINFRINGEMENT. See the GNU General Public License for more 17f21fb3edSRaghu Vatsavayi * details. 18f21fb3edSRaghu Vatsavayi * 19f21fb3edSRaghu Vatsavayi * This file may also be available under a different license from Cavium. 20f21fb3edSRaghu Vatsavayi * Contact Cavium, Inc. for more information 21f21fb3edSRaghu Vatsavayi **********************************************************************/ 22f21fb3edSRaghu Vatsavayi 23f21fb3edSRaghu Vatsavayi /*! \file liquidio_common.h 24f21fb3edSRaghu Vatsavayi * \brief Common: Structures and macros used in PCI-NIC package by core and 25f21fb3edSRaghu Vatsavayi * host driver. 26f21fb3edSRaghu Vatsavayi */ 27f21fb3edSRaghu Vatsavayi 28f21fb3edSRaghu Vatsavayi #ifndef __LIQUIDIO_COMMON_H__ 29f21fb3edSRaghu Vatsavayi #define __LIQUIDIO_COMMON_H__ 30f21fb3edSRaghu Vatsavayi 31f21fb3edSRaghu Vatsavayi #include "octeon_config.h" 32f21fb3edSRaghu Vatsavayi 33f21fb3edSRaghu Vatsavayi #define LIQUIDIO_VERSION "1.1.9" 34f21fb3edSRaghu Vatsavayi #define LIQUIDIO_MAJOR_VERSION 1 35f21fb3edSRaghu Vatsavayi #define LIQUIDIO_MINOR_VERSION 1 36f21fb3edSRaghu Vatsavayi #define LIQUIDIO_MICRO_VERSION 9 37f21fb3edSRaghu Vatsavayi 38f21fb3edSRaghu Vatsavayi #define CONTROL_IQ 0 39f21fb3edSRaghu Vatsavayi /** Tag types used by Octeon cores in its work. */ 40f21fb3edSRaghu Vatsavayi enum octeon_tag_type { 41f21fb3edSRaghu Vatsavayi ORDERED_TAG = 0, 42f21fb3edSRaghu Vatsavayi ATOMIC_TAG = 1, 43f21fb3edSRaghu Vatsavayi NULL_TAG = 2, 44f21fb3edSRaghu Vatsavayi NULL_NULL_TAG = 3 45f21fb3edSRaghu Vatsavayi }; 46f21fb3edSRaghu Vatsavayi 47f21fb3edSRaghu Vatsavayi /* pre-defined host->NIC tag values */ 48f21fb3edSRaghu Vatsavayi #define LIO_CONTROL (0x11111110) 49f21fb3edSRaghu Vatsavayi #define LIO_DATA(i) (0x11111111 + (i)) 50f21fb3edSRaghu Vatsavayi 51f21fb3edSRaghu Vatsavayi /* Opcodes used by host driver/apps to perform operations on the core. 52f21fb3edSRaghu Vatsavayi * These are used to identify the major subsystem that the operation 53f21fb3edSRaghu Vatsavayi * is for. 54f21fb3edSRaghu Vatsavayi */ 55f21fb3edSRaghu Vatsavayi #define OPCODE_CORE 0 /* used for generic core operations */ 56f21fb3edSRaghu Vatsavayi #define OPCODE_NIC 1 /* used for NIC operations */ 57f21fb3edSRaghu Vatsavayi #define OPCODE_LAST OPCODE_NIC 58f21fb3edSRaghu Vatsavayi 59f21fb3edSRaghu Vatsavayi /* Subcodes are used by host driver/apps to identify the sub-operation 60f21fb3edSRaghu Vatsavayi * for the core. They only need to by unique for a given subsystem. 61f21fb3edSRaghu Vatsavayi */ 62f21fb3edSRaghu Vatsavayi #define OPCODE_SUBCODE(op, sub) (((op & 0x0f) << 8) | ((sub) & 0x7f)) 63f21fb3edSRaghu Vatsavayi 64f21fb3edSRaghu Vatsavayi /** OPCODE_CORE subcodes. For future use. */ 65f21fb3edSRaghu Vatsavayi 66f21fb3edSRaghu Vatsavayi /** OPCODE_NIC subcodes */ 67f21fb3edSRaghu Vatsavayi 68f21fb3edSRaghu Vatsavayi /* This subcode is sent by core PCI driver to indicate cores are ready. */ 69f21fb3edSRaghu Vatsavayi #define OPCODE_NIC_CORE_DRV_ACTIVE 0x01 70f21fb3edSRaghu Vatsavayi #define OPCODE_NIC_NW_DATA 0x02 /* network packet data */ 71f21fb3edSRaghu Vatsavayi #define OPCODE_NIC_CMD 0x03 72f21fb3edSRaghu Vatsavayi #define OPCODE_NIC_INFO 0x04 73f21fb3edSRaghu Vatsavayi #define OPCODE_NIC_PORT_STATS 0x05 74f21fb3edSRaghu Vatsavayi #define OPCODE_NIC_MDIO45 0x06 75f21fb3edSRaghu Vatsavayi #define OPCODE_NIC_TIMESTAMP 0x07 76f21fb3edSRaghu Vatsavayi #define OPCODE_NIC_INTRMOD_CFG 0x08 77f21fb3edSRaghu Vatsavayi #define OPCODE_NIC_IF_CFG 0x09 78f21fb3edSRaghu Vatsavayi 79f21fb3edSRaghu Vatsavayi #define CORE_DRV_TEST_SCATTER_OP 0xFFF5 80f21fb3edSRaghu Vatsavayi 81f21fb3edSRaghu Vatsavayi #define OPCODE_SLOW_PATH(rh) \ 82f21fb3edSRaghu Vatsavayi (OPCODE_SUBCODE(rh->r.opcode, rh->r.subcode) != \ 83f21fb3edSRaghu Vatsavayi OPCODE_SUBCODE(OPCODE_NIC, OPCODE_NIC_NW_DATA)) 84f21fb3edSRaghu Vatsavayi 85f21fb3edSRaghu Vatsavayi /* Application codes advertised by the core driver initialization packet. */ 86f21fb3edSRaghu Vatsavayi #define CVM_DRV_APP_START 0x0 87f21fb3edSRaghu Vatsavayi #define CVM_DRV_NO_APP 0 88f21fb3edSRaghu Vatsavayi #define CVM_DRV_APP_COUNT 0x2 89f21fb3edSRaghu Vatsavayi #define CVM_DRV_BASE_APP (CVM_DRV_APP_START + 0x0) 90f21fb3edSRaghu Vatsavayi #define CVM_DRV_NIC_APP (CVM_DRV_APP_START + 0x1) 91f21fb3edSRaghu Vatsavayi #define CVM_DRV_INVALID_APP (CVM_DRV_APP_START + 0x2) 92f21fb3edSRaghu Vatsavayi #define CVM_DRV_APP_END (CVM_DRV_INVALID_APP - 1) 93f21fb3edSRaghu Vatsavayi 94f21fb3edSRaghu Vatsavayi /* Macro to increment index. 95f21fb3edSRaghu Vatsavayi * Index is incremented by count; if the sum exceeds 96f21fb3edSRaghu Vatsavayi * max, index is wrapped-around to the start. 97f21fb3edSRaghu Vatsavayi */ 98f21fb3edSRaghu Vatsavayi #define INCR_INDEX(index, count, max) \ 99f21fb3edSRaghu Vatsavayi do { \ 100f21fb3edSRaghu Vatsavayi if (((index) + (count)) >= (max)) \ 101f21fb3edSRaghu Vatsavayi index = ((index) + (count)) - (max); \ 102f21fb3edSRaghu Vatsavayi else \ 103f21fb3edSRaghu Vatsavayi index += (count); \ 104f21fb3edSRaghu Vatsavayi } while (0) 105f21fb3edSRaghu Vatsavayi 106f21fb3edSRaghu Vatsavayi #define INCR_INDEX_BY1(index, max) \ 107f21fb3edSRaghu Vatsavayi do { \ 108f21fb3edSRaghu Vatsavayi if ((++(index)) == (max)) \ 109f21fb3edSRaghu Vatsavayi index = 0; \ 110f21fb3edSRaghu Vatsavayi } while (0) 111f21fb3edSRaghu Vatsavayi 112f21fb3edSRaghu Vatsavayi #define DECR_INDEX(index, count, max) \ 113f21fb3edSRaghu Vatsavayi do { \ 114f21fb3edSRaghu Vatsavayi if ((count) > (index)) \ 115f21fb3edSRaghu Vatsavayi index = ((max) - ((count - index))); \ 116f21fb3edSRaghu Vatsavayi else \ 117f21fb3edSRaghu Vatsavayi index -= count; \ 118f21fb3edSRaghu Vatsavayi } while (0) 119f21fb3edSRaghu Vatsavayi 120f21fb3edSRaghu Vatsavayi #define OCT_BOARD_NAME 32 121f21fb3edSRaghu Vatsavayi #define OCT_SERIAL_LEN 64 122f21fb3edSRaghu Vatsavayi 123f21fb3edSRaghu Vatsavayi /* Structure used by core driver to send indication that the Octeon 124f21fb3edSRaghu Vatsavayi * application is ready. 125f21fb3edSRaghu Vatsavayi */ 126f21fb3edSRaghu Vatsavayi struct octeon_core_setup { 127f21fb3edSRaghu Vatsavayi u64 corefreq; 128f21fb3edSRaghu Vatsavayi 129f21fb3edSRaghu Vatsavayi char boardname[OCT_BOARD_NAME]; 130f21fb3edSRaghu Vatsavayi 131f21fb3edSRaghu Vatsavayi char board_serial_number[OCT_SERIAL_LEN]; 132f21fb3edSRaghu Vatsavayi 133f21fb3edSRaghu Vatsavayi u64 board_rev_major; 134f21fb3edSRaghu Vatsavayi 135f21fb3edSRaghu Vatsavayi u64 board_rev_minor; 136f21fb3edSRaghu Vatsavayi 137f21fb3edSRaghu Vatsavayi }; 138f21fb3edSRaghu Vatsavayi 139f21fb3edSRaghu Vatsavayi /*--------------------------- SCATTER GATHER ENTRY -----------------------*/ 140f21fb3edSRaghu Vatsavayi 141f21fb3edSRaghu Vatsavayi /* The Scatter-Gather List Entry. The scatter or gather component used with 142f21fb3edSRaghu Vatsavayi * a Octeon input instruction has this format. 143f21fb3edSRaghu Vatsavayi */ 144f21fb3edSRaghu Vatsavayi struct octeon_sg_entry { 145f21fb3edSRaghu Vatsavayi /** The first 64 bit gives the size of data in each dptr.*/ 146f21fb3edSRaghu Vatsavayi union { 147f21fb3edSRaghu Vatsavayi u16 size[4]; 148f21fb3edSRaghu Vatsavayi u64 size64; 149f21fb3edSRaghu Vatsavayi } u; 150f21fb3edSRaghu Vatsavayi 151f21fb3edSRaghu Vatsavayi /** The 4 dptr pointers for this entry. */ 152f21fb3edSRaghu Vatsavayi u64 ptr[4]; 153f21fb3edSRaghu Vatsavayi 154f21fb3edSRaghu Vatsavayi }; 155f21fb3edSRaghu Vatsavayi 156f21fb3edSRaghu Vatsavayi #define OCT_SG_ENTRY_SIZE (sizeof(struct octeon_sg_entry)) 157f21fb3edSRaghu Vatsavayi 158f21fb3edSRaghu Vatsavayi /* \brief Add size to gather list 159f21fb3edSRaghu Vatsavayi * @param sg_entry scatter/gather entry 160f21fb3edSRaghu Vatsavayi * @param size size to add 161f21fb3edSRaghu Vatsavayi * @param pos position to add it. 162f21fb3edSRaghu Vatsavayi */ 163f21fb3edSRaghu Vatsavayi static inline void add_sg_size(struct octeon_sg_entry *sg_entry, 164f21fb3edSRaghu Vatsavayi u16 size, 165f21fb3edSRaghu Vatsavayi u32 pos) 166f21fb3edSRaghu Vatsavayi { 167f21fb3edSRaghu Vatsavayi #ifdef __BIG_ENDIAN_BITFIELD 168f21fb3edSRaghu Vatsavayi sg_entry->u.size[pos] = size; 169f21fb3edSRaghu Vatsavayi #else 170f21fb3edSRaghu Vatsavayi sg_entry->u.size[3 - pos] = size; 171f21fb3edSRaghu Vatsavayi #endif 172f21fb3edSRaghu Vatsavayi } 173f21fb3edSRaghu Vatsavayi 174f21fb3edSRaghu Vatsavayi /*------------------------- End Scatter/Gather ---------------------------*/ 175f21fb3edSRaghu Vatsavayi 176f21fb3edSRaghu Vatsavayi #define OCTNET_FRM_PTP_HEADER_SIZE 8 177f21fb3edSRaghu Vatsavayi 178*a5b37888SRaghu Vatsavayi #define OCTNET_FRM_HEADER_SIZE 22 /* VLAN + Ethernet */ 179*a5b37888SRaghu Vatsavayi 180*a5b37888SRaghu Vatsavayi #define OCTNET_MIN_FRM_SIZE 64 181*a5b37888SRaghu Vatsavayi 182f21fb3edSRaghu Vatsavayi #define OCTNET_MAX_FRM_SIZE (16000 + OCTNET_FRM_HEADER_SIZE) 183f21fb3edSRaghu Vatsavayi 184f21fb3edSRaghu Vatsavayi #define OCTNET_DEFAULT_FRM_SIZE (1500 + OCTNET_FRM_HEADER_SIZE) 185f21fb3edSRaghu Vatsavayi 186f21fb3edSRaghu Vatsavayi /** NIC Commands are sent using this Octeon Input Queue */ 187f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_Q 0 188f21fb3edSRaghu Vatsavayi 189f21fb3edSRaghu Vatsavayi /* NIC Command types */ 190f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_CHANGE_MTU 0x1 191f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_CHANGE_MACADDR 0x2 192f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_CHANGE_DEVFLAGS 0x3 193f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_RX_CTL 0x4 194f21fb3edSRaghu Vatsavayi 195f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_SET_MULTI_LIST 0x5 196f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_CLEAR_STATS 0x6 197f21fb3edSRaghu Vatsavayi 198f21fb3edSRaghu Vatsavayi /* command for setting the speed, duplex & autoneg */ 199f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_SET_SETTINGS 0x7 200f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_SET_FLOW_CTL 0x8 201f21fb3edSRaghu Vatsavayi 202f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_MDIO_READ_WRITE 0x9 203f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_GPIO_ACCESS 0xA 204f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_LRO_ENABLE 0xB 205f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_LRO_DISABLE 0xC 206f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_SET_RSS 0xD 207f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_WRITE_SA 0xE 208f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_DELETE_SA 0xF 209f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_UPDATE_SA 0x12 210f21fb3edSRaghu Vatsavayi 211f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_TNL_RX_CSUM_CTL 0x10 212f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_TNL_TX_CSUM_CTL 0x11 213f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_IPSECV2_AH_ESP_CTL 0x13 214f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_VERBOSE_ENABLE 0x14 215f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_VERBOSE_DISABLE 0x15 216f21fb3edSRaghu Vatsavayi 217f21fb3edSRaghu Vatsavayi /* RX(packets coming from wire) Checksum verification flags */ 218f21fb3edSRaghu Vatsavayi /* TCP/UDP csum */ 219f21fb3edSRaghu Vatsavayi #define CNNIC_L4SUM_VERIFIED 0x1 220f21fb3edSRaghu Vatsavayi #define CNNIC_IPSUM_VERIFIED 0x2 221f21fb3edSRaghu Vatsavayi #define CNNIC_TUN_CSUM_VERIFIED 0x4 222f21fb3edSRaghu Vatsavayi #define CNNIC_CSUM_VERIFIED (CNNIC_IPSUM_VERIFIED | CNNIC_L4SUM_VERIFIED) 223f21fb3edSRaghu Vatsavayi 224f21fb3edSRaghu Vatsavayi /*LROIPV4 and LROIPV6 Flags*/ 225f21fb3edSRaghu Vatsavayi #define OCTNIC_LROIPV4 0x1 226f21fb3edSRaghu Vatsavayi #define OCTNIC_LROIPV6 0x2 227f21fb3edSRaghu Vatsavayi 228f21fb3edSRaghu Vatsavayi /* Interface flags communicated between host driver and core app. */ 229f21fb3edSRaghu Vatsavayi enum octnet_ifflags { 230f21fb3edSRaghu Vatsavayi OCTNET_IFFLAG_PROMISC = 0x01, 231f21fb3edSRaghu Vatsavayi OCTNET_IFFLAG_ALLMULTI = 0x02, 232f21fb3edSRaghu Vatsavayi OCTNET_IFFLAG_MULTICAST = 0x04, 233f21fb3edSRaghu Vatsavayi OCTNET_IFFLAG_BROADCAST = 0x08, 234f21fb3edSRaghu Vatsavayi OCTNET_IFFLAG_UNICAST = 0x10 235f21fb3edSRaghu Vatsavayi }; 236f21fb3edSRaghu Vatsavayi 237f21fb3edSRaghu Vatsavayi /* wqe 238f21fb3edSRaghu Vatsavayi * --------------- 0 239f21fb3edSRaghu Vatsavayi * | wqe word0-3 | 240f21fb3edSRaghu Vatsavayi * --------------- 32 241f21fb3edSRaghu Vatsavayi * | PCI IH | 242f21fb3edSRaghu Vatsavayi * --------------- 40 243f21fb3edSRaghu Vatsavayi * | RPTR | 244f21fb3edSRaghu Vatsavayi * --------------- 48 245f21fb3edSRaghu Vatsavayi * | PCI IRH | 246f21fb3edSRaghu Vatsavayi * --------------- 56 247f21fb3edSRaghu Vatsavayi * | OCT_NET_CMD | 248f21fb3edSRaghu Vatsavayi * --------------- 64 249f21fb3edSRaghu Vatsavayi * | Addtl 8-BData | 250f21fb3edSRaghu Vatsavayi * | | 251f21fb3edSRaghu Vatsavayi * --------------- 252f21fb3edSRaghu Vatsavayi */ 253f21fb3edSRaghu Vatsavayi 254f21fb3edSRaghu Vatsavayi union octnet_cmd { 255f21fb3edSRaghu Vatsavayi u64 u64; 256f21fb3edSRaghu Vatsavayi 257f21fb3edSRaghu Vatsavayi struct { 258f21fb3edSRaghu Vatsavayi #ifdef __BIG_ENDIAN_BITFIELD 259f21fb3edSRaghu Vatsavayi u64 cmd:5; 260f21fb3edSRaghu Vatsavayi 261f21fb3edSRaghu Vatsavayi u64 more:6; /* How many udd words follow the command */ 262f21fb3edSRaghu Vatsavayi 263f21fb3edSRaghu Vatsavayi u64 param1:29; 264f21fb3edSRaghu Vatsavayi 265f21fb3edSRaghu Vatsavayi u64 param2:16; 266f21fb3edSRaghu Vatsavayi 267f21fb3edSRaghu Vatsavayi u64 param3:8; 268f21fb3edSRaghu Vatsavayi 269f21fb3edSRaghu Vatsavayi #else 270f21fb3edSRaghu Vatsavayi 271f21fb3edSRaghu Vatsavayi u64 param3:8; 272f21fb3edSRaghu Vatsavayi 273f21fb3edSRaghu Vatsavayi u64 param2:16; 274f21fb3edSRaghu Vatsavayi 275f21fb3edSRaghu Vatsavayi u64 param1:29; 276f21fb3edSRaghu Vatsavayi 277f21fb3edSRaghu Vatsavayi u64 more:6; 278f21fb3edSRaghu Vatsavayi 279f21fb3edSRaghu Vatsavayi u64 cmd:5; 280f21fb3edSRaghu Vatsavayi 281f21fb3edSRaghu Vatsavayi #endif 282f21fb3edSRaghu Vatsavayi } s; 283f21fb3edSRaghu Vatsavayi 284f21fb3edSRaghu Vatsavayi }; 285f21fb3edSRaghu Vatsavayi 286f21fb3edSRaghu Vatsavayi #define OCTNET_CMD_SIZE (sizeof(union octnet_cmd)) 287f21fb3edSRaghu Vatsavayi 288f21fb3edSRaghu Vatsavayi /** Instruction Header */ 289f21fb3edSRaghu Vatsavayi struct octeon_instr_ih { 290f21fb3edSRaghu Vatsavayi #ifdef __BIG_ENDIAN_BITFIELD 291f21fb3edSRaghu Vatsavayi /** Raw mode indicator 1 = RAW */ 292f21fb3edSRaghu Vatsavayi u64 raw:1; 293f21fb3edSRaghu Vatsavayi 294f21fb3edSRaghu Vatsavayi /** Gather indicator 1=gather*/ 295f21fb3edSRaghu Vatsavayi u64 gather:1; 296f21fb3edSRaghu Vatsavayi 297f21fb3edSRaghu Vatsavayi /** Data length OR no. of entries in gather list */ 298f21fb3edSRaghu Vatsavayi u64 dlengsz:14; 299f21fb3edSRaghu Vatsavayi 300f21fb3edSRaghu Vatsavayi /** Front Data size */ 301f21fb3edSRaghu Vatsavayi u64 fsz:6; 302f21fb3edSRaghu Vatsavayi 303f21fb3edSRaghu Vatsavayi /** Packet Order / Work Unit selection (1 of 8)*/ 304f21fb3edSRaghu Vatsavayi u64 qos:3; 305f21fb3edSRaghu Vatsavayi 306f21fb3edSRaghu Vatsavayi /** Core group selection (1 of 16) */ 307f21fb3edSRaghu Vatsavayi u64 grp:4; 308f21fb3edSRaghu Vatsavayi 309f21fb3edSRaghu Vatsavayi /** Short Raw Packet Indicator 1=short raw pkt */ 310f21fb3edSRaghu Vatsavayi u64 rs:1; 311f21fb3edSRaghu Vatsavayi 312f21fb3edSRaghu Vatsavayi /** Tag type */ 313f21fb3edSRaghu Vatsavayi u64 tagtype:2; 314f21fb3edSRaghu Vatsavayi 315f21fb3edSRaghu Vatsavayi /** Tag Value */ 316f21fb3edSRaghu Vatsavayi u64 tag:32; 317f21fb3edSRaghu Vatsavayi #else 318f21fb3edSRaghu Vatsavayi /** Tag Value */ 319f21fb3edSRaghu Vatsavayi u64 tag:32; 320f21fb3edSRaghu Vatsavayi 321f21fb3edSRaghu Vatsavayi /** Tag type */ 322f21fb3edSRaghu Vatsavayi u64 tagtype:2; 323f21fb3edSRaghu Vatsavayi 324f21fb3edSRaghu Vatsavayi /** Short Raw Packet Indicator 1=short raw pkt */ 325f21fb3edSRaghu Vatsavayi u64 rs:1; 326f21fb3edSRaghu Vatsavayi 327f21fb3edSRaghu Vatsavayi /** Core group selection (1 of 16) */ 328f21fb3edSRaghu Vatsavayi u64 grp:4; 329f21fb3edSRaghu Vatsavayi 330f21fb3edSRaghu Vatsavayi /** Packet Order / Work Unit selection (1 of 8)*/ 331f21fb3edSRaghu Vatsavayi u64 qos:3; 332f21fb3edSRaghu Vatsavayi 333f21fb3edSRaghu Vatsavayi /** Front Data size */ 334f21fb3edSRaghu Vatsavayi u64 fsz:6; 335f21fb3edSRaghu Vatsavayi 336f21fb3edSRaghu Vatsavayi /** Data length OR no. of entries in gather list */ 337f21fb3edSRaghu Vatsavayi u64 dlengsz:14; 338f21fb3edSRaghu Vatsavayi 339f21fb3edSRaghu Vatsavayi /** Gather indicator 1=gather*/ 340f21fb3edSRaghu Vatsavayi u64 gather:1; 341f21fb3edSRaghu Vatsavayi 342f21fb3edSRaghu Vatsavayi /** Raw mode indicator 1 = RAW */ 343f21fb3edSRaghu Vatsavayi u64 raw:1; 344f21fb3edSRaghu Vatsavayi #endif 345f21fb3edSRaghu Vatsavayi }; 346f21fb3edSRaghu Vatsavayi 347f21fb3edSRaghu Vatsavayi /** Input Request Header */ 348f21fb3edSRaghu Vatsavayi struct octeon_instr_irh { 349f21fb3edSRaghu Vatsavayi #ifdef __BIG_ENDIAN_BITFIELD 350f21fb3edSRaghu Vatsavayi u64 opcode:4; 351f21fb3edSRaghu Vatsavayi u64 rflag:1; 352f21fb3edSRaghu Vatsavayi u64 subcode:7; 353f21fb3edSRaghu Vatsavayi u64 len:3; 354f21fb3edSRaghu Vatsavayi u64 rid:13; 355f21fb3edSRaghu Vatsavayi u64 reserved:4; 356f21fb3edSRaghu Vatsavayi u64 ossp:32; /* opcode/subcode specific parameters */ 357f21fb3edSRaghu Vatsavayi #else 358f21fb3edSRaghu Vatsavayi u64 ossp:32; /* opcode/subcode specific parameters */ 359f21fb3edSRaghu Vatsavayi u64 reserved:4; 360f21fb3edSRaghu Vatsavayi u64 rid:13; 361f21fb3edSRaghu Vatsavayi u64 len:3; 362f21fb3edSRaghu Vatsavayi u64 subcode:7; 363f21fb3edSRaghu Vatsavayi u64 rflag:1; 364f21fb3edSRaghu Vatsavayi u64 opcode:4; 365f21fb3edSRaghu Vatsavayi #endif 366f21fb3edSRaghu Vatsavayi }; 367f21fb3edSRaghu Vatsavayi 368f21fb3edSRaghu Vatsavayi /** Return Data Parameters */ 369f21fb3edSRaghu Vatsavayi struct octeon_instr_rdp { 370f21fb3edSRaghu Vatsavayi #ifdef __BIG_ENDIAN_BITFIELD 371f21fb3edSRaghu Vatsavayi u64 reserved:49; 372f21fb3edSRaghu Vatsavayi u64 pcie_port:3; 373f21fb3edSRaghu Vatsavayi u64 rlen:12; 374f21fb3edSRaghu Vatsavayi #else 375f21fb3edSRaghu Vatsavayi u64 rlen:12; 376f21fb3edSRaghu Vatsavayi u64 pcie_port:3; 377f21fb3edSRaghu Vatsavayi u64 reserved:49; 378f21fb3edSRaghu Vatsavayi #endif 379f21fb3edSRaghu Vatsavayi }; 380f21fb3edSRaghu Vatsavayi 381f21fb3edSRaghu Vatsavayi /** Receive Header */ 382f21fb3edSRaghu Vatsavayi union octeon_rh { 383f21fb3edSRaghu Vatsavayi #ifdef __BIG_ENDIAN_BITFIELD 384f21fb3edSRaghu Vatsavayi u64 u64; 385f21fb3edSRaghu Vatsavayi struct { 386f21fb3edSRaghu Vatsavayi u64 opcode:4; 387f21fb3edSRaghu Vatsavayi u64 subcode:8; 388f21fb3edSRaghu Vatsavayi u64 len:3; /** additional 64-bit words */ 389f21fb3edSRaghu Vatsavayi u64 rid:13; /** request id in response to pkt sent by host */ 390f21fb3edSRaghu Vatsavayi u64 reserved:4; 391f21fb3edSRaghu Vatsavayi u64 ossp:32; /** opcode/subcode specific parameters */ 392f21fb3edSRaghu Vatsavayi } r; 393f21fb3edSRaghu Vatsavayi struct { 394f21fb3edSRaghu Vatsavayi u64 opcode:4; 395f21fb3edSRaghu Vatsavayi u64 subcode:8; 396f21fb3edSRaghu Vatsavayi u64 len:3; /** additional 64-bit words */ 397f21fb3edSRaghu Vatsavayi u64 rid:13; /** request id in response to pkt sent by host */ 398f21fb3edSRaghu Vatsavayi u64 extra:24; 399f21fb3edSRaghu Vatsavayi u64 link:8; 400f21fb3edSRaghu Vatsavayi u64 csum_verified:3; /** checksum verified. */ 401f21fb3edSRaghu Vatsavayi u64 has_hwtstamp:1; /** Has hardware timestamp. 1 = yes. */ 402f21fb3edSRaghu Vatsavayi } r_dh; 403f21fb3edSRaghu Vatsavayi struct { 404f21fb3edSRaghu Vatsavayi u64 opcode:4; 405f21fb3edSRaghu Vatsavayi u64 subcode:8; 406f21fb3edSRaghu Vatsavayi u64 len:3; /** additional 64-bit words */ 407f21fb3edSRaghu Vatsavayi u64 rid:13; /** request id in response to pkt sent by host */ 408f21fb3edSRaghu Vatsavayi u64 num_gmx_ports:8; 409f21fb3edSRaghu Vatsavayi u64 max_nic_ports:8; 410f21fb3edSRaghu Vatsavayi u64 app_cap_flags:4; 411f21fb3edSRaghu Vatsavayi u64 app_mode:16; 412f21fb3edSRaghu Vatsavayi } r_core_drv_init; 413f21fb3edSRaghu Vatsavayi struct { 414f21fb3edSRaghu Vatsavayi u64 opcode:4; 415f21fb3edSRaghu Vatsavayi u64 subcode:8; 416f21fb3edSRaghu Vatsavayi u64 len:3; /** additional 64-bit words */ 417f21fb3edSRaghu Vatsavayi u64 rid:13; 418f21fb3edSRaghu Vatsavayi u64 reserved:4; 419f21fb3edSRaghu Vatsavayi u64 extra:25; 420f21fb3edSRaghu Vatsavayi u64 ifidx:7; 421f21fb3edSRaghu Vatsavayi } r_nic_info; 422f21fb3edSRaghu Vatsavayi #else 423f21fb3edSRaghu Vatsavayi u64 u64; 424f21fb3edSRaghu Vatsavayi struct { 425f21fb3edSRaghu Vatsavayi u64 ossp:32; /** opcode/subcode specific parameters */ 426f21fb3edSRaghu Vatsavayi u64 reserved:4; 427f21fb3edSRaghu Vatsavayi u64 rid:13; /** req id in response to pkt sent by host */ 428f21fb3edSRaghu Vatsavayi u64 len:3; /** additional 64-bit words */ 429f21fb3edSRaghu Vatsavayi u64 subcode:8; 430f21fb3edSRaghu Vatsavayi u64 opcode:4; 431f21fb3edSRaghu Vatsavayi } r; 432f21fb3edSRaghu Vatsavayi struct { 433f21fb3edSRaghu Vatsavayi u64 has_hwtstamp:1; /** 1 = has hwtstamp */ 434f21fb3edSRaghu Vatsavayi u64 csum_verified:3; /** checksum verified. */ 435f21fb3edSRaghu Vatsavayi u64 link:8; 436f21fb3edSRaghu Vatsavayi u64 extra:24; 437f21fb3edSRaghu Vatsavayi u64 rid:13; /** req id in response to pkt sent by host */ 438f21fb3edSRaghu Vatsavayi u64 len:3; /** additional 64-bit words */ 439f21fb3edSRaghu Vatsavayi u64 subcode:8; 440f21fb3edSRaghu Vatsavayi u64 opcode:4; 441f21fb3edSRaghu Vatsavayi } r_dh; 442f21fb3edSRaghu Vatsavayi struct { 443f21fb3edSRaghu Vatsavayi u64 app_mode:16; 444f21fb3edSRaghu Vatsavayi u64 app_cap_flags:4; 445f21fb3edSRaghu Vatsavayi u64 max_nic_ports:8; 446f21fb3edSRaghu Vatsavayi u64 num_gmx_ports:8; 447f21fb3edSRaghu Vatsavayi u64 rid:13; 448f21fb3edSRaghu Vatsavayi u64 len:3; /** additional 64-bit words */ 449f21fb3edSRaghu Vatsavayi u64 subcode:8; 450f21fb3edSRaghu Vatsavayi u64 opcode:4; 451f21fb3edSRaghu Vatsavayi } r_core_drv_init; 452f21fb3edSRaghu Vatsavayi struct { 453f21fb3edSRaghu Vatsavayi u64 ifidx:7; 454f21fb3edSRaghu Vatsavayi u64 extra:25; 455f21fb3edSRaghu Vatsavayi u64 reserved:4; 456f21fb3edSRaghu Vatsavayi u64 rid:13; 457f21fb3edSRaghu Vatsavayi u64 len:3; /** additional 64-bit words */ 458f21fb3edSRaghu Vatsavayi u64 subcode:8; 459f21fb3edSRaghu Vatsavayi u64 opcode:4; 460f21fb3edSRaghu Vatsavayi } r_nic_info; 461f21fb3edSRaghu Vatsavayi #endif 462f21fb3edSRaghu Vatsavayi }; 463f21fb3edSRaghu Vatsavayi 464f21fb3edSRaghu Vatsavayi #define OCT_RH_SIZE (sizeof(union octeon_rh)) 465f21fb3edSRaghu Vatsavayi 466f21fb3edSRaghu Vatsavayi #define OCT_PKT_PARAM_IPV4OPTS 1 467f21fb3edSRaghu Vatsavayi #define OCT_PKT_PARAM_IPV6EXTHDR 2 468f21fb3edSRaghu Vatsavayi 469f21fb3edSRaghu Vatsavayi union octnic_packet_params { 470f21fb3edSRaghu Vatsavayi u32 u32; 471f21fb3edSRaghu Vatsavayi struct { 472f21fb3edSRaghu Vatsavayi #ifdef __BIG_ENDIAN_BITFIELD 473f21fb3edSRaghu Vatsavayi u32 reserved:6; 474f21fb3edSRaghu Vatsavayi u32 tnl_csum:1; 475f21fb3edSRaghu Vatsavayi u32 ip_csum:1; 476f21fb3edSRaghu Vatsavayi u32 ipv4opts_ipv6exthdr:2; 477f21fb3edSRaghu Vatsavayi u32 ipsec_ops:4; 478f21fb3edSRaghu Vatsavayi u32 tsflag:1; 479f21fb3edSRaghu Vatsavayi u32 csoffset:9; 480f21fb3edSRaghu Vatsavayi u32 ifidx:8; 481f21fb3edSRaghu Vatsavayi #else 482f21fb3edSRaghu Vatsavayi u32 ifidx:8; 483f21fb3edSRaghu Vatsavayi u32 csoffset:9; 484f21fb3edSRaghu Vatsavayi u32 tsflag:1; 485f21fb3edSRaghu Vatsavayi u32 ipsec_ops:4; 486f21fb3edSRaghu Vatsavayi u32 ipv4opts_ipv6exthdr:2; 487f21fb3edSRaghu Vatsavayi u32 ip_csum:1; 488f21fb3edSRaghu Vatsavayi u32 tnl_csum:1; 489f21fb3edSRaghu Vatsavayi u32 reserved:6; 490f21fb3edSRaghu Vatsavayi #endif 491f21fb3edSRaghu Vatsavayi } s; 492f21fb3edSRaghu Vatsavayi }; 493f21fb3edSRaghu Vatsavayi 494f21fb3edSRaghu Vatsavayi /** Status of a RGMII Link on Octeon as seen by core driver. */ 495f21fb3edSRaghu Vatsavayi union oct_link_status { 496f21fb3edSRaghu Vatsavayi u64 u64; 497f21fb3edSRaghu Vatsavayi 498f21fb3edSRaghu Vatsavayi struct { 499f21fb3edSRaghu Vatsavayi #ifdef __BIG_ENDIAN_BITFIELD 500f21fb3edSRaghu Vatsavayi u64 duplex:8; 501f21fb3edSRaghu Vatsavayi u64 status:8; 502f21fb3edSRaghu Vatsavayi u64 mtu:16; 503f21fb3edSRaghu Vatsavayi u64 speed:16; 504f21fb3edSRaghu Vatsavayi u64 autoneg:1; 505f21fb3edSRaghu Vatsavayi u64 interface:4; 506f21fb3edSRaghu Vatsavayi u64 pause:1; 507f21fb3edSRaghu Vatsavayi u64 reserved:10; 508f21fb3edSRaghu Vatsavayi #else 509f21fb3edSRaghu Vatsavayi u64 reserved:10; 510f21fb3edSRaghu Vatsavayi u64 pause:1; 511f21fb3edSRaghu Vatsavayi u64 interface:4; 512f21fb3edSRaghu Vatsavayi u64 autoneg:1; 513f21fb3edSRaghu Vatsavayi u64 speed:16; 514f21fb3edSRaghu Vatsavayi u64 mtu:16; 515f21fb3edSRaghu Vatsavayi u64 status:8; 516f21fb3edSRaghu Vatsavayi u64 duplex:8; 517f21fb3edSRaghu Vatsavayi #endif 518f21fb3edSRaghu Vatsavayi } s; 519f21fb3edSRaghu Vatsavayi }; 520f21fb3edSRaghu Vatsavayi 52126236fa9SRaghu Vatsavayi /** The txpciq info passed to host from the firmware */ 52226236fa9SRaghu Vatsavayi 52326236fa9SRaghu Vatsavayi union oct_txpciq { 52426236fa9SRaghu Vatsavayi u64 u64; 52526236fa9SRaghu Vatsavayi 52626236fa9SRaghu Vatsavayi struct { 52726236fa9SRaghu Vatsavayi #ifdef __BIG_ENDIAN_BITFIELD 52826236fa9SRaghu Vatsavayi u64 q_no:8; 52926236fa9SRaghu Vatsavayi u64 port:8; 53026236fa9SRaghu Vatsavayi u64 pkind:6; 53126236fa9SRaghu Vatsavayi u64 use_qpg:1; 53226236fa9SRaghu Vatsavayi u64 qpg:11; 53326236fa9SRaghu Vatsavayi u64 reserved:30; 53426236fa9SRaghu Vatsavayi #else 53526236fa9SRaghu Vatsavayi u64 reserved:30; 53626236fa9SRaghu Vatsavayi u64 qpg:11; 53726236fa9SRaghu Vatsavayi u64 use_qpg:1; 53826236fa9SRaghu Vatsavayi u64 pkind:6; 53926236fa9SRaghu Vatsavayi u64 port:8; 54026236fa9SRaghu Vatsavayi u64 q_no:8; 54126236fa9SRaghu Vatsavayi #endif 54226236fa9SRaghu Vatsavayi } s; 54326236fa9SRaghu Vatsavayi }; 54426236fa9SRaghu Vatsavayi 54526236fa9SRaghu Vatsavayi /** The rxpciq info passed to host from the firmware */ 54626236fa9SRaghu Vatsavayi 54726236fa9SRaghu Vatsavayi union oct_rxpciq { 54826236fa9SRaghu Vatsavayi u64 u64; 54926236fa9SRaghu Vatsavayi 55026236fa9SRaghu Vatsavayi struct { 55126236fa9SRaghu Vatsavayi #ifdef __BIG_ENDIAN_BITFIELD 55226236fa9SRaghu Vatsavayi u64 q_no:8; 55326236fa9SRaghu Vatsavayi u64 reserved:56; 55426236fa9SRaghu Vatsavayi #else 55526236fa9SRaghu Vatsavayi u64 reserved:56; 55626236fa9SRaghu Vatsavayi u64 q_no:8; 55726236fa9SRaghu Vatsavayi #endif 55826236fa9SRaghu Vatsavayi } s; 55926236fa9SRaghu Vatsavayi }; 56026236fa9SRaghu Vatsavayi 561f21fb3edSRaghu Vatsavayi /** Information for a OCTEON ethernet interface shared between core & host. */ 562f21fb3edSRaghu Vatsavayi struct oct_link_info { 563f21fb3edSRaghu Vatsavayi union oct_link_status link; 564f21fb3edSRaghu Vatsavayi u64 hw_addr; 565f21fb3edSRaghu Vatsavayi 566f21fb3edSRaghu Vatsavayi #ifdef __BIG_ENDIAN_BITFIELD 567f21fb3edSRaghu Vatsavayi u16 gmxport; 568f21fb3edSRaghu Vatsavayi u8 rsvd[3]; 569f21fb3edSRaghu Vatsavayi u8 num_txpciq; 570f21fb3edSRaghu Vatsavayi u8 num_rxpciq; 571f21fb3edSRaghu Vatsavayi u8 ifidx; 572f21fb3edSRaghu Vatsavayi #else 573f21fb3edSRaghu Vatsavayi u8 ifidx; 574f21fb3edSRaghu Vatsavayi u8 num_rxpciq; 575f21fb3edSRaghu Vatsavayi u8 num_txpciq; 576f21fb3edSRaghu Vatsavayi u8 rsvd[3]; 577f21fb3edSRaghu Vatsavayi u16 gmxport; 578f21fb3edSRaghu Vatsavayi #endif 579f21fb3edSRaghu Vatsavayi 58026236fa9SRaghu Vatsavayi union oct_txpciq txpciq[MAX_IOQS_PER_NICIF]; 58126236fa9SRaghu Vatsavayi union oct_rxpciq rxpciq[MAX_IOQS_PER_NICIF]; 582f21fb3edSRaghu Vatsavayi }; 583f21fb3edSRaghu Vatsavayi 584f21fb3edSRaghu Vatsavayi #define OCT_LINK_INFO_SIZE (sizeof(struct oct_link_info)) 585f21fb3edSRaghu Vatsavayi 586f21fb3edSRaghu Vatsavayi struct liquidio_if_cfg_info { 587f21fb3edSRaghu Vatsavayi u64 ifidx; 588f21fb3edSRaghu Vatsavayi u64 iqmask; /** mask for IQs enabled for the port */ 589f21fb3edSRaghu Vatsavayi u64 oqmask; /** mask for OQs enabled for the port */ 590f21fb3edSRaghu Vatsavayi struct oct_link_info linfo; /** initial link information */ 591f21fb3edSRaghu Vatsavayi }; 592f21fb3edSRaghu Vatsavayi 593f21fb3edSRaghu Vatsavayi /** Stats for each NIC port in RX direction. */ 594f21fb3edSRaghu Vatsavayi struct nic_rx_stats { 595f21fb3edSRaghu Vatsavayi /* link-level stats */ 596f21fb3edSRaghu Vatsavayi u64 total_rcvd; 597f21fb3edSRaghu Vatsavayi u64 bytes_rcvd; 598f21fb3edSRaghu Vatsavayi u64 total_bcst; 599f21fb3edSRaghu Vatsavayi u64 total_mcst; 600f21fb3edSRaghu Vatsavayi u64 runts; 601f21fb3edSRaghu Vatsavayi u64 ctl_rcvd; 602f21fb3edSRaghu Vatsavayi u64 fifo_err; /* Accounts for over/under-run of buffers */ 603f21fb3edSRaghu Vatsavayi u64 dmac_drop; 604f21fb3edSRaghu Vatsavayi u64 fcs_err; 605f21fb3edSRaghu Vatsavayi u64 jabber_err; 606f21fb3edSRaghu Vatsavayi u64 l2_err; 607f21fb3edSRaghu Vatsavayi u64 frame_err; 608f21fb3edSRaghu Vatsavayi 609f21fb3edSRaghu Vatsavayi /* firmware stats */ 610f21fb3edSRaghu Vatsavayi u64 fw_total_rcvd; 611f21fb3edSRaghu Vatsavayi u64 fw_total_fwd; 612f21fb3edSRaghu Vatsavayi u64 fw_err_pko; 613f21fb3edSRaghu Vatsavayi u64 fw_err_link; 614f21fb3edSRaghu Vatsavayi u64 fw_err_drop; 615f21fb3edSRaghu Vatsavayi u64 fw_lro_pkts; /* Number of packets that are LROed */ 616f21fb3edSRaghu Vatsavayi u64 fw_lro_octs; /* Number of octets that are LROed */ 617f21fb3edSRaghu Vatsavayi u64 fw_total_lro; /* Number of LRO packets formed */ 618f21fb3edSRaghu Vatsavayi u64 fw_lro_aborts; /* Number of times lRO of packet aborted */ 619f21fb3edSRaghu Vatsavayi /* intrmod: packet forward rate */ 620f21fb3edSRaghu Vatsavayi u64 fwd_rate; 621f21fb3edSRaghu Vatsavayi }; 622f21fb3edSRaghu Vatsavayi 623f21fb3edSRaghu Vatsavayi /** Stats for each NIC port in RX direction. */ 624f21fb3edSRaghu Vatsavayi struct nic_tx_stats { 625f21fb3edSRaghu Vatsavayi /* link-level stats */ 626f21fb3edSRaghu Vatsavayi u64 total_pkts_sent; 627f21fb3edSRaghu Vatsavayi u64 total_bytes_sent; 628f21fb3edSRaghu Vatsavayi u64 mcast_pkts_sent; 629f21fb3edSRaghu Vatsavayi u64 bcast_pkts_sent; 630f21fb3edSRaghu Vatsavayi u64 ctl_sent; 631f21fb3edSRaghu Vatsavayi u64 one_collision_sent; /* Packets sent after one collision*/ 632f21fb3edSRaghu Vatsavayi u64 multi_collision_sent; /* Packets sent after multiple collision*/ 633f21fb3edSRaghu Vatsavayi u64 max_collision_fail; /* Packets not sent due to max collisions */ 634f21fb3edSRaghu Vatsavayi u64 max_deferral_fail; /* Packets not sent due to max deferrals */ 635f21fb3edSRaghu Vatsavayi u64 fifo_err; /* Accounts for over/under-run of buffers */ 636f21fb3edSRaghu Vatsavayi u64 runts; 637f21fb3edSRaghu Vatsavayi u64 total_collisions; /* Total number of collisions detected */ 638f21fb3edSRaghu Vatsavayi 639f21fb3edSRaghu Vatsavayi /* firmware stats */ 640f21fb3edSRaghu Vatsavayi u64 fw_total_sent; 641f21fb3edSRaghu Vatsavayi u64 fw_total_fwd; 642f21fb3edSRaghu Vatsavayi u64 fw_err_pko; 643f21fb3edSRaghu Vatsavayi u64 fw_err_link; 644f21fb3edSRaghu Vatsavayi u64 fw_err_drop; 645f21fb3edSRaghu Vatsavayi }; 646f21fb3edSRaghu Vatsavayi 647f21fb3edSRaghu Vatsavayi struct oct_link_stats { 648f21fb3edSRaghu Vatsavayi struct nic_rx_stats fromwire; 649f21fb3edSRaghu Vatsavayi struct nic_tx_stats fromhost; 650f21fb3edSRaghu Vatsavayi 651f21fb3edSRaghu Vatsavayi }; 652f21fb3edSRaghu Vatsavayi 653f21fb3edSRaghu Vatsavayi #define LIO68XX_LED_CTRL_ADDR 0x3501 654f21fb3edSRaghu Vatsavayi #define LIO68XX_LED_CTRL_CFGON 0x1f 655f21fb3edSRaghu Vatsavayi #define LIO68XX_LED_CTRL_CFGOFF 0x100 656f21fb3edSRaghu Vatsavayi #define LIO68XX_LED_BEACON_ADDR 0x3508 657f21fb3edSRaghu Vatsavayi #define LIO68XX_LED_BEACON_CFGON 0x47fd 658f21fb3edSRaghu Vatsavayi #define LIO68XX_LED_BEACON_CFGOFF 0x11fc 659f21fb3edSRaghu Vatsavayi #define VITESSE_PHY_GPIO_DRIVEON 0x1 660f21fb3edSRaghu Vatsavayi #define VITESSE_PHY_GPIO_CFG 0x8 661f21fb3edSRaghu Vatsavayi #define VITESSE_PHY_GPIO_DRIVEOFF 0x4 662f21fb3edSRaghu Vatsavayi #define VITESSE_PHY_GPIO_HIGH 0x2 663f21fb3edSRaghu Vatsavayi #define VITESSE_PHY_GPIO_LOW 0x3 664f21fb3edSRaghu Vatsavayi 665f21fb3edSRaghu Vatsavayi struct oct_mdio_cmd { 666f21fb3edSRaghu Vatsavayi u64 op; 667f21fb3edSRaghu Vatsavayi u64 mdio_addr; 668f21fb3edSRaghu Vatsavayi u64 value1; 669f21fb3edSRaghu Vatsavayi u64 value2; 670f21fb3edSRaghu Vatsavayi u64 value3; 671f21fb3edSRaghu Vatsavayi }; 672f21fb3edSRaghu Vatsavayi 673f21fb3edSRaghu Vatsavayi #define OCT_LINK_STATS_SIZE (sizeof(struct oct_link_stats)) 674f21fb3edSRaghu Vatsavayi 675f21fb3edSRaghu Vatsavayi #define LIO_INTRMOD_CHECK_INTERVAL 1 676f21fb3edSRaghu Vatsavayi #define LIO_INTRMOD_MAXPKT_RATETHR 196608 /* max pkt rate threshold */ 677f21fb3edSRaghu Vatsavayi #define LIO_INTRMOD_MINPKT_RATETHR 9216 /* min pkt rate threshold */ 678f21fb3edSRaghu Vatsavayi #define LIO_INTRMOD_MAXCNT_TRIGGER 384 /* max pkts to trigger interrupt */ 679f21fb3edSRaghu Vatsavayi #define LIO_INTRMOD_MINCNT_TRIGGER 1 /* min pkts to trigger interrupt */ 680f21fb3edSRaghu Vatsavayi #define LIO_INTRMOD_MAXTMR_TRIGGER 128 /* max time to trigger interrupt */ 681f21fb3edSRaghu Vatsavayi #define LIO_INTRMOD_MINTMR_TRIGGER 32 /* min time to trigger interrupt */ 682f21fb3edSRaghu Vatsavayi 683f21fb3edSRaghu Vatsavayi struct oct_intrmod_cfg { 684f21fb3edSRaghu Vatsavayi u64 intrmod_enable; 685f21fb3edSRaghu Vatsavayi u64 intrmod_check_intrvl; 686f21fb3edSRaghu Vatsavayi u64 intrmod_maxpkt_ratethr; 687f21fb3edSRaghu Vatsavayi u64 intrmod_minpkt_ratethr; 688f21fb3edSRaghu Vatsavayi u64 intrmod_maxcnt_trigger; 689f21fb3edSRaghu Vatsavayi u64 intrmod_maxtmr_trigger; 690f21fb3edSRaghu Vatsavayi u64 intrmod_mincnt_trigger; 691f21fb3edSRaghu Vatsavayi u64 intrmod_mintmr_trigger; 692f21fb3edSRaghu Vatsavayi }; 693f21fb3edSRaghu Vatsavayi 694f21fb3edSRaghu Vatsavayi #define BASE_QUEUE_NOT_REQUESTED 65535 695f21fb3edSRaghu Vatsavayi 696f21fb3edSRaghu Vatsavayi union oct_nic_if_cfg { 697f21fb3edSRaghu Vatsavayi u64 u64; 698f21fb3edSRaghu Vatsavayi struct { 699f21fb3edSRaghu Vatsavayi #ifdef __BIG_ENDIAN_BITFIELD 700f21fb3edSRaghu Vatsavayi u64 base_queue:16; 701f21fb3edSRaghu Vatsavayi u64 num_iqueues:16; 702f21fb3edSRaghu Vatsavayi u64 num_oqueues:16; 703f21fb3edSRaghu Vatsavayi u64 gmx_port_id:8; 704f21fb3edSRaghu Vatsavayi u64 reserved:8; 705f21fb3edSRaghu Vatsavayi #else 706f21fb3edSRaghu Vatsavayi u64 reserved:8; 707f21fb3edSRaghu Vatsavayi u64 gmx_port_id:8; 708f21fb3edSRaghu Vatsavayi u64 num_oqueues:16; 709f21fb3edSRaghu Vatsavayi u64 num_iqueues:16; 710f21fb3edSRaghu Vatsavayi u64 base_queue:16; 711f21fb3edSRaghu Vatsavayi #endif 712f21fb3edSRaghu Vatsavayi } s; 713f21fb3edSRaghu Vatsavayi }; 714f21fb3edSRaghu Vatsavayi 715f21fb3edSRaghu Vatsavayi #endif 716