From b23cb7814213a2e586bb59878e646a1f0f5aaf31 Mon Sep 17 00:00:00 2001
From: sujathabanoth-xlnx <sujatha.gulgul@gmail.com>
Date: Fri, 21 Oct 2022 19:35:19 +0530
Subject: [PATCH] Integrate PR
 (https://github.com/Xilinx/dma_ip_drivers/pull/180) to enable XRT stack to
 get the user interrupt index from qdma driver

Integrate PR (https://github.com/Xilinx/dma_ip_drivers/pull/180) to enable XRT stack to get the user interrupt index from qdma driver
---
 QDMA/linux-kernel/driver/libqdma/libqdma_export.h | 12 +++++++++++-
 QDMA/linux-kernel/driver/libqdma/qdma_intr.c      |  8 +++++++-
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/QDMA/linux-kernel/driver/libqdma/libqdma_export.h b/QDMA/linux-kernel/driver/libqdma/libqdma_export.h
index 1ed6fba..f9b2eb3 100644
--- a/QDMA/linux-kernel/driver/libqdma/libqdma_export.h
+++ b/QDMA/linux-kernel/driver/libqdma/libqdma_export.h
@@ -470,6 +470,7 @@ struct qdma_dev_conf {
 	u32 bdf;
 	/** index of device in device list */
 	u32 idx;
+#ifndef __XRT__
 	/**
 	 *  @brief  user interrupt, if null, default libqdma handler is used
 	 *
@@ -477,7 +478,16 @@ struct qdma_dev_conf {
 	 *  @param uld		upper layer data, i.e. callback data
 	 */
 	void (*fp_user_isr_handler)(unsigned long dev_hndl, unsigned long uld);
-
+#else
+	/**
+	 *  @brief  user interrupt, if null, default libqdma handler is used
+	 *
+	 *  @param dev_hndl	Device Handler
+	 *  @param irq_index    Interrupt index
+	 *  @param uld		upper layer data, i.e. callback data
+	 */
+	void (*fp_user_isr_handler)(unsigned long dev_hndl,int irq_index, unsigned long uld);
+#endif
 	/**
 	 *  @brief  Q interrupt top,
 	 *  per-device addtional handling code
diff --git a/QDMA/linux-kernel/driver/libqdma/qdma_intr.c b/QDMA/linux-kernel/driver/libqdma/qdma_intr.c
index f204299..8de030d 100644
--- a/QDMA/linux-kernel/driver/libqdma/qdma_intr.c
+++ b/QDMA/linux-kernel/driver/libqdma/qdma_intr.c
@@ -119,9 +119,15 @@ static irqreturn_t user_intr_handler(int irq_index, int irq, void *dev_id)
 	pr_info("User IRQ fired on Funtion#%d: index=%d, vector=%d\n",
 		xdev->func_id, irq_index, irq);
 
-	if (xdev->conf.fp_user_isr_handler)
+	if (xdev->conf.fp_user_isr_handler) {
+#ifndef __XRT__
 		xdev->conf.fp_user_isr_handler((unsigned long)xdev,
 						xdev->conf.uld);
+#else
+		xdev->conf.fp_user_isr_handler((unsigned long)xdev,
+						irq_index, xdev->conf.uld);
+#endif
+	}
 
 	return IRQ_HANDLED;
 }
-- 
GitLab