From patchwork Sun Oct 25 11:15:55 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vadim Rozenfeld X-Patchwork-Id: 55745 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n9PBG1Nh005145 for ; Sun, 25 Oct 2009 11:16:01 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753394AbZJYLPz (ORCPT ); Sun, 25 Oct 2009 07:15:55 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753393AbZJYLPy (ORCPT ); Sun, 25 Oct 2009 07:15:54 -0400 Received: from mx1.redhat.com ([209.132.183.28]:23999 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753359AbZJYLPy (ORCPT ); Sun, 25 Oct 2009 07:15:54 -0400 Received: from int-mx08.intmail.prod.int.phx2.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n9PBFxV7008109 for ; Sun, 25 Oct 2009 07:15:59 -0400 Received: from localhost.localdomain (vpn-10-20.str.redhat.com [10.32.10.20]) by int-mx08.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id n9PBFtqg023062 for ; Sun, 25 Oct 2009 07:15:57 -0400 Message-ID: <4AE4336B.6070104@redhat.com> Date: Sun, 25 Oct 2009 13:15:55 +0200 From: Vadim Rozenfeld User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.4pre) Gecko/20091014 Fedora/3.0-2.8.b4.fc11 Thunderbird/3.0b4 MIME-Version: 1.0 To: kvm@vger.kernel.org Subject: [PATCH] viostor driver. add support for serial number. X-Scanned-By: MIMEDefang 2.67 on 10.5.11.21 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org diff --git a/viostor/virtio_stor.c b/viostor/virtio_stor.c index 375021b..b972dd2 100644 --- a/viostor/virtio_stor.c +++ b/viostor/virtio_stor.c @@ -416,6 +416,14 @@ VirtIoHwInitialize( RhelDbgPrint(TRACE_LEVEL_INFORMATION, ("VIRTIO_BLK_F_GEOMETRY. cylinders = %d heads = %d sectors = %d\n", adaptExt->info.geometry.cylinders, adaptExt->info.geometry.heads, adaptExt->info.geometry.sectors)); } + if (VirtIODeviceGetHostFeature(DeviceExtension, VIRTIO_BLK_F_IDENTIFY)) { + VirtIODeviceGet(DeviceExtension, FIELD_OFFSET(blk_config, identify), +&adaptExt->info.identify, VIRTIO_BLK_ID_LEN); + adaptExt->has_sn = TRUE; + RhelDbgPrint(TRACE_LEVEL_INFORMATION, ("VIRTIO_BLK_F_IDENTIFY. \n")); + } + + VirtIODeviceGet( DeviceExtension, FIELD_OFFSET(blk_config, capacity), &cap, sizeof(cap)); adaptExt->info.capacity = cap; @@ -801,8 +809,13 @@ RhelScsiGetInquiryData( PVPD_SERIAL_NUMBER_PAGE SerialPage; SerialPage = (PVPD_SERIAL_NUMBER_PAGE)Srb->DataBuffer; SerialPage->PageCode = VPD_SERIAL_NUMBER; - SerialPage->PageLength = 1; - SerialPage->SerialNumber[0] = '0'; + if(adaptExt->has_sn) { + SerialPage->PageLength = VIRTIO_BLK_ID_SN_BYTES; + ScsiPortMoveMemory(&SerialPage->SerialNumber[0],&adaptExt->info.identify[VIRTIO_BLK_ID_SN], VIRTIO_BLK_ID_SN_BYTES); + } else { + SerialPage->PageLength = 1; + SerialPage->SerialNumber[0] = '0'; + } Srb->DataTransferLength = sizeof(VPD_SERIAL_NUMBER_PAGE) + SerialPage->PageLength; } else if ((cdb->CDB6INQUIRY3.PageCode == VPD_DEVICE_IDENTIFIERS)&& diff --git a/viostor/virtio_stor.h b/viostor/virtio_stor.h index 2533148..dd4728e 100644 --- a/viostor/virtio_stor.h +++ b/viostor/virtio_stor.h @@ -36,6 +36,12 @@ typedef struct VirtIOBufferDescriptor VIO_SG, *PVIO_SG; #define VIRTIO_BLK_F_GEOMETRY 4 /* Legacy geometry available */ #define VIRTIO_BLK_F_RO 5 /* Disk is read-only */ #define VIRTIO_BLK_F_BLK_SIZE 6 /* Block size of disk is available*/ +#define VIRTIO_BLK_F_SCSI 7 /* Supports scsi command passthru */ +#define VIRTIO_BLK_F_IDENTIFY 8 /* ATA IDENTIFY supported */ + +#define VIRTIO_BLK_ID_LEN 256 /* length of identify u16 array */ +#define VIRTIO_BLK_ID_SN 10 /* start of char * serial# */ +#define VIRTIO_BLK_ID_SN_BYTES 20 /* length in bytes of serial# */ /* These two define direction. */ #define VIRTIO_BLK_T_IN 0 @@ -66,6 +72,7 @@ typedef struct virtio_blk_config { } geometry; /* block size of device (if VIRTIO_BLK_F_BLK_SIZE) */ u32 blk_size; + u16 identify[VIRTIO_BLK_ID_LEN]; }blk_config, *pblk_config; #pragma pack() @@ -97,6 +104,7 @@ typedef struct _ADAPTER_EXTENSION { LIST_ENTRY list_head; LIST_ENTRY complete_list; STOR_DPC completion_dpc; + BOOLEAN has_sn; }ADAPTER_EXTENSION, *PADAPTER_EXTENSION; typedef struct _RHEL_SRB_EXTENSION {