~ubuntu-branches/ubuntu/precise/qemu-kvm/precise

« back to all changes in this revision

Viewing changes to hw/pckbd.c

  • Committer: Serge Hallyn
  • Date: 2011-12-06 22:40:24 UTC
  • mfrom: (1.2.8)
  • Revision ID: serge.hallyn@ubuntu.com-20111206224024-x6bw4wnn65pgf55v
Tags: 1.0+noroms-0ubuntu1
* New upstream release
* Remaining changes from upstream:
  - removed all binary roms and tests/pi_10.com
* debian/qemu-kvm.links: qemu is now called qemu-system-i386, don't symlink
  it
* remove patches applied upstream:
  - debian/patches/vpc.patch
  - debian/patches/e1000-Dont-set-the-Capabilities-List-bit.patch
  - debian/patches/CVE-2011-4111.patch
* replace default-to-tcg.patch with simpler fallback-to-tcg.patch
* keep remaining patches:
  - larger_default_ram_size.patch
  - CVE-2011-2212-virtqueue-indirect-overflow.patch
  - qemuifup-fix-paths.patch
  - dont-try-to-hotplug-cpu.patch

Show diffs side-by-side

added added

removed removed

Lines of Context:
400
400
        kbd_write_data(s, 0, value & 0xff);
401
401
}
402
402
 
403
 
static CPUReadMemoryFunc * const kbd_mm_read[] = {
404
 
    &kbd_mm_readb,
405
 
    &kbd_mm_readb,
406
 
    &kbd_mm_readb,
407
 
};
408
 
 
409
 
static CPUWriteMemoryFunc * const kbd_mm_write[] = {
410
 
    &kbd_mm_writeb,
411
 
    &kbd_mm_writeb,
412
 
    &kbd_mm_writeb,
 
403
static const MemoryRegionOps i8042_mmio_ops = {
 
404
    .endianness = DEVICE_NATIVE_ENDIAN,
 
405
    .old_mmio = {
 
406
        .read = { kbd_mm_readb, kbd_mm_readb, kbd_mm_readb },
 
407
        .write = { kbd_mm_writeb, kbd_mm_writeb, kbd_mm_writeb },
 
408
    },
413
409
};
414
410
 
415
411
void i8042_mm_init(qemu_irq kbd_irq, qemu_irq mouse_irq,
416
 
                   target_phys_addr_t base, ram_addr_t size,
 
412
                   MemoryRegion *region, ram_addr_t size,
417
413
                   target_phys_addr_t mask)
418
414
{
419
 
    KBDState *s = qemu_mallocz(sizeof(KBDState));
420
 
    int s_io_memory;
 
415
    KBDState *s = g_malloc0(sizeof(KBDState));
421
416
 
422
417
    s->irq_kbd = kbd_irq;
423
418
    s->irq_mouse = mouse_irq;
424
419
    s->mask = mask;
425
420
 
426
421
    vmstate_register(NULL, 0, &vmstate_kbd, s);
427
 
    s_io_memory = cpu_register_io_memory(kbd_mm_read, kbd_mm_write, s,
428
 
                                         DEVICE_NATIVE_ENDIAN);
429
 
    cpu_register_physical_memory(base, size, s_io_memory);
 
422
 
 
423
    memory_region_init_io(region, &i8042_mmio_ops, s, "i8042", size);
430
424
 
431
425
    s->kbd = ps2_kbd_init(kbd_update_kbd_irq, s);
432
426
    s->mouse = ps2_mouse_init(kbd_update_aux_irq, s);
435
429
 
436
430
typedef struct ISAKBDState {
437
431
    ISADevice dev;
438
 
    KBDState  kbd;
 
432
    KBDState kbd;
 
433
    MemoryRegion io[2];
439
434
} ISAKBDState;
440
435
 
441
436
void i8042_isa_mouse_fake_event(void *opaque)
464
459
    }
465
460
};
466
461
 
 
462
static const MemoryRegionPortio i8042_data_portio[] = {
 
463
    { 0, 1, 1, .read = kbd_read_data, .write = kbd_write_data },
 
464
    PORTIO_END_OF_LIST()
 
465
};
 
466
 
 
467
static const MemoryRegionPortio i8042_cmd_portio[] = {
 
468
    { 0, 1, 1, .read = kbd_read_status, .write = kbd_write_command },
 
469
    PORTIO_END_OF_LIST()
 
470
};
 
471
 
 
472
static const MemoryRegionOps i8042_data_ops = {
 
473
    .old_portio = i8042_data_portio
 
474
};
 
475
 
 
476
static const MemoryRegionOps i8042_cmd_ops = {
 
477
    .old_portio = i8042_cmd_portio
 
478
};
 
479
 
467
480
static int i8042_initfn(ISADevice *dev)
468
481
{
469
 
    KBDState *s = &(DO_UPCAST(ISAKBDState, dev, dev)->kbd);
 
482
    ISAKBDState *isa_s = DO_UPCAST(ISAKBDState, dev, dev);
 
483
    KBDState *s = &isa_s->kbd;
470
484
 
471
485
    isa_init_irq(dev, &s->irq_kbd, 1);
472
486
    isa_init_irq(dev, &s->irq_mouse, 12);
473
487
 
474
 
    register_ioport_read(0x60, 1, 1, kbd_read_data, s);
475
 
    register_ioport_write(0x60, 1, 1, kbd_write_data, s);
476
 
    isa_init_ioport(dev, 0x60);
477
 
    register_ioport_read(0x64, 1, 1, kbd_read_status, s);
478
 
    register_ioport_write(0x64, 1, 1, kbd_write_command, s);
479
 
    isa_init_ioport(dev, 0x64);
 
488
    memory_region_init_io(isa_s->io + 0, &i8042_data_ops, s, "i8042-data", 1);
 
489
    isa_register_ioport(dev, isa_s->io + 0, 0x60);
 
490
 
 
491
    memory_region_init_io(isa_s->io + 1, &i8042_cmd_ops, s, "i8042-cmd", 1);
 
492
    isa_register_ioport(dev, isa_s->io + 1, 0x64);
480
493
 
481
494
    s->kbd = ps2_kbd_init(kbd_update_kbd_irq, s);
482
495
    s->mouse = ps2_mouse_init(kbd_update_aux_irq, s);