From fbc2cc52c8a38c3c63a34f5547ba7c4209a667ac Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Thu, 2 Mar 2023 20:30:55 +0100 Subject: scheduling usermode processes & code refactoring --- kernel/src/apic/rsdp.c | 61 ++++++++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 27 deletions(-) (limited to 'kernel/src/apic/rsdp.c') diff --git a/kernel/src/apic/rsdp.c b/kernel/src/apic/rsdp.c index 6a1505f..fa16816 100644 --- a/kernel/src/apic/rsdp.c +++ b/kernel/src/apic/rsdp.c @@ -6,14 +6,17 @@ uint64_t *find_rsdp() { - map_addr(0x0, 0x0, FLAG_PRESENT); const char *rsdp_cs = "RSD PTR "; uint64_t i; size_t j; + char *x; + uint8_t ind; + + map_addr(0x0, 0x0, FLAG_PRESENT); for (i = 0x10; i < 0x100000; i += 0x10) { - char *x = (char *)i; - uint8_t ind = 1; + x = (char *)i; + ind = 1; for (j = 0; j < strlen(rsdp_cs); j++) { if (rsdp_cs[j] != x[j]) { ind = 0; @@ -30,33 +33,35 @@ uint64_t *find_rsdp() void list_sys_tables(void) { uint64_t *rsdp = find_rsdp(); + struct RSDP_descriptor *rsdp_desc; + struct ACPI_header *rsdt; + uint32_t entries; + size_t i; + size_t j; + uint32_t na_addr; + uint32_t addr; + struct ACPI_header *t; if (rsdp == NULL) { printf("RSDP NOT FOUND\n"); return; } - struct RSDP_descriptor *rsdp_desc = (struct RSDP_descriptor *)rsdp; + 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)); + 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; - size_t i; - size_t j; + entries = (rsdt->Length - (uint32_t)sizeof(struct ACPI_header)) / 4; for (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 addr; + na_addr = (uint32_t)rsdp_desc->RsdtAddress + + (uint32_t)sizeof(struct ACPI_header) + + (uint32_t)i * 4; memcpy(&addr, (uint64_t *)(uint64_t)na_addr, 4); - struct ACPI_header *t = (struct ACPI_header *)kalloc( - sizeof(struct ACPI_header)); + t = (struct ACPI_header *)kalloc(sizeof(struct ACPI_header)); memcpy(t, (uint64_t *)(uint64_t)addr, sizeof(struct ACPI_header)); @@ -75,38 +80,40 @@ void list_sys_tables(void) uint64_t *find_sys_table_addr(const char *signature) { uint64_t *rsdp = find_rsdp(); + struct RSDP_descriptor *rsdp_desc; + struct ACPI_header *rsdt; + uint32_t entries; + size_t i; + size_t j; + uint32_t addr; + struct ACPI_header *t; + uint8_t ind = 1; if (rsdp == NULL) { printf("RSDP NOT FOUND\n"); return NULL; } - struct RSDP_descriptor *rsdp_desc = (struct RSDP_descriptor *)rsdp; + 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)); + 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; + entries = (rsdt->Length - (uint32_t)sizeof(struct ACPI_header)) / 4; - size_t i; - size_t j; for (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 addr; memcpy(&addr, (uint64_t *)(uint64_t)na_addr, 4); - struct ACPI_header *t = (struct ACPI_header *)kalloc( - sizeof(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; + ind = 1; for (j = 0; j < 4; j++) { if (t->Signature[j] != signature[j]) ind = 0; -- cgit v1.2.3