summaryrefslogtreecommitdiff
path: root/kernel/src/apic/rsdp.c
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksa@vuckovic.cc>2023-03-02 20:30:55 +0100
committerAleksa Vuckovic <aleksa@vuckovic.cc>2023-03-02 20:30:55 +0100
commitfbc2cc52c8a38c3c63a34f5547ba7c4209a667ac (patch)
tree985e3b96308123dc1771abfc30e9fe4f8daac5f4 /kernel/src/apic/rsdp.c
parent1e1c00c09991846257af4c8e50a177178355d986 (diff)
scheduling usermode processes & code refactoring
Diffstat (limited to 'kernel/src/apic/rsdp.c')
-rw-r--r--kernel/src/apic/rsdp.c61
1 files changed, 34 insertions, 27 deletions
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;