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