diff --git a/drivers/staging/hv/include/VmbusPacketFormat.h b/drivers/staging/hv/include/VmbusPacketFormat.h
index f6600a9..d7f65de 100644
--- a/drivers/staging/hv/include/VmbusPacketFormat.h
+++ b/drivers/staging/hv/include/VmbusPacketFormat.h
@@ -21,300 +21,148 @@
  *
  */
 
+#ifndef _VMBUSPACKETFORMAT_H_
 
-#pragma once
-
-/* #ifndef PAGE_SIZE */
-/* #if defined(_IA64_) */
-/* #error This does not work for IA64 */
-/* #else */
-/* #define PAGE_SIZE 0x1000 */
-/* #endif */
-/* #endif */
-
-/* allow nameless unions */
-/* #pragma warning(disable : 4201) */
-
-typedef struct
-{
-    union
-    {
-	struct
-	{
-	    volatile u32  In;        /* Offset in bytes from the ring base */
-	    volatile u32  Out;       /* Offset in bytes from the ring base */
-	};
-	volatile long long InOut;
-    };
-
-
-    /* If the receiving endpoint sets this to some non-zero value, the sending */
-    /* endpoint should not send any interrupts. */
-
-
-    volatile u32 InterruptMask;
-
-} VMRCB, *PVMRCB;
-
-typedef struct
-{
-    union
-    {
-	struct
-	{
-	    VMRCB Control;
-	};
-
-	u8 Reserved[PAGE_SIZE];
-    };
-
-
-    /* Beginning of the ring data.  Note: It must be guaranteed that */
-    /* this data does not share a page with the control structure. */
-
-    u8 Data[1];
-} VMRING, *PVMRING;
-
-#pragma pack(push, 1)
-
-typedef struct
-{
-    u16 Type;
-    u16 DataOffset8;
-    u16 Length8;
-    u16 Flags;
-    u64 TransactionId;
-} VMPACKET_DESCRIPTOR, *PVMPACKET_DESCRIPTOR;
+typedef struct {
+	u16 Type;
+	u16 DataOffset8;
+	u16 Length8;
+	u16 Flags;
+	u64 TransactionId;
+} __attribute__((packed)) VMPACKET_DESCRIPTOR, *PVMPACKET_DESCRIPTOR;
 
 typedef u32 PREVIOUS_PACKET_OFFSET, *PPREVIOUS_PACKET_OFFSET;
 
-typedef struct
-{
-    PREVIOUS_PACKET_OFFSET  PreviousPacketStartOffset;
-    VMPACKET_DESCRIPTOR     Descriptor;
-} VMPACKET_HEADER, *PVMPACKET_HEADER;
+typedef struct {
+	PREVIOUS_PACKET_OFFSET PreviousPacketStartOffset;
+	VMPACKET_DESCRIPTOR Descriptor;
+} __attribute__((packed)) VMPACKET_HEADER, *PVMPACKET_HEADER;
 
-typedef struct
-{
-    u32  ByteCount;
-    u32  ByteOffset;
-} VMTRANSFER_PAGE_RANGE, *PVMTRANSFER_PAGE_RANGE;
-
-#ifdef __cplusplus
-
-typedef struct _VMTRANSFER_PAGE_PACKET_HEADER : VMPACKET_DESCRIPTOR {
-
-#else
+typedef struct {
+	u32 ByteCount;
+	u32 ByteOffset;
+} __attribute__((packed)) VMTRANSFER_PAGE_RANGE, *PVMTRANSFER_PAGE_RANGE;
 
 typedef struct VMTRANSFER_PAGE_PACKET_HEADER {
-
-    VMPACKET_DESCRIPTOR d;
-
-#endif
-
-    u16                  TransferPageSetId;
-    bool                 SenderOwnsSet;
-    u8                   Reserved;
-    u32                  RangeCount;
-    VMTRANSFER_PAGE_RANGE   Ranges[1];
-
-} VMTRANSFER_PAGE_PACKET_HEADER, *PVMTRANSFER_PAGE_PACKET_HEADER;
-
-
-#ifdef __cplusplus
-
-typedef struct _VMGPADL_PACKET_HEADER : VMPACKET_DESCRIPTOR {
-
-#else
+	VMPACKET_DESCRIPTOR d;
+	u16 TransferPageSetId;
+	bool SenderOwnsSet;
+	u8 Reserved;
+	u32 RangeCount;
+	VMTRANSFER_PAGE_RANGE Ranges[1];
+} __attribute__((packed)) VMTRANSFER_PAGE_PACKET_HEADER, *PVMTRANSFER_PAGE_PACKET_HEADER;
 
 typedef struct _VMGPADL_PACKET_HEADER {
-
-    VMPACKET_DESCRIPTOR d;
-
-#endif
-
-
-    u32  Gpadl;
-    u32  Reserved;
-
-} VMGPADL_PACKET_HEADER, *PVMGPADL_PACKET_HEADER;
-
-#ifdef __cplusplus
-
-typedef struct _VMADD_REMOVE_TRANSFER_PAGE_SET : VMPACKET_DESCRIPTOR {
-
-#else
+	VMPACKET_DESCRIPTOR d;
+	u32 Gpadl;
+	u32 Reserved;
+} __attribute__((packed)) VMGPADL_PACKET_HEADER, *PVMGPADL_PACKET_HEADER;
 
 typedef struct _VMADD_REMOVE_TRANSFER_PAGE_SET {
+	VMPACKET_DESCRIPTOR d;
+	u32 Gpadl;
+	u16 TransferPageSetId;
+	u16 Reserved;
+} __attribute__((packed)) VMADD_REMOVE_TRANSFER_PAGE_SET, *PVMADD_REMOVE_TRANSFER_PAGE_SET;
 
-    VMPACKET_DESCRIPTOR d;
-
-#endif
-
-    u32  Gpadl;
-    u16  TransferPageSetId;
-    u16  Reserved;
-
-} VMADD_REMOVE_TRANSFER_PAGE_SET, *PVMADD_REMOVE_TRANSFER_PAGE_SET;
-
-#pragma pack(pop)
-
-
-/* This structure defines a range in guest physical space that can be made */
-/* to look virtually contiguous. */
-
-
+/*
+ * This structure defines a range in guest physical space that can be made to
+ * look virtually contiguous.
+ */
 typedef struct _GPA_RANGE {
-
-    u32  ByteCount;
-    u32  ByteOffset;
-    u64  PfnArray[0];
-
+	u32 ByteCount;
+	u32 ByteOffset;
+	u64 PfnArray[0];
 } GPA_RANGE, *PGPA_RANGE;
 
-
-
-#pragma pack(push, 1)
-
-
-/* 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. */
-
-
-#ifdef __cplusplus
-
-typedef struct _VMESTABLISH_GPADL : VMPACKET_DESCRIPTOR {
-
-#else
-
+/*
+ * 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.
+ */
 typedef struct _VMESTABLISH_GPADL {
+	VMPACKET_DESCRIPTOR d;
+	u32 Gpadl;
+	u32 RangeCount;
+	GPA_RANGE Range[1];
+} __attribute__((packed)) VMESTABLISH_GPADL, *PVMESTABLISH_GPADL;
 
-    VMPACKET_DESCRIPTOR d;
-
-#endif
-
-    u32      Gpadl;
-    u32      RangeCount;
-    GPA_RANGE   Range[1];
-
-} VMESTABLISH_GPADL, *PVMESTABLISH_GPADL;
-
-
-
-/* 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. */
-
-
-#ifdef __cplusplus
-
-typedef struct _VMTEARDOWN_GPADL : VMPACKET_DESCRIPTOR {
-
-#else
-
+/*
+ * 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.
+ */
 typedef struct _VMTEARDOWN_GPADL {
+	VMPACKET_DESCRIPTOR d;
+	u32 Gpadl;
+	u32 Reserved;	/* for alignment to a 8-byte boundary */
+} __attribute__((packed)) VMTEARDOWN_GPADL, *PVMTEARDOWN_GPADL;
 
-    VMPACKET_DESCRIPTOR d;
-
-#endif
-
-    u32  Gpadl;
-    u32  Reserved; /* for alignment to a 8-byte boundary */
-} VMTEARDOWN_GPADL, *PVMTEARDOWN_GPADL;
-
-
-
-/* This is the format for a GPA-Direct packet, which contains a set of GPA */
-/* ranges, in addition to commands and/or data. */
-
-
-#ifdef __cplusplus
-
-typedef struct _VMDATA_GPA_DIRECT : VMPACKET_DESCRIPTOR {
-
-#else
-
+/*
+ * This is the format for a GPA-Direct packet, which contains a set of GPA
+ * ranges, in addition to commands and/or data.
+ */
 typedef struct _VMDATA_GPA_DIRECT {
-
-    VMPACKET_DESCRIPTOR d;
-
-#endif
-
-    u32      Reserved;
-    u32      RangeCount;
-    GPA_RANGE   Range[1];
-
-} VMDATA_GPA_DIRECT, *PVMDATA_GPA_DIRECT;
-
-
-
+	VMPACKET_DESCRIPTOR d;
+	u32 Reserved;
+	u32 RangeCount;
+	GPA_RANGE Range[1];
+} __attribute__((packed)) VMDATA_GPA_DIRECT, *PVMDATA_GPA_DIRECT;
 
 /* This is the format for a Additional Data Packet. */
-
-
-#ifdef __cplusplus
-
-typedef struct _VMADDITIONAL_DATA : VMPACKET_DESCRIPTOR {
-
-#else
-
 typedef struct _VMADDITIONAL_DATA {
-
-    VMPACKET_DESCRIPTOR d;
-
-#endif
-
-    u64  TotalBytes;
-    u32  ByteOffset;
-    u32  ByteCount;
-    unsigned char   Data[1];
-
-} VMADDITIONAL_DATA, *PVMADDITIONAL_DATA;
-
-
-#pragma pack(pop)
+	VMPACKET_DESCRIPTOR d;
+	u64 TotalBytes;
+	u32 ByteOffset;
+	u32 ByteCount;
+	unsigned char Data[1];
+} __attribute__((packed)) VMADDITIONAL_DATA, *PVMADDITIONAL_DATA;
 
 typedef union {
-    VMPACKET_DESCRIPTOR             SimpleHeader;
-    VMTRANSFER_PAGE_PACKET_HEADER   TransferPageHeader;
-    VMGPADL_PACKET_HEADER           GpadlHeader;
-    VMADD_REMOVE_TRANSFER_PAGE_SET  AddRemoveTransferPageHeader;
-    VMESTABLISH_GPADL               EstablishGpadlHeader;
-    VMTEARDOWN_GPADL                TeardownGpadlHeader;
-    VMDATA_GPA_DIRECT               DataGpaDirectHeader;
+	VMPACKET_DESCRIPTOR SimpleHeader;
+	VMTRANSFER_PAGE_PACKET_HEADER TransferPageHeader;
+	VMGPADL_PACKET_HEADER GpadlHeader;
+	VMADD_REMOVE_TRANSFER_PAGE_SET AddRemoveTransferPageHeader;
+	VMESTABLISH_GPADL EstablishGpadlHeader;
+	VMTEARDOWN_GPADL TeardownGpadlHeader;
+	VMDATA_GPA_DIRECT DataGpaDirectHeader;
 } VMPACKET_LARGEST_POSSIBLE_HEADER, *PVMPACKET_LARGEST_POSSIBLE_HEADER;
 
-#define VMPACKET_DATA_START_ADDRESS(__packet)                           \
-    (void *)(((unsigned char *)__packet) + ((PVMPACKET_DESCRIPTOR)__packet)->DataOffset8 * 8)
+#define VMPACKET_DATA_START_ADDRESS(__packet)	\
+	(void *)(((unsigned char *)__packet) +	\
+	 ((PVMPACKET_DESCRIPTOR)__packet)->DataOffset8 * 8)
 
-#define VMPACKET_DATA_LENGTH(__packet)                                  \
-    ((((PVMPACKET_DESCRIPTOR)__packet)->Length8 - ((PVMPACKET_DESCRIPTOR)__packet)->DataOffset8) * 8)
+#define VMPACKET_DATA_LENGTH(__packet)		\
+	((((PVMPACKET_DESCRIPTOR)__packet)->Length8 -	\
+	  ((PVMPACKET_DESCRIPTOR)__packet)->DataOffset8) * 8)
 
-#define VMPACKET_TRANSFER_MODE(__packet) ((PVMPACKET_DESCRIPTOR)__packet)->Type
+#define VMPACKET_TRANSFER_MODE(__packet)	\
+	(((PVMPACKET_DESCRIPTOR)__packet)->Type)
 
 typedef enum {
-    VmbusServerEndpoint = 0,
-    VmbusClientEndpoint,
-    VmbusEndpointMaximum
+	VmbusServerEndpoint = 0,
+	VmbusClientEndpoint,
+	VmbusEndpointMaximum
 } ENDPOINT_TYPE, *PENDPOINT_TYPE;
 
 typedef enum {
-    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
+	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
 } VMBUS_PACKET_TYPE, *PVMBUS_PACKET_TYPE;
 
-#define VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED    1
+#define VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED	1
+
+#endif
