src/dpdk/lib/librte_eal/linux/eal_interrupts.c
static int
vfio_enable_intx(const struct rte_intr_handle *intr_handle) {
	struct vfio_irq_set *irq_set;
	char irq_set_buf[IRQ_SET_BUF_LEN];
	int len, ret;
	int *fd_ptr;

	len = sizeof(irq_set_buf);

	/* enable INTx */
	irq_set = (struct vfio_irq_set *) irq_set_buf;
	irq_set->argsz = len;
	irq_set->count = 1;
	irq_set->flags = VFIO_IRQ_SET_DATA_EVENTFD | VFIO_IRQ_SET_ACTION_TRIGGER;
	irq_set->index = VFIO_PCI_INTX_IRQ_INDEX;
	irq_set->start = 0;
	fd_ptr = (int *) &irq_set->data;
	*fd_ptr = intr_handle->fd;

	ret = ioctl(intr_handle->vfio_dev_fd, VFIO_DEVICE_SET_IRQS, irq_set);

	if (ret) {
		RTE_LOG(ERR, EAL, "Error enabling INTx interrupts for fd %d\n",
						intr_handle->fd);
		return -1;
	}

	/* unmask INTx after enabling */
	memset(irq_set, 0, len);
	len = sizeof(struct vfio_irq_set);
	irq_set->argsz = len;
	irq_set->count = 1;
	irq_set->flags = VFIO_IRQ_SET_DATA_NONE | VFIO_IRQ_SET_ACTION_UNMASK;
	irq_set->index = VFIO_PCI_INTX_IRQ_INDEX;
	irq_set->start = 0;

	ret = ioctl(intr_handle->vfio_dev_fd, VFIO_DEVICE_SET_IRQS, irq_set);

	if (ret) {
		RTE_LOG(ERR, EAL, "Error unmasking INTx interrupts for fd %d\n",
						intr_handle->fd);
		return -1;
	}
	return 0;
}
/* enable legacy (INTx) interrupts */
enable legacy (INTx) interrupts
enable legacy ( INTx ) interrupts
static int
vfio_enable_intx(const struct rte_intr_handle *intr_handle) {
	struct vfio_irq_set *irq_set;
	char irq_set_buf[IRQ_SET_BUF_LEN];
	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 = 1;
	irq_set->flags = VFIO_IRQ_SET_DATA_EVENTFD | VFIO_IRQ_SET_ACTION_TRIGGER;
	irq_set->index = VFIO_PCI_INTX_IRQ_INDEX;
	irq_set->start = 0;
	fd_ptr = (int *) &irq_set->data;
	*fd_ptr = intr_handle->fd;
	ret = ioctl(intr_handle->vfio_dev_fd, VFIO_DEVICE_SET_IRQS, irq_set);
	if (ret) {
		RTE_LOG(ERR, EAL, "Error enabling INTx interrupts for fd %d\n",
						intr_handle->fd);
		return -1;
	}
	memset(irq_set, 0, len);
	len = sizeof(struct vfio_irq_set);
	irq_set->argsz = len;
	irq_set->count = 1;
	irq_set->flags = VFIO_IRQ_SET_DATA_NONE | VFIO_IRQ_SET_ACTION_UNMASK;
	irq_set->index = VFIO_PCI_INTX_IRQ_INDEX;
	irq_set->start = 0;
	ret = ioctl(intr_handle->vfio_dev_fd, VFIO_DEVICE_SET_IRQS, irq_set);
	if (ret) {
		RTE_LOG(ERR, EAL, "Error unmasking INTx interrupts for fd %d\n",
						intr_handle->fd);
		return -1;
	}
	return 0;
}
static int vfio_enable_intx ( const struct rte_intr_handle * intr_handle ) { struct vfio_irq_set * irq_set ; char irq_set_buf [ IRQ_SET_BUF_LEN ] ; 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 = 1 ; irq_set -> flags = VFIO_IRQ_SET_DATA_EVENTFD | VFIO_IRQ_SET_ACTION_TRIGGER ; irq_set -> index = VFIO_PCI_INTX_IRQ_INDEX ; irq_set -> start = 0 ; fd_ptr = ( int * ) & irq_set -> data ; * fd_ptr = intr_handle -> fd ; ret = ioctl ( intr_handle -> vfio_dev_fd , VFIO_DEVICE_SET_IRQS , irq_set ) ; if ( ret ) { RTE_LOG ( ERR , EAL , " \n " , intr_handle -> fd ) ; return -1 ; } memset ( irq_set , 0 , len ) ; len = sizeof ( struct vfio_irq_set ) ; irq_set -> argsz = len ; irq_set -> count = 1 ; irq_set -> flags = VFIO_IRQ_SET_DATA_NONE | VFIO_IRQ_SET_ACTION_UNMASK ; irq_set -> index = VFIO_PCI_INTX_IRQ_INDEX ; irq_set -> start = 0 ; ret = ioctl ( intr_handle -> vfio_dev_fd , VFIO_DEVICE_SET_IRQS , irq_set ) ; if ( ret ) { RTE_LOG ( ERR , EAL , " \n " , intr_handle -> fd ) ; return -1 ; } return 0 ; }
enable legacy (INTx) interrupts
enable legacy ( INTx ) interrupts
/* enable INTx */ /* unmask INTx after enabling */