X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=lib%2Flibrte_ethdev%2Frte_tm.h;h=f9c0cf3f9094150bf147403efd7559e53124ad63;hb=300cc9fd3dc6e7a16b89cb76d621143aeb5d1590;hp=2b25a8715f0f9edadc95508931f7caa3e2b4cca2;hpb=01eb53eefeb40e82915fef92be64fd46a6178282;p=dpdk.git diff --git a/lib/librte_ethdev/rte_tm.h b/lib/librte_ethdev/rte_tm.h index 2b25a8715f..f9c0cf3f90 100644 --- a/lib/librte_ethdev/rte_tm.h +++ b/lib/librte_ethdev/rte_tm.h @@ -1,36 +1,7 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2017 Intel Corporation. - * Copyright(c) 2017 Cavium. - * Copyright(c) 2017 NXP. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2017 Intel Corporation. + * Copyright(c) 2017 Cavium. + * Copyright(c) 2017 NXP. */ #ifndef __INCLUDE_RTE_TM_H__ @@ -51,6 +22,7 @@ #include #include +#include #ifdef __cplusplus extern "C" { @@ -115,16 +87,6 @@ extern "C" { */ #define RTE_TM_NODE_LEVEL_ID_ANY UINT32_MAX -/** - * Color - */ -enum rte_tm_color { - RTE_TM_GREEN = 0, /**< Green */ - RTE_TM_YELLOW, /**< Yellow */ - RTE_TM_RED, /**< Red */ - RTE_TM_COLORS /**< Number of colors */ -}; - /** * Node statistics counter type */ @@ -179,12 +141,12 @@ struct rte_tm_node_stats { /** Number of packets dropped by current leaf node per each * color. */ - uint64_t n_pkts_dropped[RTE_TM_COLORS]; + uint64_t n_pkts_dropped[RTE_COLORS]; /** Number of bytes dropped by current leaf node per each * color. */ - uint64_t n_bytes_dropped[RTE_TM_COLORS]; + uint64_t n_bytes_dropped[RTE_COLORS]; /** Number of packets currently waiting in the packet queue of * current leaf node. @@ -377,6 +339,22 @@ struct rte_tm_capabilities { */ uint32_t sched_wfq_weight_max; + /** WRED packet mode support. When non-zero, this parameter indicates + * that there is at least one leaf node that supports the WRED packet + * mode, which might not be true for all the leaf nodes. In packet + * mode, the WRED thresholds specify the queue length in packets, as + * opposed to bytes. + */ + int cman_wred_packet_mode_supported; + + /** WRED byte mode support. When non-zero, this parameter indicates that + * there is at least one leaf node that supports the WRED byte mode, + * which might not be true for all the leaf nodes. In byte mode, the + * WRED thresholds specify the queue length in bytes, as opposed to + * packets. + */ + int cman_wred_byte_mode_supported; + /** Head drop algorithm support. When non-zero, this parameter * indicates that there is at least one leaf node that supports the head * drop algorithm, which might not be true for all the leaf nodes. @@ -419,16 +397,16 @@ struct rte_tm_capabilities { uint32_t cman_wred_context_shared_n_contexts_per_node_max; /** Support for VLAN DEI packet marking (per color). */ - int mark_vlan_dei_supported[RTE_TM_COLORS]; + int mark_vlan_dei_supported[RTE_COLORS]; /** Support for IPv4/IPv6 ECN marking of TCP packets (per color). */ - int mark_ip_ecn_tcp_supported[RTE_TM_COLORS]; + int mark_ip_ecn_tcp_supported[RTE_COLORS]; /** Support for IPv4/IPv6 ECN marking of SCTP packets (per color). */ - int mark_ip_ecn_sctp_supported[RTE_TM_COLORS]; + int mark_ip_ecn_sctp_supported[RTE_COLORS]; /** Support for IPv4/IPv6 DSCP packet marking (per color). */ - int mark_ip_dscp_supported[RTE_TM_COLORS]; + int mark_ip_dscp_supported[RTE_COLORS]; /** Set of supported dynamic update operations. * @see enum rte_tm_dynamic_update_type @@ -628,6 +606,24 @@ struct rte_tm_level_capabilities { */ uint32_t shaper_shared_n_max; + /** WRED packet mode support. When non-zero, this + * parameter indicates that there is at least one leaf + * node on this level that supports the WRED packet + * mode, which might not be true for all the leaf + * nodes. In packet mode, the WRED thresholds specify + * the queue length in packets, as opposed to bytes. + */ + int cman_wred_packet_mode_supported; + + /** WRED byte mode support. When non-zero, this + * parameter indicates that there is at least one leaf + * node on this level that supports the WRED byte mode, + * which might not be true for all the leaf nodes. In + * byte mode, the WRED thresholds specify the queue + * length in bytes, as opposed to packets. + */ + int cman_wred_byte_mode_supported; + /** Head drop algorithm support. When non-zero, this * parameter indicates that there is at least one leaf * node on this level that supports the head drop @@ -743,6 +739,12 @@ struct rte_tm_node_capabilities { /** Items valid only for leaf nodes. */ struct { + /** WRED packet mode support for current node. */ + int cman_wred_packet_mode_supported; + + /** WRED byte mode support for current node. */ + int cman_wred_byte_mode_supported; + /** Head drop algorithm support for current node. */ int cman_head_drop_supported; @@ -791,10 +793,10 @@ enum rte_tm_cman_mode { */ struct rte_tm_red_params { /** Minimum queue threshold */ - uint16_t min_th; + uint64_t min_th; /** Maximum queue threshold */ - uint16_t max_th; + uint64_t max_th; /** Inverse of packet marking probability maximum value (maxp), i.e. * maxp_inv = 1 / maxp @@ -815,10 +817,19 @@ struct rte_tm_red_params { * WRED context is used to perform congestion management for a single leaf * node, while a shared WRED context is used to perform congestion management * for a group of leaf nodes. + * + * @see struct rte_tm_capabilities::cman_wred_packet_mode_supported + * @see struct rte_tm_capabilities::cman_wred_byte_mode_supported */ struct rte_tm_wred_params { /** One set of RED parameters per packet color */ - struct rte_tm_red_params red_params[RTE_TM_COLORS]; + struct rte_tm_red_params red_params[RTE_COLORS]; + + /** When non-zero, the *min_th* and *max_th* thresholds are specified + * in packets (WRED packet mode). When zero, the *min_th* and *max_th* + * thresholds are specified in bytes (WRED byte mode) + */ + int packet_mode; }; /** @@ -1520,6 +1531,10 @@ rte_tm_hierarchy_commit(uint16_t port_id, /** * Traffic manager node parent update * + * This function may be used to move a node and its children to a different + * parent. Additionally, if the new parent is the same as the current parent, + * this function will update the priority/weight of an existing node. + * * Restriction for root node: its parent cannot be changed. * * This function can only be called after the rte_tm_hierarchy_commit() @@ -1643,7 +1658,7 @@ rte_tm_node_stats_update(uint16_t port_id, * @param[in] port_id * The port identifier of the Ethernet device. * @param[in] node_id - * Node ID. Needs to be valid leaf node ID. + * Node ID. Needs to be valid non-leaf node ID. * @param[in] wfq_weight_mode * WFQ weight mode for each SP priority. When NULL, it indicates that WFQ is * to be used for all priorities. When non-NULL, it points to a pre-allocated