Commit 9d5e77a22f1b8b502a11aa6288334c2787d8dbc8
Committed by
Anthony Liguori
1 parent
30868442
acpi.c: make qemu_system_device_hot_add piix independent.
introruce piix4_device_hot_add() for piix4 specific code and make qemu_system_device_hot_add() generic. Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Showing
4 changed files
with
26 additions
and
6 deletions
hw/acpi.c
| ... | ... | @@ -714,7 +714,9 @@ static void pciej_write(void *opaque, uint32_t addr, uint32_t val) |
| 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,6 +726,8 @@ void qemu_system_hot_add_init(void) |
| 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,7 +742,7 @@ static void disable_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,6 +756,18 @@ void qemu_system_device_hot_add(int bus, int slot, int state) |
| 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) */ | ... | ... |
hw/pc.c
| ... | ... | @@ -1081,7 +1081,7 @@ static void pc_init1(ram_addr_t ram_size, |
| 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"); | ... | ... |
hw/pc.h
| ... | ... | @@ -108,11 +108,14 @@ extern int acpi_enabled; |
| 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; | ... | ... |
sysemu.h
| ... | ... | @@ -194,7 +194,8 @@ extern int drive_add(const char *file, const char *fmt, ...); |
| 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 */ | ... | ... |