Parcourir la source

Merge pull request #99 from wusyong/feat/multi-wakeup

Add Multiprocessor Wakeup structure
Isaac Woods il y a 3 ans
Parent
commit
2bfb34b770
1 fichiers modifiés avec 14 ajouts et 2 suppressions
  1. 14 2
      acpi/src/madt.rs

+ 14 - 2
acpi/src/madt.rs

@@ -86,6 +86,8 @@ impl Madt {
             MadtEntry::GicInterruptTranslationService(_) => {
                 unimplemented!();
             }
+
+            MadtEntry::MultiprocessorWakeup(_) => ()
         }
         }
 
@@ -258,6 +260,7 @@ pub enum MadtEntry<'a> {
     GicMsiFrame(&'a GicMsiFrameEntry),
     GicRedistributor(&'a GicRedistributorEntry),
     GicInterruptTranslationService(&'a GicInterruptTranslationServiceEntry),
+    MultiprocessorWakeup(&'a MultiprocessorWakeupEntry),
 }
 
 impl<'a> Iterator for MadtEntryIter<'a> {
@@ -289,7 +292,7 @@ impl<'a> Iterator for MadtEntryIter<'a> {
                          * These entry types are reserved by the ACPI standard. We should skip them
                          * if they appear in a real MADT.
                          */
-                        0x10..=0x7f => {}
+                        0x11..=0x7f => {}
 
                         /*
                          * These entry types are reserved for OEM use. Atm, we just skip them too.
@@ -319,7 +322,8 @@ impl<'a> Iterator for MadtEntryIter<'a> {
                 (0xc => MadtEntry::Gicd as GicdEntry),
                 (0xd => MadtEntry::GicMsiFrame as GicMsiFrameEntry),
                 (0xe => MadtEntry::GicRedistributor as GicRedistributorEntry),
-                (0xf => MadtEntry::GicInterruptTranslationService as GicInterruptTranslationServiceEntry)
+                (0xf => MadtEntry::GicInterruptTranslationService as GicInterruptTranslationServiceEntry),
+                (0x10 => MadtEntry::MultiprocessorWakeup as MultiprocessorWakeupEntry)
             );
         }
 
@@ -509,6 +513,14 @@ pub struct GicInterruptTranslationServiceEntry {
     _reserved2: u32,
 }
 
+#[repr(C, packed)]
+pub struct MultiprocessorWakeupEntry {
+    header: EntryHeader,
+    mailbox_version: u16,
+    _reserved: u32,
+    mailbox_address: u64,
+}
+
 fn parse_mps_inti_flags(flags: u16) -> Result<(Polarity, TriggerMode), AcpiError> {
     let polarity = match flags.get_bits(0..2) {
         0b00 => Polarity::SameAsBus,