1e2018e37SChaoyong He /* SPDX-License-Identifier: BSD-3-Clause
2e2018e37SChaoyong He * Copyright (c) 2014, 2015 Netronome Systems, Inc.
3e2018e37SChaoyong He * All rights reserved.
4e2018e37SChaoyong He */
5e2018e37SChaoyong He
6e2018e37SChaoyong He #ifndef __NFP_NET_CTRL_H__
7e2018e37SChaoyong He #define __NFP_NET_CTRL_H__
8e2018e37SChaoyong He
9e2018e37SChaoyong He #include <stdint.h>
10e2018e37SChaoyong He
11e2018e37SChaoyong He #include <ethdev_driver.h>
12e2018e37SChaoyong He
13a252357eSChaoyong He #include <nfp_common_ctrl.h>
14e2018e37SChaoyong He
15e2018e37SChaoyong He /*
16e2018e37SChaoyong He * Mac stats (0x0000 - 0x0200)
17e2018e37SChaoyong He * All counters are 64bit.
18e2018e37SChaoyong He */
19e2018e37SChaoyong He #define NFP_MAC_STATS_BASE 0x0000
20e2018e37SChaoyong He #define NFP_MAC_STATS_SIZE 0x0200
21e2018e37SChaoyong He
22e2018e37SChaoyong He #define NFP_MAC_STATS_RX_IN_OCTS (NFP_MAC_STATS_BASE + 0x000)
23e2018e37SChaoyong He #define NFP_MAC_STATS_RX_FRAME_TOO_LONG_ERRORS (NFP_MAC_STATS_BASE + 0x010)
24e2018e37SChaoyong He #define NFP_MAC_STATS_RX_RANGE_LENGTH_ERRORS (NFP_MAC_STATS_BASE + 0x018)
25e2018e37SChaoyong He #define NFP_MAC_STATS_RX_VLAN_RECEIVED_OK (NFP_MAC_STATS_BASE + 0x020)
26e2018e37SChaoyong He #define NFP_MAC_STATS_RX_IN_ERRORS (NFP_MAC_STATS_BASE + 0x028)
27e2018e37SChaoyong He #define NFP_MAC_STATS_RX_IN_BROADCAST_PKTS (NFP_MAC_STATS_BASE + 0x030)
28e2018e37SChaoyong He #define NFP_MAC_STATS_RX_DROP_EVENTS (NFP_MAC_STATS_BASE + 0x038)
29e2018e37SChaoyong He #define NFP_MAC_STATS_RX_ALIGNMENT_ERRORS (NFP_MAC_STATS_BASE + 0x040)
30e2018e37SChaoyong He #define NFP_MAC_STATS_RX_PAUSE_MAC_CTRL_FRAMES (NFP_MAC_STATS_BASE + 0x048)
31e2018e37SChaoyong He #define NFP_MAC_STATS_RX_FRAMES_RECEIVED_OK (NFP_MAC_STATS_BASE + 0x050)
32e2018e37SChaoyong He #define NFP_MAC_STATS_RX_FRAME_CHECK_SEQ_ERRORS (NFP_MAC_STATS_BASE + 0x058)
33e2018e37SChaoyong He #define NFP_MAC_STATS_RX_UNICAST_PKTS (NFP_MAC_STATS_BASE + 0x060)
34e2018e37SChaoyong He #define NFP_MAC_STATS_RX_MULTICAST_PKTS (NFP_MAC_STATS_BASE + 0x068)
35e2018e37SChaoyong He #define NFP_MAC_STATS_RX_PKTS (NFP_MAC_STATS_BASE + 0x070)
36e2018e37SChaoyong He #define NFP_MAC_STATS_RX_UNDERSIZE_PKTS (NFP_MAC_STATS_BASE + 0x078)
37e2018e37SChaoyong He #define NFP_MAC_STATS_RX_PKTS_64_OCTS (NFP_MAC_STATS_BASE + 0x080)
38e2018e37SChaoyong He #define NFP_MAC_STATS_RX_PKTS_65_TO_127_OCTS (NFP_MAC_STATS_BASE + 0x088)
39e2018e37SChaoyong He #define NFP_MAC_STATS_RX_PKTS_512_TO_1023_OCTS (NFP_MAC_STATS_BASE + 0x090)
40e2018e37SChaoyong He #define NFP_MAC_STATS_RX_PKTS_1024_TO_1518_OCTS (NFP_MAC_STATS_BASE + 0x098)
41e2018e37SChaoyong He #define NFP_MAC_STATS_RX_JABBERS (NFP_MAC_STATS_BASE + 0x0a0)
42e2018e37SChaoyong He #define NFP_MAC_STATS_RX_FRAGMENTS (NFP_MAC_STATS_BASE + 0x0a8)
43e2018e37SChaoyong He #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS2 (NFP_MAC_STATS_BASE + 0x0b0)
44e2018e37SChaoyong He #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS3 (NFP_MAC_STATS_BASE + 0x0b8)
45e2018e37SChaoyong He #define NFP_MAC_STATS_RX_PKTS_128_TO_255_OCTS (NFP_MAC_STATS_BASE + 0x0c0)
46e2018e37SChaoyong He #define NFP_MAC_STATS_RX_PKTS_256_TO_511_OCTS (NFP_MAC_STATS_BASE + 0x0c8)
47e2018e37SChaoyong He #define NFP_MAC_STATS_RX_PKTS_1519_TO_MAX_OCTS (NFP_MAC_STATS_BASE + 0x0d0)
48e2018e37SChaoyong He #define NFP_MAC_STATS_RX_OVERSIZE_PKTS (NFP_MAC_STATS_BASE + 0x0d8)
49e2018e37SChaoyong He #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS0 (NFP_MAC_STATS_BASE + 0x0e0)
50e2018e37SChaoyong He #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS1 (NFP_MAC_STATS_BASE + 0x0e8)
51e2018e37SChaoyong He #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS4 (NFP_MAC_STATS_BASE + 0x0f0)
52e2018e37SChaoyong He #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS5 (NFP_MAC_STATS_BASE + 0x0f8)
53e2018e37SChaoyong He #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS6 (NFP_MAC_STATS_BASE + 0x100)
54e2018e37SChaoyong He #define NFP_MAC_STATS_RX_PAUSE_FRAMES_CLASS7 (NFP_MAC_STATS_BASE + 0x108)
55e2018e37SChaoyong He #define NFP_MAC_STATS_RX_MAC_CTRL_FRAMES_REC (NFP_MAC_STATS_BASE + 0x110)
56e2018e37SChaoyong He #define NFP_MAC_STATS_RX_MAC_HEAD_DROP (NFP_MAC_STATS_BASE + 0x118)
57e2018e37SChaoyong He #define NFP_MAC_STATS_TX_QUEUE_DROP (NFP_MAC_STATS_BASE + 0x138)
58e2018e37SChaoyong He #define NFP_MAC_STATS_TX_OUT_OCTS (NFP_MAC_STATS_BASE + 0x140)
59e2018e37SChaoyong He #define NFP_MAC_STATS_TX_VLAN_TRANSMITTED_OK (NFP_MAC_STATS_BASE + 0x150)
60e2018e37SChaoyong He #define NFP_MAC_STATS_TX_OUT_ERRORS (NFP_MAC_STATS_BASE + 0x158)
61e2018e37SChaoyong He #define NFP_MAC_STATS_TX_BROADCAST_PKTS (NFP_MAC_STATS_BASE + 0x160)
62e2018e37SChaoyong He #define NFP_MAC_STATS_TX_PKTS_64_OCTS (NFP_MAC_STATS_BASE + 0x168)
63e2018e37SChaoyong He #define NFP_MAC_STATS_TX_PKTS_256_TO_511_OCTS (NFP_MAC_STATS_BASE + 0x170)
64e2018e37SChaoyong He #define NFP_MAC_STATS_TX_PKTS_512_TO_1023_OCTS (NFP_MAC_STATS_BASE + 0x178)
65e2018e37SChaoyong He #define NFP_MAC_STATS_TX_PAUSE_MAC_CTRL_FRAMES (NFP_MAC_STATS_BASE + 0x180)
66e2018e37SChaoyong He #define NFP_MAC_STATS_TX_FRAMES_TRANSMITTED_OK (NFP_MAC_STATS_BASE + 0x188)
67e2018e37SChaoyong He #define NFP_MAC_STATS_TX_UNICAST_PKTS (NFP_MAC_STATS_BASE + 0x190)
68e2018e37SChaoyong He #define NFP_MAC_STATS_TX_MULTICAST_PKTS (NFP_MAC_STATS_BASE + 0x198)
69e2018e37SChaoyong He #define NFP_MAC_STATS_TX_PKTS_65_TO_127_OCTS (NFP_MAC_STATS_BASE + 0x1a0)
70e2018e37SChaoyong He #define NFP_MAC_STATS_TX_PKTS_128_TO_255_OCTS (NFP_MAC_STATS_BASE + 0x1a8)
71e2018e37SChaoyong He #define NFP_MAC_STATS_TX_PKTS_1024_TO_1518_OCTS (NFP_MAC_STATS_BASE + 0x1b0)
72e2018e37SChaoyong He #define NFP_MAC_STATS_TX_PKTS_1519_TO_MAX_OCTS (NFP_MAC_STATS_BASE + 0x1b8)
73e2018e37SChaoyong He #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS0 (NFP_MAC_STATS_BASE + 0x1c0)
74e2018e37SChaoyong He #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS1 (NFP_MAC_STATS_BASE + 0x1c8)
75e2018e37SChaoyong He #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS4 (NFP_MAC_STATS_BASE + 0x1d0)
76e2018e37SChaoyong He #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS5 (NFP_MAC_STATS_BASE + 0x1d8)
77e2018e37SChaoyong He #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS2 (NFP_MAC_STATS_BASE + 0x1e0)
78e2018e37SChaoyong He #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS3 (NFP_MAC_STATS_BASE + 0x1e8)
79e2018e37SChaoyong He #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS6 (NFP_MAC_STATS_BASE + 0x1f0)
80e2018e37SChaoyong He #define NFP_MAC_STATS_TX_PAUSE_FRAMES_CLASS7 (NFP_MAC_STATS_BASE + 0x1f8)
81e2018e37SChaoyong He
82e2018e37SChaoyong He /*
83e2018e37SChaoyong He * General use mailbox area (0x1800 - 0x19ff)
84e2018e37SChaoyong He * 4B used for update command and 4B return code followed by
85e2018e37SChaoyong He * a max of 504B of variable length value.
86e2018e37SChaoyong He */
87e2018e37SChaoyong He #define NFP_NET_CFG_MBOX_BASE 0x1800
88e2018e37SChaoyong He #define NFP_NET_CFG_MBOX_VAL 0x1808
89e2018e37SChaoyong He #define NFP_NET_CFG_MBOX_VAL_MAX_SZ 0x1F8
90e2018e37SChaoyong He #define NFP_NET_CFG_MBOX_SIMPLE_CMD 0x0
91e2018e37SChaoyong He #define NFP_NET_CFG_MBOX_SIMPLE_RET 0x4
92e2018e37SChaoyong He #define NFP_NET_CFG_MBOX_SIMPLE_VAL 0x8
93e2018e37SChaoyong He
94e2018e37SChaoyong He #define NFP_NET_CFG_MBOX_CMD_IPSEC 3
95*ca65f2eeSChaoyong He #define NFP_NET_CFG_MBOX_CMD_FLOW_STEER 10
96e2018e37SChaoyong He
97e2018e37SChaoyong He /*
98e2018e37SChaoyong He * TLV capabilities
99e2018e37SChaoyong He * @NFP_NET_CFG_TLV_TYPE: Offset of type within the TLV
100e2018e37SChaoyong He * @NFP_NET_CFG_TLV_TYPE_REQUIRED: Driver must be able to parse the TLV
101e2018e37SChaoyong He * @NFP_NET_CFG_TLV_LENGTH: Offset of length within the TLV
102e2018e37SChaoyong He * @NFP_NET_CFG_TLV_LENGTH_INC: TLV length increments
103e2018e37SChaoyong He * @NFP_NET_CFG_TLV_VALUE: Offset of value with the TLV
104e2018e37SChaoyong He * @NFP_NET_CFG_TLV_STATS_OFFSET: Length of TLV stats offset
105e2018e37SChaoyong He *
106e2018e37SChaoyong He * List of simple TLV structures, first one starts at @NFP_NET_CFG_TLV_BASE.
107e2018e37SChaoyong He * Last structure must be of type @NFP_NET_CFG_TLV_TYPE_END. Presence of TLVs
108e2018e37SChaoyong He * is indicated by @NFP_NET_CFG_TLV_BASE being non-zero. TLV structures may
109e2018e37SChaoyong He * fill the entire remainder of the BAR or be shorter. FW must make sure TLVs
110e2018e37SChaoyong He * don't conflict with other features which allocate space beyond
111e2018e37SChaoyong He * @NFP_NET_CFG_TLV_BASE. @NFP_NET_CFG_TLV_TYPE_RESERVED should be used to wrap
112e2018e37SChaoyong He * space used by such features.
113e2018e37SChaoyong He *
114e2018e37SChaoyong He * Note that the 4 byte TLV header is not counted in %NFP_NET_CFG_TLV_LENGTH.
115e2018e37SChaoyong He */
116e2018e37SChaoyong He #define NFP_NET_CFG_TLV_TYPE 0x00
117e2018e37SChaoyong He #define NFP_NET_CFG_TLV_TYPE_REQUIRED 0x8000
118e2018e37SChaoyong He #define NFP_NET_CFG_TLV_LENGTH 0x02
119e2018e37SChaoyong He #define NFP_NET_CFG_TLV_LENGTH_INC 4
120e2018e37SChaoyong He #define NFP_NET_CFG_TLV_VALUE 0x04
121e2018e37SChaoyong He #define NFP_NET_CFG_TLV_STATS_OFFSET 0x08
122e2018e37SChaoyong He
123e2018e37SChaoyong He #define NFP_NET_CFG_TLV_HEADER_REQUIRED 0x80000000
124e2018e37SChaoyong He #define NFP_NET_CFG_TLV_HEADER_TYPE 0x7fff0000
125e2018e37SChaoyong He #define NFP_NET_CFG_TLV_HEADER_LENGTH 0x0000ffff
126e2018e37SChaoyong He
127e2018e37SChaoyong He /*
128e2018e37SChaoyong He * Capability TLV types
129e2018e37SChaoyong He *
130e2018e37SChaoyong He * @NFP_NET_CFG_TLV_TYPE_UNKNOWN:
131e2018e37SChaoyong He * Special TLV type to catch bugs, should never be encountered. Drivers should
132e2018e37SChaoyong He * treat encountering this type as error and refuse to probe.
133e2018e37SChaoyong He *
134e2018e37SChaoyong He * @NFP_NET_CFG_TLV_TYPE_RESERVED:
135e2018e37SChaoyong He * Reserved space, may contain legacy fixed-offset fields, or be used for
136e2018e37SChaoyong He * padding. The use of this type should be otherwise avoided.
137e2018e37SChaoyong He *
138e2018e37SChaoyong He * @NFP_NET_CFG_TLV_TYPE_END:
139e2018e37SChaoyong He * Empty, end of TLV list. Must be the last TLV. Drivers will stop processing
140e2018e37SChaoyong He * further TLVs when encountered.
141e2018e37SChaoyong He *
142e2018e37SChaoyong He * @NFP_NET_CFG_TLV_TYPE_ME_FREQ:
143e2018e37SChaoyong He * Single word, ME frequency in MHz as used in calculation for
144e2018e37SChaoyong He * @NFP_NET_CFG_RXR_IRQ_MOD and @NFP_NET_CFG_TXR_IRQ_MOD.
145e2018e37SChaoyong He *
146e2018e37SChaoyong He * @NFP_NET_CFG_TLV_TYPE_MBOX:
147e2018e37SChaoyong He * Variable, mailbox area. Overwrites the default location which is
148e2018e37SChaoyong He * @NFP_NET_CFG_MBOX_BASE and length @NFP_NET_CFG_MBOX_VAL_MAX_SZ.
149e2018e37SChaoyong He *
150e2018e37SChaoyong He * @NFP_NET_CFG_TLV_TYPE_EXPERIMENTAL0:
151e2018e37SChaoyong He * @NFP_NET_CFG_TLV_TYPE_EXPERIMENTAL1:
152e2018e37SChaoyong He * Variable, experimental IDs. IDs designated for internal development and
153e2018e37SChaoyong He * experiments before a stable TLV ID has been allocated to a feature. Should
154e2018e37SChaoyong He * never be present in production FW.
155e2018e37SChaoyong He *
156e2018e37SChaoyong He * @NFP_NET_CFG_TLV_TYPE_REPR_CAP:
157e2018e37SChaoyong He * Single word, equivalent of %NFP_NET_CFG_CAP for representors, features which
158e2018e37SChaoyong He * can be used on representors.
159e2018e37SChaoyong He *
160e2018e37SChaoyong He * @NFP_NET_CFG_TLV_TYPE_MBOX_CMSG_TYPES:
161e2018e37SChaoyong He * Variable, bitmap of control message types supported by the mailbox handler.
162e2018e37SChaoyong He * Bit 0 corresponds to message type 0, bit 1 to 1, etc. Control messages are
163e2018e37SChaoyong He * encapsulated into simple TLVs, with an end TLV and written to the Mailbox.
164e2018e37SChaoyong He *
165e2018e37SChaoyong He * @NFP_NET_CFG_TLV_TYPE_CRYPTO_OPS:
166e2018e37SChaoyong He * 8 words, bitmaps of supported and enabled crypto operations.
167e2018e37SChaoyong He * First 16B (4 words) contains a bitmap of supported crypto operations,
168e2018e37SChaoyong He * and next 16B contain the enabled operations.
169e2018e37SChaoyong He * This capability is obsoleted by ones with better sync methods.
170e2018e37SChaoyong He *
171e2018e37SChaoyong He * @NFP_NET_CFG_TLV_TYPE_VNIC_STATS:
172e2018e37SChaoyong He * Variable, per-vNIC statistics, data should be 8B aligned (FW should insert
173e2018e37SChaoyong He * zero-length RESERVED TLV to pad).
174e2018e37SChaoyong He * TLV data has two sections. First is an array of statistics' IDs (2B each).
175e2018e37SChaoyong He * Second 8B statistics themselves. Statistics are 8B aligned, meaning there
176e2018e37SChaoyong He * may be a padding between sections.
177e2018e37SChaoyong He * Number of statistics can be determined as floor(tlv.length / (2 + 8)).
178e2018e37SChaoyong He * This TLV overwrites %NFP_NET_CFG_STATS_* values (statistics in this TLV
179e2018e37SChaoyong He * duplicate the old ones, so driver should be careful not to unnecessarily
180e2018e37SChaoyong He * render both).
181e2018e37SChaoyong He *
182e2018e37SChaoyong He * @NFP_NET_CFG_TLV_TYPE_CRYPTO_OPS_RX_SCAN:
183e2018e37SChaoyong He * Same as %NFP_NET_CFG_TLV_TYPE_CRYPTO_OPS, but crypto TLS does stream scan
184e2018e37SChaoyong He * RX sync, rather than kernel-assisted sync.
185e2018e37SChaoyong He *
186e2018e37SChaoyong He * @NFP_NET_CFG_TLV_TYPE_CRYPTO_OPS_LENGTH:
187e2018e37SChaoyong He * CRYPTO OPS TLV should be at least 32B.
188e2018e37SChaoyong He */
189e2018e37SChaoyong He #define NFP_NET_CFG_TLV_TYPE_UNKNOWN 0
190e2018e37SChaoyong He #define NFP_NET_CFG_TLV_TYPE_RESERVED 1
191e2018e37SChaoyong He #define NFP_NET_CFG_TLV_TYPE_END 2
192e2018e37SChaoyong He #define NFP_NET_CFG_TLV_TYPE_MBOX 4
193e2018e37SChaoyong He #define NFP_NET_CFG_TLV_TYPE_MBOX_CMSG_TYPES 10
194e2018e37SChaoyong He
195e2018e37SChaoyong He int nfp_net_tlv_caps_parse(struct rte_eth_dev *dev);
196e2018e37SChaoyong He
197e2018e37SChaoyong He /**
198e2018e37SChaoyong He * Get RSS flag based on firmware's capability
199e2018e37SChaoyong He *
200e2018e37SChaoyong He * @param hw_cap
201e2018e37SChaoyong He * The firmware's capabilities
202e2018e37SChaoyong He */
203e2018e37SChaoyong He static inline uint32_t
nfp_net_cfg_ctrl_rss(uint32_t hw_cap)204e2018e37SChaoyong He nfp_net_cfg_ctrl_rss(uint32_t hw_cap)
205e2018e37SChaoyong He {
206e2018e37SChaoyong He if ((hw_cap & NFP_NET_CFG_CTRL_RSS2) != 0)
207e2018e37SChaoyong He return NFP_NET_CFG_CTRL_RSS2;
208e2018e37SChaoyong He
209e2018e37SChaoyong He return NFP_NET_CFG_CTRL_RSS;
210e2018e37SChaoyong He }
211e2018e37SChaoyong He
212e2018e37SChaoyong He #endif /* __NFP_NET_CTRL_H__ */
213