From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf0-f67.google.com (mail-lf0-f67.google.com [209.85.215.67]) by dpdk.org (Postfix) with ESMTP id 43F4F1DB1 for ; Wed, 30 Mar 2016 10:06:48 +0200 (CEST) Received: by mail-lf0-f67.google.com with SMTP id y184so3985665lfd.3 for ; Wed, 30 Mar 2016 01:06:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=zL3gwxDCw27YOjFXmrqHQQhk+BykdaU0ycn8vB30SuQ=; b=BxX+ET/tmpTH3C5ZmM6VNzqzCghfpwH99yBmkjaLuIg7qy3NWqrGERCh+PUg51gmy3 tP/5LQ4gPdUXVS5z4pf8qeMW5+JHSEXJS4ixTNRnPOsETsYeAjg/arMJ8mhYngKtrkye gWXDI258/vx/XBVp2L/D3axb/A1htgIYvpUkI94nS1rozhHJTxEuCA2p+QQjdsiUgyhL x4n9RwYw/Gd0O3b+DIlEDALNp50NAhrDgDJh90BXp/I9MrUIj7BqoCdbX9fmunrElynC Nso9EjlxeUYUU4ig8pmTgmdit8+rVoUJu6PFbdRWfEcTXGNZAgz9+4dptuY9/oO91obi Tw/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to:cc; bh=zL3gwxDCw27YOjFXmrqHQQhk+BykdaU0ycn8vB30SuQ=; b=R4z057wS9MK5ez2LHvRdM5ZhlZ1ICxhJcFuVkMmRm8NjRq8i6XSBnendH+r64+40Yj A3xxjlkgRKUdVYziGVg4xZO5lFGhQNJhrPd8GdNsdoniBYdHPVmCGWURnNt5VrMEloo9 whbXO+3Us9/NeBkOJXfUqlT3/TPUvpLz0hjdXSjQeVaZbCjazSWTP2gPUOWNJZde8EZE svy7T/NF30MV2G1eQx0aqBXI+T0JowZJ7WiDwZpevbUvHsDUQpzgbZq+LjL3/KiB1Vlj OxsQaB+Vr93aj0p2jG900/DtB+kdbK6ETLS0/Rv/eWnIEmGvKtm9zsvaKW7rRDuGyc5i 4PaA== X-Gm-Message-State: AD7BkJK4MoHoACPOvpbxhPx9eJ1gBipR5Hv0FhLAwhNtlICkkfLG68iN4Wy3rcPTIqKhKPx/iC2ILlb18ptJXQ== X-Received: by 10.25.16.103 with SMTP id f100mr2598224lfi.90.1459325207971; Wed, 30 Mar 2016 01:06:47 -0700 (PDT) MIME-Version: 1.0 Sender: marc.sune@gmail.com Received: by 10.25.168.201 with HTTP; Wed, 30 Mar 2016 01:06:28 -0700 (PDT) In-Reply-To: References: <1458934950-23333-1-git-send-email-thomas.monjalon@6wind.com> <1458955640-22951-1-git-send-email-marcdevel@gmail.com> <1458955640-22951-6-git-send-email-marcdevel@gmail.com> From: Marc Date: Wed, 30 Mar 2016 10:06:28 +0200 X-Google-Sender-Auth: t9U2wwHITs4HN88PpkVMz8Qnf2I Message-ID: To: Alejandro Lucero Cc: Thomas Monjalon , "Xu, Qian Q" , "Xing, Beilei" , "dev@dpdk.org" , "Ananyev, Konstantin" , "Lu, Wenzhuo" , "Richardson, Bruce" , "Glynn, Michael J" Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: Re: [dpdk-dev] [PATCH v13 5/8] ethdev: add speed capabilities X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 30 Mar 2016 08:06:48 -0000 On 29 March 2016 at 15:31, Alejandro Lucero wrote: > For nfp.c, speed_capa should be ETH_LINK_SPEED_40G instead of ETH_LINK_SPEED_50G. > By the way, the change in patch 4 sets the right link speed using the new > constants. > > Regards > Noted for v14, thanks Marc > > On Sat, Mar 26, 2016 at 1:27 AM, Marc Sune wrote: > >> The speed capabilities of a device can be retrieved with >> rte_eth_dev_info_get(). >> >> The new field speed_capa is initialized in the drivers without >> taking care of device characteristics in this patch. >> When the capabilities of a driver are accurate, the table in >> overview.rst must be filled. >> >> Signed-off-by: Marc Sune >> --- >> doc/guides/nics/overview.rst | 1 + >> doc/guides/rel_notes/release_16_04.rst | 8 ++++++++ >> drivers/net/bnx2x/bnx2x_ethdev.c | 1 + >> drivers/net/cxgbe/cxgbe_ethdev.c | 1 + >> drivers/net/e1000/em_ethdev.c | 4 ++++ >> drivers/net/e1000/igb_ethdev.c | 4 ++++ >> drivers/net/ena/ena_ethdev.c | 9 +++++++++ >> drivers/net/fm10k/fm10k_ethdev.c | 4 ++++ >> drivers/net/i40e/i40e_ethdev.c | 8 ++++++++ >> drivers/net/ixgbe/ixgbe_ethdev.c | 8 ++++++++ >> drivers/net/mlx4/mlx4.c | 6 ++++++ >> drivers/net/mlx5/mlx5_ethdev.c | 8 ++++++++ >> drivers/net/nfp/nfp_net.c | 2 ++ >> lib/librte_ether/rte_ethdev.h | 21 +++++++++++++++++++++ >> 14 files changed, 85 insertions(+) >> >> diff --git a/doc/guides/nics/overview.rst b/doc/guides/nics/overview.rst >> index 542479a..62f1868 100644 >> --- a/doc/guides/nics/overview.rst >> +++ b/doc/guides/nics/overview.rst >> @@ -86,6 +86,7 @@ Most of these differences are summarized below. >> e e e e e >> e >> c c c c c >> c >> ==================== = = = = = = = = = = = = = = = = = = = = = = = = >> = = = = = = = = = >> + speed capabilities >> link status X X X >> X X >> link status event X X >> X >> queue status event >> X >> diff --git a/doc/guides/rel_notes/release_16_04.rst >> b/doc/guides/rel_notes/release_16_04.rst >> index 79d76e1..9e7b0b7 100644 >> --- a/doc/guides/rel_notes/release_16_04.rst >> +++ b/doc/guides/rel_notes/release_16_04.rst >> @@ -47,6 +47,11 @@ This section should contain new features added in this >> release. Sample format: >> A new function ``rte_pktmbuf_alloc_bulk()`` has been added to allow >> the user >> to allocate a bulk of mbufs. >> >> +* **Added device link speed capabilities.** >> + >> + The structure ``rte_eth_dev_info`` has now a ``speed_capa`` bitmap, >> which >> + allows the application to know the supported speeds of each device. >> + >> * **Added new poll-mode driver for Amazon Elastic Network Adapters >> (ENA).** >> >> The driver operates variety of ENA adapters through feature negotiation >> @@ -456,6 +461,9 @@ This section should contain API changes. Sample >> format: >> All drivers are now counting the missed packets only once, i.e. >> drivers will >> not increment ierrors anymore for missed packets. >> >> +* The ethdev structure ``rte_eth_dev_info`` was changed to support device >> + speed capabilities. >> + >> * The functions ``rte_eth_dev_udp_tunnel_add`` and >> ``rte_eth_dev_udp_tunnel_delete`` >> have been renamed into ``rte_eth_dev_udp_tunnel_port_add`` and >> ``rte_eth_dev_udp_tunnel_port_delete``. >> diff --git a/drivers/net/bnx2x/bnx2x_ethdev.c >> b/drivers/net/bnx2x/bnx2x_ethdev.c >> index a3c6c01..897081f 100644 >> --- a/drivers/net/bnx2x/bnx2x_ethdev.c >> +++ b/drivers/net/bnx2x/bnx2x_ethdev.c >> @@ -327,6 +327,7 @@ bnx2x_dev_infos_get(struct rte_eth_dev *dev, >> __rte_unused struct rte_eth_dev_inf >> dev_info->min_rx_bufsize = BNX2X_MIN_RX_BUF_SIZE; >> dev_info->max_rx_pktlen = BNX2X_MAX_RX_PKT_LEN; >> dev_info->max_mac_addrs = BNX2X_MAX_MAC_ADDRS; >> + dev_info->speed_capa = ETH_LINK_SPEED_10G | ETH_LINK_SPEED_20G; >> } >> >> static void >> diff --git a/drivers/net/cxgbe/cxgbe_ethdev.c >> b/drivers/net/cxgbe/cxgbe_ethdev.c >> index 8845c76..bb134e5 100644 >> --- a/drivers/net/cxgbe/cxgbe_ethdev.c >> +++ b/drivers/net/cxgbe/cxgbe_ethdev.c >> @@ -171,6 +171,7 @@ static void cxgbe_dev_info_get(struct rte_eth_dev >> *eth_dev, >> >> device_info->rx_desc_lim = cxgbe_desc_lim; >> device_info->tx_desc_lim = cxgbe_desc_lim; >> + device_info->speed_capa = ETH_LINK_SPEED_10G | ETH_LINK_SPEED_40G; >> } >> >> static void cxgbe_dev_promiscuous_enable(struct rte_eth_dev *eth_dev) >> diff --git a/drivers/net/e1000/em_ethdev.c b/drivers/net/e1000/em_ethdev.c >> index 473d77f..d5f8c7f 100644 >> --- a/drivers/net/e1000/em_ethdev.c >> +++ b/drivers/net/e1000/em_ethdev.c >> @@ -1054,6 +1054,10 @@ eth_em_infos_get(struct rte_eth_dev *dev, struct >> rte_eth_dev_info *dev_info) >> .nb_min = E1000_MIN_RING_DESC, >> .nb_align = EM_TXD_ALIGN, >> }; >> + >> + dev_info->speed_capa = ETH_LINK_SPEED_10M_HD | ETH_LINK_SPEED_10M >> | >> + ETH_LINK_SPEED_100M_HD | ETH_LINK_SPEED_100M | >> + ETH_LINK_SPEED_1G; >> } >> >> /* return 0 means link status changed, -1 means not changed */ >> diff --git a/drivers/net/e1000/igb_ethdev.c >> b/drivers/net/e1000/igb_ethdev.c >> index 86f25f6..95d1711 100644 >> --- a/drivers/net/e1000/igb_ethdev.c >> +++ b/drivers/net/e1000/igb_ethdev.c >> @@ -1921,6 +1921,10 @@ eth_igb_infos_get(struct rte_eth_dev *dev, struct >> rte_eth_dev_info *dev_info) >> >> dev_info->rx_desc_lim = rx_desc_lim; >> dev_info->tx_desc_lim = tx_desc_lim; >> + >> + dev_info->speed_capa = ETH_LINK_SPEED_10M_HD | ETH_LINK_SPEED_10M >> | >> + ETH_LINK_SPEED_100M_HD | ETH_LINK_SPEED_100M | >> + ETH_LINK_SPEED_1G; >> } >> >> static const uint32_t * >> diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c >> index 1046286..4e403af 100644 >> --- a/drivers/net/ena/ena_ethdev.c >> +++ b/drivers/net/ena/ena_ethdev.c >> @@ -1170,6 +1170,15 @@ static void ena_infos_get(struct rte_eth_dev *dev, >> ena_dev = &adapter->ena_dev; >> ena_assert_msg(ena_dev != NULL, "Uninitialized device"); >> >> + dev_info->speed_capa = >> + ETH_LINK_SPEED_1G | >> + ETH_LINK_SPEED_2_5G | >> + ETH_LINK_SPEED_5G | >> + ETH_LINK_SPEED_10G | >> + ETH_LINK_SPEED_25G | >> + ETH_LINK_SPEED_40G | >> + ETH_LINK_SPEED_50G; >> + >> /* Get supported features from HW */ >> rc = ena_com_get_dev_attr_feat(ena_dev, &feat); >> if (unlikely(rc)) { >> diff --git a/drivers/net/fm10k/fm10k_ethdev.c >> b/drivers/net/fm10k/fm10k_ethdev.c >> index 53aa1bb..85ad0df 100644 >> --- a/drivers/net/fm10k/fm10k_ethdev.c >> +++ b/drivers/net/fm10k/fm10k_ethdev.c >> @@ -1410,6 +1410,10 @@ fm10k_dev_infos_get(struct rte_eth_dev *dev, >> .nb_min = FM10K_MIN_TX_DESC, >> .nb_align = FM10K_MULT_TX_DESC, >> }; >> + >> + 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; >> } >> >> #ifdef RTE_LIBRTE_FM10K_RX_OLFLAGS_ENABLE >> diff --git a/drivers/net/i40e/i40e_ethdev.c >> b/drivers/net/i40e/i40e_ethdev.c >> index cce9e6f..dce31db 100644 >> --- a/drivers/net/i40e/i40e_ethdev.c >> +++ b/drivers/net/i40e/i40e_ethdev.c >> @@ -2287,6 +2287,7 @@ static void >> i40e_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info >> *dev_info) >> { >> struct i40e_pf *pf = >> I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private); >> + struct i40e_hw *hw = >> I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); >> struct i40e_vsi *vsi = pf->main_vsi; >> >> dev_info->max_rx_queues = vsi->nb_qps; >> @@ -2358,6 +2359,13 @@ i40e_dev_info_get(struct rte_eth_dev *dev, struct >> rte_eth_dev_info *dev_info) >> dev_info->max_rx_queues += dev_info->vmdq_queue_num; >> dev_info->max_tx_queues += dev_info->vmdq_queue_num; >> } >> + >> + if (i40e_is_40G_device(hw->device_id)) >> + /* For XL710 */ >> + dev_info->speed_capa = ETH_LINK_SPEED_1G | >> ETH_LINK_SPEED_10G; >> + else >> + /* For X710 */ >> + dev_info->speed_capa = ETH_LINK_SPEED_10G | >> ETH_LINK_SPEED_40G; >> } >> >> static int >> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c >> b/drivers/net/ixgbe/ixgbe_ethdev.c >> index a0179d2..a98e8eb 100644 >> --- a/drivers/net/ixgbe/ixgbe_ethdev.c >> +++ b/drivers/net/ixgbe/ixgbe_ethdev.c >> @@ -2960,6 +2960,14 @@ ixgbe_dev_info_get(struct rte_eth_dev *dev, struct >> rte_eth_dev_info *dev_info) >> dev_info->hash_key_size = IXGBE_HKEY_MAX_INDEX * sizeof(uint32_t); >> dev_info->reta_size = ixgbe_reta_size_get(hw->mac.type); >> dev_info->flow_type_rss_offloads = IXGBE_RSS_OFFLOAD_ALL; >> + >> + dev_info->speed_capa = ETH_LINK_SPEED_1G | ETH_LINK_SPEED_10G; >> + if (hw->mac.type == ixgbe_mac_X540 || >> + hw->mac.type == ixgbe_mac_X540_vf || >> + hw->mac.type == ixgbe_mac_X550 || >> + hw->mac.type == ixgbe_mac_X550_vf) { >> + dev_info->speed_capa |= ETH_LINK_SPEED_100M; >> + } >> } >> >> static const uint32_t * >> diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c >> index f946f08..59ac423 100644 >> --- a/drivers/net/mlx4/mlx4.c >> +++ b/drivers/net/mlx4/mlx4.c >> @@ -4313,6 +4313,12 @@ mlx4_dev_infos_get(struct rte_eth_dev *dev, struct >> rte_eth_dev_info *info) >> 0); >> if (priv_get_ifname(priv, &ifname) == 0) >> info->if_index = if_nametoindex(ifname); >> + info->speed_capa = >> + ETH_LINK_SPEED_1G | >> + ETH_LINK_SPEED_10G | >> + ETH_LINK_SPEED_20G | >> + ETH_LINK_SPEED_40G | >> + ETH_LINK_SPEED_56G; >> priv_unlock(priv); >> } >> >> diff --git a/drivers/net/mlx5/mlx5_ethdev.c >> b/drivers/net/mlx5/mlx5_ethdev.c >> index 58bfa16..d7a0eea 100644 >> --- a/drivers/net/mlx5/mlx5_ethdev.c >> +++ b/drivers/net/mlx5/mlx5_ethdev.c >> @@ -559,6 +559,14 @@ mlx5_dev_infos_get(struct rte_eth_dev *dev, struct >> rte_eth_dev_info *info) >> * size if it is not fixed. >> * The API should be updated to solve this problem. */ >> info->reta_size = priv->ind_table_max_size; >> + info->speed_capa = >> + ETH_LINK_SPEED_1G | >> + ETH_LINK_SPEED_10G | >> + ETH_LINK_SPEED_20G | >> + ETH_LINK_SPEED_25G | >> + ETH_LINK_SPEED_40G | >> + ETH_LINK_SPEED_50G | >> + ETH_LINK_SPEED_56G; >> priv_unlock(priv); >> } >> >> diff --git a/drivers/net/nfp/nfp_net.c b/drivers/net/nfp/nfp_net.c >> index 18ea0f4..bdeb21f 100644 >> --- a/drivers/net/nfp/nfp_net.c >> +++ b/drivers/net/nfp/nfp_net.c >> @@ -1061,6 +1061,8 @@ 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_50G; >> } >> >> static const uint32_t * >> diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h >> index bc7d607..49fdcb7 100644 >> --- a/lib/librte_ether/rte_ethdev.h >> +++ b/lib/librte_ether/rte_ethdev.h >> @@ -242,6 +242,23 @@ struct rte_eth_stats { >> }; >> >> /** >> + * Device supported speeds bitmap flags >> + */ >> +#define ETH_LINK_SPEED_10M_HD (1 << 1) /**< 10 Mbps half-duplex */ >> +#define ETH_LINK_SPEED_10M (1 << 2) /**< 10 Mbps full-duplex */ >> +#define ETH_LINK_SPEED_100M_HD (1 << 3) /**< 100 Mbps half-duplex */ >> +#define ETH_LINK_SPEED_100M (1 << 4) /**< 100 Mbps full-duplex */ >> +#define ETH_LINK_SPEED_1G (1 << 5) /**< 1 Gbps */ >> +#define ETH_LINK_SPEED_2_5G (1 << 6) /**< 2.5 Gbps */ >> +#define ETH_LINK_SPEED_5G (1 << 7) /**< 5 Gbps */ >> +#define ETH_LINK_SPEED_10G (1 << 8) /**< 10 Gbps */ >> +#define ETH_LINK_SPEED_20G (1 << 9) /**< 20 Gbps */ >> +#define ETH_LINK_SPEED_25G (1 << 10) /**< 25 Gbps */ >> +#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 */ >> + >> +/** >> * Ethernet numeric link speeds in Mbps >> */ >> #define ETH_LINK_SPEED_AUTONEG 0 /**< Auto-negotiate link speed. */ >> @@ -850,6 +867,9 @@ struct rte_eth_conf { >> #define DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM 0x00000080 /**< Used for >> tunneling packet. */ >> #define DEV_TX_OFFLOAD_QINQ_INSERT 0x00000100 >> >> +/** >> + * Ethernet device information >> + */ >> struct rte_eth_dev_info { >> struct rte_pci_device *pci_dev; /**< Device PCI information. */ >> const char *driver_name; /**< Device Driver name. */ >> @@ -878,6 +898,7 @@ struct rte_eth_dev_info { >> uint16_t vmdq_pool_base; /**< First ID of VMDQ pools. */ >> struct rte_eth_desc_lim rx_desc_lim; /**< RX descriptors limits >> */ >> struct rte_eth_desc_lim tx_desc_lim; /**< TX descriptors limits >> */ >> + uint32_t speed_capa; /**< Supported speeds bitmap >> (ETH_LINK_SPEED_). */ >> }; >> >> /** >> -- >> 2.1.4 >> >> >