summaryrefslogtreecommitdiff
path: root/kernel/src
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksa@vuckovic.cc>2023-02-22 18:48:51 +0100
committerAleksa Vuckovic <aleksa@vuckovic.cc>2023-02-22 18:48:51 +0100
commitcaba4178bbfd7b3b1ff2e156e24b08015137d16a (patch)
tree46205b3e9d2a881c3c17297068528e7ee858f989 /kernel/src
parent53069ae43ea997d51d2b985a26fffdb86a59b023 (diff)
ANSI C: volatile -> __volatile__
Diffstat (limited to 'kernel/src')
-rw-r--r--kernel/src/apic/apic.c24
-rw-r--r--kernel/src/apic/ioapic.c15
-rw-r--r--kernel/src/boot/multiboot2.c2
-rw-r--r--kernel/src/check/panic.c5
-rw-r--r--kernel/src/cpu/gdt.c4
-rw-r--r--kernel/src/cpu/idt.c12
-rw-r--r--kernel/src/cpu/io.c4
-rw-r--r--kernel/src/cpu/msr.c4
-rw-r--r--kernel/src/cpu/tss.c2
-rw-r--r--kernel/src/devices/timer.c5
-rw-r--r--kernel/src/main.c3
-rw-r--r--kernel/src/mem/paging.c2
-rw-r--r--kernel/src/misc/graphics.c2
-rw-r--r--kernel/src/scheduler/ap_startup.c2
-rw-r--r--kernel/src/scheduler/atomic.c2
-rw-r--r--kernel/src/sys/syscall.c6
-rw-r--r--kernel/src/sys/userspace.c4
17 files changed, 55 insertions, 43 deletions
diff --git a/kernel/src/apic/apic.c b/kernel/src/apic/apic.c
index 7fa57bf..3dff70f 100644
--- a/kernel/src/apic/apic.c
+++ b/kernel/src/apic/apic.c
@@ -21,7 +21,7 @@ uint8_t curr_cpu_apic_id()
// CpuId(1, 0, &info);
// return (uint8_t)(info.EBX >> 24);
- return (uint8_t)(((*((volatile uint32_t*)((uint64_t)lapic_addr + 0x20))) >> 24) & 0xFF);
+ return (uint8_t)(((*((__volatile__ uint32_t*)((uint64_t)lapic_addr + 0x20))) >> 24) & 0xFF);
}
void init_ap_cpus()
@@ -39,19 +39,19 @@ void init_ap_cpus()
// send INIT IPI
// clear APIC errors
- *((volatile uint32_t*)(lapic_addr + 0x280)) = 0;
+ *((__volatile__ uint32_t*)(lapic_addr + 0x280)) = 0;
// select AP
- *((volatile uint32_t*)(lapic_addr + 0x310)) = (*((volatile uint32_t*)(lapic_addr + 0x310)) & 0x00ffffff) | ((uint32_t)cpu_apic_ids[i] << 24);
+ *((__volatile__ uint32_t*)(lapic_addr + 0x310)) = (*((__volatile__ uint32_t*)(lapic_addr + 0x310)) & 0x00ffffff) | ((uint32_t)cpu_apic_ids[i] << 24);
// trigger INIT IPI
- *((volatile uint32_t*)(lapic_addr + 0x300)) = (*((volatile uint32_t*)(lapic_addr + 0x300)) & 0xfff00000) | 0x00C500;
+ *((__volatile__ uint32_t*)(lapic_addr + 0x300)) = (*((__volatile__ uint32_t*)(lapic_addr + 0x300)) & 0xfff00000) | 0x00C500;
// wait for delivery
- do { __asm__ __volatile__ ("pause" : : : "memory"); }while(*((volatile uint32_t*)(uint64_t)(lapic_addr + 0x300)) & (1 << 12));
+ do { __asm__ __volatile__ ("pause" : : : "memory"); }while(*((__volatile__ uint32_t*)(uint64_t)(lapic_addr + 0x300)) & (1 << 12));
// select AP
- *((volatile uint32_t*)(lapic_addr + 0x310)) = (*((volatile uint32_t*)(lapic_addr + 0x310)) & 0x00ffffff) | ((uint32_t)cpu_apic_ids[i] << 24);
+ *((__volatile__ uint32_t*)(lapic_addr + 0x310)) = (*((__volatile__ uint32_t*)(lapic_addr + 0x310)) & 0x00ffffff) | ((uint32_t)cpu_apic_ids[i] << 24);
// deassert
- *((volatile uint32_t*)(lapic_addr + 0x300)) = (*((volatile uint32_t*)(lapic_addr + 0x300)) & 0xfff00000) | 0x008500;
+ *((__volatile__ uint32_t*)(lapic_addr + 0x300)) = (*((__volatile__ uint32_t*)(lapic_addr + 0x300)) & 0xfff00000) | 0x008500;
// wait for delivery
- do { __asm__ __volatile__ ("pause" : : : "memory"); }while(*((volatile uint32_t*)(uint64_t)(lapic_addr + 0x300)) & (1 << 12));
+ do { __asm__ __volatile__ ("pause" : : : "memory"); }while(*((__volatile__ uint32_t*)(uint64_t)(lapic_addr + 0x300)) & (1 << 12));
// wait 10 msec
wait(10);
@@ -59,15 +59,15 @@ void init_ap_cpus()
for(size_t j = 0; j < 2; j++) {
// clear APIC errors
- *((volatile uint32_t*)(lapic_addr + 0x280)) = 0;
+ *((__volatile__ uint32_t*)(lapic_addr + 0x280)) = 0;
// select AP
- *((volatile uint32_t*)(lapic_addr + 0x310)) = (*((volatile uint32_t*)(lapic_addr + 0x310)) & 0x00ffffff) | ((uint32_t)cpu_apic_ids[i] << 24);
+ *((__volatile__ uint32_t*)(lapic_addr + 0x310)) = (*((__volatile__ uint32_t*)(lapic_addr + 0x310)) & 0x00ffffff) | ((uint32_t)cpu_apic_ids[i] << 24);
// trigger STARTUP IPI for 0800:0000
- *((volatile uint32_t*)(lapic_addr + 0x300)) = (*((volatile uint32_t*)(lapic_addr + 0x300)) & 0xfff0f800) | 0x000608;
+ *((__volatile__ uint32_t*)(lapic_addr + 0x300)) = (*((__volatile__ uint32_t*)(lapic_addr + 0x300)) & 0xfff0f800) | 0x000608;
// wait 200 usec
wait(1);
// wait for delivery
- do { __asm__ __volatile__ ("pause" : : : "memory"); }while(*((volatile uint32_t*)(uint64_t)(lapic_addr + 0x300)) & (1 << 12));
+ do { __asm__ __volatile__ ("pause" : : : "memory"); }while(*((__volatile__ uint32_t*)(uint64_t)(lapic_addr + 0x300)) & (1 << 12));
}
}
diff --git a/kernel/src/apic/ioapic.c b/kernel/src/apic/ioapic.c
index 4c3fd69..1322c47 100644
--- a/kernel/src/apic/ioapic.c
+++ b/kernel/src/apic/ioapic.c
@@ -3,26 +3,27 @@
#include <paging.h>
#include <libk/stdio.h>
#include <msr.h>
+#include <idt.h>
void ioapic_eoi()
{
- *((volatile uint32_t*)((uint64_t)lapic_addr + 0xB0)) = 0;
+ *((__volatile__ uint32_t*)((uint64_t)lapic_addr + 0xB0)) = 0;
}
uint32_t ioapic_read(const uint8_t offset)
{
/* tell IOREGSEL where we want to read from */
- *(volatile uint32_t*)(uint64_t)ioapic_addr = offset;
+ *(__volatile__ uint32_t*)(uint64_t)ioapic_addr = offset;
/* return the data from IOWIN */
- return *(volatile uint32_t*)((uint64_t)ioapic_addr + 0x10);
+ return *(__volatile__ uint32_t*)((uint64_t)ioapic_addr + 0x10);
}
void ioapic_write(const uint8_t offset, const uint32_t val)
{
/* tell IOREGSEL where we want to write to */
- *(volatile uint32_t*)(uint64_t)ioapic_addr = offset;
+ *(__volatile__ uint32_t*)(uint64_t)ioapic_addr = offset;
/* write the value to IOWIN */
- *(volatile uint32_t*)((uint64_t)ioapic_addr + 0x10) = val;
+ *(__volatile__ uint32_t*)((uint64_t)ioapic_addr + 0x10) = val;
}
void ioapic_set_irq(uint8_t irq, uint64_t apic_id, uint8_t vector)
@@ -68,7 +69,5 @@ void apic_remap_interrupts()
ioapic_set_irq(0x1, bspid, 0x21); // keyboard
write_msr(APIC_BASE_MSR, read_msr(APIC_BASE_MSR) | (1<<11));
- *((volatile uint32_t*)(lapic_addr + 0xF0)) = (*(volatile uint32_t*)(lapic_addr + 0xF0) | 0x1FF );
-
- __asm__ volatile ("sti;");
+ *((__volatile__ uint32_t*)(lapic_addr + 0xF0)) = (*(__volatile__ uint32_t*)(lapic_addr + 0xF0) | 0x1FF );
}
diff --git a/kernel/src/boot/multiboot2.c b/kernel/src/boot/multiboot2.c
index 1e38cd7..dd3ab78 100644
--- a/kernel/src/boot/multiboot2.c
+++ b/kernel/src/boot/multiboot2.c
@@ -56,7 +56,7 @@ void read_mb2(mb2_tag_header* multiboot_bootinfo, uint32_t multiboot_magic)
{
if (multiboot_magic != MB2_MAGIC) {
// not loaded by multiboot2 bootloader
- __asm__ volatile ("hlt;");
+ __asm__ __volatile__ ("hlt;");
}
// we will store framebuffer information here
diff --git a/kernel/src/check/panic.c b/kernel/src/check/panic.c
index 769c72f..894f22f 100644
--- a/kernel/src/check/panic.c
+++ b/kernel/src/check/panic.c
@@ -1,6 +1,7 @@
#include <libk/stdio.h>
#include <panic.h>
#include <graphics.h>
+#include <idt.h>
uint64_t panic_rsp;
@@ -44,8 +45,8 @@ void panic(const char *s, ...)
printf("ss: 0x%x ", *((uint64_t*)panic_rsp + i++));
}
- __asm__ volatile ("cli;");
+ disable_interrupts();
for(;;) {
- __asm__ volatile ("hlt;");
+ __asm__ __volatile__ ("hlt;");
}
}
diff --git a/kernel/src/cpu/gdt.c b/kernel/src/cpu/gdt.c
index fe7e080..58db962 100644
--- a/kernel/src/cpu/gdt.c
+++ b/kernel/src/cpu/gdt.c
@@ -26,7 +26,7 @@ void add_gdt_tss(uint32_t num, uint64_t offset, uint32_t limit, uint8_t access,
void reload_gdt()
{
- __asm__ volatile (
+ __asm__ __volatile__ (
// reload segment registers
"mov $0x10, %ax;"
"mov %ax, %ds;"
@@ -39,7 +39,7 @@ void reload_gdt()
void load_gdt(gdt_p* pointer)
{
- __asm__ volatile ("lgdt (%0);" : : "r"(pointer) : );
+ __asm__ __volatile__ ("lgdt (%0);" : : "r"(pointer) : );
reload_gdt();
}
diff --git a/kernel/src/cpu/idt.c b/kernel/src/cpu/idt.c
index 3578f53..1b0fffb 100644
--- a/kernel/src/cpu/idt.c
+++ b/kernel/src/cpu/idt.c
@@ -6,9 +6,19 @@
__attribute__((aligned(0x10))) static idt_entry idt_table[256];
idtp idt_pointer;
+void enable_interrupts(void)
+{
+ __asm__ __volatile__ ("sti;");
+}
+
+void disable_interrupts(void)
+{
+ __asm__ __volatile__ ("cli;");
+}
+
void load_idt(idtp* pointer)
{
- __asm__ volatile ("lidt (%0);" : : "r"(pointer) : );
+ __asm__ __volatile__ ("lidt (%0);" : : "r"(pointer) : );
}
void add_to_idt(uint16_t num, uint64_t offset, uint16_t selector, uint8_t type)
diff --git a/kernel/src/cpu/io.c b/kernel/src/cpu/io.c
index a5adfd6..4b5e5ac 100644
--- a/kernel/src/cpu/io.c
+++ b/kernel/src/cpu/io.c
@@ -4,13 +4,13 @@
uint8_t inb(uint32_t port)
{
uint8_t ret;
- __asm__ volatile ("inb %%dx, %%al;" : "=a"(ret) : "d"(port));
+ __asm__ __volatile__ ("inb %%dx, %%al;" : "=a"(ret) : "d"(port));
return ret;
}
void outb(uint32_t port, uint8_t value)
{
- __asm__ volatile ("outb %%al, %%dx;" : : "d"(port), "a"(value));
+ __asm__ __volatile__ ("outb %%al, %%dx;" : : "d"(port), "a"(value));
}
void io_wait(void)
diff --git a/kernel/src/cpu/msr.c b/kernel/src/cpu/msr.c
index 75fc602..e904d5f 100644
--- a/kernel/src/cpu/msr.c
+++ b/kernel/src/cpu/msr.c
@@ -6,7 +6,7 @@ uint64_t read_msr(uint32_t addr)
uint64_t edx;
uint64_t ecx = addr;
- __asm__ volatile ("rdmsr;" : "=a"(eax), "=d"(edx) : "c"(ecx) :);
+ __asm__ __volatile__ ("rdmsr;" : "=a"(eax), "=d"(edx) : "c"(ecx) :);
return (edx << 32) | eax;
}
@@ -17,5 +17,5 @@ void write_msr(uint32_t addr, uint64_t value)
uint64_t edx = value >> 32;
uint64_t ecx = addr;
- __asm__ volatile ("wrmsr;" : : "a"(eax), "d"(edx), "c"(ecx) :);
+ __asm__ __volatile__ ("wrmsr;" : : "a"(eax), "d"(edx), "c"(ecx) :);
}
diff --git a/kernel/src/cpu/tss.c b/kernel/src/cpu/tss.c
index d2c16d3..03b3475 100644
--- a/kernel/src/cpu/tss.c
+++ b/kernel/src/cpu/tss.c
@@ -7,7 +7,7 @@ tss_type tss;
void load_tss()
{
- __asm__ volatile ("push %rax; mov $0x28, %ax; ltr %ax; pop %rax;");
+ __asm__ __volatile__ ("push %rax; mov $0x28, %ax; ltr %ax; pop %rax;");
}
void init_tss()
diff --git a/kernel/src/devices/timer.c b/kernel/src/devices/timer.c
index 09ed21c..c2fa887 100644
--- a/kernel/src/devices/timer.c
+++ b/kernel/src/devices/timer.c
@@ -3,6 +3,7 @@
#include <heap.h>
#include <libk/list.h>
#include <io.h>
+#include <idt.h>
uint32_t tick = 0;
uint32_t seconds = 0;
@@ -31,11 +32,11 @@ void timer_handler()
void wait(uint64_t ms)
{
- __asm__ volatile ("cli;");
+ disable_interrupts();
wait_queue* queue = (wait_queue*)kalloc(sizeof(wait_queue));
queue->ticks = (int64_t)ms;
add_to_list(&queue->list, &timer_queue.list, timer_queue.list.next);
- __asm__ volatile ("sti;");
+ enable_interrupts();
while (queue->ticks > 0) ;
diff --git a/kernel/src/main.c b/kernel/src/main.c
index a88dd51..106576f 100644
--- a/kernel/src/main.c
+++ b/kernel/src/main.c
@@ -48,11 +48,12 @@ int kernel_main(mb2_tag_header* multiboot_bootinfo, uint32_t multiboot_magic)
list_sys_tables();
parse_madt();
apic_remap_interrupts();
+ enable_interrupts();
init_ap_cpus();
jump_userspace();
for(;;) {
- __asm__ volatile ("hlt;");
+ __asm__ __volatile__ ("hlt;");
}
return 0;
}
diff --git a/kernel/src/mem/paging.c b/kernel/src/mem/paging.c
index c3195de..cb9bd70 100644
--- a/kernel/src/mem/paging.c
+++ b/kernel/src/mem/paging.c
@@ -59,7 +59,7 @@ void init_paging(void)
void page_fault(uint64_t error)
{
uint64_t addr;
- __asm__ volatile ("mov %%cr2, %0;" : "=r"(addr) : : "memory");
+ __asm__ __volatile__ ("mov %%cr2, %0;" : "=r"(addr) : : "memory");
printf("address: 0x%x, error code: 0x%x\n", addr, error);
diff --git a/kernel/src/misc/graphics.c b/kernel/src/misc/graphics.c
index 33dd441..7ab67f3 100644
--- a/kernel/src/misc/graphics.c
+++ b/kernel/src/misc/graphics.c
@@ -14,7 +14,7 @@ void fb_draw_pixel(fb_t fb, int32_t x, int32_t y, uint32_t col)
if (x >= (int32_t)fb.width || y >= (int32_t)fb.height) return;
uint32_t fb_offset = (uint32_t)y * fb.pitch + (uint32_t)x * fb.bpp / 8;
- volatile uint32_t* fb_buff = (uint32_t*)fb.addr;
+ __volatile__ uint32_t* fb_buff = (uint32_t*)fb.addr;
fb_buff[fb_offset / 4] = col;
}
diff --git a/kernel/src/scheduler/ap_startup.c b/kernel/src/scheduler/ap_startup.c
index 4e70f17..f4a2055 100644
--- a/kernel/src/scheduler/ap_startup.c
+++ b/kernel/src/scheduler/ap_startup.c
@@ -20,6 +20,6 @@ void ap_startup(void) {
unlock(cnt_lock);
for(;;) {
- __asm__ volatile ("hlt;");
+ __asm__ __volatile__ ("hlt;");
}
}
diff --git a/kernel/src/scheduler/atomic.c b/kernel/src/scheduler/atomic.c
index 41ce3b9..c466f0b 100644
--- a/kernel/src/scheduler/atomic.c
+++ b/kernel/src/scheduler/atomic.c
@@ -12,7 +12,7 @@ void init_mutex(mutex_t* mutex)
bool test_and_set(mutex_t mutex, bool value)
{
bool rax;
- __asm__ volatile ("lock xchg %%rax, (%%rbx);" : "=a"(rax) : "b"(mutex.addr), "a"(value));
+ __asm__ __volatile__ ("lock xchg %%rax, (%%rbx);" : "=a"(rax) : "b"(mutex.addr), "a"(value));
return rax;
}
diff --git a/kernel/src/sys/syscall.c b/kernel/src/sys/syscall.c
index c526e39..debd70f 100644
--- a/kernel/src/sys/syscall.c
+++ b/kernel/src/sys/syscall.c
@@ -8,9 +8,9 @@ void syscall_handler()
uint64_t rax;
uint64_t rdi;
uint64_t rsi;
- __asm__ volatile ("mov %%rax, %0;" : "=r"(rax) : :);
- __asm__ volatile ("mov %%rdi, %0;" : "=r"(rdi) : :);
- __asm__ volatile ("mov %%rsi, %0;" : "=r"(rsi) : :);
+ __asm__ __volatile__ ("mov %%rax, %0;" : "=r"(rax) : :);
+ __asm__ __volatile__ ("mov %%rdi, %0;" : "=r"(rdi) : :);
+ __asm__ __volatile__ ("mov %%rsi, %0;" : "=r"(rsi) : :);
switch(rax) {
case SYSCALL_READ:
syscall_read();
diff --git a/kernel/src/sys/userspace.c b/kernel/src/sys/userspace.c
index fc89746..00cd758 100644
--- a/kernel/src/sys/userspace.c
+++ b/kernel/src/sys/userspace.c
@@ -6,9 +6,9 @@
void begin_userspace()
{
// read
- __asm__ volatile ("mov $0x0, %rax; syscall;");
+ __asm__ __volatile__ ("mov $0x0, %rax; syscall;");
// write
- __asm__ volatile ("mov $0x1, %rax; syscall;");
+ __asm__ __volatile__ ("mov $0x1, %rax; syscall;");
while(true) {
}