diff options
author | aliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162> | 2009-01-07 17:32:33 +0000 |
---|---|---|
committer | aliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162> | 2009-01-07 17:32:33 +0000 |
commit | fa879c641435bec4b79872ad14b9a90c8b7172f3 (patch) | |
tree | d8ade34df31c450b8d597a396f29269a749deb45 /vl.c | |
parent | ff4b91c2f7e51dab148aba4bf43c2f39f219e495 (diff) |
add "serial" parameter to -drive flag (Gleb Natapov)
Windows calculates HW "uniqueness" based on a hard drive serial number
among other things. The patch allows to specify drive serial number
from a command line.
Signed-off-by: Gleb Natapov <gleb@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6214 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'vl.c')
-rw-r--r-- | vl.c | 20 |
1 files changed, 18 insertions, 2 deletions
@@ -2196,6 +2196,17 @@ int drive_get_max_bus(BlockInterfaceType type) return max_bus; } +const char *drive_get_serial(BlockDriverState *bdrv) +{ + int index; + + for (index = 0; index < nb_drives; index++) + if (drives_table[index].bdrv == bdrv) + return drives_table[index].serial; + + return "\0"; +} + static void bdrv_format_print(void *opaque, const char *name) { fprintf(stderr, " %s", name); @@ -2207,6 +2218,7 @@ static int drive_init(struct drive_opt *arg, int snapshot, char buf[128]; char file[1024]; char devname[128]; + char serial[21]; const char *mediastr = ""; BlockInterfaceType type; enum { MEDIA_DISK, MEDIA_CDROM } media; @@ -2222,7 +2234,7 @@ static int drive_init(struct drive_opt *arg, int snapshot, static const char * const params[] = { "bus", "unit", "if", "index", "cyls", "heads", "secs", "trans", "media", "snapshot", "file", - "cache", "format", NULL }; + "cache", "format", "serial", NULL }; if (check_params(buf, sizeof(buf), params, str) < 0) { fprintf(stderr, "qemu: unknown parameter '%s' in '%s'\n", @@ -2409,6 +2421,9 @@ static int drive_init(struct drive_opt *arg, int snapshot, else pstrcpy(file, sizeof(file), arg->file); + if (!get_param_value(serial, sizeof(serial), "serial", str)) + memset(serial, 0, sizeof(serial)); + /* compute bus and unit according index */ if (index != -1) { @@ -2472,6 +2487,7 @@ static int drive_init(struct drive_opt *arg, int snapshot, drives_table[nb_drives].type = type; drives_table[nb_drives].bus = bus_id; drives_table[nb_drives].unit = unit_id; + strncpy(drives_table[nb_drives].serial, serial, sizeof(serial)); nb_drives++; switch(type) { @@ -3826,7 +3842,7 @@ static void help(int exitcode) "-cdrom file use 'file' as IDE cdrom image (cdrom is ide1 master)\n" "-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]\n" " [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]\n" - " [,cache=writethrough|writeback|none][,format=f]\n" + " [,cache=writethrough|writeback|none][,format=f][,serial=s]\n" " use 'file' as a drive image\n" "-mtdblock file use 'file' as on-board Flash memory image\n" "-sd file use 'file' as SecureDigital card image\n" |