summaryrefslogtreecommitdiff
path: root/kernel/include
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2025-04-20 20:54:19 -0400
committerFreya Murphy <freya@freyacat.org>2025-04-20 23:44:39 -0400
commit102a0aafc87ad894e7aba479df62ec4961bb6985 (patch)
treea6f59e352209e8de42f015733314a681a8e0d947 /kernel/include
parentadd ata_init to main and fix some compilation problems (diff)
downloadcomus-102a0aafc87ad894e7aba479df62ec4961bb6985.tar.gz
comus-102a0aafc87ad894e7aba479df62ec4961bb6985.tar.bz2
comus-102a0aafc87ad894e7aba479df62ec4961bb6985.zip
move kspin to use ms, add ata_report
Diffstat (limited to 'kernel/include')
-rw-r--r--kernel/include/comus/asm.h15
-rw-r--r--kernel/include/comus/drivers/ata.h13
-rw-r--r--kernel/include/comus/drivers/clock.h14
-rw-r--r--kernel/include/lib/klib.h39
4 files changed, 43 insertions, 38 deletions
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 <i.mcfarlane2002@gmail.com>
+ * @author Freya Murphy <freya@freyacat.org>
*
* ATA driver
*/
#include <stdbool.h>
-/// 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 <freya@freyacat.org>
- *
- * 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 */