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