Add ATA PIO IRQ handler, documentation
Still WIP, doesn't look like IRQ handler works yet.
diff --git a/include/kernel/task.h b/include/kernel/task.h
index 87b412b..b0d0f97 100644
--- a/include/kernel/task.h
+++ b/include/kernel/task.h
@@ -7,6 +7,9 @@
extern bool tasks_initialized;
+/**
+ * A process. For now there is only one, the kernel.
+ */
struct process
{
bool exists;
@@ -20,12 +23,15 @@
// NOTE: must be PAGE ALIGNED
uint last_stack_pos;
};
-
+/**
+ * The smallest schedulable unit, a thread of a process.
+ */
struct task
{
int id;
struct process *proc;
- uint stack_top_p; // stack frame PHYSICAL address
+ /// Physical address of the top of the stack.
+ uint stack_top_p;
uint esp, ebp, eip;
};
@@ -53,7 +59,23 @@
#define TASK_FUNCTION(f) ((task_function_t)(f))
void spawn_thread(task_function_t function, void *data);
+
+/**
+ * Halt the current thread.
+ */
void kill_this_thread();
+
+/**
+ * Force a task switch. Only call in a safe environment (ISR).
+ */
extern void switch_task();
+
+/**
+ * Switch to a specific task. Only call in a safe environment (ISR).
+ */
void switch_to_task(struct task *task);
+
+/**
+ * Internal. Do not call.
+ */
void _sys_init_tasks_h(struct registers *regs);