diff options
| author | Aleksa Vuckovic <aleksav013@gmail.com> | 2023-01-24 01:55:35 +0100 |
|---|---|---|
| committer | Aleksa Vuckovic <aleksav013@gmail.com> | 2023-01-24 01:55:35 +0100 |
| commit | 95d1eb6d381b3eeaf0a8c3de57d5ee554229bcd6 (patch) | |
| tree | 6433c3dc56fbfe60bac8d0de4d933fdac1270b48 /kernel/include | |
| parent | 32d96c66c088a58d80acf251d9576d0ed2e1b78c (diff) | |
parsing RSDP & MADT
Diffstat (limited to 'kernel/include')
| -rw-r--r-- | kernel/include/ext2.h | 2 | ||||
| -rw-r--r-- | kernel/include/madt.h | 55 | ||||
| -rw-r--r-- | kernel/include/rsdp.h | 30 |
3 files changed, 86 insertions, 1 deletions
diff --git a/kernel/include/ext2.h b/kernel/include/ext2.h index b9222df..d6022a2 100644 --- a/kernel/include/ext2.h +++ b/kernel/include/ext2.h @@ -152,6 +152,6 @@ char* files_to_buffer(uint32_t inode); path_t* path_to_list(const char* path); uint32_t path_to_inode(const char* path); void ls(uint32_t inode); -void print(uint32_t inode); +void print_inode(uint32_t inode); #endif diff --git a/kernel/include/madt.h b/kernel/include/madt.h new file mode 100644 index 0000000..de3eb95 --- /dev/null +++ b/kernel/include/madt.h @@ -0,0 +1,55 @@ +#ifndef MADT_H +#define MADT_H + +#include <rsdp.h> + +struct MADT { + struct ACPI_header h; + uint32_t lacpi_addr; + uint32_t flags; +} __attribute__((packed)); + +struct MADT_type_header { + uint8_t type; + uint8_t len; +} __attribute__((packed)); + +struct MADT_cpu_local_apic { + struct MADT_type_header h; + uint8_t acpi_id; + uint8_t apic_id; + uint32_t flags; +} __attribute__((packed)); + +struct MADT_io_apic { + struct MADT_type_header h; + uint8_t apic_id; + uint8_t reserved; + uint32_t io_apic_addr; + uint32_t int_base; +} __attribute__((packed)); + +struct MADT_io_apic_int { + struct MADT_type_header h; + uint8_t bus_source; + uint8_t irq_source; + uint32_t global_sys_int; + uint16_t flags; +} __attribute__((packed)); + +struct MADT_lapic_nmi { + struct MADT_type_header h; + uint8_t acpi_cpu_id; + uint16_t flags; + uint8_t lint; +} __attribute__((packed)); + +struct MADT_lapic_addr { + struct MADT_type_header h; + uint16_t reserved; + uint64_t phys_addr; +} __attribute__((packed)); + +void parse_madt(void); + +#endif diff --git a/kernel/include/rsdp.h b/kernel/include/rsdp.h new file mode 100644 index 0000000..c931ee0 --- /dev/null +++ b/kernel/include/rsdp.h @@ -0,0 +1,30 @@ +#ifndef RSDP_H +#define RSDP_H + +#include <types.h> + +struct RSDP_descriptor { + char Signature[8]; + uint8_t Checksum; + char OEMID[6]; + uint8_t Revision; + uint32_t RsdtAddress; +} __attribute__((packed)); + +struct ACPI_header { + char Signature[4]; + uint32_t Length; + uint8_t Revision; + uint8_t Checksum; + char OEMID[6]; + char OEMTableID[8]; + uint32_t OEMRevision; + uint32_t CreatorID; + uint32_t CreatorRevision; +} __attribute__((packed)); + + +uint64_t* find_rsdp(void); +uint64_t* find_sys_table_addr(const char* signature); + +#endif |
