All of lore.kernel.org
 help / color / mirror / Atom feed
From: mgross@linux.intel.com
To: markgross@kernel.org, mgross@linux.intel.com, arnd@arndb.de,
	bp@suse.de, damien.lemoal@wdc.com, dragan.cvetic@xilinx.com,
	gregkh@linuxfoundation.org, corbet@lwn.net,
	palmerdabbelt@google.com, paul.walmsley@sifive.com,
	peng.fan@nxp.com, robh+dt@kernel.org, shawnguo@kernel.org,
	jassisinghbrar@gmail.com
Cc: linux-kernel@vger.kernel.org,
	Srikanth Thokala <srikanth.thokala@intel.com>
Subject: [PATCH v6 16/34] misc: xlink-pcie: Add asynchronous event notification support for XLink
Date: Fri, 12 Feb 2021 14:22:46 -0800	[thread overview]
Message-ID: <20210212222304.110194-17-mgross@linux.intel.com> (raw)
In-Reply-To: <20210212222304.110194-1-mgross@linux.intel.com>

From: Srikanth Thokala <srikanth.thokala@intel.com>

Add support to notify XLink layer upon PCIe link UP/DOWN events

Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: Mark Gross <mgross@linux.intel.com>
Signed-off-by: Mark Gross <mgross@linux.intel.com>
Signed-off-by: Srikanth Thokala <srikanth.thokala@intel.com>
---
 drivers/misc/xlink-pcie/common/core.h      |  3 ++
 drivers/misc/xlink-pcie/common/interface.c | 17 ++++++++++
 drivers/misc/xlink-pcie/local_host/core.c  | 11 +++++++
 drivers/misc/xlink-pcie/remote_host/main.c |  3 ++
 drivers/misc/xlink-pcie/remote_host/pci.c  | 36 ++++++++++++++++++++++
 drivers/misc/xlink-pcie/remote_host/pci.h  |  3 ++
 include/linux/xlink_drv_inf.h              | 12 ++++++++
 7 files changed, 85 insertions(+)

diff --git a/drivers/misc/xlink-pcie/common/core.h b/drivers/misc/xlink-pcie/common/core.h
index f43c175b7a48..87b302f87cfd 100644
--- a/drivers/misc/xlink-pcie/common/core.h
+++ b/drivers/misc/xlink-pcie/common/core.h
@@ -239,4 +239,7 @@ int intel_xpcie_pci_connect_device(u32 id);
 int intel_xpcie_pci_read(u32 id, void *data, size_t *size, u32 timeout);
 int intel_xpcie_pci_write(u32 id, void *data, size_t *size, u32 timeout);
 int intel_xpcie_pci_reset_device(u32 id);
+int intel_xpcie_pci_register_device_event(u32 sw_device_id,
+					  xlink_device_event event_notif_fn);
+int intel_xpcie_pci_unregister_device_event(u32 sw_device_id);
 #endif /* XPCIE_CORE_HEADER_ */
diff --git a/drivers/misc/xlink-pcie/common/interface.c b/drivers/misc/xlink-pcie/common/interface.c
index fcc69a940a4c..5d30c27dd18d 100644
--- a/drivers/misc/xlink-pcie/common/interface.c
+++ b/drivers/misc/xlink-pcie/common/interface.c
@@ -105,3 +105,20 @@ int xlink_pcie_reset_device(u32 sw_device_id)
 	return intel_xpcie_pci_reset_device(sw_device_id);
 }
 EXPORT_SYMBOL_GPL(xlink_pcie_reset_device);
+
+int xlink_pcie_register_device_event(u32 sw_device_id,
+				     xlink_device_event event_notif_fn)
+{
+	if (!event_notif_fn)
+		return -EINVAL;
+
+	return intel_xpcie_pci_register_device_event(sw_device_id,
+						     event_notif_fn);
+}
+EXPORT_SYMBOL_GPL(xlink_pcie_register_device_event);
+
+int xlink_pcie_unregister_device_event(u32 sw_device_id)
+{
+	return intel_xpcie_pci_unregister_device_event(sw_device_id);
+}
+EXPORT_SYMBOL_GPL(xlink_pcie_unregister_device_event);
diff --git a/drivers/misc/xlink-pcie/local_host/core.c b/drivers/misc/xlink-pcie/local_host/core.c
index 2c4e29bce7f7..bfb14c18c24c 100644
--- a/drivers/misc/xlink-pcie/local_host/core.c
+++ b/drivers/misc/xlink-pcie/local_host/core.c
@@ -804,3 +804,14 @@ int intel_xpcie_pci_reset_device(u32 id)
 {
 	return 0;
 }
+
+int intel_xpcie_pci_register_device_event(u32 sw_device_id,
+					  xlink_device_event event_notif_fn)
+{
+	return 0;
+}
+
+int intel_xpcie_pci_unregister_device_event(u32 sw_device_id)
+{
+	return 0;
+}
diff --git a/drivers/misc/xlink-pcie/remote_host/main.c b/drivers/misc/xlink-pcie/remote_host/main.c
index ed1a431ed5d4..efc9143a2fac 100644
--- a/drivers/misc/xlink-pcie/remote_host/main.c
+++ b/drivers/misc/xlink-pcie/remote_host/main.c
@@ -53,6 +53,8 @@ static int intel_xpcie_probe(struct pci_dev *pdev,
 	if (new_device)
 		intel_xpcie_list_add_device(xdev);
 
+	intel_xpcie_pci_notify_event(xdev, NOTIFY_DEVICE_CONNECTED);
+
 	return ret;
 }
 
@@ -62,6 +64,7 @@ static void intel_xpcie_remove(struct pci_dev *pdev)
 
 	if (xdev) {
 		intel_xpcie_pci_cleanup(xdev);
+		intel_xpcie_pci_notify_event(xdev, NOTIFY_DEVICE_DISCONNECTED);
 		intel_xpcie_remove_device(xdev);
 	}
 }
diff --git a/drivers/misc/xlink-pcie/remote_host/pci.c b/drivers/misc/xlink-pcie/remote_host/pci.c
index 71cbe779d1bc..6a79782b983e 100644
--- a/drivers/misc/xlink-pcie/remote_host/pci.c
+++ b/drivers/misc/xlink-pcie/remote_host/pci.c
@@ -6,6 +6,7 @@
  */
 
 #include <linux/mutex.h>
+#include <linux/pci.h>
 #include <linux/sched.h>
 #include <linux/wait.h>
 #include <linux/workqueue.h>
@@ -485,3 +486,38 @@ int intel_xpcie_pci_reset_device(u32 id)
 
 	return intel_xpcie_pci_prepare_dev_reset(xdev, true);
 }
+
+int intel_xpcie_pci_register_device_event(u32 sw_device_id,
+					  xlink_device_event event_notif_fn)
+{
+	struct xpcie_dev *xdev = intel_xpcie_get_device_by_id(sw_device_id);
+
+	if (!xdev)
+		return -ENOMEM;
+
+	xdev->event_fn = event_notif_fn;
+
+	return 0;
+}
+
+int intel_xpcie_pci_unregister_device_event(u32 sw_device_id)
+{
+	struct xpcie_dev *xdev = intel_xpcie_get_device_by_id(sw_device_id);
+
+	if (!xdev)
+		return -ENOMEM;
+
+	xdev->event_fn = NULL;
+
+	return 0;
+}
+
+void intel_xpcie_pci_notify_event(struct xpcie_dev *xdev,
+				  enum xlink_device_event_type event_type)
+{
+	if (event_type >= NUM_EVENT_TYPE)
+		return;
+
+	if (xdev->event_fn)
+		xdev->event_fn(xdev->devid, event_type);
+}
diff --git a/drivers/misc/xlink-pcie/remote_host/pci.h b/drivers/misc/xlink-pcie/remote_host/pci.h
index bd6b01cc58b8..b082bfb73e4f 100644
--- a/drivers/misc/xlink-pcie/remote_host/pci.h
+++ b/drivers/misc/xlink-pcie/remote_host/pci.h
@@ -36,6 +36,7 @@ struct xpcie_dev {
 	irq_handler_t core_irq_callback;
 
 	struct xpcie xpcie;
+	xlink_device_event event_fn;
 };
 
 static inline struct device *xpcie_to_dev(struct xpcie *xpcie)
@@ -58,5 +59,7 @@ struct xpcie_dev *intel_xpcie_create_device(u32 sw_device_id,
 void intel_xpcie_remove_device(struct xpcie_dev *xdev);
 void intel_xpcie_list_add_device(struct xpcie_dev *xdev);
 void intel_xpcie_list_del_device(struct xpcie_dev *xdev);
+void intel_xpcie_pci_notify_event(struct xpcie_dev *xdev,
+				  enum xlink_device_event_type event_type);
 
 #endif /* XPCIE_PCI_HEADER_ */
diff --git a/include/linux/xlink_drv_inf.h b/include/linux/xlink_drv_inf.h
index 8ffbaafecc88..f20f69bd879a 100644
--- a/include/linux/xlink_drv_inf.h
+++ b/include/linux/xlink_drv_inf.h
@@ -42,6 +42,15 @@ enum _xlink_device_status {
 	_XLINK_DEV_READY
 };
 
+enum xlink_device_event_type {
+	NOTIFY_DEVICE_DISCONNECTED,
+	NOTIFY_DEVICE_CONNECTED,
+	NUM_EVENT_TYPE
+};
+
+typedef int (*xlink_device_event)(u32 sw_device_id,
+				  enum xlink_device_event_type event_type);
+
 int xlink_pcie_get_device_list(u32 *sw_device_id_list,
 			       u32 *num_devices);
 int xlink_pcie_get_device_name(u32 sw_device_id, char *device_name,
@@ -55,4 +64,7 @@ int xlink_pcie_read(u32 sw_device_id, void *data, size_t *const size,
 int xlink_pcie_write(u32 sw_device_id, void *data, size_t *const size,
 		     u32 timeout);
 int xlink_pcie_reset_device(u32 sw_device_id);
+int xlink_pcie_register_device_event(u32 sw_device_id,
+				     xlink_device_event event_notif_fn);
+int xlink_pcie_unregister_device_event(u32 sw_device_id);
 #endif
-- 
2.17.1


  parent reply	other threads:[~2021-02-12 22:40 UTC|newest]

Thread overview: 70+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-12 22:22 [PATCH v6 00/34] Intel Vision Processing base enabling mgross
2021-02-12 22:22 ` [PATCH v6 01/34] Add Vision Processing Unit (VPU) documentation mgross
2021-02-12 22:22 ` [PATCH v6 02/34] dt-bindings: mailbox: Add Intel VPU IPC mailbox bindings mgross
2021-03-05 20:50   ` Rob Herring
2021-02-12 22:22 ` [PATCH v6 03/34] mailbox: vpu-ipc-mailbox: Add support for Intel VPU IPC mailbox mgross
2021-02-15  4:54   ` Jassi Brar
2021-02-18 12:02     ` Alessandrelli, Daniele
2021-02-18 21:09       ` Jassi Brar
2021-02-18 22:40         ` mark gross
2021-02-12 22:22 ` [PATCH v6 04/34] dt-bindings: Add bindings for Keem Bay IPC driver mgross
2021-03-05 21:01   ` Rob Herring
2021-03-08 20:20     ` mark gross
2021-04-12 21:24       ` Jassi Brar
2021-04-20 22:14         ` mark gross
2021-04-21 13:55           ` mark gross
2021-04-21 14:05             ` Jassi Brar
2021-04-21 15:29               ` Alessandrelli, Daniele
2021-02-12 22:22 ` [PATCH v6 05/34] keembay-ipc: Add Keem Bay IPC module mgross
2021-02-12 22:22 ` [PATCH v6 06/34] dt-bindings: Add bindings for Keem Bay VPU IPC driver mgross
2021-02-12 22:22 ` [PATCH v6 07/34] keembay-vpu-ipc: Add Keem Bay VPU IPC module mgross
2021-02-12 22:22 ` [PATCH v6 08/34] misc: xlink-pcie: Add documentation for XLink PCIe driver mgross
2021-02-12 22:22 ` [PATCH v6 09/34] misc: xlink-pcie: lh: Add PCIe EPF driver for Local Host mgross
2021-02-12 22:22 ` [PATCH v6 10/34] misc: xlink-pcie: lh: Add PCIe EP DMA functionality mgross
2021-02-12 22:22 ` [PATCH v6 11/34] misc: xlink-pcie: lh: Add core communication logic mgross
2021-02-12 22:22 ` [PATCH v6 12/34] misc: xlink-pcie: lh: Prepare changes for adding remote host driver mgross
2021-02-12 22:22 ` [PATCH v6 13/34] misc: xlink-pcie: rh: Add PCIe EP driver for Remote Host mgross
2021-02-12 22:22 ` [PATCH v6 14/34] misc: xlink-pcie: rh: Add core communication logic mgross
2021-02-12 22:22 ` [PATCH v6 15/34] misc: xlink-pcie: Add XLink API interface mgross
2021-02-12 22:22 ` mgross [this message]
2021-02-12 22:22 ` [PATCH v6 17/34] xlink-ipc: Add xlink ipc device tree bindings mgross
2021-03-05 21:11   ` Rob Herring
2021-02-12 22:22 ` [PATCH v6 18/34] xlink-ipc: Add xlink ipc driver mgross
2021-02-12 22:22 ` [PATCH v6 19/34] xlink-core: Add xlink core device tree bindings mgross
2021-03-05 21:03   ` Rob Herring
2021-03-08 20:31     ` mark gross
2021-04-12 21:32   ` Dave Hansen
2021-04-20 22:08     ` Gross, Mark
2021-02-12 22:22 ` [PATCH v6 20/34] xlink-core: Add xlink core driver xLink mgross
2021-02-14 17:52   ` Randy Dunlap
2021-02-17 23:29     ` mark gross
2021-02-12 22:22 ` [PATCH v6 21/34] xlink-core: Enable xlink protocol over pcie mgross
2021-02-12 22:22 ` [PATCH v6 22/34] xlink-core: Enable VPU IP management and runtime control mgross
2021-02-12 22:22 ` [PATCH v6 23/34] xlink-core: add async channel and events mgross
2021-02-12 22:22 ` [PATCH v6 24/34] dt-bindings: misc: Add Keem Bay vpumgr mgross
2021-02-12 22:22 ` [PATCH v6 25/34] misc: Add Keem Bay VPU manager mgross
2021-02-14 17:39   ` Randy Dunlap
2021-02-17 23:30     ` mark gross
2021-02-12 22:22 ` [PATCH v6 26/34] dt-bindings: misc: intel_tsens: Add tsens thermal bindings documentation mgross
2021-02-12 22:22 ` [PATCH v6 27/34] misc: Tsens ARM host thermal driver mgross
2021-02-14 17:44   ` Randy Dunlap
2021-02-17 23:33     ` mark gross
2021-02-12 22:22 ` [PATCH v6 28/34] misc: Intel tsens IA host driver mgross
2021-02-14 17:45   ` Randy Dunlap
2021-02-17 23:34     ` mark gross
2021-02-12 22:22 ` [PATCH v6 29/34] Intel tsens i2c slave driver mgross
2021-02-14 17:41   ` Randy Dunlap
2021-02-17 23:35     ` mark gross
2021-02-12 22:23 ` [PATCH v6 30/34] misc:intel_tsens: Intel Keem Bay tsens driver mgross
2021-02-14 17:42   ` Randy Dunlap
2021-02-17 23:36     ` mark gross
2021-02-12 22:23 ` [PATCH v6 31/34] Intel Keembay XLink SMBus driver mgross
2021-02-12 22:23 ` [PATCH v6 32/34] dt-bindings: misc: hddl_dev: Add hddl device management documentation mgross
2021-03-05 21:20   ` Rob Herring
2021-02-12 22:23 ` [PATCH v6 33/34] misc: Hddl device management for local host mgross
2021-02-14 17:47   ` Randy Dunlap
2021-02-17 23:38     ` mark gross
2021-02-12 22:23 ` [PATCH v6 34/34] misc: HDDL device management for IA host mgross
2021-02-14 17:48   ` Randy Dunlap
2021-02-17 23:39     ` mark gross
2021-07-09 18:17 ` [PATCH v6 00/34] Intel Vision Processing base enabling mark gross

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=20210212222304.110194-17-mgross@linux.intel.com \
    --to=mgross@linux.intel.com \
    --cc=arnd@arndb.de \
    --cc=bp@suse.de \
    --cc=corbet@lwn.net \
    --cc=damien.lemoal@wdc.com \
    --cc=dragan.cvetic@xilinx.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jassisinghbrar@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=markgross@kernel.org \
    --cc=palmerdabbelt@google.com \
    --cc=paul.walmsley@sifive.com \
    --cc=peng.fan@nxp.com \
    --cc=robh+dt@kernel.org \
    --cc=shawnguo@kernel.org \
    --cc=srikanth.thokala@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.