From dbf38b766a6538d14a60e608e2be22a31912989f Mon Sep 17 00:00:00 2001 From: mintsuki Date: Fri, 18 Sep 2020 19:26:17 +0200 Subject: [PATCH] Rename processor_id to acpi_processor_uid and other minor bug fixes --- STIVALE2.md | 37 ++++++++++++++++++++----------------- limine.bin | Bin 32768 -> 32768 bytes stage2/lib/smp.c | 5 ++++- stage2/lib/smp.h | 2 +- 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/STIVALE2.md b/STIVALE2.md index fef82551..52d08827 100644 --- a/STIVALE2.md +++ b/STIVALE2.md @@ -385,22 +385,25 @@ struct stivale2_struct_tag_smp { ```c struct stivale2_smp_info { - uint32_t processor_id; // Processor ID as specified by MADT - uint32_t lapic_id; // LAPIC ID as specified by MADT - uint64_t target_stack; // The stack that will be loaded in ESP/RSP - // once the goto_address field is loaded. - // This MUST point to a valid stack of at least - // 256 bytes in size, and 16-byte aligned. - uint64_t goto_address; // This address is polled by the started APs - // until the kernel on another CPU performs an - // atomic write to this field. - // When that happens, bootloader code will - // load up ESP/RSP with the stack value as - // specified in target_stack. - // It will then proceed to load a pointer to - // this very structure into either register - // RDI for 64-bit or on the stack for 32-bit, - // then, goto_address is called and execution is - // handed off. + uint32_t acpi_processor_uid; // ACPI Processor UID as specified by MADT + uint32_t lapic_id; // LAPIC ID as specified by MADT + uint64_t target_stack; // The stack that will be loaded in ESP/RSP + // once the goto_address field is loaded. + // This MUST point to a valid stack of at least + // 256 bytes in size, and 16-byte aligned. + uint64_t goto_address; // This address is polled by the started APs + // until the kernel on another CPU performs an + // atomic write to this field. + // When that happens, bootloader code will + // load up ESP/RSP with the stack value as + // specified in target_stack. + // It will then proceed to load a pointer to + // this very structure into either register + // RDI for 64-bit or on the stack for 32-bit, + // then, goto_address is called (a bogus return + // address is pushed onto the stack) and execution + // is handed off. + // All general purpose registers are cleared + // except ESP/RSP, and RDI in 64-bit mode. } __attribute__((packed)); ``` diff --git a/limine.bin b/limine.bin index 2848241b81c2c72b126977d698fe69897f1ced39..41dc7cc62c96965594aa7f3b715e3a56c0f7f77b 100644 GIT binary patch delta 18867 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 Gkst)!3J@{? delta 18858 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 diff --git a/stage2/lib/smp.c b/stage2/lib/smp.c index f9f23f74..f63316a2 100644 --- a/stage2/lib/smp.c +++ b/stage2/lib/smp.c @@ -23,7 +23,7 @@ struct madt_header { struct madt_lapic { struct madt_header; - uint8_t processor_id; + uint8_t acpi_processor_uid; uint8_t lapic_id; uint32_t flags; } __attribute__((packed)); @@ -115,6 +115,9 @@ struct smp_information *init_smp(size_t *cpu_count, struct smp_information *info_struct = balloc_aligned(sizeof(struct smp_information), 1); + info_struct->acpi_processor_uid = lapic->acpi_processor_uid; + info_struct->lapic_id = lapic->lapic_id; + // Try to start the AP if (!smp_start_ap(lapic->lapic_id, &gdtr, info_struct, longmode ? 1 : 0, (uint32_t)pagemap.top_level)) { diff --git a/stage2/lib/smp.h b/stage2/lib/smp.h index 0c96b2a3..28a87b09 100644 --- a/stage2/lib/smp.h +++ b/stage2/lib/smp.h @@ -7,7 +7,7 @@ #include struct smp_information { - uint32_t processor_id; + uint32_t acpi_processor_uid; uint32_t lapic_id; uint64_t stack_addr; uint64_t goto_address;