Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 249663
b: refs/heads/master
c: e6572b0
h: refs/heads/master
i:
  249661: 02dde12
  249659: 1ea8559
  249655: df8c3a3
  249647: e4a5b86
  249631: 51d5624
  249599: c8671a1
v: v3
  • Loading branch information
K. Y. Srinivasan authored and Greg Kroah-Hartman committed May 17, 2011
1 parent daed1c9 commit 6234927
Show file tree
Hide file tree
Showing 6 changed files with 173 additions and 201 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: cdee15044f25baff5bbdce14cc6959f1a69acb03
refs/heads/master: e6572b035b7dd17e42c0b0f9271efdd368bcde31
171 changes: 171 additions & 0 deletions trunk/drivers/staging/hv/hyperv_storage.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,175 @@
#define _HYPERV_STORAGE_H


/* 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 */
/* protocol versions match. */


#define REVISION_STRING(REVISION_) #REVISION_
#define FILL_VMSTOR_REVISION(RESULT_LVALUE_) \
do { \
char *revision_string \
= REVISION_STRING($Rev : 6 $) + 6; \
RESULT_LVALUE_ = 0; \
while (*revision_string >= '0' \
&& *revision_string <= '9') { \
RESULT_LVALUE_ *= 10; \
RESULT_LVALUE_ += *revision_string - '0'; \
revision_string++; \
} \
} while (0)

/* 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). */
#define VMSTOR_PROTOCOL_MAJOR(VERSION_) (((VERSION_) >> 8) & 0xff)
#define VMSTOR_PROTOCOL_MINOR(VERSION_) (((VERSION_)) & 0xff)
#define VMSTOR_PROTOCOL_VERSION(MAJOR_, MINOR_) ((((MAJOR_) & 0xff) << 8) | \
(((MINOR_) & 0xff)))
#define VMSTOR_INVALID_PROTOCOL_VERSION (-1)

/* Version history: */
/* V1 Beta 0.1 */
/* V1 RC < 2008/1/31 1.0 */
/* V1 RC > 2008/1/31 2.0 */
#define VMSTOR_PROTOCOL_VERSION_CURRENT VMSTOR_PROTOCOL_VERSION(2, 0)




/* This will get replaced with the max transfer length that is possible on */
/* the host adapter. */
/* The max transfer length will be published when we offer a vmbus channel. */
#define MAX_TRANSFER_LENGTH 0x40000
#define DEFAULT_PACKET_SIZE (sizeof(struct vmdata_gpa_direct) + \
sizeof(struct vstor_packet) + \
sizesizeof(u64) * (MAX_TRANSFER_LENGTH / PAGE_SIZE)))


/* Packet structure describing virtual storage requests. */
enum vstor_packet_operation {
VSTOR_OPERATION_COMPLETE_IO = 1,
VSTOR_OPERATION_REMOVE_DEVICE = 2,
VSTOR_OPERATION_EXECUTE_SRB = 3,
VSTOR_OPERATION_RESET_LUN = 4,
VSTOR_OPERATION_RESET_ADAPTER = 5,
VSTOR_OPERATION_RESET_BUS = 6,
VSTOR_OPERATION_BEGIN_INITIALIZATION = 7,
VSTOR_OPERATION_END_INITIALIZATION = 8,
VSTOR_OPERATION_QUERY_PROTOCOL_VERSION = 9,
VSTOR_OPERATION_QUERY_PROPERTIES = 10,
VSTOR_OPERATION_MAXIMUM = 10
};

/*
* Platform neutral description of a scsi request -
* this remains the same across the write regardless of 32/64 bit
* note: it's patterned off the SCSI_PASS_THROUGH structure
*/
#define CDB16GENERIC_LENGTH 0x10

#ifndef SENSE_BUFFER_SIZE
#define SENSE_BUFFER_SIZE 0x12
#endif

#define MAX_DATA_BUF_LEN_WITH_PADDING 0x14

struct vmscsi_request {
unsigned short length;
unsigned char srb_status;
unsigned char scsi_status;

unsigned char port_number;
unsigned char path_id;
unsigned char target_id;
unsigned char lun;

unsigned char cdb_length;
unsigned char sense_info_length;
unsigned char data_in;
unsigned char reserved;

unsigned int data_transfer_length;

union {
unsigned char cdb[CDB16GENERIC_LENGTH];
unsigned char sense_data[SENSE_BUFFER_SIZE];
unsigned char reserved_array[MAX_DATA_BUF_LEN_WITH_PADDING];
};
} __attribute((packed));


/*
* This structure is sent during the intialization phase to get the different
* properties of the channel.
*/
struct vmstorage_channel_properties {
unsigned short protocol_version;
unsigned char path_id;
unsigned char target_id;

/* Note: port number is only really known on the client side */
unsigned int port_number;
unsigned int flags;
unsigned int max_transfer_bytes;

/* This id is unique for each channel and will correspond with */
/* vendor specific data in the inquirydata */
unsigned long long unique_id;
} __packed;

/* This structure is sent during the storage protocol negotiations. */
struct vmstorage_protocol_version {
/* Major (MSW) and minor (LSW) version numbers. */
unsigned short major_minor;

/*
* Revision number is auto-incremented whenever this file is changed
* (See FILL_VMSTOR_REVISION macro above). Mismatch does not
* definitely indicate incompatibility--but it does indicate mismatched
* builds.
*/
unsigned short revision;
} __packed;

/* Channel Property Flags */
#define STORAGE_CHANNEL_REMOVABLE_FLAG 0x1
#define STORAGE_CHANNEL_EMULATED_IDE_FLAG 0x2

struct vstor_packet {
/* Requested operation type */
enum vstor_packet_operation operation;

/* Flags - see below for values */
unsigned int flags;

/* Status of the request returned from the server side. */
unsigned int status;

/* Data payload area */
union {
/*
* Structure used to forward SCSI commands from the
* client to the server.
*/
struct vmscsi_request vm_srb;

/* Structure used to query channel properties. */
struct vmstorage_channel_properties storage_channel_properties;

/* Used during version negotiations. */
struct vmstorage_protocol_version version;
};
} __packed;

/* Packet flags */
/*
* This flag indicates that the server should send back a completion for this
* packet.
*/
#define REQUEST_COMPLETION_FLAG 0x1

/* This is the set of flags that the vsc can set in any packets it sends */
#define VSC_LEGAL_FLAGS (REQUEST_COMPLETION_FLAG)

#endif /* _HYPERV_STORAGE_H */
1 change: 0 additions & 1 deletion trunk/drivers/staging/hv/storvsc.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
#include "hyperv.h"
#include "hyperv_storage.h"
#include "storvsc_api.h"
#include "vstorage.h"


static inline struct storvsc_device *alloc_stor_device(struct hv_device *device)
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/staging/hv/storvsc_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@

#include <linux/kernel.h>
#include <linux/wait.h>
#include "vstorage.h"
#include "hyperv_storage.h"
#include "hyperv.h"

/* Defines */
Expand Down
1 change: 0 additions & 1 deletion trunk/drivers/staging/hv/storvsc_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
#include "hyperv.h"
#include "hyperv_storage.h"
#include "storvsc_api.h"
#include "vstorage.h"

static int storvsc_ringbuffer_size = STORVSC_RING_BUFFER_SIZE;

Expand Down
Loading

0 comments on commit 6234927

Please sign in to comment.