[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 2/5] Vendor name and product name parameters for
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH 2/5] Vendor name and product name parameters for SCSI devices Options "vendor_name" and "product_name" added for SCSI disks. |
Date: |
Thu, 15 Mar 2012 10:55:01 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:10.0.1) Gecko/20120216 Thunderbird/10.0.1 |
Il 15/03/2012 10:02, Dmitry Fleytman ha scritto:
> Sample command line is:
>
> -drive file=image.raw,if=none,cache=off,id=scsi1 \
> -device lsi,id=scsi -device
> scsi-disk,drive=scsi1,bus=scsi.0,product_name="VENDOR SCSI
> DISK",vendor_name="[VENDOR]" \
>
> Signed-off-by: Dmitry Fleytman <address@hidden>
> Signed-off-by: Yan Vugenfirer <address@hidden>
> ---
> blockdev.h | 6 +++++-
> hw/scsi-disk.c | 51 ++++++++++++++++++++++++++++++++++++---------------
> 2 files changed, 41 insertions(+), 16 deletions(-)
>
> diff --git a/blockdev.h b/blockdev.h
> index 260e16b..1813c53 100644
> --- a/blockdev.h
> +++ b/blockdev.h
> @@ -17,7 +17,9 @@
> void blockdev_mark_auto_del(BlockDriverState *bs);
> void blockdev_auto_del(BlockDriverState *bs);
>
> -#define BLOCK_SERIAL_STRLEN 20
> +#define BLOCK_SERIAL_STRLEN 20
> +#define BLOCK_VENDOR_STRLEN 8
> +#define BLOCK_PRODUCT_STRLEN 16
>
> typedef enum {
> IF_DEFAULT = -1, /* for use with drive_add() only */
> @@ -37,6 +39,8 @@ struct DriveInfo {
> int media_cd;
> QemuOpts *opts;
> char serial[BLOCK_SERIAL_STRLEN + 1];
> + char vname[BLOCK_VENDOR_STRLEN + 1];
> + char pname[BLOCK_PRODUCT_STRLEN + 1];
> QTAILQ_ENTRY(DriveInfo) next;
> int refcount;
> };
Unused.
> diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
> index add399e..0a12ea2 100644
> --- a/hw/scsi-disk.c
> +++ b/hw/scsi-disk.c
> @@ -70,6 +70,8 @@ struct SCSIDiskState
> QEMUBH *bh;
> char *version;
> char *serial;
> + char *vname;
> + char *pname;
> bool tray_open;
> bool tray_locked;
> };
> @@ -566,12 +568,23 @@ static int scsi_disk_emulate_inquiry(SCSIRequest *req,
> uint8_t *outbuf)
>
> outbuf[0] = s->qdev.type & 0x1f;
> outbuf[1] = s->removable ? 0x80 : 0;
> - if (s->qdev.type == TYPE_ROM) {
> - memcpy(&outbuf[16], "QEMU CD-ROM ", 16);
> +
> + if (NULL != s->pname) {
> + strpadcpy((char *) &outbuf[16], 16, s->pname, ' ');
> } else {
> - memcpy(&outbuf[16], "QEMU HARDDISK ", 16);
> + if (s->qdev.type == TYPE_ROM) {
> + memcpy(&outbuf[16], "QEMU CD-ROM ", 16);
> + } else {
> + memcpy(&outbuf[16], "QEMU HARDDISK ", 16);
> + }
> }
> - memcpy(&outbuf[8], "QEMU ", 8);
> +
> + if (NULL != s->vname) {
> + strpadcpy((char *) &outbuf[8], 8, s->vname, ' ');
> + } else {
> + memcpy(&outbuf[8], "QEMU ", 8);
> + }
> +
> memset(&outbuf[32], 0, 4);
> memcpy(&outbuf[32], s->version, MIN(4, strlen(s->version)));
> /*
> @@ -1585,14 +1598,19 @@ static int scsi_initfn(SCSIDevice *dev)
> return -1;
> }
>
> - if (!s->serial) {
> - /* try to fall back to value set with legacy -drive serial=... */
> - dinfo = drive_get_by_blockdev(s->qdev.conf.bs);
> - if (*dinfo->serial) {
> - s->serial = g_strdup(dinfo->serial);
> - }
> - }
> + dinfo = drive_get_by_blockdev(s->qdev.conf.bs);
>
> + /* when no value given try to fall back to */
> + /* value set with legacy -drive serial=... */
> + if ((!s->serial) && (*dinfo->serial)) {
> + s->serial = g_strdup(dinfo->serial);
> + }
No need to change the way the serial is handled, because you don't need
dinfo for vname/pname.
> + if ((!s->vname) && (*dinfo->vname)) {
> + s->vname = g_strdup(dinfo->vname);
> + }
> + if ((!s->pname) && (*dinfo->pname)) {
> + s->pname = g_strdup(dinfo->pname);
> + }
(Also, no parentheses around simple conditions).
> if (!s->version) {
> s->version = g_strdup(QEMU_VERSION);
> }
> @@ -1788,10 +1806,13 @@ static SCSIRequest *scsi_block_new_request(SCSIDevice
> *d, uint32_t tag,
> }
> #endif
>
> -#define DEFINE_SCSI_DISK_PROPERTIES() \
> - DEFINE_BLOCK_PROPERTIES(SCSIDiskState, qdev.conf), \
> - DEFINE_PROP_STRING("ver", SCSIDiskState, version), \
> - DEFINE_PROP_STRING("serial", SCSIDiskState, serial)
> +#define DEFINE_SCSI_DISK_PROPERTIES() \
> + DEFINE_BLOCK_PROPERTIES(SCSIDiskState, qdev.conf), \
> + DEFINE_PROP_STRING("ver", SCSIDiskState, version), \
> + DEFINE_PROP_STRING("serial", SCSIDiskState, serial), \
> + DEFINE_PROP_STRING("vendor_name", SCSIDiskState, vname), \
> + DEFINE_PROP_STRING("product_name", SCSIDiskState, pname)
> +
>
> static Property scsi_hd_properties[] = {
> DEFINE_SCSI_DISK_PROPERTIES(),
Paolo
- [Qemu-devel] [PATCH 1/5] Utility function strpadcpy() added, (continued)
- [Qemu-devel] [PATCH 1/5] Utility function strpadcpy() added, Dmitry Fleytman, 2012/03/15
- [Qemu-devel] [PATCH 5/5] PVSCSI paravirtualized device integration Bus type "pvscsi" added., Dmitry Fleytman, 2012/03/15
- [Qemu-devel] [PATCH 3/5] Header with various utility functions shared by VMWARE SCSI and network devices, Dmitry Fleytman, 2012/03/15
- [Qemu-devel] [PATCH 2/5] Vendor name and product name parameters for SCSI devices Options "vendor_name" and "product_name" added for SCSI disks., Dmitry Fleytman, 2012/03/15
- Re: [Qemu-devel] [PATCH 2/5] Vendor name and product name parameters for SCSI devices Options "vendor_name" and "product_name" added for SCSI disks.,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 4/5] PVCSI paravirtualized device implementation, Dmitry Fleytman, 2012/03/15
- Re: [Qemu-devel] [PATCH 0/5] VMWare PVSCSI paravirtual device implementation, Stefan Hajnoczi, 2012/03/15
- Re: [Qemu-devel] [PATCH 0/5] VMWare PVSCSI paravirtual device implementation, Gerhard Wiesinger, 2012/03/18
- Re: [Qemu-devel] [PATCH 0/5] VMWare PVSCSI paravirtual device implementation, Gerhard Wiesinger, 2012/03/18
- Re: [Qemu-devel] [PATCH 0/5] VMWare PVSCSI paravirtual device implementation, Dmitry Fleytman, 2012/03/15