Revision 4b816985 hw/etraxfs_ser.c

b/hw/etraxfs_ser.c
22 22
 * THE SOFTWARE.
23 23
 */
24 24

  
25
#include <stdio.h>
26
#include <ctype.h>
27
#include "hw.h"
25
#include "sysbus.h"
28 26
#include "qemu-char.h"
29
#include "etraxfs.h"
30 27

  
31 28
#define D(x)
32 29

  
......
48 45

  
49 46
struct etrax_serial
50 47
{
51
	CPUState *env;
48
	SysBusDevice busdev;
52 49
	CharDriverState *chr;
53
	qemu_irq *irq;
50
	qemu_irq irq;
54 51

  
55 52
	/* This pending thing is a hack.  */
56 53
	int pending_tx;
......
64 61
	s->regs[R_INTR] &= ~(s->regs[RW_ACK_INTR]);
65 62
	s->regs[R_MASKED_INTR] = s->regs[R_INTR] & s->regs[RW_INTR_MASK];
66 63

  
67
	qemu_set_irq(s->irq[0], !!s->regs[R_MASKED_INTR]);
64
	qemu_set_irq(s->irq, !!s->regs[R_MASKED_INTR]);
68 65
	s->regs[RW_ACK_INTR] = 0;
69 66
}
70 67

  
......
164 161

  
165 162
}
166 163

  
167
void etraxfs_ser_init(CPUState *env, qemu_irq *irq, CharDriverState *chr,
168
		      target_phys_addr_t base)
164
static void etraxfs_ser_init(SysBusDevice *dev)
169 165
{
170
	struct etrax_serial *s;
166
	struct etrax_serial *s = FROM_SYSBUS(typeof (*s), dev);
171 167
	int ser_regs;
172 168

  
173
	s = qemu_mallocz(sizeof *s);
174

  
175
	s->env = env;
176
	s->irq = irq;
177
	s->chr = chr;
178

  
179 169
	/* transmitter begins ready and idle.  */
180 170
	s->regs[RS_STAT_DIN] |= (1 << STAT_TR_RDY);
181 171
	s->regs[RS_STAT_DIN] |= (1 << STAT_TR_IDLE);
182 172

  
183
	qemu_chr_add_handlers(chr, serial_can_receive, serial_receive,
184
			      serial_event, s);
185

  
173
	sysbus_init_irq(dev, &s->irq);
186 174
	ser_regs = cpu_register_io_memory(0, ser_read, ser_write, s);
187
	cpu_register_physical_memory (base, R_MAX * 4, ser_regs);
175
	sysbus_init_mmio(dev, R_MAX * 4, ser_regs);
176
	s->chr = qdev_init_chardev(&dev->qdev);
177
	if (s->chr)
178
		qemu_chr_add_handlers(s->chr,
179
				      serial_can_receive, serial_receive,
180
				      serial_event, s);
188 181
}
182

  
183
static void etraxfs_serial_register(void)
184
{
185
	sysbus_register_dev("etraxfs,serial", sizeof (struct etrax_serial),
186
			    etraxfs_ser_init);
187
}
188

  
189
device_init(etraxfs_serial_register)

Also available in: Unified diff