Merge remote branch 'nouveau/for-airlied' of /ssd/git/drm-nouveau-next into drm-fixes
[deliverable/linux.git] / drivers / staging / hv / vstorage.h
CommitLineData
565e7dc8
HJ
1/*
2 *
3 * Copyright (c) 2009, Microsoft Corporation.
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms and conditions of the GNU General Public License,
7 * version 2, as published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
16 * Place - Suite 330, Boston, MA 02111-1307 USA.
17 *
18 * Authors:
19 * Haiyang Zhang <haiyangz@microsoft.com>
20 * Hank Janssen <hjanssen@microsoft.com>
21 *
22 */
23
454f18a9
BP
24/* vstorage.w revision number. This is used in the case of a version match, */
25/* to alert the user that structure sizes may be mismatched even though the */
26/* protocol versions match. */
27
565e7dc8 28#define REVISION_STRING(REVISION_) #REVISION_
d7363a19
GKH
29#define FILL_VMSTOR_REVISION(RESULT_LVALUE_) \
30{ \
a5729c00 31 char *revisionString = REVISION_STRING($Revision : 6 $) + 11; \
d7363a19
GKH
32 RESULT_LVALUE_ = 0; \
33 while (*revisionString >= '0' && *revisionString <= '9') { \
34 RESULT_LVALUE_ *= 10; \
35 RESULT_LVALUE_ += *revisionString - '0'; \
36 revisionString++; \
37 } \
565e7dc8
HJ
38}
39
454f18a9
BP
40/* Major/minor macros. Minor version is in LSB, meaning that earlier flat */
41/* version numbers will be interpreted as "0.x" (i.e., 1 becomes 0.1). */
d7363a19
GKH
42#define VMSTOR_PROTOCOL_MAJOR(VERSION_) (((VERSION_) >> 8) & 0xff)
43#define VMSTOR_PROTOCOL_MINOR(VERSION_) (((VERSION_)) & 0xff)
44#define VMSTOR_PROTOCOL_VERSION(MAJOR_, MINOR_) ((((MAJOR_) & 0xff) << 8) | \
45 (((MINOR_) & 0xff)))
46#define VMSTOR_INVALID_PROTOCOL_VERSION (-1)
454f18a9
BP
47
48/* Version history: */
49/* V1 Beta 0.1 */
50/* V1 RC < 2008/1/31 1.0 */
51/* V1 RC > 2008/1/31 2.0 */
565e7dc8
HJ
52#define VMSTOR_PROTOCOL_VERSION_CURRENT VMSTOR_PROTOCOL_VERSION(2, 0)
53
54
454f18a9 55
d7363a19 56
454f18a9
BP
57/* This will get replaced with the max transfer length that is possible on */
58/* the host adapter. */
59/* The max transfer length will be published when we offer a vmbus channel. */
d7363a19 60#define MAX_TRANSFER_LENGTH 0x40000
8dc0a06a 61#define DEFAULT_PACKET_SIZE (sizeof(struct vmdata_gpa_direct) + \
b3715ee4
GKH
62 sizeof(struct vstor_packet) + \
63 sizesizeof(u64) * (MAX_TRANSFER_LENGTH / PAGE_SIZE)))
454f18a9
BP
64
65
454f18a9 66/* Packet structure describing virtual storage requests. */
b3715ee4 67enum vstor_packet_operation {
d7363a19
GKH
68 VStorOperationCompleteIo = 1,
69 VStorOperationRemoveDevice = 2,
70 VStorOperationExecuteSRB = 3,
71 VStorOperationResetLun = 4,
72 VStorOperationResetAdapter = 5,
73 VStorOperationResetBus = 6,
74 VStorOperationBeginInitialization = 7,
75 VStorOperationEndInitialization = 8,
76 VStorOperationQueryProtocolVersion = 9,
77 VStorOperationQueryProperties = 10,
78 VStorOperationMaximum = 10
b3715ee4 79};
454f18a9 80
d7363a19
GKH
81/*
82 * Platform neutral description of a scsi request -
83 * this remains the same across the write regardless of 32/64 bit
84 * note: it's patterned off the SCSI_PASS_THROUGH structure
85 */
d7363a19 86#define CDB16GENERIC_LENGTH 0x10
565e7dc8
HJ
87
88#ifndef SENSE_BUFFER_SIZE
d7363a19 89#define SENSE_BUFFER_SIZE 0x12
565e7dc8 90#endif
565e7dc8 91
d7363a19 92#define MAX_DATA_BUFFER_LENGTH_WITH_PADDING 0x14
565e7dc8 93
b3715ee4 94struct vmscsi_request {
d7363a19
GKH
95 unsigned short Length;
96 unsigned char SrbStatus;
97 unsigned char ScsiStatus;
565e7dc8 98
d7363a19
GKH
99 unsigned char PortNumber;
100 unsigned char PathId;
101 unsigned char TargetId;
102 unsigned char Lun;
565e7dc8 103
d7363a19
GKH
104 unsigned char CdbLength;
105 unsigned char SenseInfoLength;
106 unsigned char DataIn;
107 unsigned char Reserved;
565e7dc8 108
d7363a19 109 unsigned int DataTransferLength;
565e7dc8 110
d7363a19 111 union {
454f18a9 112 unsigned char Cdb[CDB16GENERIC_LENGTH];
565e7dc8 113
454f18a9 114 unsigned char SenseData[SENSE_BUFFER_SIZE];
565e7dc8 115
454f18a9 116 unsigned char ReservedArray[MAX_DATA_BUFFER_LENGTH_WITH_PADDING];
d7363a19 117 };
b3715ee4 118} __attribute((packed));
454f18a9 119
565e7dc8 120
d7363a19
GKH
121/*
122 * This structure is sent during the intialization phase to get the different
123 * properties of the channel.
124 */
b3715ee4 125struct vmstorage_channel_properties {
d7363a19
GKH
126 unsigned short ProtocolVersion;
127 unsigned char PathId;
128 unsigned char TargetId;
565e7dc8 129
d7363a19
GKH
130 /* Note: port number is only really known on the client side */
131 unsigned int PortNumber;
132 unsigned int Flags;
133 unsigned int MaxTransferBytes;
565e7dc8 134
d7363a19
GKH
135 /* This id is unique for each channel and will correspond with */
136 /* vendor specific data in the inquirydata */
137 unsigned long long UniqueId;
b3715ee4 138} __attribute__((packed));
454f18a9
BP
139
140/* This structure is sent during the storage protocol negotiations. */
b3715ee4 141struct vmstorage_protocol_version {
d7363a19
GKH
142 /* Major (MSW) and minor (LSW) version numbers. */
143 unsigned short MajorMinor;
454f18a9 144
d7363a19
GKH
145 /*
146 * Revision number is auto-incremented whenever this file is changed
147 * (See FILL_VMSTOR_REVISION macro above). Mismatch does not
148 * definitely indicate incompatibility--but it does indicate mismatched
149 * builds.
150 */
151 unsigned short Revision;
b3715ee4 152} __attribute__((packed));
454f18a9
BP
153
154/* Channel Property Flags */
d7363a19
GKH
155#define STORAGE_CHANNEL_REMOVABLE_FLAG 0x1
156#define STORAGE_CHANNEL_EMULATED_IDE_FLAG 0x2
454f18a9 157
b3715ee4 158struct vstor_packet {
d7363a19 159 /* Requested operation type */
b3715ee4 160 enum vstor_packet_operation Operation;
565e7dc8 161
d7363a19
GKH
162 /* Flags - see below for values */
163 unsigned int Flags;
565e7dc8 164
d7363a19
GKH
165 /* Status of the request returned from the server side. */
166 unsigned int Status;
454f18a9 167
d7363a19
GKH
168 /* Data payload area */
169 union {
170 /*
171 * Structure used to forward SCSI commands from the
172 * client to the server.
173 */
b3715ee4 174 struct vmscsi_request VmSrb;
454f18a9 175
d7363a19 176 /* Structure used to query channel properties. */
b3715ee4 177 struct vmstorage_channel_properties StorageChannelProperties;
565e7dc8 178
d7363a19 179 /* Used during version negotiations. */
b3715ee4 180 struct vmstorage_protocol_version Version;
d7363a19 181 };
b3715ee4 182} __attribute__((packed));
565e7dc8 183
d7363a19 184/* Packet flags */
d7363a19
GKH
185/*
186 * This flag indicates that the server should send back a completion for this
187 * packet.
188 */
189#define REQUEST_COMPLETION_FLAG 0x1
565e7dc8 190
454f18a9 191/* This is the set of flags that the vsc can set in any packets it sends */
d7363a19 192#define VSC_LEGAL_FLAGS (REQUEST_COMPLETION_FLAG)
This page took 0.537349 seconds and 5 git commands to generate.