[dpdk-dev] [PATCH v2 02/12] raw/ifpga_rawdev/base: add irq support
Jerin Jacob Kollanukkaran
jerinj at marvell.com
Fri Aug 2 05:58:05 CEST 2019
> -----Original Message-----
> From: dev <dev-bounces at dpdk.org> On Behalf Of Rosen Xu
> Sent: Friday, August 2, 2019 6:49 AM
> To: dev at dpdk.org
> Cc: ferruh.yigit at intel.com; tianfei.zhang at intel.com; rosen.xu at intel.com;
> andy.pei at intel.com; david.lomartire at intel.com; qi.z.zhang at intel.com;
> xiaolong.ye at intel.com
> Subject: [dpdk-dev] [PATCH v2 02/12] raw/ifpga_rawdev/base: add irq
> support
>
> From: Tianfei zhang <tianfei.zhang at intel.com>
>
> Add irq support for ifpga FME globle error, port error and uint unit.
> We implmented this feature by vfio interrupt mechanism.
>
> Signed-off-by: Tianfei zhang <tianfei.zhang at intel.com>
> ---
> drivers/raw/ifpga_rawdev/base/ifpga_feature_dev.c | 61
> +++++++++++++++++++++++
> drivers/raw/ifpga_rawdev/base/ifpga_fme_error.c | 22 ++++++++
> drivers/raw/ifpga_rawdev/base/ifpga_port.c | 20 ++++++++
> drivers/raw/ifpga_rawdev/base/ifpga_port_error.c | 21 ++++++++
> 4 files changed, 124 insertions(+)
>
> diff --git a/drivers/raw/ifpga_rawdev/base/ifpga_feature_dev.c
> b/drivers/raw/ifpga_rawdev/base/ifpga_feature_dev.c
> index 63c8bcc..6b942e6 100644
> --- a/drivers/raw/ifpga_rawdev/base/ifpga_feature_dev.c
> +++ b/drivers/raw/ifpga_rawdev/base/ifpga_feature_dev.c
> @@ -3,6 +3,7 @@
> */
>
> #include <sys/ioctl.h>
> +#include <rte_vfio.h>
>
> #include "ifpga_feature_dev.h"
>
> @@ -331,3 +332,63 @@ int port_hw_init(struct ifpga_port_hw *port)
> port_hw_uinit(port);
> return ret;
> }
> +
> +/*
> + * FIXME: we should get msix vec count during pci enumeration instead
> +of
> + * below hardcode value.
> + */
> +#define FPGA_MSIX_VEC_COUNT 20
> +/* irq set buffer length for interrupt */ #define MSIX_IRQ_SET_BUF_LEN
> +(sizeof(struct vfio_irq_set) + \
> + sizeof(int) * FPGA_MSIX_VEC_COUNT)
> +
> +/* only support msix for now*/
> +static int vfio_msix_enable_block(s32 vfio_dev_fd, unsigned int vec_start,
> + unsigned int count, s32 *fds)
Isn't better to use generic EAL function for the same?
> +{
> + char irq_set_buf[MSIX_IRQ_SET_BUF_LEN];
> + struct vfio_irq_set *irq_set;
> + int len, ret;
> + int *fd_ptr;
> +
> + len = sizeof(irq_set_buf);
> +
> + irq_set = (struct vfio_irq_set *)irq_set_buf;
> + irq_set->argsz = len;
> + irq_set->count = count;
> + irq_set->flags = VFIO_IRQ_SET_DATA_EVENTFD |
> + VFIO_IRQ_SET_ACTION_TRIGGER;
> + irq_set->index = VFIO_PCI_MSIX_IRQ_INDEX;
> + irq_set->start = vec_start;
> +
> + fd_ptr = (int *)&irq_set->data;
> + memcpy(fd_ptr, fds, sizeof(int) * count);
> +
> + ret = ioctl(vfio_dev_fd, VFIO_DEVICE_SET_IRQS, irq_set);
> + if (ret)
> + printf("Error enabling MSI-X interrupts\n");
> +
> + return ret;
> +}
> +
More information about the dev
mailing list