]>
Commit | Line | Data |
---|---|---|
db4728e6 MT |
1 | /* |
2 | * QEMU<->ACPI BIOS PCI hotplug interface | |
3 | * | |
4 | * QEMU supports PCI hotplug via ACPI. This module | |
5 | * implements the interface between QEMU and the ACPI BIOS. | |
6 | * Interface specification - see docs/specs/acpi_pci_hotplug.txt | |
7 | * | |
8 | * Copyright (c) 2013, Red Hat Inc, Michael S. Tsirkin ([email protected]) | |
9 | * Copyright (c) 2006 Fabrice Bellard | |
10 | * | |
11 | * This library is free software; you can redistribute it and/or | |
12 | * modify it under the terms of the GNU Lesser General Public | |
13 | * License version 2 as published by the Free Software Foundation. | |
14 | * | |
15 | * This library is distributed in the hope that it will be useful, | |
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
18 | * Lesser General Public License for more details. | |
19 | * | |
20 | * You should have received a copy of the GNU Lesser General Public | |
21 | * License along with this library; if not, see <http://www.gnu.org/licenses/> | |
22 | * | |
23 | * Contributions after 2012-01-13 are licensed under the terms of the | |
24 | * GNU GPL, version 2 or (at your option) any later version. | |
25 | */ | |
26 | ||
27 | #ifndef HW_ACPI_PCIHP_H | |
28 | #define HW_ACPI_PCIHP_H | |
29 | ||
c24d5e0b IM |
30 | #include "hw/acpi/acpi.h" |
31 | #include "migration/vmstate.h" | |
0058c082 | 32 | #include "hw/hotplug.h" |
db4728e6 | 33 | |
78c2d872 IM |
34 | #define ACPI_PCIHP_IO_BASE_PROP "acpi-pcihp-io-base" |
35 | #define ACPI_PCIHP_IO_LEN_PROP "acpi-pcihp-io-len" | |
36 | ||
db4728e6 | 37 | typedef struct AcpiPciHpPciStatus { |
5a2223ca | 38 | uint32_t up; |
db4728e6 MT |
39 | uint32_t down; |
40 | uint32_t hotplug_enable; | |
db4728e6 MT |
41 | } AcpiPciHpPciStatus; |
42 | ||
43 | #define ACPI_PCIHP_PROP_BSEL "acpi-pcihp-bsel" | |
44 | #define ACPI_PCIHP_MAX_HOTPLUG_BUS 256 | |
e358edc8 | 45 | #define ACPI_PCIHP_BSEL_DEFAULT 0x0 |
db4728e6 MT |
46 | |
47 | typedef struct AcpiPciHpState { | |
48 | AcpiPciHpPciStatus acpi_pcihp_pci_status[ACPI_PCIHP_MAX_HOTPLUG_BUS]; | |
49 | uint32_t hotplug_select; | |
50 | PCIBus *root; | |
51 | MemoryRegion io; | |
99d09dd3 | 52 | bool legacy_piix; |
78c2d872 IM |
53 | uint16_t io_base; |
54 | uint16_t io_len; | |
db4728e6 MT |
55 | } AcpiPciHpState; |
56 | ||
78c2d872 | 57 | void acpi_pcihp_init(Object *owner, AcpiPciHpState *, PCIBus *root, |
99d09dd3 | 58 | MemoryRegion *address_space_io, bool bridges_enabled); |
db4728e6 | 59 | |
0058c082 | 60 | void acpi_pcihp_device_plug_cb(HotplugHandler *hotplug_dev, AcpiPciHpState *s, |
c24d5e0b | 61 | DeviceState *dev, Error **errp); |
0058c082 | 62 | void acpi_pcihp_device_unplug_cb(HotplugHandler *hotplug_dev, AcpiPciHpState *s, |
c24d5e0b | 63 | DeviceState *dev, Error **errp); |
db4728e6 MT |
64 | |
65 | /* Called on reset */ | |
66 | void acpi_pcihp_reset(AcpiPciHpState *s); | |
67 | ||
68 | extern const VMStateDescription vmstate_acpi_pcihp_pci_status; | |
69 | ||
70 | #define VMSTATE_PCI_HOTPLUG(pcihp, state, test_pcihp) \ | |
71 | VMSTATE_UINT32_TEST(pcihp.hotplug_select, state, \ | |
72 | test_pcihp), \ | |
73 | VMSTATE_STRUCT_ARRAY_TEST(pcihp.acpi_pcihp_pci_status, state, \ | |
74 | ACPI_PCIHP_MAX_HOTPLUG_BUS, \ | |
75 | test_pcihp, 1, \ | |
76 | vmstate_acpi_pcihp_pci_status, \ | |
77 | AcpiPciHpPciStatus) | |
78 | ||
79 | #endif |