Revision 80355292

b/hw/pckbd.c
125 125
    qemu_irq irq_kbd;
126 126
    qemu_irq irq_mouse;
127 127
    target_phys_addr_t base;
128
    int it_shift;
128 129
} KBDState;
129 130

  
130 131
KBDState kbd_state;
......
384 385
{
385 386
    KBDState *s = opaque;
386 387

  
387
    if (addr == s->base)
388
        return kbd_read_data(s, 0);
389
    else
390
        return kbd_read_status(s, 0);
388
    switch ((addr - s->base) >> s->it_shift) {
389
    case 0:
390
        return kbd_read_data(s, 0) & 0xff;
391
    case 1:
392
        return kbd_read_status(s, 0) & 0xff;
393
    default:
394
        return 0xff;
395
    }
391 396
}
392 397

  
393
void kbd_mm_writeb (void *opaque,
394
                       target_phys_addr_t addr, uint32_t value)
398
void kbd_mm_writeb (void *opaque, target_phys_addr_t addr, uint32_t value)
395 399
{
396 400
    KBDState *s = opaque;
397 401

  
398
    if (addr == s->base)
399
        kbd_write_data(s, 0, value);
400
    else
401
        kbd_write_command(s, 0, value);
402
    switch ((addr - s->base) >> s->it_shift) {
403
    case 0:
404
        kbd_write_data(s, 0, value & 0xff);
405
        break;
406
    case 1:
407
        kbd_write_command(s, 0, value & 0xff);
408
        break;
409
    }
402 410
}
403 411

  
404 412
static CPUReadMemoryFunc *kbd_mm_read[] = {
......
413 421
    &kbd_mm_writeb,
414 422
};
415 423

  
416
void i8042_mm_init(qemu_irq kbd_irq, qemu_irq mouse_irq, target_ulong base, int it_shift)
424
void i8042_mm_init(qemu_irq kbd_irq, qemu_irq mouse_irq, target_ulong base,
425
                   int it_shift)
417 426
{
418 427
    KBDState *s = &kbd_state;
419 428
    int s_io_memory;
......
421 430
    s->irq_kbd = kbd_irq;
422 431
    s->irq_mouse = mouse_irq;
423 432
    s->base = base;
433
    s->it_shift = it_shift;
424 434

  
425 435
    kbd_reset(s);
426 436
    register_savevm("pckbd", 0, 3, kbd_save, kbd_load, s);
427 437
    s_io_memory = cpu_register_io_memory(0, kbd_mm_read, kbd_mm_write, s);
428
    cpu_register_physical_memory(base & ~(TARGET_PAGE_SIZE - 1), TARGET_PAGE_SIZE, s_io_memory);
438
    cpu_register_physical_memory(base, 8 << it_shift, s_io_memory);
429 439

  
430 440
    s->kbd = ps2_kbd_init(kbd_update_kbd_irq, s);
431 441
    s->mouse = ps2_mouse_init(kbd_update_aux_irq, s);

Also available in: Unified diff