From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id 522531B4F4 for ; Mon, 3 Dec 2018 08:02:42 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 02 Dec 2018 23:02:42 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,309,1539673200"; d="scan'208";a="115532622" Received: from dpdk26.sh.intel.com ([10.67.110.164]) by FMSMGA003.fm.intel.com with ESMTP; 02 Dec 2018 23:02:41 -0800 From: Wenzhuo Lu To: dev@dpdk.org Cc: Wenzhuo Lu , Wei Zhao Date: Mon, 3 Dec 2018 15:06:54 +0800 Message-Id: <1543820821-108122-14-git-send-email-wenzhuo.lu@intel.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1543820821-108122-1-git-send-email-wenzhuo.lu@intel.com> References: <1542956179-80951-1-git-send-email-wenzhuo.lu@intel.com> <1543820821-108122-1-git-send-email-wenzhuo.lu@intel.com> Subject: [dpdk-dev] [PATCH v2 13/20] net/ice: support EEPROM information getting 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: , X-List-Received-Date: Mon, 03 Dec 2018 07:02:42 -0000 Add below ops, get_eeprom_length get_eeprom Signed-off-by: Wei Zhao Signed-off-by: Wenzhuo Lu --- drivers/net/ice/ice_ethdev.c | 45 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c index 289cf99..ec66c28 100644 --- a/drivers/net/ice/ice_ethdev.c +++ b/drivers/net/ice/ice_ethdev.c @@ -56,6 +56,9 @@ static int ice_fw_version_get(struct rte_eth_dev *dev, char *fw_version, size_t fw_size); static int ice_vlan_pvid_set(struct rte_eth_dev *dev, uint16_t pvid, int on); +static int ice_get_eeprom_length(struct rte_eth_dev *dev); +static int ice_get_eeprom(struct rte_eth_dev *dev, + struct rte_dev_eeprom_info *eeprom); static const struct rte_pci_id pci_id_ice_map[] = { { RTE_PCI_DEVICE(ICE_INTEL_VENDOR_ID, ICE_DEV_ID_E810C_BACKPLANE) }, @@ -96,6 +99,8 @@ static int ice_vlan_pvid_set(struct rte_eth_dev *dev, .rx_queue_intr_disable = ice_rx_queue_intr_disable, .fw_version_get = ice_fw_version_get, .vlan_pvid_set = ice_vlan_pvid_set, + .get_eeprom_length = ice_get_eeprom_length, + .get_eeprom = ice_get_eeprom, }; static void @@ -2676,3 +2681,43 @@ static int ice_rx_queue_intr_disable(struct rte_eth_dev *dev, return 0; } + +static int +ice_get_eeprom_length(struct rte_eth_dev *dev) +{ + struct ice_hw *hw = ICE_DEV_PRIVATE_TO_HW(dev->data->dev_private); + + /* Convert word count to byte count */ + return hw->nvm.sr_words << 1; +} + +static int +ice_get_eeprom(struct rte_eth_dev *dev, + struct rte_dev_eeprom_info *eeprom) +{ + struct ice_hw *hw = ICE_DEV_PRIVATE_TO_HW(dev->data->dev_private); + uint16_t *data = eeprom->data; + uint16_t offset, length, i; + enum ice_status ret_code = ICE_SUCCESS; + + offset = eeprom->offset >> 1; + length = eeprom->length >> 1; + + if (offset > hw->nvm.sr_words || + offset + length > hw->nvm.sr_words) { + PMD_DRV_LOG(ERR, "Requested EEPROM bytes out of range."); + return -EINVAL; + } + + eeprom->magic = hw->vendor_id | (hw->device_id << 16); + + for (i = 0; i < length; i++) { + ret_code = ice_read_sr_word(hw, offset + i, &data[i]); + if (ret_code != ICE_SUCCESS) { + PMD_DRV_LOG(ERR, "EEPROM read failed."); + return -EIO; + } + } + + return 0; +} -- 1.9.3