From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf0-f46.google.com (mail-lf0-f46.google.com [209.85.215.46]) by dpdk.org (Postfix) with ESMTP id 2DD732BC6 for ; Wed, 1 Jun 2016 09:56:16 +0200 (CEST) Received: by mail-lf0-f46.google.com with SMTP id w16so7175090lfd.2 for ; Wed, 01 Jun 2016 00:56:16 -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=NKV2tzSxC7vMCj6P7bKTmnY7qD6mut+PILTvPg8I5vs=; b=drwOuT/4/fAdJbxmzmNWV5xsV9CXRJ/KdhJkRm2aklio+OqWee90eftnjqGAjHRZVB CGWNifQ+Q6K1QiyoDWc7VaZJnfWWcUY2nVyKHgcB1I2MMmdaWVsi8tCL5T6wNZC2gPdc B+wPeiZxyDGSr1iYBTRJoHcX78Q6y+BTs/I+9dIuFwrURT/lH1828jBsuMhCMv6iT+yM 5TkmRjjdnDPvda5YHVtclCriIrn5GiQLk4nb1ZjTntZWcmfsn51ABH2Gz4FuiXhgqHQ2 tvFP7vDr5yBUKW2yGt217m4JKAA3oXgNgvcF03Eoz/aSnZiu8pUabZ7t1vOltK+NaP6Z tXXA== 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=NKV2tzSxC7vMCj6P7bKTmnY7qD6mut+PILTvPg8I5vs=; b=D+U6qxfGep3EQFeSjgQbQF5o0CKYchQYG76KEpQ0uoI1x5Sw0y3sFXmy8RTP4vRgJQ To3/y11fDrlHqDJ7TjkQu/UoPtaVnUsvLRVbnd/RsCu6KEUDLcDwv70OR+7tO7yjSwFx ZjiJTexkLLT8/FdBPRoFPC5NoPWZafRO9tw6FwvXuecsCHzhZLfcta7DPm7XpSwh5h4n 9TspOO5h3C3w4td/dKtN4/iSw3hLGuquM27hVw4mXXBsHyDDXxeHvRQkBzAqpHAeTcoK 7tBMWHsI9LUM0fRLmJxIABgsWK5fuMyK6RtD7/S2N32PzfrAOTZAKz6GPp0J0yJU9ZcZ SPiQ== X-Gm-Message-State: ALyK8tLZJQLabhraF5naDdLrH+MEHRTCfhnXFA6jbWElma0julBru4Ea26tqo83cFvaezw== X-Received: by 10.46.71.14 with SMTP id u14mr970481lja.19.1464767775854; Wed, 01 Jun 2016 00:56:15 -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 72sm3372298ljj.0.2016.06.01.00.56.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 01 Jun 2016 00:56:15 -0700 (PDT) From: zr@semihalf.com To: remy.horton@intel.com, thomas.monjalon@6wind.com Cc: dev@dpdk.org, Zyta Szpak Date: Wed, 1 Jun 2016 09:56:10 +0200 Message-Id: <1464767771-19159-1-git-send-email-zr@semihalf.com> X-Mailer: git-send-email 1.9.1 Subject: [dpdk-dev] [PATCH v3 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, 01 Jun 2016 07:56:16 -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 | 7 +++++++ 3 files changed, 37 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..568509c 100644 --- a/lib/librte_ether/rte_ether_version.map +++ b/lib/librte_ether/rte_ether_version.map @@ -132,3 +132,10 @@ DPDK_16.04 { rte_eth_tx_buffer_set_err_callback; } DPDK_2.2; + +DPDK_16.07 { + global: + + rte_eth_dev_get_reg_width; + +} DPDK_16.04; \ No newline at end of file -- 1.9.1