Commit 2492fd7a authored by Keith Mange's avatar Keith Mange Committed by James Bottomley

storvsc: Use a single value to track protocol versions

Use a single value to track protocol versions to simplify
comparisons and to be consistent with vmbus version tracking.
Tested-by: default avatarAlex Ng <alexng@microsoft.com>
Signed-off-by: default avatarKeith Mange <keith.mange@microsoft.com>
Signed-off-by: default avatarK. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Odin.com>
parent 6ee5c615
...@@ -58,12 +58,11 @@ ...@@ -58,12 +58,11 @@
* Win8: 5.1 * Win8: 5.1
*/ */
#define VMSTOR_PROTO_VERSION(MAJOR_, MINOR_) ((((MAJOR_) & 0xff) << 8) | \
(((MINOR_) & 0xff)))
#define VMSTOR_WIN7_MAJOR 4 #define VMSTOR_PROTO_VERSION_WIN7 VMSTOR_PROTO_VERSION(4, 2)
#define VMSTOR_WIN7_MINOR 2 #define VMSTOR_PROTO_VERSION_WIN8 VMSTOR_PROTO_VERSION(5, 1)
#define VMSTOR_WIN8_MAJOR 5
#define VMSTOR_WIN8_MINOR 1
/* Packet structure describing virtual storage requests. */ /* Packet structure describing virtual storage requests. */
...@@ -161,8 +160,7 @@ static int sense_buffer_size; ...@@ -161,8 +160,7 @@ static int sense_buffer_size;
*/ */
static int vmscsi_size_delta; static int vmscsi_size_delta;
static int vmstor_current_major; static int vmstor_proto_version;
static int vmstor_current_minor;
struct vmscsi_win8_extension { struct vmscsi_win8_extension {
/* /*
...@@ -474,18 +472,6 @@ static void storvsc_remove_lun(struct work_struct *work) ...@@ -474,18 +472,6 @@ static void storvsc_remove_lun(struct work_struct *work)
kfree(wrk); kfree(wrk);
} }
/*
* Major/minor macros. Minor version is in LSB, meaning that earlier flat
* version numbers will be interpreted as "0.x" (i.e., 1 becomes 0.1).
*/
static inline u16 storvsc_get_version(u8 major, u8 minor)
{
u16 version;
version = ((major << 8) | minor);
return version;
}
/* /*
* We can get incoming messages from the host that are not in response to * We can get incoming messages from the host that are not in response to
...@@ -923,8 +909,7 @@ static int storvsc_channel_init(struct hv_device *device) ...@@ -923,8 +909,7 @@ static int storvsc_channel_init(struct hv_device *device)
vstor_packet->operation = VSTOR_OPERATION_QUERY_PROTOCOL_VERSION; vstor_packet->operation = VSTOR_OPERATION_QUERY_PROTOCOL_VERSION;
vstor_packet->flags = REQUEST_COMPLETION_FLAG; vstor_packet->flags = REQUEST_COMPLETION_FLAG;
vstor_packet->version.major_minor = vstor_packet->version.major_minor = vmstor_proto_version;
storvsc_get_version(vmstor_current_major, vmstor_current_minor);
/* /*
* The revision number is only used in Windows; set it to 0. * The revision number is only used in Windows; set it to 0.
...@@ -1555,7 +1540,7 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd) ...@@ -1555,7 +1540,7 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
u32 payload_sz; u32 payload_sz;
u32 length; u32 length;
if (vmstor_current_major <= VMSTOR_WIN8_MAJOR) { if (vmstor_proto_version <= VMSTOR_PROTO_VERSION_WIN8) {
/* /*
* On legacy hosts filter unimplemented commands. * On legacy hosts filter unimplemented commands.
* Future hosts are expected to correctly handle * Future hosts are expected to correctly handle
...@@ -1761,16 +1746,14 @@ static int storvsc_probe(struct hv_device *device, ...@@ -1761,16 +1746,14 @@ static int storvsc_probe(struct hv_device *device,
if (vmbus_proto_version < VERSION_WIN8) { if (vmbus_proto_version < VERSION_WIN8) {
sense_buffer_size = PRE_WIN8_STORVSC_SENSE_BUFFER_SIZE; sense_buffer_size = PRE_WIN8_STORVSC_SENSE_BUFFER_SIZE;
vmscsi_size_delta = sizeof(struct vmscsi_win8_extension); vmscsi_size_delta = sizeof(struct vmscsi_win8_extension);
vmstor_current_major = VMSTOR_WIN7_MAJOR; vmstor_proto_version = VMSTOR_PROTO_VERSION_WIN7;
vmstor_current_minor = VMSTOR_WIN7_MINOR;
max_luns_per_target = STORVSC_IDE_MAX_LUNS_PER_TARGET; max_luns_per_target = STORVSC_IDE_MAX_LUNS_PER_TARGET;
max_targets = STORVSC_IDE_MAX_TARGETS; max_targets = STORVSC_IDE_MAX_TARGETS;
max_channels = STORVSC_IDE_MAX_CHANNELS; max_channels = STORVSC_IDE_MAX_CHANNELS;
} else { } else {
sense_buffer_size = POST_WIN7_STORVSC_SENSE_BUFFER_SIZE; sense_buffer_size = POST_WIN7_STORVSC_SENSE_BUFFER_SIZE;
vmscsi_size_delta = 0; vmscsi_size_delta = 0;
vmstor_current_major = VMSTOR_WIN8_MAJOR; vmstor_proto_version = VMSTOR_PROTO_VERSION_WIN8;
vmstor_current_minor = VMSTOR_WIN8_MINOR;
max_luns_per_target = STORVSC_MAX_LUNS_PER_TARGET; max_luns_per_target = STORVSC_MAX_LUNS_PER_TARGET;
max_targets = STORVSC_MAX_TARGETS; max_targets = STORVSC_MAX_TARGETS;
max_channels = STORVSC_MAX_CHANNELS; max_channels = STORVSC_MAX_CHANNELS;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment