Changeset b8ef198b in mainline for uspace/lib/virtio
- Timestamp:
- 2018-06-20T18:58:44Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 9afd2a8
- Parents:
- 3d135e9
- Location:
- uspace/lib/virtio
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/virtio/virtio-pci.h
r3d135e9 rb8ef198b 143 143 /** Virtual address of the used ring */ 144 144 virtq_used_t *used; 145 uint16_t used_last_idx; 145 146 146 147 /** Address of the queue's notification register */ … … 182 183 183 184 extern void virtio_virtq_produce_available(virtio_dev_t *, uint16_t, uint16_t); 185 extern bool virtio_virtq_consume_used(virtio_dev_t *, uint16_t, uint16_t *, 186 uint32_t *); 184 187 185 188 extern errno_t virtio_virtq_setup(virtio_dev_t *, uint16_t, uint16_t); -
uspace/lib/virtio/virtio.c
r3d135e9 rb8ef198b 71 71 } 72 72 73 bool 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 73 90 errno_t virtio_virtq_setup(virtio_dev_t *vdev, uint16_t num, uint16_t size) 74 91 { … … 120 137 q->avail = q->virt + avail_offset; 121 138 q->used = q->virt + used_offset; 139 q->used_last_idx = 0; 122 140 123 141 memset(q->virt, 0, q->size);
Note:
See TracChangeset
for help on using the changeset viewer.