X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdevices%2Fdisk.c;h=0a131740b00711bc94af611330518d9e919b18f5;hb=c680fb42206bf424fa172bc9557b068ec93931c4;hp=206f69c91feceed3f6a5eef2776f1c8e34a8521b;hpb=3f5f7cb024e74d96e9175a0f9e59557148f9a0a4;p=pintos-anon diff --git a/src/devices/disk.c b/src/devices/disk.c index 206f69c..0a13174 100644 --- a/src/devices/disk.c +++ b/src/devices/disk.c @@ -123,9 +123,9 @@ disk_init (void) default: NOT_REACHED (); } - lock_init (&c->lock, c->name); + lock_init (&c->lock); c->expecting_interrupt = false; - sema_init (&c->completion_wait, 0, c->name); + sema_init (&c->completion_wait, 0); /* Initialize devices. */ for (dev_no = 0; dev_no < 2; dev_no++) @@ -142,7 +142,7 @@ disk_init (void) } /* Register interrupt handler. */ - intr_register (c->irq, 0, INTR_OFF, interrupt_handler, c->name); + intr_register_ext (c->irq, interrupt_handler, c->name); /* Reset hardware. */ reset_channel (c); @@ -179,7 +179,14 @@ disk_print_stats (void) } /* Returns the disk numbered DEV_NO--either 0 or 1 for master or - slave, respectively--within the channel numbered CHAN_NO. */ + slave, respectively--within the channel numbered CHAN_NO. + + Pintos uses disks this way: + 0:0 - operating system kernel + 0:1 - file system + 1:0 - scratch + 1:1 - swap +*/ struct disk * disk_get (int chan_no, int dev_no) { @@ -285,12 +292,12 @@ reset_channel (struct channel *c) /* Issue soft reset sequence, which selects device 0 as a side effect. Also enable interrupts. */ outb (reg_ctl (c), 0); - timer_sleep (timer_us2ticks (10)); + timer_usleep (10); outb (reg_ctl (c), CTL_SRST); - timer_sleep (timer_us2ticks (10)); + timer_usleep (10); outb (reg_ctl (c), 0); - timer_sleep (timer_ms2ticks (150)); + timer_msleep (150); /* Wait for device 0 to clear BSY. */ if (present[0]) @@ -309,7 +316,7 @@ reset_channel (struct channel *c) { if (inb (reg_nsect (c)) == 1 && inb (reg_lbal (c)) == 1) break; - timer_sleep (timer_ms2ticks (10)); + timer_msleep (10); } wait_while_busy (&c->devices[1]); } @@ -475,7 +482,7 @@ wait_until_idle (const struct disk *d) { if ((inb (reg_status (d->channel)) & (STA_BSY | STA_DRQ)) == 0) return; - timer_sleep (timer_us2ticks (10)); + timer_usleep (10); } printf ("%s: idle timeout\n", d->name); @@ -501,7 +508,7 @@ wait_while_busy (const struct disk *d) printf ("ok\n"); return (inb (reg_alt_status (c)) & STA_DRQ) != 0; } - timer_sleep (timer_ms2ticks (10)); + timer_msleep (10); } printf ("failed\n"); @@ -518,7 +525,7 @@ select_device (const struct disk *d) dev |= DEV_DEV; outb (reg_device (c), dev); inb (reg_alt_status (c)); - timer_sleep (timer_ns2ticks (400)); + timer_nsleep (400); } /* Select disk D in its channel, as select_device(), but wait for