Fix tasking, PCI
diff --git a/src/kernel/Jmk b/src/kernel/Jmk
index 0ae3053..ddbc343 100644
--- a/src/kernel/Jmk
+++ b/src/kernel/Jmk
@@ -16,7 +16,10 @@
# AHCI not yet implemented
# depends(ahci, dri/ahci, ahci.a)
-CFLAGS += -I $(ROOT)/include/kernel
+TEST ?=
+test_defines = $(TEST:%=-DTEST_%)
+
+CFLAGS += -I $(ROOT)/include/kernel $(test_defines)
LDFLAGS += -Tlink.ld -melf_i386
ASMFLAGS += -felf -Fdwarf
diff --git a/src/kernel/dri/pci/pci.c b/src/kernel/dri/pci/pci.c
index 67355a0..f9ebadb 100644
--- a/src/kernel/dri/pci/pci.c
+++ b/src/kernel/dri/pci/pci.c
@@ -49,3 +49,25 @@
start = guess;
}
}
+
+void pci_print_devices()
+{
+ kprintf("Enumerating PCI devices:\n");
+ for (int bus = 0; bus < 0xff; bus++)
+ {
+ for (int slot = 0; slot < 32; slot++)
+ {
+ for (int func = 0; func < 8; func++)
+ {
+ uint vendor;
+
+ struct pci_vendor *v = pci_check_vendor(bus, slot, func, &vendor);
+
+ if (vendor != ~0)
+ {
+ kprintf("%d %d %d --- 0x%x --- %s\n", bus, slot, func, vendor, v->name);
+ }
+ }
+ }
+ }
+}
diff --git a/src/kernel/main.c b/src/kernel/main.c
index fc9ee22..bc40ff8 100644
--- a/src/kernel/main.c
+++ b/src/kernel/main.c
@@ -74,46 +74,28 @@
}
#endif
- asm volatile("sti");
+ asm("sti");
kprintf("initializing tasks\n");
init_tasks();
kprintf("\ndone initializing tasks\n");
-//#ifdef TEST_THREADS
+#ifdef TEST_THREADS
spawn_thread(other_thread, NULL);
greet();
-//#endif
+#endif
#ifdef TEST_ATA_PIO
test_ata_pio();
#endif
#ifdef TEST_PCI
- kprintf("Enumerating PCI devices:\n");
- for (int bus = 0; bus < 0xff; bus++)
- {
- for (int slot = 0; slot < 32; slot++)
- {
- for (int func = 0; func < 8; func++)
- {
- uint vendor;
-
- struct pci_vendor *v = pci_check_vendor(bus, slot, func, &vendor);
-
- if (vendor != ~0)
- {
- kprintf("%d %d %d --- 0x%x --- %s\n", bus, slot, func, vendor, v->name);
- }
- }
- }
- }
+ pci_print_devices();
#endif
while (true)
- asm volatile("hlt");
-
+ asm("hlt");
return 0xCAFEBABE;
}
diff --git a/src/kernel/paging.h b/src/kernel/paging.h
index 045b872..20ecce9 100644
--- a/src/kernel/paging.h
+++ b/src/kernel/paging.h
@@ -4,7 +4,7 @@
#include "registers.h"
#define VIRT_TO_PHYS(virt) ((uint)(virt) - 0xC0000000)
-#define PHYS_TO_VIRT(phys) ((void *)(phys) + 0xC0000000)
+#define PHYS_TO_VIRT(phys) ((void *)((phys) + 0xC0000000))
#define KERNEL_VIRTUAL_BASE 0xC0000000
#define KERNEL_PAGE_NUMBER (KERNEL_VIRTUAL_BASE >> 22)
diff --git a/src/kernel/task.c b/src/kernel/task.c
index 564119a..b8ce525 100644
--- a/src/kernel/task.c
+++ b/src/kernel/task.c
@@ -83,7 +83,7 @@
void spawn_thread(void (*function)(void *), void *data)
{
- asm volatile("cli");
+ asm("cli");
struct process *proc = current_task->task.proc;
// Virtual address of page directory (in kernel memory)
@@ -115,12 +115,12 @@
ll_task->prev = last_task;
last_task = ll_task;
- asm volatile("sti");
+ asm("sti");
}
void kill_this_thread()
{
- asm volatile("cli");
+ asm("cli");
if (current_task->prev == NULL && current_task->next == NULL)
{
@@ -152,7 +152,7 @@
switch_to_task(¤t_task->task);
- asm volatile("sti");
+ asm("sti");
}
extern void _switch_to_task(uint page_directory, uint eip, uint ebp, uint esp);
@@ -170,7 +170,7 @@
void _do_switch_task(uint eip, uint ebp, uint esp)
{
// sti is called in switch_to_task
- asm volatile("cli");
+ asm("cli");
// save context for this task
current_task->task.ebp = ebp;