Commit 21839329f4a3c356429cf931b4d7ef573a2b8039
1 parent
f93de95a
Added set_gpio command
Showing
3 changed files
with
27 additions
and
1 deletions
hw/at91_pio.c
| ... | ... | @@ -86,7 +86,7 @@ typedef struct PIOState { |
| 86 | 86 | uint32_t unknown_state; |
| 87 | 87 | } PIOState; |
| 88 | 88 | |
| 89 | -static void at91_pio_set_pin(void *opaque, int pin, int level) | |
| 89 | +void at91_pio_set_pin(void *opaque, int pin, int level) | |
| 90 | 90 | { |
| 91 | 91 | PIOState *s = opaque; |
| 92 | 92 | int mask = 1 << (pin % PIO_PINS); |
| ... | ... | @@ -322,9 +322,12 @@ static void at91_pio_reset(void *opaque) |
| 322 | 322 | s->unknown_state = 0xffffffff; |
| 323 | 323 | } |
| 324 | 324 | |
| 325 | +void* at91_io_state = NULL; | |
| 326 | + | |
| 325 | 327 | static void at91_pio_init(SysBusDevice *dev) |
| 326 | 328 | { |
| 327 | 329 | PIOState *s = FROM_SYSBUS(typeof (*s), dev); |
| 330 | + at91_io_state = s; | |
| 328 | 331 | int pio_regs; |
| 329 | 332 | |
| 330 | 333 | sysbus_init_irq(dev, &s->parent_irq); | ... | ... |
monitor.c
| ... | ... | @@ -519,6 +519,20 @@ static void do_screen_dump(Monitor *mon, const char *filename) |
| 519 | 519 | vga_hw_screen_dump(filename); |
| 520 | 520 | } |
| 521 | 521 | |
| 522 | +static void do_set_gpio(Monitor* mon, const char* port, const char* value) | |
| 523 | +{ | |
| 524 | + extern void* at91_io_state; | |
| 525 | + extern void at91_pio_set_pin(void *opaque, int pin, int level); | |
| 526 | + if (at91_io_state) | |
| 527 | + { | |
| 528 | + printf("Setting gpio: %s %s\n", port, value); | |
| 529 | + at91_pio_set_pin(at91_io_state, atoi(port), atoi(value)); | |
| 530 | + } | |
| 531 | + else | |
| 532 | + printf("Cannot set pin: device pointer is NULL\n"); | |
| 533 | + | |
| 534 | +} | |
| 535 | + | |
| 522 | 536 | static void do_logfile(Monitor *mon, const char *filename) |
| 523 | 537 | { |
| 524 | 538 | cpu_set_log_filename(filename); | ... | ... |
qemu-monitor.hx
| ... | ... | @@ -646,6 +646,15 @@ Close the file descriptor previously assigned to @var{fdname} using the |
| 646 | 646 | used by another monitor command. |
| 647 | 647 | ETEXI |
| 648 | 648 | |
| 649 | + | |
| 650 | + { "set_gpio", "ss", do_set_gpio, "set_gpio pin value", | |
| 651 | + "set a value of a given gpio pio" }, | |
| 652 | +STEXI | |
| 653 | +@item set_gpio @var{pin} @var{value} | |
| 654 | +Set the value of the given gpio pin to a specific value | |
| 655 | +ETEXI | |
| 656 | + | |
| 657 | + | |
| 649 | 658 | STEXI |
| 650 | 659 | @end table |
| 651 | 660 | ETEXI | ... | ... |