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(&disk.free[0], &disk.vdisk_lock);
disk              238 kernel/virtio_disk.c   struct virtio_blk_req *buf0 = &disk.ops[idx[0]];
disk              247 kernel/virtio_disk.c   disk.desc[idx[0]].addr = (uint64) buf0;
disk              248 kernel/virtio_disk.c   disk.desc[idx[0]].len = sizeof(struct virtio_blk_req);
disk              249 kernel/virtio_disk.c   disk.desc[idx[0]].flags = VRING_DESC_F_NEXT;
disk              250 kernel/virtio_disk.c   disk.desc[idx[0]].next = idx[1];
disk              252 kernel/virtio_disk.c   disk.desc[idx[1]].addr = (uint64) b->data;
disk              253 kernel/virtio_disk.c   disk.desc[idx[1]].len = BSIZE;
disk              255 kernel/virtio_disk.c     disk.desc[idx[1]].flags = 0; // device reads b->data
disk              257 kernel/virtio_disk.c     disk.desc[idx[1]].flags = VRING_DESC_F_WRITE; // device writes b->data
disk              258 kernel/virtio_disk.c   disk.desc[idx[1]].flags |= VRING_DESC_F_NEXT;
disk              259 kernel/virtio_disk.c   disk.desc[idx[1]].next = idx[2];
disk              261 kernel/virtio_disk.c   disk.info[idx[0]].status = 0xff; // device writes 0 on success
disk              262 kernel/virtio_disk.c   disk.desc[idx[2]].addr = (uint64) &disk.info[idx[0]].status;
disk              263 kernel/virtio_disk.c   disk.desc[idx[2]].len = 1;
disk              264 kernel/virtio_disk.c   disk.desc[idx[2]].flags = VRING_DESC_F_WRITE; // device writes the status
disk              265 kernel/virtio_disk.c   disk.desc[idx[2]].next = 0;
disk              268 kernel/virtio_disk.c   b->disk = 1;
disk              269 kernel/virtio_disk.c   disk.info[idx[0]].b = b;
disk              272 kernel/virtio_disk.c   disk.avail->ring[disk.avail->idx % NUM] = idx[0];
disk              277 kernel/virtio_disk.c   disk.avail->idx += 1; // not % NUM ...
disk              284 kernel/virtio_disk.c   while(b->disk == 1) {
disk              285 kernel/virtio_disk.c     sleep(b, &disk.vdisk_lock);
disk              288 kernel/virtio_disk.c   disk.info[idx[0]].b = 0;
disk              291 kernel/virtio_disk.c   release(&disk.vdisk_lock);
disk              297 kernel/virtio_disk.c   acquire(&disk.vdisk_lock);
disk              312 kernel/virtio_disk.c   while(disk.used_idx != disk.used->idx){
disk              314 kernel/virtio_disk.c     int id = disk.used->ring[disk.used_idx % NUM].id;
disk              316 kernel/virtio_disk.c     if(disk.info[id].status != 0)
disk              319 kernel/virtio_disk.c     struct buf *b = disk.info[id].b;
disk              320 kernel/virtio_disk.c     b->disk = 0;   // disk is done with buf
disk              323 kernel/virtio_disk.c     disk.used_idx += 1;
disk              326 kernel/virtio_disk.c   release(&disk.vdisk_lock);