xref: /dpdk/lib/ethdev/rte_ethdev_cman.c (revision 0e21c7c07d623719d61cc7e2e85613e8c71d9a57)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2022 Marvell International Ltd.
3  */
4 
5 #include <stdint.h>
6 
7 #include <rte_errno.h>
8 #include "rte_ethdev.h"
9 #include "ethdev_driver.h"
10 #include "ethdev_private.h"
11 #include "ethdev_trace.h"
12 
13 /* Get congestion management information for a port */
14 int
rte_eth_cman_info_get(uint16_t port_id,struct rte_eth_cman_info * info)15 rte_eth_cman_info_get(uint16_t port_id, struct rte_eth_cman_info *info)
16 {
17 	struct rte_eth_dev *dev;
18 	int ret;
19 
20 	RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
21 	dev = &rte_eth_devices[port_id];
22 
23 	if (info == NULL) {
24 		RTE_ETHDEV_LOG_LINE(ERR, "congestion management info is NULL");
25 		return -EINVAL;
26 	}
27 
28 	if (dev->dev_ops->cman_info_get == NULL) {
29 		RTE_ETHDEV_LOG_LINE(ERR, "Function not implemented");
30 		return -ENOTSUP;
31 	}
32 
33 	memset(info, 0, sizeof(struct rte_eth_cman_info));
34 	ret = eth_err(port_id, (*dev->dev_ops->cman_info_get)(dev, info));
35 
36 	rte_eth_trace_cman_info_get(port_id, info, ret);
37 
38 	return ret;
39 }
40 
41 /* Initialize congestion management structure with default values */
42 int
rte_eth_cman_config_init(uint16_t port_id,struct rte_eth_cman_config * config)43 rte_eth_cman_config_init(uint16_t port_id, struct rte_eth_cman_config *config)
44 {
45 	struct rte_eth_dev *dev;
46 	int ret;
47 
48 	RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
49 	dev = &rte_eth_devices[port_id];
50 
51 	if (config == NULL) {
52 		RTE_ETHDEV_LOG_LINE(ERR, "congestion management config is NULL");
53 		return -EINVAL;
54 	}
55 
56 	if (dev->dev_ops->cman_config_init == NULL) {
57 		RTE_ETHDEV_LOG_LINE(ERR, "Function not implemented");
58 		return -ENOTSUP;
59 	}
60 
61 	memset(config, 0, sizeof(struct rte_eth_cman_config));
62 	ret = eth_err(port_id, (*dev->dev_ops->cman_config_init)(dev, config));
63 
64 	rte_eth_trace_cman_config_init(port_id, config, ret);
65 
66 	return ret;
67 }
68 
69 /* Configure congestion management on a port */
70 int
rte_eth_cman_config_set(uint16_t port_id,const struct rte_eth_cman_config * config)71 rte_eth_cman_config_set(uint16_t port_id, const struct rte_eth_cman_config *config)
72 {
73 	struct rte_eth_dev *dev;
74 	int ret;
75 
76 	RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
77 	dev = &rte_eth_devices[port_id];
78 
79 	if (config == NULL) {
80 		RTE_ETHDEV_LOG_LINE(ERR, "congestion management config is NULL");
81 		return -EINVAL;
82 	}
83 
84 	if (dev->dev_ops->cman_config_set == NULL) {
85 		RTE_ETHDEV_LOG_LINE(ERR, "Function not implemented");
86 		return -ENOTSUP;
87 	}
88 
89 	ret = eth_err(port_id, (*dev->dev_ops->cman_config_set)(dev, config));
90 
91 	rte_eth_trace_cman_config_set(port_id, config, ret);
92 
93 	return ret;
94 }
95 
96 /* Retrieve congestion management configuration of a port */
97 int
rte_eth_cman_config_get(uint16_t port_id,struct rte_eth_cman_config * config)98 rte_eth_cman_config_get(uint16_t port_id, struct rte_eth_cman_config *config)
99 {
100 	struct rte_eth_dev *dev;
101 	int ret;
102 
103 	RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV);
104 	dev = &rte_eth_devices[port_id];
105 
106 	if (config == NULL) {
107 		RTE_ETHDEV_LOG_LINE(ERR, "congestion management config is NULL");
108 		return -EINVAL;
109 	}
110 
111 	if (dev->dev_ops->cman_config_get == NULL) {
112 		RTE_ETHDEV_LOG_LINE(ERR, "Function not implemented");
113 		return -ENOTSUP;
114 	}
115 
116 	memset(config, 0, sizeof(struct rte_eth_cman_config));
117 	ret = eth_err(port_id, (*dev->dev_ops->cman_config_get)(dev, config));
118 
119 	rte_eth_trace_cman_config_get(port_id, config, ret);
120 
121 	return ret;
122 }
123