From: "K. Y. Srinivasan" <kys@microsoft.com>
To: gregkh@suse.de, linux-kernel@vger.kernel.org,
devel@linuxdriverproject.org, virtualization@lists.osdl.org
Cc: Haiyang Zhang <haiyangz@microsoft.com>,
Abhishek Kane <v-abkane@microsoft.com>
Subject: [PATCH 23/40] Staging: hv: storvsc: Introduce code to manage IDE devices using storvsc HBA
Date: Wed, 29 Jun 2011 07:39:20 -0700 [thread overview]
Message-ID: <1309358377-8537-23-git-send-email-kys@microsoft.com> (raw)
In-Reply-To: <1309358377-8537-1-git-send-email-kys@microsoft.com>
Introduce code to manage the (potentially four) IDE devices suning the storvsc
driver. To do so, we assign distinct channels to each of these devices
as well as add code to probe an IDE device.
Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
drivers/staging/hv/hyperv_storage.h | 13 +++++++++
drivers/staging/hv/storvsc_drv.c | 50 +++++++++++++++++++++++++++++++++-
2 files changed, 61 insertions(+), 2 deletions(-)
diff --git a/drivers/staging/hv/hyperv_storage.h b/drivers/staging/hv/hyperv_storage.h
index a1f3e27..a15a53b 100644
--- a/drivers/staging/hv/hyperv_storage.h
+++ b/drivers/staging/hv/hyperv_storage.h
@@ -25,6 +25,19 @@
#ifndef _HYPERV_STORAGE_H
#define _HYPERV_STORAGE_H
+/*
+ * We want to manage the IDE devices using standard Linux SCSI drivers
+ * using the storvsc driver.
+ * Define special channels to support this.
+ */
+
+#define HV_MAX_IDE_DEVICES 4
+#define HV_IDE_BASE_CHANNEL 10
+#define HV_IDE0_DEV1 HV_IDE_BASE_CHANNEL
+#define HV_IDE0_DEV2 (HV_IDE_BASE_CHANNEL + 1)
+#define HV_IDE1_DEV1 (HV_IDE_BASE_CHANNEL + 2)
+#define HV_IDE1_DEV2 (HV_IDE_BASE_CHANNEL + 3)
+
/* vstorage.w revision number. This is used in the case of a version match, */
/* to alert the user that structure sizes may be mismatched even though the */
diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c
index 8d5be51..cf659d7 100644
--- a/drivers/staging/hv/storvsc_drv.c
+++ b/drivers/staging/hv/storvsc_drv.c
@@ -61,6 +61,54 @@ struct storvsc_cmd_request {
struct hv_storvsc_request request;
};
+static struct Scsi_Host *storvsc_host;
+
+/*
+ * State to manage IDE devices that register with the storvsc driver.
+ *
+ */
+static struct hv_device *ide_devices[HV_MAX_IDE_DEVICES];
+
+static void storvsc_get_ide_info(struct hv_device *dev, int *target, int *path)
+{
+ *target =
+ dev->dev_instance.data[5] << 8 | dev->dev_instance.data[4];
+
+ *path =
+ dev->dev_instance.data[3] << 24 | dev->dev_instance.data[2] << 16 |
+ dev->dev_instance.data[1] << 8 | dev->dev_instance.data[0];
+}
+
+int storvsc_ide_probe(struct hv_device *dev)
+{
+ struct storvsc_device_info dev_info;
+ int target, path, channel;
+ int ret;
+
+ dev_info.ring_buffer_size = BLKVSC_RING_BUFFER_SIZE;
+ ret = storvsc_dev_add(dev, &dev_info);
+
+ if (ret)
+ return ret;
+
+ storvsc_get_ide_info(dev, &target, &path);
+
+ if (path)
+ /* IDE controller 1. */
+ if (target)
+ channel = HV_IDE1_DEV2;
+ else
+ channel = HV_IDE1_DEV1;
+ else
+ /* IDE controller 0 */
+ if (target)
+ channel = HV_IDE0_DEV2;
+ else
+ channel = HV_IDE0_DEV1;
+
+ ide_devices[channel - HV_IDE_BASE_CHANNEL] = dev;
+ return scsi_add_device(storvsc_host, channel, target, 0);
+}
static int storvsc_device_alloc(struct scsi_device *sdevice)
{
@@ -469,7 +517,6 @@ static int storvsc_queuecommand_lck(struct scsi_cmnd *scmnd,
unsigned int sg_count = 0;
struct vmscsi_request *vm_srb;
-
/* If retrying, no need to prep the cmd */
if (scmnd->host_scribble) {
@@ -707,7 +754,6 @@ static int storvsc_probe(struct hv_device *device)
scsi_host_put(host);
return -ENODEV;
}
-
scsi_scan_host(host);
return ret;
}
--
1.7.4.1
next prev parent reply other threads:[~2011-06-29 14:39 UTC|newest]
Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-29 14:38 [PATCH 00/40] Staging: hv: Driver cleanup K. Y. Srinivasan
2011-06-29 14:38 ` [PATCH 01/40] Staging: hv: storvsc: Do not aquire an unnecessary reference on stor_device K. Y. Srinivasan
2011-06-29 14:38 ` [PATCH 02/40] Staging: hv: storvsc: Rename must_get_stor_device() K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 03/40] Staging: hv: storvsc: Rename get_stor_device() K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 04/40] Staging: hv: storvsc: Cleanup alloc_stor_device() K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 05/40] Staging: hv: storvsc: Introduce state to manage the lifecycle of stor device K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 06/40] Staging: hv: vmbus: Introduce a lock to protect the ext field in hv_device K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 07/40] Staging: hv: storvsc: Use the newly introduced lock in accessing ext field K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 08/40] Staging: hv: storvsc: Prevent outgoing traffic when stor dev is destroyed K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 09/40] Staging: hv: storvsc: Get rid of release_stor_device() by inlining the code K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 10/40] Staging: hv: storvsc: Get rid of final_release_stor_device() by inlining code K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 11/40] Staging: hv: storvsc: Leverage the spinlock to manage ref_cnt K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 12/40] Staging: hv: storvsc: Further cleanup reference counting of stor_device K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 13/40] Staging: hv: netvsc: Introduce code to properly manage outstanding sends K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 14/40] Staging: hv: netvsc: Inline the code for free_net_device() K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 15/40] Staging: hv: netvsc: Cleanup alloc_net_device() K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 16/40] Staging: hv: netvsc: Introduce state to manage the lifecycle of net device K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 17/40] Staging: hv: netvsc: Use the newly introduced lock in accessing ext field K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 18/40] Staging: hv: netvsc: Prevent outgoing traffic when netvsc dev is destroyed K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 19/40] Staging: hv: netvsc: Get rid of release_outbound_net_device() by inlining the code K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 20/40] Staging: hv: netvsc: Get rid of release_inbound_net_device() " K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 21/40] Staging: hv: netvsc: Leverage the spinlock to manage ref_cnt K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 22/40] Staging: hv: netvsc: Further cleanup reference counting of netvsc_device K. Y. Srinivasan
2011-06-29 14:39 ` K. Y. Srinivasan [this message]
2011-06-30 19:38 ` [PATCH 23/40] Staging: hv: storvsc: Introduce code to manage IDE devices using storvsc HBA Christoph Hellwig
2011-06-30 21:38 ` KY Srinivasan
2011-07-01 8:19 ` Christoph Hellwig
2011-06-29 14:39 ` [PATCH 24/40] Staging: hv: storvsc: On I/O get the correct IDE device K. Y. Srinivasan
2011-06-30 19:40 ` Christoph Hellwig
2011-06-30 21:15 ` KY Srinivasan
2011-07-01 8:17 ` Christoph Hellwig
2011-07-01 13:01 ` KY Srinivasan
2011-07-01 13:27 ` Christoph Hellwig
2011-06-29 14:39 ` [PATCH 25/40] Staging: hv: storvsc: Add state to manage the lifecycle of emulated HBA K. Y. Srinivasan
2011-06-30 19:44 ` Christoph Hellwig
2011-06-29 14:39 ` [PATCH 26/40] Staging: hv: storvsc: Handle probing IDE devices K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 27/40] Staging: hv: storvsc: Handle IDE devices correctly in storvsc_remove() K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 28/40] Staging: hv: storvsc: Handle IDE devices using the storvsc driver K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 29/40] Staging: hv: storvsc: Optimize bounce buffer handling for the "write" case K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 30/40] Staging: hv: storvsc: Optimize the bounce buffer handling in the "read" case K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 31/40] Staging: hv: storvsc: Get rid of blkvsc_drv.c as this code is not used K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 32/40] Staging: hv: storvsc: Include storvsc.c in storvsc_drv.c K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 33/40] Staging: hv: storvsc: Cleanup storvsc_drv.c after adding the contents of storvsc.c K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 34/40] Staging: hv: storvsc: Add the contents of hyperv_storage.h to storvsc_drv.c K. Y. Srinivasan
2011-06-30 19:45 ` Christoph Hellwig
2011-06-30 20:13 ` KY Srinivasan
2011-07-01 8:16 ` Christoph Hellwig
2011-07-01 12:48 ` KY Srinivasan
2011-07-05 16:12 ` Greg KH
2011-06-29 14:39 ` [PATCH 35/40] Staging: hv: storvsc: Make storvsc_dev_add() a static function K. Y. Srinivasan
2011-06-30 19:45 ` Christoph Hellwig
2011-06-29 14:39 ` [PATCH 36/40] Staging: hv: storvsc: Make storvsc_dev_remove() " K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 37/40] Staging: hv: storvsc: Make storvsc_do_io() " K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 38/40] Staging: hv: storvsc: Fixup srb_status for INQUIRY and MODE_SENSE K. Y. Srinivasan
2011-06-30 19:47 ` Christoph Hellwig
2011-06-30 19:59 ` KY Srinivasan
2011-07-01 8:00 ` Christoph Hellwig
2011-06-29 14:39 ` [PATCH 39/40] Staging: hv: storvsc: In case of scsi errors offline the device K. Y. Srinivasan
2011-06-29 14:39 ` [PATCH 40/40] Staging: hv: storvsc: No need to copy from bounce buffer in case of failure K. Y. Srinivasan
2011-07-05 16:14 ` [PATCH 01/40] Staging: hv: storvsc: Do not aquire an unnecessary reference on stor_device Greg KH
2011-07-05 16:43 ` KY Srinivasan
2011-06-30 19:33 ` [PATCH 00/40] Staging: hv: Driver cleanup Christoph Hellwig
2011-06-30 23:28 ` KY Srinivasan
2011-07-01 8:21 ` Christoph Hellwig
2011-07-01 13:31 ` KY Srinivasan
2011-06-30 23:32 ` KY Srinivasan
2011-06-30 23:48 ` Stephen Hemminger
2011-07-01 0:19 ` KY Srinivasan
2011-07-01 4:45 ` Stephen Hemminger
2011-07-01 13:25 ` KY Srinivasan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1309358377-8537-23-git-send-email-kys@microsoft.com \
--to=kys@microsoft.com \
--cc=devel@linuxdriverproject.org \
--cc=gregkh@suse.de \
--cc=haiyangz@microsoft.com \
--cc=linux-kernel@vger.kernel.org \
--cc=v-abkane@microsoft.com \
--cc=virtualization@lists.osdl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).