#define ARK_TX_MAX_QUEUE (4096 * 4)
#define ARK_TX_MIN_QUEUE (256)
+uint64_t ark_timestamp_rx_dynflag;
+int ark_timestamp_dynfield_offset = -1;
+
int rte_pmd_ark_rx_userdata_dynfield_offset = -1;
int rte_pmd_ark_tx_userdata_dynfield_offset = -1;
eth_ark_dev_configure(struct rte_eth_dev *dev)
{
struct ark_adapter *ark = dev->data->dev_private;
+ int ret;
+
+ if (dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_TIMESTAMP) {
+ ret = rte_mbuf_dyn_rx_timestamp_register(
+ &ark_timestamp_dynfield_offset,
+ &ark_timestamp_rx_dynflag);
+ if (ret != 0) {
+ ARK_PMD_LOG(ERR,
+ "Failed to register Rx timestamp field/flag\n");
+ return -rte_errno;
+ }
+ }
eth_ark_dev_set_link_up(dev);
if (ark->user_ext.dev_configure)
ETH_LINK_SPEED_50G |
ETH_LINK_SPEED_100G);
+ dev_info->rx_offload_capa = DEV_RX_OFFLOAD_TIMESTAMP;
+
return 0;
}
mbuf->port = meta->port;
mbuf->pkt_len = meta->pkt_len;
mbuf->data_len = meta->pkt_len;
- mbuf->timestamp = meta->timestamp;
+ /* set timestamp if enabled at least on one device */
+ if (ark_timestamp_rx_dynflag > 0) {
+ *RTE_MBUF_DYNFIELD(mbuf, ark_timestamp_dynfield_offset,
+ rte_mbuf_timestamp_t *) = meta->timestamp;
+ mbuf->ol_flags |= ark_timestamp_rx_dynflag;
+ }
rte_pmd_ark_mbuf_rx_userdata_set(mbuf, meta->user_data);
if (ARK_DEBUG_CORE) { /* debug sanity checks */
#include <rte_mempool.h>
#include <rte_ethdev_driver.h>
+extern uint64_t ark_timestamp_rx_dynflag;
+extern int ark_timestamp_dynfield_offset;
int eth_ark_dev_rx_queue_setup(struct rte_eth_dev *dev,
uint16_t queue_idx,