ps2: correctly handle 'get/set scancode' command
When getting scancode, current scancode must be preceded from reply ack. When setting scancode, we must reject invalid scancodes. Signed-off-by: Hervé Poussineau <hpoussin@reactos.org> Message-id: 1473969987-5890-3-git-send-email-hpoussin@reactos.org Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
06b3611fc2
commit
4df23b64c5
@ -296,16 +296,18 @@ void ps2_write_keyboard(void *opaque, int val)
|
||||
break;
|
||||
case KBD_CMD_SCANCODE:
|
||||
if (val == 0) {
|
||||
ps2_queue(&s->common, KBD_REPLY_ACK);
|
||||
if (s->scancode_set == 1)
|
||||
ps2_put_keycode(s, 0x43);
|
||||
else if (s->scancode_set == 2)
|
||||
ps2_put_keycode(s, 0x41);
|
||||
else if (s->scancode_set == 3)
|
||||
ps2_put_keycode(s, 0x3f);
|
||||
} else {
|
||||
if (val >= 1 && val <= 3)
|
||||
s->scancode_set = val;
|
||||
} else if (val >= 1 && val <= 3) {
|
||||
s->scancode_set = val;
|
||||
ps2_queue(&s->common, KBD_REPLY_ACK);
|
||||
} else {
|
||||
ps2_queue(&s->common, KBD_REPLY_RESEND);
|
||||
}
|
||||
s->common.write_cmd = -1;
|
||||
break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user