xref: /dpdk/lib/ethdev/rte_tm_driver.h (revision 25a2a0dc3de31ca0a6fbc9371cf3dd85dfd74b07)
199a2dd95SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause
299a2dd95SBruce Richardson  * Copyright(c) 2017 Intel Corporation
399a2dd95SBruce Richardson  */
499a2dd95SBruce Richardson 
599a2dd95SBruce Richardson #ifndef __INCLUDE_RTE_TM_DRIVER_H__
699a2dd95SBruce Richardson #define __INCLUDE_RTE_TM_DRIVER_H__
799a2dd95SBruce Richardson 
899a2dd95SBruce Richardson /**
999a2dd95SBruce Richardson  * @file
1099a2dd95SBruce Richardson  * RTE Generic Traffic Manager API (Driver Side)
1199a2dd95SBruce Richardson  *
1299a2dd95SBruce Richardson  * This file provides implementation helpers for internal use by PMDs, they
1399a2dd95SBruce Richardson  * are not intended to be exposed to applications and are not subject to ABI
1499a2dd95SBruce Richardson  * versioning.
1599a2dd95SBruce Richardson  */
1699a2dd95SBruce Richardson 
1799a2dd95SBruce Richardson #include <stdint.h>
1899a2dd95SBruce Richardson 
1999a2dd95SBruce Richardson #include <rte_errno.h>
2099a2dd95SBruce Richardson #include "rte_ethdev.h"
2199a2dd95SBruce Richardson #include "ethdev_driver.h"
2299a2dd95SBruce Richardson #include "rte_tm.h"
2399a2dd95SBruce Richardson 
2499a2dd95SBruce Richardson #ifdef __cplusplus
2599a2dd95SBruce Richardson extern "C" {
2699a2dd95SBruce Richardson #endif
2799a2dd95SBruce Richardson 
2899a2dd95SBruce Richardson /** @internal Traffic manager node ID validate and type get */
2999a2dd95SBruce Richardson typedef int (*rte_tm_node_type_get_t)(struct rte_eth_dev *dev,
3099a2dd95SBruce Richardson 	uint32_t node_id,
3199a2dd95SBruce Richardson 	int *is_leaf,
3299a2dd95SBruce Richardson 	struct rte_tm_error *error);
3399a2dd95SBruce Richardson 
3499a2dd95SBruce Richardson /** @internal Traffic manager capabilities get */
3599a2dd95SBruce Richardson typedef int (*rte_tm_capabilities_get_t)(struct rte_eth_dev *dev,
3699a2dd95SBruce Richardson 	struct rte_tm_capabilities *cap,
3799a2dd95SBruce Richardson 	struct rte_tm_error *error);
3899a2dd95SBruce Richardson 
3999a2dd95SBruce Richardson /** @internal Traffic manager level capabilities get */
4099a2dd95SBruce Richardson typedef int (*rte_tm_level_capabilities_get_t)(struct rte_eth_dev *dev,
4199a2dd95SBruce Richardson 	uint32_t level_id,
4299a2dd95SBruce Richardson 	struct rte_tm_level_capabilities *cap,
4399a2dd95SBruce Richardson 	struct rte_tm_error *error);
4499a2dd95SBruce Richardson 
4599a2dd95SBruce Richardson /** @internal Traffic manager node capabilities get */
4699a2dd95SBruce Richardson typedef int (*rte_tm_node_capabilities_get_t)(struct rte_eth_dev *dev,
4799a2dd95SBruce Richardson 	uint32_t node_id,
4899a2dd95SBruce Richardson 	struct rte_tm_node_capabilities *cap,
4999a2dd95SBruce Richardson 	struct rte_tm_error *error);
5099a2dd95SBruce Richardson 
5199a2dd95SBruce Richardson /** @internal Traffic manager WRED profile add */
5299a2dd95SBruce Richardson typedef int (*rte_tm_wred_profile_add_t)(struct rte_eth_dev *dev,
5399a2dd95SBruce Richardson 	uint32_t wred_profile_id,
545d963566SBruce Richardson 	const struct rte_tm_wred_params *profile,
5599a2dd95SBruce Richardson 	struct rte_tm_error *error);
5699a2dd95SBruce Richardson 
5799a2dd95SBruce Richardson /** @internal Traffic manager WRED profile delete */
5899a2dd95SBruce Richardson typedef int (*rte_tm_wred_profile_delete_t)(struct rte_eth_dev *dev,
5999a2dd95SBruce Richardson 	uint32_t wred_profile_id,
6099a2dd95SBruce Richardson 	struct rte_tm_error *error);
6199a2dd95SBruce Richardson 
6299a2dd95SBruce Richardson /** @internal Traffic manager shared WRED context add */
6399a2dd95SBruce Richardson typedef int (*rte_tm_shared_wred_context_add_update_t)(
6499a2dd95SBruce Richardson 	struct rte_eth_dev *dev,
6599a2dd95SBruce Richardson 	uint32_t shared_wred_context_id,
6699a2dd95SBruce Richardson 	uint32_t wred_profile_id,
6799a2dd95SBruce Richardson 	struct rte_tm_error *error);
6899a2dd95SBruce Richardson 
6999a2dd95SBruce Richardson /** @internal Traffic manager shared WRED context delete */
7099a2dd95SBruce Richardson typedef int (*rte_tm_shared_wred_context_delete_t)(
7199a2dd95SBruce Richardson 	struct rte_eth_dev *dev,
7299a2dd95SBruce Richardson 	uint32_t shared_wred_context_id,
7399a2dd95SBruce Richardson 	struct rte_tm_error *error);
7499a2dd95SBruce Richardson 
7599a2dd95SBruce Richardson /** @internal Traffic manager shaper profile add */
7699a2dd95SBruce Richardson typedef int (*rte_tm_shaper_profile_add_t)(struct rte_eth_dev *dev,
7799a2dd95SBruce Richardson 	uint32_t shaper_profile_id,
7839533238SBruce Richardson 	const struct rte_tm_shaper_params *profile,
7999a2dd95SBruce Richardson 	struct rte_tm_error *error);
8099a2dd95SBruce Richardson 
8199a2dd95SBruce Richardson /** @internal Traffic manager shaper profile delete */
8299a2dd95SBruce Richardson typedef int (*rte_tm_shaper_profile_delete_t)(struct rte_eth_dev *dev,
8399a2dd95SBruce Richardson 	uint32_t shaper_profile_id,
8499a2dd95SBruce Richardson 	struct rte_tm_error *error);
8599a2dd95SBruce Richardson 
8699a2dd95SBruce Richardson /** @internal Traffic manager shared shaper add/update */
8799a2dd95SBruce Richardson typedef int (*rte_tm_shared_shaper_add_update_t)(struct rte_eth_dev *dev,
8899a2dd95SBruce Richardson 	uint32_t shared_shaper_id,
8999a2dd95SBruce Richardson 	uint32_t shaper_profile_id,
9099a2dd95SBruce Richardson 	struct rte_tm_error *error);
9199a2dd95SBruce Richardson 
9299a2dd95SBruce Richardson /** @internal Traffic manager shared shaper delete */
9399a2dd95SBruce Richardson typedef int (*rte_tm_shared_shaper_delete_t)(struct rte_eth_dev *dev,
9499a2dd95SBruce Richardson 	uint32_t shared_shaper_id,
9599a2dd95SBruce Richardson 	struct rte_tm_error *error);
9699a2dd95SBruce Richardson 
9799a2dd95SBruce Richardson /** @internal Traffic manager node add */
9899a2dd95SBruce Richardson typedef int (*rte_tm_node_add_t)(struct rte_eth_dev *dev,
9999a2dd95SBruce Richardson 	uint32_t node_id,
10099a2dd95SBruce Richardson 	uint32_t parent_node_id,
10199a2dd95SBruce Richardson 	uint32_t priority,
10299a2dd95SBruce Richardson 	uint32_t weight,
10399a2dd95SBruce Richardson 	uint32_t level_id,
1045d49af62SBruce Richardson 	const struct rte_tm_node_params *params,
10599a2dd95SBruce Richardson 	struct rte_tm_error *error);
10699a2dd95SBruce Richardson 
10799a2dd95SBruce Richardson /** @internal Traffic manager node delete */
10899a2dd95SBruce Richardson typedef int (*rte_tm_node_delete_t)(struct rte_eth_dev *dev,
10999a2dd95SBruce Richardson 	uint32_t node_id,
11099a2dd95SBruce Richardson 	struct rte_tm_error *error);
11199a2dd95SBruce Richardson 
11299a2dd95SBruce Richardson /** @internal Traffic manager node suspend */
11399a2dd95SBruce Richardson typedef int (*rte_tm_node_suspend_t)(struct rte_eth_dev *dev,
11499a2dd95SBruce Richardson 	uint32_t node_id,
11599a2dd95SBruce Richardson 	struct rte_tm_error *error);
11699a2dd95SBruce Richardson 
11799a2dd95SBruce Richardson /** @internal Traffic manager node resume */
11899a2dd95SBruce Richardson typedef int (*rte_tm_node_resume_t)(struct rte_eth_dev *dev,
11999a2dd95SBruce Richardson 	uint32_t node_id,
12099a2dd95SBruce Richardson 	struct rte_tm_error *error);
12199a2dd95SBruce Richardson 
122*25a2a0dcSBruce Richardson /** @internal Traffic manager node query */
123*25a2a0dcSBruce Richardson typedef int (*rte_tm_node_query_t)(const struct rte_eth_dev *dev,
124*25a2a0dcSBruce Richardson 	uint32_t node_id,
125*25a2a0dcSBruce Richardson 	uint32_t *parent_node_id,
126*25a2a0dcSBruce Richardson 	uint32_t *priority,
127*25a2a0dcSBruce Richardson 	uint32_t *weight,
128*25a2a0dcSBruce Richardson 	uint32_t *level_id,
129*25a2a0dcSBruce Richardson 	struct rte_tm_node_params *params,
130*25a2a0dcSBruce Richardson 	struct rte_tm_error *error);
131*25a2a0dcSBruce Richardson 
13299a2dd95SBruce Richardson /** @internal Traffic manager hierarchy commit */
13399a2dd95SBruce Richardson typedef int (*rte_tm_hierarchy_commit_t)(struct rte_eth_dev *dev,
13499a2dd95SBruce Richardson 	int clear_on_fail,
13599a2dd95SBruce Richardson 	struct rte_tm_error *error);
13699a2dd95SBruce Richardson 
13799a2dd95SBruce Richardson /** @internal Traffic manager node parent update */
13899a2dd95SBruce Richardson typedef int (*rte_tm_node_parent_update_t)(struct rte_eth_dev *dev,
13999a2dd95SBruce Richardson 	uint32_t node_id,
14099a2dd95SBruce Richardson 	uint32_t parent_node_id,
14199a2dd95SBruce Richardson 	uint32_t priority,
14299a2dd95SBruce Richardson 	uint32_t weight,
14399a2dd95SBruce Richardson 	struct rte_tm_error *error);
14499a2dd95SBruce Richardson 
14599a2dd95SBruce Richardson /** @internal Traffic manager node shaper update */
14699a2dd95SBruce Richardson typedef int (*rte_tm_node_shaper_update_t)(struct rte_eth_dev *dev,
14799a2dd95SBruce Richardson 	uint32_t node_id,
14899a2dd95SBruce Richardson 	uint32_t shaper_profile_id,
14999a2dd95SBruce Richardson 	struct rte_tm_error *error);
15099a2dd95SBruce Richardson 
15199a2dd95SBruce Richardson /** @internal Traffic manager node shaper update */
15299a2dd95SBruce Richardson typedef int (*rte_tm_node_shared_shaper_update_t)(struct rte_eth_dev *dev,
15399a2dd95SBruce Richardson 	uint32_t node_id,
15499a2dd95SBruce Richardson 	uint32_t shared_shaper_id,
15599a2dd95SBruce Richardson 	int32_t add,
15699a2dd95SBruce Richardson 	struct rte_tm_error *error);
15799a2dd95SBruce Richardson 
15899a2dd95SBruce Richardson /** @internal Traffic manager node stats update */
15999a2dd95SBruce Richardson typedef int (*rte_tm_node_stats_update_t)(struct rte_eth_dev *dev,
16099a2dd95SBruce Richardson 	uint32_t node_id,
16199a2dd95SBruce Richardson 	uint64_t stats_mask,
16299a2dd95SBruce Richardson 	struct rte_tm_error *error);
16399a2dd95SBruce Richardson 
16499a2dd95SBruce Richardson /** @internal Traffic manager node WFQ weight mode update */
16599a2dd95SBruce Richardson typedef int (*rte_tm_node_wfq_weight_mode_update_t)(
16699a2dd95SBruce Richardson 	struct rte_eth_dev *dev,
16799a2dd95SBruce Richardson 	uint32_t node_id,
16899a2dd95SBruce Richardson 	int *wfq_weight_mode,
16999a2dd95SBruce Richardson 	uint32_t n_sp_priorities,
17099a2dd95SBruce Richardson 	struct rte_tm_error *error);
17199a2dd95SBruce Richardson 
17299a2dd95SBruce Richardson /** @internal Traffic manager node congestion management mode update */
17399a2dd95SBruce Richardson typedef int (*rte_tm_node_cman_update_t)(struct rte_eth_dev *dev,
17499a2dd95SBruce Richardson 	uint32_t node_id,
17599a2dd95SBruce Richardson 	enum rte_tm_cman_mode cman,
17699a2dd95SBruce Richardson 	struct rte_tm_error *error);
17799a2dd95SBruce Richardson 
17899a2dd95SBruce Richardson /** @internal Traffic manager node WRED context update */
17999a2dd95SBruce Richardson typedef int (*rte_tm_node_wred_context_update_t)(
18099a2dd95SBruce Richardson 	struct rte_eth_dev *dev,
18199a2dd95SBruce Richardson 	uint32_t node_id,
18299a2dd95SBruce Richardson 	uint32_t wred_profile_id,
18399a2dd95SBruce Richardson 	struct rte_tm_error *error);
18499a2dd95SBruce Richardson 
18599a2dd95SBruce Richardson /** @internal Traffic manager node WRED context update */
18699a2dd95SBruce Richardson typedef int (*rte_tm_node_shared_wred_context_update_t)(
18799a2dd95SBruce Richardson 	struct rte_eth_dev *dev,
18899a2dd95SBruce Richardson 	uint32_t node_id,
18999a2dd95SBruce Richardson 	uint32_t shared_wred_context_id,
19099a2dd95SBruce Richardson 	int add,
19199a2dd95SBruce Richardson 	struct rte_tm_error *error);
19299a2dd95SBruce Richardson 
19399a2dd95SBruce Richardson /** @internal Traffic manager read stats counters for specific node */
19499a2dd95SBruce Richardson typedef int (*rte_tm_node_stats_read_t)(struct rte_eth_dev *dev,
19599a2dd95SBruce Richardson 	uint32_t node_id,
19699a2dd95SBruce Richardson 	struct rte_tm_node_stats *stats,
19799a2dd95SBruce Richardson 	uint64_t *stats_mask,
19899a2dd95SBruce Richardson 	int clear,
19999a2dd95SBruce Richardson 	struct rte_tm_error *error);
20099a2dd95SBruce Richardson 
20199a2dd95SBruce Richardson /** @internal Traffic manager packet marking - VLAN DEI */
20299a2dd95SBruce Richardson typedef int (*rte_tm_mark_vlan_dei_t)(struct rte_eth_dev *dev,
20399a2dd95SBruce Richardson 	int mark_green,
20499a2dd95SBruce Richardson 	int mark_yellow,
20599a2dd95SBruce Richardson 	int mark_red,
20699a2dd95SBruce Richardson 	struct rte_tm_error *error);
20799a2dd95SBruce Richardson 
20899a2dd95SBruce Richardson /** @internal Traffic manager packet marking - IPv4/IPv6 ECN */
20999a2dd95SBruce Richardson typedef int (*rte_tm_mark_ip_ecn_t)(struct rte_eth_dev *dev,
21099a2dd95SBruce Richardson 	int mark_green,
21199a2dd95SBruce Richardson 	int mark_yellow,
21299a2dd95SBruce Richardson 	int mark_red,
21399a2dd95SBruce Richardson 	struct rte_tm_error *error);
21499a2dd95SBruce Richardson 
21599a2dd95SBruce Richardson /** @internal Traffic manager packet marking - IPv4/IPv6 DSCP */
21699a2dd95SBruce Richardson typedef int (*rte_tm_mark_ip_dscp_t)(struct rte_eth_dev *dev,
21799a2dd95SBruce Richardson 	int mark_green,
21899a2dd95SBruce Richardson 	int mark_yellow,
21999a2dd95SBruce Richardson 	int mark_red,
22099a2dd95SBruce Richardson 	struct rte_tm_error *error);
22199a2dd95SBruce Richardson 
22299a2dd95SBruce Richardson struct rte_tm_ops {
22399a2dd95SBruce Richardson 	/** Traffic manager node type get */
22499a2dd95SBruce Richardson 	rte_tm_node_type_get_t node_type_get;
22599a2dd95SBruce Richardson 
22699a2dd95SBruce Richardson 	/** Traffic manager capabilities_get */
22799a2dd95SBruce Richardson 	rte_tm_capabilities_get_t capabilities_get;
22899a2dd95SBruce Richardson 	/** Traffic manager level capabilities_get */
22999a2dd95SBruce Richardson 	rte_tm_level_capabilities_get_t level_capabilities_get;
23099a2dd95SBruce Richardson 	/** Traffic manager node capabilities get */
23199a2dd95SBruce Richardson 	rte_tm_node_capabilities_get_t node_capabilities_get;
23299a2dd95SBruce Richardson 
23399a2dd95SBruce Richardson 	/** Traffic manager WRED profile add */
23499a2dd95SBruce Richardson 	rte_tm_wred_profile_add_t wred_profile_add;
23599a2dd95SBruce Richardson 	/** Traffic manager WRED profile delete */
23699a2dd95SBruce Richardson 	rte_tm_wred_profile_delete_t wred_profile_delete;
23799a2dd95SBruce Richardson 	/** Traffic manager shared WRED context add/update */
23899a2dd95SBruce Richardson 	rte_tm_shared_wred_context_add_update_t
23999a2dd95SBruce Richardson 		shared_wred_context_add_update;
24099a2dd95SBruce Richardson 	/** Traffic manager shared WRED context delete */
24199a2dd95SBruce Richardson 	rte_tm_shared_wred_context_delete_t
24299a2dd95SBruce Richardson 		shared_wred_context_delete;
24399a2dd95SBruce Richardson 
24499a2dd95SBruce Richardson 	/** Traffic manager shaper profile add */
24599a2dd95SBruce Richardson 	rte_tm_shaper_profile_add_t shaper_profile_add;
24699a2dd95SBruce Richardson 	/** Traffic manager shaper profile delete */
24799a2dd95SBruce Richardson 	rte_tm_shaper_profile_delete_t shaper_profile_delete;
24899a2dd95SBruce Richardson 	/** Traffic manager shared shaper add/update */
24999a2dd95SBruce Richardson 	rte_tm_shared_shaper_add_update_t shared_shaper_add_update;
25099a2dd95SBruce Richardson 	/** Traffic manager shared shaper delete */
25199a2dd95SBruce Richardson 	rte_tm_shared_shaper_delete_t shared_shaper_delete;
25299a2dd95SBruce Richardson 
25399a2dd95SBruce Richardson 	/** Traffic manager node add */
25499a2dd95SBruce Richardson 	rte_tm_node_add_t node_add;
25599a2dd95SBruce Richardson 	/** Traffic manager node delete */
25699a2dd95SBruce Richardson 	rte_tm_node_delete_t node_delete;
25799a2dd95SBruce Richardson 	/** Traffic manager node suspend */
25899a2dd95SBruce Richardson 	rte_tm_node_suspend_t node_suspend;
25999a2dd95SBruce Richardson 	/** Traffic manager node resume */
26099a2dd95SBruce Richardson 	rte_tm_node_resume_t node_resume;
261*25a2a0dcSBruce Richardson 	/** Traffic manager node query */
262*25a2a0dcSBruce Richardson 	rte_tm_node_query_t node_query;
26399a2dd95SBruce Richardson 	/** Traffic manager hierarchy commit */
26499a2dd95SBruce Richardson 	rte_tm_hierarchy_commit_t hierarchy_commit;
26599a2dd95SBruce Richardson 
26699a2dd95SBruce Richardson 	/** Traffic manager node parent update */
26799a2dd95SBruce Richardson 	rte_tm_node_parent_update_t node_parent_update;
26899a2dd95SBruce Richardson 	/** Traffic manager node shaper update */
26999a2dd95SBruce Richardson 	rte_tm_node_shaper_update_t node_shaper_update;
27099a2dd95SBruce Richardson 	/** Traffic manager node shared shaper update */
27199a2dd95SBruce Richardson 	rte_tm_node_shared_shaper_update_t node_shared_shaper_update;
27299a2dd95SBruce Richardson 	/** Traffic manager node stats update */
27399a2dd95SBruce Richardson 	rte_tm_node_stats_update_t node_stats_update;
27499a2dd95SBruce Richardson 	/** Traffic manager node WFQ weight mode update */
27599a2dd95SBruce Richardson 	rte_tm_node_wfq_weight_mode_update_t node_wfq_weight_mode_update;
27699a2dd95SBruce Richardson 	/** Traffic manager node congestion management mode update */
27799a2dd95SBruce Richardson 	rte_tm_node_cman_update_t node_cman_update;
27899a2dd95SBruce Richardson 	/** Traffic manager node WRED context update */
27999a2dd95SBruce Richardson 	rte_tm_node_wred_context_update_t node_wred_context_update;
28099a2dd95SBruce Richardson 	/** Traffic manager node shared WRED context update */
28199a2dd95SBruce Richardson 	rte_tm_node_shared_wred_context_update_t
28299a2dd95SBruce Richardson 		node_shared_wred_context_update;
28399a2dd95SBruce Richardson 	/** Traffic manager read statistics counters for current node */
28499a2dd95SBruce Richardson 	rte_tm_node_stats_read_t node_stats_read;
28599a2dd95SBruce Richardson 
28699a2dd95SBruce Richardson 	/** Traffic manager packet marking - VLAN DEI */
28799a2dd95SBruce Richardson 	rte_tm_mark_vlan_dei_t mark_vlan_dei;
28899a2dd95SBruce Richardson 	/** Traffic manager packet marking - IPv4/IPv6 ECN */
28999a2dd95SBruce Richardson 	rte_tm_mark_ip_ecn_t mark_ip_ecn;
29099a2dd95SBruce Richardson 	/** Traffic manager packet marking - IPv4/IPv6 DSCP */
29199a2dd95SBruce Richardson 	rte_tm_mark_ip_dscp_t mark_ip_dscp;
29299a2dd95SBruce Richardson };
29399a2dd95SBruce Richardson 
29499a2dd95SBruce Richardson /**
29599a2dd95SBruce Richardson  * Initialize generic error structure.
29699a2dd95SBruce Richardson  *
29799a2dd95SBruce Richardson  * This function also sets rte_errno to a given value.
29899a2dd95SBruce Richardson  *
29999a2dd95SBruce Richardson  * @param[out] error
30099a2dd95SBruce Richardson  *   Pointer to error structure (may be NULL).
30199a2dd95SBruce Richardson  * @param[in] code
30299a2dd95SBruce Richardson  *   Related error code (rte_errno).
30399a2dd95SBruce Richardson  * @param[in] type
30499a2dd95SBruce Richardson  *   Cause field and error type.
30599a2dd95SBruce Richardson  * @param[in] cause
30699a2dd95SBruce Richardson  *   Object responsible for the error.
30799a2dd95SBruce Richardson  * @param[in] message
30899a2dd95SBruce Richardson  *   Human-readable error message.
30999a2dd95SBruce Richardson  *
31099a2dd95SBruce Richardson  * @return
31199a2dd95SBruce Richardson  *   Error code.
31299a2dd95SBruce Richardson  */
31399a2dd95SBruce Richardson static inline int
31499a2dd95SBruce Richardson rte_tm_error_set(struct rte_tm_error *error,
31599a2dd95SBruce Richardson 		   int code,
31699a2dd95SBruce Richardson 		   enum rte_tm_error_type type,
31799a2dd95SBruce Richardson 		   const void *cause,
31899a2dd95SBruce Richardson 		   const char *message)
31999a2dd95SBruce Richardson {
32099a2dd95SBruce Richardson 	if (error) {
32199a2dd95SBruce Richardson 		*error = (struct rte_tm_error){
32299a2dd95SBruce Richardson 			.type = type,
32399a2dd95SBruce Richardson 			.cause = cause,
32499a2dd95SBruce Richardson 			.message = message,
32599a2dd95SBruce Richardson 		};
32699a2dd95SBruce Richardson 	}
32799a2dd95SBruce Richardson 	rte_errno = code;
32899a2dd95SBruce Richardson 	return code;
32999a2dd95SBruce Richardson }
33099a2dd95SBruce Richardson 
33199a2dd95SBruce Richardson /**
33299a2dd95SBruce Richardson  * Get generic traffic manager operations structure from a port
33399a2dd95SBruce Richardson  *
33499a2dd95SBruce Richardson  * @param[in] port_id
33599a2dd95SBruce Richardson  *   The port identifier of the Ethernet device.
33699a2dd95SBruce Richardson  * @param[out] error
33799a2dd95SBruce Richardson  *   Error details
33899a2dd95SBruce Richardson  *
33999a2dd95SBruce Richardson  * @return
34099a2dd95SBruce Richardson  *   The traffic manager operations structure associated with port_id on
34199a2dd95SBruce Richardson  *   success, NULL otherwise.
34299a2dd95SBruce Richardson  */
34399a2dd95SBruce Richardson const struct rte_tm_ops *
34499a2dd95SBruce Richardson rte_tm_ops_get(uint16_t port_id, struct rte_tm_error *error);
34599a2dd95SBruce Richardson 
34699a2dd95SBruce Richardson #ifdef __cplusplus
34799a2dd95SBruce Richardson }
34899a2dd95SBruce Richardson #endif
34999a2dd95SBruce Richardson 
35099a2dd95SBruce Richardson #endif /* __INCLUDE_RTE_TM_DRIVER_H__ */
351