Changeset b8ef198b in mainline for uspace/lib/virtio/virtio.c


Ignore:
Timestamp:
2018-06-20T18:58:44Z (7 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
9afd2a8
Parents:
3d135e9
Message:

Implement virtio-net interrupt handler

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/virtio/virtio.c

    r3d135e9 rb8ef198b  
    7171}
    7272
     73bool virtio_virtq_consume_used(virtio_dev_t *vdev, uint16_t num,
     74    uint16_t *descno, uint32_t *len)
     75{
     76        virtq_t *q = &vdev->queues[num];
     77
     78        uint16_t last_idx = q->used_last_idx % q->queue_size;
     79        if (last_idx == (pio_read_le16(&q->used->idx) % q->queue_size))
     80                return false;
     81
     82        *descno = (uint16_t) pio_read_le32(&q->used->ring[last_idx].id);
     83        *len = pio_read_le32(&q->used->ring[last_idx].len);
     84
     85        q->used_last_idx++;
     86
     87        return true;
     88}
     89
    7390errno_t virtio_virtq_setup(virtio_dev_t *vdev, uint16_t num, uint16_t size)
    7491{
     
    120137        q->avail = q->virt + avail_offset;
    121138        q->used = q->virt + used_offset;
     139        q->used_last_idx = 0;
    122140
    123141        memset(q->virt, 0, q->size);
Note: See TracChangeset for help on using the changeset viewer.