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 "ethdev_driver.h" 22 #include "rte_mtr.h" 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif 27 28 /** @internal MTR capabilities get. */ 29 typedef int (*rte_mtr_capabilities_get_t)(struct rte_eth_dev *dev, 30 struct rte_mtr_capabilities *cap, 31 struct rte_mtr_error *error); 32 33 /** @internal MTR meter profile add. */ 34 typedef int (*rte_mtr_meter_profile_add_t)(struct rte_eth_dev *dev, 35 uint32_t meter_profile_id, 36 struct rte_mtr_meter_profile *profile, 37 struct rte_mtr_error *error); 38 39 /** @internal MTR meter profile delete. */ 40 typedef int (*rte_mtr_meter_profile_delete_t)(struct rte_eth_dev *dev, 41 uint32_t meter_profile_id, 42 struct rte_mtr_error *error); 43 44 /** @internal MTR meter policy validate. */ 45 typedef int (*rte_mtr_meter_policy_validate_t)(struct rte_eth_dev *dev, 46 struct rte_mtr_meter_policy_params *policy, 47 struct rte_mtr_error *error); 48 49 /** @internal MTR meter policy add. */ 50 typedef int (*rte_mtr_meter_policy_add_t)(struct rte_eth_dev *dev, 51 uint32_t policy_id, 52 struct rte_mtr_meter_policy_params *policy, 53 struct rte_mtr_error *error); 54 55 /** @internal MTR meter policy delete. */ 56 typedef int (*rte_mtr_meter_policy_delete_t)(struct rte_eth_dev *dev, 57 uint32_t policy_id, 58 struct rte_mtr_error *error); 59 60 /** @internal MTR object create. */ 61 typedef int (*rte_mtr_create_t)(struct rte_eth_dev *dev, 62 uint32_t mtr_id, 63 struct rte_mtr_params *params, 64 int shared, 65 struct rte_mtr_error *error); 66 67 /** @internal MTR object destroy. */ 68 typedef int (*rte_mtr_destroy_t)(struct rte_eth_dev *dev, 69 uint32_t mtr_id, 70 struct rte_mtr_error *error); 71 72 /** @internal MTR object meter enable. */ 73 typedef int (*rte_mtr_meter_enable_t)(struct rte_eth_dev *dev, 74 uint32_t mtr_id, 75 struct rte_mtr_error *error); 76 77 /** @internal MTR object meter disable. */ 78 typedef int (*rte_mtr_meter_disable_t)(struct rte_eth_dev *dev, 79 uint32_t mtr_id, 80 struct rte_mtr_error *error); 81 82 /** @internal MTR object meter profile update. */ 83 typedef int (*rte_mtr_meter_profile_update_t)(struct rte_eth_dev *dev, 84 uint32_t mtr_id, 85 uint32_t meter_profile_id, 86 struct rte_mtr_error *error); 87 88 /** @internal MTR object meter policy update. */ 89 typedef int (*rte_mtr_meter_policy_update_t)(struct rte_eth_dev *dev, 90 uint32_t mtr_id, 91 uint32_t meter_policy_id, 92 struct rte_mtr_error *error); 93 94 /** @internal MTR object meter DSCP table update. */ 95 typedef int (*rte_mtr_meter_dscp_table_update_t)(struct rte_eth_dev *dev, 96 uint32_t mtr_id, 97 enum rte_color *dscp_table, 98 struct rte_mtr_error *error); 99 100 /** @internal MTR object enabled stats update. */ 101 typedef int (*rte_mtr_stats_update_t)(struct rte_eth_dev *dev, 102 uint32_t mtr_id, 103 uint64_t stats_mask, 104 struct rte_mtr_error *error); 105 106 /** @internal MTR object stats read. */ 107 typedef int (*rte_mtr_stats_read_t)(struct rte_eth_dev *dev, 108 uint32_t mtr_id, 109 struct rte_mtr_stats *stats, 110 uint64_t *stats_mask, 111 int clear, 112 struct rte_mtr_error *error); 113 114 struct rte_mtr_ops { 115 /** MTR capabilities get */ 116 rte_mtr_capabilities_get_t capabilities_get; 117 118 /** MTR meter profile add */ 119 rte_mtr_meter_profile_add_t meter_profile_add; 120 121 /** MTR meter profile delete */ 122 rte_mtr_meter_profile_delete_t meter_profile_delete; 123 124 /** MTR object create */ 125 rte_mtr_create_t create; 126 127 /** MTR object destroy */ 128 rte_mtr_destroy_t destroy; 129 130 /** MTR object meter enable */ 131 rte_mtr_meter_enable_t meter_enable; 132 133 /** MTR object meter disable */ 134 rte_mtr_meter_disable_t meter_disable; 135 136 /** MTR object meter profile update */ 137 rte_mtr_meter_profile_update_t meter_profile_update; 138 139 /** MTR object meter DSCP table update */ 140 rte_mtr_meter_dscp_table_update_t meter_dscp_table_update; 141 142 /** MTR object enabled stats update */ 143 rte_mtr_stats_update_t stats_update; 144 145 /** MTR object stats read */ 146 rte_mtr_stats_read_t stats_read; 147 148 /** MTR meter policy validate */ 149 rte_mtr_meter_policy_validate_t meter_policy_validate; 150 151 /** MTR meter policy add */ 152 rte_mtr_meter_policy_add_t meter_policy_add; 153 154 /** MTR meter policy delete */ 155 rte_mtr_meter_policy_delete_t meter_policy_delete; 156 157 /** MTR object meter policy update */ 158 rte_mtr_meter_policy_update_t meter_policy_update; 159 }; 160 161 /** 162 * Initialize generic error structure. 163 * 164 * This function also sets rte_errno to a given value. 165 * 166 * @param[out] error 167 * Pointer to error structure (may be NULL). 168 * @param[in] code 169 * Related error code (rte_errno). 170 * @param[in] type 171 * Cause field and error type. 172 * @param[in] cause 173 * Object responsible for the error. 174 * @param[in] message 175 * Human-readable error message. 176 * 177 * @return 178 * Error code. 179 */ 180 static inline int 181 rte_mtr_error_set(struct rte_mtr_error *error, 182 int code, 183 enum rte_mtr_error_type type, 184 const void *cause, 185 const char *message) 186 { 187 if (error) { 188 *error = (struct rte_mtr_error){ 189 .type = type, 190 .cause = cause, 191 .message = message, 192 }; 193 } 194 rte_errno = code; 195 return code; 196 } 197 198 /** 199 * Get generic traffic metering and policing operations structure from a port 200 * 201 * @param[in] port_id 202 * The port identifier of the Ethernet device. 203 * @param[out] error 204 * Error details 205 * 206 * @return 207 * The traffic metering and policing operations structure associated with 208 * port_id on success, NULL otherwise. 209 */ 210 const struct rte_mtr_ops * 211 rte_mtr_ops_get(uint16_t port_id, struct rte_mtr_error *error); 212 213 #ifdef __cplusplus 214 } 215 #endif 216 217 #endif /* __INCLUDE_RTE_MTR_DRIVER_H__ */ 218