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