Revision 9d5e77a2
b/hw/acpi.c | ||
---|---|---|
714 | 714 |
#endif |
715 | 715 |
} |
716 | 716 |
|
717 |
void qemu_system_hot_add_init(void) |
|
717 |
static void piix4_device_hot_add(int bus, int slot, int state); |
|
718 |
|
|
719 |
void piix4_acpi_system_hot_add_init(void) |
|
718 | 720 |
{ |
719 | 721 |
register_ioport_write(GPE_BASE, 4, 1, gpe_writeb, &gpe); |
720 | 722 |
register_ioport_read(GPE_BASE, 4, 1, gpe_readb, &gpe); |
... | ... | |
724 | 726 |
|
725 | 727 |
register_ioport_write(PCI_EJ_BASE, 4, 4, pciej_write, NULL); |
726 | 728 |
register_ioport_read(PCI_EJ_BASE, 4, 4, pciej_read, NULL); |
729 |
|
|
730 |
qemu_system_device_hot_add_register(piix4_device_hot_add); |
|
727 | 731 |
} |
728 | 732 |
|
729 | 733 |
static void enable_device(struct pci_status *p, struct gpe_regs *g, int slot) |
... | ... | |
738 | 742 |
p->down |= (1 << slot); |
739 | 743 |
} |
740 | 744 |
|
741 |
void qemu_system_device_hot_add(int bus, int slot, int state)
|
|
745 |
static void piix4_device_hot_add(int bus, int slot, int state)
|
|
742 | 746 |
{ |
743 | 747 |
pci0_status.up = 0; |
744 | 748 |
pci0_status.down = 0; |
... | ... | |
752 | 756 |
} |
753 | 757 |
} |
754 | 758 |
|
759 |
static qemu_system_device_hot_add_t device_hot_add_callback; |
|
760 |
void qemu_system_device_hot_add_register(qemu_system_device_hot_add_t callback) |
|
761 |
{ |
|
762 |
device_hot_add_callback = callback; |
|
763 |
} |
|
764 |
|
|
765 |
void qemu_system_device_hot_add(int pcibus, int slot, int state) |
|
766 |
{ |
|
767 |
if (device_hot_add_callback) |
|
768 |
device_hot_add_callback(pcibus, slot, state); |
|
769 |
} |
|
770 |
|
|
755 | 771 |
struct acpi_table_header |
756 | 772 |
{ |
757 | 773 |
char signature [4]; /* ACPI signature (4 ASCII characters) */ |
b/hw/pc.c | ||
---|---|---|
1081 | 1081 |
pci_nic_init(pci_bus, nd, -1, "ne2k_pci"); |
1082 | 1082 |
} |
1083 | 1083 |
|
1084 |
qemu_system_hot_add_init();
|
|
1084 |
piix4_acpi_system_hot_add_init();
|
|
1085 | 1085 |
|
1086 | 1086 |
if (drive_get_max_bus(IF_IDE) >= MAX_IDE_BUS) { |
1087 | 1087 |
fprintf(stderr, "qemu: too many IDE bus\n"); |
b/hw/pc.h | ||
---|---|---|
108 | 108 |
extern char *acpi_tables; |
109 | 109 |
extern size_t acpi_tables_len; |
110 | 110 |
|
111 |
void acpi_bios_init(void); |
|
112 |
int acpi_table_add(const char *table_desc); |
|
113 |
|
|
114 |
/* acpi_piix.c */ |
|
111 | 115 |
i2c_bus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base, |
112 | 116 |
qemu_irq sci_irq); |
113 | 117 |
void piix4_smbus_register_device(SMBusDevice *dev, uint8_t addr); |
114 |
void acpi_bios_init(void); |
|
115 |
int acpi_table_add(const char *table_desc); |
|
118 |
void piix4_acpi_system_hot_add_init(void); |
|
116 | 119 |
|
117 | 120 |
/* hpet.c */ |
118 | 121 |
extern int no_hpet; |
b/sysemu.h | ||
---|---|---|
194 | 194 |
extern int drive_init(struct drive_opt *arg, int snapshot, void *machine); |
195 | 195 |
|
196 | 196 |
/* acpi */ |
197 |
void qemu_system_hot_add_init(void); |
|
197 |
typedef void (*qemu_system_device_hot_add_t)(int pcibus, int slot, int state); |
|
198 |
void qemu_system_device_hot_add_register(qemu_system_device_hot_add_t callback); |
|
198 | 199 |
void qemu_system_device_hot_add(int pcibus, int slot, int state); |
199 | 200 |
|
200 | 201 |
/* device-hotplug */ |
Also available in: Unified diff