Lines Matching refs:s

154 static void kbd_update_irq_lines(KBDState *s)  in kbd_update_irq_lines()  argument
161 if (s->status & KBD_STAT_OBF) { in kbd_update_irq_lines()
162 if (s->status & KBD_STAT_MOUSE_OBF) { in kbd_update_irq_lines()
163 if (s->mode & KBD_MODE_MOUSE_INT) { in kbd_update_irq_lines()
167 if ((s->mode & KBD_MODE_KBD_INT) && in kbd_update_irq_lines()
168 !(s->mode & KBD_MODE_DISABLE_KBD)) { in kbd_update_irq_lines()
173 qemu_set_irq(s->irqs[I8042_KBD_IRQ], irq_kbd_level); in kbd_update_irq_lines()
174 qemu_set_irq(s->irqs[I8042_MOUSE_IRQ], irq_mouse_level); in kbd_update_irq_lines()
177 static void kbd_deassert_irq(KBDState *s) in kbd_deassert_irq() argument
179 s->status &= ~(KBD_STAT_OBF | KBD_STAT_MOUSE_OBF); in kbd_deassert_irq()
180 s->outport &= ~(KBD_OUT_OBF | KBD_OUT_MOUSE_OBF); in kbd_deassert_irq()
181 kbd_update_irq_lines(s); in kbd_deassert_irq()
184 static uint8_t kbd_pending(KBDState *s) in kbd_pending() argument
186 if (s->extended_state) { in kbd_pending()
187 return s->pending & (~s->mode | ~(KBD_PENDING_KBD | KBD_PENDING_AUX)); in kbd_pending()
189 return s->pending; in kbd_pending()
194 static void kbd_update_irq(KBDState *s) in kbd_update_irq() argument
196 uint8_t pending = kbd_pending(s); in kbd_update_irq()
198 s->status &= ~(KBD_STAT_OBF | KBD_STAT_MOUSE_OBF); in kbd_update_irq()
199 s->outport &= ~(KBD_OUT_OBF | KBD_OUT_MOUSE_OBF); in kbd_update_irq()
201 s->status |= KBD_STAT_OBF; in kbd_update_irq()
202 s->outport |= KBD_OUT_OBF; in kbd_update_irq()
204 s->obsrc = KBD_OBSRC_CTRL; in kbd_update_irq()
206 s->status |= KBD_STAT_MOUSE_OBF; in kbd_update_irq()
207 s->outport |= KBD_OUT_MOUSE_OBF; in kbd_update_irq()
208 s->obsrc = KBD_OBSRC_CTRL; in kbd_update_irq()
210 s->obsrc = KBD_OBSRC_KBD; in kbd_update_irq()
212 s->status |= KBD_STAT_MOUSE_OBF; in kbd_update_irq()
213 s->outport |= KBD_OUT_MOUSE_OBF; in kbd_update_irq()
214 s->obsrc = KBD_OBSRC_MOUSE; in kbd_update_irq()
217 kbd_update_irq_lines(s); in kbd_update_irq()
220 static void kbd_safe_update_irq(KBDState *s) in kbd_safe_update_irq() argument
226 if (s->status & KBD_STAT_OBF) { in kbd_safe_update_irq()
230 if (s->throttle_timer && timer_pending(s->throttle_timer)) { in kbd_safe_update_irq()
233 if (kbd_pending(s)) { in kbd_safe_update_irq()
234 kbd_update_irq(s); in kbd_safe_update_irq()
240 KBDState *s = opaque; in kbd_update_kbd_irq() local
243 s->pending |= KBD_PENDING_KBD; in kbd_update_kbd_irq()
245 s->pending &= ~KBD_PENDING_KBD; in kbd_update_kbd_irq()
247 kbd_safe_update_irq(s); in kbd_update_kbd_irq()
252 KBDState *s = opaque; in kbd_update_aux_irq() local
255 s->pending |= KBD_PENDING_AUX; in kbd_update_aux_irq()
257 s->pending &= ~KBD_PENDING_AUX; in kbd_update_aux_irq()
259 kbd_safe_update_irq(s); in kbd_update_aux_irq()
264 KBDState *s = opaque; in kbd_throttle_timeout() local
266 if (kbd_pending(s)) { in kbd_throttle_timeout()
267 kbd_update_irq(s); in kbd_throttle_timeout()
274 KBDState *s = opaque; in kbd_read_status() local
276 val = s->status; in kbd_read_status()
281 static void kbd_queue(KBDState *s, int b, int aux) in kbd_queue() argument
283 if (s->extended_state) { in kbd_queue()
284 s->cbdata = b; in kbd_queue()
285 s->pending &= ~KBD_PENDING_CTRL_KBD & ~KBD_PENDING_CTRL_AUX; in kbd_queue()
286 s->pending |= aux ? KBD_PENDING_CTRL_AUX : KBD_PENDING_CTRL_KBD; in kbd_queue()
287 kbd_safe_update_irq(s); in kbd_queue()
289 ps2_queue(aux ? PS2_DEVICE(&s->ps2mouse) : PS2_DEVICE(&s->ps2kbd), b); in kbd_queue()
293 static uint8_t kbd_dequeue(KBDState *s) in kbd_dequeue() argument
295 uint8_t b = s->cbdata; in kbd_dequeue()
297 s->pending &= ~KBD_PENDING_CTRL_KBD & ~KBD_PENDING_CTRL_AUX; in kbd_dequeue()
298 if (kbd_pending(s)) { in kbd_dequeue()
299 kbd_update_irq(s); in kbd_dequeue()
304 static void outport_write(KBDState *s, uint32_t val) in outport_write() argument
307 s->outport = val; in outport_write()
308 qemu_set_irq(s->a20_out, (val >> 1) & 1); in outport_write()
317 KBDState *s = opaque; in kbd_write_command() local
339 kbd_queue(s, s->mode, 0); in kbd_write_command()
346 s->write_cmd = val; in kbd_write_command()
349 s->mode |= KBD_MODE_DISABLE_MOUSE; in kbd_write_command()
352 s->mode &= ~KBD_MODE_DISABLE_MOUSE; in kbd_write_command()
353 kbd_safe_update_irq(s); in kbd_write_command()
356 kbd_queue(s, 0x00, 0); in kbd_write_command()
359 s->status |= KBD_STAT_SELFTEST; in kbd_write_command()
360 kbd_queue(s, 0x55, 0); in kbd_write_command()
363 kbd_queue(s, 0x00, 0); in kbd_write_command()
366 s->mode |= KBD_MODE_DISABLE_KBD; in kbd_write_command()
369 s->mode &= ~KBD_MODE_DISABLE_KBD; in kbd_write_command()
370 kbd_safe_update_irq(s); in kbd_write_command()
373 kbd_queue(s, 0x80, 0); in kbd_write_command()
376 kbd_queue(s, s->outport, 0); in kbd_write_command()
379 qemu_irq_raise(s->a20_out); in kbd_write_command()
380 s->outport |= KBD_OUT_A20; in kbd_write_command()
383 qemu_irq_lower(s->a20_out); in kbd_write_command()
384 s->outport &= ~KBD_OUT_A20; in kbd_write_command()
402 KBDState *s = opaque; in kbd_read_data() local
404 if (s->status & KBD_STAT_OBF) { in kbd_read_data()
405 kbd_deassert_irq(s); in kbd_read_data()
406 if (s->obsrc & KBD_OBSRC_KBD) { in kbd_read_data()
407 if (s->throttle_timer) { in kbd_read_data()
408 timer_mod(s->throttle_timer, in kbd_read_data()
411 s->obdata = ps2_read_data(PS2_DEVICE(&s->ps2kbd)); in kbd_read_data()
412 } else if (s->obsrc & KBD_OBSRC_MOUSE) { in kbd_read_data()
413 s->obdata = ps2_read_data(PS2_DEVICE(&s->ps2mouse)); in kbd_read_data()
414 } else if (s->obsrc & KBD_OBSRC_CTRL) { in kbd_read_data()
415 s->obdata = kbd_dequeue(s); in kbd_read_data()
419 trace_pckbd_kbd_read_data(s->obdata); in kbd_read_data()
420 return s->obdata; in kbd_read_data()
426 KBDState *s = opaque; in kbd_write_data() local
430 switch (s->write_cmd) { in kbd_write_data()
432 ps2_write_keyboard(&s->ps2kbd, val); in kbd_write_data()
434 s->mode &= ~KBD_MODE_DISABLE_KBD; in kbd_write_data()
435 kbd_safe_update_irq(s); in kbd_write_data()
438 s->mode = val; in kbd_write_data()
439 ps2_keyboard_set_translation(&s->ps2kbd, in kbd_write_data()
440 (s->mode & KBD_MODE_KCC) != 0); in kbd_write_data()
445 kbd_update_irq_lines(s); in kbd_write_data()
450 kbd_safe_update_irq(s); in kbd_write_data()
453 kbd_queue(s, val, 0); in kbd_write_data()
456 kbd_queue(s, val, 1); in kbd_write_data()
459 outport_write(s, val); in kbd_write_data()
462 ps2_write_mouse(&s->ps2mouse, val); in kbd_write_data()
464 s->mode &= ~KBD_MODE_DISABLE_MOUSE; in kbd_write_data()
465 kbd_safe_update_irq(s); in kbd_write_data()
470 s->write_cmd = 0; in kbd_write_data()
475 KBDState *s = opaque; in kbd_reset() local
477 s->mode = KBD_MODE_KBD_INT | KBD_MODE_MOUSE_INT; in kbd_reset()
478 s->status = KBD_STAT_CMD | KBD_STAT_UNLOCKED; in kbd_reset()
479 s->outport = KBD_OUT_RESET | KBD_OUT_A20 | KBD_OUT_ONES; in kbd_reset()
480 s->pending = 0; in kbd_reset()
481 kbd_deassert_irq(s); in kbd_reset()
482 if (s->throttle_timer) { in kbd_reset()
483 timer_del(s->throttle_timer); in kbd_reset()
487 static uint8_t kbd_outport_default(KBDState *s) in kbd_outport_default() argument
490 | (s->status & KBD_STAT_OBF ? KBD_OUT_OBF : 0) in kbd_outport_default()
491 | (s->status & KBD_STAT_MOUSE_OBF ? KBD_OUT_MOUSE_OBF : 0); in kbd_outport_default()
496 KBDState *s = opaque; in kbd_outport_post_load() local
497 s->outport_present = true; in kbd_outport_post_load()
503 KBDState *s = opaque; in kbd_outport_needed() local
504 return s->outport != kbd_outport_default(s); in kbd_outport_needed()
521 KBDState *s = opaque; in kbd_extended_state_pre_save() local
523 s->migration_flags = 0; in kbd_extended_state_pre_save()
524 if (s->throttle_timer && timer_pending(s->throttle_timer)) { in kbd_extended_state_pre_save()
525 s->migration_flags |= KBD_MIGR_TIMER_PENDING; in kbd_extended_state_pre_save()
533 KBDState *s = opaque; in kbd_extended_state_post_load() local
535 if (s->migration_flags & KBD_MIGR_TIMER_PENDING) { in kbd_extended_state_post_load()
536 kbd_throttle_timeout(s); in kbd_extended_state_post_load()
538 s->extended_state_loaded = true; in kbd_extended_state_post_load()
545 KBDState *s = opaque; in kbd_extended_state_needed() local
547 return s->extended_state; in kbd_extended_state_needed()
566 KBDState *s = opaque; in kbd_pre_save() local
568 if (s->extended_state) { in kbd_pre_save()
569 s->pending_tmp = s->pending; in kbd_pre_save()
571 s->pending_tmp = 0; in kbd_pre_save()
572 if (s->pending & KBD_PENDING_KBD) { in kbd_pre_save()
573 s->pending_tmp |= KBD_PENDING_KBD_COMPAT; in kbd_pre_save()
575 if (s->pending & KBD_PENDING_AUX) { in kbd_pre_save()
576 s->pending_tmp |= KBD_PENDING_AUX_COMPAT; in kbd_pre_save()
584 KBDState *s = opaque; in kbd_pre_load() local
586 s->outport_present = false; in kbd_pre_load()
587 s->extended_state_loaded = false; in kbd_pre_load()
593 KBDState *s = opaque; in kbd_post_load() local
594 if (!s->outport_present) { in kbd_post_load()
595 s->outport = kbd_outport_default(s); in kbd_post_load()
597 s->pending = s->pending_tmp; in kbd_post_load()
598 if (!s->extended_state_loaded) { in kbd_post_load()
599 s->obsrc = s->status & KBD_STAT_OBF ? in kbd_post_load()
600 (s->status & KBD_STAT_MOUSE_OBF ? KBD_OBSRC_MOUSE : KBD_OBSRC_KBD) : in kbd_post_load()
602 if (s->pending & KBD_PENDING_KBD_COMPAT) { in kbd_post_load()
603 s->pending |= KBD_PENDING_KBD; in kbd_post_load()
605 if (s->pending & KBD_PENDING_AUX_COMPAT) { in kbd_post_load()
606 s->pending |= KBD_PENDING_AUX; in kbd_post_load()
610 s->pending &= KBD_PENDING_CTRL_KBD | KBD_PENDING_CTRL_AUX | in kbd_post_load()
639 KBDState *s = opaque; in kbd_mm_readfn() local
641 if (addr & s->mask) { in kbd_mm_readfn()
642 return kbd_read_status(s, 0, 1) & 0xff; in kbd_mm_readfn()
644 return kbd_read_data(s, 0, 1) & 0xff; in kbd_mm_readfn()
651 KBDState *s = opaque; in kbd_mm_writefn() local
653 if (addr & s->mask) { in kbd_mm_writefn()
654 kbd_write_command(s, 0, value & 0xff, 1); in kbd_mm_writefn()
656 kbd_write_data(s, 0, value & 0xff, 1); in kbd_mm_writefn()
671 MMIOKBDState *s = I8042_MMIO(opaque); in i8042_mmio_set_kbd_irq() local
672 KBDState *ks = &s->kbd; in i8042_mmio_set_kbd_irq()
679 MMIOKBDState *s = I8042_MMIO(opaque); in i8042_mmio_set_mouse_irq() local
680 KBDState *ks = &s->kbd; in i8042_mmio_set_mouse_irq()
687 MMIOKBDState *s = I8042_MMIO(dev); in i8042_mmio_reset() local
688 KBDState *ks = &s->kbd; in i8042_mmio_reset()
695 MMIOKBDState *s = I8042_MMIO(dev); in i8042_mmio_realize() local
696 KBDState *ks = &s->kbd; in i8042_mmio_realize()
698 memory_region_init_io(&s->region, OBJECT(dev), &i8042_mmio_ops, ks, in i8042_mmio_realize()
699 "i8042", s->size); in i8042_mmio_realize()
701 sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->region); in i8042_mmio_realize()
722 MMIOKBDState *s = I8042_MMIO(obj); in i8042_mmio_init() local
723 KBDState *ks = &s->kbd; in i8042_mmio_init()
775 KBDState *s = &isa->kbd; in i8042_isa_mouse_fake_event() local
777 ps2_mouse_fake_event(&s->ps2mouse); in i8042_isa_mouse_fake_event()
812 ISAKBDState *s = I8042(opaque); in i8042_set_kbd_irq() local
813 KBDState *ks = &s->kbd; in i8042_set_kbd_irq()
820 ISAKBDState *s = I8042(opaque); in i8042_set_mouse_irq() local
821 KBDState *ks = &s->kbd; in i8042_set_mouse_irq()
829 ISAKBDState *s = I8042(dev); in i8042_reset() local
830 KBDState *ks = &s->kbd; in i8042_reset()
838 KBDState *s = &isa_s->kbd; in i8042_initfn() local
840 memory_region_init_io(isa_s->io + 0, obj, &i8042_data_ops, s, in i8042_initfn()
842 memory_region_init_io(isa_s->io + 1, obj, &i8042_cmd_ops, s, in i8042_initfn()
845 object_initialize_child(obj, "ps2kbd", &s->ps2kbd, TYPE_PS2_KBD_DEVICE); in i8042_initfn()
846 object_initialize_child(obj, "ps2mouse", &s->ps2mouse, in i8042_initfn()
849 qdev_init_gpio_out_named(DEVICE(obj), &s->a20_out, I8042_A20_LINE, 1); in i8042_initfn()
851 qdev_init_gpio_out(DEVICE(obj), s->irqs, 2); in i8042_initfn()
862 KBDState *s = &isa_s->kbd; in i8042_realizefn() local
882 if (!sysbus_realize(SYS_BUS_DEVICE(&s->ps2kbd), errp)) { in i8042_realizefn()
886 qdev_connect_gpio_out(DEVICE(&s->ps2kbd), PS2_DEVICE_IRQ, in i8042_realizefn()
890 if (!sysbus_realize(SYS_BUS_DEVICE(&s->ps2mouse), errp)) { in i8042_realizefn()
894 qdev_connect_gpio_out(DEVICE(&s->ps2mouse), PS2_DEVICE_IRQ, in i8042_realizefn()
902 s->throttle_timer = timer_new_us(QEMU_CLOCK_VIRTUAL, in i8042_realizefn()
903 kbd_throttle_timeout, s); in i8042_realizefn()