disk 3 kernel/buf.h int disk; // does disk "own" buf? disk 59 kernel/virtio_disk.c } disk; disk 66 kernel/virtio_disk.c initlock(&disk.vdisk_lock, "virtio_disk"); disk 121 kernel/virtio_disk.c disk.desc = kalloc(); disk 122 kernel/virtio_disk.c disk.avail = kalloc(); disk 123 kernel/virtio_disk.c disk.used = kalloc(); disk 124 kernel/virtio_disk.c if (!disk.desc || !disk.avail || !disk.used) disk 126 kernel/virtio_disk.c memset(disk.desc, 0, PGSIZE); disk 127 kernel/virtio_disk.c memset(disk.avail, 0, PGSIZE); disk 128 kernel/virtio_disk.c memset(disk.used, 0, PGSIZE); disk 134 kernel/virtio_disk.c *R(VIRTIO_MMIO_QUEUE_DESC_LOW) = (uint64)disk.desc; disk 135 kernel/virtio_disk.c *R(VIRTIO_MMIO_QUEUE_DESC_HIGH) = (uint64)disk.desc >> 32; disk 136 kernel/virtio_disk.c *R(VIRTIO_MMIO_DRIVER_DESC_LOW) = (uint64)disk.avail; disk 137 kernel/virtio_disk.c *R(VIRTIO_MMIO_DRIVER_DESC_HIGH) = (uint64)disk.avail >> 32; disk 138 kernel/virtio_disk.c *R(VIRTIO_MMIO_DEVICE_DESC_LOW) = (uint64)disk.used; disk 139 kernel/virtio_disk.c *R(VIRTIO_MMIO_DEVICE_DESC_HIGH) = (uint64)disk.used >> 32; disk 146 kernel/virtio_disk.c disk.free[i] = 1; disk 160 kernel/virtio_disk.c if (disk.free[i]) { disk 161 kernel/virtio_disk.c disk.free[i] = 0; disk 174 kernel/virtio_disk.c if (disk.free[i]) disk 176 kernel/virtio_disk.c disk.desc[i].addr = 0; disk 177 kernel/virtio_disk.c disk.desc[i].len = 0; disk 178 kernel/virtio_disk.c disk.desc[i].flags = 0; disk 179 kernel/virtio_disk.c disk.desc[i].next = 0; disk 180 kernel/virtio_disk.c disk.free[i] = 1; disk 181 kernel/virtio_disk.c wakeup(&disk.free[0]); disk 189 kernel/virtio_disk.c int flag = disk.desc[i].flags; disk 190 kernel/virtio_disk.c int nxt = disk.desc[i].next; disk 220 kernel/virtio_disk.c acquire(&disk.vdisk_lock); disk 232 kernel/virtio_disk.c sleep_prepare(&disk.free[0]); disk 233 kernel/virtio_disk.c release(&disk.vdisk_lock); disk 235 kernel/virtio_disk.c acquire(&disk.vdisk_lock); disk 241 kernel/virtio_disk.c struct virtio_blk_req *buf0 = &disk.ops[idx[0]]; disk 250 kernel/virtio_disk.c disk.desc[idx[0]].addr = (uint64)buf0; disk 251 kernel/virtio_disk.c disk.desc[idx[0]].len = sizeof(struct virtio_blk_req); disk 252 kernel/virtio_disk.c disk.desc[idx[0]].flags = VRING_DESC_F_NEXT; disk 253 kernel/virtio_disk.c disk.desc[idx[0]].next = idx[1]; disk 255 kernel/virtio_disk.c disk.desc[idx[1]].addr = (uint64)b->data; disk 256 kernel/virtio_disk.c disk.desc[idx[1]].len = BSIZE; disk 258 kernel/virtio_disk.c disk.desc[idx[1]].flags = 0; // device reads b->data disk 260 kernel/virtio_disk.c disk.desc[idx[1]].flags = VRING_DESC_F_WRITE; // device writes b->data disk 261 kernel/virtio_disk.c disk.desc[idx[1]].flags |= VRING_DESC_F_NEXT; disk 262 kernel/virtio_disk.c disk.desc[idx[1]].next = idx[2]; disk 264 kernel/virtio_disk.c disk.info[idx[0]].status = 0xff; // device writes 0 on success disk 265 kernel/virtio_disk.c disk.desc[idx[2]].addr = (uint64)&disk.info[idx[0]].status; disk 266 kernel/virtio_disk.c disk.desc[idx[2]].len = 1; disk 267 kernel/virtio_disk.c disk.desc[idx[2]].flags = VRING_DESC_F_WRITE; // device writes the status disk 268 kernel/virtio_disk.c disk.desc[idx[2]].next = 0; disk 271 kernel/virtio_disk.c b->disk = 1; disk 272 kernel/virtio_disk.c disk.info[idx[0]].b = b; disk 275 kernel/virtio_disk.c disk.avail->ring[disk.avail->idx % NUM] = idx[0]; disk 280 kernel/virtio_disk.c disk.avail->idx += 1; // not % NUM ... disk 287 kernel/virtio_disk.c while (b->disk == 1) { disk 289 kernel/virtio_disk.c release(&disk.vdisk_lock); disk 291 kernel/virtio_disk.c acquire(&disk.vdisk_lock); disk 294 kernel/virtio_disk.c disk.info[idx[0]].b = 0; disk 297 kernel/virtio_disk.c release(&disk.vdisk_lock); disk 303 kernel/virtio_disk.c acquire(&disk.vdisk_lock); disk 318 kernel/virtio_disk.c while (disk.used_idx != disk.used->idx) { disk 320 kernel/virtio_disk.c int id = disk.used->ring[disk.used_idx % NUM].id; disk 322 kernel/virtio_disk.c if (disk.info[id].status != 0) disk 325 kernel/virtio_disk.c struct buf *b = disk.info[id].b; disk 326 kernel/virtio_disk.c b->disk = 0; // disk is done with buf disk 329 kernel/virtio_disk.c disk.used_idx += 1; disk 332 kernel/virtio_disk.c release(&disk.vdisk_lock);