Commit 3440557b6d979e0dddddb8c2440d7bf4375e80a7
1 parent
d329a6fb
ioport read command
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@912 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
51 additions
and
5 deletions
monitor.c
| @@ -630,6 +630,35 @@ static void do_send_key(const char *string) | @@ -630,6 +630,35 @@ static void do_send_key(const char *string) | ||
| 630 | } | 630 | } |
| 631 | } | 631 | } |
| 632 | 632 | ||
| 633 | +static void do_ioport_read(int count, int format, int size, int addr, int has_index, int index) | ||
| 634 | +{ | ||
| 635 | + uint32_t val; | ||
| 636 | + int suffix; | ||
| 637 | + | ||
| 638 | + if (has_index) { | ||
| 639 | + cpu_outb(NULL, addr & 0xffff, index & 0xff); | ||
| 640 | + addr++; | ||
| 641 | + } | ||
| 642 | + addr &= 0xffff; | ||
| 643 | + | ||
| 644 | + switch(size) { | ||
| 645 | + default: | ||
| 646 | + case 1: | ||
| 647 | + val = cpu_inb(NULL, addr); | ||
| 648 | + suffix = 'b'; | ||
| 649 | + break; | ||
| 650 | + case 2: | ||
| 651 | + val = cpu_inw(NULL, addr); | ||
| 652 | + suffix = 'w'; | ||
| 653 | + break; | ||
| 654 | + case 4: | ||
| 655 | + val = cpu_inl(NULL, addr); | ||
| 656 | + suffix = 'l'; | ||
| 657 | + break; | ||
| 658 | + } | ||
| 659 | + term_printf("port%c[0x%04x] = %#0*x\n", | ||
| 660 | + suffix, addr, size * 2, val); | ||
| 661 | +} | ||
| 633 | 662 | ||
| 634 | static term_cmd_t term_cmds[] = { | 663 | static term_cmd_t term_cmds[] = { |
| 635 | { "help|?", "s?", do_help, | 664 | { "help|?", "s?", do_help, |
| @@ -666,6 +695,9 @@ static term_cmd_t term_cmds[] = { | @@ -666,6 +695,9 @@ static term_cmd_t term_cmds[] = { | ||
| 666 | "/fmt addr", "physical memory dump starting at 'addr'", }, | 695 | "/fmt addr", "physical memory dump starting at 'addr'", }, |
| 667 | { "p|print", "/i", do_print, | 696 | { "p|print", "/i", do_print, |
| 668 | "/fmt expr", "print expression value (use $reg for CPU register access)", }, | 697 | "/fmt expr", "print expression value (use $reg for CPU register access)", }, |
| 698 | + { "i", "/ii.", do_ioport_read, | ||
| 699 | + "/fmt addr", "I/O port read" }, | ||
| 700 | + | ||
| 669 | { "sendkey", "s", do_send_key, | 701 | { "sendkey", "s", do_send_key, |
| 670 | "keys", "send keys to the VM (e.g. 'sendkey ctrl-alt-f1')" }, | 702 | "keys", "send keys to the VM (e.g. 'sendkey ctrl-alt-f1')" }, |
| 671 | { NULL, NULL, }, | 703 | { NULL, NULL, }, |
| @@ -1285,12 +1317,23 @@ static void term_handle_command(const char *cmdline) | @@ -1285,12 +1317,23 @@ static void term_handle_command(const char *cmdline) | ||
| 1285 | int val; | 1317 | int val; |
| 1286 | while (isspace(*p)) | 1318 | while (isspace(*p)) |
| 1287 | p++; | 1319 | p++; |
| 1288 | - if (*typestr == '?') { | 1320 | + if (*typestr == '?' || *typestr == '.') { |
| 1289 | typestr++; | 1321 | typestr++; |
| 1290 | - if (*p == '\0') | ||
| 1291 | - has_arg = 0; | ||
| 1292 | - else | ||
| 1293 | - has_arg = 1; | 1322 | + if (*typestr == '?') { |
| 1323 | + if (*p == '\0') | ||
| 1324 | + has_arg = 0; | ||
| 1325 | + else | ||
| 1326 | + has_arg = 1; | ||
| 1327 | + } else { | ||
| 1328 | + if (*p == '.') { | ||
| 1329 | + p++; | ||
| 1330 | + while (isspace(*p)) | ||
| 1331 | + p++; | ||
| 1332 | + has_arg = 1; | ||
| 1333 | + } else { | ||
| 1334 | + has_arg = 0; | ||
| 1335 | + } | ||
| 1336 | + } | ||
| 1294 | if (nb_args >= MAX_ARGS) | 1337 | if (nb_args >= MAX_ARGS) |
| 1295 | goto error_args; | 1338 | goto error_args; |
| 1296 | args[nb_args++] = (void *)has_arg; | 1339 | args[nb_args++] = (void *)has_arg; |
| @@ -1369,6 +1412,9 @@ static void term_handle_command(const char *cmdline) | @@ -1369,6 +1412,9 @@ static void term_handle_command(const char *cmdline) | ||
| 1369 | case 5: | 1412 | case 5: |
| 1370 | cmd->handler(args[0], args[1], args[2], args[3], args[4]); | 1413 | cmd->handler(args[0], args[1], args[2], args[3], args[4]); |
| 1371 | break; | 1414 | break; |
| 1415 | + case 6: | ||
| 1416 | + cmd->handler(args[0], args[1], args[2], args[3], args[4], args[5]); | ||
| 1417 | + break; | ||
| 1372 | default: | 1418 | default: |
| 1373 | term_printf("unsupported number of arguments: %d\n", nb_args); | 1419 | term_printf("unsupported number of arguments: %d\n", nb_args); |
| 1374 | goto fail; | 1420 | goto fail; |