69 asm volatile(
"mfence" :::
"memory");
162 LOG_INFO(
"ACPI",
"madt header 0x%x length 0x%x",
ptr, ptr_end);
170 while (
ptr < ptr_end) {
174 if (t->record_length == 0)
176 switch (t->entry_type) {
182 LOG_INFO(
"ACPI",
"found APIC Id %d CPU Id %d", apic_id,
193 LOG_DEBUG(
"ACPI INT",
"BUS %d IRQ %d GSI %d flags %d",
204 "found IOAPIC id %d addr 0x%x GSI Base %d",
205 ioapic_id, ioapic_addr, ioapic_gsi_base);
213 LOG_DEBUG(
"ACPI NMI",
"processor %d flags %d lint %d",
214 processor,
flags, lint);
219 ptr += t->record_length;
223#define APIC_SIGNATURE 0x43495041
224#define HPET_SIGNATURE 0x54455048
225#define MCFG_SIGNATURE 0x4746434D
226#define WAET_SIGNATURE 0x54454157
227#define FACP_SIGNATURE 0x50434146
228#define TPM2_SIGNATURE 0x324D5054
229#define DSDT_SIGNATURE 0x54445344
247 LOG_INFO(
"ACPI",
"rsdt addr 0x%x", rsdt_addr);
256 LOG_INFO(
"RSDT",
"rsdt entry count %d", entry_count);
258 for (
uint32_t i = 0; i < entry_count; i++) {
291 LOG_INFO(
"ACPI",
"end search at rsdt");
void apicSetBaseAddr(uintptr_t addr)
void acpi_phys_page_unmap(uintptr_t addr)
static void parsing_fadt(uintptr_t fadt_addr)
struct cpu_core * vxGetCpuInfo(uint8_t apicid)
uint8_t vxGetNumberOfCores()
static void vxACPIRegisterNewCore(uint8_t apicid, uint8_t cpuid, uint32_t flag)
uintptr_t acpi_map_phys_page(uintptr_t phys_addr, size_t len)
static struct cpu_core * cpu_list
static void parsing_madt(struct MADT *madt)
madt_record_table_entry_t
void cpuid(uint32_t leaf, uint32_t subleaf, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx)
void vxHPETInitialize(uintptr_t addr)
void ioapic_setup(uintptr_t ioapic_addr)
void ioapic_add_irq_gsi_map(uint8_t irq, uint32_t gsi, uint16_t flags)
void * kalloc(size_t size)
#define ALIGN_DOWN(x, align)
void paging_reload(page_t p)
page_t paging_get_highest_page_map(void)
void paging_unmap_fill(page_t page_dir, uint64_t virt, size_t size)
void vxMultipleMmap(page_t page_dir, uint64_t virt, uint64_t phys, uint64_t size, uint64_t flags)
#define PAGE_CACHE_DISABLE
#define PAGE_WRITE_THROUGH
void mcfg_parse(uintptr_t addr)
#define LOG_INFO(mod, fmt,...)
#define serial_trace(...)
#define LOG_DEBUG(mod, fmt,...)
int strncmp(const char *s1, const char *s2, size_t n)
madt_record_table_entry_t table[]
uint32_t localApicAddress
uint32_t PointerToOtherSDT[]
uintptr_t vma_lookup_free_vaddr(struct virtual_memory_page *page, mem_vma_region region, size_t size)
void vma_register(struct virtual_memory_page *page, uintptr_t phys_address, uintptr_t virt_addr, size_t size)
void vma_unregister(struct virtual_memory_page *page, uintptr_t virt_addr)
struct virtual_memory_page * get_kernel_vmm_page()