]> git.proxmox.com Git - ceph.git/blob - ceph/src/spdk/dpdk/lib/librte_ethdev/rte_mtr_driver.h
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / spdk / dpdk / lib / librte_ethdev / rte_mtr_driver.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2017 Intel Corporation
3 */
4
5 #ifndef __INCLUDE_RTE_MTR_DRIVER_H__
6 #define __INCLUDE_RTE_MTR_DRIVER_H__
7
8 /**
9 * @file
10 * RTE Generic Traffic Metering and Policing API (Driver Side)
11 *
12 * This file provides implementation helpers for internal use by PMDs, they
13 * are not intended to be exposed to applications and are not subject to ABI
14 * versioning.
15 */
16
17 #include <stdint.h>
18
19 #include <rte_errno.h>
20 #include "rte_ethdev.h"
21 #include "rte_mtr.h"
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 typedef int (*rte_mtr_capabilities_get_t)(struct rte_eth_dev *dev,
28 struct rte_mtr_capabilities *cap,
29 struct rte_mtr_error *error);
30 /**< @internal MTR capabilities get */
31
32 typedef int (*rte_mtr_meter_profile_add_t)(struct rte_eth_dev *dev,
33 uint32_t meter_profile_id,
34 struct rte_mtr_meter_profile *profile,
35 struct rte_mtr_error *error);
36 /**< @internal MTR meter profile add */
37
38 typedef int (*rte_mtr_meter_profile_delete_t)(struct rte_eth_dev *dev,
39 uint32_t meter_profile_id,
40 struct rte_mtr_error *error);
41 /**< @internal MTR meter profile delete */
42
43 typedef int (*rte_mtr_create_t)(struct rte_eth_dev *dev,
44 uint32_t mtr_id,
45 struct rte_mtr_params *params,
46 int shared,
47 struct rte_mtr_error *error);
48 /**< @internal MTR object create */
49
50 typedef int (*rte_mtr_destroy_t)(struct rte_eth_dev *dev,
51 uint32_t mtr_id,
52 struct rte_mtr_error *error);
53 /**< @internal MTR object destroy */
54
55 typedef int (*rte_mtr_meter_enable_t)(struct rte_eth_dev *dev,
56 uint32_t mtr_id,
57 struct rte_mtr_error *error);
58 /**< @internal MTR object meter enable */
59
60 typedef int (*rte_mtr_meter_disable_t)(struct rte_eth_dev *dev,
61 uint32_t mtr_id,
62 struct rte_mtr_error *error);
63 /**< @internal MTR object meter disable */
64
65 typedef int (*rte_mtr_meter_profile_update_t)(struct rte_eth_dev *dev,
66 uint32_t mtr_id,
67 uint32_t meter_profile_id,
68 struct rte_mtr_error *error);
69 /**< @internal MTR object meter profile update */
70
71 typedef int (*rte_mtr_meter_dscp_table_update_t)(struct rte_eth_dev *dev,
72 uint32_t mtr_id,
73 enum rte_mtr_color *dscp_table,
74 struct rte_mtr_error *error);
75 /**< @internal MTR object meter DSCP table update */
76
77 typedef int (*rte_mtr_policer_actions_update_t)(struct rte_eth_dev *dev,
78 uint32_t mtr_id,
79 uint32_t action_mask,
80 enum rte_mtr_policer_action *actions,
81 struct rte_mtr_error *error);
82 /**< @internal MTR object policer action update*/
83
84 typedef int (*rte_mtr_stats_update_t)(struct rte_eth_dev *dev,
85 uint32_t mtr_id,
86 uint64_t stats_mask,
87 struct rte_mtr_error *error);
88 /**< @internal MTR object enabled stats update */
89
90 typedef int (*rte_mtr_stats_read_t)(struct rte_eth_dev *dev,
91 uint32_t mtr_id,
92 struct rte_mtr_stats *stats,
93 uint64_t *stats_mask,
94 int clear,
95 struct rte_mtr_error *error);
96 /**< @internal MTR object stats read */
97
98 struct rte_mtr_ops {
99 /** MTR capabilities get */
100 rte_mtr_capabilities_get_t capabilities_get;
101
102 /** MTR meter profile add */
103 rte_mtr_meter_profile_add_t meter_profile_add;
104
105 /** MTR meter profile delete */
106 rte_mtr_meter_profile_delete_t meter_profile_delete;
107
108 /** MTR object create */
109 rte_mtr_create_t create;
110
111 /** MTR object destroy */
112 rte_mtr_destroy_t destroy;
113
114 /** MTR object meter enable */
115 rte_mtr_meter_enable_t meter_enable;
116
117 /** MTR object meter disable */
118 rte_mtr_meter_disable_t meter_disable;
119
120 /** MTR object meter profile update */
121 rte_mtr_meter_profile_update_t meter_profile_update;
122
123 /** MTR object meter DSCP table update */
124 rte_mtr_meter_dscp_table_update_t meter_dscp_table_update;
125
126 /** MTR object policer action update */
127 rte_mtr_policer_actions_update_t policer_actions_update;
128
129 /** MTR object enabled stats update */
130 rte_mtr_stats_update_t stats_update;
131
132 /** MTR object stats read */
133 rte_mtr_stats_read_t stats_read;
134 };
135
136 /**
137 * Initialize generic error structure.
138 *
139 * This function also sets rte_errno to a given value.
140 *
141 * @param[out] error
142 * Pointer to error structure (may be NULL).
143 * @param[in] code
144 * Related error code (rte_errno).
145 * @param[in] type
146 * Cause field and error type.
147 * @param[in] cause
148 * Object responsible for the error.
149 * @param[in] message
150 * Human-readable error message.
151 *
152 * @return
153 * Error code.
154 */
155 static inline int
156 rte_mtr_error_set(struct rte_mtr_error *error,
157 int code,
158 enum rte_mtr_error_type type,
159 const void *cause,
160 const char *message)
161 {
162 if (error) {
163 *error = (struct rte_mtr_error){
164 .type = type,
165 .cause = cause,
166 .message = message,
167 };
168 }
169 rte_errno = code;
170 return code;
171 }
172
173 /**
174 * Get generic traffic metering and policing operations structure from a port
175 *
176 * @param[in] port_id
177 * The port identifier of the Ethernet device.
178 * @param[out] error
179 * Error details
180 *
181 * @return
182 * The traffic metering and policing operations structure associated with
183 * port_id on success, NULL otherwise.
184 */
185 const struct rte_mtr_ops *
186 rte_mtr_ops_get(uint16_t port_id, struct rte_mtr_error *error);
187
188 #ifdef __cplusplus
189 }
190 #endif
191
192 #endif /* __INCLUDE_RTE_MTR_DRIVER_H__ */