Lines Matching +full:key +full:- +full:down
126 static unsigned int ps2_modifier_bit(QKeyCode key) in ps2_modifier_bit() argument
128 switch (key) { in ps2_modifier_bit()
148 PS2Queue *q = &s->queue; in ps2_reset_queue()
150 q->rptr = 0; in ps2_reset_queue()
151 q->wptr = 0; in ps2_reset_queue()
152 q->cwptr = -1; in ps2_reset_queue()
153 q->count = 0; in ps2_reset_queue()
158 return s->queue.count == 0; in ps2_queue_empty()
163 PS2Queue *q = &s->queue; in ps2_queue_noirq()
165 if (q->count >= PS2_QUEUE_SIZE) { in ps2_queue_noirq()
169 q->data[q->wptr] = b; in ps2_queue_noirq()
170 if (++q->wptr == PS2_BUFFER_SIZE) { in ps2_queue_noirq()
171 q->wptr = 0; in ps2_queue_noirq()
173 q->count++; in ps2_queue_noirq()
178 qemu_set_irq(s->irq, 1); in ps2_raise_irq()
183 qemu_set_irq(s->irq, 0); in ps2_lower_irq()
188 if (PS2_QUEUE_SIZE - s->queue.count < 1) { in ps2_queue()
198 if (PS2_QUEUE_SIZE - s->queue.count < 2) { in ps2_queue_2()
209 if (PS2_QUEUE_SIZE - s->queue.count < 3) { in ps2_queue_3()
221 if (PS2_QUEUE_SIZE - s->queue.count < 4) { in ps2_queue_4()
234 q->data[q->cwptr] = b; in ps2_cqueue_data()
235 if (++q->cwptr >= PS2_BUFFER_SIZE) { in ps2_cqueue_data()
236 q->cwptr = 0; in ps2_cqueue_data()
238 q->count++; in ps2_cqueue_data()
243 PS2Queue *q = &s->queue; in ps2_cqueue_1()
245 q->rptr = (q->rptr - 1) & (PS2_BUFFER_SIZE - 1); in ps2_cqueue_1()
246 q->cwptr = q->rptr; in ps2_cqueue_1()
253 PS2Queue *q = &s->queue; in ps2_cqueue_2()
255 q->rptr = (q->rptr - 2) & (PS2_BUFFER_SIZE - 1); in ps2_cqueue_2()
256 q->cwptr = q->rptr; in ps2_cqueue_2()
264 PS2Queue *q = &s->queue; in ps2_cqueue_3()
266 q->rptr = (q->rptr - 3) & (PS2_BUFFER_SIZE - 1); in ps2_cqueue_3()
267 q->cwptr = q->rptr; in ps2_cqueue_3()
276 PS2Queue *q = &s->queue; in ps2_cqueue_reset()
279 if (q->cwptr == -1) { in ps2_cqueue_reset()
283 ccount = (q->cwptr - q->rptr) & (PS2_BUFFER_SIZE - 1); in ps2_cqueue_reset()
284 q->count -= ccount; in ps2_cqueue_reset()
285 q->rptr = q->cwptr; in ps2_cqueue_reset()
286 q->cwptr = -1; in ps2_cqueue_reset()
298 if (s->translate) { in ps2_put_keycode()
300 s->need_high_bit = true; in ps2_put_keycode()
301 } else if (s->need_high_bit) { in ps2_put_keycode()
303 s->need_high_bit = false; in ps2_put_keycode()
316 InputKeyEvent *key = evt->u.key.data; in ps2_keyboard_event() local
322 if (!s->scan_enabled) { in ps2_keyboard_event()
327 assert(evt->type == INPUT_EVENT_KIND_KEY); in ps2_keyboard_event()
328 qcode = qemu_input_key_value_to_qcode(key->key); in ps2_keyboard_event()
331 trace_ps2_keyboard_event(s, qcode, key->down, mod, in ps2_keyboard_event()
332 s->modifiers, s->scancode_set, s->translate); in ps2_keyboard_event()
333 if (key->down) { in ps2_keyboard_event()
334 s->modifiers |= mod; in ps2_keyboard_event()
336 s->modifiers &= ~mod; in ps2_keyboard_event()
339 if (s->scancode_set == 1) { in ps2_keyboard_event()
341 if (s->modifiers & (MOD_CTRL_L | MOD_CTRL_R)) { in ps2_keyboard_event()
342 if (key->down) { in ps2_keyboard_event()
349 if (key->down) { in ps2_keyboard_event()
359 if (s->modifiers & MOD_ALT_L) { in ps2_keyboard_event()
360 if (key->down) { in ps2_keyboard_event()
369 } else if (s->modifiers & MOD_ALT_R) { in ps2_keyboard_event()
370 if (key->down) { in ps2_keyboard_event()
383 } else if (s->modifiers & (MOD_SHIFT_L | MOD_CTRL_L | in ps2_keyboard_event()
385 if (key->down) { in ps2_keyboard_event()
393 if (key->down) { in ps2_keyboard_event()
406 && !key->down) { in ps2_keyboard_event()
416 if (!key->down) { in ps2_keyboard_event()
422 "ps2: ignoring key with qcode %d\n", qcode); in ps2_keyboard_event()
425 } else if (s->scancode_set == 2) { in ps2_keyboard_event()
427 if (s->modifiers & (MOD_CTRL_L | MOD_CTRL_R)) { in ps2_keyboard_event()
428 if (key->down) { in ps2_keyboard_event()
436 if (key->down) { in ps2_keyboard_event()
448 if (s->modifiers & MOD_ALT_L) { in ps2_keyboard_event()
449 if (key->down) { in ps2_keyboard_event()
461 } else if (s->modifiers & MOD_ALT_R) { in ps2_keyboard_event()
462 if (key->down) { in ps2_keyboard_event()
478 } else if (s->modifiers & (MOD_SHIFT_L | MOD_CTRL_L | in ps2_keyboard_event()
480 if (key->down) { in ps2_keyboard_event()
489 if (key->down) { in ps2_keyboard_event()
504 !key->down) { in ps2_keyboard_event()
514 if (!key->down) { in ps2_keyboard_event()
520 "ps2: ignoring key with qcode %d\n", qcode); in ps2_keyboard_event()
523 } else if (s->scancode_set == 3) { in ps2_keyboard_event()
528 /* FIXME: break code should be configured on a key by key basis */ in ps2_keyboard_event()
529 if (!key->down) { in ps2_keyboard_event()
535 "ps2: ignoring key with qcode %d\n", qcode); in ps2_keyboard_event()
546 q = &s->queue; in ps2_read_data()
547 if (q->count == 0) { in ps2_read_data()
553 index = q->rptr - 1; in ps2_read_data()
555 index = PS2_BUFFER_SIZE - 1; in ps2_read_data()
557 val = q->data[index]; in ps2_read_data()
559 val = q->data[q->rptr]; in ps2_read_data()
560 if (++q->rptr == PS2_BUFFER_SIZE) { in ps2_read_data()
561 q->rptr = 0; in ps2_read_data()
563 q->count--; in ps2_read_data()
564 if (q->rptr == q->cwptr) { in ps2_read_data()
566 q->cwptr = -1; in ps2_read_data()
571 if (q->count) { in ps2_read_data()
581 s->ledstate = ledstate; in ps2_set_ledstate()
590 s->scan_enabled = 1; in ps2_reset_keyboard()
591 s->scancode_set = 2; in ps2_reset_keyboard()
602 switch (ps2->write_cmd) { in ps2_write_keyboard()
604 case -1: in ps2_write_keyboard()
615 s->translate ? 0x41 : 0x83); in ps2_write_keyboard()
621 s->scan_enabled = 1; in ps2_write_keyboard()
628 ps2->write_cmd = val; in ps2_write_keyboard()
633 s->scan_enabled = 0; in ps2_write_keyboard()
638 s->scan_enabled = 1; in ps2_write_keyboard()
657 ps2->write_cmd = -1; in ps2_write_keyboard()
661 ps2_cqueue_2(ps2, KBD_REPLY_ACK, s->translate ? in ps2_write_keyboard()
662 translate_table[s->scancode_set] : s->scancode_set); in ps2_write_keyboard()
664 s->scancode_set = val; in ps2_write_keyboard()
669 ps2->write_cmd = -1; in ps2_write_keyboard()
674 ps2->write_cmd = -1; in ps2_write_keyboard()
678 ps2->write_cmd = -1; in ps2_write_keyboard()
692 s->translate = mode; in ps2_keyboard_set_translation()
699 const int needed = s->mouse_type ? 4 : 3; in ps2_mouse_send_packet()
703 if (PS2_QUEUE_SIZE - ps2->queue.count < needed) { in ps2_mouse_send_packet()
707 dx1 = s->mouse_dx; in ps2_mouse_send_packet()
708 dy1 = s->mouse_dy; in ps2_mouse_send_packet()
709 dz1 = s->mouse_dz; in ps2_mouse_send_packet()
710 dw1 = s->mouse_dw; in ps2_mouse_send_packet()
714 } else if (dx1 < -127) { in ps2_mouse_send_packet()
715 dx1 = -127; in ps2_mouse_send_packet()
719 } else if (dy1 < -127) { in ps2_mouse_send_packet()
720 dy1 = -127; in ps2_mouse_send_packet()
722 b = 0x08 | ((dx1 < 0) << 4) | ((dy1 < 0) << 5) | (s->mouse_buttons & 0x07); in ps2_mouse_send_packet()
727 switch (s->mouse_type) { in ps2_mouse_send_packet()
730 s->mouse_dz = 0; in ps2_mouse_send_packet()
731 s->mouse_dw = 0; in ps2_mouse_send_packet()
736 } else if (dz1 < -127) { in ps2_mouse_send_packet()
737 dz1 = -127; in ps2_mouse_send_packet()
740 s->mouse_dz -= dz1; in ps2_mouse_send_packet()
741 s->mouse_dw = 0; in ps2_mouse_send_packet()
746 * drivers/input/mouse/psmouse-base.c. Note, if you happen to in ps2_mouse_send_packet()
755 } else if (dw1 < -31) { in ps2_mouse_send_packet()
756 dw1 = -31; in ps2_mouse_send_packet()
764 s->mouse_dw -= dw1; in ps2_mouse_send_packet()
768 } else if (dz1 < -7) { in ps2_mouse_send_packet()
769 dz1 = -7; in ps2_mouse_send_packet()
772 b = (dz1 & 0x0f) | ((s->mouse_buttons & 0x18) << 1); in ps2_mouse_send_packet()
773 s->mouse_dz -= dz1; in ps2_mouse_send_packet()
783 s->mouse_dx -= dx1; in ps2_mouse_send_packet()
784 s->mouse_dy -= dy1; in ps2_mouse_send_packet()
804 if (!(s->mouse_status & MOUSE_STATUS_ENABLED)) { in ps2_mouse_event()
808 switch (evt->type) { in ps2_mouse_event()
810 move = evt->u.rel.data; in ps2_mouse_event()
811 if (move->axis == INPUT_AXIS_X) { in ps2_mouse_event()
812 s->mouse_dx += move->value; in ps2_mouse_event()
813 } else if (move->axis == INPUT_AXIS_Y) { in ps2_mouse_event()
814 s->mouse_dy -= move->value; in ps2_mouse_event()
819 btn = evt->u.btn.data; in ps2_mouse_event()
820 if (btn->down) { in ps2_mouse_event()
821 s->mouse_buttons |= bmap[btn->button]; in ps2_mouse_event()
822 if (btn->button == INPUT_BUTTON_WHEEL_UP) { in ps2_mouse_event()
823 s->mouse_dz--; in ps2_mouse_event()
824 } else if (btn->button == INPUT_BUTTON_WHEEL_DOWN) { in ps2_mouse_event()
825 s->mouse_dz++; in ps2_mouse_event()
828 if (btn->button == INPUT_BUTTON_WHEEL_RIGHT) { in ps2_mouse_event()
829 s->mouse_dw--; in ps2_mouse_event()
830 } else if (btn->button == INPUT_BUTTON_WHEEL_LEFT) { in ps2_mouse_event()
831 s->mouse_dw++; in ps2_mouse_event()
834 s->mouse_buttons &= ~bmap[btn->button]; in ps2_mouse_event()
849 if (!(s->mouse_status & MOUSE_STATUS_ENABLED)) { in ps2_mouse_sync()
853 if (s->mouse_buttons) { in ps2_mouse_sync()
856 if (!(s->mouse_status & MOUSE_STATUS_REMOTE)) { in ps2_mouse_sync()
862 if (s->mouse_dx == 0 && s->mouse_dy == 0 in ps2_mouse_sync()
863 && s->mouse_dz == 0 && s->mouse_dw == 0) { in ps2_mouse_sync()
873 s->mouse_dx++; in ps2_mouse_fake_event()
882 switch (ps2->write_cmd) { in ps2_write_mouse()
884 case -1: in ps2_write_mouse()
886 if (s->mouse_wrap) { in ps2_write_mouse()
888 s->mouse_wrap = 0; in ps2_write_mouse()
898 s->mouse_status &= ~MOUSE_STATUS_SCALE21; in ps2_write_mouse()
902 s->mouse_status |= MOUSE_STATUS_SCALE21; in ps2_write_mouse()
906 s->mouse_status &= ~MOUSE_STATUS_REMOTE; in ps2_write_mouse()
910 s->mouse_wrap = 1; in ps2_write_mouse()
914 s->mouse_status |= MOUSE_STATUS_REMOTE; in ps2_write_mouse()
920 s->mouse_type); in ps2_write_mouse()
924 ps2->write_cmd = val; in ps2_write_mouse()
930 s->mouse_status, in ps2_write_mouse()
931 s->mouse_resolution, in ps2_write_mouse()
932 s->mouse_sample_rate); in ps2_write_mouse()
939 s->mouse_status |= MOUSE_STATUS_ENABLED; in ps2_write_mouse()
943 s->mouse_status &= ~MOUSE_STATUS_ENABLED; in ps2_write_mouse()
947 s->mouse_sample_rate = 100; in ps2_write_mouse()
948 s->mouse_resolution = 2; in ps2_write_mouse()
949 s->mouse_status = 0; in ps2_write_mouse()
953 s->mouse_sample_rate = 100; in ps2_write_mouse()
954 s->mouse_resolution = 2; in ps2_write_mouse()
955 s->mouse_status = 0; in ps2_write_mouse()
956 s->mouse_type = 0; in ps2_write_mouse()
961 s->mouse_type); in ps2_write_mouse()
968 s->mouse_sample_rate = val; in ps2_write_mouse()
970 switch (s->mouse_detect_state) { in ps2_write_mouse()
974 s->mouse_detect_state = 1; in ps2_write_mouse()
979 s->mouse_detect_state = 2; in ps2_write_mouse()
981 s->mouse_detect_state = 3; in ps2_write_mouse()
983 s->mouse_detect_state = 0; in ps2_write_mouse()
988 s->mouse_type = 3; /* IMPS/2 */ in ps2_write_mouse()
990 s->mouse_detect_state = 0; in ps2_write_mouse()
994 s->mouse_type = 4; /* IMEX */ in ps2_write_mouse()
996 s->mouse_detect_state = 0; in ps2_write_mouse()
1000 ps2->write_cmd = -1; in ps2_write_mouse()
1003 s->mouse_resolution = val; in ps2_write_mouse()
1005 ps2->write_cmd = -1; in ps2_write_mouse()
1014 s->write_cmd = -1; in ps2_reset_hold()
1027 PS2Queue *q = &s->queue; in ps2_common_post_load()
1031 if (q->cwptr != -1) { in ps2_common_post_load()
1032 ccount = (q->cwptr - q->rptr) & (PS2_BUFFER_SIZE - 1); in ps2_common_post_load()
1039 if (q->count < ccount) { in ps2_common_post_load()
1040 q->count = ccount; in ps2_common_post_load()
1041 } else if (q->count > ccount + PS2_QUEUE_SIZE) { in ps2_common_post_load()
1042 q->count = ccount + PS2_QUEUE_SIZE; in ps2_common_post_load()
1046 q->rptr = q->rptr & (PS2_BUFFER_SIZE - 1); in ps2_common_post_load()
1047 q->wptr = (q->rptr + q->count) & (PS2_BUFFER_SIZE - 1); in ps2_common_post_load()
1048 q->cwptr = ccount ? (q->rptr + ccount) & (PS2_BUFFER_SIZE - 1) : -1; in ps2_common_post_load()
1058 if (ps2dc->parent_phases.hold) { in ps2_kbd_reset_hold()
1059 ps2dc->parent_phases.hold(obj, type); in ps2_kbd_reset_hold()
1062 s->scan_enabled = 1; in ps2_kbd_reset_hold()
1063 s->translate = 0; in ps2_kbd_reset_hold()
1064 s->scancode_set = 2; in ps2_kbd_reset_hold()
1065 s->modifiers = 0; in ps2_kbd_reset_hold()
1075 if (ps2dc->parent_phases.hold) { in ps2_mouse_reset_hold()
1076 ps2dc->parent_phases.hold(obj, type); in ps2_mouse_reset_hold()
1079 s->mouse_status = 0; in ps2_mouse_reset_hold()
1080 s->mouse_resolution = 0; in ps2_mouse_reset_hold()
1081 s->mouse_sample_rate = 0; in ps2_mouse_reset_hold()
1082 s->mouse_wrap = 0; in ps2_mouse_reset_hold()
1083 s->mouse_type = 0; in ps2_mouse_reset_hold()
1084 s->mouse_detect_state = 0; in ps2_mouse_reset_hold()
1085 s->mouse_dx = 0; in ps2_mouse_reset_hold()
1086 s->mouse_dy = 0; in ps2_mouse_reset_hold()
1087 s->mouse_dz = 0; in ps2_mouse_reset_hold()
1088 s->mouse_dw = 0; in ps2_mouse_reset_hold()
1089 s->mouse_buttons = 0; in ps2_mouse_reset_hold()
1110 return s->ledstate != 0; /* 0 is default state */ in ps2_keyboard_ledstate_needed()
1117 kbd_put_ledstate(s->ledstate); in ps2_kbd_ledstate_post_load()
1136 return s->need_high_bit != 0; /* 0 is the usual state */ in ps2_keyboard_need_high_bit_needed()
1155 return ps2->queue.cwptr != -1; /* the queue is mostly empty */ in ps2_keyboard_cqueue_needed()
1173 s->scancode_set = 2; in ps2_kbd_post_load()
1263 dc->realize = ps2_kbd_realize; in ps2_kbd_class_init()
1265 &ps2dc->parent_phases); in ps2_kbd_class_init()
1266 dc->vmsd = &vmstate_ps2_keyboard; in ps2_kbd_class_init()
1282 dc->realize = ps2_mouse_realize; in ps2_mouse_class_init()
1284 &ps2dc->parent_phases); in ps2_mouse_class_init()
1285 dc->vmsd = &vmstate_ps2_mouse; in ps2_mouse_class_init()
1299 qdev_init_gpio_out(DEVICE(obj), &s->irq, 1); in ps2_init()
1307 rc->phases.hold = ps2_reset_hold; in ps2_class_init()
1308 rc->phases.exit = ps2_reset_exit; in ps2_class_init()
1309 set_bit(DEVICE_CATEGORY_INPUT, dc->categories); in ps2_class_init()