Revision a4bc3afc

b/hw/mips_int.c
27 27
    if (level) {
28 28
        env->CP0_Cause |= 1 << (irq + CP0Ca_IP);
29 29
    } else {
30
        env->CP0_Cause &= ~(1 << (irq +CP0Ca_IP));
30
        env->CP0_Cause &= ~(1 << (irq + CP0Ca_IP));
31 31
    }
32 32
    cpu_mips_update_irq(env);
33 33
}
b/hw/mips_malta.c
55 55
    uint32_t i2csel;
56 56
    CharDriverState *display;
57 57
    char display_text[9];
58
    SerialState *uart;
58 59
} MaltaFPGAState;
59 60

  
60 61
static PITState *pit;
......
241 242
        val = s->brk;
242 243
        break;
243 244

  
245
    /* UART Registers */
246
    case 0x00900:
247
    case 0x00904:
248
    case 0x00908:
249
    case 0x0090c:
250
    case 0x00910:
251
    case 0x00914:
252
    case 0x00918:
253
    case 0x0091c:
254
        val = serial_mm_readl(s->uart, addr);
255
        break;
256

  
244 257
    /* GPOUT Register */
245 258
    case 0x00a00:
246 259
        val = s->gpout;
......
341 354
        s->brk = val & 0xff;
342 355
        break;
343 356

  
357
    /* UART Registers */
358
    case 0x00900:
359
    case 0x00904:
360
    case 0x00908:
361
    case 0x0090c:
362
    case 0x00910:
363
    case 0x00914:
364
    case 0x00918:
365
    case 0x0091c:
366
        serial_mm_writel(s->uart, addr, val);
367
        break;
368

  
344 369
    /* GPOUT Register */
345 370
    case 0x00a00:
346 371
        s->gpout = val & 0xff;
......
400 425
    malta_fpga_update_display(s);
401 426
}
402 427

  
403
MaltaFPGAState *malta_fpga_init(target_phys_addr_t base)
428
MaltaFPGAState *malta_fpga_init(target_phys_addr_t base, CPUState *env)
404 429
{
405 430
    MaltaFPGAState *s;
431
    CharDriverState *uart_chr;
406 432
    int malta;
407 433

  
408 434
    s = (MaltaFPGAState *)qemu_mallocz(sizeof(MaltaFPGAState));
409 435

  
410 436
    malta = cpu_register_io_memory(0, malta_fpga_read,
411 437
                                   malta_fpga_write, s);
438

  
412 439
    cpu_register_physical_memory(base, 0x100000, malta);
413 440

  
414 441
    s->display = qemu_chr_open("vc");
......
422 449
    qemu_chr_printf(s->display, "+        +\r\n");
423 450
    qemu_chr_printf(s->display, "+--------+\r\n");
424 451

  
452
    uart_chr = qemu_chr_open("vc");
453
    qemu_chr_printf(uart_chr, "CBUS UART\r\n");
454
    s->uart = serial_mm_init(&cpu_mips_irq_request, env, base, 3, 2,
455
                             uart_chr, 0);
456

  
425 457
    malta_fpga_reset(s);
426 458
    qemu_register_reset(malta_fpga_reset, s);
427 459

  
......
683 715
    cpu_mips_irqctrl_init();
684 716

  
685 717
    /* FPGA */
686
    malta_fpga = malta_fpga_init(0x1f000000LL);
718
    malta_fpga = malta_fpga_init(0x1f000000LL, env);
687 719

  
688 720
    /* Interrupt controller */
689 721
    isa_pic = pic_init(pic_irq_request, env);
b/hw/serial.c
371 371
}
372 372

  
373 373
/* Memory mapped interface */
374
static uint32_t serial_mm_readb (void *opaque, target_phys_addr_t addr)
374
uint32_t serial_mm_readb (void *opaque, target_phys_addr_t addr)
375 375
{
376 376
    SerialState *s = opaque;
377 377

  
378 378
    return serial_ioport_read(s, (addr - s->base) >> s->it_shift) & 0xFF;
379 379
}
380 380

  
381
static void serial_mm_writeb (void *opaque,
382
                              target_phys_addr_t addr, uint32_t value)
381
void serial_mm_writeb (void *opaque,
382
                       target_phys_addr_t addr, uint32_t value)
383 383
{
384 384
    SerialState *s = opaque;
385 385

  
386 386
    serial_ioport_write(s, (addr - s->base) >> s->it_shift, value & 0xFF);
387 387
}
388 388

  
389
static uint32_t serial_mm_readw (void *opaque, target_phys_addr_t addr)
389
uint32_t serial_mm_readw (void *opaque, target_phys_addr_t addr)
390 390
{
391 391
    SerialState *s = opaque;
392 392

  
393 393
    return serial_ioport_read(s, (addr - s->base) >> s->it_shift) & 0xFFFF;
394 394
}
395 395

  
396
static void serial_mm_writew (void *opaque,
397
                              target_phys_addr_t addr, uint32_t value)
396
void serial_mm_writew (void *opaque,
397
                       target_phys_addr_t addr, uint32_t value)
398 398
{
399 399
    SerialState *s = opaque;
400 400

  
401 401
    serial_ioport_write(s, (addr - s->base) >> s->it_shift, value & 0xFFFF);
402 402
}
403 403

  
404
static uint32_t serial_mm_readl (void *opaque, target_phys_addr_t addr)
404
uint32_t serial_mm_readl (void *opaque, target_phys_addr_t addr)
405 405
{
406 406
    SerialState *s = opaque;
407 407

  
408 408
    return serial_ioport_read(s, (addr - s->base) >> s->it_shift);
409 409
}
410 410

  
411
static void serial_mm_writel (void *opaque,
412
                              target_phys_addr_t addr, uint32_t value)
411
void serial_mm_writel (void *opaque,
412
                       target_phys_addr_t addr, uint32_t value)
413 413
{
414 414
    SerialState *s = opaque;
415 415

  
......
430 430

  
431 431
SerialState *serial_mm_init (SetIRQFunc *set_irq, void *opaque,
432 432
                             target_ulong base, int it_shift,
433
                             int irq, CharDriverState *chr)
433
                             int irq, CharDriverState *chr,
434
                             int ioregister)
434 435
{
435 436
    SerialState *s;
436 437
    int s_io_memory;
......
449 450

  
450 451
    register_savevm("serial", base, 2, serial_save, serial_load, s);
451 452

  
452
    s_io_memory = cpu_register_io_memory(0, serial_mm_read,
453
                                         serial_mm_write, s);
454
    cpu_register_physical_memory(base, 8 << it_shift, s_io_memory);
453
    if (ioregister) {
454
        s_io_memory = cpu_register_io_memory(0, serial_mm_read,
455
                                             serial_mm_write, s);
456
        cpu_register_physical_memory(base, 8 << it_shift, s_io_memory);
457
    }
455 458
    s->chr = chr;
456 459
    qemu_chr_add_handlers(chr, serial_can_receive1, serial_receive1,
457 460
                          serial_event, s);
b/target-mips/exec.h
163 163
uint32_t cpu_mips_get_count (CPUState *env);
164 164
void cpu_mips_store_count (CPUState *env, uint32_t value);
165 165
void cpu_mips_store_compare (CPUState *env, uint32_t value);
166
void cpu_mips_update_irq(CPUState *env);
166
void cpu_mips_update_irq (CPUState *env);
167 167
void cpu_mips_clock_init (CPUState *env);
168 168
void cpu_mips_tlb_flush (CPUState *env, int flush_global);
169 169

  
b/vl.h
1035 1035
                         int base, int irq, CharDriverState *chr);
1036 1036
SerialState *serial_mm_init (SetIRQFunc *set_irq, void *opaque,
1037 1037
                             target_ulong base, int it_shift,
1038
                             int irq, CharDriverState *chr);
1038
                             int irq, CharDriverState *chr,
1039
                             int ioregister);
1040
uint32_t serial_mm_readb (void *opaque, target_phys_addr_t addr);
1041
void serial_mm_writeb (void *opaque, target_phys_addr_t addr, uint32_t value);
1042
uint32_t serial_mm_readw (void *opaque, target_phys_addr_t addr);
1043
void serial_mm_writew (void *opaque, target_phys_addr_t addr, uint32_t value);
1044
uint32_t serial_mm_readl (void *opaque, target_phys_addr_t addr);
1045
void serial_mm_writel (void *opaque, target_phys_addr_t addr, uint32_t value);
1039 1046

  
1040 1047
/* parallel.c */
1041 1048

  

Also available in: Unified diff