The _EJ0 method is executed by the OS once it has successfully finished
device removal. Inform that event through IO port space so QEMU 
can free the associated data.

Signed-off-by: Marcelo Tosatti <[EMAIL PROTECTED]>

Index: kvm-userspace.hotplug2/bios/acpi-dsdt.dsl
===================================================================
--- kvm-userspace.hotplug2.orig/bios/acpi-dsdt.dsl
+++ kvm-userspace.hotplug2/bios/acpi-dsdt.dsl
@@ -414,159 +414,258 @@ DefinitionBlock (
                PCID, 32,
            }
 
+            OperationRegion(SEJ, SystemIO, 0xae08, 0x04)
+            Field (SEJ, DWordAcc, NoLock, WriteAsZeros)
+            {
+                B0EJ, 32,
+            }
+
             Device (S1) {              // Slot 1
                Name (_ADR, 0x00010000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x2, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S2) {              // Slot 2
                Name (_ADR, 0x00020000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x4, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S3) {              // Slot 3
                Name (_ADR, 0x00030000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store (0x8, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S4) {              // Slot 4
                Name (_ADR, 0x00040000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x10, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S5) {              // Slot 5
                Name (_ADR, 0x00050000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x20, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S6) {              // Slot 6
                Name (_ADR, 0x00060000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x40, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S7) {              // Slot 7
                Name (_ADR, 0x00070000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x80, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S8) {              // Slot 8
                Name (_ADR, 0x00080000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x100, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S9) {              // Slot 9
                Name (_ADR, 0x00090000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x200, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S10) {              // Slot 10
                Name (_ADR, 0x000A0000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x400, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S11) {              // Slot 11
                Name (_ADR, 0x000B0000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x800, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S12) {              // Slot 12
                Name (_ADR, 0x000C0000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x1000, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S13) {              // Slot 13
                Name (_ADR, 0x000D0000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x2000, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S14) {              // Slot 14
                Name (_ADR, 0x000E0000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x4000, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S15) {              // Slot 15
                Name (_ADR, 0x000F0000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x8000, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S16) {              // Slot 16
                Name (_ADR, 0x00100000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x10000, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S17) {              // Slot 17
                Name (_ADR, 0x00110000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x20000, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S18) {              // Slot 18
                Name (_ADR, 0x00120000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x40000, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S19) {              // Slot 19
                Name (_ADR, 0x00130000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x80000, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S20) {              // Slot 20
                Name (_ADR, 0x00140000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x100000, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S21) {              // Slot 21
                Name (_ADR, 0x00150000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x200000, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S22) {              // Slot 22
                Name (_ADR, 0x00160000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x400000, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S23) {              // Slot 23
                Name (_ADR, 0x00170000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x800000, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S24) {              // Slot 24
                Name (_ADR, 0x00180000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x1000000, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S25) {              // Slot 25
                Name (_ADR, 0x00190000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x2000000, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S26) {              // Slot 26
                Name (_ADR, 0x001A0000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x4000000, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S27) {              // Slot 27
                Name (_ADR, 0x001B0000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x8000000, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S28) {              // Slot 28
                Name (_ADR, 0x001C0000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x10000000, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S29) {              // Slot 29
                Name (_ADR, 0x001D0000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x20000000, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S30) {              // Slot 30
                Name (_ADR, 0x001E0000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x40000000, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Device (S31) {              // Slot 31
                Name (_ADR, 0x001F0000)
-               Method (_EJ0,1) { Return (0x0) }
+               Method (_EJ0,1) {
+                    Store(0x80000000, B0EJ)
+                    Return (0x0)
+               }
             }
 
             Method (_CRS, 0, NotSerialized)

-- 



Reply via email to