196
160
s->lsr &= ~UART_LSR_THRE;
197
161
serial_update_irq(s);
199
if (!(s->mcr & UART_MCR_LOOP)) {
200
/* when not in loopback mode, send the char */
201
qemu_chr_write(s->chr, &ch, 1);
203
/* in loopback mode, say that we just received a char */
204
serial_receive_byte(s, ch);
206
if (s->tx_burst > 0) {
209
} else if (s->tx_burst == 0) {
211
qemu_mod_timer(s->tx_timer, qemu_get_clock(vm_clock) +
212
ticks_per_sec * THROTTLE_TX_INTERVAL / 1000);
163
qemu_chr_write(s->chr, &ch, 1);
165
s->lsr |= UART_LSR_THRE;
166
s->lsr |= UART_LSR_TEMT;
167
serial_update_irq(s);
397
static void serial_reset(void *opaque)
399
SerialState *s = opaque;
404
s->iir = UART_IIR_NO_INT;
407
s->lsr = UART_LSR_TEMT | UART_LSR_THRE;
408
s->msr = UART_MSR_DCD | UART_MSR_DSR | UART_MSR_CTS;
412
s->last_break_enable = 0;
413
qemu_irq_lower(s->irq);
416
347
/* If fd is zero, it means that the serial device uses the console */
417
SerialState *serial_init(int base, qemu_irq irq, int baudbase,
418
CharDriverState *chr)
348
SerialState *serial_init(SetIRQFunc *set_irq, void *opaque,
349
int base, int irq, CharDriverState *chr)
422
353
s = qemu_mallocz(sizeof(SerialState));
356
s->set_irq = set_irq;
357
s->irq_opaque = opaque;
426
s->baudbase = baudbase;
428
s->tx_timer = qemu_new_timer(vm_clock, serial_tx_done, s);
432
qemu_register_reset(serial_reset, s);
359
s->lsr = UART_LSR_TEMT | UART_LSR_THRE;
360
s->iir = UART_IIR_NO_INT;
361
s->msr = UART_MSR_DCD | UART_MSR_DSR | UART_MSR_CTS;
435
363
register_savevm("serial", base, 2, serial_save, serial_load, s);
437
365
register_ioport_write(base, 8, 1, serial_ioport_write, s);
438
366
register_ioport_read(base, 8, 1, serial_ioport_read, s);
440
qemu_chr_add_handlers(chr, serial_can_receive1, serial_receive1,
368
qemu_chr_add_read_handler(chr, serial_can_receive1, serial_receive1, s);
369
qemu_chr_add_event_handler(chr, serial_event);
445
373
/* Memory mapped interface */
446
uint32_t serial_mm_readb (void *opaque, target_phys_addr_t addr)
374
static uint32_t serial_mm_readb (void *opaque, target_phys_addr_t addr)
448
376
SerialState *s = opaque;
450
378
return serial_ioport_read(s, (addr - s->base) >> s->it_shift) & 0xFF;
453
void serial_mm_writeb (void *opaque,
454
target_phys_addr_t addr, uint32_t value)
381
static void serial_mm_writeb (void *opaque,
382
target_phys_addr_t addr, uint32_t value)
456
384
SerialState *s = opaque;
458
386
serial_ioport_write(s, (addr - s->base) >> s->it_shift, value & 0xFF);
461
uint32_t serial_mm_readw (void *opaque, target_phys_addr_t addr)
389
static uint32_t serial_mm_readw (void *opaque, target_phys_addr_t addr)
463
391
SerialState *s = opaque;
466
val = serial_ioport_read(s, (addr - s->base) >> s->it_shift) & 0xFFFF;
467
#ifdef TARGET_WORDS_BIGENDIAN
393
return serial_ioport_read(s, (addr - s->base) >> s->it_shift) & 0xFFFF;
473
void serial_mm_writew (void *opaque,
474
target_phys_addr_t addr, uint32_t value)
396
static void serial_mm_writew (void *opaque,
397
target_phys_addr_t addr, uint32_t value)
476
399
SerialState *s = opaque;
477
#ifdef TARGET_WORDS_BIGENDIAN
478
value = bswap16(value);
480
401
serial_ioport_write(s, (addr - s->base) >> s->it_shift, value & 0xFFFF);
483
uint32_t serial_mm_readl (void *opaque, target_phys_addr_t addr)
404
static uint32_t serial_mm_readl (void *opaque, target_phys_addr_t addr)
485
406
SerialState *s = opaque;
488
val = serial_ioport_read(s, (addr - s->base) >> s->it_shift);
489
#ifdef TARGET_WORDS_BIGENDIAN
408
return serial_ioport_read(s, (addr - s->base) >> s->it_shift);
495
void serial_mm_writel (void *opaque,
496
target_phys_addr_t addr, uint32_t value)
411
static void serial_mm_writel (void *opaque,
412
target_phys_addr_t addr, uint32_t value)
498
414
SerialState *s = opaque;
499
#ifdef TARGET_WORDS_BIGENDIAN
500
value = bswap32(value);
502
416
serial_ioport_write(s, (addr - s->base) >> s->it_shift, value);
524
438
s = qemu_mallocz(sizeof(SerialState));
441
s->set_irq = set_irq;
442
s->irq_opaque = opaque;
444
s->lsr = UART_LSR_TEMT | UART_LSR_THRE;
445
s->iir = UART_IIR_NO_INT;
446
s->msr = UART_MSR_DCD | UART_MSR_DSR | UART_MSR_CTS;
529
448
s->it_shift = it_shift;
530
s->baudbase= baudbase;
532
s->tx_timer = qemu_new_timer(vm_clock, serial_tx_done, s);
536
qemu_register_reset(serial_reset, s);
539
450
register_savevm("serial", base, 2, serial_save, serial_load, s);
542
s_io_memory = cpu_register_io_memory(0, serial_mm_read,
544
cpu_register_physical_memory(base, 8 << it_shift, s_io_memory);
452
s_io_memory = cpu_register_io_memory(0, serial_mm_read,
454
cpu_register_physical_memory(base, 8 << it_shift, s_io_memory);
547
qemu_chr_add_handlers(chr, serial_can_receive1, serial_receive1,
456
qemu_chr_add_read_handler(chr, serial_can_receive1, serial_receive1, s);
457
qemu_chr_add_event_handler(chr, serial_event);