From 239900af293f192931391dc5579afab39a43e6c6 Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Sat, 25 Feb 2023 06:56:01 +0100 Subject: clang-format --- kernel/src/apic/apic.c | 65 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 50 insertions(+), 15 deletions(-) (limited to 'kernel/src/apic/apic.c') diff --git a/kernel/src/apic/apic.c b/kernel/src/apic/apic.c index 06c0661..2b650b0 100644 --- a/kernel/src/apic/apic.c +++ b/kernel/src/apic/apic.c @@ -16,7 +16,10 @@ uint8_t cpu_apic_ids[256]; uint8_t curr_cpu_apic_id() { - 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() @@ -26,43 +29,75 @@ void init_ap_cpus() init_mutex(&cnt_lock); map_addr(lapic_addr, lapic_addr, FLAG_PRESENT); - for(size_t i = 0; i < numcores; i++) { + for (size_t i = 0; i < numcores; i++) { // do not start BSP, that's already running this code - if(cpu_apic_ids[i] == bspid) + if (cpu_apic_ids[i] == bspid) continue; // 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); // send STARTUP IPI (twice) - for(size_t j = 0; j < 2; j++) { + 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)); } } -- cgit v1.2.3