Revision 4b816985

b/hw/axis_dev88.c
21 21
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 22
 * THE SOFTWARE.
23 23
 */
24
#include <time.h>
25
#include <sys/time.h>
26
#include "hw.h"
24

  
25
#include "sysbus.h"
27 26
#include "net.h"
28 27
#include "flash.h"
29
#include "sysemu.h"
30
#include "devices.h"
31 28
#include "boards.h"
32

  
29
#include "sysemu.h"
33 30
#include "etraxfs.h"
34 31

  
35 32
#define D(x)
......
323 320
    etraxfs_timer_init(env, irq + 0x1b, nmi + 1, 0x3005e000);
324 321

  
325 322
    for (i = 0; i < 4; i++) {
326
        if (serial_hds[i]) {
327
            etraxfs_ser_init(env, irq + 0x14 + i,
328
                             serial_hds[i], 0x30026000 + i * 0x2000);
329
        }
323
        sysbus_create_simple("etraxfs,serial", 0x30026000 + i * 0x2000,
324
                             irq[0x14 + i]); 
330 325
    }
331 326

  
332 327
    if (kernel_filename) {
b/hw/etraxfs.c
21 21
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 22
 * THE SOFTWARE.
23 23
 */
24
#include <time.h>
25
#include <sys/time.h>
26
#include "hw.h"
27
#include "net.h"
28
#include "flash.h"
29
#include "sysemu.h"
30
#include "devices.h"
31
#include "boards.h"
32 24

  
25
#include "sysbus.h"
26
#include "boards.h"
27
#include "sysemu.h"
28
#include "net.h"
33 29
#include "etraxfs.h"
34 30

  
35 31
#define FLASH_SIZE 0x2000000
......
114 110
    etraxfs_timer_init(env, irq + 0x1b, nmi + 1, 0x3005e000);
115 111

  
116 112
    for (i = 0; i < 4; i++) {
117
        if (serial_hds[i]) {
118
            etraxfs_ser_init(env, irq + 0x14 + i,
119
                             serial_hds[i], 0x30026000 + i * 0x2000);
120
        }
113
        sysbus_create_simple("etraxfs,serial", 0x30026000 + i * 0x2000,
114
                             irq[0x14 + i]); 
121 115
    }
122 116

  
123 117
    if (kernel_filename) {
b/hw/etraxfs.h
29 29
                        target_phys_addr_t base);
30 30
void *etraxfs_eth_init(NICInfo *nd, CPUState *env,
31 31
                       qemu_irq *irq, target_phys_addr_t base, int phyaddr);
32
void etraxfs_ser_init(CPUState *env, qemu_irq *irq, CharDriverState *chr,
33
                      target_phys_addr_t base);
32
//void etraxfs_ser_init(CPUState *env, qemu_irq *irq, CharDriverState *chr,
33
//                      target_phys_addr_t base);
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