From patchwork Tue Apr 24 10:17:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zijie Pan X-Patchwork-Id: 38785 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 5C2261C01; Tue, 24 Apr 2018 12:18:00 +0200 (CEST) Received: from mail-wr0-f196.google.com (mail-wr0-f196.google.com [209.85.128.196]) by dpdk.org (Postfix) with ESMTP id EB11BDD2 for ; Tue, 24 Apr 2018 12:17:57 +0200 (CEST) Received: by mail-wr0-f196.google.com with SMTP id s18-v6so49157601wrg.9 for ; Tue, 24 Apr 2018 03:17:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=df+VMLSlGFEZ6/bzp43HEMVQs3W4nopgydY/jzvv5jQ=; b=0/RelWBAXsootayQZxvAofMIkmRGPnI2vMIbHGPEBw/qvRktNx743GWWx7wjdYrWq2 ir2cWvF6FoyQDEboqcqF9r/yMIUJXSQo9j9nq/ZOnfRuQycUKGKCoj63R2Ce3bVufy84 C361YkjOgvoMz49M1LPHQ8AFzgyAt2n22gZZnYaRiKmKo+jaIuJ70XJ50BQMRILsF/gq 3Rqpthlg5l6ZpF9wvJr4/6CT1fGRb05XmEZX+Y1xAP0YtlM18XJRU7tjTOVQiJFuQjCV h8q5btTrtkr7a0oeJUt1V5OYzMS9Qp5hotl79O72TODWtDD7W4ssuR9tPWWXvTealUJp aKNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=df+VMLSlGFEZ6/bzp43HEMVQs3W4nopgydY/jzvv5jQ=; b=ON1eXLOgGFPsJ1Tqt87VETRfnFANu4zvP7igpLtvGUk70DIQRNgpENH/BsTH8TLQrE w6qkn1CZaxvTdH6tLari94SljVwQBruVeU2R81kBAgXJOSpS6BcPnvbtPJG/7O6dJRzF YT8R/7yJWwE4PUfQZBKUT8epu4RAtKl5y+U2FiVxQbyPa4wN1B65c067Z5jYJPYPIl04 gDISsG1YDvjJzndRN/RXUmAGAXLxh0AQu3ORITgutolMbuQXjfHqdfPIRRXrPlLbR98R JVKRY4Cr95a36cRkhAQViB2sEaCy3qu72583PgJC/0sbx1KJ0IhrigEeikeNx4JbJder zrGA== X-Gm-Message-State: ALQs6tAfDIwU/XOlhfE/F6YCOBVPEetSapC5TfOKYeLUhKZGNAwdbpDM dueygs43UmhcbHfnsQst4PaiGf6bbWU= X-Google-Smtp-Source: AB8JxZrohpUWQzO+0L7D6cYjPobQjxI/j223kcPBCc/l4P8M9PkQUYh/cB87ZZsDDix4sayYvvfHqw== X-Received: by 10.28.133.12 with SMTP id h12mr10036325wmd.136.1524565077274; Tue, 24 Apr 2018 03:17:57 -0700 (PDT) Received: from cougar.6wind.com (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id 60-v6sm12564155wrj.62.2018.04.24.03.17.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 24 Apr 2018 03:17:56 -0700 (PDT) From: Zijie Pan To: dev@dpdk.org Cc: remy.horton@intel.com, ferruh.yigit@intel.com, thomas@monjalon.net, john.mcnamara@intel.com, marko.kovacevic@intel.com Date: Tue, 24 Apr 2018 12:17:20 +0200 Message-Id: <1524565044-8583-2-git-send-email-zijie.pan@6wind.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1524565044-8583-1-git-send-email-zijie.pan@6wind.com> References: <1521630379-9554-1-git-send-email-zijie.pan@6wind.com> <1524565044-8583-1-git-send-email-zijie.pan@6wind.com> Subject: [dpdk-dev] [PATCH v4 1/5] ethdev: add access to eeprom X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" add new APIs: - rte_eth_dev_get_module_info - rte_eth_dev_get_module_eeprom Signed-off-by: Zijie Pan Acked-by: Remy Horton --- Cc: remy.horton@intel.com Cc: john.mcnamara@intel.com Cc: marko.kovacevic@intel.com Cc: thomas@monjalon.net doc/guides/nics/features.rst | 11 ++++++++ lib/librte_ether/rte_dev_info.h | 18 +++++++++++++ lib/librte_ether/rte_ethdev.c | 26 +++++++++++++++++++ lib/librte_ether/rte_ethdev.h | 43 +++++++++++++++++++++++++++++++ lib/librte_ether/rte_ethdev_core.h | 12 +++++++++ lib/librte_ether/rte_ethdev_version.map | 2 ++ 6 files changed, 112 insertions(+) diff --git a/doc/guides/nics/features.rst b/doc/guides/nics/features.rst index 1b4fb97..bb183e2 100644 --- a/doc/guides/nics/features.rst +++ b/doc/guides/nics/features.rst @@ -749,6 +749,17 @@ Supports getting/setting device eeprom data. ``rte_eth_dev_set_eeprom()``. +.. _nic_features_module_eeprom_dump: + +Module EEPROM dump +------------------ + +Supports getting information and data of plugin module eeprom. + +* **[implements] eth_dev_ops**: ``get_module_info``, ``get_module_eeprom``. +* **[related] API**: ``rte_eth_dev_get_module_info()``, ``rte_eth_dev_get_module_eeprom()``. + + .. _nic_features_register_dump: Registers dump diff --git a/lib/librte_ether/rte_dev_info.h b/lib/librte_ether/rte_dev_info.h index 6b68584..02bdbed 100644 --- a/lib/librte_ether/rte_dev_info.h +++ b/lib/librte_ether/rte_dev_info.h @@ -28,4 +28,22 @@ struct rte_dev_eeprom_info { uint32_t magic; /**< Device-specific key, such as device-id */ }; +/** + * Placeholder for accessing plugin module eeprom + */ +struct rte_dev_module_info { + uint32_t type; /**< Type of plugin module eeprom */ + uint32_t eeprom_len; /**< Length of plugin module eeprom */ +}; + +/* EEPROM Standards for plug in modules */ +#define RTE_ETH_MODULE_SFF_8079 0x1 +#define RTE_ETH_MODULE_SFF_8079_LEN 256 +#define RTE_ETH_MODULE_SFF_8472 0x2 +#define RTE_ETH_MODULE_SFF_8472_LEN 512 +#define RTE_ETH_MODULE_SFF_8636 0x3 +#define RTE_ETH_MODULE_SFF_8636_LEN 256 +#define RTE_ETH_MODULE_SFF_8436 0x4 +#define RTE_ETH_MODULE_SFF_8436_LEN 256 + #endif /* _RTE_DEV_INFO_H_ */ diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c index 7821a88..10bc19c 100644 --- a/lib/librte_ether/rte_ethdev.c +++ b/lib/librte_ether/rte_ethdev.c @@ -3947,6 +3947,32 @@ int rte_eth_set_queue_rate_limit(uint16_t port_id, uint16_t queue_idx, return eth_err(port_id, (*dev->dev_ops->set_eeprom)(dev, info)); } +int __rte_experimental +rte_eth_dev_get_module_info(uint16_t port_id, + struct rte_dev_module_info *modinfo) +{ + struct rte_eth_dev *dev; + + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); + + dev = &rte_eth_devices[port_id]; + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->get_module_info, -ENOTSUP); + return (*dev->dev_ops->get_module_info)(dev, modinfo); +} + +int __rte_experimental +rte_eth_dev_get_module_eeprom(uint16_t port_id, + struct rte_dev_eeprom_info *info) +{ + struct rte_eth_dev *dev; + + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); + + dev = &rte_eth_devices[port_id]; + RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->get_module_eeprom, -ENOTSUP); + return (*dev->dev_ops->get_module_eeprom)(dev, info); +} + int rte_eth_dev_get_dcb_info(uint16_t port_id, struct rte_eth_dcb_info *dcb_info) diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index 7e4e57b..b39ccc4 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -3311,6 +3311,49 @@ int rte_eth_tx_queue_info_get(uint16_t port_id, uint16_t queue_id, int rte_eth_dev_set_eeprom(uint16_t port_id, struct rte_dev_eeprom_info *info); /** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Retrieve the type and size of plugin module EEPROM + * + * @param port_id + * The port identifier of the Ethernet device. + * @param modinfo + * The type and size of plugin module EEPROM. + * @return + * - (0) if successful. + * - (-ENOTSUP) if hardware doesn't support. + * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. + * - others depends on the specific operations implementation. + */ +int __rte_experimental +rte_eth_dev_get_module_info(uint16_t port_id, + struct rte_dev_module_info *modinfo); + +/** + * @warning + * @b EXPERIMENTAL: this API may change without prior notice. + * + * Retrieve the data of plugin module EEPROM + * + * @param port_id + * The port identifier of the Ethernet device. + * @param info + * The template includes the plugin module EEPROM attributes, and the + * buffer for return plugin module EEPROM data. + * @return + * - (0) if successful. + * - (-ENOTSUP) if hardware doesn't support. + * - (-ENODEV) if *port_id* invalid. + * - (-EIO) if device is removed. + * - others depends on the specific operations implementation. + */ +int __rte_experimental +rte_eth_dev_get_module_eeprom(uint16_t port_id, + struct rte_dev_eeprom_info *info); + +/** * Set the list of multicast addresses to filter on an Ethernet device. * * @param port_id diff --git a/lib/librte_ether/rte_ethdev_core.h b/lib/librte_ether/rte_ethdev_core.h index 55eb2b0..ec623c2 100644 --- a/lib/librte_ether/rte_ethdev_core.h +++ b/lib/librte_ether/rte_ethdev_core.h @@ -337,6 +337,14 @@ typedef int (*eth_set_eeprom_t)(struct rte_eth_dev *dev, struct rte_dev_eeprom_info *info); /**< @internal Program eeprom data */ +typedef int (*eth_get_module_info_t)(struct rte_eth_dev *dev, + struct rte_dev_module_info *modinfo); +/**< @internal Retrieve type and size of plugin module eeprom */ + +typedef int (*eth_get_module_eeprom_t)(struct rte_eth_dev *dev, + struct rte_dev_eeprom_info *info); +/**< @internal Retrieve plugin module eeprom data */ + typedef int (*eth_l2_tunnel_eth_type_conf_t) (struct rte_eth_dev *dev, struct rte_eth_l2_tunnel_conf *l2_tunnel); /**< @internal config l2 tunnel ether type */ @@ -467,6 +475,10 @@ struct eth_dev_ops { eth_get_eeprom_t get_eeprom; /**< Get eeprom data. */ eth_set_eeprom_t set_eeprom; /**< Set eeprom. */ + eth_get_module_info_t get_module_info; + /** Get plugin module eeprom attribute. */ + eth_get_module_eeprom_t get_module_eeprom; + /** Get plugin module eeprom data. */ eth_filter_ctrl_t filter_ctrl; /**< common filter control. */ diff --git a/lib/librte_ether/rte_ethdev_version.map b/lib/librte_ether/rte_ethdev_version.map index 8fe0788..43a23f4 100644 --- a/lib/librte_ether/rte_ethdev_version.map +++ b/lib/librte_ether/rte_ethdev_version.map @@ -229,5 +229,7 @@ EXPERIMENTAL { rte_mtr_policer_actions_update; rte_mtr_stats_read; rte_mtr_stats_update; + rte_eth_dev_get_module_info; + rte_eth_dev_get_module_eeprom; } DPDK_18.02;