refactor: decouple i386 specific instruction invocation
[lunaix-os.git] / lunaix-os / includes / hal / acpi / acpi.h
index 453e9f438f8d3366e5e4a5fbdf19c63ee19fee92..f5ef5235616b941f8a8de913fab993b8563a6222 100644 (file)
@@ -1,40 +1,45 @@
 #ifndef __LUNAIX_ACPI_ACPI_H
 #define __LUNAIX_ACPI_ACPI_H
 
-#include <stdint.h>
+#include <arch/i386/boot/multiboot.h>
 #include <stddef.h>
-#include <arch/x86/boot/multiboot.h>
+#include <stdint.h>
 
-#include "sdt.h"
-#include "madt.h"
 #include "fadt.h"
+#include "madt.h"
+#include "mcfg.h"
+#include "sdt.h"
 
 // * for quick conversion from a table name into ACPI favoured signature
 // * use `echo <TableName> | xxd -eg4`
 
-#define ACPI_RSDP_SIG_L       0x20445352      // 'RSD '
-#define ACPI_RSDP_SIG_H      0x20525450       // 'PTR '
+#define ACPI_RSDP_SIG_L 0x20445352 // 'RSD '
+#define ACPI_RSDP_SIG_H 0x20525450 // 'PTR '
+
+#define ACPI_MADT_SIG 0x43495041 // 'APIC'
+#define ACPI_FADT_SIG 0x50434146 // 'FACP' Notice that it is not 'FADT'.
 
-#define ACPI_MADT_SIG        0x43495041       // 'APIC'
-#define ACPI_FADT_SIG        0x50434146       // 'FACP' Notice that it is not 'FADT'.
+// 'MCFG' (Not part of ACPI standard. See PCI Firmware Spec.)
+#define ACPI_MCFG_SIG 0x4746434d
 
-typedef struct {
-    uint32_t signature_l;
-    uint32_t signature_h;
-    uint8_t chksum;
+typedef struct
+{
+    u32_t signature_l;
+    u32_t signature_h;
+    u8_t chksum;
     char oem_id[6];
     // Revision
-    uint8_t rev;
+    u8_t rev;
     acpi_rsdt_t* rsdt;
-    uint32_t length;
+    u32_t length;
     acpi_sdthdr_t* xsdt;
-    uint8_t x_chksum;
-    char reserved[3];    // Reserved field
+    u8_t x_chksum;
+    char reserved[3]; // Reserved field
 } __attribute__((packed)) acpi_rsdp_t;
 
 /**
  * @brief Main TOC of ACPI tables, provide hassle-free access of ACPI info.
- * 
+ *
  */
 typedef struct
 {
@@ -42,6 +47,7 @@ typedef struct
     char oem_id[7];
     acpi_madt_toc_t madt;
     acpi_fadt_t fadt;
+    struct acpi_mcfg_toc mcfg;
 } acpi_context;
 
 int
@@ -50,4 +56,7 @@ acpi_init(multiboot_info_t* mb_info);
 acpi_context*
 acpi_get_context();
 
+u8_t
+acpi_gistranslate(u8_t old_irq);
+
 #endif /* __LUNAIX_ACPI_ACPI_H */