On Tue, Sep 20, 2011 at 06:45:57AM -0400, Amos Kong wrote: > >From 48ea1c9188334b89a60b4f9e853e86fc04fda4a5 Mon Sep 17 00:00:00 2001 > From: Amos Kong <akong@xxxxxxxxxx> > Date: Tue, 20 Sep 2011 15:38:43 +0800 > Subject: [SeaBIOS PATCH v2] hotplug: Add device per func in ACPI DSDT tables > > Only func 0 is registered to guest driver (we can > only found func 0 in slot->funcs list of driver), > the other functions could not be cleaned when > hot-removing the whole slot. This patch adds > device per function in ACPI DSDT tables. > > Have tested with linux/winxp/win7, hot-adding/hot-remving, > single/multiple function device, they are all fine. > --- > Changes from v1: > - cleanup the macros, bios.bin gets back to 128K > - notify only when func0 is added and removed > > Signed-off-by: Amos Kong <akong@xxxxxxxxxx> > Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxx> > --- > src/acpi-dsdt.dsl | 106 ++++++++++++++++++++++++++++++---------------------- > 1 files changed, 61 insertions(+), 45 deletions(-) > > diff --git a/src/acpi-dsdt.dsl b/src/acpi-dsdt.dsl > index 08412e2..707c3d6 100644 > --- a/src/acpi-dsdt.dsl > +++ b/src/acpi-dsdt.dsl > @@ -128,9 +128,9 @@ DefinitionBlock ( > PCRM, 32, > } > > -#define hotplug_slot(name, nr) \ > - Device (S##name) { \ > - Name (_ADR, nr##0000) \ > +#define hotplug_func(name, nr, adr, fn) \ > + Device (S##name##fn) { \ > + Name (_ADR, adr) \ > Method (_EJ0,1) { \ > Store(ShiftLeft(1, nr), B0EJ) \ > Return (0x0) \ > @@ -138,6 +138,16 @@ DefinitionBlock ( > Name (_SUN, name) \ > } > > +#define hotplug_slot(name, nr) \ > + hotplug_func(name, nr, nr##0000, 0) \ > + hotplug_func(name, nr, nr##0001, 1) \ > + hotplug_func(name, nr, nr##0002, 2) \ > + hotplug_func(name, nr, nr##0003, 3) \ > + hotplug_func(name, nr, nr##0004, 4) \ > + hotplug_func(name, nr, nr##0005, 5) \ > + hotplug_func(name, nr, nr##0006, 6) \ > + hotplug_func(name, nr, nr##0007, 7) > + > hotplug_slot(1, 0x0001) > hotplug_slot(2, 0x0002) > hotplug_slot(3, 0x0003) > @@ -460,7 +470,7 @@ DefinitionBlock ( > } > } > > -#define gen_pci_device(name, nr) \ > +#define gen_pci_device(name, nr) \ > Device(SL##name) { \ > Name (_ADR, nr##0000) \ > Method (_RMV) { \ > @@ -502,6 +512,52 @@ DefinitionBlock ( > gen_pci_device(29, 0x001d) > gen_pci_device(30, 0x001e) > gen_pci_device(31, 0x001f) > + > +#define gen_pci_hotplug(nr) \ > + If (And(PCIU, ShiftLeft(1, nr))) { \ > + Notify(S##nr##0, 1) \ > + } \ > + If (And(PCID, ShiftLeft(1, nr))) { \ > + Notify(S##nr##0, 3) \ > + } > + > + Method(HPLG) { > + gen_pci_hotplug(1) > + gen_pci_hotplug(2) > + gen_pci_hotplug(3) > + gen_pci_hotplug(4) > + gen_pci_hotplug(5) > + gen_pci_hotplug(6) > + gen_pci_hotplug(7) > + gen_pci_hotplug(8) > + gen_pci_hotplug(9) > + gen_pci_hotplug(10) > + gen_pci_hotplug(11) > + gen_pci_hotplug(12) > + gen_pci_hotplug(13) > + gen_pci_hotplug(14) > + gen_pci_hotplug(15) > + gen_pci_hotplug(16) > + gen_pci_hotplug(17) > + gen_pci_hotplug(18) > + gen_pci_hotplug(19) > + gen_pci_hotplug(20) > + gen_pci_hotplug(21) > + gen_pci_hotplug(22) > + gen_pci_hotplug(23) > + gen_pci_hotplug(24) > + gen_pci_hotplug(25) > + gen_pci_hotplug(26) > + gen_pci_hotplug(27) > + gen_pci_hotplug(28) > + gen_pci_hotplug(29) > + gen_pci_hotplug(30) > + gen_pci_hotplug(31) > + > + Return (0x01) > + } > + > + > } > > /* PCI IRQs */ > @@ -842,49 +898,9 @@ DefinitionBlock ( > Return(0x01) > } > > -#define gen_pci_hotplug(nr) \ > - If (And(\_SB.PCI0.PCIU, ShiftLeft(1, nr))) { \ > - Notify(\_SB.PCI0.S##nr, 1) \ > - } \ > - If (And(\_SB.PCI0.PCID, ShiftLeft(1, nr))) { \ > - Notify(\_SB.PCI0.S##nr, 3) \ > - } > - > Method(_L01) { > - gen_pci_hotplug(1) > - gen_pci_hotplug(2) > - gen_pci_hotplug(3) > - gen_pci_hotplug(4) > - gen_pci_hotplug(5) > - gen_pci_hotplug(6) > - gen_pci_hotplug(7) > - gen_pci_hotplug(8) > - gen_pci_hotplug(9) > - gen_pci_hotplug(10) > - gen_pci_hotplug(11) > - gen_pci_hotplug(12) > - gen_pci_hotplug(13) > - gen_pci_hotplug(14) > - gen_pci_hotplug(15) > - gen_pci_hotplug(16) > - gen_pci_hotplug(17) > - gen_pci_hotplug(18) > - gen_pci_hotplug(19) > - gen_pci_hotplug(20) > - gen_pci_hotplug(21) > - gen_pci_hotplug(22) > - gen_pci_hotplug(23) > - gen_pci_hotplug(24) > - gen_pci_hotplug(25) > - gen_pci_hotplug(26) > - gen_pci_hotplug(27) > - gen_pci_hotplug(28) > - gen_pci_hotplug(29) > - gen_pci_hotplug(30) > - gen_pci_hotplug(31) > - > + \_SB.PCI0.HPLG() What is the point of this new method? -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html