From: Peter Dinda Date: Thu, 18 Jun 2015 22:26:15 +0000 (-0500) Subject: VM reset from keyboard controller X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=commitdiff_plain;h=e3b069fbf758a7d689c75a1b24441c7eec63e230 VM reset from keyboard controller --- diff --git a/palacios/src/devices/keyboard.c b/palacios/src/devices/keyboard.c index 2751cc0..3609058 100644 --- a/palacios/src/devices/keyboard.c +++ b/palacios/src/devices/keyboard.c @@ -28,7 +28,6 @@ #include #include - #ifndef V3_CONFIG_DEBUG_KEYBOARD #undef PrintDebug #define PrintDebug(fmt, args...) @@ -813,7 +812,7 @@ static int keyboard_write_command(struct guest_info * core, ushort_t port, void case 0xf2: // instead of what is currently in output_byte (I think) case 0xf3: // main effect is taht if bit zero is zero case 0xf4: // should cause reset - case 0xf5: // I doubt anything more recent than a 286 running OS2 with the penalty box will care + case 0xf5: case 0xf6: case 0xf7: case 0xf8: @@ -822,9 +821,15 @@ static int keyboard_write_command(struct guest_info * core, ushort_t port, void case 0xfb: case 0xfc: case 0xfd: - case 0xfe: case 0xff: - PrintDebug(core->vm_info, core, "keyboard: ignoring command 0x%x on output port\n", cmd); + if (!(cmd & 0x1)) { + // general purpose reset + PrintDebug(core->vm_info, core, "keyboard: reseting VM\n"); + v3_reset_vm(core->vm_info); + + } else { + PrintDebug(core->vm_info, core, "keyboard: ignoring command 0x%x on output port\n", cmd); + } break; // case ac diagonstic - returns 16 bytes from keyboard microcontroler on 60h