idx 68 kernel/virtio.h uint16 idx; // driver will write ring[idx] next idx 82 kernel/virtio.h uint16 idx; // device increments when it adds a ring[] entry idx 202 kernel/virtio_disk.c alloc3_desc(int *idx) idx 205 kernel/virtio_disk.c idx[i] = alloc_desc(); idx 206 kernel/virtio_disk.c if (idx[i] < 0) { idx 208 kernel/virtio_disk.c free_desc(idx[j]); idx 227 kernel/virtio_disk.c int idx[3]; idx 229 kernel/virtio_disk.c if (alloc3_desc(idx) == 0) { idx 241 kernel/virtio_disk.c struct virtio_blk_req *buf0 = &disk.ops[idx[0]]; idx 250 kernel/virtio_disk.c disk.desc[idx[0]].addr = (uint64)buf0; idx 251 kernel/virtio_disk.c disk.desc[idx[0]].len = sizeof(struct virtio_blk_req); idx 252 kernel/virtio_disk.c disk.desc[idx[0]].flags = VRING_DESC_F_NEXT; idx 253 kernel/virtio_disk.c disk.desc[idx[0]].next = idx[1]; idx 255 kernel/virtio_disk.c disk.desc[idx[1]].addr = (uint64)b->data; idx 256 kernel/virtio_disk.c disk.desc[idx[1]].len = BSIZE; idx 258 kernel/virtio_disk.c disk.desc[idx[1]].flags = 0; // device reads b->data idx 260 kernel/virtio_disk.c disk.desc[idx[1]].flags = VRING_DESC_F_WRITE; // device writes b->data idx 261 kernel/virtio_disk.c disk.desc[idx[1]].flags |= VRING_DESC_F_NEXT; idx 262 kernel/virtio_disk.c disk.desc[idx[1]].next = idx[2]; idx 264 kernel/virtio_disk.c disk.info[idx[0]].status = 0xff; // device writes 0 on success idx 265 kernel/virtio_disk.c disk.desc[idx[2]].addr = (uint64)&disk.info[idx[0]].status; idx 266 kernel/virtio_disk.c disk.desc[idx[2]].len = 1; idx 267 kernel/virtio_disk.c disk.desc[idx[2]].flags = VRING_DESC_F_WRITE; // device writes the status idx 268 kernel/virtio_disk.c disk.desc[idx[2]].next = 0; idx 272 kernel/virtio_disk.c disk.info[idx[0]].b = b; idx 275 kernel/virtio_disk.c disk.avail->ring[disk.avail->idx % NUM] = idx[0]; idx 280 kernel/virtio_disk.c disk.avail->idx += 1; // not % NUM ... idx 294 kernel/virtio_disk.c disk.info[idx[0]].b = 0; idx 295 kernel/virtio_disk.c free_chain(idx[0]); idx 318 kernel/virtio_disk.c while (disk.used_idx != disk.used->idx) {