Staging: hv: add the Hyper-V api header files
These are the header files for the API to talk to the Hyper-V
core.
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
diff --git a/drivers/staging/hv/include/vstorage.h b/drivers/staging/hv/include/vstorage.h
new file mode 100644
index 0000000..3ab9861
--- /dev/null
+++ b/drivers/staging/hv/include/vstorage.h
@@ -0,0 +1,309 @@
+/*
+ *
+ * Copyright (c) 2009, Microsoft Corporation.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ * Place - Suite 330, Boston, MA 02111-1307 USA.
+ *
+ * Authors:
+ * Haiyang Zhang <haiyangz@microsoft.com>
+ * Hank Janssen <hjanssen@microsoft.com>
+ *
+ */
+
+
+#pragma once
+
+//#include <vmbuspacketformat.h>
+//#include <ntddscsi.h>
+
+#define C_ASSERT(x)
+//
+// public interface to the server
+//
+
+//
+// Storvsp device interface guid
+//
+
+
+//
+// Protocol versions.
+//
+
+//
+// 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_) \
+{ \
+ char *revisionString = REVISION_STRING($Revision: 6 $) + 11; \
+ RESULT_LVALUE_ = 0; \
+ while (*revisionString >= '0' && *revisionString <= '9') \
+ { \
+ RESULT_LVALUE_ *= 10; \
+ RESULT_LVALUE_ += *revisionString - '0'; \
+ revisionString++; \
+ } \
+}
+
+//
+// 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) ))
+
+//
+// Invalid version.
+//
+
+#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(VMDATA_GPA_DIRECT) + \
+ sizeof(VSTOR_PACKET) + \
+ (sizeof(UINT64) * (MAX_TRANSFER_LENGTH / PAGE_SIZE)))
+
+
+
+//
+// Packet structure describing virtual storage requests.
+//
+
+typedef enum
+{
+ VStorOperationCompleteIo = 1,
+ VStorOperationRemoveDevice = 2,
+ VStorOperationExecuteSRB = 3,
+ VStorOperationResetLun = 4,
+ VStorOperationResetAdapter = 5,
+ VStorOperationResetBus = 6,
+ VStorOperationBeginInitialization = 7,
+ VStorOperationEndInitialization = 8,
+ VStorOperationQueryProtocolVersion = 9,
+ VStorOperationQueryProperties = 10,
+ VStorOperationMaximum = 10
+
+} VSTOR_PACKET_OPERATION;
+
+
+//
+// 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
+//
+
+
+#pragma pack(push,1)
+
+
+#define CDB16GENERIC_LENGTH 0x10
+
+#ifndef SENSE_BUFFER_SIZE
+#define SENSE_BUFFER_SIZE 0x12
+#endif
+C_ASSERT(SENSE_BUFFER_SIZE == 0x12);
+
+#define MAX_DATA_BUFFER_LENGTH_WITH_PADDING 0x14
+
+
+typedef struct
+{
+ USHORT Length;
+ UCHAR SrbStatus;
+ UCHAR ScsiStatus;
+
+ UCHAR PortNumber;
+ UCHAR PathId;
+ UCHAR TargetId;
+ UCHAR Lun;
+
+ UCHAR CdbLength;
+ UCHAR SenseInfoLength;
+ UCHAR DataIn;
+ UCHAR Reserved;
+
+ ULONG DataTransferLength;
+
+ union
+ {
+ UCHAR Cdb[CDB16GENERIC_LENGTH];
+
+ UCHAR SenseData[SENSE_BUFFER_SIZE];
+
+ UCHAR ReservedArray[MAX_DATA_BUFFER_LENGTH_WITH_PADDING];
+ };
+
+} VMSCSI_REQUEST, *PVMSCSI_REQUEST;
+
+C_ASSERT((sizeof(VMSCSI_REQUEST) % 4) == 0);
+
+
+//
+// This structure is sent during the intialization phase to get the different
+// properties of the channel.
+//
+
+typedef struct
+{
+ USHORT ProtocolVersion;
+ UCHAR PathId;
+ UCHAR TargetId;
+
+ //
+ // Note: port number is only really known on the client side
+ //
+ ULONG PortNumber;
+
+ ULONG Flags;
+
+ ULONG MaxTransferBytes;
+
+ //
+ // This id is unique for each channel and will correspond with
+ // vendor specific data in the inquirydata
+ //
+
+ ULONGLONG UniqueId;
+
+} VMSTORAGE_CHANNEL_PROPERTIES, *PVMSTORAGE_CHANNEL_PROPERTIES;
+
+C_ASSERT((sizeof(VMSTORAGE_CHANNEL_PROPERTIES) % 4) == 0);
+
+
+//
+// This structure is sent during the storage protocol negotiations.
+//
+
+typedef struct
+{
+ //
+ // Major (MSW) and minor (LSW) version numbers.
+ //
+
+ USHORT MajorMinor;
+
+
+ //
+ // 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.
+ //
+
+ USHORT Revision;
+
+} VMSTORAGE_PROTOCOL_VERSION, *PVMSTORAGE_PROTOCOL_VERSION;
+
+C_ASSERT((sizeof(VMSTORAGE_PROTOCOL_VERSION) % 4) == 0);
+
+
+//
+// Channel Property Flags
+//
+
+#define STORAGE_CHANNEL_REMOVABLE_FLAG 0x1
+#define STORAGE_CHANNEL_EMULATED_IDE_FLAG 0x2
+
+
+typedef struct _VSTOR_PACKET
+{
+ //
+ // Requested operation type
+ //
+
+ VSTOR_PACKET_OPERATION Operation;
+
+ //
+ // Flags - see below for values
+ //
+
+ ULONG Flags;
+
+ //
+ // Status of the request returned from the server side.
+ //
+
+ ULONG Status;
+
+ //
+ // Data payload area
+ //
+
+ union
+ {
+ //
+ // Structure used to forward SCSI commands from the client to the server.
+ //
+
+ VMSCSI_REQUEST VmSrb;
+
+ //
+ // Structure used to query channel properties.
+ //
+
+ VMSTORAGE_CHANNEL_PROPERTIES StorageChannelProperties;
+
+ //
+ // Used during version negotiations.
+ //
+
+ VMSTORAGE_PROTOCOL_VERSION Version;
+ };
+
+} VSTOR_PACKET, *PVSTOR_PACKET;
+
+C_ASSERT((sizeof(VSTOR_PACKET) % 4) == 0);
+
+//
+// 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)
+
+
+#pragma pack(pop)
+
+