From: Sunil Kumar Kori <sk...@marvell.com>

Adding link type parameter to provide the type
of port like twisted pair, fibre etc.

Also added an API to convert the RTE_ETH_LINK_TYPE_XXX
to a readable string.

Signed-off-by: Nithin Dabilpuram <ndabilpu...@marvell.com>
Signed-off-by: Sunil Kumar Kori <sk...@marvell.com>
---
 lib/ethdev/ethdev_trace.h        |  7 +++++
 lib/ethdev/ethdev_trace_points.c |  3 ++
 lib/ethdev/rte_ethdev.c          | 47 ++++++++++++++++++++++++++++++--
 lib/ethdev/rte_ethdev.h          | 47 ++++++++++++++++++++++++++++++++
 4 files changed, 102 insertions(+), 2 deletions(-)

diff --git a/lib/ethdev/ethdev_trace.h b/lib/ethdev/ethdev_trace.h
index 482befc209..c5cba0edba 100644
--- a/lib/ethdev/ethdev_trace.h
+++ b/lib/ethdev/ethdev_trace.h
@@ -2110,6 +2110,13 @@ RTE_TRACE_POINT_FP(
        rte_trace_point_emit_string(ret);
 )
 
+RTE_TRACE_POINT_FP(
+       rte_eth_trace_link_type_to_str,
+       RTE_TRACE_POINT_ARGS(uint8_t link_type, const char *ret),
+       rte_trace_point_emit_u8(link_type);
+       rte_trace_point_emit_string(ret);
+);
+
 /* Called in loop in examples/bond and examples/ethtool */
 RTE_TRACE_POINT_FP(
        rte_eth_trace_macaddr_get,
diff --git a/lib/ethdev/ethdev_trace_points.c b/lib/ethdev/ethdev_trace_points.c
index 071c508327..706acdf356 100644
--- a/lib/ethdev/ethdev_trace_points.c
+++ b/lib/ethdev/ethdev_trace_points.c
@@ -206,6 +206,9 @@ RTE_TRACE_POINT_REGISTER(rte_eth_trace_link_speed_to_str,
 RTE_TRACE_POINT_REGISTER(rte_eth_trace_link_to_str,
        lib.ethdev.link_to_str)
 
+RTE_TRACE_POINT_REGISTER(rte_eth_trace_link_type_to_str,
+       lib.ethdev.link_type_to_str)
+
 RTE_TRACE_POINT_REGISTER(rte_eth_trace_stats_get,
        lib.ethdev.stats_get)
 
diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index dd7c00bc94..0cf4a805b7 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -3285,18 +3285,61 @@ rte_eth_link_to_str(char *str, size_t len, const struct 
rte_eth_link *eth_link)
        if (eth_link->link_status == RTE_ETH_LINK_DOWN)
                ret = snprintf(str, len, "Link down");
        else
-               ret = snprintf(str, len, "Link up at %s %s %s",
+               ret = snprintf(str, len, "Link up at %s %s %s %s",
                        rte_eth_link_speed_to_str(eth_link->link_speed),
                        (eth_link->link_duplex == RTE_ETH_LINK_FULL_DUPLEX) ?
                        "FDX" : "HDX",
                        (eth_link->link_autoneg == RTE_ETH_LINK_AUTONEG) ?
-                       "Autoneg" : "Fixed");
+                       "Autoneg" : "Fixed",
+                       rte_eth_link_type_to_str(eth_link->link_type));
 
        rte_eth_trace_link_to_str(len, eth_link, str, ret);
 
        return ret;
 }
 
+RTE_EXPORT_EXPERIMENTAL_SYMBOL(rte_eth_link_type_to_str, 25.11)
+const char *
+rte_eth_link_type_to_str(uint8_t link_type)
+{
+       static const char * const link_type_str[] = {
+               [RTE_ETH_LINK_TYPE_NONE] = "None",
+               [RTE_ETH_LINK_TYPE_TP] = "Twisted Pair",
+               [RTE_ETH_LINK_TYPE_AUI] = "Attachment Unit Interface",
+               [RTE_ETH_LINK_TYPE_MII] = "Media Independent Interface",
+               [RTE_ETH_LINK_TYPE_FIBRE] = "Fibre",
+               [RTE_ETH_LINK_TYPE_BNC] = "BNC",
+               [RTE_ETH_LINK_TYPE_DA] = "Direct Attach Copper",
+               [RTE_ETH_LINK_TYPE_SGMII] = "SGMII",
+               [RTE_ETH_LINK_TYPE_QSGMII] = "QSGMII",
+               [RTE_ETH_LINK_TYPE_XFI] = "XFI",
+               [RTE_ETH_LINK_TYPE_SFI] = "SFI",
+               [RTE_ETH_LINK_TYPE_XLAUI] = "XLAUI",
+               [RTE_ETH_LINK_TYPE_GAUI] = "GAUI",
+               [RTE_ETH_LINK_TYPE_XAUI] = "XAUI",
+               [RTE_ETH_LINK_TYPE_GBASE] = "GBASE",
+               [RTE_ETH_LINK_TYPE_CAUI] = "CAUI",
+               [RTE_ETH_LINK_TYPE_LAUI] = "LAUI",
+               [RTE_ETH_LINK_TYPE_SFP] = "SFP",
+               [RTE_ETH_LINK_TYPE_SFP_DD] = "SFP_DD",
+               [RTE_ETH_LINK_TYPE_SFP_PLUS] = "SFP_PLUS",
+               [RTE_ETH_LINK_TYPE_SFP28] = "SFP28",
+               [RTE_ETH_LINK_TYPE_QSFP] = "QSFP",
+               [RTE_ETH_LINK_TYPE_QSFP_PLUS] = "QSFP_PLUS",
+               [RTE_ETH_LINK_TYPE_QSFP28] = "QSFP28",
+               [RTE_ETH_LINK_TYPE_QSFP56] = "QSFP56",
+               [RTE_ETH_LINK_TYPE_QSFP_DD] = "QSFP_DD",
+               [RTE_ETH_LINK_TYPE_OTHER] = "Unknown"
+       };
+       const char *str = NULL;
+
+       if ((link_type < RTE_DIM(link_type_str)) && link_type_str[link_type])
+               str = link_type_str[link_type];
+
+       rte_eth_trace_link_type_to_str(link_type, str);
+       return str;
+}
+
 RTE_EXPORT_SYMBOL(rte_eth_stats_get)
 int
 rte_eth_stats_get(uint16_t port_id, struct rte_eth_stats *stats)
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index f9fb6ae549..e82e50017f 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -329,6 +329,38 @@ struct rte_eth_stats {
 #define RTE_ETH_SPEED_NUM_UNKNOWN UINT32_MAX /**< Unknown */
 /**@}*/
 
+/**@{@name PORT type
+ * Ethernet port type
+ */
+#define RTE_ETH_LINK_TYPE_NONE     0  /**< Not defined */
+#define RTE_ETH_LINK_TYPE_TP       1  /**< Twisted Pair */
+#define RTE_ETH_LINK_TYPE_AUI      2  /**< Attachment Unit Interface */
+#define RTE_ETH_LINK_TYPE_MII      3  /**< Media Independent Interface */
+#define RTE_ETH_LINK_TYPE_FIBRE    4  /**< Fibre */
+#define RTE_ETH_LINK_TYPE_BNC      5  /**< BNC */
+#define RTE_ETH_LINK_TYPE_DA       6  /**< Direct Attach copper */
+#define RTE_ETH_LINK_TYPE_SGMII    7  /**< SGMII */
+#define RTE_ETH_LINK_TYPE_QSGMII   8  /**< QSGMII */
+#define RTE_ETH_LINK_TYPE_XFI      9  /**< XFI */
+#define RTE_ETH_LINK_TYPE_SFI     10  /**< SFI */
+#define RTE_ETH_LINK_TYPE_XLAUI   11  /**< XLAUI */
+#define RTE_ETH_LINK_TYPE_GAUI    12  /**< GAUI */
+#define RTE_ETH_LINK_TYPE_XAUI    13  /**< XAUI */
+#define RTE_ETH_LINK_TYPE_GBASE   14  /**< GBASE */
+#define RTE_ETH_LINK_TYPE_CAUI    15  /**< CAUI */
+#define RTE_ETH_LINK_TYPE_LAUI    16  /**< LAUI */
+#define RTE_ETH_LINK_TYPE_SFP     17  /**< SFP */
+#define RTE_ETH_LINK_TYPE_SFP_DD  18  /**< SFP_DD */
+#define RTE_ETH_LINK_TYPE_SFP_PLUS 19  /**< SFP_PLUS */
+#define RTE_ETH_LINK_TYPE_SFP28   20  /**< SFP28 */
+#define RTE_ETH_LINK_TYPE_QSFP    21  /**< QSFP */
+#define RTE_ETH_LINK_TYPE_QSFP_PLUS 22  /**< QSFP_PLUS */
+#define RTE_ETH_LINK_TYPE_QSFP28  23  /**< QSFP28 */
+#define RTE_ETH_LINK_TYPE_QSFP56  24  /**< QSFP56 */
+#define RTE_ETH_LINK_TYPE_QSFP_DD 25  /**< QSFP_DD */
+#define RTE_ETH_LINK_TYPE_OTHER  0x1F /**< Other type */
+/**@}*/
+
 /**
  * A structure used to retrieve link-level information of an Ethernet port.
  */
@@ -341,6 +373,7 @@ struct rte_eth_link {
                        uint16_t link_duplex  : 1;  /**< 
RTE_ETH_LINK_[HALF/FULL]_DUPLEX */
                        uint16_t link_autoneg : 1;  /**< 
RTE_ETH_LINK_[AUTONEG/FIXED] */
                        uint16_t link_status  : 1;  /**< RTE_ETH_LINK_[DOWN/UP] 
*/
+                       uint16_t link_type    : 5;  /**< RTE_ETH_LINK_TYPE_XXX 
*/
                };
        };
 };
@@ -3116,6 +3149,20 @@ int rte_eth_link_get_nowait(uint16_t port_id, struct 
rte_eth_link *link)
 __rte_experimental
 const char *rte_eth_link_speed_to_str(uint32_t link_speed);
 
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice.
+ *
+ * This function converts an Ethernet link type to a string.
+ *
+ * @param link_type
+ *   The link type to convert.
+ * @return
+ *   The string representation of the link type.
+ */
+__rte_experimental
+const char *rte_eth_link_type_to_str(uint8_t link_type);
+
 /**
  * @warning
  * @b EXPERIMENTAL: this API may change without prior notice.
-- 
2.43.0

Reply via email to