All of lore.kernel.org
 help / color / mirror / Atom feed
From: Igor Russkikh <Igor.Russkikh@aquantia.com>
To: "dev@dpdk.org" <dev@dpdk.org>
Cc: Pavel Belous <Pavel.Belous@aquantia.com>,
	Igor Russkikh <Igor.Russkikh@aquantia.com>,
	"ferruh.yigit@intel.com" <ferruh.yigit@intel.com>,
	Pavel Belous <Pavel.Belous@aquantia.com>
Subject: [PATCH v6 20/22] net/atlantic: implement EEPROM get/set
Date: Fri, 12 Oct 2018 11:09:51 +0000	[thread overview]
Message-ID: <a79a5a742b140364d5ac64c7a88b23535bc7df94.1539338074.git.igor.russkikh@aquantia.com> (raw)
In-Reply-To: <cover.1539338074.git.igor.russkikh@aquantia.com>

From: Pavel Belous <Pavel.Belous@aquantia.com>

Add support for EEPROM reading/writing.

Signed-off-by: Igor Russkikh <igor.russkikh@aquantia.com>
Signed-off-by: Pavel Belous <Pavel.Belous@aquantia.com>
---
 doc/guides/nics/features/atlantic.ini |  1 +
 drivers/net/atlantic/atl_ethdev.c     | 47 +++++++++++++++++++++++++++++++++++
 2 files changed, 48 insertions(+)

diff --git a/doc/guides/nics/features/atlantic.ini b/doc/guides/nics/features/atlantic.ini
index 66949b816284..f09a75691a28 100644
--- a/doc/guides/nics/features/atlantic.ini
+++ b/doc/guides/nics/features/atlantic.ini
@@ -29,6 +29,7 @@ Basic stats          = Y
 Extended stats       = Y
 Stats per queue      = Y
 FW version           = Y
+EEPROM dump          = Y
 Linux UIO            = Y
 ARMv8                = Y
 x86-32               = Y
diff --git a/drivers/net/atlantic/atl_ethdev.c b/drivers/net/atlantic/atl_ethdev.c
index 6ebc02864cfe..824e624dd772 100644
--- a/drivers/net/atlantic/atl_ethdev.c
+++ b/drivers/net/atlantic/atl_ethdev.c
@@ -62,6 +62,13 @@ static void atl_vlan_strip_queue_set(struct rte_eth_dev *dev,
 static int atl_vlan_tpid_set(struct rte_eth_dev *dev,
 			     enum rte_vlan_type vlan_type, uint16_t tpid);
 
+/* EEPROM */
+static int atl_dev_get_eeprom_length(struct rte_eth_dev *dev);
+static int atl_dev_get_eeprom(struct rte_eth_dev *dev,
+			      struct rte_dev_eeprom_info *eeprom);
+static int atl_dev_set_eeprom(struct rte_eth_dev *dev,
+			      struct rte_dev_eeprom_info *eeprom);
+
 /* Flow control */
 static int atl_flow_ctrl_get(struct rte_eth_dev *dev,
 			       struct rte_eth_fc_conf *fc_conf);
@@ -259,6 +266,11 @@ static const struct eth_dev_ops atl_eth_dev_ops = {
 	.rx_descriptor_status = atl_dev_rx_descriptor_status,
 	.tx_descriptor_status = atl_dev_tx_descriptor_status,
 
+	/* EEPROM */
+	.get_eeprom_length    = atl_dev_get_eeprom_length,
+	.get_eeprom           = atl_dev_get_eeprom,
+	.set_eeprom           = atl_dev_set_eeprom,
+
 	/* Flow Control */
 	.flow_ctrl_get	      = atl_flow_ctrl_get,
 	.flow_ctrl_set	      = atl_flow_ctrl_set,
@@ -1076,6 +1088,41 @@ atl_dev_interrupt_handler(void *param)
 	atl_dev_interrupt_action(dev, dev->intr_handle);
 }
 
+#define SFP_EEPROM_SIZE 0xff
+
+static int
+atl_dev_get_eeprom_length(struct rte_eth_dev *dev __rte_unused)
+{
+	return SFP_EEPROM_SIZE;
+}
+
+static int
+atl_dev_get_eeprom(struct rte_eth_dev *dev, struct rte_dev_eeprom_info *eeprom)
+{
+	struct aq_hw_s *hw = ATL_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+
+	if (hw->aq_fw_ops->get_eeprom == NULL)
+		return -ENOTSUP;
+
+	if (eeprom->length != SFP_EEPROM_SIZE || eeprom->data == NULL)
+		return -EINVAL;
+
+	return hw->aq_fw_ops->get_eeprom(hw, eeprom->data, eeprom->length);
+}
+
+static int
+atl_dev_set_eeprom(struct rte_eth_dev *dev, struct rte_dev_eeprom_info *eeprom)
+{
+	struct aq_hw_s *hw = ATL_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+
+	if (hw->aq_fw_ops->set_eeprom == NULL)
+		return -ENOTSUP;
+
+	if (eeprom->length != SFP_EEPROM_SIZE || eeprom->data == NULL)
+		return -EINVAL;
+
+	return hw->aq_fw_ops->set_eeprom(hw, eeprom->data, eeprom->length);
+}
 
 static int
 atl_flow_ctrl_get(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)
-- 
2.7.4

  parent reply	other threads:[~2018-10-12 11:09 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-12 11:09 [PATCH v6 00/22] net/atlantic: Aquantia aQtion 10G NIC Family DPDK PMD driver Igor Russkikh
2018-10-12 11:09 ` [PATCH v6 01/22] net/atlantic: add atlantic PMD driver skeleton Igor Russkikh
2018-10-12 11:09 ` [PATCH v6 02/22] net/atlantic: add logging structure Igor Russkikh
2018-10-12 11:09 ` [PATCH v6 03/22] net/atlantic: add hardware registers access routines Igor Russkikh
2018-10-12 11:09 ` [PATCH v6 04/22] net/atlantic: add hardware access layer Igor Russkikh
2018-10-12 11:09 ` [PATCH v6 05/22] net/atlantic: implement firmware operations Igor Russkikh
2018-10-12 11:09 ` [PATCH v6 06/22] net/atlantic: add b0 hardware layer Igor Russkikh
2018-10-12 11:09 ` [PATCH v6 07/22] net/atlantic: configure rte device start/stop Igor Russkikh
2018-10-12 11:09 ` [PATCH v6 08/22] net/atlantic: implement core logic for Tx/Rx Igor Russkikh
2018-10-12 11:09 ` [PATCH v6 09/22] net/atlantic: implement Rx path Igor Russkikh
2018-10-12 11:09 ` [PATCH v6 10/22] net/atlantic: implement Tx path Igor Russkikh
2018-10-12 11:09 ` [PATCH v6 11/22] net/atlantic: add link status and interrupt management Igor Russkikh
2018-10-12 11:09 ` [PATCH v6 12/22] net/atlantic: implement device statistics Igor Russkikh
2018-10-12 11:09 ` [PATCH v6 13/22] net/atlantic: add Rx/Tx descriptors information Igor Russkikh
2018-10-12 11:09 ` [PATCH v6 14/22] net/atlantic: implement promisc and allmulti modes Igor Russkikh
2018-10-12 11:09 ` [PATCH v6 15/22] net/atlantic: implement RSS and RETA manipulation API Igor Russkikh
2018-10-12 11:09 ` [PATCH v6 16/22] net/atlantic: add flow control configuration Igor Russkikh
2018-10-12 11:09 ` [PATCH v6 17/22] net/atlantic: implement MAC address manipulations Igor Russkikh
2018-10-12 11:09 ` [PATCH v6 18/22] net/atlantic: implement MTU configuration Igor Russkikh
2018-10-12 11:09 ` [PATCH v6 19/22] net/atlantic: implement VLAN filters and offloads Igor Russkikh
2018-10-12 11:09 ` Igor Russkikh [this message]
2018-10-12 11:09 ` [PATCH v6 21/22] net/atlantic: read MAC registers for debug purposes Igor Russkikh
2018-10-12 11:09 ` [PATCH v6 22/22] net/atlantic: add release notes Igor Russkikh
2018-10-12 16:22 ` [PATCH v6 00/22] net/atlantic: Aquantia aQtion 10G NIC Family DPDK PMD driver Ferruh Yigit
2018-10-12 17:28   ` Igor Russkikh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=a79a5a742b140364d5ac64c7a88b23535bc7df94.1539338074.git.igor.russkikh@aquantia.com \
    --to=igor.russkikh@aquantia.com \
    --cc=Pavel.Belous@aquantia.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.