From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf0-f41.google.com (mail-lf0-f41.google.com [209.85.215.41]) by dpdk.org (Postfix) with ESMTP id 7768B5683 for ; Mon, 30 May 2016 11:39:49 +0200 (CEST) Received: by mail-lf0-f41.google.com with SMTP id k98so69994698lfi.1 for ; Mon, 30 May 2016 02:39:49 -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; bh=EPWHBy9ahgPcNk6K5OQF+yMlx/6nbMhjzTVGGoN7HGQ=; b=MYNLvjiYQlunis3lDkMeCFZ5csf/bFJTa2Xc1JRA3NM7dQLlzc4xOHnhw+dJ60msXx /F+WzurF3PKMSR3Q0NNZ1oIwlOoeXPXhoKexabWkcSw4HXyT+emaJwd43RzLBX2Fa+JD CpM150oUj25FdC14q31yiDBe4XP1HvJQlxdQimn8K8qcIFti2h5uwdIGlQ44liEQ6Z+7 dM8MaTuhrSpqctahS3fTbGtIODFBA+MWxLt0p3T7WbncFghpkOLEj5g4DnS0gjZ4vBf5 llrMK7YlHDAhTUanaRsmNI9UIshsSNWVIb3qm4EJHXlMd5aSSAkVTpoNkojlZth1s2WE NsYQ== 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; bh=EPWHBy9ahgPcNk6K5OQF+yMlx/6nbMhjzTVGGoN7HGQ=; b=X+TbVudcD8ryUkQOnXsFh/ZROOHQkKg8KL72NDJBe8uZGuTZyOFKhI2uaMduqivoAk rP88Ri8GgRf+FVe3Jri4bVRhfhvgXC3MC82DSeOp9Y4htLKTemrebExVJFUk+L+N82lG eQRfQjqDfrImUCTQcWM51cvEK/kmVwzKgydb0zARdvniX2iLrsnH9jnY+TTyUVV1UQ1X dBAhmopZv8NgFLx0WPzhoJD4N0xuYJJj+7p8+/9w6apC4kPmXJ1ZIHOAWEw8OdSVEa6w lfaDtbUmmCf3iULHue+wrN+6+yfns2ZmzTqocN59MGUNtsnaHFhXIpUKkiB7SCJvNozW O9Rw== X-Gm-Message-State: ALyK8tL5zr3Q0CQ2cwj5Ew6DJXaAiKC/upNxuMbZsycn7UJIQ9Y4q+IqzybjWgtZvguiBQ== X-Received: by 10.25.208.85 with SMTP id h82mr6954495lfg.74.1464601189157; Mon, 30 May 2016 02:39:49 -0700 (PDT) Received: from zr-HP-Pro-3500-Series.semihalf.local (31-172-191-173.noc.fibertech.net.pl. [31.172.191.173]) by smtp.gmail.com with ESMTPSA id h96sm2240401lji.21.2016.05.30.02.39.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 30 May 2016 02:39:48 -0700 (PDT) From: zr@semihalf.com To: zr@semihalf.com Cc: dev@dpdk.org Date: Mon, 30 May 2016 11:39:44 +0200 Message-Id: <1464601185-7330-1-git-send-email-zr@semihalf.com> X-Mailer: git-send-email 1.9.1 Subject: [dpdk-dev] [PATCH v2 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: Mon, 30 May 2016 09:39:49 -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 ++++++++++++++++++ lib/librte_ether/rte_ether_version.map | 1 + 3 files changed, 31 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 * diff --git a/lib/librte_ether/rte_ether_version.map b/lib/librte_ether/rte_ether_version.map index 214ecc7..288bc63 100644 --- a/lib/librte_ether/rte_ether_version.map +++ b/lib/librte_ether/rte_ether_version.map @@ -130,5 +130,6 @@ DPDK_16.04 { rte_eth_tx_buffer_drop_callback; rte_eth_tx_buffer_init; rte_eth_tx_buffer_set_err_callback; + rte_eth_dev_get_reg_width; } DPDK_2.2; -- 1.9.1