Commit 80355292503667b5367f09ec8716126c3caa1e3a

Authored by ths
1 parent 8ecc7913

Support it_shift for mmapped pckbd.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2691 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 22 additions and 12 deletions
hw/pckbd.c
... ... @@ -125,6 +125,7 @@ typedef struct KBDState {
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,21 +385,28 @@ uint32_t kbd_mm_readb (void *opaque, target_phys_addr_t addr)
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,7 +421,8 @@ static CPUWriteMemoryFunc *kbd_mm_write[] = {
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,11 +430,12 @@ void i8042_mm_init(qemu_irq kbd_irq, qemu_irq mouse_irq, target_ulong base, int
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);
... ...