This enables support for device hotplug behind pci bridges. Bridge devices themselves need to be pre-configured on qemu command line. Design: - at machine init time, assign "bsel" property to bridges with hotplug support - dynamically (At ACPI table read) generate ACPI code to handle hotplug events for each bridge with "bsel" property Note: ACPI doesn't support adding or removing bridges by hotplug. We detect and prevent removal of bridges by hotplug, unless they were added by hotplug previously (and so, are not described by ACPI). Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
51 lines
1.7 KiB
Plaintext
51 lines
1.7 KiB
Plaintext
/*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
ACPI_EXTRACT_ALL_CODE ssdp_pcihp_aml
|
|
|
|
DefinitionBlock ("ssdt-pcihp.aml", "SSDT", 0x01, "BXPC", "BXSSDTPCIHP", 0x1)
|
|
{
|
|
|
|
/****************************************************************
|
|
* PCI hotplug
|
|
****************************************************************/
|
|
|
|
/* Objects supplied by DSDT */
|
|
External(\_SB.PCI0, DeviceObj)
|
|
External(\_SB.PCI0.PCEJ, MethodObj)
|
|
External(BSEL, IntObj)
|
|
|
|
Scope(\_SB.PCI0) {
|
|
|
|
/* Bulk generated PCI hotplug devices */
|
|
ACPI_EXTRACT_DEVICE_START ssdt_pcihp_start
|
|
ACPI_EXTRACT_DEVICE_END ssdt_pcihp_end
|
|
ACPI_EXTRACT_DEVICE_STRING ssdt_pcihp_name
|
|
|
|
// Extract the offsets of the device name, address dword and the slot
|
|
// name byte - we fill them in for each device.
|
|
Device(SAA) {
|
|
ACPI_EXTRACT_NAME_BYTE_CONST ssdt_pcihp_id
|
|
Name(_SUN, 0xAA)
|
|
ACPI_EXTRACT_NAME_DWORD_CONST ssdt_pcihp_adr
|
|
Name(_ADR, 0xAA0000)
|
|
Method(_EJ0, 1) {
|
|
PCEJ(BSEL, _SUN)
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|