There are some devices supporting 400G speed,
and it is well standardized in IEEE.

Signed-off-by: Thomas Monjalon <tho...@monjalon.net>
---
 app/test-pmd/cmdline.c             | 2 ++
 app/test-pmd/config.c              | 2 ++
 app/test-pmd/parameters.c          | 3 +++
 app/test/test_ethdev_link.c        | 3 ++-
 drivers/net/virtio/virtio_ethdev.c | 2 ++
 lib/ethdev/rte_ethdev.c            | 6 ++++++
 lib/ethdev/rte_ethdev.h            | 2 ++
 7 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index bb7ff2b449..e312aa93d6 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -1352,6 +1352,8 @@ parse_and_check_speed_duplex(char *speedstr, char 
*duplexstr, uint32_t *speed)
                        *speed = RTE_ETH_LINK_SPEED_100G;
                } else if (!strcmp(speedstr, "200000")) {
                        *speed = RTE_ETH_LINK_SPEED_200G;
+               } else if (!strcmp(speedstr, "400000")) {
+                       *speed = RTE_ETH_LINK_SPEED_400G;
                } else if (!strcmp(speedstr, "auto")) {
                        *speed = RTE_ETH_LINK_SPEED_AUTONEG;
                } else {
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index 41484c3dde..8f162645ec 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -612,6 +612,8 @@ device_infos_display_speeds(uint32_t speed_capa)
                printf(" 100 Gbps  ");
        if (speed_capa & RTE_ETH_LINK_SPEED_200G)
                printf(" 200 Gbps  ");
+       if (speed_capa & RTE_ETH_LINK_SPEED_400G)
+               printf(" 400 Gbps  ");
 }
 
 void
diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
index e734ad9a02..3b37809baf 100644
--- a/app/test-pmd/parameters.c
+++ b/app/test-pmd/parameters.c
@@ -568,6 +568,9 @@ parse_link_speed(int n)
        case 200000:
                speed |= RTE_ETH_LINK_SPEED_200G;
                break;
+       case 400000:
+               speed |= RTE_ETH_LINK_SPEED_400G;
+               break;
        case 100:
        case 10:
        default:
diff --git a/app/test/test_ethdev_link.c b/app/test/test_ethdev_link.c
index 6248aea49a..ab52385a12 100644
--- a/app/test/test_ethdev_link.c
+++ b/app/test/test_ethdev_link.c
@@ -54,7 +54,7 @@ test_link_status_up_default(void)
                "string with HDX");
 
        /* test max str len */
-       link_status.link_speed = RTE_ETH_SPEED_NUM_200G;
+       link_status.link_speed = RTE_ETH_SPEED_NUM_400G;
        link_status.link_duplex = RTE_ETH_LINK_HALF_DUPLEX;
        link_status.link_autoneg = RTE_ETH_LINK_AUTONEG;
        ret = rte_eth_link_to_str(text, sizeof(text), &link_status);
@@ -130,6 +130,7 @@ test_link_speed_all_values(void)
                { "56 Gbps",  RTE_ETH_SPEED_NUM_56G },
                { "100 Gbps", RTE_ETH_SPEED_NUM_100G },
                { "200 Gbps", RTE_ETH_SPEED_NUM_200G },
+               { "400 Gbps", RTE_ETH_SPEED_NUM_400G },
                { "Unknown",  RTE_ETH_SPEED_NUM_UNKNOWN },
                { "Invalid",   50505 }
        };
diff --git a/drivers/net/virtio/virtio_ethdev.c 
b/drivers/net/virtio/virtio_ethdev.c
index 0103d95920..dc6856d749 100644
--- a/drivers/net/virtio/virtio_ethdev.c
+++ b/drivers/net/virtio/virtio_ethdev.c
@@ -2046,6 +2046,8 @@ virtio_dev_speed_capa_get(uint32_t speed)
                return RTE_ETH_LINK_SPEED_100G;
        case RTE_ETH_SPEED_NUM_200G:
                return RTE_ETH_LINK_SPEED_200G;
+       case RTE_ETH_SPEED_NUM_400G:
+               return RTE_ETH_LINK_SPEED_400G;
        default:
                return 0;
        }
diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 055c46082b..27c0ecbf7d 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -978,6 +978,9 @@ rte_eth_speed_bitflag(uint32_t speed, int duplex)
        case RTE_ETH_SPEED_NUM_200G:
                ret = RTE_ETH_LINK_SPEED_200G;
                break;
+       case RTE_ETH_SPEED_NUM_400G:
+               ret = RTE_ETH_LINK_SPEED_400G;
+               break;
        default:
                ret = 0;
        }
@@ -2882,6 +2885,9 @@ rte_eth_link_speed_to_str(uint32_t link_speed)
        case RTE_ETH_SPEED_NUM_200G:
                ret = "200 Gbps";
                break;
+       case RTE_ETH_SPEED_NUM_400G:
+               ret = "400 Gbps";
+               break;
        case RTE_ETH_SPEED_NUM_UNKNOWN:
                ret = "Unknown";
                break;
diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h
index c129ca1eaf..89b25c9a0f 100644
--- a/lib/ethdev/rte_ethdev.h
+++ b/lib/ethdev/rte_ethdev.h
@@ -304,6 +304,7 @@ struct rte_eth_stats {
 #define RTE_ETH_LINK_SPEED_56G     RTE_BIT32(13) /**<  56 Gbps */
 #define RTE_ETH_LINK_SPEED_100G    RTE_BIT32(14) /**< 100 Gbps */
 #define RTE_ETH_LINK_SPEED_200G    RTE_BIT32(15) /**< 200 Gbps */
+#define RTE_ETH_LINK_SPEED_400G    RTE_BIT32(16) /**< 400 Gbps */
 /**@}*/
 
 /**@{@name Link speed
@@ -323,6 +324,7 @@ struct rte_eth_stats {
 #define RTE_ETH_SPEED_NUM_56G      56000 /**<  56 Gbps */
 #define RTE_ETH_SPEED_NUM_100G    100000 /**< 100 Gbps */
 #define RTE_ETH_SPEED_NUM_200G    200000 /**< 200 Gbps */
+#define RTE_ETH_SPEED_NUM_400G    400000 /**< 400 Gbps */
 #define RTE_ETH_SPEED_NUM_UNKNOWN UINT32_MAX /**< Unknown */
 /**@}*/
 
-- 
2.39.1

Reply via email to