linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Wu Hao <hao.wu@intel.com>
To: atull@kernel.org, mdf@kernel.org, linux-fpga@vger.kernel.org,
	linux-kernel@vger.kernel.org
Cc: linux-api@vger.kernel.org, luwei.kang@intel.com,
	yi.z.zhang@intel.com, hao.wu@intel.com,
	Tim Whisonant <tim.whisonant@intel.com>,
	Enno Luebbers <enno.luebbers@intel.com>,
	Shiva Rao <shiva.rao@intel.com>,
	Christopher Rauer <christopher.rauer@intel.com>,
	Xiao Guangrong <guangrong.xiao@linux.intel.com>
Subject: [PATCH v7 08/29] fpga: dfl: add dfl_fpga_cdev_find_port
Date: Sat, 30 Jun 2018 08:53:15 +0800	[thread overview]
Message-ID: <1530320016-24712-9-git-send-email-hao.wu@intel.com> (raw)
In-Reply-To: <1530320016-24712-1-git-send-email-hao.wu@intel.com>

For feature devices, we need a method to find the port dedicated
to the device. This patch adds a function dfl_fpga_cdev_find_port
for this purpose. e.g. FPGA Management Engine (FME) Partial
Reconfiguration sub feature, it uses this function to find
dedicated port on the device for PR function implementation.

Signed-off-by: Tim Whisonant <tim.whisonant@intel.com>
Signed-off-by: Enno Luebbers <enno.luebbers@intel.com>
Signed-off-by: Shiva Rao <shiva.rao@intel.com>
Signed-off-by: Christopher Rauer <christopher.rauer@intel.com>
Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com>
Signed-off-by: Wu Hao <hao.wu@intel.com>
Acked-by: Alan Tull <atull@kernel.org>
Acked-by: Moritz Fischer <mdf@kernel.org>
---
v3: s/fpga_for_each_port/fpga_cdev_find_port/
    move fpga_cdev_find_port to fpga-dfl module.
v4: improve description in commit message.
    add comments to remind user to put_device after use this function.
v5: add "dfl_" prefix to functions.
    improve function comments per suggestion from Alan Tull.
    add Acked-by from Alan and Moritz.
v6: reabse.
---
 drivers/fpga/dfl.c | 32 ++++++++++++++++++++++++++++++++
 drivers/fpga/dfl.h | 21 +++++++++++++++++++++
 2 files changed, 53 insertions(+)

diff --git a/drivers/fpga/dfl.c b/drivers/fpga/dfl.c
index b56933c..68e0b45 100644
--- a/drivers/fpga/dfl.c
+++ b/drivers/fpga/dfl.c
@@ -813,6 +813,38 @@ void dfl_fpga_feature_devs_remove(struct dfl_fpga_cdev *cdev)
 }
 EXPORT_SYMBOL_GPL(dfl_fpga_feature_devs_remove);
 
+/**
+ * __dfl_fpga_cdev_find_port - find a port under given container device
+ *
+ * @cdev: container device
+ * @data: data passed to match function
+ * @match: match function used to find specific port from the port device list
+ *
+ * Find a port device under container device. This function needs to be
+ * invoked with lock held.
+ *
+ * Return: pointer to port's platform device if successful, NULL otherwise.
+ *
+ * NOTE: you will need to drop the device reference with put_device() after use.
+ */
+struct platform_device *
+__dfl_fpga_cdev_find_port(struct dfl_fpga_cdev *cdev, void *data,
+			  int (*match)(struct platform_device *, void *))
+{
+	struct dfl_feature_platform_data *pdata;
+	struct platform_device *port_dev;
+
+	list_for_each_entry(pdata, &cdev->port_dev_list, node) {
+		port_dev = pdata->dev;
+
+		if (match(port_dev, data) && get_device(&port_dev->dev))
+			return port_dev;
+	}
+
+	return NULL;
+}
+EXPORT_SYMBOL_GPL(__dfl_fpga_cdev_find_port);
+
 static int __init dfl_fpga_init(void)
 {
 	int ret;
diff --git a/drivers/fpga/dfl.h b/drivers/fpga/dfl.h
index 66c2ade..b4f6525 100644
--- a/drivers/fpga/dfl.h
+++ b/drivers/fpga/dfl.h
@@ -284,4 +284,25 @@ struct dfl_fpga_cdev *
 dfl_fpga_feature_devs_enumerate(struct dfl_fpga_enum_info *info);
 void dfl_fpga_feature_devs_remove(struct dfl_fpga_cdev *cdev);
 
+/*
+ * need to drop the device reference with put_device() after use port platform
+ * device returned by __dfl_fpga_cdev_find_port and dfl_fpga_cdev_find_port
+ * functions.
+ */
+struct platform_device *
+__dfl_fpga_cdev_find_port(struct dfl_fpga_cdev *cdev, void *data,
+			  int (*match)(struct platform_device *, void *));
+
+static inline struct platform_device *
+dfl_fpga_cdev_find_port(struct dfl_fpga_cdev *cdev, void *data,
+			int (*match)(struct platform_device *, void *))
+{
+	struct platform_device *pdev;
+
+	mutex_lock(&cdev->lock);
+	pdev = __dfl_fpga_cdev_find_port(cdev, data, match);
+	mutex_unlock(&cdev->lock);
+
+	return pdev;
+}
 #endif /* __FPGA_DFL_H */
-- 
1.8.3.1


  parent reply	other threads:[~2018-06-30  1:06 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-30  0:53 [PATCH v7 00/29] FPGA Device Feature List (DFL) Device Drivers Wu Hao
2018-06-30  0:53 ` [PATCH v7 01/29] docs: fpga: add a document for FPGA Device Feature List (DFL) Framework Overview Wu Hao
2018-06-30  0:53 ` [PATCH v7 02/29] fpga: mgr: add region_id to fpga_image_info Wu Hao
2018-06-30  0:53 ` [PATCH v7 03/29] fpga: mgr: add status for fpga-manager Wu Hao
2018-06-30  0:53 ` [PATCH v7 04/29] fpga: mgr: add compat_id support Wu Hao
2018-06-30  0:53 ` [PATCH v7 05/29] fpga: region: " Wu Hao
2018-06-30  0:53 ` [PATCH v7 06/29] fpga: add device feature list support Wu Hao
2018-06-30  0:53 ` [PATCH v7 07/29] fpga: dfl: add chardev support for feature devices Wu Hao
2018-06-30  0:53 ` Wu Hao [this message]
2018-06-30  0:53 ` [PATCH v7 09/29] fpga: dfl: add feature device infrastructure Wu Hao
2018-06-30  0:53 ` [PATCH v7 10/29] fpga: dfl: add dfl_fpga_port_ops support Wu Hao
2018-06-30  0:53 ` [PATCH v7 11/29] fpga: dfl: add dfl_fpga_check_port_id function Wu Hao
2018-06-30  0:53 ` [PATCH v7 12/29] fpga: add FPGA DFL PCIe device driver Wu Hao
2018-06-30  0:53 ` [PATCH v7 13/29] fpga: dfl-pci: add enumeration for feature devices Wu Hao
2018-06-30  0:53 ` [PATCH v7 14/29] fpga: dfl: add FPGA Management Engine driver basic framework Wu Hao
2018-06-30  0:53 ` [PATCH v7 15/29] fpga: dfl: fme: add header sub feature support Wu Hao
2018-06-30  0:53 ` [PATCH v7 16/29] fpga: dfl: fme: add DFL_FPGA_GET_API_VERSION/CHECK_EXTENSION ioctls support Wu Hao
2018-06-30  0:53 ` [PATCH v7 17/29] fpga: dfl: fme: add partial reconfiguration sub feature support Wu Hao
2018-06-30  0:53 ` [PATCH v7 18/29] fpga: dfl: add fpga manager platform driver for FME Wu Hao
2018-06-30  0:53 ` [PATCH v7 19/29] fpga: dfl: fme-mgr: add compat_id support Wu Hao
2018-06-30  0:53 ` [PATCH v7 20/29] fpga: dfl: add fpga bridge platform driver for FME Wu Hao
2018-06-30  0:53 ` [PATCH v7 21/29] fpga: dfl: add fpga region " Wu Hao
2018-06-30  0:53 ` [PATCH v7 22/29] fpga: dfl: fme-region: add support for compat_id Wu Hao
2018-06-30  0:53 ` [PATCH v7 23/29] fpga: dfl: add FPGA Accelerated Function Unit driver basic framework Wu Hao
2018-06-30  0:53 ` [PATCH v7 24/29] fpga: dfl: afu: add port ops support Wu Hao
2018-06-30  0:53 ` [PATCH v7 25/29] fpga: dfl: afu: add header sub feature support Wu Hao
2018-06-30  0:53 ` [PATCH v7 26/29] fpga: dfl: afu: add DFL_FPGA_GET_API_VERSION/CHECK_EXTENSION ioctls support Wu Hao
2018-06-30  0:53 ` [PATCH v7 27/29] fpga: dfl: afu: add afu sub feature support Wu Hao
2018-06-30  0:53 ` [PATCH v7 28/29] fpga: dfl: afu: add DFL_FPGA_PORT_DMA_MAP/UNMAP ioctls support Wu Hao
2018-06-30  0:53 ` [PATCH v7 29/29] MAINTAINERS: add entry for FPGA DFL drivers Wu Hao
2018-07-02 13:09 ` [PATCH v7 00/29] FPGA Device Feature List (DFL) Device Drivers Alan Tull
2018-07-09 16:34 ` Alan Tull
2018-07-15 12:01   ` Greg Kroah-Hartman
2018-07-16 14:55     ` Alan Tull

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1530320016-24712-9-git-send-email-hao.wu@intel.com \
    --to=hao.wu@intel.com \
    --cc=atull@kernel.org \
    --cc=christopher.rauer@intel.com \
    --cc=enno.luebbers@intel.com \
    --cc=guangrong.xiao@linux.intel.com \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-fpga@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luwei.kang@intel.com \
    --cc=mdf@kernel.org \
    --cc=shiva.rao@intel.com \
    --cc=tim.whisonant@intel.com \
    --cc=yi.z.zhang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).