diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2010-05-05 22:50:11 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-05-11 11:36:18 -0700 |
commit | f8e5add2284b6373b3ba994c716a4792483e69eb (patch) | |
tree | 6f4e0515ec5300c26510447c04913b495afbacd1 /drivers/staging/hv/vmbus_packet_format.h | |
parent | 0e0ab5f5af2cea05a3f7526fb05585f5cbe8a106 (diff) | |
download | op-kernel-dev-f8e5add2284b6373b3ba994c716a4792483e69eb.zip op-kernel-dev-f8e5add2284b6373b3ba994c716a4792483e69eb.tar.gz |
Staging: hv: rename VmbusPacketFormat.h to vmbus_packet_format.h
Cc: Hank Janssen <hjanssen@microsoft.com>
Cc: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/hv/vmbus_packet_format.h')
-rw-r--r-- | drivers/staging/hv/vmbus_packet_format.h | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/drivers/staging/hv/vmbus_packet_format.h b/drivers/staging/hv/vmbus_packet_format.h new file mode 100644 index 0000000..f9f6b4b --- /dev/null +++ b/drivers/staging/hv/vmbus_packet_format.h @@ -0,0 +1,161 @@ +/* + * + * 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> + * + */ + +#ifndef _VMBUSPACKETFORMAT_H_ +#define _VMBUSPACKETFORMAT_H_ + +struct vmpacket_descriptor { + u16 Type; + u16 DataOffset8; + u16 Length8; + u16 Flags; + u64 TransactionId; +} __attribute__((packed)); + +struct vmpacket_header { + u32 PreviousPacketStartOffset; + struct vmpacket_descriptor Descriptor; +} __attribute__((packed)); + +struct vmtransfer_page_range { + u32 ByteCount; + u32 ByteOffset; +} __attribute__((packed)); + +struct vmtransfer_page_packet_header { + struct vmpacket_descriptor d; + u16 TransferPageSetId; + bool SenderOwnsSet; + u8 Reserved; + u32 RangeCount; + struct vmtransfer_page_range Ranges[1]; +} __attribute__((packed)); + +struct vmgpadl_packet_header { + struct vmpacket_descriptor d; + u32 Gpadl; + u32 Reserved; +} __attribute__((packed)); + +struct vmadd_remove_transfer_page_set { + struct vmpacket_descriptor d; + u32 Gpadl; + u16 TransferPageSetId; + u16 Reserved; +} __attribute__((packed)); + +/* + * This structure defines a range in guest physical space that can be made to + * look virtually contiguous. + */ +struct gpa_range { + u32 ByteCount; + u32 ByteOffset; + u64 PfnArray[0]; +}; + +/* + * This is the format for an Establish Gpadl packet, which contains a handle by + * which this GPADL will be known and a set of GPA ranges associated with it. + * This can be converted to a MDL by the guest OS. If there are multiple GPA + * ranges, then the resulting MDL will be "chained," representing multiple VA + * ranges. + */ +struct vmestablish_gpadl { + struct vmpacket_descriptor d; + u32 Gpadl; + u32 RangeCount; + struct gpa_range Range[1]; +} __attribute__((packed)); + +/* + * This is the format for a Teardown Gpadl packet, which indicates that the + * GPADL handle in the Establish Gpadl packet will never be referenced again. + */ +struct vmteardown_gpadl { + struct vmpacket_descriptor d; + u32 Gpadl; + u32 Reserved; /* for alignment to a 8-byte boundary */ +} __attribute__((packed)); + +/* + * This is the format for a GPA-Direct packet, which contains a set of GPA + * ranges, in addition to commands and/or data. + */ +struct vmdata_gpa_direct { + struct vmpacket_descriptor d; + u32 Reserved; + u32 RangeCount; + struct gpa_range Range[1]; +} __attribute__((packed)); + +/* This is the format for a Additional Data Packet. */ +struct vmadditional_data { + struct vmpacket_descriptor d; + u64 TotalBytes; + u32 ByteOffset; + u32 ByteCount; + unsigned char Data[1]; +} __attribute__((packed)); + +union vmpacket_largest_possible_header { + struct vmpacket_descriptor SimpleHeader; + struct vmtransfer_page_packet_header TransferPageHeader; + struct vmgpadl_packet_header GpadlHeader; + struct vmadd_remove_transfer_page_set AddRemoveTransferPageHeader; + struct vmestablish_gpadl EstablishGpadlHeader; + struct vmteardown_gpadl TeardownGpadlHeader; + struct vmdata_gpa_direct DataGpaDirectHeader; +}; + +#define VMPACKET_DATA_START_ADDRESS(__packet) \ + (void *)(((unsigned char *)__packet) + \ + ((struct vmpacket_descriptor)__packet)->DataOffset8 * 8) + +#define VMPACKET_DATA_LENGTH(__packet) \ + ((((struct vmpacket_descriptor)__packet)->Length8 - \ + ((struct vmpacket_descriptor)__packet)->DataOffset8) * 8) + +#define VMPACKET_TRANSFER_MODE(__packet) \ + (((struct IMPACT)__packet)->Type) + +enum vmbus_packet_type { + VmbusPacketTypeInvalid = 0x0, + VmbusPacketTypeSynch = 0x1, + VmbusPacketTypeAddTransferPageSet = 0x2, + VmbusPacketTypeRemoveTransferPageSet = 0x3, + VmbusPacketTypeEstablishGpadl = 0x4, + VmbusPacketTypeTearDownGpadl = 0x5, + VmbusPacketTypeDataInBand = 0x6, + VmbusPacketTypeDataUsingTransferPages = 0x7, + VmbusPacketTypeDataUsingGpadl = 0x8, + VmbusPacketTypeDataUsingGpaDirect = 0x9, + VmbusPacketTypeCancelRequest = 0xa, + VmbusPacketTypeCompletion = 0xb, + VmbusPacketTypeDataUsingAdditionalPackets = 0xc, + VmbusPacketTypeAdditionalData = 0xd +}; + +#define VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED 1 + +#endif |