Index: qemu-0.9.1/block-vmdk.c =================================================================== --- qemu-0.9.1.orig/block-vmdk.c +++ qemu-0.9.1/block-vmdk.c @@ -717,7 +717,7 @@ static int vmdk_create(const char *filen "ddb.geometry.cylinders = \"%lu\"\n" "ddb.geometry.heads = \"16\"\n" "ddb.geometry.sectors = \"63\"\n" - "ddb.adapterType = \"ide\"\n"; + "ddb.adapterType = \"%s\"\n"; char desc[1024]; const char *real_filename, *temp_str; @@ -790,7 +790,9 @@ static int vmdk_create(const char *filen if ((temp_str = strrchr(real_filename, ':')) != NULL) real_filename = temp_str + 1; sprintf(desc, desc_template, time(NULL), (unsigned long)total_size, - real_filename, (flags & BLOCK_FLAG_COMPAT6 ? 6 : 4), total_size / (63 * 16)); + real_filename, (flags & BLOCK_FLAG_COMPAT6 ? 6 : 4), + total_size / (63 * 16), + flags & BLOCK_FLAG_SCSI ? "lsilogic" : "ide"); /* write the descriptor */ lseek(fd, le64_to_cpu(header.desc_offset) << 9, SEEK_SET); Index: qemu-0.9.1/block_int.h =================================================================== --- qemu-0.9.1.orig/block_int.h +++ qemu-0.9.1/block_int.h @@ -29,6 +29,7 @@ #define BLOCK_FLAG_ENCRYPT 1 #define BLOCK_FLAG_COMPRESS 2 #define BLOCK_FLAG_COMPAT6 4 +#define BLOCK_FLAG_SCSI 8 struct BlockDriver { const char *format_name; Index: qemu-0.9.1/qemu-img.c =================================================================== --- qemu-0.9.1.orig/qemu-img.c +++ qemu-0.9.1/qemu-img.c @@ -88,9 +88,9 @@ static void help(void) "QEMU disk image utility\n" "\n" "Command syntax:\n" - " create [-e] [-6] [-b base_image] [-f fmt] filename [size]\n" + " create [-e] [-s] [-6] [-b base_image] [-f fmt] filename [size]\n" " commit [-f fmt] filename\n" - " convert [-c] [-e] [-6] [-f fmt] filename [filename2 [...]] [-O output_fmt] output_filename\n" + " convert [-c] [-e] [-s] [-6] [-f fmt] [-O output_fmt] filename [filename2 [...]] output_filename\n" " info [-f fmt] filename\n" "\n" "Command parameters:\n" @@ -104,6 +104,7 @@ static void help(void) " 'output_fmt' is the destination format\n" " '-c' indicates that target image must be compressed (qcow format only)\n" " '-e' indicates that the target image must be encrypted (qcow format only)\n" + " '-s' indicates that the target image is meant for SCSI (vmdk format only)\n" " '-6' indicates that the target image must use compatibility level 6 (vmdk format only)\n" ); printf("\nSupported format:"); @@ -242,7 +243,7 @@ static int img_create(int argc, char **a flags = 0; for(;;) { - c = getopt(argc, argv, "b:f:he6"); + c = getopt(argc, argv, "b:f:hes6"); if (c == -1) break; switch(c) { @@ -258,6 +259,9 @@ static int img_create(int argc, char **a case 'e': flags |= BLOCK_FLAG_ENCRYPT; break; + case 's': + flags |= BLOCK_FLAG_SCSI; + break; case '6': flags |= BLOCK_FLAG_COMPAT6; break; @@ -293,6 +297,8 @@ static int img_create(int argc, char **a error("Unknown file format '%s'", fmt); printf("Formatting '%s', fmt=%s", filename, fmt); + if (flags & BLOCK_FLAG_SCSI) + printf(", SCSI"); if (flags & BLOCK_FLAG_ENCRYPT) printf(", encrypted"); if (flags & BLOCK_FLAG_COMPAT6) @@ -421,7 +427,7 @@ static int img_convert(int argc, char ** out_fmt = "raw"; flags = 0; for(;;) { - c = getopt(argc, argv, "f:O:hce6"); + c = getopt(argc, argv, "f:O:hces6"); if (c == -1) break; switch(c) { @@ -440,6 +446,9 @@ static int img_convert(int argc, char ** case 'e': flags |= BLOCK_FLAG_ENCRYPT; break; + case 's': + flags |= BLOCK_FLAG_SCSI; + break; case '6': flags |= BLOCK_FLAG_COMPAT6; break; @@ -471,6 +480,8 @@ static int img_convert(int argc, char ** error("Compression not supported for this file format"); if (flags & BLOCK_FLAG_ENCRYPT && drv != &bdrv_qcow && drv != &bdrv_qcow2) error("Encryption not supported for this file format"); + if (flags & BLOCK_FLAG_SCSI && drv != &bdrv_vmdk) + error("SCSI devices not supported for this file format"); if (flags & BLOCK_FLAG_COMPAT6 && drv != &bdrv_vmdk) error("Alternative compatibility level not supported for this file format"); if (flags & BLOCK_FLAG_ENCRYPT && flags & BLOCK_FLAG_COMPRESS)