LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: "K. Y. Srinivasan" <kys@microsoft.com>
To: gregkh@suse.de, linux-kernel@vger.kernel.org,
	devel@linuxdriverproject.org, virtualization@lists.osdl.org
Cc: "K. Y. Srinivasan" <kys@microsoft.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	Hank Janssen <hjanssen@microsoft.com>
Subject: [PATCH 21/22] Staging: hv: Introduce a function to map channel properties onto block device info
Date: Wed,  6 Apr 2011 16:05:21 -0700	[thread overview]
Message-ID: <1302131122-15530-21-git-send-email-kys@microsoft.com> (raw)
In-Reply-To: <1302131122-15530-1-git-send-email-kys@microsoft.com>

In preparation for removing the IDE details from the block driver, implement
a function that maps channel properties to block device information.

Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
---
 drivers/staging/hv/storvsc.c     |   68 ++++++++++++++++++++++++++++++++++++++
 drivers/staging/hv/storvsc_api.h |   10 +++++
 2 files changed, 78 insertions(+), 0 deletions(-)

diff --git a/drivers/staging/hv/storvsc.c b/drivers/staging/hv/storvsc.c
index d7ce393..e2b3410 100644
--- a/drivers/staging/hv/storvsc.c
+++ b/drivers/staging/hv/storvsc.c
@@ -17,6 +17,8 @@
  * Authors:
  *   Haiyang Zhang <haiyangz@microsoft.com>
  *   Hank Janssen  <hjanssen@microsoft.com>
+ *
+ * 4/3/2011: K. Y. Srinivasan - Significant restructuring and cleanup.
  */
 #include <linux/kernel.h>
 #include <linux/sched.h>
@@ -593,6 +595,72 @@ int stor_vsc_on_io_request(struct hv_device *device,
 }
 
 /*
+ * The channel properties uniquely specify how the device is to be
+ * presented to the guest. Map this information for use by the block
+ * driver. For Linux guests on Hyper-V, we emulate a scsi HBA in the guest
+ * (storvsc_drv) and so scsi devices in the guest  are handled by
+ * native upper level Linux drivers. Consequently, Hyper-V
+ * block driver, while being a generic block driver, presently does not
+ * deal with anything other than devices that would need to be presented
+ * to the guest as an IDE disk.
+ *
+ * This function maps the channel properties as embedded in the input
+ * parameter device_info onto information necessary to register the
+ * corresponding block device.
+ *
+ * Currently, there is no way to stop the emulation of the block device
+ * on the host side. And so, to prevent the native IDE drivers in Linux
+ * from taking over these devices (to be managedby Hyper-V block
+ * driver), we will take over if need be the major of the IDE controllers.
+ *
+ */
+
+int stor_vsc_get_major_info(struct storvsc_device_info *device_info,
+			    struct storvsc_major_info *major_info)
+{
+	static bool ide0_registered;
+	static bool ide1_registered;
+
+	/*
+	 * For now we only support IDE disks.
+	 */
+	major_info->devname = "ide";
+	major_info->diskname = "hd";
+
+	if (device_info->path_id) {
+		major_info->major = 22;
+		if (!ide1_registered)
+			major_info->do_register = true;
+		else {
+			major_info->do_register = false;
+			ide1_registered = true;
+		}
+		if (device_info->target_id)
+			major_info->index = 3;
+		 else
+			major_info->index = 2;
+
+		return 0;
+	} else {
+		major_info->major = 3;
+		if (!ide0_registered)
+			major_info->do_register = true;
+		else {
+			major_info->do_register = false;
+			ide0_registered = true;
+		}
+		if (device_info->target_id)
+			major_info->index = 1;
+		else
+			major_info->index = 0;
+
+		return 0;
+	}
+
+	return -ENODEV;
+}
+
+/*
  * stor_vsc_on_cleanup - Perform any cleanup when the driver is removed
  */
 void stor_vsc_on_cleanup(struct hv_driver *driver)
diff --git a/drivers/staging/hv/storvsc_api.h b/drivers/staging/hv/storvsc_api.h
index d7db949..c98139c 100644
--- a/drivers/staging/hv/storvsc_api.h
+++ b/drivers/staging/hv/storvsc_api.h
@@ -92,6 +92,14 @@ struct storvsc_device_info {
 	unsigned char target_id;
 };
 
+struct storvsc_major_info {
+	int major;
+	int index;
+	bool do_register;
+	char *devname;
+	char *diskname;
+};
+
 /* A storvsc device is a device object that contains a vmbus channel */
 struct storvsc_device {
 	struct hv_device *device;
@@ -155,5 +163,7 @@ int stor_vsc_on_io_request(struct hv_device *device,
 				struct hv_storvsc_request *request);
 void stor_vsc_on_cleanup(struct hv_driver *driver);
 
+int stor_vsc_get_major_info(struct storvsc_device_info *device_info,
+				struct storvsc_major_info *major_info);
 
 #endif /* _STORVSC_API_H_ */
-- 
1.7.4.1


  parent reply	other threads:[~2011-04-07  0:17 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-06 23:03 [RESEND][PATCH 00/22] Staging: hv: Cleanup storage drivers - Phase IV K. Y. Srinivasan
2011-04-06 23:05 ` [PATCH 01/22] Staging: hv: Get rid of blkvsc_check_events() K. Y. Srinivasan
2011-04-06 23:05   ` [PATCH 02/22] Staging: hv: Enable blkvsc_ioctl() K. Y. Srinivasan
2011-04-06 23:05   ` [PATCH 03/22] Staging: hv: Simplify the code for blkvsc_getgeo() K. Y. Srinivasan
2011-04-06 23:05   ` [PATCH 04/22] Staging: hv: Introduce a common function for issuing commands to the device K. Y. Srinivasan
2011-04-06 23:05   ` [PATCH 05/22] Staging: hv: Get rid of blkvsc_do_read_capacity() K. Y. Srinivasan
2011-04-06 23:05   ` [PATCH 06/22] Staging: hv: Get rid of blkvsc_do_read_capacity16() K. Y. Srinivasan
2011-04-06 23:05   ` [PATCH 07/22] Staging: hv: Get rid of the function blkvsc_do_flush() K. Y. Srinivasan
2011-04-06 23:05   ` [PATCH 08/22] Staging: hv: Get rid of the state media_not_present K. Y. Srinivasan
2011-04-06 23:05   ` [PATCH 09/22] Staging: hv: Get rid of the function blkvsc_revalidate_disk() K. Y. Srinivasan
2011-04-06 23:05   ` [PATCH 10/22] Staging: hv: Simplify blkvsc_init_rw() K. Y. Srinivasan
2011-04-06 23:05   ` [PATCH 11/22] Staging: hv: Get rid of some DPRINT_INFO() statements K. Y. Srinivasan
2011-04-06 23:05   ` [PATCH 12/22] Staging: hv: Get rid of some DPRINT_DBG() calls K. Y. Srinivasan
2011-04-06 23:05   ` [PATCH 13/22] Staging: hv: Cleanup blkvsc_remove() K. Y. Srinivasan
2011-04-06 23:05   ` [PATCH 14/22] Staging: hv: Cleanup storvsc_remove() K. Y. Srinivasan
2011-04-06 23:05   ` [PATCH 15/22] Staging: hv: Get rid of the code to manage removable media K. Y. Srinivasan
2011-04-06 23:05   ` [PATCH 16/22] Staging: hv: Get rid of some DPRINT_ERR() calls K. Y. Srinivasan
2011-04-06 23:05   ` [PATCH 17/22] Staging: hv: Get rid of an unnecessary check in blkvsc_probe() K. Y. Srinivasan
2011-04-06 23:05   ` [PATCH 18/22] Staging: hv: Cleanup blkvsc_open() K. Y. Srinivasan
2011-04-06 23:05   ` [PATCH 19/22] Staging: hv: Fix a jump label (Cleanup) in blkvsc_drv K. Y. Srinivasan
2011-04-06 23:05   ` [PATCH 20/22] Staging: hv: Fix a jump label (Remove) in blkvsc_drv.c K. Y. Srinivasan
2011-04-06 23:05   ` K. Y. Srinivasan [this message]
2011-04-06 23:05   ` [PATCH 22/22] Staging: hv: Get rid of IDE details from blkvsc_drv.c K. Y. Srinivasan
  -- strict thread matches above, loose matches on Subject: below --
2011-04-04 22:46 [PATCH 00/22] Staging: hv: Cleanup storage drivers - Phase IV K. Y. Srinivasan
2011-04-04 22:47 ` [PATCH 01/22] Staging: hv: Get rid of blkvsc_media_changed() K. Y. Srinivasan
2011-04-04 22:48   ` [PATCH 21/22] Staging: hv: Introduce a function to map channel properties onto block device info K. Y. 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=1302131122-15530-21-git-send-email-kys@microsoft.com \
    --to=kys@microsoft.com \
    --cc=devel@linuxdriverproject.org \
    --cc=gregkh@suse.de \
    --cc=haiyangz@microsoft.com \
    --cc=hjanssen@microsoft.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=virtualization@lists.osdl.org \
    --subject='Re: [PATCH 21/22] Staging: hv: Introduce a function to map channel properties onto block device info' \
    /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

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).