From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr0-f193.google.com (mail-wr0-f193.google.com [209.85.128.193]) by dpdk.org (Postfix) with ESMTP id 435991BAF8 for ; Wed, 11 Apr 2018 02:05:03 +0200 (CEST) Received: by mail-wr0-f193.google.com with SMTP id d19so44695wre.1 for ; Tue, 10 Apr 2018 17:05:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:in-reply-to:references:content-transfer-encoding; bh=USU0NBvPu6rvOFvSU/XEODO3u3v3M1MQzaHg3lRgE0Y=; b=KeX4pOCx0C5NDWso79DXw4YK7eprpyTkPXsb42eF3In8X09jveZtzMa9+II6cvpN8A RirrOcAyuQQXp84uip/VZM2oUlWH73IU0HIY1CAGfKTk4cn+aodCX7SLlePQwILpejBW EfoqTyr+ZXA3ObnVHUz1PQGAmDmR0iidnyyfGokbdP8/gX6jdS/+lsPyyJW+PltGoAVX Mr1NqTiPOowZjizOtAxl9LzRHhvWyXdZCE+pTkzjjVtV2GeynY9s8w9+k8aVMsBZ76dc JSAl9fwZnad/q3rl4tK54oG3yAZXa80HUK4f2WcnoPUwjoEGt7gp4hHTyoiDn3beNgjl XZbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:in-reply-to:references :content-transfer-encoding; bh=USU0NBvPu6rvOFvSU/XEODO3u3v3M1MQzaHg3lRgE0Y=; b=GRVgnuMOgahE12tBhN0s/Ff5cDatgQ1btWb/pNrOXegWfkGitsM//uKUMk4vD6MYNh a7CL/LXhNUdP6ECtK9ZEMYakhoP7EMSw2bHwsRxg005Y+qGDy8NRfJ8pX2/tEYMSF8s7 HdyD+yV/ivdYkUGcJpk4+oJpZiuR9HgbA7zMW+L/fUg057pVRz9lQ3ckItyYghBVXMpm iPKOeZNGQ6CQxC5eVe9PbEt//ajD8PZCU6saNvHFk2kRmXTIZ5k0UmDHtWP2ZTvqGqY4 PbjH2URsWCiZM1NBBY6tYGoVA8MqwL/MX1dripStYM7eQ5vTPRMini9nzYJQ7JDf14N9 Q86Q== X-Gm-Message-State: ALQs6tC4UuzWwnD7/dCDJpUWy/RSTK9D/PCwftIjTl7X7R0dnhXz1++g 8gOHmx4w/H8Ffbm1jWx90t5KX9DN X-Google-Smtp-Source: AIpwx4+wkxAO6rt1B88ew5T282ie6HhsoMzBsB0cXG/wxYqVKBSIJoucGM2pf223Ffa8f7MvsGvz4Q== X-Received: by 10.223.153.167 with SMTP id y36mr1705553wrb.136.1523405102639; Tue, 10 Apr 2018 17:05:02 -0700 (PDT) Received: from bidouze.dev.6wind.com. (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id 39sm7626563wry.89.2018.04.10.17.05.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 10 Apr 2018 17:05:01 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Wed, 11 Apr 2018 02:04:19 +0200 Message-Id: X-Mailer: git-send-email 2.11.0 In-Reply-To: References: MIME-Version: 1.0 In-Reply-To: References: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH v5 18/21] ethdev: add private generic device iterator X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 11 Apr 2018 00:05:03 -0000 This iterator can be customized with a comparison function that will trigger a stopping condition. It can be leveraged to write several different iterators that have similar but non-identical purposes. It is private to librte_ether. Signed-off-by: Gaetan Rivet --- lib/librte_ether/Makefile | 1 + lib/librte_ether/eth_private.c | 32 ++++++++++++++++++++++++++++++++ lib/librte_ether/eth_private.h | 26 ++++++++++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 lib/librte_ether/eth_private.c create mode 100644 lib/librte_ether/eth_private.h diff --git a/lib/librte_ether/Makefile b/lib/librte_ether/Makefile index c2f2f7d82..2fa133fbc 100644 --- a/lib/librte_ether/Makefile +++ b/lib/librte_ether/Makefile @@ -18,6 +18,7 @@ EXPORT_MAP := rte_ethdev_version.map LIBABIVER := 9 +SRCS-y += eth_private.c SRCS-y += rte_ethdev.c SRCS-y += rte_flow.c SRCS-y += rte_tm.c diff --git a/lib/librte_ether/eth_private.c b/lib/librte_ether/eth_private.c new file mode 100644 index 000000000..311c5d6b2 --- /dev/null +++ b/lib/librte_ether/eth_private.c @@ -0,0 +1,32 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Gaëtan + */ + +#include "rte_ethdev.h" +#include "eth_private.h" + +struct rte_eth_dev * +eth_find_device(const void *_start, rte_eth_cmp_t cmp, + const void *data) +{ + const struct rte_eth_dev *start = _start; + struct rte_eth_dev *edev; + ptrdiff_t idx; + + /* Avoid Undefined Behaviour */ + if (start != NULL && + (start < &rte_eth_devices[0] || + start > &rte_eth_devices[RTE_MAX_ETHPORTS])) + return NULL; + if (start != NULL) + idx = start - &rte_eth_devices[0] + 1; + else + idx = 0; + for (; idx < RTE_MAX_ETHPORTS; idx++) { + edev = &rte_eth_devices[idx]; + if (cmp(edev, data) == 0) + return edev; + } + return NULL; +} + diff --git a/lib/librte_ether/eth_private.h b/lib/librte_ether/eth_private.h new file mode 100644 index 000000000..c3c831dc9 --- /dev/null +++ b/lib/librte_ether/eth_private.h @@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Gaëtan + */ + +#ifndef _ETH_PRIVATE_H_ +#define _ETH_PRIVATE_H_ + +#include "rte_ethdev.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Generic rte_eth_dev comparison function. */ +typedef int (*rte_eth_cmp_t)(const struct rte_eth_dev *, const void *); + +/* Generic rte_eth_dev iterator. */ +struct rte_eth_dev * +eth_find_device(const void *_start, rte_eth_cmp_t cmp, + const void *data); + +#ifdef __cplusplus +} +#endif + +#endif /* _ETH_PRIVATE_H_ */ -- 2.11.0