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