Revision cb380f61

b/hw/mainstone.c
18 18
#include "sysemu.h"
19 19
#include "flash.h"
20 20
#include "blockdev.h"
21
#include "sysbus.h"
21 22

  
22 23
static struct keymap map[0xE0] = {
23 24
    [0 ... 0xDF] = { -1, -1 },
......
77 78
    uint32_t sector_len = 256 * 1024;
78 79
    target_phys_addr_t mainstone_flash_base[] = { MST_FLASH_0, MST_FLASH_1 };
79 80
    PXA2xxState *cpu;
80
    qemu_irq *mst_irq;
81
    DeviceState *mst_irq;
81 82
    DriveInfo *dinfo;
82 83
    int i;
83 84
    int be;
......
117 118
        }
118 119
    }
119 120

  
120
    mst_irq = mst_irq_init(MST_FPGA_PHYS, cpu->pic[PXA2XX_PIC_GPIO_0]);
121
    mst_irq = sysbus_create_simple("mainstone-fpga", MST_FPGA_PHYS,
122
                    cpu->pic[PXA2XX_PIC_GPIO_0]);
121 123

  
122 124
    /* setup keypad */
123 125
    printf("map addr %p\n", &map);
124 126
    pxa27x_register_keypad(cpu->kp, map, 0xe0);
125 127

  
126 128
    /* MMC/SD host */
127
    pxa2xx_mmci_handlers(cpu->mmc, NULL, mst_irq[MMC_IRQ]);
129
    pxa2xx_mmci_handlers(cpu->mmc, NULL, qdev_get_gpio_in(mst_irq, MMC_IRQ));
128 130

  
129
    smc91c111_init(&nd_table[0], MST_ETH_PHYS, mst_irq[ETHERNET_IRQ]);
131
    smc91c111_init(&nd_table[0], MST_ETH_PHYS,
132
                    qdev_get_gpio_in(mst_irq, ETHERNET_IRQ));
130 133

  
131 134
    mainstone_binfo.kernel_filename = kernel_filename;
132 135
    mainstone_binfo.kernel_cmdline = kernel_cmdline;
b/hw/mainstone.h
32 32
#define S1_STSCHG_IRQ 14
33 33
#define S1_IRQ        15
34 34

  
35
extern qemu_irq
36
*mst_irq_init(uint32_t base, qemu_irq irq);
37

  
38 35
#endif /* __MAINSTONE_H__ */
b/hw/mst_fpga.c
8 8
 * This code is licensed under the GNU GPL v2.
9 9
 */
10 10
#include "hw.h"
11
#include "mainstone.h"
11
#include "sysbus.h"
12 12

  
13 13
/* Mainstone FPGA for extern irqs */
14 14
#define FPGA_GPIO_PIN	0
......
27 27
#define MST_PCMCIA1		0xe4
28 28

  
29 29
typedef struct mst_irq_state{
30
	SysBusDevice busdev;
31

  
30 32
	qemu_irq parent;
31
	qemu_irq *pins;
32 33

  
33 34
	uint32_t prev_level;
34 35
	uint32_t leddat1;
......
163 164
	mst_fpga_writeb,
164 165
};
165 166

  
166
static void
167
mst_fpga_save(QEMUFile *f, void *opaque)
168
{
169
	struct mst_irq_state *s = (mst_irq_state *) opaque;
170

  
171
	qemu_put_be32s(f, &s->prev_level);
172
	qemu_put_be32s(f, &s->leddat1);
173
	qemu_put_be32s(f, &s->leddat2);
174
	qemu_put_be32s(f, &s->ledctrl);
175
	qemu_put_be32s(f, &s->gpswr);
176
	qemu_put_be32s(f, &s->mscwr1);
177
	qemu_put_be32s(f, &s->mscwr2);
178
	qemu_put_be32s(f, &s->mscwr3);
179
	qemu_put_be32s(f, &s->mscrd);
180
	qemu_put_be32s(f, &s->intmskena);
181
	qemu_put_be32s(f, &s->intsetclr);
182
	qemu_put_be32s(f, &s->pcmcia0);
183
	qemu_put_be32s(f, &s->pcmcia1);
184
}
185 167

  
186
static int
187
mst_fpga_load(QEMUFile *f, void *opaque, int version_id)
168
static int mst_fpga_post_load(void *opaque, int version_id)
188 169
{
189 170
	mst_irq_state *s = (mst_irq_state *) opaque;
190 171

  
191
	qemu_get_be32s(f, &s->prev_level);
192
	qemu_get_be32s(f, &s->leddat1);
193
	qemu_get_be32s(f, &s->leddat2);
194
	qemu_get_be32s(f, &s->ledctrl);
195
	qemu_get_be32s(f, &s->gpswr);
196
	qemu_get_be32s(f, &s->mscwr1);
197
	qemu_get_be32s(f, &s->mscwr2);
198
	qemu_get_be32s(f, &s->mscwr3);
199
	qemu_get_be32s(f, &s->mscrd);
200
	qemu_get_be32s(f, &s->intmskena);
201
	qemu_get_be32s(f, &s->intsetclr);
202
	qemu_get_be32s(f, &s->pcmcia0);
203
	qemu_get_be32s(f, &s->pcmcia1);
204

  
205 172
	qemu_set_irq(s->parent, s->intsetclr & s->intmskena);
206 173
	return 0;
207 174
}
208 175

  
209
qemu_irq *mst_irq_init(uint32_t base, qemu_irq irq)
176
static int mst_fpga_init(SysBusDevice *dev)
210 177
{
211 178
	mst_irq_state *s;
212 179
	int iomemtype;
213
	qemu_irq *qi;
214 180

  
215
	s = (mst_irq_state  *)
216
		qemu_mallocz(sizeof(mst_irq_state));
181
	s = FROM_SYSBUS(mst_irq_state, dev);
217 182

  
218
	s->parent = irq;
183
	sysbus_init_irq(dev, &s->parent);
219 184

  
220 185
	/* alloc the external 16 irqs */
221
	qi  = qemu_allocate_irqs(mst_fpga_set_irq, s, MST_NUM_IRQS);
222
	s->pins = qi;
186
	qdev_init_gpio_in(&dev->qdev, mst_fpga_set_irq, MST_NUM_IRQS);
223 187

  
224 188
	iomemtype = cpu_register_io_memory(mst_fpga_readfn,
225 189
		mst_fpga_writefn, s, DEVICE_NATIVE_ENDIAN);
226
	cpu_register_physical_memory(base, 0x00100000, iomemtype);
227
	register_savevm(NULL, "mainstone_fpga", 0, 0, mst_fpga_save,
228
                        mst_fpga_load, s);
229
	return qi;
190
	sysbus_init_mmio(dev, 0x00100000, iomemtype);
191
	return 0;
192
}
193

  
194
static VMStateDescription vmstate_mst_fpga_regs = {
195
	.name = "mainstone_fpga",
196
	.version_id = 0,
197
	.minimum_version_id = 0,
198
	.minimum_version_id_old = 0,
199
	.post_load = mst_fpga_post_load,
200
	.fields = (VMStateField []) {
201
		VMSTATE_UINT32(prev_level, mst_irq_state),
202
		VMSTATE_UINT32(leddat1, mst_irq_state),
203
		VMSTATE_UINT32(leddat2, mst_irq_state),
204
		VMSTATE_UINT32(ledctrl, mst_irq_state),
205
		VMSTATE_UINT32(gpswr, mst_irq_state),
206
		VMSTATE_UINT32(mscwr1, mst_irq_state),
207
		VMSTATE_UINT32(mscwr2, mst_irq_state),
208
		VMSTATE_UINT32(mscwr3, mst_irq_state),
209
		VMSTATE_UINT32(mscrd, mst_irq_state),
210
		VMSTATE_UINT32(intmskena, mst_irq_state),
211
		VMSTATE_UINT32(intsetclr, mst_irq_state),
212
		VMSTATE_UINT32(pcmcia0, mst_irq_state),
213
		VMSTATE_UINT32(pcmcia1, mst_irq_state),
214
		VMSTATE_END_OF_LIST(),
215
	},
216
};
217

  
218
static SysBusDeviceInfo mst_fpga_info = {
219
	.init = mst_fpga_init,
220
	.qdev.name = "mainstone-fpga",
221
	.qdev.desc = "Mainstone II FPGA",
222
	.qdev.size = sizeof(mst_irq_state),
223
	.qdev.vmsd = &vmstate_mst_fpga_regs,
224
};
225

  
226
static void mst_fpga_register(void)
227
{
228
	sysbus_register_withprop(&mst_fpga_info);
230 229
}
230
device_init(mst_fpga_register);

Also available in: Unified diff