summaryrefslogtreecommitdiff
path: root/kernel/drivers
diff options
context:
space:
mode:
authorIan McFarlane <i.mcfarlane2002@gmail.com>2025-04-20 15:01:19 -0400
committerIan McFarlane <i.mcfarlane2002@gmail.com>2025-04-20 15:01:19 -0400
commit1171987335034631d6e354b2d28682ad5c53dac6 (patch)
tree4e11513e3a983fabcc27763682510b9b9c177f98 /kernel/drivers
parentread BARs from PCI (diff)
downloadcomus-1171987335034631d6e354b2d28682ad5c53dac6.tar.gz
comus-1171987335034631d6e354b2d28682ad5c53dac6.tar.bz2
comus-1171987335034631d6e354b2d28682ad5c53dac6.zip
add rudimentary sleeping function based on CMOS clock
Diffstat (limited to 'kernel/drivers')
-rw-r--r--kernel/drivers/ata.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/kernel/drivers/ata.c b/kernel/drivers/ata.c
index 8d5bbe1..6b131b8 100644
--- a/kernel/drivers/ata.c
+++ b/kernel/drivers/ata.c
@@ -419,11 +419,13 @@ void ide_initialize(uint32_t BAR0, uint32_t BAR1, uint32_t BAR2, uint32_t BAR3,
ide_channel_write(chan, ATA_REG_HDDEVSEL, 0xA0 | (drive_idx << 4));
// This function should be implemented in your OS. which waits for 1 ms.
// it is based on System Timer Device Driver.
- sleep(1); // Wait 1ms for drive select to work.
+ // sleep(1); // Wait 1ms for drive select to work.
+ kspin_sleep_seconds(1); // TODO: sleep 1ms, this is way too long
// (II) Send ATA Identify Command:
ide_channel_write(chan, ATA_REG_COMMAND, ATA_CMD_IDENTIFY);
- sleep(1);
+ // sleep(1);
+ kspin_sleep_seconds(1); // TODO: sleep 1ms
// (III) Polling:
if (ide_channel_read(chan, ATA_REG_STATUS) == 0) {
@@ -465,7 +467,8 @@ void ide_initialize(uint32_t BAR0, uint32_t BAR1, uint32_t BAR2, uint32_t BAR3,
ide_channel_write(chan, ATA_REG_COMMAND,
ATA_CMD_IDENTIFY_PACKET);
- sleep(1);
+ // sleep(1);
+ kspin_sleep_seconds(1); // TODO: sleep one millisecond
}
static uint8_t id_space_buf[2048] = { 0 };