Commit f114784f69ec3b9af342148025de14dbd1b429a5
Committed by
Anthony Liguori
1 parent
ef74679a
monitor: Add port write command
Useful for testing hardware emulations or manipulating its state to stress guest drivers. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Showing
2 changed files
with
24 additions
and
0 deletions
monitor.c
@@ -1185,6 +1185,25 @@ static void do_ioport_read(Monitor *mon, int count, int format, int size, | @@ -1185,6 +1185,25 @@ static void do_ioport_read(Monitor *mon, int count, int format, int size, | ||
1185 | suffix, addr, size * 2, val); | 1185 | suffix, addr, size * 2, val); |
1186 | } | 1186 | } |
1187 | 1187 | ||
1188 | +static void do_ioport_write(Monitor *mon, int count, int format, int size, | ||
1189 | + int addr, int val) | ||
1190 | +{ | ||
1191 | + addr &= IOPORTS_MASK; | ||
1192 | + | ||
1193 | + switch (size) { | ||
1194 | + default: | ||
1195 | + case 1: | ||
1196 | + cpu_outb(NULL, addr, val); | ||
1197 | + break; | ||
1198 | + case 2: | ||
1199 | + cpu_outw(NULL, addr, val); | ||
1200 | + break; | ||
1201 | + case 4: | ||
1202 | + cpu_outl(NULL, addr, val); | ||
1203 | + break; | ||
1204 | + } | ||
1205 | +} | ||
1206 | + | ||
1188 | static void do_boot_set(Monitor *mon, const char *bootdevice) | 1207 | static void do_boot_set(Monitor *mon, const char *bootdevice) |
1189 | { | 1208 | { |
1190 | int res; | 1209 | int res; |
qemu-monitor.hx
@@ -306,6 +306,11 @@ STEXI | @@ -306,6 +306,11 @@ STEXI | ||
306 | Read I/O port. | 306 | Read I/O port. |
307 | ETEXI | 307 | ETEXI |
308 | 308 | ||
309 | + { "o", "/ii", do_ioport_write, | ||
310 | + "/fmt addr value", "I/O port write" }, | ||
311 | +STEXI | ||
312 | +Write to I/O port. | ||
313 | +ETEXI | ||
309 | 314 | ||
310 | { "sendkey", "si?", do_sendkey, | 315 | { "sendkey", "si?", do_sendkey, |
311 | "keys [hold_ms]", "send keys to the VM (e.g. 'sendkey ctrl-alt-f1', default hold time=100 ms)" }, | 316 | "keys [hold_ms]", "send keys to the VM (e.g. 'sendkey ctrl-alt-f1', default hold time=100 ms)" }, |