-#include "disk.h"
+#include "devices/disk.h"
+#include <ctype.h>
+#include <debug.h>
#include <stdbool.h>
-#include "debug.h"
-#include "io.h"
-#include "interrupt.h"
-#include "lib.h"
-#include "synch.h"
-#include "timer.h"
+#include <stdio.h>
+#include "devices/timer.h"
+#include "threads/io.h"
+#include "threads/interrupt.h"
+#include "threads/synch.h"
/* ATA command block port addresses. */
#define reg_data(CHANNEL) ((CHANNEL)->reg_base + 0) /* Data. */
int dev_no;
/* Initialize channel. */
- snprintf (c->name, sizeof c->name, "hd%d", chan_no);
+ snprintf (c->name, sizeof c->name, "hd%zd", chan_no);
switch (chan_no)
{
case 0:
}
/* Register interrupt handler. */
- intr_register (c->irq, 0, IF_OFF, interrupt_handler, c->name);
+ intr_register (c->irq, 0, INTR_OFF, interrupt_handler, c->name);
/* Reset hardware. */
reset_channel (c);
\f
/* Disk detection and identification. */
-static void printk_ata_string (char *string, size_t size);
+static void print_ata_string (char *string, size_t size);
/* Resets an ATA channel and waits for any devices present on it
to finish the reset. */
/* Issue soft reset sequence, which selects device 0 as a side effect.
Also enable interrupts. */
outb (reg_ctl (c), 0);
- timer_usleep (10);
+ timer_sleep (timer_us2ticks (10));
outb (reg_ctl (c), CTL_SRST);
- timer_usleep (10);
+ timer_sleep (timer_us2ticks (10));
outb (reg_ctl (c), 0);
- timer_msleep (150);
+ timer_sleep (timer_ms2ticks (150));
/* Wait for device 0 to clear BSY. */
if (present[0])
{
if (inb (reg_nsect (c)) == 1 && inb (reg_lbal (c)) == 1)
break;
- timer_msleep (10);
+ timer_sleep (timer_ms2ticks (10));
}
wait_while_busy (&c->devices[1]);
}
d->capacity = id[60] | ((uint32_t) id[61] << 16);
/* Print identification message. */
- printk ("%s: detected %'"PRDSNu" sector (", d->name, d->capacity);
+ printf ("%s: detected %'"PRDSNu" sector (", d->name, d->capacity);
if (d->capacity > 1024 / DISK_SECTOR_SIZE * 1024 * 1024)
- printk ("%"PRDSNu" GB",
+ printf ("%"PRDSNu" GB",
d->capacity / (1024 / DISK_SECTOR_SIZE * 1024 * 1024));
else if (d->capacity > 1024 / DISK_SECTOR_SIZE * 1024)
- printk ("%"PRDSNu" MB", d->capacity / (1024 / DISK_SECTOR_SIZE * 1024));
+ printf ("%"PRDSNu" MB", d->capacity / (1024 / DISK_SECTOR_SIZE * 1024));
else if (d->capacity > 1024 / DISK_SECTOR_SIZE)
- printk ("%"PRDSNu" kB", d->capacity / (1024 / DISK_SECTOR_SIZE));
+ printf ("%"PRDSNu" kB", d->capacity / (1024 / DISK_SECTOR_SIZE));
else
- printk ("%"PRDSNu" byte", d->capacity * DISK_SECTOR_SIZE);
- printk (") disk, model \"");
- printk_ata_string ((char *) &id[27], 40);
- printk ("\", serial \"");
- printk_ata_string ((char *) &id[10], 20);
- printk ("\"\n");
+ printf ("%"PRDSNu" byte", d->capacity * DISK_SECTOR_SIZE);
+ printf (") disk, model \"");
+ print_ata_string ((char *) &id[27], 40);
+ printf ("\", serial \"");
+ print_ata_string ((char *) &id[10], 20);
+ printf ("\"\n");
}
/* Prints STRING, which consists of SIZE bytes in a funky format:
each pair of bytes is in reverse order. Does not print
trailing whitespace and/or nulls. */
static void
-printk_ata_string (char *string, size_t size)
+print_ata_string (char *string, size_t size)
{
size_t i;
/* Print. */
for (i = 0; i < size; i++)
- printk ("%c", string[i ^ 1]);
+ printf ("%c", string[i ^ 1]);
}
\f
/* Selects device D, waiting for it to become ready, and then
{
/* Interrupts must be enabled or our semaphore will never be
up'd by the completion handler. */
- ASSERT (intr_get_level () == IF_ON);
+ ASSERT (intr_get_level () == INTR_ON);
c->expecting_interrupt = true;
outb (reg_command (c), command);
{
if ((inb (reg_status (d->channel)) & (STA_BSY | STA_DRQ)) == 0)
return;
- timer_usleep (10);
+ timer_sleep (timer_us2ticks (10));
}
- printk ("%s: idle timeout\n", d->name);
+ printf ("%s: idle timeout\n", d->name);
}
/* Wait up to 30 seconds for disk D to clear BSY,
for (i = 0; i < 3000; i++)
{
if (i == 700)
- printk ("%s: busy, waiting...", d->name);
+ printf ("%s: busy, waiting...", d->name);
if (!(inb (reg_alt_status (c)) & STA_BSY))
{
if (i >= 700)
- printk ("ok\n");
+ printf ("ok\n");
return (inb (reg_alt_status (c)) & STA_DRQ) != 0;
}
- timer_msleep (10);
+ timer_sleep (timer_ms2ticks (10));
}
- printk ("failed\n");
+ printf ("failed\n");
return false;
}
dev |= DEV_DEV;
outb (reg_device (c), dev);
inb (reg_alt_status (c));
- timer_nsleep (400);
+ timer_sleep (timer_ns2ticks (400));
}
/* Select disk D in its channel, as select_device(), but wait for
sema_up (&c->completion_wait); /* Wake up waiter. */
}
else
- printk ("%s: unexpected interrupt\n", c->name);
+ printf ("%s: unexpected interrupt\n", c->name);
return;
}