Commit a2f659ee48edc5de6f7ca1064a4f2af6227323a6

Authored by bellard
1 parent d7d02e3c

new reset API - shutdown support


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@939 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 16 additions and 0 deletions
@@ -217,6 +217,9 @@ static uint32_t ioport92_read(void *opaque, uint32_t addr) @@ -217,6 +217,9 @@ static uint32_t ioport92_read(void *opaque, uint32_t addr)
217 217
218 void bochs_bios_write(void *opaque, uint32_t addr, uint32_t val) 218 void bochs_bios_write(void *opaque, uint32_t addr, uint32_t val)
219 { 219 {
  220 + static const char shutdown_str[8] = "Shutdown";
  221 + static int shutdown_index = 0;
  222 +
220 switch(addr) { 223 switch(addr) {
221 /* Bochs BIOS messages */ 224 /* Bochs BIOS messages */
222 case 0x400: 225 case 0x400:
@@ -229,6 +232,18 @@ void bochs_bios_write(void *opaque, uint32_t addr, uint32_t val) @@ -229,6 +232,18 @@ void bochs_bios_write(void *opaque, uint32_t addr, uint32_t val)
229 fprintf(stderr, "%c", val); 232 fprintf(stderr, "%c", val);
230 #endif 233 #endif
231 break; 234 break;
  235 + case 0x8900:
  236 + /* same as Bochs power off */
  237 + if (val == shutdown_str[shutdown_index]) {
  238 + shutdown_index++;
  239 + if (shutdown_index == 8) {
  240 + shutdown_index = 0;
  241 + qemu_system_shutdown_request();
  242 + }
  243 + } else {
  244 + shutdown_index = 0;
  245 + }
  246 + break;
232 247
233 /* LGPL'ed VGA BIOS messages */ 248 /* LGPL'ed VGA BIOS messages */
234 case 0x501: 249 case 0x501:
@@ -250,6 +265,7 @@ void bochs_bios_init(void) @@ -250,6 +265,7 @@ void bochs_bios_init(void)
250 register_ioport_write(0x401, 1, 2, bochs_bios_write, NULL); 265 register_ioport_write(0x401, 1, 2, bochs_bios_write, NULL);
251 register_ioport_write(0x402, 1, 1, bochs_bios_write, NULL); 266 register_ioport_write(0x402, 1, 1, bochs_bios_write, NULL);
252 register_ioport_write(0x403, 1, 1, bochs_bios_write, NULL); 267 register_ioport_write(0x403, 1, 1, bochs_bios_write, NULL);
  268 + register_ioport_write(0x8900, 1, 1, bochs_bios_write, NULL);
253 269
254 register_ioport_write(0x501, 1, 2, bochs_bios_write, NULL); 270 register_ioport_write(0x501, 1, 2, bochs_bios_write, NULL);
255 register_ioport_write(0x502, 1, 2, bochs_bios_write, NULL); 271 register_ioport_write(0x502, 1, 2, bochs_bios_write, NULL);