From ead3219a64fd77eb957b3184ff01a892427cb9b0 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Tue, 19 Sep 2023 11:15:24 +0200 Subject: [PATCH] PCIe driver: Add function to count PCIe completed descriptors --- fpga/pcie_driver/jfjoch_drv.h | 1 + fpga/pcie_driver/jfjoch_function.c | 6 +++++- fpga/pcie_driver/jfjoch_ioctl.c | 4 ++++ fpga/pcie_driver/jfjoch_ioctl.h | 1 + 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/fpga/pcie_driver/jfjoch_drv.h b/fpga/pcie_driver/jfjoch_drv.h index 508b84cb..12d30bb3 100644 --- a/fpga/pcie_driver/jfjoch_drv.h +++ b/fpga/pcie_driver/jfjoch_drv.h @@ -125,6 +125,7 @@ void jfjoch_load_int_pkt_gen(struct jfjoch_drvdata *drvdata, char* output); void jfjoch_save_int_pkt_gen(struct jfjoch_drvdata *drvdata, const char* input); int jfjoch_load_calibration(struct jfjoch_drvdata *drvdata, struct ActionConfig *config); int jfjoch_run_frame_gen(struct jfjoch_drvdata *drvdata, struct FrameGeneratorConfig *config); +u32 jfjoch_get_c2h_descriptors(struct jfjoch_drvdata *drvdata); u64 jfjoch_read_mac_addr(struct jfjoch_drvdata *drvdata); diff --git a/fpga/pcie_driver/jfjoch_function.c b/fpga/pcie_driver/jfjoch_function.c index 29c82cbc..8ae3464a 100644 --- a/fpga/pcie_driver/jfjoch_function.c +++ b/fpga/pcie_driver/jfjoch_function.c @@ -350,4 +350,8 @@ int jfjoch_run_frame_gen(struct jfjoch_drvdata *drvdata, struct FrameGeneratorCo iowrite32(config->debug, drvdata->bar0 + ADDR_FRAME_GEN_DEBUG); iowrite32(0x1, drvdata->bar0 + ADDR_FRAME_GEN_CTRL); return 0; -} \ No newline at end of file +} + +u32 jfjoch_get_c2h_descriptors(struct jfjoch_drvdata *drvdata) { + return ioread32(drvdata->bar0 + PCIE_OFFSET + (1<<12) + 0x48); +} diff --git a/fpga/pcie_driver/jfjoch_ioctl.c b/fpga/pcie_driver/jfjoch_ioctl.c index 13411599..8c285bab 100644 --- a/fpga/pcie_driver/jfjoch_ioctl.c +++ b/fpga/pcie_driver/jfjoch_ioctl.c @@ -127,6 +127,10 @@ long jfjoch_cdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { } vfree(tmp); return 0; + case IOCTL_JFJOCH_C2H_DMA_DESC: + exchange[0] = jfjoch_get_c2h_descriptors(drvdata); + if (copy_to_user((char *) arg, exchange, sizeof(u32)) != 0) + return -EFAULT; default: return -ENOTTY; } diff --git a/fpga/pcie_driver/jfjoch_ioctl.h b/fpga/pcie_driver/jfjoch_ioctl.h index 4d15f461..d30a0e2e 100644 --- a/fpga/pcie_driver/jfjoch_ioctl.h +++ b/fpga/pcie_driver/jfjoch_ioctl.h @@ -36,5 +36,6 @@ #define IOCTL_JFJOCH_GET_INT_PKT _IOR(IOCTL_JFJOCH_MAGIC, 20, char *) #define IOCTL_JFJOCH_LOAD_CALIB _IOW(IOCTL_JFJOCH_MAGIC, 21, struct ActionConfig) #define IOCTL_JFJOCH_RUN_FRAME_GEN _IOW(IOCTL_JFJOCH_MAGIC, 22, struct FrameGeneratorConfig) +#define IOCTL_JFJOCH_C2H_DMA_DESC _IOR(IOCTL_JFJOCH_MAGIC, 23, uint32_t) #endif //JUNGFRAUJOCH_JFJOCH_IOCTL_H