|
Line
Link Here
|
| 0 |
-- qemu-0.9.0/monitor.c |
0 |
++ qemu-0.9.0/monitor.c |
|
Lines 362-370
static void do_eject(int force, const char *filename)
Link Here
|
| 362 |
eject_device(bs, force); |
362 |
eject_device(bs, force); |
| 363 |
} |
363 |
} |
| 364 |
|
364 |
|
| 365 |
static void do_change(const char *device, const char *filename) |
365 |
static void do_change(const char *device, const char *filename, const char *fmt) |
| 366 |
{ |
366 |
{ |
| 367 |
BlockDriverState *bs; |
367 |
BlockDriverState *bs; |
|
|
368 |
BlockDriver *drv = NULL; |
| 368 |
int i; |
369 |
int i; |
| 369 |
char password[256]; |
370 |
char password[256]; |
| 370 |
|
371 |
|
|
Lines 373-381
static void do_change(const char *device, const char *filename)
Link Here
|
| 373 |
term_printf("device not found\n"); |
374 |
term_printf("device not found\n"); |
| 374 |
return; |
375 |
return; |
| 375 |
} |
376 |
} |
|
|
377 |
if (fmt) { |
| 378 |
drv = bdrv_find_format(fmt); |
| 379 |
if (!drv) { |
| 380 |
term_printf("invalid format %s\n", fmt); |
| 381 |
return; |
| 382 |
} |
| 383 |
} |
| 376 |
if (eject_device(bs, 0) < 0) |
384 |
if (eject_device(bs, 0) < 0) |
| 377 |
return; |
385 |
return; |
| 378 |
bdrv_open(bs, filename, 0); |
386 |
bdrv_open2(bs, filename, 0, drv); |
| 379 |
if (bdrv_is_encrypted(bs)) { |
387 |
if (bdrv_is_encrypted(bs)) { |
| 380 |
term_printf("%s is encrypted.\n", device); |
388 |
term_printf("%s is encrypted.\n", device); |
| 381 |
for(i = 0; i < 3; i++) { |
389 |
for(i = 0; i < 3; i++) { |
|
Lines 1195-1202
static term_cmd_t term_cmds[] = {
Link Here
|
| 1195 |
"", "quit the emulator" }, |
1203 |
"", "quit the emulator" }, |
| 1196 |
{ "eject", "-fB", do_eject, |
1204 |
{ "eject", "-fB", do_eject, |
| 1197 |
"[-f] device", "eject a removable media (use -f to force it)" }, |
1205 |
"[-f] device", "eject a removable media (use -f to force it)" }, |
| 1198 |
{ "change", "BF", do_change, |
1206 |
{ "change", "BFs?", do_change, |
| 1199 |
"device filename", "change a removable media" }, |
1207 |
"device filename [format]", "change a removable media, optional format" }, |
| 1200 |
{ "screendump", "F", do_screen_dump, |
1208 |
{ "screendump", "F", do_screen_dump, |
| 1201 |
"filename", "save screen into PPM image 'filename'" }, |
1209 |
"filename", "save screen into PPM image 'filename'" }, |
| 1202 |
{ "log", "s", do_log, |
1210 |
{ "log", "s", do_log, |
| 1203 |
-- qemu-0.9.0/hw/usb-msd.c |
1211 |
++ qemu-0.9.0/hw/usb-msd.c |
|
Lines 510-526
static void usb_msd_handle_destroy(USBDevice *dev)
Link Here
|
| 510 |
qemu_free(s); |
510 |
qemu_free(s); |
| 511 |
} |
511 |
} |
| 512 |
|
512 |
|
| 513 |
USBDevice *usb_msd_init(const char *filename) |
513 |
USBDevice *usb_msd_init(const char *filename, const char *fmt) |
| 514 |
{ |
514 |
{ |
| 515 |
MSDState *s; |
515 |
MSDState *s; |
| 516 |
BlockDriverState *bdrv; |
516 |
BlockDriverState *bdrv; |
|
|
517 |
BlockDriver *drv = NULL; |
| 517 |
|
518 |
|
|
|
519 |
if (fmt) { |
| 520 |
drv = bdrv_find_format(fmt); |
| 521 |
if (!drv) { |
| 522 |
fprintf(stderr, "%s: '%s' invalid format\n", __func__, fmt); |
| 523 |
return NULL; |
| 524 |
} |
| 525 |
} |
| 518 |
s = qemu_mallocz(sizeof(MSDState)); |
526 |
s = qemu_mallocz(sizeof(MSDState)); |
| 519 |
if (!s) |
527 |
if (!s) |
| 520 |
return NULL; |
528 |
return NULL; |
| 521 |
|
529 |
|
| 522 |
bdrv = bdrv_new("usb"); |
530 |
bdrv = bdrv_new("usb"); |
| 523 |
if (bdrv_open(bdrv, filename, 0) < 0) |
531 |
if (bdrv_open2(bdrv, filename, 0, drv) < 0) |
| 524 |
goto fail; |
532 |
goto fail; |
| 525 |
s->bs = bdrv; |
533 |
s->bs = bdrv; |
| 526 |
|
534 |
|
| 527 |
-- qemu-0.9.0/hw/usb.h |
535 |
++ qemu-0.9.0/hw/usb.h |
|
Lines 217-220
USBDevice *usb_mouse_init(void);
Link Here
|
| 217 |
USBDevice *usb_tablet_init(void); |
217 |
USBDevice *usb_tablet_init(void); |
| 218 |
|
218 |
|
| 219 |
/* usb-msd.c */ |
219 |
/* usb-msd.c */ |
| 220 |
USBDevice *usb_msd_init(const char *filename); |
220 |
USBDevice *usb_msd_init(const char *filename, const char *fmt); |
| 221 |
-- qemu-0.9.0/qemu-doc.texi |
221 |
++ qemu-0.9.0/qemu-doc.texi |
|
Lines 1306-1311
This means qemu is able to report the mouse position without having
Link Here
|
| 1306 |
to grab the mouse. Also overrides the PS/2 mouse emulation when activated. |
1306 |
to grab the mouse. Also overrides the PS/2 mouse emulation when activated. |
| 1307 |
@item @code{disk:file} |
1307 |
@item @code{disk:file} |
| 1308 |
Mass storage device based on @var{file} (@pxref{disk_images}) |
1308 |
Mass storage device based on @var{file} (@pxref{disk_images}) |
|
|
1309 |
@item diskformat:file,format=@var{format} |
| 1310 |
Mass storage device based on file with specified image @var{format}. |
| 1311 |
See -format for more information. |
| 1309 |
@item @code{host:bus.addr} |
1312 |
@item @code{host:bus.addr} |
| 1310 |
Pass through the host device identified by @var{bus.addr} |
1313 |
Pass through the host device identified by @var{bus.addr} |
| 1311 |
(Linux only) |
1314 |
(Linux only) |
| 1312 |
-- qemu-0.9.0/vl.c |
1315 |
++ qemu-0.9.0/vl.c |
|
Lines 3951-3956
void qemu_register_usb_port(USBPort *port, void *opaque, int index,
Link Here
|
| 3951 |
free_usb_ports = port; |
3951 |
free_usb_ports = port; |
| 3952 |
} |
3952 |
} |
| 3953 |
|
3953 |
|
|
|
3954 |
static const char *get_opt_value(char *buf, int buf_size, const char *p) |
| 3955 |
{ |
| 3956 |
char *q; |
| 3957 |
|
| 3958 |
q = buf; |
| 3959 |
while (*p != '\0') { |
| 3960 |
if (*p == ',') { |
| 3961 |
if (*(p + 1) != ',') |
| 3962 |
break; |
| 3963 |
p++; |
| 3964 |
} |
| 3965 |
if (q && (q - buf) < buf_size - 1) |
| 3966 |
*q++ = *p; |
| 3967 |
p++; |
| 3968 |
} |
| 3969 |
if (q) |
| 3970 |
*q = '\0'; |
| 3971 |
|
| 3972 |
return p; |
| 3973 |
} |
| 3974 |
|
| 3954 |
static int usb_device_add(const char *devname) |
3975 |
static int usb_device_add(const char *devname) |
| 3955 |
{ |
3976 |
{ |
| 3956 |
const char *p; |
3977 |
const char *p; |
|
Lines 3967-3973
static int usb_device_add(const char *devname)
Link Here
|
| 3967 |
} else if (!strcmp(devname, "tablet")) { |
3967 |
} else if (!strcmp(devname, "tablet")) { |
| 3968 |
dev = usb_tablet_init(); |
3968 |
dev = usb_tablet_init(); |
| 3969 |
} else if (strstart(devname, "disk:", &p)) { |
3969 |
} else if (strstart(devname, "disk:", &p)) { |
| 3970 |
dev = usb_msd_init(p); |
3970 |
dev = usb_msd_init(p, NULL); |
|
|
3971 |
} else if (strstart(devname, "diskformat:", &p)) { |
| 3972 |
char file[1024]; |
| 3973 |
char buf[128]; |
| 3974 |
char *fmt = NULL; |
| 3975 |
p = get_opt_value(file, sizeof(file), p); |
| 3976 |
if (*p == ',') { |
| 3977 |
p++; |
| 3978 |
if (get_param_value(buf, sizeof(buf), "format", p)) |
| 3979 |
fmt = buf; |
| 3980 |
} |
| 3981 |
dev = usb_msd_init(file, fmt); |
| 3971 |
} else { |
3982 |
} else { |
| 3972 |
return -1; |
3983 |
return -1; |
| 3973 |
} |
3984 |
} |