X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fnfb%2Fnfb_rx.c;h=d6d4ba9663c6eab1cec94677f73a4d02b2ce7166;hb=7206a1ca2bfe289aeacd92e39cfefd9a19f6c64f;hp=9147b00b0aef27d0534ed7b00c8abed8ce84a222;hpb=6435f9a0ac222ad8a1c53a2a039891c6f46cadb3;p=dpdk.git diff --git a/drivers/net/nfb/nfb_rx.c b/drivers/net/nfb/nfb_rx.c index 9147b00b0a..d6d4ba9663 100644 --- a/drivers/net/nfb/nfb_rx.c +++ b/drivers/net/nfb/nfb_rx.c @@ -4,9 +4,64 @@ * All rights reserved. */ +#include + #include "nfb_rx.h" #include "nfb.h" +uint64_t nfb_timestamp_rx_dynflag; +int nfb_timestamp_dynfield_offset = -1; + +static int +timestamp_check_handler(__rte_unused const char *key, + const char *value, __rte_unused void *opaque) +{ + if (strcmp(value, "1")) + return -1; + + return 0; +} + + +static int +nfb_check_timestamp(struct rte_devargs *devargs) +{ + struct rte_kvargs *kvlist; + int ret; + + if (devargs == NULL) + return 0; + + kvlist = rte_kvargs_parse(devargs->args, NULL); + if (kvlist == NULL) + return 0; + + if (!rte_kvargs_count(kvlist, TIMESTAMP_ARG)) { + rte_kvargs_free(kvlist); + return 0; + } + /* Timestamps are enabled when there is + * key-value pair: enable_timestamp=1 + * TODO: timestamp should be enabled with DEV_RX_OFFLOAD_TIMESTAMP + */ + if (rte_kvargs_process(kvlist, TIMESTAMP_ARG, + timestamp_check_handler, NULL) < 0) { + rte_kvargs_free(kvlist); + return 0; + } + rte_kvargs_free(kvlist); + + ret = rte_mbuf_dyn_rx_timestamp_register( + &nfb_timestamp_dynfield_offset, + &nfb_timestamp_rx_dynflag); + if (ret != 0) { + RTE_LOG(ERR, PMD, "Cannot register Rx timestamp field/flag\n"); + return -rte_errno; + } + + return 1; +} + int nfb_eth_rx_queue_start(struct rte_eth_dev *dev, uint16_t rxq_id) { @@ -70,6 +125,8 @@ nfb_eth_rx_queue_setup(struct rte_eth_dev *dev, return -ENOMEM; } + rxq->flags = 0; + ret = nfb_eth_rx_queue_init(internals->nfb, rx_queue_id, dev->data->port_id, @@ -81,6 +138,9 @@ nfb_eth_rx_queue_setup(struct rte_eth_dev *dev, else rte_free(rxq); + if (nfb_check_timestamp(dev->device->devargs) > 0) + rxq->flags |= NFB_TIMESTAMP_FLAG; + return ret; }