Beispiel #1
0
static void
virtio_blk_intr(unsigned int irqs)
{

	if (virtio_had_irq(blk_dev))
		virtio_blk_device_intr();
	else
		virtio_blk_spurious_intr();

	virtio_irq_enable(blk_dev);
}
Beispiel #2
0
static void
virtio_net_intr(message *m)
{
	/* Check and clear interrupt flag */
	if (virtio_had_irq(net_dev)) {
		virtio_net_check_queues();
	} else {
		if (!spurious_interrupt)
			dput(("Spurious interrupt"));

		spurious_interrupt = 1;
	}

	virtio_net_check_pending();

	virtio_irq_enable(net_dev);
}
Beispiel #3
0
static void
virtio_net_intr(unsigned int __unused mask)
{

	/* Check and clear interrupt flag */
	if (virtio_had_irq(net_dev)) {
		virtio_net_check_queues();
	} else {
		if (!spurious_interrupt)
			dput(("Spurious interrupt"));

		spurious_interrupt = 1;
	}

	virtio_net_check_pending();

	virtio_irq_enable(net_dev);

	/* Readd packets to the receive queue as necessary. */
	virtio_net_refill_rx_queue();
}
Beispiel #4
-17
int init_virtio_net()
{
    virtio_dev_t dev = to_virtio_dev_t(&pci_vn);

    if (virtio_setup_device(dev, VIRTIO_NET_SUBID, 1)) {
        virtio_net_read_config(&pci_vn);
        /* virtio-net has at least 2 queues */

        int queues = 2;

        if (pci_vn._ctrl_vq) {
            queues++;
        }
        int ret = virtio_alloc_queues(dev, queues);

        pci_d("virtio_alloc_queues ret:%d\n", ret);
        if (virtio_net_alloc_bufs() != OK)
            panic("%s: Buffer allocation failed", name);
        pci_d("virtio_net_alloc_bufs:%d\n", ret);

        virtio_net_init_queues();
        pci_d("virtio_net_init_queues:%d\n", ret);
        /* Add packets to the receive queue. */
        virtio_net_refill_rx_queue();
        pci_d("virtio_net_refill_rx_queue:%d\n", ret);

        virtio_device_ready(to_virtio_dev_t(&pci_vn));
        pci_d("virtio_device_ready:%d\n", ret);

//        virtio_irq_enable(to_virtio_dev_t(&pci_vn));
        bool virtio_had_irq(struct virtio_device *dev);

        pci_d("had_irq:%d\n", virtio_had_irq(to_virtio_dev_t(&pci_vn)));
        set_timeout(1000, vn_timeout);
        sti();

    }
    return OK;
}