From patchwork Thu Jul 5 11:48:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ga=C3=ABtan_Rivet?= X-Patchwork-Id: 42354 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 127AB1BF97; Thu, 5 Jul 2018 13:49:45 +0200 (CEST) Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) by dpdk.org (Postfix) with ESMTP id 1D8B91BEB9 for ; Thu, 5 Jul 2018 13:49:22 +0200 (CEST) Received: by mail-wr1-f46.google.com with SMTP id k7-v6so1015618wrq.0 for ; Thu, 05 Jul 2018 04:49:22 -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:content-transfer-encoding; bh=QULDkel2GQDzMNjd+rImHB2X8ULZyndn6CAHpB0vDoI=; b=sfDP3qaIK8dhP9gJ2JMHb/3QgmWoAjxhC2N0jT3Ez2LSezKhqE0C110OGRUWQU102W W8EwQx+WmYeQ6NQS3Ke9g0mcyZa6viQVGtHh8xQEfrj7mOAayFjbR8x1vx6HPfDlvipq W8oqFit2lPvuyDVm7SvJOQOnuFEYdYhmj/Hco2+kp4HFHoktu8A6+Dz43+xTo6ETq3c5 XFJr6kb9hBmaVOWn2TJustDIs62JocYtyrrtcwUVoEUrRVlhQpOcsQ1RThiSdUNg7/Gj v5gpaBrioQBCKT/wbY+Kgj+VTqun0UdkG8iw/CVNPD+NjFLS9QQwipbOyiiumDdigh9i 682A== 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:content-transfer-encoding; bh=QULDkel2GQDzMNjd+rImHB2X8ULZyndn6CAHpB0vDoI=; b=jvYK/Js/Wz2p41hij8mkcDg3h82snNcB416SvBQiVQ9YW0bmxtJuiClig4gmg55BwD GebIktMg2uk5DwULwz9xNLic4RPCEocrpKRb7LDWbQ2HSS8LVLAaz7mq86knLMv65Vv4 WwVqts32nVDZ37CdnnUe2XBfBi75RQqY/L5yeeJk9CNmpyIulDTbAwz7badAedcHoCp7 DbgUDM4DFtD6WPWo1lvVqPHlD2E6oHsbkp2QgWoKq1enUGF2SV59VtE7BKd7hoKpM4D7 pmYHMVuI5UJwyBKWCKBp9cK1EHZ9nNz8PCfB3YNxlr4eu17o08I13ER50qZcmQPM8W5Y 53ZA== X-Gm-Message-State: APt69E1WG4pI8mJHoTuFOrJWzASd7G7qlpZ/khU9fTVEm3lEgDTQn8XM 5xw4tlM/D5rF+ZRpzHQRGGVkdPLR X-Google-Smtp-Source: AAOMgpc1oY90BoqHJm9KAyG2TUaaLPQjYVY4EattbXqRRsux7SYdg+MPUh67VNaJLBoEpiB1HzKTKw== X-Received: by 2002:adf:b587:: with SMTP id c7-v6mr4224610wre.141.1530791361454; Thu, 05 Jul 2018 04:49:21 -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 o42-v6sm15809183wrc.50.2018.07.05.04.49.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 05 Jul 2018 04:49:20 -0700 (PDT) From: Gaetan Rivet To: dev@dpdk.org Cc: Gaetan Rivet Date: Thu, 5 Jul 2018 13:48:26 +0200 Message-Id: <31185c998c699e07d2e97d20a1810dfb55e7fb55.1530791217.git.gaetan.rivet@6wind.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: References: MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v10 19/27] 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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_ethdev. Signed-off-by: Gaetan Rivet --- lib/librte_ethdev/Makefile | 1 + lib/librte_ethdev/eth_private.c | 31 +++++++++++++++++++++++++++++++ lib/librte_ethdev/eth_private.h | 26 ++++++++++++++++++++++++++ lib/librte_ethdev/meson.build | 3 ++- 4 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 lib/librte_ethdev/eth_private.c create mode 100644 lib/librte_ethdev/eth_private.h diff --git a/lib/librte_ethdev/Makefile b/lib/librte_ethdev/Makefile index c2f2f7d82..2fa133fbc 100644 --- a/lib/librte_ethdev/Makefile +++ b/lib/librte_ethdev/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_ethdev/eth_private.c b/lib/librte_ethdev/eth_private.c new file mode 100644 index 000000000..d565568a0 --- /dev/null +++ b/lib/librte_ethdev/eth_private.c @@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Gaëtan Rivet + */ + +#include "rte_ethdev.h" +#include "eth_private.h" + +struct rte_eth_dev * +eth_find_device(const struct rte_eth_dev *start, rte_eth_cmp_t cmp, + const void *data) +{ + 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_ethdev/eth_private.h b/lib/librte_ethdev/eth_private.h new file mode 100644 index 000000000..0f5c6d5c4 --- /dev/null +++ b/lib/librte_ethdev/eth_private.h @@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Gaëtan Rivet + */ + +#ifndef _RTE_ETH_PRIVATE_H_ +#define _RTE_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 struct rte_eth_dev *_start, rte_eth_cmp_t cmp, + const void *data); + +#ifdef __cplusplus +} +#endif + +#endif /* _RTE_ETH_PRIVATE_H_ */ diff --git a/lib/librte_ethdev/meson.build b/lib/librte_ethdev/meson.build index aed5d2265..a0c001847 100644 --- a/lib/librte_ethdev/meson.build +++ b/lib/librte_ethdev/meson.build @@ -4,7 +4,8 @@ name = 'ethdev' version = 9 allow_experimental_apis = true -sources = files('ethdev_profile.c', +sources = files('eth_private.c', + 'ethdev_profile.c', 'rte_ethdev.c', 'rte_flow.c', 'rte_mtr.c',