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 +++++++++++++++++++++++++++++++++++++----------- kernel/src/apic/ioapic.c | 31 ++++++++++++----------- kernel/src/apic/madt.c | 58 +++++++++++++++++++++++++++++++----------- kernel/src/apic/rsdp.c | 62 +++++++++++++++++++++++++++------------------ 4 files changed, 147 insertions(+), 69 deletions(-) (limited to 'kernel/src/apic') 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)); } } diff --git a/kernel/src/apic/ioapic.c b/kernel/src/apic/ioapic.c index bcd5a4d..cfda8be 100644 --- a/kernel/src/apic/ioapic.c +++ b/kernel/src/apic/ioapic.c @@ -7,29 +7,29 @@ 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; - /* return the data from IOWIN */ - return *(__volatile__ uint32_t*)((uint64_t)ioapic_addr + 0x10); + /* tell IOREGSEL where we want to read from */ + *(__volatile__ uint32_t *)(uint64_t)ioapic_addr = offset; + /* return the data from IOWIN */ + 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; - /* write the value to IOWIN */ - *(__volatile__ uint32_t*)((uint64_t)ioapic_addr + 0x10) = val; + /* tell IOREGSEL where we want to write to */ + *(__volatile__ uint32_t *)(uint64_t)ioapic_addr = offset; + /* write the value to IOWIN */ + *(__volatile__ uint32_t *)((uint64_t)ioapic_addr + 0x10) = val; } void ioapic_set_irq(uint8_t irq, uint64_t apic_id, uint8_t vector) { - const uint32_t low_index = (uint32_t)0x10 + irq*2; - const uint32_t high_index = (uint32_t)0x10 + irq*2 + 1; + const uint32_t low_index = (uint32_t)0x10 + irq * 2; + const uint32_t high_index = (uint32_t)0x10 + irq * 2 + 1; uint32_t high = ioapic_read((uint8_t)high_index); // set APIC ID @@ -40,10 +40,10 @@ void ioapic_set_irq(uint8_t irq, uint64_t apic_id, uint8_t vector) uint32_t low = ioapic_read((uint8_t)low_index); // unmask the IRQ - low &= (uint32_t)~(1<<16); + low &= (uint32_t) ~(1 << 16); // set to physical delivery mode - low &= (uint32_t)~(1<<11); + low &= (uint32_t) ~(1 << 11); // set to fixed delivery mode low &= (uint32_t)~0x700; @@ -66,6 +66,7 @@ void apic_remap_interrupts() ioapic_set_irq(0x2, bspid, 0x20); // timer 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 ); + 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); } diff --git a/kernel/src/apic/madt.c b/kernel/src/apic/madt.c index f69887d..5a6e914 100644 --- a/kernel/src/apic/madt.c +++ b/kernel/src/apic/madt.c @@ -6,28 +6,37 @@ void parse_madt() { - uint64_t* madt_addr = find_sys_table_addr("APIC"); + uint64_t *madt_addr = find_sys_table_addr("APIC"); if (madt_addr == NULL) { printf("MADT NOT FOUND\n"); return; } - struct MADT* madt = (struct MADT*)kalloc(sizeof(struct MADT)); + struct MADT *madt = (struct MADT *)kalloc(sizeof(struct MADT)); memcpy(madt, madt_addr, sizeof(struct MADT)); lapic_addr = madt->lapic_addr; - for (size_t curr_size = sizeof(struct MADT); curr_size < madt->h.Length;) { - struct MADT_type_header* m = (struct MADT_type_header*)kalloc(sizeof(struct MADT_type_header)); - memcpy(m, (uint64_t*)((uint64_t)madt_addr + (uint64_t)curr_size), sizeof(struct MADT_type_header)); + for (size_t curr_size = sizeof(struct MADT); + curr_size < madt->h.Length;) { + struct MADT_type_header *m = (struct MADT_type_header *)kalloc( + sizeof(struct MADT_type_header)); + memcpy(m, + (uint64_t *)((uint64_t)madt_addr + (uint64_t)curr_size), + sizeof(struct MADT_type_header)); uint8_t type = m->type; uint8_t len = m->len; kfree(m); if (type == 0) { // Processor Local APIC - struct MADT_cpu_local_apic* cpu = (struct MADT_cpu_local_apic*)kalloc(sizeof(struct MADT_cpu_local_apic)); - memcpy(cpu, (uint64_t*)((uint64_t)madt_addr + (uint64_t)curr_size), sizeof(struct MADT_cpu_local_apic)); + struct MADT_cpu_local_apic *cpu = + (struct MADT_cpu_local_apic *)kalloc( + sizeof(struct MADT_cpu_local_apic)); + memcpy(cpu, + (uint64_t *)((uint64_t)madt_addr + + (uint64_t)curr_size), + sizeof(struct MADT_cpu_local_apic)); if (cpu->flags & 0x1) { cpu_apic_ids[numcores] = cpu->apic_id; @@ -38,8 +47,12 @@ void parse_madt() kfree(cpu); } else if (type == 1) { // I/O APIC - struct MADT_io_apic* io = (struct MADT_io_apic*)kalloc(sizeof(struct MADT_io_apic)); - memcpy(io, (uint64_t*)((uint64_t)madt_addr + (uint64_t)curr_size), sizeof(struct MADT_io_apic)); + struct MADT_io_apic *io = (struct MADT_io_apic *)kalloc( + sizeof(struct MADT_io_apic)); + memcpy(io, + (uint64_t *)((uint64_t)madt_addr + + (uint64_t)curr_size), + sizeof(struct MADT_io_apic)); ioapic_addr = io->io_apic_addr; @@ -47,8 +60,13 @@ void parse_madt() kfree(io); } else if (type == 2) { // IO/APIC Interrupt Source Override - struct MADT_io_apic_int* io_apic_int = (struct MADT_io_apic_int*)kalloc(sizeof(struct MADT_io_apic_int)); - memcpy(io_apic_int, (uint64_t*)((uint64_t)madt_addr + (uint64_t)curr_size), sizeof(struct MADT_io_apic_int)); + struct MADT_io_apic_int *io_apic_int = + (struct MADT_io_apic_int *)kalloc( + sizeof(struct MADT_io_apic_int)); + memcpy(io_apic_int, + (uint64_t *)((uint64_t)madt_addr + + (uint64_t)curr_size), + sizeof(struct MADT_io_apic_int)); // printf("found io_apic_int: bus: 0x%x, irq_source: 0x%x, global_sys_int: 0x%x, flags: 0x%x\n", io_apic_int->bus_source, io_apic_int->irq_source, io_apic_int->global_sys_int, io_apic_int->flags); kfree(io_apic_int); @@ -57,15 +75,25 @@ void parse_madt() printf("MADT entry of type %d\n", type); } else if (type == 4) { // Local APIC Non-maskable interrupts - struct MADT_lapic_nmi* lapic_nmi = (struct MADT_lapic_nmi*)kalloc(sizeof(struct MADT_lapic_nmi)); - memcpy(lapic_nmi, (uint64_t*)((uint64_t)madt_addr + (uint64_t)curr_size), sizeof(struct MADT_lapic_nmi)); + struct MADT_lapic_nmi *lapic_nmi = + (struct MADT_lapic_nmi *)kalloc( + sizeof(struct MADT_lapic_nmi)); + memcpy(lapic_nmi, + (uint64_t *)((uint64_t)madt_addr + + (uint64_t)curr_size), + sizeof(struct MADT_lapic_nmi)); // printf("found lapic_nmi: acpi_cpu_id: 0x%x, flags: 0x%x, lint: 0x%x\n", lapic_nmi->acpi_cpu_id, lapic_nmi->flags, lapic_nmi->lint); kfree(lapic_nmi); } else if (type == 5) { // Local APIC Address Override - struct MADT_lapic_addr* lapic_addr_ovr = (struct MADT_lapic_addr*)kalloc(sizeof(struct MADT_lapic_addr)); - memcpy(lapic_addr_ovr, (uint64_t*)((uint64_t)madt_addr + (uint64_t)curr_size), sizeof(struct MADT_lapic_addr)); + struct MADT_lapic_addr *lapic_addr_ovr = + (struct MADT_lapic_addr *)kalloc( + sizeof(struct MADT_lapic_addr)); + memcpy(lapic_addr_ovr, + (uint64_t *)((uint64_t)madt_addr + + (uint64_t)curr_size), + sizeof(struct MADT_lapic_addr)); // printf("found lapic: addr: 0x%x\n", lapic_addr_ovr->phys_addr); kfree(lapic_addr_ovr); diff --git a/kernel/src/apic/rsdp.c b/kernel/src/apic/rsdp.c index e0127aa..c12b63f 100644 --- a/kernel/src/apic/rsdp.c +++ b/kernel/src/apic/rsdp.c @@ -4,12 +4,12 @@ #include #include -uint64_t* find_rsdp() +uint64_t *find_rsdp() { map_addr(0x0, 0x0, FLAG_PRESENT); - const char* rsdp_cs = "RSD PTR "; + const char *rsdp_cs = "RSD PTR "; for (uint64_t i = 0x10; i < 0x100000; i += 0x10) { - char *x = (char*)i; + char *x = (char *)i; uint8_t ind = 1; for (size_t j = 0; j < strlen(rsdp_cs); j++) { if (rsdp_cs[j] != x[j]) { @@ -18,7 +18,7 @@ uint64_t* find_rsdp() } } if (ind) { - return (uint64_t*)i; + return (uint64_t *)i; } } return NULL; @@ -26,28 +26,35 @@ uint64_t* find_rsdp() void list_sys_tables(void) { - uint64_t* rsdp = find_rsdp(); + uint64_t *rsdp = find_rsdp(); if (rsdp == NULL) { printf("RSDP NOT FOUND\n"); return; } - struct RSDP_descriptor* rsdp_desc = (struct RSDP_descriptor*)rsdp; + struct RSDP_descriptor *rsdp_desc = (struct RSDP_descriptor *)rsdp; map_addr(rsdp_desc->RsdtAddress, rsdp_desc->RsdtAddress, FLAG_PRESENT); - struct ACPI_header* rsdt = (struct ACPI_header*)kalloc(sizeof(struct ACPI_header)); - memcpy(rsdt, (uint64_t*)(uint64_t)rsdp_desc->RsdtAddress, sizeof(struct ACPI_header)); + struct ACPI_header *rsdt = + (struct ACPI_header *)kalloc(sizeof(struct ACPI_header)); + memcpy(rsdt, (uint64_t *)(uint64_t)rsdp_desc->RsdtAddress, + sizeof(struct ACPI_header)); - uint32_t entries = (rsdt->Length - (uint32_t)sizeof(struct ACPI_header)) / 4; + uint32_t entries = + (rsdt->Length - (uint32_t)sizeof(struct ACPI_header)) / 4; for (size_t i = 0; i < entries; i++) { - uint32_t na_addr = (uint32_t)rsdp_desc->RsdtAddress + (uint32_t)sizeof(struct ACPI_header) + (uint32_t)i * 4; + uint32_t na_addr = (uint32_t)rsdp_desc->RsdtAddress + + (uint32_t)sizeof(struct ACPI_header) + + (uint32_t)i * 4; uint32_t addr; - memcpy(&addr, (uint64_t*)(uint64_t)na_addr, 4); + memcpy(&addr, (uint64_t *)(uint64_t)na_addr, 4); - struct ACPI_header* t = (struct ACPI_header*)kalloc(sizeof(struct ACPI_header)); - memcpy(t, (uint64_t*)(uint64_t)addr, sizeof(struct ACPI_header)); + struct ACPI_header *t = (struct ACPI_header *)kalloc( + sizeof(struct ACPI_header)); + memcpy(t, (uint64_t *)(uint64_t)addr, + sizeof(struct ACPI_header)); for (size_t j = 0; j < 4; j++) { printf("%c", t->Signature[j]); @@ -61,30 +68,37 @@ void list_sys_tables(void) kfree(rsdt); } -uint64_t* find_sys_table_addr(const char* signature) +uint64_t *find_sys_table_addr(const char *signature) { - uint64_t* rsdp = find_rsdp(); + uint64_t *rsdp = find_rsdp(); if (rsdp == NULL) { printf("RSDP NOT FOUND\n"); return NULL; } - struct RSDP_descriptor* rsdp_desc = (struct RSDP_descriptor*)rsdp; + struct RSDP_descriptor *rsdp_desc = (struct RSDP_descriptor *)rsdp; map_addr(rsdp_desc->RsdtAddress, rsdp_desc->RsdtAddress, FLAG_PRESENT); - struct ACPI_header* rsdt = (struct ACPI_header*)kalloc(sizeof(struct ACPI_header)); - memcpy(rsdt, (uint64_t*)(uint64_t)rsdp_desc->RsdtAddress, sizeof(struct ACPI_header)); + struct ACPI_header *rsdt = + (struct ACPI_header *)kalloc(sizeof(struct ACPI_header)); + memcpy(rsdt, (uint64_t *)(uint64_t)rsdp_desc->RsdtAddress, + sizeof(struct ACPI_header)); - uint32_t entries = (rsdt->Length - (uint32_t)sizeof(struct ACPI_header)) / 4; + uint32_t entries = + (rsdt->Length - (uint32_t)sizeof(struct ACPI_header)) / 4; for (size_t i = 0; i < entries; i++) { - uint32_t na_addr = (uint32_t)rsdp_desc->RsdtAddress + (uint32_t)sizeof(struct ACPI_header) + (uint32_t)i * 4; + uint32_t na_addr = (uint32_t)rsdp_desc->RsdtAddress + + (uint32_t)sizeof(struct ACPI_header) + + (uint32_t)i * 4; uint32_t addr; - memcpy(&addr, (uint64_t*)(uint64_t)na_addr, 4); + memcpy(&addr, (uint64_t *)(uint64_t)na_addr, 4); - struct ACPI_header* t = (struct ACPI_header*)kalloc(sizeof(struct ACPI_header)); - memcpy(t, (uint64_t*)(uint64_t)addr, sizeof(struct ACPI_header)); + struct ACPI_header *t = (struct ACPI_header *)kalloc( + sizeof(struct ACPI_header)); + memcpy(t, (uint64_t *)(uint64_t)addr, + sizeof(struct ACPI_header)); int ind = 1; for (size_t j = 0; j < 4; j++) { @@ -94,7 +108,7 @@ uint64_t* find_sys_table_addr(const char* signature) if (ind) { kfree(t); kfree(rsdt); - return (uint64_t*)(uint64_t)addr; + return (uint64_t *)(uint64_t)addr; } kfree(t); -- cgit v1.2.3