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_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__ */ 193