1*99a2dd95SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause
2*99a2dd95SBruce Richardson * Copyright(c) 2017 Intel Corporation
3*99a2dd95SBruce Richardson */
4*99a2dd95SBruce Richardson
5*99a2dd95SBruce Richardson #include <stdint.h>
6*99a2dd95SBruce Richardson
7*99a2dd95SBruce Richardson #include <rte_errno.h>
8*99a2dd95SBruce Richardson #include "rte_ethdev.h"
9*99a2dd95SBruce Richardson #include "rte_tm_driver.h"
10*99a2dd95SBruce Richardson #include "rte_tm.h"
11*99a2dd95SBruce Richardson
12*99a2dd95SBruce Richardson /* Get generic traffic manager operations structure from a port. */
13*99a2dd95SBruce Richardson const struct rte_tm_ops *
rte_tm_ops_get(uint16_t port_id,struct rte_tm_error * error)14*99a2dd95SBruce Richardson rte_tm_ops_get(uint16_t port_id, struct rte_tm_error *error)
15*99a2dd95SBruce Richardson {
16*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
17*99a2dd95SBruce Richardson const struct rte_tm_ops *ops;
18*99a2dd95SBruce Richardson
19*99a2dd95SBruce Richardson if (!rte_eth_dev_is_valid_port(port_id)) {
20*99a2dd95SBruce Richardson rte_tm_error_set(error,
21*99a2dd95SBruce Richardson ENODEV,
22*99a2dd95SBruce Richardson RTE_TM_ERROR_TYPE_UNSPECIFIED,
23*99a2dd95SBruce Richardson NULL,
24*99a2dd95SBruce Richardson rte_strerror(ENODEV));
25*99a2dd95SBruce Richardson return NULL;
26*99a2dd95SBruce Richardson }
27*99a2dd95SBruce Richardson
28*99a2dd95SBruce Richardson if ((dev->dev_ops->tm_ops_get == NULL) ||
29*99a2dd95SBruce Richardson (dev->dev_ops->tm_ops_get(dev, &ops) != 0) ||
30*99a2dd95SBruce Richardson (ops == NULL)) {
31*99a2dd95SBruce Richardson rte_tm_error_set(error,
32*99a2dd95SBruce Richardson ENOSYS,
33*99a2dd95SBruce Richardson RTE_TM_ERROR_TYPE_UNSPECIFIED,
34*99a2dd95SBruce Richardson NULL,
35*99a2dd95SBruce Richardson rte_strerror(ENOSYS));
36*99a2dd95SBruce Richardson return NULL;
37*99a2dd95SBruce Richardson }
38*99a2dd95SBruce Richardson
39*99a2dd95SBruce Richardson return ops;
40*99a2dd95SBruce Richardson }
41*99a2dd95SBruce Richardson
42*99a2dd95SBruce Richardson #define RTE_TM_FUNC(port_id, func) \
43*99a2dd95SBruce Richardson ({ \
44*99a2dd95SBruce Richardson const struct rte_tm_ops *ops = \
45*99a2dd95SBruce Richardson rte_tm_ops_get(port_id, error); \
46*99a2dd95SBruce Richardson if (ops == NULL) \
47*99a2dd95SBruce Richardson return -rte_errno; \
48*99a2dd95SBruce Richardson \
49*99a2dd95SBruce Richardson if (ops->func == NULL) \
50*99a2dd95SBruce Richardson return -rte_tm_error_set(error, \
51*99a2dd95SBruce Richardson ENOSYS, \
52*99a2dd95SBruce Richardson RTE_TM_ERROR_TYPE_UNSPECIFIED, \
53*99a2dd95SBruce Richardson NULL, \
54*99a2dd95SBruce Richardson rte_strerror(ENOSYS)); \
55*99a2dd95SBruce Richardson \
56*99a2dd95SBruce Richardson ops->func; \
57*99a2dd95SBruce Richardson })
58*99a2dd95SBruce Richardson
59*99a2dd95SBruce Richardson /* Get number of leaf nodes */
60*99a2dd95SBruce Richardson int
rte_tm_get_number_of_leaf_nodes(uint16_t port_id,uint32_t * n_leaf_nodes,struct rte_tm_error * error)61*99a2dd95SBruce Richardson rte_tm_get_number_of_leaf_nodes(uint16_t port_id,
62*99a2dd95SBruce Richardson uint32_t *n_leaf_nodes,
63*99a2dd95SBruce Richardson struct rte_tm_error *error)
64*99a2dd95SBruce Richardson {
65*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
66*99a2dd95SBruce Richardson const struct rte_tm_ops *ops =
67*99a2dd95SBruce Richardson rte_tm_ops_get(port_id, error);
68*99a2dd95SBruce Richardson
69*99a2dd95SBruce Richardson if (ops == NULL)
70*99a2dd95SBruce Richardson return -rte_errno;
71*99a2dd95SBruce Richardson
72*99a2dd95SBruce Richardson if (n_leaf_nodes == NULL) {
73*99a2dd95SBruce Richardson rte_tm_error_set(error,
74*99a2dd95SBruce Richardson EINVAL,
75*99a2dd95SBruce Richardson RTE_TM_ERROR_TYPE_UNSPECIFIED,
76*99a2dd95SBruce Richardson NULL,
77*99a2dd95SBruce Richardson rte_strerror(EINVAL));
78*99a2dd95SBruce Richardson return -rte_errno;
79*99a2dd95SBruce Richardson }
80*99a2dd95SBruce Richardson
81*99a2dd95SBruce Richardson *n_leaf_nodes = dev->data->nb_tx_queues;
82*99a2dd95SBruce Richardson return 0;
83*99a2dd95SBruce Richardson }
84*99a2dd95SBruce Richardson
85*99a2dd95SBruce Richardson /* Check node type (leaf or non-leaf) */
86*99a2dd95SBruce Richardson int
rte_tm_node_type_get(uint16_t port_id,uint32_t node_id,int * is_leaf,struct rte_tm_error * error)87*99a2dd95SBruce Richardson rte_tm_node_type_get(uint16_t port_id,
88*99a2dd95SBruce Richardson uint32_t node_id,
89*99a2dd95SBruce Richardson int *is_leaf,
90*99a2dd95SBruce Richardson struct rte_tm_error *error)
91*99a2dd95SBruce Richardson {
92*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
93*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, node_type_get)(dev,
94*99a2dd95SBruce Richardson node_id, is_leaf, error);
95*99a2dd95SBruce Richardson }
96*99a2dd95SBruce Richardson
97*99a2dd95SBruce Richardson /* Get capabilities */
rte_tm_capabilities_get(uint16_t port_id,struct rte_tm_capabilities * cap,struct rte_tm_error * error)98*99a2dd95SBruce Richardson int rte_tm_capabilities_get(uint16_t port_id,
99*99a2dd95SBruce Richardson struct rte_tm_capabilities *cap,
100*99a2dd95SBruce Richardson struct rte_tm_error *error)
101*99a2dd95SBruce Richardson {
102*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
103*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, capabilities_get)(dev,
104*99a2dd95SBruce Richardson cap, error);
105*99a2dd95SBruce Richardson }
106*99a2dd95SBruce Richardson
107*99a2dd95SBruce Richardson /* Get level capabilities */
rte_tm_level_capabilities_get(uint16_t port_id,uint32_t level_id,struct rte_tm_level_capabilities * cap,struct rte_tm_error * error)108*99a2dd95SBruce Richardson int rte_tm_level_capabilities_get(uint16_t port_id,
109*99a2dd95SBruce Richardson uint32_t level_id,
110*99a2dd95SBruce Richardson struct rte_tm_level_capabilities *cap,
111*99a2dd95SBruce Richardson struct rte_tm_error *error)
112*99a2dd95SBruce Richardson {
113*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
114*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, level_capabilities_get)(dev,
115*99a2dd95SBruce Richardson level_id, cap, error);
116*99a2dd95SBruce Richardson }
117*99a2dd95SBruce Richardson
118*99a2dd95SBruce Richardson /* Get node capabilities */
rte_tm_node_capabilities_get(uint16_t port_id,uint32_t node_id,struct rte_tm_node_capabilities * cap,struct rte_tm_error * error)119*99a2dd95SBruce Richardson int rte_tm_node_capabilities_get(uint16_t port_id,
120*99a2dd95SBruce Richardson uint32_t node_id,
121*99a2dd95SBruce Richardson struct rte_tm_node_capabilities *cap,
122*99a2dd95SBruce Richardson struct rte_tm_error *error)
123*99a2dd95SBruce Richardson {
124*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
125*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, node_capabilities_get)(dev,
126*99a2dd95SBruce Richardson node_id, cap, error);
127*99a2dd95SBruce Richardson }
128*99a2dd95SBruce Richardson
129*99a2dd95SBruce Richardson /* Add WRED profile */
rte_tm_wred_profile_add(uint16_t port_id,uint32_t wred_profile_id,struct rte_tm_wred_params * profile,struct rte_tm_error * error)130*99a2dd95SBruce Richardson int rte_tm_wred_profile_add(uint16_t port_id,
131*99a2dd95SBruce Richardson uint32_t wred_profile_id,
132*99a2dd95SBruce Richardson struct rte_tm_wred_params *profile,
133*99a2dd95SBruce Richardson struct rte_tm_error *error)
134*99a2dd95SBruce Richardson {
135*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
136*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, wred_profile_add)(dev,
137*99a2dd95SBruce Richardson wred_profile_id, profile, error);
138*99a2dd95SBruce Richardson }
139*99a2dd95SBruce Richardson
140*99a2dd95SBruce Richardson /* Delete WRED profile */
rte_tm_wred_profile_delete(uint16_t port_id,uint32_t wred_profile_id,struct rte_tm_error * error)141*99a2dd95SBruce Richardson int rte_tm_wred_profile_delete(uint16_t port_id,
142*99a2dd95SBruce Richardson uint32_t wred_profile_id,
143*99a2dd95SBruce Richardson struct rte_tm_error *error)
144*99a2dd95SBruce Richardson {
145*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
146*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, wred_profile_delete)(dev,
147*99a2dd95SBruce Richardson wred_profile_id, error);
148*99a2dd95SBruce Richardson }
149*99a2dd95SBruce Richardson
150*99a2dd95SBruce Richardson /* Add/update shared WRED context */
rte_tm_shared_wred_context_add_update(uint16_t port_id,uint32_t shared_wred_context_id,uint32_t wred_profile_id,struct rte_tm_error * error)151*99a2dd95SBruce Richardson int rte_tm_shared_wred_context_add_update(uint16_t port_id,
152*99a2dd95SBruce Richardson uint32_t shared_wred_context_id,
153*99a2dd95SBruce Richardson uint32_t wred_profile_id,
154*99a2dd95SBruce Richardson struct rte_tm_error *error)
155*99a2dd95SBruce Richardson {
156*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
157*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, shared_wred_context_add_update)(dev,
158*99a2dd95SBruce Richardson shared_wred_context_id, wred_profile_id, error);
159*99a2dd95SBruce Richardson }
160*99a2dd95SBruce Richardson
161*99a2dd95SBruce Richardson /* Delete shared WRED context */
rte_tm_shared_wred_context_delete(uint16_t port_id,uint32_t shared_wred_context_id,struct rte_tm_error * error)162*99a2dd95SBruce Richardson int rte_tm_shared_wred_context_delete(uint16_t port_id,
163*99a2dd95SBruce Richardson uint32_t shared_wred_context_id,
164*99a2dd95SBruce Richardson struct rte_tm_error *error)
165*99a2dd95SBruce Richardson {
166*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
167*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, shared_wred_context_delete)(dev,
168*99a2dd95SBruce Richardson shared_wred_context_id, error);
169*99a2dd95SBruce Richardson }
170*99a2dd95SBruce Richardson
171*99a2dd95SBruce Richardson /* Add shaper profile */
rte_tm_shaper_profile_add(uint16_t port_id,uint32_t shaper_profile_id,struct rte_tm_shaper_params * profile,struct rte_tm_error * error)172*99a2dd95SBruce Richardson int rte_tm_shaper_profile_add(uint16_t port_id,
173*99a2dd95SBruce Richardson uint32_t shaper_profile_id,
174*99a2dd95SBruce Richardson struct rte_tm_shaper_params *profile,
175*99a2dd95SBruce Richardson struct rte_tm_error *error)
176*99a2dd95SBruce Richardson {
177*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
178*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, shaper_profile_add)(dev,
179*99a2dd95SBruce Richardson shaper_profile_id, profile, error);
180*99a2dd95SBruce Richardson }
181*99a2dd95SBruce Richardson
182*99a2dd95SBruce Richardson /* Delete WRED profile */
rte_tm_shaper_profile_delete(uint16_t port_id,uint32_t shaper_profile_id,struct rte_tm_error * error)183*99a2dd95SBruce Richardson int rte_tm_shaper_profile_delete(uint16_t port_id,
184*99a2dd95SBruce Richardson uint32_t shaper_profile_id,
185*99a2dd95SBruce Richardson struct rte_tm_error *error)
186*99a2dd95SBruce Richardson {
187*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
188*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, shaper_profile_delete)(dev,
189*99a2dd95SBruce Richardson shaper_profile_id, error);
190*99a2dd95SBruce Richardson }
191*99a2dd95SBruce Richardson
192*99a2dd95SBruce Richardson /* Add shared shaper */
rte_tm_shared_shaper_add_update(uint16_t port_id,uint32_t shared_shaper_id,uint32_t shaper_profile_id,struct rte_tm_error * error)193*99a2dd95SBruce Richardson int rte_tm_shared_shaper_add_update(uint16_t port_id,
194*99a2dd95SBruce Richardson uint32_t shared_shaper_id,
195*99a2dd95SBruce Richardson uint32_t shaper_profile_id,
196*99a2dd95SBruce Richardson struct rte_tm_error *error)
197*99a2dd95SBruce Richardson {
198*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
199*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, shared_shaper_add_update)(dev,
200*99a2dd95SBruce Richardson shared_shaper_id, shaper_profile_id, error);
201*99a2dd95SBruce Richardson }
202*99a2dd95SBruce Richardson
203*99a2dd95SBruce Richardson /* Delete shared shaper */
rte_tm_shared_shaper_delete(uint16_t port_id,uint32_t shared_shaper_id,struct rte_tm_error * error)204*99a2dd95SBruce Richardson int rte_tm_shared_shaper_delete(uint16_t port_id,
205*99a2dd95SBruce Richardson uint32_t shared_shaper_id,
206*99a2dd95SBruce Richardson struct rte_tm_error *error)
207*99a2dd95SBruce Richardson {
208*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
209*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, shared_shaper_delete)(dev,
210*99a2dd95SBruce Richardson shared_shaper_id, error);
211*99a2dd95SBruce Richardson }
212*99a2dd95SBruce Richardson
213*99a2dd95SBruce Richardson /* Add node to port traffic manager hierarchy */
rte_tm_node_add(uint16_t port_id,uint32_t node_id,uint32_t parent_node_id,uint32_t priority,uint32_t weight,uint32_t level_id,struct rte_tm_node_params * params,struct rte_tm_error * error)214*99a2dd95SBruce Richardson int rte_tm_node_add(uint16_t port_id,
215*99a2dd95SBruce Richardson uint32_t node_id,
216*99a2dd95SBruce Richardson uint32_t parent_node_id,
217*99a2dd95SBruce Richardson uint32_t priority,
218*99a2dd95SBruce Richardson uint32_t weight,
219*99a2dd95SBruce Richardson uint32_t level_id,
220*99a2dd95SBruce Richardson struct rte_tm_node_params *params,
221*99a2dd95SBruce Richardson struct rte_tm_error *error)
222*99a2dd95SBruce Richardson {
223*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
224*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, node_add)(dev,
225*99a2dd95SBruce Richardson node_id, parent_node_id, priority, weight, level_id,
226*99a2dd95SBruce Richardson params, error);
227*99a2dd95SBruce Richardson }
228*99a2dd95SBruce Richardson
229*99a2dd95SBruce Richardson /* Delete node from traffic manager hierarchy */
rte_tm_node_delete(uint16_t port_id,uint32_t node_id,struct rte_tm_error * error)230*99a2dd95SBruce Richardson int rte_tm_node_delete(uint16_t port_id,
231*99a2dd95SBruce Richardson uint32_t node_id,
232*99a2dd95SBruce Richardson struct rte_tm_error *error)
233*99a2dd95SBruce Richardson {
234*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
235*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, node_delete)(dev,
236*99a2dd95SBruce Richardson node_id, error);
237*99a2dd95SBruce Richardson }
238*99a2dd95SBruce Richardson
239*99a2dd95SBruce Richardson /* Suspend node */
rte_tm_node_suspend(uint16_t port_id,uint32_t node_id,struct rte_tm_error * error)240*99a2dd95SBruce Richardson int rte_tm_node_suspend(uint16_t port_id,
241*99a2dd95SBruce Richardson uint32_t node_id,
242*99a2dd95SBruce Richardson struct rte_tm_error *error)
243*99a2dd95SBruce Richardson {
244*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
245*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, node_suspend)(dev,
246*99a2dd95SBruce Richardson node_id, error);
247*99a2dd95SBruce Richardson }
248*99a2dd95SBruce Richardson
249*99a2dd95SBruce Richardson /* Resume node */
rte_tm_node_resume(uint16_t port_id,uint32_t node_id,struct rte_tm_error * error)250*99a2dd95SBruce Richardson int rte_tm_node_resume(uint16_t port_id,
251*99a2dd95SBruce Richardson uint32_t node_id,
252*99a2dd95SBruce Richardson struct rte_tm_error *error)
253*99a2dd95SBruce Richardson {
254*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
255*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, node_resume)(dev,
256*99a2dd95SBruce Richardson node_id, error);
257*99a2dd95SBruce Richardson }
258*99a2dd95SBruce Richardson
259*99a2dd95SBruce Richardson /* Commit the initial port traffic manager hierarchy */
rte_tm_hierarchy_commit(uint16_t port_id,int clear_on_fail,struct rte_tm_error * error)260*99a2dd95SBruce Richardson int rte_tm_hierarchy_commit(uint16_t port_id,
261*99a2dd95SBruce Richardson int clear_on_fail,
262*99a2dd95SBruce Richardson struct rte_tm_error *error)
263*99a2dd95SBruce Richardson {
264*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
265*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, hierarchy_commit)(dev,
266*99a2dd95SBruce Richardson clear_on_fail, error);
267*99a2dd95SBruce Richardson }
268*99a2dd95SBruce Richardson
269*99a2dd95SBruce Richardson /* Update node parent */
rte_tm_node_parent_update(uint16_t port_id,uint32_t node_id,uint32_t parent_node_id,uint32_t priority,uint32_t weight,struct rte_tm_error * error)270*99a2dd95SBruce Richardson int rte_tm_node_parent_update(uint16_t port_id,
271*99a2dd95SBruce Richardson uint32_t node_id,
272*99a2dd95SBruce Richardson uint32_t parent_node_id,
273*99a2dd95SBruce Richardson uint32_t priority,
274*99a2dd95SBruce Richardson uint32_t weight,
275*99a2dd95SBruce Richardson struct rte_tm_error *error)
276*99a2dd95SBruce Richardson {
277*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
278*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, node_parent_update)(dev,
279*99a2dd95SBruce Richardson node_id, parent_node_id, priority, weight, error);
280*99a2dd95SBruce Richardson }
281*99a2dd95SBruce Richardson
282*99a2dd95SBruce Richardson /* Update node private shaper */
rte_tm_node_shaper_update(uint16_t port_id,uint32_t node_id,uint32_t shaper_profile_id,struct rte_tm_error * error)283*99a2dd95SBruce Richardson int rte_tm_node_shaper_update(uint16_t port_id,
284*99a2dd95SBruce Richardson uint32_t node_id,
285*99a2dd95SBruce Richardson uint32_t shaper_profile_id,
286*99a2dd95SBruce Richardson struct rte_tm_error *error)
287*99a2dd95SBruce Richardson {
288*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
289*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, node_shaper_update)(dev,
290*99a2dd95SBruce Richardson node_id, shaper_profile_id, error);
291*99a2dd95SBruce Richardson }
292*99a2dd95SBruce Richardson
293*99a2dd95SBruce Richardson /* Update node shared shapers */
rte_tm_node_shared_shaper_update(uint16_t port_id,uint32_t node_id,uint32_t shared_shaper_id,int add,struct rte_tm_error * error)294*99a2dd95SBruce Richardson int rte_tm_node_shared_shaper_update(uint16_t port_id,
295*99a2dd95SBruce Richardson uint32_t node_id,
296*99a2dd95SBruce Richardson uint32_t shared_shaper_id,
297*99a2dd95SBruce Richardson int add,
298*99a2dd95SBruce Richardson struct rte_tm_error *error)
299*99a2dd95SBruce Richardson {
300*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
301*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, node_shared_shaper_update)(dev,
302*99a2dd95SBruce Richardson node_id, shared_shaper_id, add, error);
303*99a2dd95SBruce Richardson }
304*99a2dd95SBruce Richardson
305*99a2dd95SBruce Richardson /* Update node stats */
rte_tm_node_stats_update(uint16_t port_id,uint32_t node_id,uint64_t stats_mask,struct rte_tm_error * error)306*99a2dd95SBruce Richardson int rte_tm_node_stats_update(uint16_t port_id,
307*99a2dd95SBruce Richardson uint32_t node_id,
308*99a2dd95SBruce Richardson uint64_t stats_mask,
309*99a2dd95SBruce Richardson struct rte_tm_error *error)
310*99a2dd95SBruce Richardson {
311*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
312*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, node_stats_update)(dev,
313*99a2dd95SBruce Richardson node_id, stats_mask, error);
314*99a2dd95SBruce Richardson }
315*99a2dd95SBruce Richardson
316*99a2dd95SBruce Richardson /* Update WFQ weight mode */
rte_tm_node_wfq_weight_mode_update(uint16_t port_id,uint32_t node_id,int * wfq_weight_mode,uint32_t n_sp_priorities,struct rte_tm_error * error)317*99a2dd95SBruce Richardson int rte_tm_node_wfq_weight_mode_update(uint16_t port_id,
318*99a2dd95SBruce Richardson uint32_t node_id,
319*99a2dd95SBruce Richardson int *wfq_weight_mode,
320*99a2dd95SBruce Richardson uint32_t n_sp_priorities,
321*99a2dd95SBruce Richardson struct rte_tm_error *error)
322*99a2dd95SBruce Richardson {
323*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
324*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, node_wfq_weight_mode_update)(dev,
325*99a2dd95SBruce Richardson node_id, wfq_weight_mode, n_sp_priorities, error);
326*99a2dd95SBruce Richardson }
327*99a2dd95SBruce Richardson
328*99a2dd95SBruce Richardson /* Update node congestion management mode */
rte_tm_node_cman_update(uint16_t port_id,uint32_t node_id,enum rte_tm_cman_mode cman,struct rte_tm_error * error)329*99a2dd95SBruce Richardson int rte_tm_node_cman_update(uint16_t port_id,
330*99a2dd95SBruce Richardson uint32_t node_id,
331*99a2dd95SBruce Richardson enum rte_tm_cman_mode cman,
332*99a2dd95SBruce Richardson struct rte_tm_error *error)
333*99a2dd95SBruce Richardson {
334*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
335*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, node_cman_update)(dev,
336*99a2dd95SBruce Richardson node_id, cman, error);
337*99a2dd95SBruce Richardson }
338*99a2dd95SBruce Richardson
339*99a2dd95SBruce Richardson /* Update node private WRED context */
rte_tm_node_wred_context_update(uint16_t port_id,uint32_t node_id,uint32_t wred_profile_id,struct rte_tm_error * error)340*99a2dd95SBruce Richardson int rte_tm_node_wred_context_update(uint16_t port_id,
341*99a2dd95SBruce Richardson uint32_t node_id,
342*99a2dd95SBruce Richardson uint32_t wred_profile_id,
343*99a2dd95SBruce Richardson struct rte_tm_error *error)
344*99a2dd95SBruce Richardson {
345*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
346*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, node_wred_context_update)(dev,
347*99a2dd95SBruce Richardson node_id, wred_profile_id, error);
348*99a2dd95SBruce Richardson }
349*99a2dd95SBruce Richardson
350*99a2dd95SBruce Richardson /* Update node shared WRED context */
rte_tm_node_shared_wred_context_update(uint16_t port_id,uint32_t node_id,uint32_t shared_wred_context_id,int add,struct rte_tm_error * error)351*99a2dd95SBruce Richardson int rte_tm_node_shared_wred_context_update(uint16_t port_id,
352*99a2dd95SBruce Richardson uint32_t node_id,
353*99a2dd95SBruce Richardson uint32_t shared_wred_context_id,
354*99a2dd95SBruce Richardson int add,
355*99a2dd95SBruce Richardson struct rte_tm_error *error)
356*99a2dd95SBruce Richardson {
357*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
358*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, node_shared_wred_context_update)(dev,
359*99a2dd95SBruce Richardson node_id, shared_wred_context_id, add, error);
360*99a2dd95SBruce Richardson }
361*99a2dd95SBruce Richardson
362*99a2dd95SBruce Richardson /* Read and/or clear stats counters for specific node */
rte_tm_node_stats_read(uint16_t port_id,uint32_t node_id,struct rte_tm_node_stats * stats,uint64_t * stats_mask,int clear,struct rte_tm_error * error)363*99a2dd95SBruce Richardson int rte_tm_node_stats_read(uint16_t port_id,
364*99a2dd95SBruce Richardson uint32_t node_id,
365*99a2dd95SBruce Richardson struct rte_tm_node_stats *stats,
366*99a2dd95SBruce Richardson uint64_t *stats_mask,
367*99a2dd95SBruce Richardson int clear,
368*99a2dd95SBruce Richardson struct rte_tm_error *error)
369*99a2dd95SBruce Richardson {
370*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
371*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, node_stats_read)(dev,
372*99a2dd95SBruce Richardson node_id, stats, stats_mask, clear, error);
373*99a2dd95SBruce Richardson }
374*99a2dd95SBruce Richardson
375*99a2dd95SBruce Richardson /* Packet marking - VLAN DEI */
rte_tm_mark_vlan_dei(uint16_t port_id,int mark_green,int mark_yellow,int mark_red,struct rte_tm_error * error)376*99a2dd95SBruce Richardson int rte_tm_mark_vlan_dei(uint16_t port_id,
377*99a2dd95SBruce Richardson int mark_green,
378*99a2dd95SBruce Richardson int mark_yellow,
379*99a2dd95SBruce Richardson int mark_red,
380*99a2dd95SBruce Richardson struct rte_tm_error *error)
381*99a2dd95SBruce Richardson {
382*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
383*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, mark_vlan_dei)(dev,
384*99a2dd95SBruce Richardson mark_green, mark_yellow, mark_red, error);
385*99a2dd95SBruce Richardson }
386*99a2dd95SBruce Richardson
387*99a2dd95SBruce Richardson /* Packet marking - IPv4/IPv6 ECN */
rte_tm_mark_ip_ecn(uint16_t port_id,int mark_green,int mark_yellow,int mark_red,struct rte_tm_error * error)388*99a2dd95SBruce Richardson int rte_tm_mark_ip_ecn(uint16_t port_id,
389*99a2dd95SBruce Richardson int mark_green,
390*99a2dd95SBruce Richardson int mark_yellow,
391*99a2dd95SBruce Richardson int mark_red,
392*99a2dd95SBruce Richardson struct rte_tm_error *error)
393*99a2dd95SBruce Richardson {
394*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
395*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, mark_ip_ecn)(dev,
396*99a2dd95SBruce Richardson mark_green, mark_yellow, mark_red, error);
397*99a2dd95SBruce Richardson }
398*99a2dd95SBruce Richardson
399*99a2dd95SBruce Richardson /* Packet marking - IPv4/IPv6 DSCP */
rte_tm_mark_ip_dscp(uint16_t port_id,int mark_green,int mark_yellow,int mark_red,struct rte_tm_error * error)400*99a2dd95SBruce Richardson int rte_tm_mark_ip_dscp(uint16_t port_id,
401*99a2dd95SBruce Richardson int mark_green,
402*99a2dd95SBruce Richardson int mark_yellow,
403*99a2dd95SBruce Richardson int mark_red,
404*99a2dd95SBruce Richardson struct rte_tm_error *error)
405*99a2dd95SBruce Richardson {
406*99a2dd95SBruce Richardson struct rte_eth_dev *dev = &rte_eth_devices[port_id];
407*99a2dd95SBruce Richardson return RTE_TM_FUNC(port_id, mark_ip_dscp)(dev,
408*99a2dd95SBruce Richardson mark_green, mark_yellow, mark_red, error);
409*99a2dd95SBruce Richardson }
410