ethdev: add 100G link speed
The link speed configuration is now done with bitmaps so 100G speed requires only a new bit flag. The actual link speed is a number so its size must be increased from 16-bit to 32-bit. Signed-off-by: Marc Sune <marcdevel@gmail.com> Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com> Tested-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com> Tested-by: Matej Vido <vido@cesnet.cz>
This commit is contained in:
parent
c1ab50c70d
commit
b2feed01d6
@ -549,7 +549,7 @@ static void cmd_help_long_parsed(void *parsed_result,
|
||||
" Detach physical or virtual dev by port_id\n\n"
|
||||
|
||||
"port config (port_id|all)"
|
||||
" speed (10|100|1000|10000|40000|auto)"
|
||||
" speed (10|100|1000|10000|40000|100000|auto)"
|
||||
" duplex (half|full|auto)\n"
|
||||
" Set speed and duplex for all ports or port_id\n\n"
|
||||
|
||||
@ -1022,6 +1022,8 @@ parse_and_check_speed_duplex(char *speedstr, char *duplexstr, uint32_t *speed)
|
||||
*speed = ETH_LINK_SPEED_10G;
|
||||
} else if (!strcmp(speedstr, "40000")) {
|
||||
*speed = ETH_LINK_SPEED_40G;
|
||||
} else if (!strcmp(speedstr, "100000")) {
|
||||
*speed = ETH_LINK_SPEED_100G;
|
||||
} else if (!strcmp(speedstr, "auto")) {
|
||||
*speed = ETH_LINK_SPEED_AUTONEG;
|
||||
} else {
|
||||
@ -1069,7 +1071,7 @@ cmdline_parse_token_string_t cmd_config_speed_all_item1 =
|
||||
TOKEN_STRING_INITIALIZER(struct cmd_config_speed_all, item1, "speed");
|
||||
cmdline_parse_token_string_t cmd_config_speed_all_value1 =
|
||||
TOKEN_STRING_INITIALIZER(struct cmd_config_speed_all, value1,
|
||||
"10#100#1000#10000#40000#auto");
|
||||
"10#100#1000#10000#40000#100000#auto");
|
||||
cmdline_parse_token_string_t cmd_config_speed_all_item2 =
|
||||
TOKEN_STRING_INITIALIZER(struct cmd_config_speed_all, item2, "duplex");
|
||||
cmdline_parse_token_string_t cmd_config_speed_all_value2 =
|
||||
@ -1079,7 +1081,7 @@ cmdline_parse_token_string_t cmd_config_speed_all_value2 =
|
||||
cmdline_parse_inst_t cmd_config_speed_all = {
|
||||
.f = cmd_config_speed_all_parsed,
|
||||
.data = NULL,
|
||||
.help_str = "port config all speed 10|100|1000|10000|40000|auto duplex "
|
||||
.help_str = "port config all speed 10|100|1000|10000|40000|100000|auto duplex "
|
||||
"half|full|auto",
|
||||
.tokens = {
|
||||
(void *)&cmd_config_speed_all_port,
|
||||
@ -1143,7 +1145,7 @@ cmdline_parse_token_string_t cmd_config_speed_specific_item1 =
|
||||
"speed");
|
||||
cmdline_parse_token_string_t cmd_config_speed_specific_value1 =
|
||||
TOKEN_STRING_INITIALIZER(struct cmd_config_speed_specific, value1,
|
||||
"10#100#1000#10000#40000#auto");
|
||||
"10#100#1000#10000#40000#100000#auto");
|
||||
cmdline_parse_token_string_t cmd_config_speed_specific_item2 =
|
||||
TOKEN_STRING_INITIALIZER(struct cmd_config_speed_specific, item2,
|
||||
"duplex");
|
||||
@ -1154,7 +1156,7 @@ cmdline_parse_token_string_t cmd_config_speed_specific_value2 =
|
||||
cmdline_parse_inst_t cmd_config_speed_specific = {
|
||||
.f = cmd_config_speed_specific_parsed,
|
||||
.data = NULL,
|
||||
.help_str = "port config X speed 10|100|1000|10000|40000|auto duplex "
|
||||
.help_str = "port config X speed 10|100|1000|10000|40000|100000|auto duplex "
|
||||
"half|full|auto",
|
||||
.tokens = {
|
||||
(void *)&cmd_config_speed_specific_port,
|
||||
|
@ -148,9 +148,3 @@ Example output:
|
||||
TX threshold registers: pthresh=0 hthresh=0 wthresh=0
|
||||
TX RS bit threshold=0 - TXQ flags=0x0
|
||||
testpmd>
|
||||
|
||||
.. note::
|
||||
|
||||
Link speed API currently supports speeds up to 40 Gbps.
|
||||
Therefore there is used 10G constant for 100 Gbps cards until the link speed
|
||||
API is not changed.
|
||||
|
@ -320,6 +320,11 @@ EAL
|
||||
Drivers
|
||||
~~~~~~~
|
||||
|
||||
* **ethdev: Fixed overflow for 100Gbps.**
|
||||
|
||||
100Gbps in Mbps (100000) was exceeding 16-bit max value of ``link_speed``
|
||||
in ``rte_eth_link``.
|
||||
|
||||
* **ethdev: Fixed byte order consistency between fdir flow and mask.**
|
||||
|
||||
Fixed issue in ethdev library that the structure for setting
|
||||
|
@ -1155,7 +1155,7 @@ port config - speed
|
||||
|
||||
Set the speed and duplex mode for all ports or a specific port::
|
||||
|
||||
testpmd> port config (port_id|all) speed (10|100|1000|10000|auto) \
|
||||
testpmd> port config (port_id|all) speed (10|100|1000|10000|40000|100000|auto) \
|
||||
duplex (half|full|auto)
|
||||
|
||||
port config - queues/descriptors
|
||||
|
@ -1177,7 +1177,8 @@ static void ena_infos_get(struct rte_eth_dev *dev,
|
||||
ETH_LINK_SPEED_10G |
|
||||
ETH_LINK_SPEED_25G |
|
||||
ETH_LINK_SPEED_40G |
|
||||
ETH_LINK_SPEED_50G;
|
||||
ETH_LINK_SPEED_50G |
|
||||
ETH_LINK_SPEED_100G;
|
||||
|
||||
/* Get supported features from HW */
|
||||
rc = ena_com_get_dev_attr_feat(ena_dev, &feat);
|
||||
|
@ -1415,7 +1415,7 @@ fm10k_dev_infos_get(struct rte_eth_dev *dev,
|
||||
|
||||
dev_info->speed_capa = ETH_LINK_SPEED_1G | ETH_LINK_SPEED_2_5G |
|
||||
ETH_LINK_SPEED_10G | ETH_LINK_SPEED_25G |
|
||||
ETH_LINK_SPEED_40G;
|
||||
ETH_LINK_SPEED_40G | ETH_LINK_SPEED_100G;
|
||||
}
|
||||
|
||||
#ifdef RTE_LIBRTE_FM10K_RX_OLFLAGS_ENABLE
|
||||
|
@ -566,7 +566,8 @@ mlx5_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info)
|
||||
ETH_LINK_SPEED_25G |
|
||||
ETH_LINK_SPEED_40G |
|
||||
ETH_LINK_SPEED_50G |
|
||||
ETH_LINK_SPEED_56G;
|
||||
ETH_LINK_SPEED_56G |
|
||||
ETH_LINK_SPEED_100G;
|
||||
priv_unlock(priv);
|
||||
}
|
||||
|
||||
|
@ -1062,7 +1062,7 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
|
||||
dev_info->reta_size = NFP_NET_CFG_RSS_ITBL_SZ;
|
||||
dev_info->hash_key_size = NFP_NET_CFG_RSS_KEY_SZ;
|
||||
|
||||
dev_info->speed_capa = ETH_LINK_SPEED_40G;
|
||||
dev_info->speed_capa = ETH_LINK_SPEED_40G | ETH_LINK_SPEED_100G;
|
||||
}
|
||||
|
||||
static const uint32_t *
|
||||
|
@ -1036,6 +1036,7 @@ eth_dev_info(struct rte_eth_dev *dev,
|
||||
dev_info->max_rx_queues = internals->max_rx_queues;
|
||||
dev_info->max_tx_queues = internals->max_tx_queues;
|
||||
dev_info->min_rx_bufsize = 0;
|
||||
dev_info->speed_capa = ETH_LINK_SPEED_100G;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -1155,13 +1156,7 @@ eth_link_update(struct rte_eth_dev *dev,
|
||||
link.link_speed = ETH_SPEED_NUM_40G;
|
||||
break;
|
||||
case SZEDATA2_LINK_SPEED_100G:
|
||||
/*
|
||||
* TODO
|
||||
* If link_speed value from rte_eth_link structure
|
||||
* will be changed to support 100Gbps speed change
|
||||
* this value to 100G.
|
||||
*/
|
||||
link.link_speed = ETH_SPEED_NUM_10G;
|
||||
link.link_speed = ETH_SPEED_NUM_100G;
|
||||
break;
|
||||
default:
|
||||
link.link_speed = ETH_SPEED_NUM_10G;
|
||||
|
@ -892,6 +892,8 @@ rte_eth_speed_bitflag(uint32_t speed, int duplex)
|
||||
return ETH_LINK_SPEED_50G;
|
||||
case ETH_SPEED_NUM_56G:
|
||||
return ETH_LINK_SPEED_56G;
|
||||
case ETH_SPEED_NUM_100G:
|
||||
return ETH_LINK_SPEED_100G;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
@ -259,6 +259,7 @@ struct rte_eth_stats {
|
||||
#define ETH_LINK_SPEED_40G (1 << 11) /**< 40 Gbps */
|
||||
#define ETH_LINK_SPEED_50G (1 << 12) /**< 50 Gbps */
|
||||
#define ETH_LINK_SPEED_56G (1 << 13) /**< 56 Gbps */
|
||||
#define ETH_LINK_SPEED_100G (1 << 14) /**< 100 Gbps */
|
||||
|
||||
/**
|
||||
* Ethernet numeric link speeds in Mbps
|
||||
@ -275,12 +276,13 @@ struct rte_eth_stats {
|
||||
#define ETH_SPEED_NUM_40G 40000 /**< 40 Gbps */
|
||||
#define ETH_SPEED_NUM_50G 50000 /**< 50 Gbps */
|
||||
#define ETH_SPEED_NUM_56G 56000 /**< 56 Gbps */
|
||||
#define ETH_SPEED_NUM_100G 100000 /**< 100 Gbps */
|
||||
|
||||
/**
|
||||
* A structure used to retrieve link-level information of an Ethernet port.
|
||||
*/
|
||||
struct rte_eth_link {
|
||||
uint16_t link_speed; /**< ETH_SPEED_NUM_ */
|
||||
uint32_t link_speed; /**< ETH_SPEED_NUM_ */
|
||||
uint16_t link_duplex : 1; /**< ETH_LINK_[HALF/FULL]_DUPLEX */
|
||||
uint16_t link_autoneg : 1; /**< ETH_LINK_SPEED_[AUTONEG/FIXED] */
|
||||
uint16_t link_status : 1; /**< ETH_LINK_[DOWN/UP] */
|
||||
|
Loading…
x
Reference in New Issue
Block a user