From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf0-f50.google.com (mail-lf0-f50.google.com [209.85.215.50]) by dpdk.org (Postfix) with ESMTP id A1A5A5598 for ; Wed, 25 May 2016 08:36:44 +0200 (CEST) Received: by mail-lf0-f50.google.com with SMTP id e130so14168094lfe.3 for ; Tue, 24 May 2016 23:36:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=mYLm23bibpB3raAgSVYGT8kSRZHByJNfymsfiWSFMT4=; b=g8AhWL7tyK/Cmnsu3yLKfkvz7Xl4E0CDwZ5GmUFXurnOUiCNJWhcm6+eXRU3HR0fHn OnUns/si7igMD5XiiEczoC/88NEd68SrrPEDEK+sqPBWug/uGzYy57P/kmWRjEXbkuWd RtG0ObEPdEBuba96oVQtH9MkH0ZAaL7f7yeJDDzmTGAgMl1U7F3XDV4IH79KnBrW6zkk sf9YuRep598S0YkilzpnHpxIBhTzxBruEoEV+iI6Jxuf0SUkthOHI2iPjbUlHgDwsMVT nxxzoor91oxwIr1yQfr95goDpNcuyEi5klW0mppSCoc0KN1ncxFzgeKFWaCqE+ppSmw2 BX8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=mYLm23bibpB3raAgSVYGT8kSRZHByJNfymsfiWSFMT4=; b=Hl/UbGo45VXe1rVki+gMDKFGsUeAwcM9Q5/GPhdSgckTbxGwj3lRYk6JNVoEe+c7tI gA0u3OKy9fCkAvoKzPGd8m4hp70AMVOd9lFkE8uNhmZJ/Wus87NzHbIVP3lVzYga6PQN sr6WPHtfuwXNnGnfY79Fw0T9zRwS14UcN2sR4aUY8Fg7aYI136oiDpGpRjF4qKUuD7Ld tqZtOcJOqI4Bze6FrzFb7tmEe3ELxi1UUh8iPB+dtRGXNd13o0qtCb5vdD39V/wR5O0z o5QUDV/eSeKRnN0Wa8u9HJU7u1ewiHMBIHt86OReSFYsOkRw4NTR2B219H+8Wik9hn6s 4htQ== X-Gm-Message-State: ALyK8tIKJRt6rcyU+owAk/TiCnk69084MpWi5yMwWCIIOlaIOT5UPsu6b+fcOEz5P6p1jg== X-Received: by 10.25.155.202 with SMTP id d193mr464648lfe.120.1464158204220; Tue, 24 May 2016 23:36:44 -0700 (PDT) Received: from zr-HP-Pro-3500-Series.semihalf.local ([80.82.22.190]) by smtp.gmail.com with ESMTPSA id r16sm1160378lfd.35.2016.05.24.23.36.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 24 May 2016 23:36:43 -0700 (PDT) From: zr@semihalf.com To: remy.horton@intel.com, thomas.monjalon@6wind.com Cc: dev@dpdk.org, Zyta Szpak Date: Wed, 25 May 2016 08:36:53 +0200 Message-Id: <1464158214-24733-1-git-send-email-zr@semihalf.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1462963714-21022-1-git-send-email-zr@semihalf.com> References: <1462963714-21022-1-git-send-email-zr@semihalf.com> Subject: [dpdk-dev] [PATCH 1/2] ethdev: add callback to get register size in bytes 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, 25 May 2016 06:36:44 -0000 From: Zyta Szpak Version 2 of fixing the fixed register width assumption. rte_eth_dev_get_reg_length and rte_eth_dev_get_reg callbacks do not provide register size to the app in any way. It is needed to allocate proper number of bytes before retrieving registers content with rte_eth_dev_get_reg. Signed-off-by: Zyta Szpak --- lib/librte_ether/rte_ethdev.c | 12 ++++++++++++ lib/librte_ether/rte_ethdev.h | 18 ++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c index a31018e..e0765f8 100644 --- a/lib/librte_ether/rte_ethdev.c +++ b/lib/librte_ether/rte_ethdev.c @@ -3231,6 +3231,18 @@ rte_eth_dev_get_reg_length(uint8_t port_id) } int +rte_eth_dev_get_reg_width(uint8_t port_id) +{ + 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_reg_width, -ENOTSUP); + return (*dev->dev_ops->get_reg_width)(dev); +} + +int rte_eth_dev_get_reg_info(uint8_t port_id, struct rte_dev_reg_info *info) { struct rte_eth_dev *dev; diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h index 2757510..552eaed 100644 --- a/lib/librte_ether/rte_ethdev.h +++ b/lib/librte_ether/rte_ethdev.h @@ -1292,6 +1292,9 @@ typedef int (*eth_timesync_write_time)(struct rte_eth_dev *dev, typedef int (*eth_get_reg_length_t)(struct rte_eth_dev *dev); /**< @internal Retrieve device register count */ +typedef int (*eth_get_reg_width_t)(struct rte_eth_dev *dev); +/**< @internal Retrieve device register byte number */ + typedef int (*eth_get_reg_t)(struct rte_eth_dev *dev, struct rte_dev_reg_info *info); /**< @internal Retrieve registers */ @@ -1455,6 +1458,8 @@ struct eth_dev_ops { eth_get_reg_length_t get_reg_length; /**< Get # of registers */ + eth_get_reg_width_t get_reg_width; + /**< Get # of bytes in register */ eth_get_reg_t get_reg; /**< Get registers */ eth_get_eeprom_length_t get_eeprom_length; @@ -3971,6 +3976,19 @@ int rte_eth_tx_queue_info_get(uint8_t port_id, uint16_t queue_id, */ int rte_eth_dev_get_reg_length(uint8_t port_id); +/* + * Retrieve the number of bytes in register for a specific device + * + * @param port_id + * The port identifier of the Ethernet device. + * @return + * - (>=0) number of registers if successful. + * - (-ENOTSUP) if hardware doesn't support. + * - (-ENODEV) if *port_id* invalid. + * - others depends on the specific operations implementation. + */ +int rte_eth_dev_get_reg_width(uint8_t port_id); + /** * Retrieve device registers and register attributes * -- 1.9.1