18c2ecf20Sopenharmony_ci/********************************************************************** 28c2ecf20Sopenharmony_ci * Author: Cavium, Inc. 38c2ecf20Sopenharmony_ci * 48c2ecf20Sopenharmony_ci * Contact: support@cavium.com 58c2ecf20Sopenharmony_ci * Please include "LiquidIO" in the subject. 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci * Copyright (c) 2003-2016 Cavium, Inc. 88c2ecf20Sopenharmony_ci * 98c2ecf20Sopenharmony_ci * This file is free software; you can redistribute it and/or modify 108c2ecf20Sopenharmony_ci * it under the terms of the GNU General Public License, Version 2, as 118c2ecf20Sopenharmony_ci * published by the Free Software Foundation. 128c2ecf20Sopenharmony_ci * 138c2ecf20Sopenharmony_ci * This file is distributed in the hope that it will be useful, but 148c2ecf20Sopenharmony_ci * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty 158c2ecf20Sopenharmony_ci * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or 168c2ecf20Sopenharmony_ci * NONINFRINGEMENT. See the GNU General Public License for more details. 178c2ecf20Sopenharmony_ci ***********************************************************************/ 188c2ecf20Sopenharmony_ci/*! \file liquidio_common.h 198c2ecf20Sopenharmony_ci * \brief Common: Structures and macros used in PCI-NIC package by core and 208c2ecf20Sopenharmony_ci * host driver. 218c2ecf20Sopenharmony_ci */ 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci#ifndef __LIQUIDIO_COMMON_H__ 248c2ecf20Sopenharmony_ci#define __LIQUIDIO_COMMON_H__ 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci#include "octeon_config.h" 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci#define LIQUIDIO_BASE_MAJOR_VERSION 1 298c2ecf20Sopenharmony_ci#define LIQUIDIO_BASE_MINOR_VERSION 7 308c2ecf20Sopenharmony_ci#define LIQUIDIO_BASE_MICRO_VERSION 2 318c2ecf20Sopenharmony_ci#define LIQUIDIO_BASE_VERSION __stringify(LIQUIDIO_BASE_MAJOR_VERSION) "." \ 328c2ecf20Sopenharmony_ci __stringify(LIQUIDIO_BASE_MINOR_VERSION) 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_cistruct lio_version { 358c2ecf20Sopenharmony_ci u16 major; 368c2ecf20Sopenharmony_ci u16 minor; 378c2ecf20Sopenharmony_ci u16 micro; 388c2ecf20Sopenharmony_ci u16 reserved; 398c2ecf20Sopenharmony_ci}; 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci#define CONTROL_IQ 0 428c2ecf20Sopenharmony_ci/** Tag types used by Octeon cores in its work. */ 438c2ecf20Sopenharmony_cienum octeon_tag_type { 448c2ecf20Sopenharmony_ci ORDERED_TAG = 0, 458c2ecf20Sopenharmony_ci ATOMIC_TAG = 1, 468c2ecf20Sopenharmony_ci NULL_TAG = 2, 478c2ecf20Sopenharmony_ci NULL_NULL_TAG = 3 488c2ecf20Sopenharmony_ci}; 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_ci/* pre-defined host->NIC tag values */ 518c2ecf20Sopenharmony_ci#define LIO_CONTROL (0x11111110) 528c2ecf20Sopenharmony_ci#define LIO_DATA(i) (0x11111111 + (i)) 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_ci/* Opcodes used by host driver/apps to perform operations on the core. 558c2ecf20Sopenharmony_ci * These are used to identify the major subsystem that the operation 568c2ecf20Sopenharmony_ci * is for. 578c2ecf20Sopenharmony_ci */ 588c2ecf20Sopenharmony_ci#define OPCODE_CORE 0 /* used for generic core operations */ 598c2ecf20Sopenharmony_ci#define OPCODE_NIC 1 /* used for NIC operations */ 608c2ecf20Sopenharmony_ci/* Subcodes are used by host driver/apps to identify the sub-operation 618c2ecf20Sopenharmony_ci * for the core. They only need to by unique for a given subsystem. 628c2ecf20Sopenharmony_ci */ 638c2ecf20Sopenharmony_ci#define OPCODE_SUBCODE(op, sub) ((((op) & 0x0f) << 8) | ((sub) & 0x7f)) 648c2ecf20Sopenharmony_ci 658c2ecf20Sopenharmony_ci/** OPCODE_CORE subcodes. For future use. */ 668c2ecf20Sopenharmony_ci 678c2ecf20Sopenharmony_ci/** OPCODE_NIC subcodes */ 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_ci/* This subcode is sent by core PCI driver to indicate cores are ready. */ 708c2ecf20Sopenharmony_ci#define OPCODE_NIC_CORE_DRV_ACTIVE 0x01 718c2ecf20Sopenharmony_ci#define OPCODE_NIC_NW_DATA 0x02 /* network packet data */ 728c2ecf20Sopenharmony_ci#define OPCODE_NIC_CMD 0x03 738c2ecf20Sopenharmony_ci#define OPCODE_NIC_INFO 0x04 748c2ecf20Sopenharmony_ci#define OPCODE_NIC_PORT_STATS 0x05 758c2ecf20Sopenharmony_ci#define OPCODE_NIC_MDIO45 0x06 768c2ecf20Sopenharmony_ci#define OPCODE_NIC_TIMESTAMP 0x07 778c2ecf20Sopenharmony_ci#define OPCODE_NIC_INTRMOD_CFG 0x08 788c2ecf20Sopenharmony_ci#define OPCODE_NIC_IF_CFG 0x09 798c2ecf20Sopenharmony_ci#define OPCODE_NIC_VF_DRV_NOTICE 0x0A 808c2ecf20Sopenharmony_ci#define OPCODE_NIC_INTRMOD_PARAMS 0x0B 818c2ecf20Sopenharmony_ci#define OPCODE_NIC_QCOUNT_UPDATE 0x12 828c2ecf20Sopenharmony_ci#define OPCODE_NIC_SET_TRUSTED_VF 0x13 838c2ecf20Sopenharmony_ci#define OPCODE_NIC_SYNC_OCTEON_TIME 0x14 848c2ecf20Sopenharmony_ci#define VF_DRV_LOADED 1 858c2ecf20Sopenharmony_ci#define VF_DRV_REMOVED -1 868c2ecf20Sopenharmony_ci#define VF_DRV_MACADDR_CHANGED 2 878c2ecf20Sopenharmony_ci 888c2ecf20Sopenharmony_ci#define OPCODE_NIC_VF_REP_PKT 0x15 898c2ecf20Sopenharmony_ci#define OPCODE_NIC_VF_REP_CMD 0x16 908c2ecf20Sopenharmony_ci#define OPCODE_NIC_UBOOT_CTL 0x17 918c2ecf20Sopenharmony_ci 928c2ecf20Sopenharmony_ci#define CORE_DRV_TEST_SCATTER_OP 0xFFF5 938c2ecf20Sopenharmony_ci 948c2ecf20Sopenharmony_ci/* Application codes advertised by the core driver initialization packet. */ 958c2ecf20Sopenharmony_ci#define CVM_DRV_APP_START 0x0 968c2ecf20Sopenharmony_ci#define CVM_DRV_NO_APP 0 978c2ecf20Sopenharmony_ci#define CVM_DRV_APP_COUNT 0x2 988c2ecf20Sopenharmony_ci#define CVM_DRV_BASE_APP (CVM_DRV_APP_START + 0x0) 998c2ecf20Sopenharmony_ci#define CVM_DRV_NIC_APP (CVM_DRV_APP_START + 0x1) 1008c2ecf20Sopenharmony_ci#define CVM_DRV_INVALID_APP (CVM_DRV_APP_START + 0x2) 1018c2ecf20Sopenharmony_ci#define CVM_DRV_APP_END (CVM_DRV_INVALID_APP - 1) 1028c2ecf20Sopenharmony_ci 1038c2ecf20Sopenharmony_ci#define BYTES_PER_DHLEN_UNIT 8 1048c2ecf20Sopenharmony_ci#define MAX_REG_CNT 2000000U 1058c2ecf20Sopenharmony_ci#define INTRNAMSIZ 32 1068c2ecf20Sopenharmony_ci#define IRQ_NAME_OFF(i) ((i) * INTRNAMSIZ) 1078c2ecf20Sopenharmony_ci#define MAX_IOQ_INTERRUPTS_PER_PF (64 * 2) 1088c2ecf20Sopenharmony_ci#define MAX_IOQ_INTERRUPTS_PER_VF (8 * 2) 1098c2ecf20Sopenharmony_ci 1108c2ecf20Sopenharmony_ci#define SCR2_BIT_FW_LOADED 63 1118c2ecf20Sopenharmony_ci 1128c2ecf20Sopenharmony_ci/* App specific capabilities from firmware to pf driver */ 1138c2ecf20Sopenharmony_ci#define LIQUIDIO_TIME_SYNC_CAP 0x1 1148c2ecf20Sopenharmony_ci#define LIQUIDIO_SWITCHDEV_CAP 0x2 1158c2ecf20Sopenharmony_ci#define LIQUIDIO_SPOOFCHK_CAP 0x4 1168c2ecf20Sopenharmony_ci 1178c2ecf20Sopenharmony_ci/* error status return from firmware */ 1188c2ecf20Sopenharmony_ci#define OCTEON_REQUEST_NO_PERMISSION 0xc 1198c2ecf20Sopenharmony_ci 1208c2ecf20Sopenharmony_cistatic inline u32 incr_index(u32 index, u32 count, u32 max) 1218c2ecf20Sopenharmony_ci{ 1228c2ecf20Sopenharmony_ci if ((index + count) >= max) 1238c2ecf20Sopenharmony_ci index = index + count - max; 1248c2ecf20Sopenharmony_ci else 1258c2ecf20Sopenharmony_ci index += count; 1268c2ecf20Sopenharmony_ci 1278c2ecf20Sopenharmony_ci return index; 1288c2ecf20Sopenharmony_ci} 1298c2ecf20Sopenharmony_ci 1308c2ecf20Sopenharmony_ci#define OCT_BOARD_NAME 32 1318c2ecf20Sopenharmony_ci#define OCT_SERIAL_LEN 64 1328c2ecf20Sopenharmony_ci 1338c2ecf20Sopenharmony_ci/* Structure used by core driver to send indication that the Octeon 1348c2ecf20Sopenharmony_ci * application is ready. 1358c2ecf20Sopenharmony_ci */ 1368c2ecf20Sopenharmony_cistruct octeon_core_setup { 1378c2ecf20Sopenharmony_ci u64 corefreq; 1388c2ecf20Sopenharmony_ci 1398c2ecf20Sopenharmony_ci char boardname[OCT_BOARD_NAME]; 1408c2ecf20Sopenharmony_ci 1418c2ecf20Sopenharmony_ci char board_serial_number[OCT_SERIAL_LEN]; 1428c2ecf20Sopenharmony_ci 1438c2ecf20Sopenharmony_ci u64 board_rev_major; 1448c2ecf20Sopenharmony_ci 1458c2ecf20Sopenharmony_ci u64 board_rev_minor; 1468c2ecf20Sopenharmony_ci 1478c2ecf20Sopenharmony_ci}; 1488c2ecf20Sopenharmony_ci 1498c2ecf20Sopenharmony_ci/*--------------------------- SCATTER GATHER ENTRY -----------------------*/ 1508c2ecf20Sopenharmony_ci 1518c2ecf20Sopenharmony_ci/* The Scatter-Gather List Entry. The scatter or gather component used with 1528c2ecf20Sopenharmony_ci * a Octeon input instruction has this format. 1538c2ecf20Sopenharmony_ci */ 1548c2ecf20Sopenharmony_cistruct octeon_sg_entry { 1558c2ecf20Sopenharmony_ci /** The first 64 bit gives the size of data in each dptr.*/ 1568c2ecf20Sopenharmony_ci union { 1578c2ecf20Sopenharmony_ci u16 size[4]; 1588c2ecf20Sopenharmony_ci u64 size64; 1598c2ecf20Sopenharmony_ci } u; 1608c2ecf20Sopenharmony_ci 1618c2ecf20Sopenharmony_ci /** The 4 dptr pointers for this entry. */ 1628c2ecf20Sopenharmony_ci u64 ptr[4]; 1638c2ecf20Sopenharmony_ci 1648c2ecf20Sopenharmony_ci}; 1658c2ecf20Sopenharmony_ci 1668c2ecf20Sopenharmony_ci#define OCT_SG_ENTRY_SIZE (sizeof(struct octeon_sg_entry)) 1678c2ecf20Sopenharmony_ci 1688c2ecf20Sopenharmony_ci/* \brief Add size to gather list 1698c2ecf20Sopenharmony_ci * @param sg_entry scatter/gather entry 1708c2ecf20Sopenharmony_ci * @param size size to add 1718c2ecf20Sopenharmony_ci * @param pos position to add it. 1728c2ecf20Sopenharmony_ci */ 1738c2ecf20Sopenharmony_cistatic inline void add_sg_size(struct octeon_sg_entry *sg_entry, 1748c2ecf20Sopenharmony_ci u16 size, 1758c2ecf20Sopenharmony_ci u32 pos) 1768c2ecf20Sopenharmony_ci{ 1778c2ecf20Sopenharmony_ci#ifdef __BIG_ENDIAN_BITFIELD 1788c2ecf20Sopenharmony_ci sg_entry->u.size[pos] = size; 1798c2ecf20Sopenharmony_ci#else 1808c2ecf20Sopenharmony_ci sg_entry->u.size[3 - pos] = size; 1818c2ecf20Sopenharmony_ci#endif 1828c2ecf20Sopenharmony_ci} 1838c2ecf20Sopenharmony_ci 1848c2ecf20Sopenharmony_ci/*------------------------- End Scatter/Gather ---------------------------*/ 1858c2ecf20Sopenharmony_ci 1868c2ecf20Sopenharmony_ci#define OCTNET_FRM_LENGTH_SIZE 8 1878c2ecf20Sopenharmony_ci 1888c2ecf20Sopenharmony_ci#define OCTNET_FRM_PTP_HEADER_SIZE 8 1898c2ecf20Sopenharmony_ci 1908c2ecf20Sopenharmony_ci#define OCTNET_FRM_HEADER_SIZE 22 /* VLAN + Ethernet */ 1918c2ecf20Sopenharmony_ci 1928c2ecf20Sopenharmony_ci#define OCTNET_MIN_FRM_SIZE 64 1938c2ecf20Sopenharmony_ci 1948c2ecf20Sopenharmony_ci#define OCTNET_MAX_FRM_SIZE (16000 + OCTNET_FRM_HEADER_SIZE) 1958c2ecf20Sopenharmony_ci 1968c2ecf20Sopenharmony_ci#define OCTNET_DEFAULT_MTU (1500) 1978c2ecf20Sopenharmony_ci#define OCTNET_DEFAULT_FRM_SIZE (OCTNET_DEFAULT_MTU + OCTNET_FRM_HEADER_SIZE) 1988c2ecf20Sopenharmony_ci 1998c2ecf20Sopenharmony_ci/** NIC Commands are sent using this Octeon Input Queue */ 2008c2ecf20Sopenharmony_ci#define OCTNET_CMD_Q 0 2018c2ecf20Sopenharmony_ci 2028c2ecf20Sopenharmony_ci/* NIC Command types */ 2038c2ecf20Sopenharmony_ci#define OCTNET_CMD_CHANGE_MTU 0x1 2048c2ecf20Sopenharmony_ci#define OCTNET_CMD_CHANGE_MACADDR 0x2 2058c2ecf20Sopenharmony_ci#define OCTNET_CMD_CHANGE_DEVFLAGS 0x3 2068c2ecf20Sopenharmony_ci#define OCTNET_CMD_RX_CTL 0x4 2078c2ecf20Sopenharmony_ci 2088c2ecf20Sopenharmony_ci#define OCTNET_CMD_SET_MULTI_LIST 0x5 2098c2ecf20Sopenharmony_ci#define OCTNET_CMD_CLEAR_STATS 0x6 2108c2ecf20Sopenharmony_ci 2118c2ecf20Sopenharmony_ci/* command for setting the speed, duplex & autoneg */ 2128c2ecf20Sopenharmony_ci#define OCTNET_CMD_SET_SETTINGS 0x7 2138c2ecf20Sopenharmony_ci#define OCTNET_CMD_SET_FLOW_CTL 0x8 2148c2ecf20Sopenharmony_ci 2158c2ecf20Sopenharmony_ci#define OCTNET_CMD_MDIO_READ_WRITE 0x9 2168c2ecf20Sopenharmony_ci#define OCTNET_CMD_GPIO_ACCESS 0xA 2178c2ecf20Sopenharmony_ci#define OCTNET_CMD_LRO_ENABLE 0xB 2188c2ecf20Sopenharmony_ci#define OCTNET_CMD_LRO_DISABLE 0xC 2198c2ecf20Sopenharmony_ci#define OCTNET_CMD_SET_RSS 0xD 2208c2ecf20Sopenharmony_ci#define OCTNET_CMD_WRITE_SA 0xE 2218c2ecf20Sopenharmony_ci#define OCTNET_CMD_DELETE_SA 0xF 2228c2ecf20Sopenharmony_ci#define OCTNET_CMD_UPDATE_SA 0x12 2238c2ecf20Sopenharmony_ci 2248c2ecf20Sopenharmony_ci#define OCTNET_CMD_TNL_RX_CSUM_CTL 0x10 2258c2ecf20Sopenharmony_ci#define OCTNET_CMD_TNL_TX_CSUM_CTL 0x11 2268c2ecf20Sopenharmony_ci#define OCTNET_CMD_IPSECV2_AH_ESP_CTL 0x13 2278c2ecf20Sopenharmony_ci#define OCTNET_CMD_VERBOSE_ENABLE 0x14 2288c2ecf20Sopenharmony_ci#define OCTNET_CMD_VERBOSE_DISABLE 0x15 2298c2ecf20Sopenharmony_ci 2308c2ecf20Sopenharmony_ci#define OCTNET_CMD_VLAN_FILTER_CTL 0x16 2318c2ecf20Sopenharmony_ci#define OCTNET_CMD_ADD_VLAN_FILTER 0x17 2328c2ecf20Sopenharmony_ci#define OCTNET_CMD_DEL_VLAN_FILTER 0x18 2338c2ecf20Sopenharmony_ci#define OCTNET_CMD_VXLAN_PORT_CONFIG 0x19 2348c2ecf20Sopenharmony_ci 2358c2ecf20Sopenharmony_ci#define OCTNET_CMD_ID_ACTIVE 0x1a 2368c2ecf20Sopenharmony_ci 2378c2ecf20Sopenharmony_ci#define OCTNET_CMD_SET_UC_LIST 0x1b 2388c2ecf20Sopenharmony_ci#define OCTNET_CMD_SET_VF_LINKSTATE 0x1c 2398c2ecf20Sopenharmony_ci 2408c2ecf20Sopenharmony_ci#define OCTNET_CMD_QUEUE_COUNT_CTL 0x1f 2418c2ecf20Sopenharmony_ci 2428c2ecf20Sopenharmony_ci#define OCTNET_CMD_GROUP1 1 2438c2ecf20Sopenharmony_ci#define OCTNET_CMD_SET_VF_SPOOFCHK 0x1 2448c2ecf20Sopenharmony_ci#define OCTNET_GROUP1_LAST_CMD OCTNET_CMD_SET_VF_SPOOFCHK 2458c2ecf20Sopenharmony_ci 2468c2ecf20Sopenharmony_ci#define OCTNET_CMD_VXLAN_PORT_ADD 0x0 2478c2ecf20Sopenharmony_ci#define OCTNET_CMD_VXLAN_PORT_DEL 0x1 2488c2ecf20Sopenharmony_ci#define OCTNET_CMD_RXCSUM_ENABLE 0x0 2498c2ecf20Sopenharmony_ci#define OCTNET_CMD_RXCSUM_DISABLE 0x1 2508c2ecf20Sopenharmony_ci#define OCTNET_CMD_TXCSUM_ENABLE 0x0 2518c2ecf20Sopenharmony_ci#define OCTNET_CMD_TXCSUM_DISABLE 0x1 2528c2ecf20Sopenharmony_ci#define OCTNET_CMD_VLAN_FILTER_ENABLE 0x1 2538c2ecf20Sopenharmony_ci#define OCTNET_CMD_VLAN_FILTER_DISABLE 0x0 2548c2ecf20Sopenharmony_ci 2558c2ecf20Sopenharmony_ci#define OCTNET_CMD_FAIL 0x1 2568c2ecf20Sopenharmony_ci 2578c2ecf20Sopenharmony_ci#define SEAPI_CMD_FEC_SET 0x0 2588c2ecf20Sopenharmony_ci#define SEAPI_CMD_FEC_SET_DISABLE 0x0 2598c2ecf20Sopenharmony_ci#define SEAPI_CMD_FEC_SET_RS 0x1 2608c2ecf20Sopenharmony_ci#define SEAPI_CMD_FEC_GET 0x1 2618c2ecf20Sopenharmony_ci 2628c2ecf20Sopenharmony_ci#define SEAPI_CMD_SPEED_SET 0x2 2638c2ecf20Sopenharmony_ci#define SEAPI_CMD_SPEED_GET 0x3 2648c2ecf20Sopenharmony_ci 2658c2ecf20Sopenharmony_ci#define OPCODE_NIC_VF_PORT_STATS 0x22 2668c2ecf20Sopenharmony_ci 2678c2ecf20Sopenharmony_ci#define LIO_CMD_WAIT_TM 100 2688c2ecf20Sopenharmony_ci 2698c2ecf20Sopenharmony_ci/* RX(packets coming from wire) Checksum verification flags */ 2708c2ecf20Sopenharmony_ci/* TCP/UDP csum */ 2718c2ecf20Sopenharmony_ci#define CNNIC_L4SUM_VERIFIED 0x1 2728c2ecf20Sopenharmony_ci#define CNNIC_IPSUM_VERIFIED 0x2 2738c2ecf20Sopenharmony_ci#define CNNIC_TUN_CSUM_VERIFIED 0x4 2748c2ecf20Sopenharmony_ci#define CNNIC_CSUM_VERIFIED (CNNIC_IPSUM_VERIFIED | CNNIC_L4SUM_VERIFIED) 2758c2ecf20Sopenharmony_ci 2768c2ecf20Sopenharmony_ci/*LROIPV4 and LROIPV6 Flags*/ 2778c2ecf20Sopenharmony_ci#define OCTNIC_LROIPV4 0x1 2788c2ecf20Sopenharmony_ci#define OCTNIC_LROIPV6 0x2 2798c2ecf20Sopenharmony_ci 2808c2ecf20Sopenharmony_ci/* Interface flags communicated between host driver and core app. */ 2818c2ecf20Sopenharmony_cienum octnet_ifflags { 2828c2ecf20Sopenharmony_ci OCTNET_IFFLAG_PROMISC = 0x01, 2838c2ecf20Sopenharmony_ci OCTNET_IFFLAG_ALLMULTI = 0x02, 2848c2ecf20Sopenharmony_ci OCTNET_IFFLAG_MULTICAST = 0x04, 2858c2ecf20Sopenharmony_ci OCTNET_IFFLAG_BROADCAST = 0x08, 2868c2ecf20Sopenharmony_ci OCTNET_IFFLAG_UNICAST = 0x10 2878c2ecf20Sopenharmony_ci}; 2888c2ecf20Sopenharmony_ci 2898c2ecf20Sopenharmony_ci/* wqe 2908c2ecf20Sopenharmony_ci * --------------- 0 2918c2ecf20Sopenharmony_ci * | wqe word0-3 | 2928c2ecf20Sopenharmony_ci * --------------- 32 2938c2ecf20Sopenharmony_ci * | PCI IH | 2948c2ecf20Sopenharmony_ci * --------------- 40 2958c2ecf20Sopenharmony_ci * | RPTR | 2968c2ecf20Sopenharmony_ci * --------------- 48 2978c2ecf20Sopenharmony_ci * | PCI IRH | 2988c2ecf20Sopenharmony_ci * --------------- 56 2998c2ecf20Sopenharmony_ci * | OCT_NET_CMD | 3008c2ecf20Sopenharmony_ci * --------------- 64 3018c2ecf20Sopenharmony_ci * | Addtl 8-BData | 3028c2ecf20Sopenharmony_ci * | | 3038c2ecf20Sopenharmony_ci * --------------- 3048c2ecf20Sopenharmony_ci */ 3058c2ecf20Sopenharmony_ci 3068c2ecf20Sopenharmony_ciunion octnet_cmd { 3078c2ecf20Sopenharmony_ci u64 u64; 3088c2ecf20Sopenharmony_ci 3098c2ecf20Sopenharmony_ci struct { 3108c2ecf20Sopenharmony_ci#ifdef __BIG_ENDIAN_BITFIELD 3118c2ecf20Sopenharmony_ci u64 cmd:5; 3128c2ecf20Sopenharmony_ci 3138c2ecf20Sopenharmony_ci u64 more:6; /* How many udd words follow the command */ 3148c2ecf20Sopenharmony_ci 3158c2ecf20Sopenharmony_ci u64 cmdgroup:8; 3168c2ecf20Sopenharmony_ci u64 reserved:21; 3178c2ecf20Sopenharmony_ci 3188c2ecf20Sopenharmony_ci u64 param1:16; 3198c2ecf20Sopenharmony_ci 3208c2ecf20Sopenharmony_ci u64 param2:8; 3218c2ecf20Sopenharmony_ci 3228c2ecf20Sopenharmony_ci#else 3238c2ecf20Sopenharmony_ci 3248c2ecf20Sopenharmony_ci u64 param2:8; 3258c2ecf20Sopenharmony_ci 3268c2ecf20Sopenharmony_ci u64 param1:16; 3278c2ecf20Sopenharmony_ci 3288c2ecf20Sopenharmony_ci u64 reserved:21; 3298c2ecf20Sopenharmony_ci u64 cmdgroup:8; 3308c2ecf20Sopenharmony_ci 3318c2ecf20Sopenharmony_ci u64 more:6; 3328c2ecf20Sopenharmony_ci 3338c2ecf20Sopenharmony_ci u64 cmd:5; 3348c2ecf20Sopenharmony_ci 3358c2ecf20Sopenharmony_ci#endif 3368c2ecf20Sopenharmony_ci } s; 3378c2ecf20Sopenharmony_ci 3388c2ecf20Sopenharmony_ci}; 3398c2ecf20Sopenharmony_ci 3408c2ecf20Sopenharmony_ci#define OCTNET_CMD_SIZE (sizeof(union octnet_cmd)) 3418c2ecf20Sopenharmony_ci 3428c2ecf20Sopenharmony_ci/*pkiih3 + irh + ossp[0] + ossp[1] + rdp + rptr = 40 bytes */ 3438c2ecf20Sopenharmony_ci#define LIO_SOFTCMDRESP_IH2 40 3448c2ecf20Sopenharmony_ci#define LIO_SOFTCMDRESP_IH3 (40 + 8) 3458c2ecf20Sopenharmony_ci 3468c2ecf20Sopenharmony_ci#define LIO_PCICMD_O2 24 3478c2ecf20Sopenharmony_ci#define LIO_PCICMD_O3 (24 + 8) 3488c2ecf20Sopenharmony_ci 3498c2ecf20Sopenharmony_ci/* Instruction Header(DPI) - for OCTEON-III models */ 3508c2ecf20Sopenharmony_cistruct octeon_instr_ih3 { 3518c2ecf20Sopenharmony_ci#ifdef __BIG_ENDIAN_BITFIELD 3528c2ecf20Sopenharmony_ci 3538c2ecf20Sopenharmony_ci /** Reserved3 */ 3548c2ecf20Sopenharmony_ci u64 reserved3:1; 3558c2ecf20Sopenharmony_ci 3568c2ecf20Sopenharmony_ci /** Gather indicator 1=gather*/ 3578c2ecf20Sopenharmony_ci u64 gather:1; 3588c2ecf20Sopenharmony_ci 3598c2ecf20Sopenharmony_ci /** Data length OR no. of entries in gather list */ 3608c2ecf20Sopenharmony_ci u64 dlengsz:14; 3618c2ecf20Sopenharmony_ci 3628c2ecf20Sopenharmony_ci /** Front Data size */ 3638c2ecf20Sopenharmony_ci u64 fsz:6; 3648c2ecf20Sopenharmony_ci 3658c2ecf20Sopenharmony_ci /** Reserved2 */ 3668c2ecf20Sopenharmony_ci u64 reserved2:4; 3678c2ecf20Sopenharmony_ci 3688c2ecf20Sopenharmony_ci /** PKI port kind - PKIND */ 3698c2ecf20Sopenharmony_ci u64 pkind:6; 3708c2ecf20Sopenharmony_ci 3718c2ecf20Sopenharmony_ci /** Reserved1 */ 3728c2ecf20Sopenharmony_ci u64 reserved1:32; 3738c2ecf20Sopenharmony_ci 3748c2ecf20Sopenharmony_ci#else 3758c2ecf20Sopenharmony_ci /** Reserved1 */ 3768c2ecf20Sopenharmony_ci u64 reserved1:32; 3778c2ecf20Sopenharmony_ci 3788c2ecf20Sopenharmony_ci /** PKI port kind - PKIND */ 3798c2ecf20Sopenharmony_ci u64 pkind:6; 3808c2ecf20Sopenharmony_ci 3818c2ecf20Sopenharmony_ci /** Reserved2 */ 3828c2ecf20Sopenharmony_ci u64 reserved2:4; 3838c2ecf20Sopenharmony_ci 3848c2ecf20Sopenharmony_ci /** Front Data size */ 3858c2ecf20Sopenharmony_ci u64 fsz:6; 3868c2ecf20Sopenharmony_ci 3878c2ecf20Sopenharmony_ci /** Data length OR no. of entries in gather list */ 3888c2ecf20Sopenharmony_ci u64 dlengsz:14; 3898c2ecf20Sopenharmony_ci 3908c2ecf20Sopenharmony_ci /** Gather indicator 1=gather*/ 3918c2ecf20Sopenharmony_ci u64 gather:1; 3928c2ecf20Sopenharmony_ci 3938c2ecf20Sopenharmony_ci /** Reserved3 */ 3948c2ecf20Sopenharmony_ci u64 reserved3:1; 3958c2ecf20Sopenharmony_ci 3968c2ecf20Sopenharmony_ci#endif 3978c2ecf20Sopenharmony_ci}; 3988c2ecf20Sopenharmony_ci 3998c2ecf20Sopenharmony_ci/* Optional PKI Instruction Header(PKI IH) - for OCTEON-III models */ 4008c2ecf20Sopenharmony_ci/** BIG ENDIAN format. */ 4018c2ecf20Sopenharmony_cistruct octeon_instr_pki_ih3 { 4028c2ecf20Sopenharmony_ci#ifdef __BIG_ENDIAN_BITFIELD 4038c2ecf20Sopenharmony_ci 4048c2ecf20Sopenharmony_ci /** Wider bit */ 4058c2ecf20Sopenharmony_ci u64 w:1; 4068c2ecf20Sopenharmony_ci 4078c2ecf20Sopenharmony_ci /** Raw mode indicator 1 = RAW */ 4088c2ecf20Sopenharmony_ci u64 raw:1; 4098c2ecf20Sopenharmony_ci 4108c2ecf20Sopenharmony_ci /** Use Tag */ 4118c2ecf20Sopenharmony_ci u64 utag:1; 4128c2ecf20Sopenharmony_ci 4138c2ecf20Sopenharmony_ci /** Use QPG */ 4148c2ecf20Sopenharmony_ci u64 uqpg:1; 4158c2ecf20Sopenharmony_ci 4168c2ecf20Sopenharmony_ci /** Reserved2 */ 4178c2ecf20Sopenharmony_ci u64 reserved2:1; 4188c2ecf20Sopenharmony_ci 4198c2ecf20Sopenharmony_ci /** Parse Mode */ 4208c2ecf20Sopenharmony_ci u64 pm:3; 4218c2ecf20Sopenharmony_ci 4228c2ecf20Sopenharmony_ci /** Skip Length */ 4238c2ecf20Sopenharmony_ci u64 sl:8; 4248c2ecf20Sopenharmony_ci 4258c2ecf20Sopenharmony_ci /** Use Tag Type */ 4268c2ecf20Sopenharmony_ci u64 utt:1; 4278c2ecf20Sopenharmony_ci 4288c2ecf20Sopenharmony_ci /** Tag type */ 4298c2ecf20Sopenharmony_ci u64 tagtype:2; 4308c2ecf20Sopenharmony_ci 4318c2ecf20Sopenharmony_ci /** Reserved1 */ 4328c2ecf20Sopenharmony_ci u64 reserved1:2; 4338c2ecf20Sopenharmony_ci 4348c2ecf20Sopenharmony_ci /** QPG Value */ 4358c2ecf20Sopenharmony_ci u64 qpg:11; 4368c2ecf20Sopenharmony_ci 4378c2ecf20Sopenharmony_ci /** Tag Value */ 4388c2ecf20Sopenharmony_ci u64 tag:32; 4398c2ecf20Sopenharmony_ci 4408c2ecf20Sopenharmony_ci#else 4418c2ecf20Sopenharmony_ci 4428c2ecf20Sopenharmony_ci /** Tag Value */ 4438c2ecf20Sopenharmony_ci u64 tag:32; 4448c2ecf20Sopenharmony_ci 4458c2ecf20Sopenharmony_ci /** QPG Value */ 4468c2ecf20Sopenharmony_ci u64 qpg:11; 4478c2ecf20Sopenharmony_ci 4488c2ecf20Sopenharmony_ci /** Reserved1 */ 4498c2ecf20Sopenharmony_ci u64 reserved1:2; 4508c2ecf20Sopenharmony_ci 4518c2ecf20Sopenharmony_ci /** Tag type */ 4528c2ecf20Sopenharmony_ci u64 tagtype:2; 4538c2ecf20Sopenharmony_ci 4548c2ecf20Sopenharmony_ci /** Use Tag Type */ 4558c2ecf20Sopenharmony_ci u64 utt:1; 4568c2ecf20Sopenharmony_ci 4578c2ecf20Sopenharmony_ci /** Skip Length */ 4588c2ecf20Sopenharmony_ci u64 sl:8; 4598c2ecf20Sopenharmony_ci 4608c2ecf20Sopenharmony_ci /** Parse Mode */ 4618c2ecf20Sopenharmony_ci u64 pm:3; 4628c2ecf20Sopenharmony_ci 4638c2ecf20Sopenharmony_ci /** Reserved2 */ 4648c2ecf20Sopenharmony_ci u64 reserved2:1; 4658c2ecf20Sopenharmony_ci 4668c2ecf20Sopenharmony_ci /** Use QPG */ 4678c2ecf20Sopenharmony_ci u64 uqpg:1; 4688c2ecf20Sopenharmony_ci 4698c2ecf20Sopenharmony_ci /** Use Tag */ 4708c2ecf20Sopenharmony_ci u64 utag:1; 4718c2ecf20Sopenharmony_ci 4728c2ecf20Sopenharmony_ci /** Raw mode indicator 1 = RAW */ 4738c2ecf20Sopenharmony_ci u64 raw:1; 4748c2ecf20Sopenharmony_ci 4758c2ecf20Sopenharmony_ci /** Wider bit */ 4768c2ecf20Sopenharmony_ci u64 w:1; 4778c2ecf20Sopenharmony_ci#endif 4788c2ecf20Sopenharmony_ci 4798c2ecf20Sopenharmony_ci}; 4808c2ecf20Sopenharmony_ci 4818c2ecf20Sopenharmony_ci/** Instruction Header */ 4828c2ecf20Sopenharmony_cistruct octeon_instr_ih2 { 4838c2ecf20Sopenharmony_ci#ifdef __BIG_ENDIAN_BITFIELD 4848c2ecf20Sopenharmony_ci /** Raw mode indicator 1 = RAW */ 4858c2ecf20Sopenharmony_ci u64 raw:1; 4868c2ecf20Sopenharmony_ci 4878c2ecf20Sopenharmony_ci /** Gather indicator 1=gather*/ 4888c2ecf20Sopenharmony_ci u64 gather:1; 4898c2ecf20Sopenharmony_ci 4908c2ecf20Sopenharmony_ci /** Data length OR no. of entries in gather list */ 4918c2ecf20Sopenharmony_ci u64 dlengsz:14; 4928c2ecf20Sopenharmony_ci 4938c2ecf20Sopenharmony_ci /** Front Data size */ 4948c2ecf20Sopenharmony_ci u64 fsz:6; 4958c2ecf20Sopenharmony_ci 4968c2ecf20Sopenharmony_ci /** Packet Order / Work Unit selection (1 of 8)*/ 4978c2ecf20Sopenharmony_ci u64 qos:3; 4988c2ecf20Sopenharmony_ci 4998c2ecf20Sopenharmony_ci /** Core group selection (1 of 16) */ 5008c2ecf20Sopenharmony_ci u64 grp:4; 5018c2ecf20Sopenharmony_ci 5028c2ecf20Sopenharmony_ci /** Short Raw Packet Indicator 1=short raw pkt */ 5038c2ecf20Sopenharmony_ci u64 rs:1; 5048c2ecf20Sopenharmony_ci 5058c2ecf20Sopenharmony_ci /** Tag type */ 5068c2ecf20Sopenharmony_ci u64 tagtype:2; 5078c2ecf20Sopenharmony_ci 5088c2ecf20Sopenharmony_ci /** Tag Value */ 5098c2ecf20Sopenharmony_ci u64 tag:32; 5108c2ecf20Sopenharmony_ci#else 5118c2ecf20Sopenharmony_ci /** Tag Value */ 5128c2ecf20Sopenharmony_ci u64 tag:32; 5138c2ecf20Sopenharmony_ci 5148c2ecf20Sopenharmony_ci /** Tag type */ 5158c2ecf20Sopenharmony_ci u64 tagtype:2; 5168c2ecf20Sopenharmony_ci 5178c2ecf20Sopenharmony_ci /** Short Raw Packet Indicator 1=short raw pkt */ 5188c2ecf20Sopenharmony_ci u64 rs:1; 5198c2ecf20Sopenharmony_ci 5208c2ecf20Sopenharmony_ci /** Core group selection (1 of 16) */ 5218c2ecf20Sopenharmony_ci u64 grp:4; 5228c2ecf20Sopenharmony_ci 5238c2ecf20Sopenharmony_ci /** Packet Order / Work Unit selection (1 of 8)*/ 5248c2ecf20Sopenharmony_ci u64 qos:3; 5258c2ecf20Sopenharmony_ci 5268c2ecf20Sopenharmony_ci /** Front Data size */ 5278c2ecf20Sopenharmony_ci u64 fsz:6; 5288c2ecf20Sopenharmony_ci 5298c2ecf20Sopenharmony_ci /** Data length OR no. of entries in gather list */ 5308c2ecf20Sopenharmony_ci u64 dlengsz:14; 5318c2ecf20Sopenharmony_ci 5328c2ecf20Sopenharmony_ci /** Gather indicator 1=gather*/ 5338c2ecf20Sopenharmony_ci u64 gather:1; 5348c2ecf20Sopenharmony_ci 5358c2ecf20Sopenharmony_ci /** Raw mode indicator 1 = RAW */ 5368c2ecf20Sopenharmony_ci u64 raw:1; 5378c2ecf20Sopenharmony_ci#endif 5388c2ecf20Sopenharmony_ci}; 5398c2ecf20Sopenharmony_ci 5408c2ecf20Sopenharmony_ci/** Input Request Header */ 5418c2ecf20Sopenharmony_cistruct octeon_instr_irh { 5428c2ecf20Sopenharmony_ci#ifdef __BIG_ENDIAN_BITFIELD 5438c2ecf20Sopenharmony_ci u64 opcode:4; 5448c2ecf20Sopenharmony_ci u64 rflag:1; 5458c2ecf20Sopenharmony_ci u64 subcode:7; 5468c2ecf20Sopenharmony_ci u64 vlan:12; 5478c2ecf20Sopenharmony_ci u64 priority:3; 5488c2ecf20Sopenharmony_ci u64 reserved:5; 5498c2ecf20Sopenharmony_ci u64 ossp:32; /* opcode/subcode specific parameters */ 5508c2ecf20Sopenharmony_ci#else 5518c2ecf20Sopenharmony_ci u64 ossp:32; /* opcode/subcode specific parameters */ 5528c2ecf20Sopenharmony_ci u64 reserved:5; 5538c2ecf20Sopenharmony_ci u64 priority:3; 5548c2ecf20Sopenharmony_ci u64 vlan:12; 5558c2ecf20Sopenharmony_ci u64 subcode:7; 5568c2ecf20Sopenharmony_ci u64 rflag:1; 5578c2ecf20Sopenharmony_ci u64 opcode:4; 5588c2ecf20Sopenharmony_ci#endif 5598c2ecf20Sopenharmony_ci}; 5608c2ecf20Sopenharmony_ci 5618c2ecf20Sopenharmony_ci/** Return Data Parameters */ 5628c2ecf20Sopenharmony_cistruct octeon_instr_rdp { 5638c2ecf20Sopenharmony_ci#ifdef __BIG_ENDIAN_BITFIELD 5648c2ecf20Sopenharmony_ci u64 reserved:49; 5658c2ecf20Sopenharmony_ci u64 pcie_port:3; 5668c2ecf20Sopenharmony_ci u64 rlen:12; 5678c2ecf20Sopenharmony_ci#else 5688c2ecf20Sopenharmony_ci u64 rlen:12; 5698c2ecf20Sopenharmony_ci u64 pcie_port:3; 5708c2ecf20Sopenharmony_ci u64 reserved:49; 5718c2ecf20Sopenharmony_ci#endif 5728c2ecf20Sopenharmony_ci}; 5738c2ecf20Sopenharmony_ci 5748c2ecf20Sopenharmony_ci/** Receive Header */ 5758c2ecf20Sopenharmony_ciunion octeon_rh { 5768c2ecf20Sopenharmony_ci#ifdef __BIG_ENDIAN_BITFIELD 5778c2ecf20Sopenharmony_ci u64 u64; 5788c2ecf20Sopenharmony_ci struct { 5798c2ecf20Sopenharmony_ci u64 opcode:4; 5808c2ecf20Sopenharmony_ci u64 subcode:8; 5818c2ecf20Sopenharmony_ci u64 len:3; /** additional 64-bit words */ 5828c2ecf20Sopenharmony_ci u64 reserved:17; 5838c2ecf20Sopenharmony_ci u64 ossp:32; /** opcode/subcode specific parameters */ 5848c2ecf20Sopenharmony_ci } r; 5858c2ecf20Sopenharmony_ci struct { 5868c2ecf20Sopenharmony_ci u64 opcode:4; 5878c2ecf20Sopenharmony_ci u64 subcode:8; 5888c2ecf20Sopenharmony_ci u64 len:3; /** additional 64-bit words */ 5898c2ecf20Sopenharmony_ci u64 extra:28; 5908c2ecf20Sopenharmony_ci u64 vlan:12; 5918c2ecf20Sopenharmony_ci u64 priority:3; 5928c2ecf20Sopenharmony_ci u64 csum_verified:3; /** checksum verified. */ 5938c2ecf20Sopenharmony_ci u64 has_hwtstamp:1; /** Has hardware timestamp. 1 = yes. */ 5948c2ecf20Sopenharmony_ci u64 encap_on:1; 5958c2ecf20Sopenharmony_ci u64 has_hash:1; /** Has hash (rth or rss). 1 = yes. */ 5968c2ecf20Sopenharmony_ci } r_dh; 5978c2ecf20Sopenharmony_ci struct { 5988c2ecf20Sopenharmony_ci u64 opcode:4; 5998c2ecf20Sopenharmony_ci u64 subcode:8; 6008c2ecf20Sopenharmony_ci u64 len:3; /** additional 64-bit words */ 6018c2ecf20Sopenharmony_ci u64 reserved:11; 6028c2ecf20Sopenharmony_ci u64 num_gmx_ports:8; 6038c2ecf20Sopenharmony_ci u64 max_nic_ports:10; 6048c2ecf20Sopenharmony_ci u64 app_cap_flags:4; 6058c2ecf20Sopenharmony_ci u64 app_mode:8; 6068c2ecf20Sopenharmony_ci u64 pkind:8; 6078c2ecf20Sopenharmony_ci } r_core_drv_init; 6088c2ecf20Sopenharmony_ci struct { 6098c2ecf20Sopenharmony_ci u64 opcode:4; 6108c2ecf20Sopenharmony_ci u64 subcode:8; 6118c2ecf20Sopenharmony_ci u64 len:3; /** additional 64-bit words */ 6128c2ecf20Sopenharmony_ci u64 reserved:8; 6138c2ecf20Sopenharmony_ci u64 extra:25; 6148c2ecf20Sopenharmony_ci u64 gmxport:16; 6158c2ecf20Sopenharmony_ci } r_nic_info; 6168c2ecf20Sopenharmony_ci#else 6178c2ecf20Sopenharmony_ci u64 u64; 6188c2ecf20Sopenharmony_ci struct { 6198c2ecf20Sopenharmony_ci u64 ossp:32; /** opcode/subcode specific parameters */ 6208c2ecf20Sopenharmony_ci u64 reserved:17; 6218c2ecf20Sopenharmony_ci u64 len:3; /** additional 64-bit words */ 6228c2ecf20Sopenharmony_ci u64 subcode:8; 6238c2ecf20Sopenharmony_ci u64 opcode:4; 6248c2ecf20Sopenharmony_ci } r; 6258c2ecf20Sopenharmony_ci struct { 6268c2ecf20Sopenharmony_ci u64 has_hash:1; /** Has hash (rth or rss). 1 = yes. */ 6278c2ecf20Sopenharmony_ci u64 encap_on:1; 6288c2ecf20Sopenharmony_ci u64 has_hwtstamp:1; /** 1 = has hwtstamp */ 6298c2ecf20Sopenharmony_ci u64 csum_verified:3; /** checksum verified. */ 6308c2ecf20Sopenharmony_ci u64 priority:3; 6318c2ecf20Sopenharmony_ci u64 vlan:12; 6328c2ecf20Sopenharmony_ci u64 extra:28; 6338c2ecf20Sopenharmony_ci u64 len:3; /** additional 64-bit words */ 6348c2ecf20Sopenharmony_ci u64 subcode:8; 6358c2ecf20Sopenharmony_ci u64 opcode:4; 6368c2ecf20Sopenharmony_ci } r_dh; 6378c2ecf20Sopenharmony_ci struct { 6388c2ecf20Sopenharmony_ci u64 pkind:8; 6398c2ecf20Sopenharmony_ci u64 app_mode:8; 6408c2ecf20Sopenharmony_ci u64 app_cap_flags:4; 6418c2ecf20Sopenharmony_ci u64 max_nic_ports:10; 6428c2ecf20Sopenharmony_ci u64 num_gmx_ports:8; 6438c2ecf20Sopenharmony_ci u64 reserved:11; 6448c2ecf20Sopenharmony_ci u64 len:3; /** additional 64-bit words */ 6458c2ecf20Sopenharmony_ci u64 subcode:8; 6468c2ecf20Sopenharmony_ci u64 opcode:4; 6478c2ecf20Sopenharmony_ci } r_core_drv_init; 6488c2ecf20Sopenharmony_ci struct { 6498c2ecf20Sopenharmony_ci u64 gmxport:16; 6508c2ecf20Sopenharmony_ci u64 extra:25; 6518c2ecf20Sopenharmony_ci u64 reserved:8; 6528c2ecf20Sopenharmony_ci u64 len:3; /** additional 64-bit words */ 6538c2ecf20Sopenharmony_ci u64 subcode:8; 6548c2ecf20Sopenharmony_ci u64 opcode:4; 6558c2ecf20Sopenharmony_ci } r_nic_info; 6568c2ecf20Sopenharmony_ci#endif 6578c2ecf20Sopenharmony_ci}; 6588c2ecf20Sopenharmony_ci 6598c2ecf20Sopenharmony_ci#define OCT_RH_SIZE (sizeof(union octeon_rh)) 6608c2ecf20Sopenharmony_ci 6618c2ecf20Sopenharmony_ciunion octnic_packet_params { 6628c2ecf20Sopenharmony_ci u32 u32; 6638c2ecf20Sopenharmony_ci struct { 6648c2ecf20Sopenharmony_ci#ifdef __BIG_ENDIAN_BITFIELD 6658c2ecf20Sopenharmony_ci u32 reserved:24; 6668c2ecf20Sopenharmony_ci u32 ip_csum:1; /* Perform IP header checksum(s) */ 6678c2ecf20Sopenharmony_ci /* Perform Outer transport header checksum */ 6688c2ecf20Sopenharmony_ci u32 transport_csum:1; 6698c2ecf20Sopenharmony_ci /* Find tunnel, and perform transport csum. */ 6708c2ecf20Sopenharmony_ci u32 tnl_csum:1; 6718c2ecf20Sopenharmony_ci u32 tsflag:1; /* Timestamp this packet */ 6728c2ecf20Sopenharmony_ci u32 ipsec_ops:4; /* IPsec operation */ 6738c2ecf20Sopenharmony_ci#else 6748c2ecf20Sopenharmony_ci u32 ipsec_ops:4; 6758c2ecf20Sopenharmony_ci u32 tsflag:1; 6768c2ecf20Sopenharmony_ci u32 tnl_csum:1; 6778c2ecf20Sopenharmony_ci u32 transport_csum:1; 6788c2ecf20Sopenharmony_ci u32 ip_csum:1; 6798c2ecf20Sopenharmony_ci u32 reserved:24; 6808c2ecf20Sopenharmony_ci#endif 6818c2ecf20Sopenharmony_ci } s; 6828c2ecf20Sopenharmony_ci}; 6838c2ecf20Sopenharmony_ci 6848c2ecf20Sopenharmony_ci/** Status of a RGMII Link on Octeon as seen by core driver. */ 6858c2ecf20Sopenharmony_ciunion oct_link_status { 6868c2ecf20Sopenharmony_ci u64 u64; 6878c2ecf20Sopenharmony_ci 6888c2ecf20Sopenharmony_ci struct { 6898c2ecf20Sopenharmony_ci#ifdef __BIG_ENDIAN_BITFIELD 6908c2ecf20Sopenharmony_ci u64 duplex:8; 6918c2ecf20Sopenharmony_ci u64 mtu:16; 6928c2ecf20Sopenharmony_ci u64 speed:16; 6938c2ecf20Sopenharmony_ci u64 link_up:1; 6948c2ecf20Sopenharmony_ci u64 autoneg:1; 6958c2ecf20Sopenharmony_ci u64 if_mode:5; 6968c2ecf20Sopenharmony_ci u64 pause:1; 6978c2ecf20Sopenharmony_ci u64 flashing:1; 6988c2ecf20Sopenharmony_ci u64 phy_type:5; 6998c2ecf20Sopenharmony_ci u64 reserved:10; 7008c2ecf20Sopenharmony_ci#else 7018c2ecf20Sopenharmony_ci u64 reserved:10; 7028c2ecf20Sopenharmony_ci u64 phy_type:5; 7038c2ecf20Sopenharmony_ci u64 flashing:1; 7048c2ecf20Sopenharmony_ci u64 pause:1; 7058c2ecf20Sopenharmony_ci u64 if_mode:5; 7068c2ecf20Sopenharmony_ci u64 autoneg:1; 7078c2ecf20Sopenharmony_ci u64 link_up:1; 7088c2ecf20Sopenharmony_ci u64 speed:16; 7098c2ecf20Sopenharmony_ci u64 mtu:16; 7108c2ecf20Sopenharmony_ci u64 duplex:8; 7118c2ecf20Sopenharmony_ci#endif 7128c2ecf20Sopenharmony_ci } s; 7138c2ecf20Sopenharmony_ci}; 7148c2ecf20Sopenharmony_ci 7158c2ecf20Sopenharmony_cienum lio_phy_type { 7168c2ecf20Sopenharmony_ci LIO_PHY_PORT_TP = 0x0, 7178c2ecf20Sopenharmony_ci LIO_PHY_PORT_FIBRE = 0x1, 7188c2ecf20Sopenharmony_ci LIO_PHY_PORT_UNKNOWN, 7198c2ecf20Sopenharmony_ci}; 7208c2ecf20Sopenharmony_ci 7218c2ecf20Sopenharmony_ci/** The txpciq info passed to host from the firmware */ 7228c2ecf20Sopenharmony_ci 7238c2ecf20Sopenharmony_ciunion oct_txpciq { 7248c2ecf20Sopenharmony_ci u64 u64; 7258c2ecf20Sopenharmony_ci 7268c2ecf20Sopenharmony_ci struct { 7278c2ecf20Sopenharmony_ci#ifdef __BIG_ENDIAN_BITFIELD 7288c2ecf20Sopenharmony_ci u64 q_no:8; 7298c2ecf20Sopenharmony_ci u64 port:8; 7308c2ecf20Sopenharmony_ci u64 pkind:6; 7318c2ecf20Sopenharmony_ci u64 use_qpg:1; 7328c2ecf20Sopenharmony_ci u64 qpg:11; 7338c2ecf20Sopenharmony_ci u64 reserved0:10; 7348c2ecf20Sopenharmony_ci u64 ctrl_qpg:11; 7358c2ecf20Sopenharmony_ci u64 reserved:9; 7368c2ecf20Sopenharmony_ci#else 7378c2ecf20Sopenharmony_ci u64 reserved:9; 7388c2ecf20Sopenharmony_ci u64 ctrl_qpg:11; 7398c2ecf20Sopenharmony_ci u64 reserved0:10; 7408c2ecf20Sopenharmony_ci u64 qpg:11; 7418c2ecf20Sopenharmony_ci u64 use_qpg:1; 7428c2ecf20Sopenharmony_ci u64 pkind:6; 7438c2ecf20Sopenharmony_ci u64 port:8; 7448c2ecf20Sopenharmony_ci u64 q_no:8; 7458c2ecf20Sopenharmony_ci#endif 7468c2ecf20Sopenharmony_ci } s; 7478c2ecf20Sopenharmony_ci}; 7488c2ecf20Sopenharmony_ci 7498c2ecf20Sopenharmony_ci/** The rxpciq info passed to host from the firmware */ 7508c2ecf20Sopenharmony_ci 7518c2ecf20Sopenharmony_ciunion oct_rxpciq { 7528c2ecf20Sopenharmony_ci u64 u64; 7538c2ecf20Sopenharmony_ci 7548c2ecf20Sopenharmony_ci struct { 7558c2ecf20Sopenharmony_ci#ifdef __BIG_ENDIAN_BITFIELD 7568c2ecf20Sopenharmony_ci u64 q_no:8; 7578c2ecf20Sopenharmony_ci u64 reserved:56; 7588c2ecf20Sopenharmony_ci#else 7598c2ecf20Sopenharmony_ci u64 reserved:56; 7608c2ecf20Sopenharmony_ci u64 q_no:8; 7618c2ecf20Sopenharmony_ci#endif 7628c2ecf20Sopenharmony_ci } s; 7638c2ecf20Sopenharmony_ci}; 7648c2ecf20Sopenharmony_ci 7658c2ecf20Sopenharmony_ci/** Information for a OCTEON ethernet interface shared between core & host. */ 7668c2ecf20Sopenharmony_cistruct oct_link_info { 7678c2ecf20Sopenharmony_ci union oct_link_status link; 7688c2ecf20Sopenharmony_ci u64 hw_addr; 7698c2ecf20Sopenharmony_ci 7708c2ecf20Sopenharmony_ci#ifdef __BIG_ENDIAN_BITFIELD 7718c2ecf20Sopenharmony_ci u64 gmxport:16; 7728c2ecf20Sopenharmony_ci u64 macaddr_is_admin_asgnd:1; 7738c2ecf20Sopenharmony_ci u64 rsvd:13; 7748c2ecf20Sopenharmony_ci u64 macaddr_spoofchk:1; 7758c2ecf20Sopenharmony_ci u64 rsvd1:17; 7768c2ecf20Sopenharmony_ci u64 num_txpciq:8; 7778c2ecf20Sopenharmony_ci u64 num_rxpciq:8; 7788c2ecf20Sopenharmony_ci#else 7798c2ecf20Sopenharmony_ci u64 num_rxpciq:8; 7808c2ecf20Sopenharmony_ci u64 num_txpciq:8; 7818c2ecf20Sopenharmony_ci u64 rsvd1:17; 7828c2ecf20Sopenharmony_ci u64 macaddr_spoofchk:1; 7838c2ecf20Sopenharmony_ci u64 rsvd:13; 7848c2ecf20Sopenharmony_ci u64 macaddr_is_admin_asgnd:1; 7858c2ecf20Sopenharmony_ci u64 gmxport:16; 7868c2ecf20Sopenharmony_ci#endif 7878c2ecf20Sopenharmony_ci 7888c2ecf20Sopenharmony_ci union oct_txpciq txpciq[MAX_IOQS_PER_NICIF]; 7898c2ecf20Sopenharmony_ci union oct_rxpciq rxpciq[MAX_IOQS_PER_NICIF]; 7908c2ecf20Sopenharmony_ci}; 7918c2ecf20Sopenharmony_ci 7928c2ecf20Sopenharmony_ci#define OCT_LINK_INFO_SIZE (sizeof(struct oct_link_info)) 7938c2ecf20Sopenharmony_ci 7948c2ecf20Sopenharmony_cistruct liquidio_if_cfg_info { 7958c2ecf20Sopenharmony_ci u64 iqmask; /** mask for IQs enabled for the port */ 7968c2ecf20Sopenharmony_ci u64 oqmask; /** mask for OQs enabled for the port */ 7978c2ecf20Sopenharmony_ci struct oct_link_info linfo; /** initial link information */ 7988c2ecf20Sopenharmony_ci char liquidio_firmware_version[32]; 7998c2ecf20Sopenharmony_ci}; 8008c2ecf20Sopenharmony_ci 8018c2ecf20Sopenharmony_ci/** Stats for each NIC port in RX direction. */ 8028c2ecf20Sopenharmony_cistruct nic_rx_stats { 8038c2ecf20Sopenharmony_ci /* link-level stats */ 8048c2ecf20Sopenharmony_ci u64 total_rcvd; /* Received packets */ 8058c2ecf20Sopenharmony_ci u64 bytes_rcvd; /* Octets of received packets */ 8068c2ecf20Sopenharmony_ci u64 total_bcst; /* Number of non-dropped L2 broadcast packets */ 8078c2ecf20Sopenharmony_ci u64 total_mcst; /* Number of non-dropped L2 multicast packets */ 8088c2ecf20Sopenharmony_ci u64 runts; /* Packets shorter than allowed */ 8098c2ecf20Sopenharmony_ci u64 ctl_rcvd; /* Received PAUSE packets */ 8108c2ecf20Sopenharmony_ci u64 fifo_err; /* Packets dropped due to RX FIFO full */ 8118c2ecf20Sopenharmony_ci u64 dmac_drop; /* Packets dropped by the DMAC filter */ 8128c2ecf20Sopenharmony_ci u64 fcs_err; /* Sum of fragment, overrun, and FCS errors */ 8138c2ecf20Sopenharmony_ci u64 jabber_err; /* Packets larger than allowed */ 8148c2ecf20Sopenharmony_ci u64 l2_err; /* Sum of DMA, parity, PCAM access, no memory, 8158c2ecf20Sopenharmony_ci * buffer overflow, malformed L2 header or 8168c2ecf20Sopenharmony_ci * length, oversize errors 8178c2ecf20Sopenharmony_ci **/ 8188c2ecf20Sopenharmony_ci u64 frame_err; /* Sum of IPv4 and L4 checksum errors */ 8198c2ecf20Sopenharmony_ci u64 red_drops; /* Packets dropped by RED due to buffer 8208c2ecf20Sopenharmony_ci * exhaustion 8218c2ecf20Sopenharmony_ci **/ 8228c2ecf20Sopenharmony_ci 8238c2ecf20Sopenharmony_ci /* firmware stats */ 8248c2ecf20Sopenharmony_ci u64 fw_total_rcvd; 8258c2ecf20Sopenharmony_ci u64 fw_total_fwd; 8268c2ecf20Sopenharmony_ci u64 fw_total_fwd_bytes; 8278c2ecf20Sopenharmony_ci u64 fw_total_mcast; 8288c2ecf20Sopenharmony_ci u64 fw_total_bcast; 8298c2ecf20Sopenharmony_ci 8308c2ecf20Sopenharmony_ci u64 fw_err_pko; 8318c2ecf20Sopenharmony_ci u64 fw_err_link; 8328c2ecf20Sopenharmony_ci u64 fw_err_drop; 8338c2ecf20Sopenharmony_ci u64 fw_rx_vxlan; 8348c2ecf20Sopenharmony_ci u64 fw_rx_vxlan_err; 8358c2ecf20Sopenharmony_ci 8368c2ecf20Sopenharmony_ci /* LRO */ 8378c2ecf20Sopenharmony_ci u64 fw_lro_pkts; /* Number of packets that are LROed */ 8388c2ecf20Sopenharmony_ci u64 fw_lro_octs; /* Number of octets that are LROed */ 8398c2ecf20Sopenharmony_ci u64 fw_total_lro; /* Number of LRO packets formed */ 8408c2ecf20Sopenharmony_ci u64 fw_lro_aborts; /* Number of times LRO of packet aborted */ 8418c2ecf20Sopenharmony_ci u64 fw_lro_aborts_port; 8428c2ecf20Sopenharmony_ci u64 fw_lro_aborts_seq; 8438c2ecf20Sopenharmony_ci u64 fw_lro_aborts_tsval; 8448c2ecf20Sopenharmony_ci u64 fw_lro_aborts_timer; /* Timer setting error */ 8458c2ecf20Sopenharmony_ci /* intrmod: packet forward rate */ 8468c2ecf20Sopenharmony_ci u64 fwd_rate; 8478c2ecf20Sopenharmony_ci}; 8488c2ecf20Sopenharmony_ci 8498c2ecf20Sopenharmony_ci/** Stats for each NIC port in RX direction. */ 8508c2ecf20Sopenharmony_cistruct nic_tx_stats { 8518c2ecf20Sopenharmony_ci /* link-level stats */ 8528c2ecf20Sopenharmony_ci u64 total_pkts_sent; /* Total frames sent on the interface */ 8538c2ecf20Sopenharmony_ci u64 total_bytes_sent; /* Total octets sent on the interface */ 8548c2ecf20Sopenharmony_ci u64 mcast_pkts_sent; /* Packets sent to the multicast DMAC */ 8558c2ecf20Sopenharmony_ci u64 bcast_pkts_sent; /* Packets sent to a broadcast DMAC */ 8568c2ecf20Sopenharmony_ci u64 ctl_sent; /* Control/PAUSE packets sent */ 8578c2ecf20Sopenharmony_ci u64 one_collision_sent; /* Packets sent that experienced a 8588c2ecf20Sopenharmony_ci * single collision before successful 8598c2ecf20Sopenharmony_ci * transmission 8608c2ecf20Sopenharmony_ci **/ 8618c2ecf20Sopenharmony_ci u64 multi_collision_sent; /* Packets sent that experienced 8628c2ecf20Sopenharmony_ci * multiple collisions before successful 8638c2ecf20Sopenharmony_ci * transmission 8648c2ecf20Sopenharmony_ci **/ 8658c2ecf20Sopenharmony_ci u64 max_collision_fail; /* Packets dropped due to excessive 8668c2ecf20Sopenharmony_ci * collisions 8678c2ecf20Sopenharmony_ci **/ 8688c2ecf20Sopenharmony_ci u64 max_deferral_fail; /* Packets not sent due to max 8698c2ecf20Sopenharmony_ci * deferrals 8708c2ecf20Sopenharmony_ci **/ 8718c2ecf20Sopenharmony_ci u64 fifo_err; /* Packets sent that experienced a 8728c2ecf20Sopenharmony_ci * transmit underflow and were 8738c2ecf20Sopenharmony_ci * truncated 8748c2ecf20Sopenharmony_ci **/ 8758c2ecf20Sopenharmony_ci u64 runts; /* Packets sent with an octet count 8768c2ecf20Sopenharmony_ci * lessthan 64 8778c2ecf20Sopenharmony_ci **/ 8788c2ecf20Sopenharmony_ci u64 total_collisions; /* Packets dropped due to excessive 8798c2ecf20Sopenharmony_ci * collisions 8808c2ecf20Sopenharmony_ci **/ 8818c2ecf20Sopenharmony_ci 8828c2ecf20Sopenharmony_ci /* firmware stats */ 8838c2ecf20Sopenharmony_ci u64 fw_total_sent; 8848c2ecf20Sopenharmony_ci u64 fw_total_fwd; 8858c2ecf20Sopenharmony_ci u64 fw_total_fwd_bytes; 8868c2ecf20Sopenharmony_ci u64 fw_total_mcast_sent; 8878c2ecf20Sopenharmony_ci u64 fw_total_bcast_sent; 8888c2ecf20Sopenharmony_ci u64 fw_err_pko; 8898c2ecf20Sopenharmony_ci u64 fw_err_link; 8908c2ecf20Sopenharmony_ci u64 fw_err_drop; 8918c2ecf20Sopenharmony_ci u64 fw_err_tso; 8928c2ecf20Sopenharmony_ci u64 fw_tso; /* number of tso requests */ 8938c2ecf20Sopenharmony_ci u64 fw_tso_fwd; /* number of packets segmented in tso */ 8948c2ecf20Sopenharmony_ci u64 fw_tx_vxlan; 8958c2ecf20Sopenharmony_ci u64 fw_err_pki; 8968c2ecf20Sopenharmony_ci}; 8978c2ecf20Sopenharmony_ci 8988c2ecf20Sopenharmony_cistruct oct_link_stats { 8998c2ecf20Sopenharmony_ci struct nic_rx_stats fromwire; 9008c2ecf20Sopenharmony_ci struct nic_tx_stats fromhost; 9018c2ecf20Sopenharmony_ci 9028c2ecf20Sopenharmony_ci}; 9038c2ecf20Sopenharmony_ci 9048c2ecf20Sopenharmony_cistatic inline int opcode_slow_path(union octeon_rh *rh) 9058c2ecf20Sopenharmony_ci{ 9068c2ecf20Sopenharmony_ci u16 subcode1, subcode2; 9078c2ecf20Sopenharmony_ci 9088c2ecf20Sopenharmony_ci subcode1 = OPCODE_SUBCODE((rh)->r.opcode, (rh)->r.subcode); 9098c2ecf20Sopenharmony_ci subcode2 = OPCODE_SUBCODE(OPCODE_NIC, OPCODE_NIC_NW_DATA); 9108c2ecf20Sopenharmony_ci 9118c2ecf20Sopenharmony_ci return (subcode2 != subcode1); 9128c2ecf20Sopenharmony_ci} 9138c2ecf20Sopenharmony_ci 9148c2ecf20Sopenharmony_ci#define LIO68XX_LED_CTRL_ADDR 0x3501 9158c2ecf20Sopenharmony_ci#define LIO68XX_LED_CTRL_CFGON 0x1f 9168c2ecf20Sopenharmony_ci#define LIO68XX_LED_CTRL_CFGOFF 0x100 9178c2ecf20Sopenharmony_ci#define LIO68XX_LED_BEACON_ADDR 0x3508 9188c2ecf20Sopenharmony_ci#define LIO68XX_LED_BEACON_CFGON 0x47fd 9198c2ecf20Sopenharmony_ci#define LIO68XX_LED_BEACON_CFGOFF 0x11fc 9208c2ecf20Sopenharmony_ci#define VITESSE_PHY_GPIO_DRIVEON 0x1 9218c2ecf20Sopenharmony_ci#define VITESSE_PHY_GPIO_CFG 0x8 9228c2ecf20Sopenharmony_ci#define VITESSE_PHY_GPIO_DRIVEOFF 0x4 9238c2ecf20Sopenharmony_ci#define VITESSE_PHY_GPIO_HIGH 0x2 9248c2ecf20Sopenharmony_ci#define VITESSE_PHY_GPIO_LOW 0x3 9258c2ecf20Sopenharmony_ci#define LED_IDENTIFICATION_ON 0x1 9268c2ecf20Sopenharmony_ci#define LED_IDENTIFICATION_OFF 0x0 9278c2ecf20Sopenharmony_ci#define LIO23XX_COPPERHEAD_LED_GPIO 0x2 9288c2ecf20Sopenharmony_ci 9298c2ecf20Sopenharmony_cistruct oct_mdio_cmd { 9308c2ecf20Sopenharmony_ci u64 op; 9318c2ecf20Sopenharmony_ci u64 mdio_addr; 9328c2ecf20Sopenharmony_ci u64 value1; 9338c2ecf20Sopenharmony_ci u64 value2; 9348c2ecf20Sopenharmony_ci u64 value3; 9358c2ecf20Sopenharmony_ci}; 9368c2ecf20Sopenharmony_ci 9378c2ecf20Sopenharmony_ci#define OCT_LINK_STATS_SIZE (sizeof(struct oct_link_stats)) 9388c2ecf20Sopenharmony_ci 9398c2ecf20Sopenharmony_cistruct oct_intrmod_cfg { 9408c2ecf20Sopenharmony_ci u64 rx_enable; 9418c2ecf20Sopenharmony_ci u64 tx_enable; 9428c2ecf20Sopenharmony_ci u64 check_intrvl; 9438c2ecf20Sopenharmony_ci u64 maxpkt_ratethr; 9448c2ecf20Sopenharmony_ci u64 minpkt_ratethr; 9458c2ecf20Sopenharmony_ci u64 rx_maxcnt_trigger; 9468c2ecf20Sopenharmony_ci u64 rx_mincnt_trigger; 9478c2ecf20Sopenharmony_ci u64 rx_maxtmr_trigger; 9488c2ecf20Sopenharmony_ci u64 rx_mintmr_trigger; 9498c2ecf20Sopenharmony_ci u64 tx_mincnt_trigger; 9508c2ecf20Sopenharmony_ci u64 tx_maxcnt_trigger; 9518c2ecf20Sopenharmony_ci u64 rx_frames; 9528c2ecf20Sopenharmony_ci u64 tx_frames; 9538c2ecf20Sopenharmony_ci u64 rx_usecs; 9548c2ecf20Sopenharmony_ci}; 9558c2ecf20Sopenharmony_ci 9568c2ecf20Sopenharmony_ci#define BASE_QUEUE_NOT_REQUESTED 65535 9578c2ecf20Sopenharmony_ci 9588c2ecf20Sopenharmony_ciunion oct_nic_if_cfg { 9598c2ecf20Sopenharmony_ci u64 u64; 9608c2ecf20Sopenharmony_ci struct { 9618c2ecf20Sopenharmony_ci#ifdef __BIG_ENDIAN_BITFIELD 9628c2ecf20Sopenharmony_ci u64 base_queue:16; 9638c2ecf20Sopenharmony_ci u64 num_iqueues:16; 9648c2ecf20Sopenharmony_ci u64 num_oqueues:16; 9658c2ecf20Sopenharmony_ci u64 gmx_port_id:8; 9668c2ecf20Sopenharmony_ci u64 vf_id:8; 9678c2ecf20Sopenharmony_ci#else 9688c2ecf20Sopenharmony_ci u64 vf_id:8; 9698c2ecf20Sopenharmony_ci u64 gmx_port_id:8; 9708c2ecf20Sopenharmony_ci u64 num_oqueues:16; 9718c2ecf20Sopenharmony_ci u64 num_iqueues:16; 9728c2ecf20Sopenharmony_ci u64 base_queue:16; 9738c2ecf20Sopenharmony_ci#endif 9748c2ecf20Sopenharmony_ci } s; 9758c2ecf20Sopenharmony_ci}; 9768c2ecf20Sopenharmony_ci 9778c2ecf20Sopenharmony_cistruct lio_trusted_vf { 9788c2ecf20Sopenharmony_ci uint64_t active: 1; 9798c2ecf20Sopenharmony_ci uint64_t id : 8; 9808c2ecf20Sopenharmony_ci uint64_t reserved: 55; 9818c2ecf20Sopenharmony_ci}; 9828c2ecf20Sopenharmony_ci 9838c2ecf20Sopenharmony_cistruct lio_time { 9848c2ecf20Sopenharmony_ci s64 sec; /* seconds */ 9858c2ecf20Sopenharmony_ci s64 nsec; /* nanoseconds */ 9868c2ecf20Sopenharmony_ci}; 9878c2ecf20Sopenharmony_ci 9888c2ecf20Sopenharmony_cistruct lio_vf_rep_stats { 9898c2ecf20Sopenharmony_ci u64 tx_packets; 9908c2ecf20Sopenharmony_ci u64 tx_bytes; 9918c2ecf20Sopenharmony_ci u64 tx_dropped; 9928c2ecf20Sopenharmony_ci 9938c2ecf20Sopenharmony_ci u64 rx_packets; 9948c2ecf20Sopenharmony_ci u64 rx_bytes; 9958c2ecf20Sopenharmony_ci u64 rx_dropped; 9968c2ecf20Sopenharmony_ci}; 9978c2ecf20Sopenharmony_ci 9988c2ecf20Sopenharmony_cienum lio_vf_rep_req_type { 9998c2ecf20Sopenharmony_ci LIO_VF_REP_REQ_NONE, 10008c2ecf20Sopenharmony_ci LIO_VF_REP_REQ_STATE, 10018c2ecf20Sopenharmony_ci LIO_VF_REP_REQ_MTU, 10028c2ecf20Sopenharmony_ci LIO_VF_REP_REQ_STATS, 10038c2ecf20Sopenharmony_ci LIO_VF_REP_REQ_DEVNAME 10048c2ecf20Sopenharmony_ci}; 10058c2ecf20Sopenharmony_ci 10068c2ecf20Sopenharmony_cienum { 10078c2ecf20Sopenharmony_ci LIO_VF_REP_STATE_DOWN, 10088c2ecf20Sopenharmony_ci LIO_VF_REP_STATE_UP 10098c2ecf20Sopenharmony_ci}; 10108c2ecf20Sopenharmony_ci 10118c2ecf20Sopenharmony_ci#define LIO_IF_NAME_SIZE 16 10128c2ecf20Sopenharmony_cistruct lio_vf_rep_req { 10138c2ecf20Sopenharmony_ci u8 req_type; 10148c2ecf20Sopenharmony_ci u8 ifidx; 10158c2ecf20Sopenharmony_ci u8 rsvd[6]; 10168c2ecf20Sopenharmony_ci 10178c2ecf20Sopenharmony_ci union { 10188c2ecf20Sopenharmony_ci struct lio_vf_rep_name { 10198c2ecf20Sopenharmony_ci char name[LIO_IF_NAME_SIZE]; 10208c2ecf20Sopenharmony_ci } rep_name; 10218c2ecf20Sopenharmony_ci 10228c2ecf20Sopenharmony_ci struct lio_vf_rep_mtu { 10238c2ecf20Sopenharmony_ci u32 mtu; 10248c2ecf20Sopenharmony_ci u32 rsvd; 10258c2ecf20Sopenharmony_ci } rep_mtu; 10268c2ecf20Sopenharmony_ci 10278c2ecf20Sopenharmony_ci struct lio_vf_rep_state { 10288c2ecf20Sopenharmony_ci u8 state; 10298c2ecf20Sopenharmony_ci u8 rsvd[7]; 10308c2ecf20Sopenharmony_ci } rep_state; 10318c2ecf20Sopenharmony_ci }; 10328c2ecf20Sopenharmony_ci}; 10338c2ecf20Sopenharmony_ci 10348c2ecf20Sopenharmony_cistruct lio_vf_rep_resp { 10358c2ecf20Sopenharmony_ci u64 rh; 10368c2ecf20Sopenharmony_ci u8 status; 10378c2ecf20Sopenharmony_ci u8 rsvd[7]; 10388c2ecf20Sopenharmony_ci}; 10398c2ecf20Sopenharmony_ci#endif 1040