diff --git a/drivers/staging/hv/include/nvspprotocol.h b/drivers/staging/hv/include/nvspprotocol.h
index 5e7e03c..03fbb42 100644
--- a/drivers/staging/hv/include/nvspprotocol.h
+++ b/drivers/staging/hv/include/nvspprotocol.h
@@ -21,286 +21,242 @@
  *
  */
 
-
-#pragma once
-
 #include "VmbusChannelInterface.h"
 
-#define NVSP_INVALID_PROTOCOL_VERSION           ((u32)0xFFFFFFFF)
+#define NVSP_INVALID_PROTOCOL_VERSION	((u32)0xFFFFFFFF)
 
-#define NVSP_PROTOCOL_VERSION_1                 2
-#define NVSP_MIN_PROTOCOL_VERSION               NVSP_PROTOCOL_VERSION_1
-#define NVSP_MAX_PROTOCOL_VERSION               NVSP_PROTOCOL_VERSION_1
+#define NVSP_PROTOCOL_VERSION_1		2
+#define NVSP_MIN_PROTOCOL_VERSION	NVSP_PROTOCOL_VERSION_1
+#define NVSP_MAX_PROTOCOL_VERSION	NVSP_PROTOCOL_VERSION_1
 
-typedef enum _NVSP_MESSAGE_TYPE
-{
-    NvspMessageTypeNone = 0,
+typedef enum _NVSP_MESSAGE_TYPE {
+	NvspMessageTypeNone = 0,
 
+	/* Init Messages */
+	NvspMessageTypeInit			= 1,
+	NvspMessageTypeInitComplete		= 2,
 
-    /* Init Messages */
+	NvspVersionMessageStart			= 100,
 
-    NvspMessageTypeInit                         = 1,
-    NvspMessageTypeInitComplete                 = 2,
+	/* Version 1 Messages */
+	NvspMessage1TypeSendNdisVersion		= NvspVersionMessageStart,
 
-    NvspVersionMessageStart                     = 100,
+	NvspMessage1TypeSendReceiveBuffer,
+	NvspMessage1TypeSendReceiveBufferComplete,
+	NvspMessage1TypeRevokeReceiveBuffer,
 
+	NvspMessage1TypeSendSendBuffer,
+	NvspMessage1TypeSendSendBufferComplete,
+	NvspMessage1TypeRevokeSendBuffer,
 
-    /* Version 1 Messages */
+	NvspMessage1TypeSendRNDISPacket,
+	NvspMessage1TypeSendRNDISPacketComplete,
 
-    NvspMessage1TypeSendNdisVersion             = NvspVersionMessageStart,
-
-    NvspMessage1TypeSendReceiveBuffer,
-    NvspMessage1TypeSendReceiveBufferComplete,
-    NvspMessage1TypeRevokeReceiveBuffer,
-
-    NvspMessage1TypeSendSendBuffer,
-    NvspMessage1TypeSendSendBufferComplete,
-    NvspMessage1TypeRevokeSendBuffer,
-
-    NvspMessage1TypeSendRNDISPacket,
-    NvspMessage1TypeSendRNDISPacketComplete,
-
-
-    /* This should be set to the number of messages for the version */
-    /* with the maximum number of messages. */
-
-    NvspNumMessagePerVersion                    = 9,
-
+	/*
+	 * This should be set to the number of messages for the version with
+	 * the maximum number of messages.
+	 */
+	NvspNumMessagePerVersion		= 9,
 } NVSP_MESSAGE_TYPE, *PNVSP_MESSAGE_TYPE;
 
-typedef enum _NVSP_STATUS
-{
-    NvspStatusNone = 0,
-    NvspStatusSuccess,
-    NvspStatusFailure,
-    NvspStatusProtocolVersionRangeTooNew,
-    NvspStatusProtocolVersionRangeTooOld,
-    NvspStatusInvalidRndisPacket,
-    NvspStatusBusy,
-    NvspStatusMax,
+typedef enum _NVSP_STATUS {
+	NvspStatusNone = 0,
+	NvspStatusSuccess,
+	NvspStatusFailure,
+	NvspStatusProtocolVersionRangeTooNew,
+	NvspStatusProtocolVersionRangeTooOld,
+	NvspStatusInvalidRndisPacket,
+	NvspStatusBusy,
+	NvspStatusMax,
 } NVSP_STATUS, *PNVSP_STATUS;
 
-#pragma pack(push, 1)
-
-typedef struct _NVSP_MESSAGE_HEADER
-{
-    u32                                  MessageType;
+typedef struct _NVSP_MESSAGE_HEADER {
+	u32 MessageType;
 } NVSP_MESSAGE_HEADER, *PNVSP_MESSAGE_HEADER;
 
-
 /* Init Messages */
 
+/*
+ * This message is used by the VSC to initialize the channel after the channels
+ * has been opened. This message should never include anything other then
+ * versioning (i.e. this message will be the same for ever).
+ */
+typedef struct _NVSP_MESSAGE_INIT {
+	u32 MinProtocolVersion;
+	u32 MaxProtocolVersion;
+} __attribute__((packed)) NVSP_MESSAGE_INIT, *PNVSP_MESSAGE_INIT;
 
+/*
+ * This message is used by the VSP to complete the initialization of the
+ * channel. This message should never include anything other then versioning
+ * (i.e. this message will be the same for ever).
+ */
+typedef struct _NVSP_MESSAGE_INIT_COMPLETE {
+	u32 NegotiatedProtocolVersion;
+	u32 MaximumMdlChainLength;
+	u32 Status;
+} __attribute__((packed)) NVSP_MESSAGE_INIT_COMPLETE, *PNVSP_MESSAGE_INIT_COMPLETE;
 
-/* This message is used by the VSC to initialize the channel */
-/* after the channels has been opened. This message should */
-/* never include anything other then versioning (i.e. this */
-/* message will be the same for ever). */
-
-typedef struct _NVSP_MESSAGE_INIT
-{
-    u32                                  MinProtocolVersion;
-    u32                                  MaxProtocolVersion;
-} NVSP_MESSAGE_INIT, *PNVSP_MESSAGE_INIT;
-
-
-/* This message is used by the VSP to complete the initialization */
-/* of the channel. This message should never include anything other */
-/* then versioning (i.e. this message will be the same for ever). */
-
-typedef struct _NVSP_MESSAGE_INIT_COMPLETE
-{
-    u32                                  NegotiatedProtocolVersion;
-    u32                                  MaximumMdlChainLength;
-    u32                                  Status;
-} NVSP_MESSAGE_INIT_COMPLETE, *PNVSP_MESSAGE_INIT_COMPLETE;
-
-typedef union _NVSP_MESSAGE_INIT_UBER
-{
-    NVSP_MESSAGE_INIT                       Init;
-    NVSP_MESSAGE_INIT_COMPLETE              InitComplete;
-} NVSP_MESSAGE_INIT_UBER;
-
+typedef union _NVSP_MESSAGE_INIT_UBER {
+	NVSP_MESSAGE_INIT Init;
+	NVSP_MESSAGE_INIT_COMPLETE InitComplete;
+} __attribute__((packed)) NVSP_MESSAGE_INIT_UBER;
 
 /* Version 1 Messages */
 
+/*
+ * This message is used by the VSC to send the NDIS version to the VSP. The VSP
+ * can use this information when handling OIDs sent by the VSC.
+ */
+typedef struct _NVSP_1_MESSAGE_SEND_NDIS_VERSION {
+	u32 NdisMajorVersion;
+	u32 NdisMinorVersion;
+} __attribute__((packed)) NVSP_1_MESSAGE_SEND_NDIS_VERSION, *PNVSP_1_MESSAGE_SEND_NDIS_VERSION;
 
+/*
+ * This message is used by the VSC to send a receive buffer to the VSP. The VSP
+ * can then use the receive buffer to send data to the VSC.
+ */
+typedef struct _NVSP_1_MESSAGE_SEND_RECEIVE_BUFFER {
+	u32 GpadlHandle;
+	u16 Id;
+} __attribute__((packed)) NVSP_1_MESSAGE_SEND_RECEIVE_BUFFER, *PNVSP_1_MESSAGE_SEND_RECEIVE_BUFFER;
 
-/* This message is used by the VSC to send the NDIS version */
-/* to the VSP. The VSP can use this information when handling */
-/* OIDs sent by the VSC. */
+typedef struct _NVSP_1_RECEIVE_BUFFER_SECTION {
+	u32 Offset;
+	u32 SubAllocationSize;
+	u32 NumSubAllocations;
+	u32 EndOffset;
+} __attribute__((packed)) NVSP_1_RECEIVE_BUFFER_SECTION, *PNVSP_1_RECEIVE_BUFFER_SECTION;
 
-typedef struct _NVSP_1_MESSAGE_SEND_NDIS_VERSION
-{
-    u32                                  NdisMajorVersion;
-    u32                                  NdisMinorVersion;
-} NVSP_1_MESSAGE_SEND_NDIS_VERSION, *PNVSP_1_MESSAGE_SEND_NDIS_VERSION;
+/*
+ * This message is used by the VSP to acknowledge a receive buffer send by the
+ * VSC. This message must be sent by the VSP before the VSP uses the receive
+ * buffer.
+ */
+typedef struct _NVSP_1_MESSAGE_SEND_RECEIVE_BUFFER_COMPLETE {
+	u32 Status;
+	u32 NumSections;
 
+	/*
+	 * The receive buffer is split into two parts, a large suballocation
+	 * section and a small suballocation section. These sections are then
+	 * suballocated by a certain size.
+	 */
 
-/* This message is used by the VSC to send a receive buffer */
-/* to the VSP. The VSP can then use the receive buffer to */
-/* send data to the VSC. */
+	/*
+	 * For example, the following break up of the receive buffer has 6
+	 * large suballocations and 10 small suballocations.
+	 */
 
-typedef struct _NVSP_1_MESSAGE_SEND_RECEIVE_BUFFER
-{
-    u32 GpadlHandle;
-    u16                                  Id;
-} NVSP_1_MESSAGE_SEND_RECEIVE_BUFFER, *PNVSP_1_MESSAGE_SEND_RECEIVE_BUFFER;
+	/*
+	 * |            Large Section          |  |   Small Section   |
+	 * ------------------------------------------------------------
+	 * |     |     |     |     |     |     |  | | | | | | | | | | |
+	 * |                                      |
+	 *  LargeOffset                            SmallOffset
+	 */
 
-typedef struct _NVSP_1_RECEIVE_BUFFER_SECTION
-{
-    u32                                  Offset;
-    u32                                  SubAllocationSize;
-    u32                                  NumSubAllocations;
-    u32                                  EndOffset;
-} NVSP_1_RECEIVE_BUFFER_SECTION, *PNVSP_1_RECEIVE_BUFFER_SECTION;
+	NVSP_1_RECEIVE_BUFFER_SECTION Sections[1];
+} __attribute__((packed)) NVSP_1_MESSAGE_SEND_RECEIVE_BUFFER_COMPLETE, *PNVSP_1_MESSAGE_SEND_RECEIVE_BUFFER_COMPLETE;
 
-
-/* This message is used by the VSP to acknowledge a receive */
-/* buffer send by the VSC. This message must be sent by the */
-/* VSP before the VSP uses the receive buffer. */
-
-typedef struct _NVSP_1_MESSAGE_SEND_RECEIVE_BUFFER_COMPLETE
-{
-    u32                                  Status;
-    u32                                  NumSections;
-
-
-    /* The receive buffer is split into two parts, a large */
-    /* suballocation section and a small suballocation */
-    /* section. These sections are then suballocated by a */
-    /* certain size. */
-
-    /* For example, the following break up of the receive */
-    /* buffer has 6 large suballocations and 10 small */
-    /* suballocations. */
-
-    /* |            Large Section          |  |   Small Section   | */
-    /* ------------------------------------------------------------ */
-    /* |     |     |     |     |     |     |  | | | | | | | | | | | */
-    /* |                                      | */
-    /* LargeOffset                            SmallOffset */
-
-    NVSP_1_RECEIVE_BUFFER_SECTION           Sections[1];
-
-} NVSP_1_MESSAGE_SEND_RECEIVE_BUFFER_COMPLETE, *PNVSP_1_MESSAGE_SEND_RECEIVE_BUFFER_COMPLETE;
-
-
-/* This message is sent by the VSC to revoke the receive buffer. */
-/* After the VSP completes this transaction, the vsp should never */
-/* use the receive buffer again. */
-
-typedef struct _NVSP_1_MESSAGE_REVOKE_RECEIVE_BUFFER
-{
-    u16                                  Id;
+/*
+ * This message is sent by the VSC to revoke the receive buffer.  After the VSP
+ * completes this transaction, the vsp should never use the receive buffer
+ * again.
+ */
+typedef struct _NVSP_1_MESSAGE_REVOKE_RECEIVE_BUFFER {
+	u16 Id;
 } NVSP_1_MESSAGE_REVOKE_RECEIVE_BUFFER, *PNVSP_1_MESSAGE_REVOKE_RECEIVE_BUFFER;
 
+/*
+ * This message is used by the VSC to send a send buffer to the VSP. The VSC
+ * can then use the send buffer to send data to the VSP.
+ */
+typedef struct _NVSP_1_MESSAGE_SEND_SEND_BUFFER {
+	u32 GpadlHandle;
+	u16 Id;
+} __attribute__((packed)) NVSP_1_MESSAGE_SEND_SEND_BUFFER, *PNVSP_1_MESSAGE_SEND_SEND_BUFFER;
 
-/* This message is used by the VSC to send a send buffer */
-/* to the VSP. The VSC can then use the send buffer to */
-/* send data to the VSP. */
+/*
+ * This message is used by the VSP to acknowledge a send buffer sent by the
+ * VSC. This message must be sent by the VSP before the VSP uses the sent
+ * buffer.
+ */
+typedef struct _NVSP_1_MESSAGE_SEND_SEND_BUFFER_COMPLETE {
+	u32 Status;
 
-typedef struct _NVSP_1_MESSAGE_SEND_SEND_BUFFER
-{
-    u32 GpadlHandle;
-    u16                                  Id;
-} NVSP_1_MESSAGE_SEND_SEND_BUFFER, *PNVSP_1_MESSAGE_SEND_SEND_BUFFER;
+	/*
+	 * The VSC gets to choose the size of the send buffer and the VSP gets
+	 * to choose the sections size of the buffer.  This was done to enable
+	 * dynamic reconfigurations when the cost of GPA-direct buffers
+	 * decreases.
+	 */
+	u32 SectionSize;
+} __attribute__((packed)) NVSP_1_MESSAGE_SEND_SEND_BUFFER_COMPLETE, *PNVSP_1_MESSAGE_SEND_SEND_BUFFER_COMPLETE;
 
-
-/* This message is used by the VSP to acknowledge a send */
-/* buffer sent by the VSC. This message must be sent by the */
-/* VSP before the VSP uses the sent buffer. */
-
-typedef struct _NVSP_1_MESSAGE_SEND_SEND_BUFFER_COMPLETE
-{
-    u32                                  Status;
-
-
-    /* The VSC gets to choose the size of the send buffer and */
-    /* the VSP gets to choose the sections size of the buffer. */
-    /* This was done to enable dynamic reconfigurations when */
-    /* the cost of GPA-direct buffers decreases. */
-
-    u32                                  SectionSize;
-} NVSP_1_MESSAGE_SEND_SEND_BUFFER_COMPLETE, *PNVSP_1_MESSAGE_SEND_SEND_BUFFER_COMPLETE;
-
-
-/* This message is sent by the VSC to revoke the send buffer. */
-/* After the VSP completes this transaction, the vsp should never */
-/* use the send buffer again. */
-
-typedef struct _NVSP_1_MESSAGE_REVOKE_SEND_BUFFER
-{
-    u16                                  Id;
+/*
+ * This message is sent by the VSC to revoke the send buffer.  After the VSP
+ * completes this transaction, the vsp should never use the send buffer again.
+ */
+typedef struct _NVSP_1_MESSAGE_REVOKE_SEND_BUFFER {
+	u16 Id;
 } NVSP_1_MESSAGE_REVOKE_SEND_BUFFER, *PNVSP_1_MESSAGE_REVOKE_SEND_BUFFER;
 
+/*
+ * This message is used by both the VSP and the VSC to send a RNDIS message to
+ * the opposite channel endpoint.
+ */
+typedef struct _NVSP_1_MESSAGE_SEND_RNDIS_PACKET {
+	/*
+	 * This field is specified by RNIDS. They assume there's two different
+	 * channels of communication. However, the Network VSP only has one.
+	 * Therefore, the channel travels with the RNDIS packet.
+	 */
+	u32 ChannelType;
 
-/* This message is used by both the VSP and the VSC to send */
-/* a RNDIS message to the opposite channel endpoint. */
+	/*
+	 * This field is used to send part or all of the data through a send
+	 * buffer. This values specifies an index into the send buffer. If the
+	 * index is 0xFFFFFFFF, then the send buffer is not being used and all
+	 * of the data was sent through other VMBus mechanisms.
+	 */
+	u32 SendBufferSectionIndex;
+	u32 SendBufferSectionSize;
+} __attribute__((packed)) NVSP_1_MESSAGE_SEND_RNDIS_PACKET, *PNVSP_1_MESSAGE_SEND_RNDIS_PACKET;
 
-typedef struct _NVSP_1_MESSAGE_SEND_RNDIS_PACKET
-{
-
-    /* This field is specified by RNIDS. They assume there's */
-    /* two different channels of communication. However, */
-    /* the Network VSP only has one. Therefore, the channel */
-    /* travels with the RNDIS packet. */
-
-    u32                                  ChannelType;
-
-
-    /* This field is used to send part or all of the data */
-    /* through a send buffer. This values specifies an */
-    /* index into the send buffer. If the index is */
-    /* 0xFFFFFFFF, then the send buffer is not being used */
-    /* and all of the data was sent through other VMBus */
-    /* mechanisms. */
-
-    u32                                  SendBufferSectionIndex;
-    u32                                  SendBufferSectionSize;
-} NVSP_1_MESSAGE_SEND_RNDIS_PACKET, *PNVSP_1_MESSAGE_SEND_RNDIS_PACKET;
-
-
-/* This message is used by both the VSP and the VSC to complete */
-/* a RNDIS message to the opposite channel endpoint. At this */
-/* point, the initiator of this message cannot use any resources */
-/* associated with the original RNDIS packet. */
-
-typedef struct _NVSP_1_MESSAGE_SEND_RNDIS_PACKET_COMPLETE
-{
-    u32                                  Status;
+/*
+ * This message is used by both the VSP and the VSC to complete a RNDIS message
+ * to the opposite channel endpoint. At this point, the initiator of this
+ * message cannot use any resources associated with the original RNDIS packet.
+ */
+typedef struct _NVSP_1_MESSAGE_SEND_RNDIS_PACKET_COMPLETE {
+	u32 Status;
 } NVSP_1_MESSAGE_SEND_RNDIS_PACKET_COMPLETE, *PNVSP_1_MESSAGE_SEND_RNDIS_PACKET_COMPLETE;
 
-typedef union _NVSP_MESSAGE_1_UBER
-{
-    NVSP_1_MESSAGE_SEND_NDIS_VERSION            SendNdisVersion;
+typedef union _NVSP_MESSAGE_1_UBER {
+	NVSP_1_MESSAGE_SEND_NDIS_VERSION SendNdisVersion;
 
-    NVSP_1_MESSAGE_SEND_RECEIVE_BUFFER          SendReceiveBuffer;
-    NVSP_1_MESSAGE_SEND_RECEIVE_BUFFER_COMPLETE SendReceiveBufferComplete;
-    NVSP_1_MESSAGE_REVOKE_RECEIVE_BUFFER        RevokeReceiveBuffer;
+	NVSP_1_MESSAGE_SEND_RECEIVE_BUFFER SendReceiveBuffer;
+	NVSP_1_MESSAGE_SEND_RECEIVE_BUFFER_COMPLETE SendReceiveBufferComplete;
+	NVSP_1_MESSAGE_REVOKE_RECEIVE_BUFFER RevokeReceiveBuffer;
 
-    NVSP_1_MESSAGE_SEND_SEND_BUFFER             SendSendBuffer;
-    NVSP_1_MESSAGE_SEND_SEND_BUFFER_COMPLETE    SendSendBufferComplete;
-    NVSP_1_MESSAGE_REVOKE_SEND_BUFFER           RevokeSendBuffer;
+	NVSP_1_MESSAGE_SEND_SEND_BUFFER SendSendBuffer;
+	NVSP_1_MESSAGE_SEND_SEND_BUFFER_COMPLETE SendSendBufferComplete;
+	NVSP_1_MESSAGE_REVOKE_SEND_BUFFER RevokeSendBuffer;
 
-    NVSP_1_MESSAGE_SEND_RNDIS_PACKET            SendRNDISPacket;
-    NVSP_1_MESSAGE_SEND_RNDIS_PACKET_COMPLETE   SendRNDISPacketComplete;
-} NVSP_1_MESSAGE_UBER;
+	NVSP_1_MESSAGE_SEND_RNDIS_PACKET SendRNDISPacket;
+	NVSP_1_MESSAGE_SEND_RNDIS_PACKET_COMPLETE SendRNDISPacketComplete;
+} __attribute__((packed)) NVSP_1_MESSAGE_UBER;
 
-typedef union _NVSP_ALL_MESSAGES
-{
-    NVSP_MESSAGE_INIT_UBER                  InitMessages;
-    NVSP_1_MESSAGE_UBER                     Version1Messages;
-
-} NVSP_ALL_MESSAGES;
-
+typedef union _NVSP_ALL_MESSAGES {
+	NVSP_MESSAGE_INIT_UBER InitMessages;
+	NVSP_1_MESSAGE_UBER Version1Messages;
+} __attribute__((packed)) NVSP_ALL_MESSAGES;
 
 /* ALL Messages */
+typedef struct _NVSP_MESSAGE {
+	NVSP_MESSAGE_HEADER Header;
+	NVSP_ALL_MESSAGES Messages;
+} __attribute__((packed)) NVSP_MESSAGE, *PNVSP_MESSAGE;
 
-typedef struct _NVSP_MESSAGE
-{
-    NVSP_MESSAGE_HEADER                     Header;
-    NVSP_ALL_MESSAGES                       Messages;
-} NVSP_MESSAGE, *PNVSP_MESSAGE;
-
-#pragma pack(pop)
