[dpdk-dev,v6,1/3] ethdev: add Rx HW timestamp capability

Message ID 1507028429-23944-1-git-send-email-rasland@mellanox.com (mailing list archive)
State Superseded, archived
Delegated to: Ferruh Yigit
Headers

Checks

Context Check Description
ci/checkpatch warning coding style issues
ci/Intel-compilation fail apply patch file failure

Commit Message

Raslan Darawsheh Oct. 3, 2017, 11 a.m. UTC
  Add a new offload capability flag for Rx HW
timestamp and enabling/disabling this via rte_eth_rxmode.

Signed-off-by: Raslan Darawsheh <rasland@mellanox.com>
---
This patch should be applied after after this series:
 http://dpdk.org/dev/patchwork/patch/29368/

Changes in v6:
- Rebased properly on top of the mentioned patch series.
- Documentation update
---
 doc/guides/nics/features.rst  | 11 +++++++++++
 lib/librte_ether/rte_ethdev.c |  6 ++++++
 lib/librte_ether/rte_ethdev.h |  2 ++
 3 files changed, 19 insertions(+)
  

Comments

Shahaf Shuler Oct. 4, 2017, 5:57 a.m. UTC | #1
Hi Raslan,

Tuesday, October 3, 2017 2:00 PM, Raslan Darawsheh
> Add a new offload capability flag for Rx HW timestamp and enabling/disabling
> this via rte_eth_rxmode.
> 
> Signed-off-by: Raslan Darawsheh <rasland@mellanox.com>
> ---
> This patch should be applied after after this series:
>  http://dpdk.org/dev/patchwork/patch/29368/
> 
> Changes in v6:
> - Rebased properly on top of the mentioned patch series.
> - Documentation update
> ---
>  doc/guides/nics/features.rst  | 11 +++++++++++
> lib/librte_ether/rte_ethdev.c |  6 ++++++  lib/librte_ether/rte_ethdev.h |  2
> ++
>  3 files changed, 19 insertions(+)
> 
> diff --git a/doc/guides/nics/features.rst b/doc/guides/nics/features.rst index
> 4e68144..e03e6d6 100644
> --- a/doc/guides/nics/features.rst
> +++ b/doc/guides/nics/features.rst
> @@ -567,6 +567,17 @@ Supports L4 checksum offload.
>  * **[provides] rte_eth_dev_info**:
> ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_UDP_CKSUM
> ,DEV_RX_OFFLOAD_TCP_CKSUM``,
> 
> ``tx_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP
> _CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
> 
> +.. _nic_features_hw_timestamp:
> +
> +Timestamp offload
> +-----------------
> +
> +Supports Timestamp.
> +
> +* **[uses]     rte_eth_rxconf,rte_eth_rxmode**:
> ``offloads:DEV_RX_OFFLOAD_TIMESTAMP``.
> +* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_TIMESTAMP``.
> +* **[provides] mbuf**: ``mbuf.timestamp``.
> +* **[provides] rte_eth_dev_info**:
> ``rx_offload_capa:DEV_RX_OFFLOAD_TIMESTAMP``.

The capability can be reported on both rx_offload_capa and rx_queue_offload_capa. Better to have it:
rx_offload_capa,rx_queue_offload_capa: DEV_RX_OFFLOAD_TIMESTAMP.


> 
>  .. _nic_features_macsec_offload:
> 
> diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
> index 9b73d23..c5c5164 100644
> --- a/lib/librte_ether/rte_ethdev.c
> +++ b/lib/librte_ether/rte_ethdev.c
> @@ -715,6 +715,8 @@ rte_eth_convert_rx_offload_bitfield(const struct
> rte_eth_rxmode *rxmode,
>  		offloads |= DEV_RX_OFFLOAD_SCATTER;
>  	if (rxmode->enable_lro == 1)
>  		offloads |= DEV_RX_OFFLOAD_TCP_LRO;
> +	if (rxmode->hw_timestamp == 1)
> +		offloads |= DEV_RX_OFFLOAD_TIMESTAMP;
> 
>  	*rx_offloads = offloads;
>  }
> @@ -763,6 +765,10 @@ rte_eth_convert_rx_offloads(const uint64_t
> rx_offloads,
>  		rxmode->enable_lro = 1;
>  	else
>  		rxmode->enable_lro = 0;
> +	if (rx_offloads & DEV_RX_OFFLOAD_TIMESTAMP)
> +		rxmode->hw_timestamp = 1;
> +	else
> +		rxmode->hw_timestamp = 0;
>  }
> 
>  int
> diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
> index e02d578..8bb9a6a 100644
> --- a/lib/librte_ether/rte_ethdev.h
> +++ b/lib/librte_ether/rte_ethdev.h
> @@ -369,6 +369,7 @@ struct rte_eth_rxmode {
>  		hw_strip_crc     : 1, /**< Enable CRC stripping by hardware. */
>  		enable_scatter   : 1, /**< Enable scatter packets rx handler */
>  		enable_lro       : 1, /**< Enable LRO */
> +		hw_timestamp     : 1, /**< Enable HW timestamp */
>  		/**
>  		 * When set the offload bitfield should be ignored.
>  		 * Instead per-port Rx offloads should be set on offloads @@
> -940,6 +941,7 @@ struct rte_eth_conf {
>  #define DEV_RX_OFFLOAD_JUMBO_FRAME	0x00000800
>  #define DEV_RX_OFFLOAD_CRC_STRIP	0x00001000
>  #define DEV_RX_OFFLOAD_SCATTER		0x00002000
> +#define DEV_RX_OFFLOAD_TIMESTAMP	0x00004000
>  #define DEV_RX_OFFLOAD_CHECKSUM (DEV_RX_OFFLOAD_IPV4_CKSUM |
> \
>  				 DEV_RX_OFFLOAD_UDP_CKSUM | \
>  				 DEV_RX_OFFLOAD_TCP_CKSUM)
> --
> 2.7.4

Otherwise,

Reviewed-By: Shahaf Shuler <shahafs@mellanox.com>
  
Ferruh Yigit Oct. 6, 2017, 12:54 a.m. UTC | #2
On 10/3/2017 12:00 PM, Raslan Darawsheh wrote:
> Add a new offload capability flag for Rx HW
> timestamp and enabling/disabling this via rte_eth_rxmode.
> 
> Signed-off-by: Raslan Darawsheh <rasland@mellanox.com>

<...>

> +++ b/doc/guides/nics/features.rst
> @@ -567,6 +567,17 @@ Supports L4 checksum offload.
>  * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM``,
>    ``tx_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
>  
> +.. _nic_features_hw_timestamp:
> +
> +Timestamp offload
> +-----------------
> +
> +Supports Timestamp.
> +
> +* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TIMESTAMP``.	
> +* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_TIMESTAMP``.
> +* **[provides] mbuf**: ``mbuf.timestamp``.
> +* **[provides] rte_eth_dev_info**: ``rx_offload_capa:DEV_RX_OFFLOAD_TIMESTAMP``.

Can you also add this new feature to default.ini file?
  

Patch

diff --git a/doc/guides/nics/features.rst b/doc/guides/nics/features.rst
index 4e68144..e03e6d6 100644
--- a/doc/guides/nics/features.rst
+++ b/doc/guides/nics/features.rst
@@ -567,6 +567,17 @@  Supports L4 checksum offload.
 * **[provides] rte_eth_dev_info**: ``rx_offload_capa,rx_queue_offload_capa:DEV_RX_OFFLOAD_UDP_CKSUM,DEV_RX_OFFLOAD_TCP_CKSUM``,
   ``tx_offload_capa:DEV_TX_OFFLOAD_UDP_CKSUM,DEV_TX_OFFLOAD_TCP_CKSUM,DEV_TX_OFFLOAD_SCTP_CKSUM``.
 
+.. _nic_features_hw_timestamp:
+
+Timestamp offload
+-----------------
+
+Supports Timestamp.
+
+* **[uses]     rte_eth_rxconf,rte_eth_rxmode**: ``offloads:DEV_RX_OFFLOAD_TIMESTAMP``.	
+* **[provides] mbuf**: ``mbuf.ol_flags:PKT_RX_TIMESTAMP``.
+* **[provides] mbuf**: ``mbuf.timestamp``.
+* **[provides] rte_eth_dev_info**: ``rx_offload_capa:DEV_RX_OFFLOAD_TIMESTAMP``.
 
 .. _nic_features_macsec_offload:
 
diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index 9b73d23..c5c5164 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -715,6 +715,8 @@  rte_eth_convert_rx_offload_bitfield(const struct rte_eth_rxmode *rxmode,
 		offloads |= DEV_RX_OFFLOAD_SCATTER;
 	if (rxmode->enable_lro == 1)
 		offloads |= DEV_RX_OFFLOAD_TCP_LRO;
+	if (rxmode->hw_timestamp == 1)
+		offloads |= DEV_RX_OFFLOAD_TIMESTAMP;
 
 	*rx_offloads = offloads;
 }
@@ -763,6 +765,10 @@  rte_eth_convert_rx_offloads(const uint64_t rx_offloads,
 		rxmode->enable_lro = 1;
 	else
 		rxmode->enable_lro = 0;
+	if (rx_offloads & DEV_RX_OFFLOAD_TIMESTAMP)
+		rxmode->hw_timestamp = 1;
+	else
+		rxmode->hw_timestamp = 0;
 }
 
 int
diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
index e02d578..8bb9a6a 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -369,6 +369,7 @@  struct rte_eth_rxmode {
 		hw_strip_crc     : 1, /**< Enable CRC stripping by hardware. */
 		enable_scatter   : 1, /**< Enable scatter packets rx handler */
 		enable_lro       : 1, /**< Enable LRO */
+		hw_timestamp     : 1, /**< Enable HW timestamp */
 		/**
 		 * When set the offload bitfield should be ignored.
 		 * Instead per-port Rx offloads should be set on offloads
@@ -940,6 +941,7 @@  struct rte_eth_conf {
 #define DEV_RX_OFFLOAD_JUMBO_FRAME	0x00000800
 #define DEV_RX_OFFLOAD_CRC_STRIP	0x00001000
 #define DEV_RX_OFFLOAD_SCATTER		0x00002000
+#define DEV_RX_OFFLOAD_TIMESTAMP	0x00004000
 #define DEV_RX_OFFLOAD_CHECKSUM (DEV_RX_OFFLOAD_IPV4_CKSUM | \
 				 DEV_RX_OFFLOAD_UDP_CKSUM | \
 				 DEV_RX_OFFLOAD_TCP_CKSUM)