xref: /dpdk/drivers/net/nfp/nfp_net_ctrl.h (revision ca65f2eef2244fa8d6e428e855c800aac7155079)
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