Skip to content

Commit

Permalink
Merge remote-tracking branch 'mst/tags/for_anthony' into staging
Browse files Browse the repository at this point in the history
pci: misc cleanups

This includes some pci-related cleanups,
and fw cfg cleanups which will be useful for on-going
pci related work.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

# gpg: Signature made Sun 02 Jun 2013 02:46:52 PM CDT using RSA key ID D28D5469
# gpg: Can't check signature: public key not found

# By Michael S. Tsirkin (8) and Laszlo Ersek (1)
# Via Michael S. Tsirkin
* mst/tags/for_anthony:
  pvpanic: use FWCfgState explicitly
  fw_cfg: fw_cfg is a singleton
  fw_cfg: add API to find FW cfg object
  fw_cfg: move typedef to qemu/typedefs.h
  refer to FWCfgState explicitly
  apic: rename apic specific bitopts
  firmware_abi: move to include/hw/nvram/
  dec.c - move to pci-bridge
  q35: set fw_name

Message-id: 1370202787-3712-1-git-send-email-mst@redhat.com
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
  • Loading branch information
Anthony Liguori committed Jun 4, 2013
2 parents 1713924 + c3c4fe3 commit e47dccc
Show file tree
Hide file tree
Showing 22 changed files with 78 additions and 62 deletions.
2 changes: 1 addition & 1 deletion hw/acpi/piix4.c
Expand Up @@ -447,7 +447,7 @@ static int piix4_pm_initfn(PCIDevice *dev)

i2c_bus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base,
qemu_irq sci_irq, qemu_irq smi_irq,
int kvm_enabled, void *fw_cfg)
int kvm_enabled, FWCfgState *fw_cfg)
{
PCIDevice *dev;
PIIX4PMState *s;
Expand Down
2 changes: 1 addition & 1 deletion hw/core/loader.c
Expand Up @@ -733,7 +733,7 @@ int rom_load_all(void)
return 0;
}

void rom_set_fw(void *f)
void rom_set_fw(FWCfgState *f)
{
fw_cfg = f;
}
Expand Down
2 changes: 1 addition & 1 deletion hw/i386/multiboot.c
Expand Up @@ -124,7 +124,7 @@ static void mb_add_mod(MultibootState *s,
s->mb_mods_count++;
}

int load_multiboot(void *fw_cfg,
int load_multiboot(FWCfgState *fw_cfg,
FILE *f,
const char *kernel_filename,
const char *initrd_filename,
Expand Down
4 changes: 3 additions & 1 deletion hw/i386/multiboot.h
@@ -1,7 +1,9 @@
#ifndef QEMU_MULTIBOOT_H
#define QEMU_MULTIBOOT_H

int load_multiboot(void *fw_cfg,
#include "hw/nvram/fw_cfg.h"

int load_multiboot(FWCfgState *fw_cfg,
FILE *f,
const char *kernel_filename,
const char *initrd_filename,
Expand Down
24 changes: 12 additions & 12 deletions hw/i386/pc.c
Expand Up @@ -595,9 +595,9 @@ static unsigned int pc_apic_id_limit(unsigned int max_cpus)
return x86_cpu_apic_id_from_index(max_cpus - 1) + 1;
}

static void *bochs_bios_init(void)
static FWCfgState *bochs_bios_init(void)
{
void *fw_cfg;
FWCfgState *fw_cfg;
uint8_t *smbios_table;
size_t smbios_len;
uint64_t *numa_fw_cfg;
Expand Down Expand Up @@ -674,7 +674,7 @@ static long get_file_size(FILE *f)
return size;
}

static void load_linux(void *fw_cfg,
static void load_linux(FWCfgState *fw_cfg,
const char *kernel_filename,
const char *initrd_filename,
const char *kernel_cmdline,
Expand Down Expand Up @@ -1012,19 +1012,19 @@ void pc_acpi_init(const char *default_dsdt)
}
}

void *pc_memory_init(MemoryRegion *system_memory,
const char *kernel_filename,
const char *kernel_cmdline,
const char *initrd_filename,
ram_addr_t below_4g_mem_size,
ram_addr_t above_4g_mem_size,
MemoryRegion *rom_memory,
MemoryRegion **ram_memory)
FWCfgState *pc_memory_init(MemoryRegion *system_memory,
const char *kernel_filename,
const char *kernel_cmdline,
const char *initrd_filename,
ram_addr_t below_4g_mem_size,
ram_addr_t above_4g_mem_size,
MemoryRegion *rom_memory,
MemoryRegion **ram_memory)
{
int linux_boot, i;
MemoryRegion *ram, *option_rom_mr;
MemoryRegion *ram_below_4g, *ram_above_4g;
void *fw_cfg;
FWCfgState *fw_cfg;

linux_boot = (kernel_filename != NULL);

Expand Down
2 changes: 1 addition & 1 deletion hw/i386/pc_piix.c
Expand Up @@ -89,7 +89,7 @@ static void pc_init1(MemoryRegion *system_memory,
MemoryRegion *pci_memory;
MemoryRegion *rom_memory;
DeviceState *icc_bridge;
void *fw_cfg = NULL;
FWCfgState *fw_cfg = NULL;

icc_bridge = qdev_create(NULL, TYPE_ICC_BRIDGE);
object_property_add_child(qdev_get_machine(), "icc-bridge",
Expand Down
42 changes: 21 additions & 21 deletions hw/intc/apic.c
Expand Up @@ -40,34 +40,34 @@ static void apic_get_delivery_bitmask(uint32_t *deliver_bitmask,
uint8_t dest, uint8_t dest_mode);

/* Find first bit starting from msb */
static int fls_bit(uint32_t value)
static int apic_fls_bit(uint32_t value)
{
return 31 - clz32(value);
}

/* Find first bit starting from lsb */
static int ffs_bit(uint32_t value)
static int apic_ffs_bit(uint32_t value)
{
return ctz32(value);
}

static inline void set_bit(uint32_t *tab, int index)
static inline void apic_set_bit(uint32_t *tab, int index)
{
int i, mask;
i = index >> 5;
mask = 1 << (index & 0x1f);
tab[i] |= mask;
}

static inline void reset_bit(uint32_t *tab, int index)
static inline void apic_reset_bit(uint32_t *tab, int index)
{
int i, mask;
i = index >> 5;
mask = 1 << (index & 0x1f);
tab[i] &= ~mask;
}

static inline int get_bit(uint32_t *tab, int index)
static inline int apic_get_bit(uint32_t *tab, int index)
{
int i, mask;
i = index >> 5;
Expand All @@ -81,7 +81,7 @@ static int get_highest_priority_int(uint32_t *tab)
int i;
for (i = 7; i >= 0; i--) {
if (tab[i] != 0) {
return i * 32 + fls_bit(tab[i]);
return i * 32 + apic_fls_bit(tab[i]);
}
}
return -1;
Expand Down Expand Up @@ -184,7 +184,7 @@ void apic_deliver_pic_intr(DeviceState *d, int level)
case APIC_DM_FIXED:
if (!(lvt & APIC_LVT_LEVEL_TRIGGER))
break;
reset_bit(s->irr, lvt & 0xff);
apic_reset_bit(s->irr, lvt & 0xff);
/* fall through */
case APIC_DM_EXTINT:
cpu_reset_interrupt(CPU(s->cpu), CPU_INTERRUPT_HARD);
Expand Down Expand Up @@ -230,7 +230,7 @@ static void apic_bus_deliver(const uint32_t *deliver_bitmask,
d = -1;
for(i = 0; i < MAX_APIC_WORDS; i++) {
if (deliver_bitmask[i]) {
d = i * 32 + ffs_bit(deliver_bitmask[i]);
d = i * 32 + apic_ffs_bit(deliver_bitmask[i]);
break;
}
}
Expand Down Expand Up @@ -386,13 +386,13 @@ void apic_poll_irq(DeviceState *d)

static void apic_set_irq(APICCommonState *s, int vector_num, int trigger_mode)
{
apic_report_irq_delivered(!get_bit(s->irr, vector_num));
apic_report_irq_delivered(!apic_get_bit(s->irr, vector_num));

set_bit(s->irr, vector_num);
apic_set_bit(s->irr, vector_num);
if (trigger_mode)
set_bit(s->tmr, vector_num);
apic_set_bit(s->tmr, vector_num);
else
reset_bit(s->tmr, vector_num);
apic_reset_bit(s->tmr, vector_num);
if (s->vapic_paddr) {
apic_sync_vapic(s, SYNC_ISR_IRR_TO_VAPIC);
/*
Expand All @@ -412,8 +412,8 @@ static void apic_eoi(APICCommonState *s)
isrv = get_highest_priority_int(s->isr);
if (isrv < 0)
return;
reset_bit(s->isr, isrv);
if (!(s->spurious_vec & APIC_SV_DIRECTED_IO) && get_bit(s->tmr, isrv)) {
apic_reset_bit(s->isr, isrv);
if (!(s->spurious_vec & APIC_SV_DIRECTED_IO) && apic_get_bit(s->tmr, isrv)) {
ioapic_eoi_broadcast(isrv);
}
apic_sync_vapic(s, SYNC_FROM_VAPIC | SYNC_TO_VAPIC);
Expand Down Expand Up @@ -452,7 +452,7 @@ static void apic_get_delivery_bitmask(uint32_t *deliver_bitmask,
int idx = apic_find_dest(dest);
memset(deliver_bitmask, 0x00, MAX_APIC_WORDS * sizeof(uint32_t));
if (idx >= 0)
set_bit(deliver_bitmask, idx);
apic_set_bit(deliver_bitmask, idx);
}
} else {
/* XXX: cluster mode */
Expand All @@ -462,11 +462,11 @@ static void apic_get_delivery_bitmask(uint32_t *deliver_bitmask,
if (apic_iter) {
if (apic_iter->dest_mode == 0xf) {
if (dest & apic_iter->log_dest)
set_bit(deliver_bitmask, i);
apic_set_bit(deliver_bitmask, i);
} else if (apic_iter->dest_mode == 0x0) {
if ((dest & 0xf0) == (apic_iter->log_dest & 0xf0) &&
(dest & apic_iter->log_dest & 0x0f)) {
set_bit(deliver_bitmask, i);
apic_set_bit(deliver_bitmask, i);
}
}
} else {
Expand Down Expand Up @@ -509,14 +509,14 @@ static void apic_deliver(DeviceState *d, uint8_t dest, uint8_t dest_mode,
break;
case 1:
memset(deliver_bitmask, 0x00, sizeof(deliver_bitmask));
set_bit(deliver_bitmask, s->idx);
apic_set_bit(deliver_bitmask, s->idx);
break;
case 2:
memset(deliver_bitmask, 0xff, sizeof(deliver_bitmask));
break;
case 3:
memset(deliver_bitmask, 0xff, sizeof(deliver_bitmask));
reset_bit(deliver_bitmask, s->idx);
apic_reset_bit(deliver_bitmask, s->idx);
break;
}

Expand Down Expand Up @@ -573,8 +573,8 @@ int apic_get_interrupt(DeviceState *d)
apic_sync_vapic(s, SYNC_TO_VAPIC);
return s->spurious_vec & 0xff;
}
reset_bit(s->irr, intno);
set_bit(s->isr, intno);
apic_reset_bit(s->irr, intno);
apic_set_bit(s->isr, intno);
apic_sync_vapic(s, SYNC_TO_VAPIC);

/* re-inject if there is still a pending PIC interrupt */
Expand Down
4 changes: 2 additions & 2 deletions hw/misc/pvpanic.c
Expand Up @@ -90,13 +90,13 @@ static int pvpanic_isa_initfn(ISADevice *dev)
{
PVPanicState *s = ISA_PVPANIC_DEVICE(dev);
static bool port_configured;
void *fw_cfg;
FWCfgState *fw_cfg;

memory_region_init_io(&s->io, &pvpanic_ops, s, "pvpanic", 1);
isa_register_ioport(dev, &s->io, s->ioport);

if (!port_configured) {
fw_cfg = object_resolve_path("/machine/fw_cfg", NULL);
fw_cfg = fw_cfg_find();
if (fw_cfg) {
fw_cfg_add_file(fw_cfg, "etc/pvpanic-port",
g_memdup(&s->ioport, sizeof(s->ioport)),
Expand Down
18 changes: 13 additions & 5 deletions hw/nvram/fw_cfg.c
Expand Up @@ -32,6 +32,9 @@

#define FW_CFG_SIZE 2
#define FW_CFG_DATA_SIZE 1
#define TYPE_FW_CFG "fw_cfg"
#define FW_CFG_NAME "fw_cfg"
#define FW_CFG_PATH "/machine/" FW_CFG_NAME

typedef struct FWCfgEntry {
uint32_t len;
Expand Down Expand Up @@ -493,10 +496,9 @@ FWCfgState *fw_cfg_init(uint32_t ctl_port, uint32_t data_port,

s = DO_UPCAST(FWCfgState, busdev.qdev, dev);

if (!object_resolve_path("/machine/fw_cfg", NULL)) {
object_property_add_child(qdev_get_machine(), "fw_cfg", OBJECT(s),
NULL);
}
assert(!object_resolve_path(FW_CFG_PATH, NULL));

object_property_add_child(qdev_get_machine(), FW_CFG_NAME, OBJECT(s), NULL);

qdev_init_nofail(dev);

Expand Down Expand Up @@ -553,6 +555,12 @@ static Property fw_cfg_properties[] = {
DEFINE_PROP_END_OF_LIST(),
};

FWCfgState *fw_cfg_find(void)
{
return OBJECT_CHECK(FWCfgState, object_resolve_path(FW_CFG_PATH, NULL),
TYPE_FW_CFG);
}

static void fw_cfg_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
Expand All @@ -566,7 +574,7 @@ static void fw_cfg_class_init(ObjectClass *klass, void *data)
}

static const TypeInfo fw_cfg_info = {
.name = "fw_cfg",
.name = TYPE_FW_CFG,
.parent = TYPE_SYS_BUS_DEVICE,
.instance_size = sizeof(FWCfgState),
.class_init = fw_cfg_class_init,
Expand Down
2 changes: 1 addition & 1 deletion hw/nvram/mac_nvram.c
Expand Up @@ -23,7 +23,7 @@
* THE SOFTWARE.
*/
#include "hw/hw.h"
#include "hw/sparc/firmware_abi.h"
#include "hw/nvram/openbios_firmware_abi.h"
#include "sysemu/sysemu.h"
#include "hw/ppc/mac.h"

Expand Down
2 changes: 2 additions & 0 deletions hw/pci-bridge/Makefile.objs
@@ -1,3 +1,5 @@
common-obj-y += pci_bridge_dev.o
common-obj-y += ioh3420.o xio3130_upstream.o xio3130_downstream.o
common-obj-y += i82801b11.o
# NewWorld PowerMac
common-obj-$(CONFIG_DEC_PCI) += dec.o
File renamed without changes.
File renamed without changes.
1 change: 0 additions & 1 deletion hw/pci-host/Makefile.objs
Expand Up @@ -5,7 +5,6 @@ common-obj-$(CONFIG_PREP_PCI) += prep.o
common-obj-$(CONFIG_GRACKLE_PCI) += grackle.o
# NewWorld PowerMac
common-obj-$(CONFIG_UNIN_PCI) += uninorth.o
common-obj-$(CONFIG_DEC_PCI) += dec.o
# PowerPC E500 boards
common-obj-$(CONFIG_PPCE500_PCI) += ppce500.o

Expand Down
1 change: 1 addition & 0 deletions hw/pci-host/q35.c
Expand Up @@ -76,6 +76,7 @@ static void q35_host_class_init(ObjectClass *klass, void *data)

k->init = q35_host_init;
dc->props = mch_props;
dc->fw_name = "pci";
}

static void q35_host_initfn(Object *obj)
Expand Down
4 changes: 2 additions & 2 deletions hw/sparc/sun4m.c
Expand Up @@ -30,7 +30,7 @@
#include "sysemu/sysemu.h"
#include "net/net.h"
#include "hw/boards.h"
#include "hw/sparc/firmware_abi.h"
#include "hw/nvram/openbios_firmware_abi.h"
#include "hw/scsi/esp.h"
#include "hw/i386/pc.h"
#include "hw/isa/isa.h"
Expand Down Expand Up @@ -831,7 +831,7 @@ static void sun4m_hw_init(const struct sun4m_hwdef *hwdef, ram_addr_t RAM_size,
qemu_irq *cpu_halt;
unsigned long kernel_size;
DriveInfo *fd[MAX_FD];
void *fw_cfg;
FWCfgState *fw_cfg;
unsigned int num_vsimms;

/* init CPUs */
Expand Down
4 changes: 2 additions & 2 deletions hw/sparc64/sun4u.c
Expand Up @@ -32,7 +32,7 @@
#include "qemu/timer.h"
#include "sysemu/sysemu.h"
#include "hw/boards.h"
#include "hw/sparc/firmware_abi.h"
#include "hw/nvram/openbios_firmware_abi.h"
#include "hw/nvram/fw_cfg.h"
#include "hw/sysbus.h"
#include "hw/ide.h"
Expand Down Expand Up @@ -818,7 +818,7 @@ static void sun4uv_init(MemoryRegion *address_space_mem,
qemu_irq *ivec_irqs, *pbm_irqs;
DriveInfo *hd[MAX_IDE_BUS * MAX_IDE_DEVS];
DriveInfo *fd[MAX_FD];
void *fw_cfg;
FWCfgState *fw_cfg;

/* init CPUs */
cpu = cpu_devinit(cpu_model, hwdef);
Expand Down

0 comments on commit e47dccc

Please sign in to comment.