zoukankan      html  css  js  c++  java
  • vfio_enable_intx

    /* 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);
    
            /* 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
    ",
                                                    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
    ",
                                                    intr_handle->fd);
                    return -1;
            }
            return 0;
    }
    
    /* disable legacy (INTx) interrupts */
    static int
    vfio_disable_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;
    
            len = sizeof(struct vfio_irq_set);
    
            /* mask interrupts before disabling */
            irq_set = (struct vfio_irq_set *) irq_set_buf;
            irq_set->argsz = len;
            irq_set->count = 1;
            irq_set->flags = VFIO_IRQ_SET_DATA_NONE | VFIO_IRQ_SET_ACTION_MASK;
            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 masking INTx interrupts for fd %d
    ",
                                                    intr_handle->fd);
                    return -1;
            }
    
            /* disable INTx*/
            memset(irq_set, 0, len);
            irq_set->argsz = len;
            irq_set->count = 0;
            irq_set->flags = VFIO_IRQ_SET_DATA_NONE | VFIO_IRQ_SET_ACTION_TRIGGER;
            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 disabling INTx interrupts for fd %d
    ", intr_handle->fd);
                    return -1;
            }
            return 0;
    }
  • 相关阅读:
    leetcode--Populating Next Right Pointers in Each Node II
    leetcode—Populating Next Right Pointers in Each Node
    Pascal's Triangle II
    leetcode—pascal triangle
    leetcode—triangle
    October 23rd, 2017 Week 43rd Monday
    October 22nd, 2017 Week 43rd Sunday
    October 21st 2017 Week 42nd Saturday
    October 20th 2017 Week 42nd Friday
    October 19th 2017 Week 42nd Thursday
  • 原文地址:https://www.cnblogs.com/dream397/p/13567449.html
Copyright © 2011-2022 走看看