Lines Matching refs:sysrq
803 struct sysrq_state *sysrq = in sysrq_reinject_alt_sysrq() local
805 struct input_handle *handle = &sysrq->handle; in sysrq_reinject_alt_sysrq()
806 unsigned int alt_code = sysrq->alt_use; in sysrq_reinject_alt_sysrq()
808 if (sysrq->need_reinject) { in sysrq_reinject_alt_sysrq()
810 sysrq->reinjecting = true; in sysrq_reinject_alt_sysrq()
823 sysrq->reinjecting = false; in sysrq_reinject_alt_sysrq()
827 static bool sysrq_handle_keypress(struct sysrq_state *sysrq, in sysrq_handle_keypress() argument
830 bool was_active = sysrq->active; in sysrq_handle_keypress()
839 if (sysrq->active && code == sysrq->alt_use) in sysrq_handle_keypress()
840 sysrq->active = false; in sysrq_handle_keypress()
842 sysrq->alt = KEY_RESERVED; in sysrq_handle_keypress()
845 sysrq->alt = code; in sysrq_handle_keypress()
846 sysrq->need_reinject = false; in sysrq_handle_keypress()
853 sysrq->shift = KEY_RESERVED; in sysrq_handle_keypress()
855 sysrq->shift = code; in sysrq_handle_keypress()
856 if (sysrq->active) in sysrq_handle_keypress()
857 sysrq->shift_use = sysrq->shift; in sysrq_handle_keypress()
861 if (value == 1 && sysrq->alt != KEY_RESERVED) { in sysrq_handle_keypress()
862 sysrq->active = true; in sysrq_handle_keypress()
863 sysrq->alt_use = sysrq->alt; in sysrq_handle_keypress()
865 sysrq->shift_use = sysrq->shift; in sysrq_handle_keypress()
870 sysrq->need_reinject = true; in sysrq_handle_keypress()
881 if (sysrq->active) in sysrq_handle_keypress()
882 clear_bit(KEY_SYSRQ, sysrq->handle.dev->key); in sysrq_handle_keypress()
887 if (sysrq->active && value && value != 2) { in sysrq_handle_keypress()
890 sysrq->need_reinject = false; in sysrq_handle_keypress()
891 if (sysrq->shift_use != KEY_RESERVED) in sysrq_handle_keypress()
898 suppress = sysrq->active; in sysrq_handle_keypress()
900 if (!sysrq->active) { in sysrq_handle_keypress()
905 if (sysrq->reset_seq_version != sysrq_reset_seq_version) in sysrq_handle_keypress()
906 sysrq_parse_reset_sequence(sysrq); in sysrq_handle_keypress()
914 set_bit(code, sysrq->key_down); in sysrq_handle_keypress()
916 clear_bit(code, sysrq->key_down); in sysrq_handle_keypress()
919 schedule_work(&sysrq->reinject_work); in sysrq_handle_keypress()
922 sysrq_detect_reset_sequence(sysrq, code, value); in sysrq_handle_keypress()
924 } else if (value == 0 && test_and_clear_bit(code, sysrq->key_down)) { in sysrq_handle_keypress()
938 struct sysrq_state *sysrq = handle->private; in sysrq_filter() local
945 if (sysrq->reinjecting) in sysrq_filter()
955 suppress = sysrq_handle_keypress(sysrq, code, value); in sysrq_filter()
959 suppress = sysrq->active; in sysrq_filter()
970 struct sysrq_state *sysrq; in sysrq_connect() local
973 sysrq = kzalloc(sizeof(struct sysrq_state), GFP_KERNEL); in sysrq_connect()
974 if (!sysrq) in sysrq_connect()
977 INIT_WORK(&sysrq->reinject_work, sysrq_reinject_alt_sysrq); in sysrq_connect()
979 sysrq->handle.dev = dev; in sysrq_connect()
980 sysrq->handle.handler = handler; in sysrq_connect()
981 sysrq->handle.name = "sysrq"; in sysrq_connect()
982 sysrq->handle.private = sysrq; in sysrq_connect()
983 timer_setup(&sysrq->keyreset_timer, sysrq_do_reset, 0); in sysrq_connect()
985 error = input_register_handle(&sysrq->handle); in sysrq_connect()
992 error = input_open_device(&sysrq->handle); in sysrq_connect()
1001 input_unregister_handle(&sysrq->handle); in sysrq_connect()
1003 kfree(sysrq); in sysrq_connect()
1009 struct sysrq_state *sysrq = handle->private; in sysrq_disconnect() local
1012 cancel_work_sync(&sysrq->reinject_work); in sysrq_disconnect()
1013 timer_shutdown_sync(&sysrq->keyreset_timer); in sysrq_disconnect()
1015 kfree(sysrq); in sysrq_disconnect()