Loading drivers/staging/hv/BlkVsc.c +2 −2 Original line number Diff line number Diff line Loading @@ -61,9 +61,9 @@ BlkVscInitialize( storDriver->RequestExtSize = sizeof(STORVSC_REQUEST_EXTENSION); /* Divide the ring buffer data size (which is 1 page less than the ring buffer size since that page is reserved for the ring buffer indices) */ /* by the max request size (which is VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER + VSTOR_PACKET + u64) */ /* by the max request size (which is VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER + struct vstor_packet + u64) */ storDriver->MaxOutstandingRequestsPerChannel = ((storDriver->RingBufferSize - PAGE_SIZE) / ALIGN_UP(MAX_MULTIPAGE_BUFFER_PACKET + sizeof(VSTOR_PACKET) + sizeof(u64),sizeof(u64))); ((storDriver->RingBufferSize - PAGE_SIZE) / ALIGN_UP(MAX_MULTIPAGE_BUFFER_PACKET + sizeof(struct vstor_packet) + sizeof(u64),sizeof(u64))); DPRINT_INFO(BLKVSC, "max io outstd %u", storDriver->MaxOutstandingRequestsPerChannel); Loading drivers/staging/hv/StorVsc.c +34 −34 Original line number Diff line number Diff line Loading @@ -49,7 +49,7 @@ typedef struct _STORVSC_REQUEST_EXTENSION { /* Synchronize the request/response if needed */ struct osd_waitevent *WaitEvent; VSTOR_PACKET VStorPacket; struct vstor_packet VStorPacket; } STORVSC_REQUEST_EXTENSION; Loading Loading @@ -132,14 +132,14 @@ StorVscOnChannelCallback( static void StorVscOnIOCompletion( struct hv_device *Device, VSTOR_PACKET *VStorPacket, struct vstor_packet *VStorPacket, STORVSC_REQUEST_EXTENSION *RequestExt ); static void StorVscOnReceive( struct hv_device *Device, VSTOR_PACKET *VStorPacket, struct vstor_packet *VStorPacket, STORVSC_REQUEST_EXTENSION *RequestExt ); Loading Loading @@ -266,8 +266,8 @@ StorVscInitialize( DPRINT_ENTER(STORVSC); DPRINT_DBG(STORVSC, "sizeof(STORVSC_REQUEST)=%zd sizeof(STORVSC_REQUEST_EXTENSION)=%zd sizeof(VSTOR_PACKET)=%zd, sizeof(VMSCSI_REQUEST)=%zd", sizeof(struct hv_storvsc_request), sizeof(STORVSC_REQUEST_EXTENSION), sizeof(VSTOR_PACKET), sizeof(VMSCSI_REQUEST)); DPRINT_DBG(STORVSC, "sizeof(STORVSC_REQUEST)=%zd sizeof(STORVSC_REQUEST_EXTENSION)=%zd sizeof(struct vstor_packet)=%zd, sizeof(struct vmscsi_request)=%zd", sizeof(struct hv_storvsc_request), sizeof(STORVSC_REQUEST_EXTENSION), sizeof(struct vstor_packet), sizeof(struct vmscsi_request)); /* Make sure we are at least 2 pages since 1 page is used for control */ ASSERT(storDriver->RingBufferSize >= (PAGE_SIZE << 1)); Loading @@ -281,10 +281,10 @@ StorVscInitialize( * Divide the ring buffer data size (which is 1 page less * than the ring buffer size since that page is reserved for * the ring buffer indices) by the max request size (which is * VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER + VSTOR_PACKET + u64) * VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER + struct vstor_packet + u64) */ storDriver->MaxOutstandingRequestsPerChannel = ((storDriver->RingBufferSize - PAGE_SIZE) / ALIGN_UP(MAX_MULTIPAGE_BUFFER_PACKET + sizeof(VSTOR_PACKET) + sizeof(u64),sizeof(u64))); ((storDriver->RingBufferSize - PAGE_SIZE) / ALIGN_UP(MAX_MULTIPAGE_BUFFER_PACKET + sizeof(struct vstor_packet) + sizeof(u64),sizeof(u64))); DPRINT_INFO(STORVSC, "max io %u, currently %u\n", storDriver->MaxOutstandingRequestsPerChannel, STORVSC_MAX_IO_REQUESTS); Loading Loading @@ -318,7 +318,7 @@ StorVscOnDeviceAdd( { int ret=0; STORVSC_DEVICE *storDevice; /* VMSTORAGE_CHANNEL_PROPERTIES *props; */ /* struct vmstorage_channel_properties *props; */ STORVSC_DEVICE_INFO *deviceInfo = (STORVSC_DEVICE_INFO*)AdditionalInfo; DPRINT_ENTER(STORVSC); Loading @@ -331,7 +331,7 @@ StorVscOnDeviceAdd( } /* Save the channel properties to our storvsc channel */ /* props = (VMSTORAGE_CHANNEL_PROPERTIES*) channel->offerMsg.Offer.u.Standard.UserDefined; */ /* props = (struct vmstorage_channel_properties *) channel->offerMsg.Offer.u.Standard.UserDefined; */ /* FIXME: */ /* Loading Loading @@ -365,7 +365,7 @@ static int StorVscChannelInit(struct hv_device *Device) int ret=0; STORVSC_DEVICE *storDevice; STORVSC_REQUEST_EXTENSION *request; VSTOR_PACKET *vstorPacket; struct vstor_packet *vstorPacket; storDevice = GetStorDevice(Device); if (!storDevice) Loading Loading @@ -394,7 +394,7 @@ static int StorVscChannelInit(struct hv_device *Device) ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, vstorPacket, sizeof(VSTOR_PACKET), sizeof(struct vstor_packet), (unsigned long)request, VmbusPacketTypeDataInBand, VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); Loading @@ -415,7 +415,7 @@ static int StorVscChannelInit(struct hv_device *Device) DPRINT_INFO(STORVSC, "QUERY_PROTOCOL_VERSION_OPERATION..."); /* reuse the packet for version range supported */ memset(vstorPacket, sizeof(VSTOR_PACKET), 0); memset(vstorPacket, sizeof(struct vstor_packet), 0); vstorPacket->Operation = VStorOperationQueryProtocolVersion; vstorPacket->Flags = REQUEST_COMPLETION_FLAG; Loading @@ -424,7 +424,7 @@ static int StorVscChannelInit(struct hv_device *Device) ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, vstorPacket, sizeof(VSTOR_PACKET), sizeof(struct vstor_packet), (unsigned long)request, VmbusPacketTypeDataInBand, VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); Loading @@ -446,14 +446,14 @@ static int StorVscChannelInit(struct hv_device *Device) /* Query channel properties */ DPRINT_INFO(STORVSC, "QUERY_PROPERTIES_OPERATION..."); memset(vstorPacket, sizeof(VSTOR_PACKET), 0); memset(vstorPacket, sizeof(struct vstor_packet), 0); vstorPacket->Operation = VStorOperationQueryProperties; vstorPacket->Flags = REQUEST_COMPLETION_FLAG; vstorPacket->StorageChannelProperties.PortNumber = storDevice->PortNumber; ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, vstorPacket, sizeof(VSTOR_PACKET), sizeof(struct vstor_packet), (unsigned long)request, VmbusPacketTypeDataInBand, VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); Loading Loading @@ -481,13 +481,13 @@ static int StorVscChannelInit(struct hv_device *Device) DPRINT_INFO(STORVSC, "END_INITIALIZATION_OPERATION..."); memset(vstorPacket, sizeof(VSTOR_PACKET), 0); memset(vstorPacket, sizeof(struct vstor_packet), 0); vstorPacket->Operation = VStorOperationEndInitialization; vstorPacket->Flags = REQUEST_COMPLETION_FLAG; ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, vstorPacket, sizeof(VSTOR_PACKET), sizeof(struct vstor_packet), (unsigned long)request, VmbusPacketTypeDataInBand, VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); Loading Loading @@ -528,18 +528,18 @@ StorVscConnectToVsp( ) { int ret=0; VMSTORAGE_CHANNEL_PROPERTIES props; struct vmstorage_channel_properties props; STORVSC_DRIVER_OBJECT *storDriver = (STORVSC_DRIVER_OBJECT*) Device->Driver;; memset(&props, sizeof(VMSTORAGE_CHANNEL_PROPERTIES), 0); memset(&props, sizeof(struct vmstorage_channel_properties), 0); /* Open the channel */ ret = Device->Driver->VmbusChannelInterface.Open(Device, storDriver->RingBufferSize, storDriver->RingBufferSize, (void *)&props, sizeof(VMSTORAGE_CHANNEL_PROPERTIES), sizeof(struct vmstorage_channel_properties), StorVscOnChannelCallback, Device ); Loading Loading @@ -635,7 +635,7 @@ StorVscOnHostReset( STORVSC_DEVICE *storDevice; STORVSC_REQUEST_EXTENSION *request; VSTOR_PACKET *vstorPacket; struct vstor_packet *vstorPacket; DPRINT_ENTER(STORVSC); Loading @@ -660,7 +660,7 @@ StorVscOnHostReset( ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, vstorPacket, sizeof(VSTOR_PACKET), sizeof(struct vstor_packet), (unsigned long)&storDevice->ResetRequest, VmbusPacketTypeDataInBand, VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); Loading Loading @@ -704,7 +704,7 @@ StorVscOnIORequest( { STORVSC_DEVICE *storDevice; STORVSC_REQUEST_EXTENSION* requestExtension = (STORVSC_REQUEST_EXTENSION*) Request->Extension; VSTOR_PACKET* vstorPacket =&requestExtension->VStorPacket; struct vstor_packet *vstorPacket =&requestExtension->VStorPacket; int ret=0; DPRINT_ENTER(STORVSC); Loading @@ -729,11 +729,11 @@ StorVscOnIORequest( requestExtension->Request = Request; requestExtension->Device = Device; memset(vstorPacket, 0 , sizeof(VSTOR_PACKET)); memset(vstorPacket, 0 , sizeof(struct vstor_packet)); vstorPacket->Flags |= REQUEST_COMPLETION_FLAG; vstorPacket->VmSrb.Length = sizeof(VMSCSI_REQUEST); vstorPacket->VmSrb.Length = sizeof(struct vmscsi_request); vstorPacket->VmSrb.PortNumber = Request->Host; vstorPacket->VmSrb.PathId = Request->Bus; Loading Loading @@ -765,14 +765,14 @@ StorVscOnIORequest( ret = Device->Driver->VmbusChannelInterface.SendPacketMultiPageBuffer(Device, &requestExtension->Request->DataBuffer, vstorPacket, sizeof(VSTOR_PACKET), sizeof(struct vstor_packet), (unsigned long)requestExtension); } else { ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, vstorPacket, sizeof(VSTOR_PACKET), sizeof(struct vstor_packet), (unsigned long)requestExtension, VmbusPacketTypeDataInBand, VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); Loading Loading @@ -813,7 +813,7 @@ StorVscOnCleanup( static void StorVscOnIOCompletion( struct hv_device *Device, VSTOR_PACKET *VStorPacket, struct vstor_packet *VStorPacket, STORVSC_REQUEST_EXTENSION *RequestExt ) { Loading Loading @@ -883,7 +883,7 @@ StorVscOnIOCompletion( static void StorVscOnReceive( struct hv_device *Device, VSTOR_PACKET *VStorPacket, struct vstor_packet *VStorPacket, STORVSC_REQUEST_EXTENSION *RequestExt ) { Loading Loading @@ -924,7 +924,7 @@ StorVscOnChannelCallback( STORVSC_DEVICE *storDevice; u32 bytesRecvd; u64 requestId; unsigned char packet[ALIGN_UP(sizeof(VSTOR_PACKET),8)]; unsigned char packet[ALIGN_UP(sizeof(struct vstor_packet),8)]; STORVSC_REQUEST_EXTENSION *request; DPRINT_ENTER(STORVSC); Loading @@ -943,14 +943,14 @@ StorVscOnChannelCallback( { ret = device->Driver->VmbusChannelInterface.RecvPacket(device, packet, ALIGN_UP(sizeof(VSTOR_PACKET),8), ALIGN_UP(sizeof(struct vstor_packet),8), &bytesRecvd, &requestId); if (ret == 0 && bytesRecvd > 0) { DPRINT_DBG(STORVSC, "receive %d bytes - tid %llx", bytesRecvd, requestId); /* ASSERT(bytesRecvd == sizeof(VSTOR_PACKET)); */ /* ASSERT(bytesRecvd == sizeof(struct vstor_packet)); */ request = (STORVSC_REQUEST_EXTENSION*)(unsigned long)requestId; ASSERT(request); Loading @@ -960,13 +960,13 @@ StorVscOnChannelCallback( { /* DPRINT_INFO(STORVSC, "reset completion - operation %u status %u", vstorPacket.Operation, vstorPacket.Status); */ memcpy(&request->VStorPacket, packet, sizeof(VSTOR_PACKET)); memcpy(&request->VStorPacket, packet, sizeof(struct vstor_packet)); osd_WaitEventSet(request->WaitEvent); } else { StorVscOnReceive(device, (VSTOR_PACKET*)packet, request); StorVscOnReceive(device, (struct vstor_packet *)packet, request); } } else Loading drivers/staging/hv/vstorage.h +16 −28 Original line number Diff line number Diff line Loading @@ -21,8 +21,6 @@ * */ /* 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. */ Loading Loading @@ -61,12 +59,12 @@ /* 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))) sizeof(struct vstor_packet) + \ sizesizeof(u64) * (MAX_TRANSFER_LENGTH / PAGE_SIZE))) /* Packet structure describing virtual storage requests. */ typedef enum { enum vstor_packet_operation { VStorOperationCompleteIo = 1, VStorOperationRemoveDevice = 2, VStorOperationExecuteSRB = 3, Loading @@ -78,16 +76,13 @@ 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 */ #define CDB16GENERIC_LENGTH 0x10 #ifndef SENSE_BUFFER_SIZE Loading @@ -96,8 +91,7 @@ typedef enum { #define MAX_DATA_BUFFER_LENGTH_WITH_PADDING 0x14 typedef struct { struct vmscsi_request { unsigned short Length; unsigned char SrbStatus; unsigned char ScsiStatus; Loading @@ -121,14 +115,14 @@ typedef struct { unsigned char ReservedArray[MAX_DATA_BUFFER_LENGTH_WITH_PADDING]; }; } __attribute((packed)) VMSCSI_REQUEST, *PVMSCSI_REQUEST; } __attribute((packed)); /* * This structure is sent during the intialization phase to get the different * properties of the channel. */ typedef struct { struct vmstorage_channel_properties { unsigned short ProtocolVersion; unsigned char PathId; unsigned char TargetId; Loading @@ -141,10 +135,10 @@ typedef struct { /* This id is unique for each channel and will correspond with */ /* vendor specific data in the inquirydata */ unsigned long long UniqueId; } __attribute__((packed)) VMSTORAGE_CHANNEL_PROPERTIES, *PVMSTORAGE_CHANNEL_PROPERTIES; } __attribute__((packed)); /* This structure is sent during the storage protocol negotiations. */ typedef struct { struct vmstorage_protocol_version { /* Major (MSW) and minor (LSW) version numbers. */ unsigned short MajorMinor; Loading @@ -155,16 +149,15 @@ typedef struct { * builds. */ unsigned short Revision; } __attribute__((packed)) VMSTORAGE_PROTOCOL_VERSION, *PVMSTORAGE_PROTOCOL_VERSION; } __attribute__((packed)); /* Channel Property Flags */ #define STORAGE_CHANNEL_REMOVABLE_FLAG 0x1 #define STORAGE_CHANNEL_EMULATED_IDE_FLAG 0x2 typedef struct _VSTOR_PACKET { struct vstor_packet { /* Requested operation type */ VSTOR_PACKET_OPERATION Operation; enum vstor_packet_operation Operation; /* Flags - see below for values */ unsigned int Flags; Loading @@ -178,22 +171,17 @@ typedef struct _VSTOR_PACKET { * Structure used to forward SCSI commands from the * client to the server. */ VMSCSI_REQUEST VmSrb; struct vmscsi_request VmSrb; /* Structure used to query channel properties. */ VMSTORAGE_CHANNEL_PROPERTIES StorageChannelProperties; struct vmstorage_channel_properties StorageChannelProperties; /* Used during version negotiations. */ VMSTORAGE_PROTOCOL_VERSION Version; struct vmstorage_protocol_version Version; }; } __attribute__((packed)) VSTOR_PACKET, *PVSTOR_PACKET; } __attribute__((packed)); /* Packet flags */ /* * This flag indicates that the server should send back a completion for this * packet. Loading Loading
drivers/staging/hv/BlkVsc.c +2 −2 Original line number Diff line number Diff line Loading @@ -61,9 +61,9 @@ BlkVscInitialize( storDriver->RequestExtSize = sizeof(STORVSC_REQUEST_EXTENSION); /* Divide the ring buffer data size (which is 1 page less than the ring buffer size since that page is reserved for the ring buffer indices) */ /* by the max request size (which is VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER + VSTOR_PACKET + u64) */ /* by the max request size (which is VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER + struct vstor_packet + u64) */ storDriver->MaxOutstandingRequestsPerChannel = ((storDriver->RingBufferSize - PAGE_SIZE) / ALIGN_UP(MAX_MULTIPAGE_BUFFER_PACKET + sizeof(VSTOR_PACKET) + sizeof(u64),sizeof(u64))); ((storDriver->RingBufferSize - PAGE_SIZE) / ALIGN_UP(MAX_MULTIPAGE_BUFFER_PACKET + sizeof(struct vstor_packet) + sizeof(u64),sizeof(u64))); DPRINT_INFO(BLKVSC, "max io outstd %u", storDriver->MaxOutstandingRequestsPerChannel); Loading
drivers/staging/hv/StorVsc.c +34 −34 Original line number Diff line number Diff line Loading @@ -49,7 +49,7 @@ typedef struct _STORVSC_REQUEST_EXTENSION { /* Synchronize the request/response if needed */ struct osd_waitevent *WaitEvent; VSTOR_PACKET VStorPacket; struct vstor_packet VStorPacket; } STORVSC_REQUEST_EXTENSION; Loading Loading @@ -132,14 +132,14 @@ StorVscOnChannelCallback( static void StorVscOnIOCompletion( struct hv_device *Device, VSTOR_PACKET *VStorPacket, struct vstor_packet *VStorPacket, STORVSC_REQUEST_EXTENSION *RequestExt ); static void StorVscOnReceive( struct hv_device *Device, VSTOR_PACKET *VStorPacket, struct vstor_packet *VStorPacket, STORVSC_REQUEST_EXTENSION *RequestExt ); Loading Loading @@ -266,8 +266,8 @@ StorVscInitialize( DPRINT_ENTER(STORVSC); DPRINT_DBG(STORVSC, "sizeof(STORVSC_REQUEST)=%zd sizeof(STORVSC_REQUEST_EXTENSION)=%zd sizeof(VSTOR_PACKET)=%zd, sizeof(VMSCSI_REQUEST)=%zd", sizeof(struct hv_storvsc_request), sizeof(STORVSC_REQUEST_EXTENSION), sizeof(VSTOR_PACKET), sizeof(VMSCSI_REQUEST)); DPRINT_DBG(STORVSC, "sizeof(STORVSC_REQUEST)=%zd sizeof(STORVSC_REQUEST_EXTENSION)=%zd sizeof(struct vstor_packet)=%zd, sizeof(struct vmscsi_request)=%zd", sizeof(struct hv_storvsc_request), sizeof(STORVSC_REQUEST_EXTENSION), sizeof(struct vstor_packet), sizeof(struct vmscsi_request)); /* Make sure we are at least 2 pages since 1 page is used for control */ ASSERT(storDriver->RingBufferSize >= (PAGE_SIZE << 1)); Loading @@ -281,10 +281,10 @@ StorVscInitialize( * Divide the ring buffer data size (which is 1 page less * than the ring buffer size since that page is reserved for * the ring buffer indices) by the max request size (which is * VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER + VSTOR_PACKET + u64) * VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER + struct vstor_packet + u64) */ storDriver->MaxOutstandingRequestsPerChannel = ((storDriver->RingBufferSize - PAGE_SIZE) / ALIGN_UP(MAX_MULTIPAGE_BUFFER_PACKET + sizeof(VSTOR_PACKET) + sizeof(u64),sizeof(u64))); ((storDriver->RingBufferSize - PAGE_SIZE) / ALIGN_UP(MAX_MULTIPAGE_BUFFER_PACKET + sizeof(struct vstor_packet) + sizeof(u64),sizeof(u64))); DPRINT_INFO(STORVSC, "max io %u, currently %u\n", storDriver->MaxOutstandingRequestsPerChannel, STORVSC_MAX_IO_REQUESTS); Loading Loading @@ -318,7 +318,7 @@ StorVscOnDeviceAdd( { int ret=0; STORVSC_DEVICE *storDevice; /* VMSTORAGE_CHANNEL_PROPERTIES *props; */ /* struct vmstorage_channel_properties *props; */ STORVSC_DEVICE_INFO *deviceInfo = (STORVSC_DEVICE_INFO*)AdditionalInfo; DPRINT_ENTER(STORVSC); Loading @@ -331,7 +331,7 @@ StorVscOnDeviceAdd( } /* Save the channel properties to our storvsc channel */ /* props = (VMSTORAGE_CHANNEL_PROPERTIES*) channel->offerMsg.Offer.u.Standard.UserDefined; */ /* props = (struct vmstorage_channel_properties *) channel->offerMsg.Offer.u.Standard.UserDefined; */ /* FIXME: */ /* Loading Loading @@ -365,7 +365,7 @@ static int StorVscChannelInit(struct hv_device *Device) int ret=0; STORVSC_DEVICE *storDevice; STORVSC_REQUEST_EXTENSION *request; VSTOR_PACKET *vstorPacket; struct vstor_packet *vstorPacket; storDevice = GetStorDevice(Device); if (!storDevice) Loading Loading @@ -394,7 +394,7 @@ static int StorVscChannelInit(struct hv_device *Device) ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, vstorPacket, sizeof(VSTOR_PACKET), sizeof(struct vstor_packet), (unsigned long)request, VmbusPacketTypeDataInBand, VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); Loading @@ -415,7 +415,7 @@ static int StorVscChannelInit(struct hv_device *Device) DPRINT_INFO(STORVSC, "QUERY_PROTOCOL_VERSION_OPERATION..."); /* reuse the packet for version range supported */ memset(vstorPacket, sizeof(VSTOR_PACKET), 0); memset(vstorPacket, sizeof(struct vstor_packet), 0); vstorPacket->Operation = VStorOperationQueryProtocolVersion; vstorPacket->Flags = REQUEST_COMPLETION_FLAG; Loading @@ -424,7 +424,7 @@ static int StorVscChannelInit(struct hv_device *Device) ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, vstorPacket, sizeof(VSTOR_PACKET), sizeof(struct vstor_packet), (unsigned long)request, VmbusPacketTypeDataInBand, VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); Loading @@ -446,14 +446,14 @@ static int StorVscChannelInit(struct hv_device *Device) /* Query channel properties */ DPRINT_INFO(STORVSC, "QUERY_PROPERTIES_OPERATION..."); memset(vstorPacket, sizeof(VSTOR_PACKET), 0); memset(vstorPacket, sizeof(struct vstor_packet), 0); vstorPacket->Operation = VStorOperationQueryProperties; vstorPacket->Flags = REQUEST_COMPLETION_FLAG; vstorPacket->StorageChannelProperties.PortNumber = storDevice->PortNumber; ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, vstorPacket, sizeof(VSTOR_PACKET), sizeof(struct vstor_packet), (unsigned long)request, VmbusPacketTypeDataInBand, VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); Loading Loading @@ -481,13 +481,13 @@ static int StorVscChannelInit(struct hv_device *Device) DPRINT_INFO(STORVSC, "END_INITIALIZATION_OPERATION..."); memset(vstorPacket, sizeof(VSTOR_PACKET), 0); memset(vstorPacket, sizeof(struct vstor_packet), 0); vstorPacket->Operation = VStorOperationEndInitialization; vstorPacket->Flags = REQUEST_COMPLETION_FLAG; ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, vstorPacket, sizeof(VSTOR_PACKET), sizeof(struct vstor_packet), (unsigned long)request, VmbusPacketTypeDataInBand, VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); Loading Loading @@ -528,18 +528,18 @@ StorVscConnectToVsp( ) { int ret=0; VMSTORAGE_CHANNEL_PROPERTIES props; struct vmstorage_channel_properties props; STORVSC_DRIVER_OBJECT *storDriver = (STORVSC_DRIVER_OBJECT*) Device->Driver;; memset(&props, sizeof(VMSTORAGE_CHANNEL_PROPERTIES), 0); memset(&props, sizeof(struct vmstorage_channel_properties), 0); /* Open the channel */ ret = Device->Driver->VmbusChannelInterface.Open(Device, storDriver->RingBufferSize, storDriver->RingBufferSize, (void *)&props, sizeof(VMSTORAGE_CHANNEL_PROPERTIES), sizeof(struct vmstorage_channel_properties), StorVscOnChannelCallback, Device ); Loading Loading @@ -635,7 +635,7 @@ StorVscOnHostReset( STORVSC_DEVICE *storDevice; STORVSC_REQUEST_EXTENSION *request; VSTOR_PACKET *vstorPacket; struct vstor_packet *vstorPacket; DPRINT_ENTER(STORVSC); Loading @@ -660,7 +660,7 @@ StorVscOnHostReset( ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, vstorPacket, sizeof(VSTOR_PACKET), sizeof(struct vstor_packet), (unsigned long)&storDevice->ResetRequest, VmbusPacketTypeDataInBand, VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); Loading Loading @@ -704,7 +704,7 @@ StorVscOnIORequest( { STORVSC_DEVICE *storDevice; STORVSC_REQUEST_EXTENSION* requestExtension = (STORVSC_REQUEST_EXTENSION*) Request->Extension; VSTOR_PACKET* vstorPacket =&requestExtension->VStorPacket; struct vstor_packet *vstorPacket =&requestExtension->VStorPacket; int ret=0; DPRINT_ENTER(STORVSC); Loading @@ -729,11 +729,11 @@ StorVscOnIORequest( requestExtension->Request = Request; requestExtension->Device = Device; memset(vstorPacket, 0 , sizeof(VSTOR_PACKET)); memset(vstorPacket, 0 , sizeof(struct vstor_packet)); vstorPacket->Flags |= REQUEST_COMPLETION_FLAG; vstorPacket->VmSrb.Length = sizeof(VMSCSI_REQUEST); vstorPacket->VmSrb.Length = sizeof(struct vmscsi_request); vstorPacket->VmSrb.PortNumber = Request->Host; vstorPacket->VmSrb.PathId = Request->Bus; Loading Loading @@ -765,14 +765,14 @@ StorVscOnIORequest( ret = Device->Driver->VmbusChannelInterface.SendPacketMultiPageBuffer(Device, &requestExtension->Request->DataBuffer, vstorPacket, sizeof(VSTOR_PACKET), sizeof(struct vstor_packet), (unsigned long)requestExtension); } else { ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, vstorPacket, sizeof(VSTOR_PACKET), sizeof(struct vstor_packet), (unsigned long)requestExtension, VmbusPacketTypeDataInBand, VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); Loading Loading @@ -813,7 +813,7 @@ StorVscOnCleanup( static void StorVscOnIOCompletion( struct hv_device *Device, VSTOR_PACKET *VStorPacket, struct vstor_packet *VStorPacket, STORVSC_REQUEST_EXTENSION *RequestExt ) { Loading Loading @@ -883,7 +883,7 @@ StorVscOnIOCompletion( static void StorVscOnReceive( struct hv_device *Device, VSTOR_PACKET *VStorPacket, struct vstor_packet *VStorPacket, STORVSC_REQUEST_EXTENSION *RequestExt ) { Loading Loading @@ -924,7 +924,7 @@ StorVscOnChannelCallback( STORVSC_DEVICE *storDevice; u32 bytesRecvd; u64 requestId; unsigned char packet[ALIGN_UP(sizeof(VSTOR_PACKET),8)]; unsigned char packet[ALIGN_UP(sizeof(struct vstor_packet),8)]; STORVSC_REQUEST_EXTENSION *request; DPRINT_ENTER(STORVSC); Loading @@ -943,14 +943,14 @@ StorVscOnChannelCallback( { ret = device->Driver->VmbusChannelInterface.RecvPacket(device, packet, ALIGN_UP(sizeof(VSTOR_PACKET),8), ALIGN_UP(sizeof(struct vstor_packet),8), &bytesRecvd, &requestId); if (ret == 0 && bytesRecvd > 0) { DPRINT_DBG(STORVSC, "receive %d bytes - tid %llx", bytesRecvd, requestId); /* ASSERT(bytesRecvd == sizeof(VSTOR_PACKET)); */ /* ASSERT(bytesRecvd == sizeof(struct vstor_packet)); */ request = (STORVSC_REQUEST_EXTENSION*)(unsigned long)requestId; ASSERT(request); Loading @@ -960,13 +960,13 @@ StorVscOnChannelCallback( { /* DPRINT_INFO(STORVSC, "reset completion - operation %u status %u", vstorPacket.Operation, vstorPacket.Status); */ memcpy(&request->VStorPacket, packet, sizeof(VSTOR_PACKET)); memcpy(&request->VStorPacket, packet, sizeof(struct vstor_packet)); osd_WaitEventSet(request->WaitEvent); } else { StorVscOnReceive(device, (VSTOR_PACKET*)packet, request); StorVscOnReceive(device, (struct vstor_packet *)packet, request); } } else Loading
drivers/staging/hv/vstorage.h +16 −28 Original line number Diff line number Diff line Loading @@ -21,8 +21,6 @@ * */ /* 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. */ Loading Loading @@ -61,12 +59,12 @@ /* 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))) sizeof(struct vstor_packet) + \ sizesizeof(u64) * (MAX_TRANSFER_LENGTH / PAGE_SIZE))) /* Packet structure describing virtual storage requests. */ typedef enum { enum vstor_packet_operation { VStorOperationCompleteIo = 1, VStorOperationRemoveDevice = 2, VStorOperationExecuteSRB = 3, Loading @@ -78,16 +76,13 @@ 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 */ #define CDB16GENERIC_LENGTH 0x10 #ifndef SENSE_BUFFER_SIZE Loading @@ -96,8 +91,7 @@ typedef enum { #define MAX_DATA_BUFFER_LENGTH_WITH_PADDING 0x14 typedef struct { struct vmscsi_request { unsigned short Length; unsigned char SrbStatus; unsigned char ScsiStatus; Loading @@ -121,14 +115,14 @@ typedef struct { unsigned char ReservedArray[MAX_DATA_BUFFER_LENGTH_WITH_PADDING]; }; } __attribute((packed)) VMSCSI_REQUEST, *PVMSCSI_REQUEST; } __attribute((packed)); /* * This structure is sent during the intialization phase to get the different * properties of the channel. */ typedef struct { struct vmstorage_channel_properties { unsigned short ProtocolVersion; unsigned char PathId; unsigned char TargetId; Loading @@ -141,10 +135,10 @@ typedef struct { /* This id is unique for each channel and will correspond with */ /* vendor specific data in the inquirydata */ unsigned long long UniqueId; } __attribute__((packed)) VMSTORAGE_CHANNEL_PROPERTIES, *PVMSTORAGE_CHANNEL_PROPERTIES; } __attribute__((packed)); /* This structure is sent during the storage protocol negotiations. */ typedef struct { struct vmstorage_protocol_version { /* Major (MSW) and minor (LSW) version numbers. */ unsigned short MajorMinor; Loading @@ -155,16 +149,15 @@ typedef struct { * builds. */ unsigned short Revision; } __attribute__((packed)) VMSTORAGE_PROTOCOL_VERSION, *PVMSTORAGE_PROTOCOL_VERSION; } __attribute__((packed)); /* Channel Property Flags */ #define STORAGE_CHANNEL_REMOVABLE_FLAG 0x1 #define STORAGE_CHANNEL_EMULATED_IDE_FLAG 0x2 typedef struct _VSTOR_PACKET { struct vstor_packet { /* Requested operation type */ VSTOR_PACKET_OPERATION Operation; enum vstor_packet_operation Operation; /* Flags - see below for values */ unsigned int Flags; Loading @@ -178,22 +171,17 @@ typedef struct _VSTOR_PACKET { * Structure used to forward SCSI commands from the * client to the server. */ VMSCSI_REQUEST VmSrb; struct vmscsi_request VmSrb; /* Structure used to query channel properties. */ VMSTORAGE_CHANNEL_PROPERTIES StorageChannelProperties; struct vmstorage_channel_properties StorageChannelProperties; /* Used during version negotiations. */ VMSTORAGE_PROTOCOL_VERSION Version; struct vmstorage_protocol_version Version; }; } __attribute__((packed)) VSTOR_PACKET, *PVSTOR_PACKET; } __attribute__((packed)); /* Packet flags */ /* * This flag indicates that the server should send back a completion for this * packet. Loading