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…
	
		Reference in New Issue