400
400
kbd_write_data(s, 0, value & 0xff);
403
static CPUReadMemoryFunc * const kbd_mm_read[] = {
409
static CPUWriteMemoryFunc * const kbd_mm_write[] = {
403
static const MemoryRegionOps i8042_mmio_ops = {
404
.endianness = DEVICE_NATIVE_ENDIAN,
406
.read = { kbd_mm_readb, kbd_mm_readb, kbd_mm_readb },
407
.write = { kbd_mm_writeb, kbd_mm_writeb, kbd_mm_writeb },
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)
419
KBDState *s = qemu_mallocz(sizeof(KBDState));
415
KBDState *s = g_malloc0(sizeof(KBDState));
422
417
s->irq_kbd = kbd_irq;
423
418
s->irq_mouse = mouse_irq;
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);
423
memory_region_init_io(region, &i8042_mmio_ops, s, "i8042", size);
431
425
s->kbd = ps2_kbd_init(kbd_update_kbd_irq, s);
432
426
s->mouse = ps2_mouse_init(kbd_update_aux_irq, s);
462
static const MemoryRegionPortio i8042_data_portio[] = {
463
{ 0, 1, 1, .read = kbd_read_data, .write = kbd_write_data },
467
static const MemoryRegionPortio i8042_cmd_portio[] = {
468
{ 0, 1, 1, .read = kbd_read_status, .write = kbd_write_command },
472
static const MemoryRegionOps i8042_data_ops = {
473
.old_portio = i8042_data_portio
476
static const MemoryRegionOps i8042_cmd_ops = {
477
.old_portio = i8042_cmd_portio
467
480
static int i8042_initfn(ISADevice *dev)
469
KBDState *s = &(DO_UPCAST(ISAKBDState, dev, dev)->kbd);
482
ISAKBDState *isa_s = DO_UPCAST(ISAKBDState, dev, dev);
483
KBDState *s = &isa_s->kbd;
471
485
isa_init_irq(dev, &s->irq_kbd, 1);
472
486
isa_init_irq(dev, &s->irq_mouse, 12);
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);
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);
481
494
s->kbd = ps2_kbd_init(kbd_update_kbd_irq, s);
482
495
s->mouse = ps2_mouse_init(kbd_update_aux_irq, s);