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 217  
218 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 223 switch(addr) {
221 224 /* Bochs BIOS messages */
222 225 case 0x400:
... ... @@ -229,6 +232,18 @@ void bochs_bios_write(void *opaque, uint32_t addr, uint32_t val)
229 232 fprintf(stderr, "%c", val);
230 233 #endif
231 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 248 /* LGPL'ed VGA BIOS messages */
234 249 case 0x501:
... ... @@ -250,6 +265,7 @@ void bochs_bios_init(void)
250 265 register_ioport_write(0x401, 1, 2, bochs_bios_write, NULL);
251 266 register_ioport_write(0x402, 1, 1, bochs_bios_write, NULL);
252 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 270 register_ioport_write(0x501, 1, 2, bochs_bios_write, NULL);
255 271 register_ioport_write(0x502, 1, 2, bochs_bios_write, NULL);
... ...