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