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,6 +125,7 @@ typedef struct KBDState {
125 qemu_irq irq_kbd; 125 qemu_irq irq_kbd;
126 qemu_irq irq_mouse; 126 qemu_irq irq_mouse;
127 target_phys_addr_t base; 127 target_phys_addr_t base;
  128 + int it_shift;
128 } KBDState; 129 } KBDState;
129 130
130 KBDState kbd_state; 131 KBDState kbd_state;
@@ -384,21 +385,28 @@ uint32_t kbd_mm_readb (void *opaque, target_phys_addr_t addr) @@ -384,21 +385,28 @@ uint32_t kbd_mm_readb (void *opaque, target_phys_addr_t addr)
384 { 385 {
385 KBDState *s = opaque; 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 KBDState *s = opaque; 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 static CPUReadMemoryFunc *kbd_mm_read[] = { 412 static CPUReadMemoryFunc *kbd_mm_read[] = {
@@ -413,7 +421,8 @@ static CPUWriteMemoryFunc *kbd_mm_write[] = { @@ -413,7 +421,8 @@ static CPUWriteMemoryFunc *kbd_mm_write[] = {
413 &kbd_mm_writeb, 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 KBDState *s = &kbd_state; 427 KBDState *s = &kbd_state;
419 int s_io_memory; 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,11 +430,12 @@ void i8042_mm_init(qemu_irq kbd_irq, qemu_irq mouse_irq, target_ulong base, int
421 s->irq_kbd = kbd_irq; 430 s->irq_kbd = kbd_irq;
422 s->irq_mouse = mouse_irq; 431 s->irq_mouse = mouse_irq;
423 s->base = base; 432 s->base = base;
  433 + s->it_shift = it_shift;
424 434
425 kbd_reset(s); 435 kbd_reset(s);
426 register_savevm("pckbd", 0, 3, kbd_save, kbd_load, s); 436 register_savevm("pckbd", 0, 3, kbd_save, kbd_load, s);
427 s_io_memory = cpu_register_io_memory(0, kbd_mm_read, kbd_mm_write, s); 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 s->kbd = ps2_kbd_init(kbd_update_kbd_irq, s); 440 s->kbd = ps2_kbd_init(kbd_update_kbd_irq, s);
431 s->mouse = ps2_mouse_init(kbd_update_aux_irq, s); 441 s->mouse = ps2_mouse_init(kbd_update_aux_irq, s);