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