From 102a0aafc87ad894e7aba479df62ec4961bb6985 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Sun, 20 Apr 2025 20:54:19 -0400 Subject: move kspin to use ms, add ata_report --- kernel/include/comus/asm.h | 15 ++++++++------ kernel/include/comus/drivers/ata.h | 13 +++++++++--- kernel/include/comus/drivers/clock.h | 14 ------------- kernel/include/lib/klib.h | 39 ++++++++++++++++++++++-------------- 4 files changed, 43 insertions(+), 38 deletions(-) delete mode 100644 kernel/include/comus/drivers/clock.h (limited to 'kernel/include') diff --git a/kernel/include/comus/asm.h b/kernel/include/comus/asm.h index 87393eb..08b61e2 100644 --- a/kernel/include/comus/asm.h +++ b/kernel/include/comus/asm.h @@ -26,18 +26,21 @@ static inline void outw(uint16_t port, uint16_t val) __asm__ volatile("outw %0, %1" : : "a"(val), "Nd"(port)); } -#define __inl_nocall(port, out_uint32) \ - do { \ - __asm__ volatile("inl %1, %0" : "=a"(out_uint32) : "Nd"(port)); \ - } while (0); - static inline uint32_t inl(uint16_t port) { uint32_t ret; - __inl_nocall(port, ret); + __asm__ volatile("inl %1, %0" : "=a"(ret) : "Nd"(port)); return ret; } +static inline void insl(uint16_t port, uint32_t *buffer, uint32_t count) +{ + while (count--) { + __asm__ volatile("inl %1, %0" : "=a"(*buffer) : "Nd"(port)); + buffer++; + } +} + static inline void outl(uint16_t port, uint32_t val) { __asm__ volatile("outl %0, %1" : : "a"(val), "Nd"(port)); diff --git a/kernel/include/comus/drivers/ata.h b/kernel/include/comus/drivers/ata.h index 1f4aeb3..06d3e78 100644 --- a/kernel/include/comus/drivers/ata.h +++ b/kernel/include/comus/drivers/ata.h @@ -5,14 +5,21 @@ * @file ata.h * * @author Ian McFarlane + * @author Freya Murphy * * ATA driver */ #include -/// Returns true if a PCE IDE device is connected and we will have disk space, -/// false on no disks found. -bool ata_init(void); +/** + * @returns 0 on success, 1 on failure + */ +int ata_init(void); + +/** + * report all ata devices to console + */ +void ata_report(void); #endif diff --git a/kernel/include/comus/drivers/clock.h b/kernel/include/comus/drivers/clock.h deleted file mode 100644 index 7099fa7..0000000 --- a/kernel/include/comus/drivers/clock.h +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @file clock.h - * - * @author Freya Murphy - * - * CMOS real time clock driver - */ - -#ifndef CLOCK_H_ -#define CLOCK_H_ - -void clock_update(void); - -#endif /* clock.h */ diff --git a/kernel/include/lib/klib.h b/kernel/include/lib/klib.h index e79af41..f1540c1 100644 --- a/kernel/include/lib/klib.h +++ b/kernel/include/lib/klib.h @@ -202,40 +202,40 @@ enum log_level { // #define __AS_STR_LITERAL_IMPL(x) #x #if LOG_LEVEL >= LOG_LEVEL_TRACE -#define TRACE(...) \ - do { \ +#define TRACE(...) \ + do { \ kprintf("[TRACE] [%s:%s:%d] : ", __FILE__, __func__, __LINE__); \ - kprintf(__VA_ARGS__); \ + kprintf(__VA_ARGS__); \ } while (0) #else #define TRACE(...) #endif #if LOG_LEVEL >= LOG_LVL_INFO -#define INFO(...) \ - do { \ +#define INFO(...) \ + do { \ kprintf("[INFO] [%s:%s:%d] : ", __FILE__, __func__, __LINE__); \ - kprintf(__VA_ARGS__); \ + kprintf(__VA_ARGS__); \ } while (0) #else #define INFO(...) #endif #if LOG_LEVEL >= LOG_LVL_WARN -#define WARN(...) \ - do { \ +#define WARN(...) \ + do { \ kprintf("[WARN] [%s:%s:%d] : ", __FILE__, __func__, __LINE__); \ - kprintf(__VA_ARGS__); \ + kprintf(__VA_ARGS__); \ } while (0) #else #define WARN(format, ...) #endif #if LOG_LEVEL >= LOG_LVL_ERROR -#define ERROR(...) \ - do { \ +#define ERROR(...) \ + do { \ kprintf("[ERROR] [%s:%s:%d] : ", __FILE__, __func__, __LINE__); \ - kprintf(__VA_ARGS__); \ + kprintf(__VA_ARGS__); \ } while (0) #else #define ERROR(...) @@ -310,11 +310,20 @@ void *krealloc(void *ptr, size_t size); */ void kfree(void *ptr); -/* - * Calls unixtime over and over until a number of seconds have passed +/** + * Assuming the PIT ticks every ms, uses how many ticks to decide when to return. + * Returns when n*1000 ticks have passed * * @param seconds - number of seconds to wait, minimum (may take longer) */ -void kspin_sleep_seconds(size_t seconds); +void kspin_seconds(size_t seconds); + +/** + * Assuming the PIT ticks every ms, uses how many ticks to decide when to return. + * Returns when n ticks have passed + * + * @param milliseconds - number of milliseconds to wait, minimum (may take longer) + */ +void kspin_milliseconds(size_t milliseconds); #endif /* klib.h */ -- cgit v1.2.3-freya