[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 2/2] acpi: remove static gpe and pci0_status variabl
From: |
Blue Swirl |
Subject: |
[Qemu-devel] [PATCH 2/2] acpi: remove static gpe and pci0_status variables |
Date: |
Mon, 10 May 2010 23:51:22 +0300 |
Make gpe and pci0_status fields in PIIX4PMState.
Signed-off-by: Blue Swirl <address@hidden>
---
hw/acpi.c | 93 +++++++++++++++++++++++++++++++++---------------------------
hw/pc.c | 1 -
hw/pc.h | 1 -
hw/pci.c | 12 +++++--
hw/pci.h | 6 ++-
5 files changed, 63 insertions(+), 50 deletions(-)
diff --git a/hw/acpi.c b/hw/acpi.c
index bb2974e..6db1a12 100644
--- a/hw/acpi.c
+++ b/hw/acpi.c
@@ -30,6 +30,20 @@
#define ACPI_DBG_IO_ADDR 0xb044
+#define GPE_BASE 0xafe0
+#define PCI_BASE 0xae00
+#define PCI_EJ_BASE 0xae08
+
+struct gpe_regs {
+ uint16_t sts; /* status */
+ uint16_t en; /* enabled */
+};
+
+struct pci_status {
+ uint32_t up;
+ uint32_t down;
+};
+
typedef struct PIIX4PMState {
PCIDevice dev;
uint16_t pmsts;
@@ -52,6 +66,8 @@ typedef struct PIIX4PMState {
qemu_irq cmos_s3;
qemu_irq smi_irq;
int kvm_enabled;
+ struct gpe_regs gpe;
+ struct pci_status pci0_status;
} PIIX4PMState;
#define RSM_STS (1 << 15)
@@ -497,16 +513,19 @@ static void piix4_powerdown(void *opaque, int
irq, int power_failing)
}
}
+static void piix4_acpi_system_hot_add_init(PCIBus *bus, PCIDevice
*hotplug_dev);
+
i2c_bus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base,
qemu_irq sci_irq, qemu_irq cmos_s3, qemu_irq smi_irq,
int kvm_enabled)
{
PIIX4PMState *s;
+ PCIDevice *d;
uint8_t *pci_conf;
- s = (PIIX4PMState *)pci_register_device(bus,
- "PM", sizeof(PIIX4PMState),
- devfn, NULL, pm_write_config);
+ d = pci_register_device(bus, "PM", sizeof(PIIX4PMState), devfn, NULL,
+ pm_write_config);
+ s = container_of(d, PIIX4PMState, dev);
pci_conf = s->dev.config;
pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_INTEL);
pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_INTEL_82371AB_3);
@@ -557,26 +576,11 @@ i2c_bus *piix4_pm_init(PCIBus *bus, int devfn,
uint32_t smb_io_base,
s->smi_irq = smi_irq;
qemu_register_reset(piix4_reset, s);
+ piix4_acpi_system_hot_add_init(bus, d);
+
return s->smbus;
}
-#define GPE_BASE 0xafe0
-#define PCI_BASE 0xae00
-#define PCI_EJ_BASE 0xae08
-
-struct gpe_regs {
- uint16_t sts; /* status */
- uint16_t en; /* enabled */
-};
-
-struct pci_status {
- uint32_t up;
- uint32_t down;
-};
-
-static struct gpe_regs gpe;
-static struct pci_status pci0_status;
-
static uint32_t gpe_read_val(uint16_t val, uint32_t addr)
{
if (addr & 1)
@@ -714,46 +718,51 @@ static void pciej_write(void *opaque, uint32_t
addr, uint32_t val)
#endif
}
-static int piix4_device_hotplug(PCIDevice *dev, int state);
+static int piix4_device_hotplug(PCIDevice *hotplug_dev, PCIDevice *dev,
+ int state);
-void piix4_acpi_system_hot_add_init(PCIBus *bus)
+static void piix4_acpi_system_hot_add_init(PCIBus *bus, PCIDevice *hotplug_dev)
{
- register_ioport_write(GPE_BASE, 4, 1, gpe_writeb, &gpe);
- register_ioport_read(GPE_BASE, 4, 1, gpe_readb, &gpe);
+ PIIX4PMState *s = container_of(hotplug_dev, PIIX4PMState, dev);
- register_ioport_write(PCI_BASE, 8, 4, pcihotplug_write, &pci0_status);
- register_ioport_read(PCI_BASE, 8, 4, pcihotplug_read, &pci0_status);
+ register_ioport_write(GPE_BASE, 4, 1, gpe_writeb, s);
+ register_ioport_read(GPE_BASE, 4, 1, gpe_readb, s);
+
+ register_ioport_write(PCI_BASE, 8, 4, pcihotplug_write, s);
+ register_ioport_read(PCI_BASE, 8, 4, pcihotplug_read, s);
register_ioport_write(PCI_EJ_BASE, 4, 4, pciej_write, bus);
register_ioport_read(PCI_EJ_BASE, 4, 4, pciej_read, bus);
- pci_bus_hotplug(bus, piix4_device_hotplug);
+ pci_bus_hotplug(bus, piix4_device_hotplug, hotplug_dev);
}
-static void enable_device(struct pci_status *p, struct gpe_regs *g, int slot)
+static void enable_device(PIIX4PMState *s, int slot)
{
- g->sts |= 2;
- p->up |= (1 << slot);
+ s->gpe.sts |= 2;
+ s->pci0_status.up |= (1 << slot);
}
-static void disable_device(struct pci_status *p, struct gpe_regs *g, int slot)
+static void disable_device(PIIX4PMState *s, int slot)
{
- g->sts |= 2;
- p->down |= (1 << slot);
+ s->gpe.sts |= 2;
+ s->pci0_status.down |= (1 << slot);
}
-static int piix4_device_hotplug(PCIDevice *dev, int state)
+static int piix4_device_hotplug(PCIDevice *hotplug_dev, PCIDevice *dev,
+ int state)
{
- PIIX4PMState *s = container_of(dev, PIIX4PMState, dev);
+ PIIX4PMState *s = container_of(hotplug_dev, PIIX4PMState, dev);
int slot = PCI_SLOT(dev->devfn);
- pci0_status.up = 0;
- pci0_status.down = 0;
- if (state)
- enable_device(&pci0_status, &gpe, slot);
- else
- disable_device(&pci0_status, &gpe, slot);
- if (gpe.en & 2) {
+ s->pci0_status.up = 0;
+ s->pci0_status.down = 0;
+ if (state) {
+ enable_device(s, slot);
+ } else {
+ disable_device(s, slot);
+ }
+ if (s->gpe.en & 2) {
qemu_set_irq(s->irq, 1);
qemu_set_irq(s->irq, 0);
}
diff --git a/hw/pc.c b/hw/pc.c
index db2b9a2..e41db68 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -1046,7 +1046,6 @@ static void pc_init1(ram_addr_t ram_size,
qdev_prop_set_ptr(eeprom, "data", eeprom_buf + (i * 256));
qdev_init_nofail(eeprom);
}
- piix4_acpi_system_hot_add_init(pci_bus);
}
if (i440fx_state) {
diff --git a/hw/pc.h b/hw/pc.h
index d11a576..088937a 100644
--- a/hw/pc.h
+++ b/hw/pc.h
@@ -94,7 +94,6 @@ i2c_bus *piix4_pm_init(PCIBus *bus, int devfn,
uint32_t smb_io_base,
qemu_irq sci_irq, qemu_irq cmos_s3, qemu_irq smi_irq,
int kvm_enabled);
void piix4_smbus_register_device(SMBusDevice *dev, uint8_t addr);
-void piix4_acpi_system_hot_add_init(PCIBus *bus);
/* hpet.c */
extern int no_hpet;
diff --git a/hw/pci.c b/hw/pci.c
index f167436..9d19cb8 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -42,6 +42,7 @@ struct PCIBus {
pci_set_irq_fn set_irq;
pci_map_irq_fn map_irq;
pci_hotplug_fn hotplug;
+ PCIDevice *hotplug_dev;
void *irq_opaque;
PCIDevice *devices[256];
PCIDevice *parent_dev;
@@ -233,10 +234,12 @@ void pci_bus_irqs(PCIBus *bus, pci_set_irq_fn
set_irq, pci_map_irq_fn map_irq,
bus->irq_count = qemu_mallocz(nirq * sizeof(bus->irq_count[0]));
}
-void pci_bus_hotplug(PCIBus *bus, pci_hotplug_fn hotplug)
+void pci_bus_hotplug(PCIBus *bus, pci_hotplug_fn hotplug,
+ PCIDevice *hotplug_dev)
{
bus->qbus.allow_hotplug = 1;
bus->hotplug = hotplug;
+ bus->hotplug_dev = hotplug_dev;
}
void pci_bus_set_mem_base(PCIBus *bus, target_phys_addr_t base)
@@ -1660,8 +1663,9 @@ static int pci_qdev_init(DeviceState *qdev,
DeviceInfo *base)
pci_dev->romfile = qemu_strdup(info->romfile);
pci_add_option_rom(pci_dev);
- if (qdev->hotplugged)
- bus->hotplug(pci_dev, 1);
+ if (qdev->hotplugged) {
+ bus->hotplug(bus->hotplug_dev, pci_dev, 1);
+ }
return 0;
}
@@ -1669,7 +1673,7 @@ static int pci_unplug_device(DeviceState *qdev)
{
PCIDevice *dev = DO_UPCAST(PCIDevice, qdev, qdev);
- dev->bus->hotplug(dev, 0);
+ dev->bus->hotplug(dev->bus->hotplug_dev, dev, 0);
return 0;
}
diff --git a/hw/pci.h b/hw/pci.h
index 625188c..31e0438 100644
--- a/hw/pci.h
+++ b/hw/pci.h
@@ -209,13 +209,15 @@ int pci_device_load(PCIDevice *s, QEMUFile *f);
typedef void (*pci_set_irq_fn)(void *opaque, int irq_num, int level);
typedef int (*pci_map_irq_fn)(PCIDevice *pci_dev, int irq_num);
-typedef int (*pci_hotplug_fn)(PCIDevice *pci_dev, int state);
+typedef int (*pci_hotplug_fn)(PCIDevice *hotplug_dev, PCIDevice *pci_dev,
+ int state);
void pci_bus_new_inplace(PCIBus *bus, DeviceState *parent,
const char *name, int devfn_min);
PCIBus *pci_bus_new(DeviceState *parent, const char *name, int devfn_min);
void pci_bus_irqs(PCIBus *bus, pci_set_irq_fn set_irq, pci_map_irq_fn map_irq,
void *irq_opaque, int nirq);
-void pci_bus_hotplug(PCIBus *bus, pci_hotplug_fn hotplug);
+void pci_bus_hotplug(PCIBus *bus, pci_hotplug_fn hotplug,
+ PCIDevice *hotplug_dev);
PCIBus *pci_register_bus(DeviceState *parent, const char *name,
pci_set_irq_fn set_irq, pci_map_irq_fn map_irq,
void *irq_opaque, int devfn_min, int nirq);
--
1.6.2.4
- [Qemu-devel] [PATCH 2/2] acpi: remove static gpe and pci0_status variables,
Blue Swirl <=