Delineate ACSP DSL code into sections.
[seabios.git] / src / acpi-dsdt.dsl
index dafcf4500623009f40045d8c4d7e6bf24d563c4a..f021b53dde114f9d283f2cea6fad960dcfdd5c7b 100644 (file)
@@ -25,6 +25,12 @@ DefinitionBlock (
     0x1                 // OEM Revision
     )
 {
+
+
+/****************************************************************
+ * Debugging
+ ****************************************************************/
+
     Scope (\)
     {
         /* Debug Output */
@@ -50,7 +56,11 @@ DefinitionBlock (
         }
     }
 
-    /* PCI Bus definition */
+
+/****************************************************************
+ * PCI Bus definition
+ ****************************************************************/
+
     Scope(\_SB) {
         Device(PCI0) {
             Name (_HID, EisaId ("PNP0A03"))
@@ -122,6 +132,12 @@ DefinitionBlock (
                 B0EJ, 32,
             }
 
+            OperationRegion(RMVC, SystemIO, 0xae0c, 0x04)
+            Field(RMVC, DWordAcc, NoLock, WriteAsZeros)
+            {
+                PCRM, 32,
+            }
+
 #define hotplug_slot(name, nr) \
             Device (S##name) {                    \
                Name (_ADR, nr##0000)              \
@@ -209,7 +225,14 @@ DefinitionBlock (
                     ,, , AddressRangeMemory, TypeStatic)
             })
         }
+    }
+
+
+/****************************************************************
+ * HPET
+ ****************************************************************/
 
+    Scope(\_SB) {
         Device(HPET) {
             Name(_HID,  EISAID("PNP0103"))
             Name(_UID, 0)
@@ -230,9 +253,18 @@ DefinitionBlock (
         }
     }
 
+
+/****************************************************************
+ * VGA
+ ****************************************************************/
+
     Scope(\_SB.PCI0) {
         Device (VGA) {
                  Name (_ADR, 0x00020000)
+                 OperationRegion(PCIC, PCI_Config, Zero, 0x4)
+                 Field(PCIC, DWordAcc, NoLock, Preserve) {
+                         VEND, 32
+                 }
                  Method (_S1D, 0, NotSerialized)
                  {
                          Return (0x00)
@@ -243,17 +275,37 @@ DefinitionBlock (
                  }
                  Method (_S3D, 0, NotSerialized)
                  {
-                         Return (0x00)
+                         If (LEqual(VEND, 0x1001b36)) {
+                                 Return (0x03)           // QXL
+                         } Else {
+                                 Return (0x00)
+                         }
                  }
+                 Method(_RMV) { Return (0x00) }
         }
+    }
 
-       /* PIIX3 ISA bridge */
+
+/****************************************************************
+ * PIIX3 ISA bridge
+ ****************************************************************/
+
+    Scope(\_SB.PCI0) {
         Device (ISA) {
             Name (_ADR, 0x00010000)
+            Method(_RMV) { Return (0x00) }
 
             /* PIIX PCI to ISA irq remapping */
             OperationRegion (P40C, PCI_Config, 0x60, 0x04)
+        }
+    }
 
+
+/****************************************************************
+ * SuperIO devices (kbd, mouse, etc.)
+ ****************************************************************/
+
+    Scope(\_SB.PCI0.ISA) {
             /* Real-time clock */
             Device (RTC)
             {
@@ -422,9 +474,14 @@ DefinitionBlock (
                    Return (BUF0)
                }
            }
-        }
+    }
+
+
+/****************************************************************
+ * PIIX4 PM
+ ****************************************************************/
 
-       /* PIIX4 PM */
+    Scope(\_SB.PCI0) {
         Device (PX13) {
            Name (_ADR, 0x00010003)
 
@@ -444,7 +501,62 @@ DefinitionBlock (
        }
     }
 
-    /* PCI IRQs */
+
+/****************************************************************
+ * PCI hotplug
+ ****************************************************************/
+
+    Scope(\_SB.PCI0) {
+
+#define gen_pci_device(name, nr)                                \
+        Device(SL##name) {                                      \
+            Name (_ADR, nr##0000)                               \
+            Method (_RMV) {                                     \
+                If (And(\_SB.PCI0.PCRM, ShiftLeft(1, nr))) {    \
+                    Return (0x1)                                \
+                }                                               \
+                Return (0x0)                                    \
+            }                                                   \
+            Name (_SUN, name)                                   \
+        }
+
+        /* VGA (slot 1) and ISA bus (slot 2) defined above */
+       gen_pci_device(3, 0x0003)
+       gen_pci_device(4, 0x0004)
+       gen_pci_device(5, 0x0005)
+       gen_pci_device(6, 0x0006)
+       gen_pci_device(7, 0x0007)
+       gen_pci_device(8, 0x0008)
+       gen_pci_device(9, 0x0009)
+       gen_pci_device(10, 0x000a)
+       gen_pci_device(11, 0x000b)
+       gen_pci_device(12, 0x000c)
+       gen_pci_device(13, 0x000d)
+       gen_pci_device(14, 0x000e)
+       gen_pci_device(15, 0x000f)
+       gen_pci_device(16, 0x0010)
+       gen_pci_device(17, 0x0011)
+       gen_pci_device(18, 0x0012)
+       gen_pci_device(19, 0x0013)
+       gen_pci_device(20, 0x0014)
+       gen_pci_device(21, 0x0015)
+       gen_pci_device(22, 0x0016)
+       gen_pci_device(23, 0x0017)
+       gen_pci_device(24, 0x0018)
+       gen_pci_device(25, 0x0019)
+       gen_pci_device(26, 0x001a)
+       gen_pci_device(27, 0x001b)
+       gen_pci_device(28, 0x001c)
+       gen_pci_device(29, 0x001d)
+       gen_pci_device(30, 0x001e)
+       gen_pci_device(31, 0x001f)
+    }
+
+
+/****************************************************************
+ * PCI IRQs
+ ****************************************************************/
+
     Scope(\_SB) {
          Field (\_SB.PCI0.ISA.P40C, ByteAcc, NoLock, Preserve)
          {
@@ -676,6 +788,11 @@ DefinitionBlock (
         }
     }
 
+
+/****************************************************************
+ * Suspend
+ ****************************************************************/
+
     /*
      * S3 (suspend-to-ram), S4 (suspend-to-disk) and S5 (power-off) type codes:
      * must match piix4 emulation.
@@ -702,7 +819,11 @@ DefinitionBlock (
         Zero   /* reserved */
     })
 
-    /* CPU hotplug */
+
+/****************************************************************
+ * CPU hotplug
+ ****************************************************************/
+
     Scope(\_SB) {
         /* Objects filled in by run-time generated SSDT */
         External(NTFY, MethodObj)
@@ -774,6 +895,11 @@ DefinitionBlock (
         }
     }
 
+
+/****************************************************************
+ * General purpose events
+ ****************************************************************/
+
     Scope (\_GPE)
     {
         Name(_HID, "ACPI0006")