Loading drivers/staging/hv/include/vstorage.h +110 −213 Original line number Diff line number Diff line Loading @@ -22,88 +22,51 @@ */ #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') \ { \ 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 #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(u64) * (MAX_TRANSFER_LENGTH / PAGE_SIZE))) /* Packet structure describing virtual storage requests. */ typedef enum { typedef enum { VStorOperationCompleteIo = 1, VStorOperationRemoveDevice = 2, VStorOperationExecuteSRB = 3, Loading @@ -115,32 +78,26 @@ typedef enum 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) /* * 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 C_ASSERT(SENSE_BUFFER_SIZE == 0x12); #define MAX_DATA_BUFFER_LENGTH_WITH_PADDING 0x14 typedef struct { typedef struct { unsigned short Length; unsigned char SrbStatus; unsigned char ScsiStatus; Loading @@ -157,151 +114,91 @@ typedef struct unsigned int DataTransferLength; union { union { unsigned char Cdb[CDB16GENERIC_LENGTH]; unsigned char SenseData[SENSE_BUFFER_SIZE]; unsigned char ReservedArray[MAX_DATA_BUFFER_LENGTH_WITH_PADDING]; }; } VMSCSI_REQUEST, *PVMSCSI_REQUEST; C_ASSERT((sizeof(VMSCSI_REQUEST) % 4) == 0); } __attribute((packed)) VMSCSI_REQUEST, *PVMSCSI_REQUEST; /* This structure is sent during the intialization phase to get the different */ /* properties of the channel. */ typedef struct { /* * This structure is sent during the intialization phase to get the different * properties of the channel. */ typedef struct { unsigned short ProtocolVersion; unsigned char PathId; unsigned char TargetId; /* Note: port number is only really known on the client side */ unsigned int PortNumber; unsigned int Flags; unsigned int MaxTransferBytes; /* This id is unique for each channel and will correspond with */ /* vendor specific data in the inquirydata */ unsigned long long UniqueId; } VMSTORAGE_CHANNEL_PROPERTIES, *PVMSTORAGE_CHANNEL_PROPERTIES; C_ASSERT((sizeof(VMSTORAGE_CHANNEL_PROPERTIES) % 4) == 0); } __attribute__((packed)) VMSTORAGE_CHANNEL_PROPERTIES, *PVMSTORAGE_CHANNEL_PROPERTIES; /* This structure is sent during the storage protocol negotiations. */ typedef struct { typedef struct { /* Major (MSW) and minor (LSW) version numbers. */ unsigned short 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. */ /* * 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; } VMSTORAGE_PROTOCOL_VERSION, *PVMSTORAGE_PROTOCOL_VERSION; C_ASSERT((sizeof(VMSTORAGE_PROTOCOL_VERSION) % 4) == 0); } __attribute__((packed)) VMSTORAGE_PROTOCOL_VERSION, *PVMSTORAGE_PROTOCOL_VERSION; /* Channel Property Flags */ #define STORAGE_CHANNEL_REMOVABLE_FLAG 0x1 #define STORAGE_CHANNEL_EMULATED_IDE_FLAG 0x2 typedef struct _VSTOR_PACKET { typedef struct _VSTOR_PACKET { /* Requested operation type */ 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. */ 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; } __attribute__((packed)) 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. */ /* * 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) Loading
drivers/staging/hv/include/vstorage.h +110 −213 Original line number Diff line number Diff line Loading @@ -22,88 +22,51 @@ */ #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') \ { \ 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 #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(u64) * (MAX_TRANSFER_LENGTH / PAGE_SIZE))) /* Packet structure describing virtual storage requests. */ typedef enum { typedef enum { VStorOperationCompleteIo = 1, VStorOperationRemoveDevice = 2, VStorOperationExecuteSRB = 3, Loading @@ -115,32 +78,26 @@ typedef enum 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) /* * 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 C_ASSERT(SENSE_BUFFER_SIZE == 0x12); #define MAX_DATA_BUFFER_LENGTH_WITH_PADDING 0x14 typedef struct { typedef struct { unsigned short Length; unsigned char SrbStatus; unsigned char ScsiStatus; Loading @@ -157,151 +114,91 @@ typedef struct unsigned int DataTransferLength; union { union { unsigned char Cdb[CDB16GENERIC_LENGTH]; unsigned char SenseData[SENSE_BUFFER_SIZE]; unsigned char ReservedArray[MAX_DATA_BUFFER_LENGTH_WITH_PADDING]; }; } VMSCSI_REQUEST, *PVMSCSI_REQUEST; C_ASSERT((sizeof(VMSCSI_REQUEST) % 4) == 0); } __attribute((packed)) VMSCSI_REQUEST, *PVMSCSI_REQUEST; /* This structure is sent during the intialization phase to get the different */ /* properties of the channel. */ typedef struct { /* * This structure is sent during the intialization phase to get the different * properties of the channel. */ typedef struct { unsigned short ProtocolVersion; unsigned char PathId; unsigned char TargetId; /* Note: port number is only really known on the client side */ unsigned int PortNumber; unsigned int Flags; unsigned int MaxTransferBytes; /* This id is unique for each channel and will correspond with */ /* vendor specific data in the inquirydata */ unsigned long long UniqueId; } VMSTORAGE_CHANNEL_PROPERTIES, *PVMSTORAGE_CHANNEL_PROPERTIES; C_ASSERT((sizeof(VMSTORAGE_CHANNEL_PROPERTIES) % 4) == 0); } __attribute__((packed)) VMSTORAGE_CHANNEL_PROPERTIES, *PVMSTORAGE_CHANNEL_PROPERTIES; /* This structure is sent during the storage protocol negotiations. */ typedef struct { typedef struct { /* Major (MSW) and minor (LSW) version numbers. */ unsigned short 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. */ /* * 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; } VMSTORAGE_PROTOCOL_VERSION, *PVMSTORAGE_PROTOCOL_VERSION; C_ASSERT((sizeof(VMSTORAGE_PROTOCOL_VERSION) % 4) == 0); } __attribute__((packed)) VMSTORAGE_PROTOCOL_VERSION, *PVMSTORAGE_PROTOCOL_VERSION; /* Channel Property Flags */ #define STORAGE_CHANNEL_REMOVABLE_FLAG 0x1 #define STORAGE_CHANNEL_EMULATED_IDE_FLAG 0x2 typedef struct _VSTOR_PACKET { typedef struct _VSTOR_PACKET { /* Requested operation type */ 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. */ 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; } __attribute__((packed)) 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. */ /* * 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)