Revision e9b40fd3 hw/mips_malta.c

b/hw/mips_malta.c
47 47
#include "mc146818rtc.h"
48 48
#include "blockdev.h"
49 49
#include "exec-memory.h"
50
#include "sysbus.h"             /* SysBusDevice */
50 51

  
51 52
//#define DEBUG_BOARD_INIT
52 53

  
......
72 73
    SerialState *uart;
73 74
} MaltaFPGAState;
74 75

  
76
typedef struct {
77
    SysBusDevice busdev;
78
    qemu_irq *i8259;
79
} MaltaState;
80

  
75 81
static ISADevice *pit;
76 82

  
77 83
static struct _loaderparams {
......
776 782
    PCIBus *pci_bus;
777 783
    ISABus *isa_bus;
778 784
    CPUState *env;
779
    qemu_irq *i8259 = NULL, *isa_irq;
785
    qemu_irq *isa_irq;
780 786
    qemu_irq *cpu_exit_irq;
781 787
    int piix4_devfn;
782 788
    i2c_bus *smbus;
......
788 794
    int fl_sectors = 0;
789 795
    int be;
790 796

  
797
    DeviceState *dev = qdev_create(NULL, "mips-malta");
798
    MaltaState *s = DO_UPCAST(MaltaState, busdev.qdev, dev);
799

  
800
    qdev_init_nofail(dev);
801

  
791 802
    /* Make sure the first 3 serial ports are associated with a device. */
792 803
    for(i = 0; i < 3; i++) {
793 804
        if (!serial_hds[i]) {
......
937 948
     * qemu_irq_proxy() adds an extra bit of indirection, allowing us
938 949
     * to resolve the isa_irq -> i8259 dependency after i8259 is initialized.
939 950
     */
940
    isa_irq = qemu_irq_proxy(&i8259, 16);
951
    isa_irq = qemu_irq_proxy(&s->i8259, 16);
941 952

  
942 953
    /* Northbridge */
943 954
    pci_bus = gt64120_register(isa_irq);
......
949 960

  
950 961
    /* Interrupt controller */
951 962
    /* The 8259 is attached to the MIPS CPU INT0 pin, ie interrupt 2 */
952
    i8259 = i8259_init(isa_bus, env->irq[2]);
963
    s->i8259 = i8259_init(isa_bus, env->irq[2]);
953 964

  
954
    isa_bus_irqs(isa_bus, i8259);
965
    isa_bus_irqs(isa_bus, s->i8259);
955 966
    pci_piix4_ide_init(pci_bus, hd, piix4_devfn + 1);
956 967
    usb_uhci_piix4_init(pci_bus, piix4_devfn + 2);
957 968
    smbus = piix4_pm_init(pci_bus, piix4_devfn + 3, 0x1100,
......
995 1006
    }
996 1007
}
997 1008

  
1009
static int mips_malta_sysbus_device_init(SysBusDevice *sysbusdev)
1010
{
1011
    return 0;
1012
}
1013

  
1014
static SysBusDeviceInfo mips_malta_device = {
1015
    .init = mips_malta_sysbus_device_init,
1016
    .qdev.name  = "mips-malta",
1017
    .qdev.size  = sizeof(MaltaState),
1018
    .qdev.props = (Property[]) {
1019
        DEFINE_PROP_END_OF_LIST(),
1020
    }
1021
};
1022

  
998 1023
static QEMUMachine mips_malta_machine = {
999 1024
    .name = "malta",
1000 1025
    .desc = "MIPS Malta Core LV",
......
1003 1028
    .is_default = 1,
1004 1029
};
1005 1030

  
1031
static void mips_malta_device_init(void)
1032
{
1033
    sysbus_register_withprop(&mips_malta_device);
1034
}
1035

  
1006 1036
static void mips_malta_machine_init(void)
1007 1037
{
1008 1038
    qemu_register_machine(&mips_malta_machine);
1009 1039
}
1010 1040

  
1041
device_init(mips_malta_device_init);
1011 1042
machine_init(mips_malta_machine_init);

Also available in: Unified diff