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 typedef int (*rte_mtr_capabilities_get_t)(struct rte_eth_dev *dev, 29 struct rte_mtr_capabilities *cap, 30 struct rte_mtr_error *error); 31 /**< @internal MTR capabilities get */ 32 33 typedef int (*rte_mtr_meter_profile_add_t)(struct rte_eth_dev *dev, 34 uint32_t meter_profile_id, 35 struct rte_mtr_meter_profile *profile, 36 struct rte_mtr_error *error); 37 /**< @internal MTR meter profile add */ 38 39 typedef int (*rte_mtr_meter_profile_delete_t)(struct rte_eth_dev *dev, 40 uint32_t meter_profile_id, 41 struct rte_mtr_error *error); 42 /**< @internal MTR meter profile delete */ 43 44 typedef int (*rte_mtr_meter_policy_validate_t)(struct rte_eth_dev *dev, 45 struct rte_mtr_meter_policy_params *policy, 46 struct rte_mtr_error *error); 47 /**< @internal MTR meter policy validate */ 48 49 typedef int (*rte_mtr_meter_policy_add_t)(struct rte_eth_dev *dev, 50 uint32_t policy_id, 51 struct rte_mtr_meter_policy_params *policy, 52 struct rte_mtr_error *error); 53 /**< @internal MTR meter policy add */ 54 55 typedef int (*rte_mtr_meter_policy_delete_t)(struct rte_eth_dev *dev, 56 uint32_t policy_id, 57 struct rte_mtr_error *error); 58 /**< @internal MTR meter policy delete */ 59 60 typedef int (*rte_mtr_create_t)(struct rte_eth_dev *dev, 61 uint32_t mtr_id, 62 struct rte_mtr_params *params, 63 int shared, 64 struct rte_mtr_error *error); 65 /**< @internal MTR object create */ 66 67 typedef int (*rte_mtr_destroy_t)(struct rte_eth_dev *dev, 68 uint32_t mtr_id, 69 struct rte_mtr_error *error); 70 /**< @internal MTR object destroy */ 71 72 typedef int (*rte_mtr_meter_enable_t)(struct rte_eth_dev *dev, 73 uint32_t mtr_id, 74 struct rte_mtr_error *error); 75 /**< @internal MTR object meter enable */ 76 77 typedef int (*rte_mtr_meter_disable_t)(struct rte_eth_dev *dev, 78 uint32_t mtr_id, 79 struct rte_mtr_error *error); 80 /**< @internal MTR object meter disable */ 81 82 typedef int (*rte_mtr_meter_profile_update_t)(struct rte_eth_dev *dev, 83 uint32_t mtr_id, 84 uint32_t meter_profile_id, 85 struct rte_mtr_error *error); 86 /**< @internal MTR object meter profile update */ 87 88 typedef int (*rte_mtr_meter_policy_update_t)(struct rte_eth_dev *dev, 89 uint32_t mtr_id, 90 uint32_t meter_policy_id, 91 struct rte_mtr_error *error); 92 /**< @internal MTR object meter policy update */ 93 94 typedef int (*rte_mtr_meter_dscp_table_update_t)(struct rte_eth_dev *dev, 95 uint32_t mtr_id, 96 enum rte_color *dscp_table, 97 struct rte_mtr_error *error); 98 /**< @internal MTR object meter DSCP table update */ 99 100 typedef int (*rte_mtr_stats_update_t)(struct rte_eth_dev *dev, 101 uint32_t mtr_id, 102 uint64_t stats_mask, 103 struct rte_mtr_error *error); 104 /**< @internal MTR object enabled stats update */ 105 106 typedef int (*rte_mtr_stats_read_t)(struct rte_eth_dev *dev, 107 uint32_t mtr_id, 108 struct rte_mtr_stats *stats, 109 uint64_t *stats_mask, 110 int clear, 111 struct rte_mtr_error *error); 112 /**< @internal MTR object stats read */ 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