suspend: make ps/2 devices wakeup the guest
This patch adds wakeup support to ps/2 emulation. Any key press on the ps/2 keyboard will wakeup the guest. Likewise any mouse button press will wakeup the guest. Mouse moves are ignored, so the guest will not wakeup in case your mouse crosses the vnc window of a suspended guest by accident. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
		
							parent
							
								
									9b9df25a47
								
							
						
					
					
						commit
						fd214d1828
					
				
							
								
								
									
										6
									
								
								hw/ps2.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								hw/ps2.c
									
									
									
									
									
								
							@ -24,6 +24,7 @@
 | 
				
			|||||||
#include "hw.h"
 | 
					#include "hw.h"
 | 
				
			||||||
#include "ps2.h"
 | 
					#include "ps2.h"
 | 
				
			||||||
#include "console.h"
 | 
					#include "console.h"
 | 
				
			||||||
 | 
					#include "sysemu.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* debug PC keyboard */
 | 
					/* debug PC keyboard */
 | 
				
			||||||
//#define DEBUG_KBD
 | 
					//#define DEBUG_KBD
 | 
				
			||||||
@ -154,6 +155,7 @@ static void ps2_put_keycode(void *opaque, int keycode)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    PS2KbdState *s = opaque;
 | 
					    PS2KbdState *s = opaque;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER);
 | 
				
			||||||
    /* XXX: add support for scancode set 1 */
 | 
					    /* XXX: add support for scancode set 1 */
 | 
				
			||||||
    if (!s->translate && keycode < 0xe0 && s->scancode_set > 1) {
 | 
					    if (!s->translate && keycode < 0xe0 && s->scancode_set > 1) {
 | 
				
			||||||
        if (keycode & 0x80) {
 | 
					        if (keycode & 0x80) {
 | 
				
			||||||
@ -368,6 +370,10 @@ static void ps2_mouse_event(void *opaque,
 | 
				
			|||||||
	return;
 | 
						return;
 | 
				
			||||||
    s->mouse_buttons = buttons_state;
 | 
					    s->mouse_buttons = buttons_state;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (buttons_state) {
 | 
				
			||||||
 | 
					        qemu_system_wakeup_request(QEMU_WAKEUP_REASON_OTHER);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!(s->mouse_status & MOUSE_STATUS_REMOTE) &&
 | 
					    if (!(s->mouse_status & MOUSE_STATUS_REMOTE) &&
 | 
				
			||||||
        (s->common.queue.count < (PS2_QUEUE_SIZE - 16))) {
 | 
					        (s->common.queue.count < (PS2_QUEUE_SIZE - 16))) {
 | 
				
			||||||
        for(;;) {
 | 
					        for(;;) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user