*
*/
-
-#pragma once
+#ifndef __CHANNELMESSAGES_H
+#define __CHANNELMESSAGES_H
#include "VmbusPacketFormat.h"
-#define C_ASSERT(x)
-typedef u32 NTSTATUS;
-
-#pragma pack(push,1)
-
-
/* Version 1 messages */
-
-
-typedef enum _VMBUS_CHANNEL_MESSAGE_TYPE
-{
- ChannelMessageInvalid = 0,
- ChannelMessageOfferChannel = 1,
- ChannelMessageRescindChannelOffer = 2,
- ChannelMessageRequestOffers = 3,
- ChannelMessageAllOffersDelivered = 4,
- ChannelMessageOpenChannel = 5,
- ChannelMessageOpenChannelResult = 6,
- ChannelMessageCloseChannel = 7,
- ChannelMessageGpadlHeader = 8,
- ChannelMessageGpadlBody = 9,
- ChannelMessageGpadlCreated = 10,
- ChannelMessageGpadlTeardown = 11,
- ChannelMessageGpadlTorndown = 12,
- ChannelMessageRelIdReleased = 13,
- ChannelMessageInitiateContact = 14,
- ChannelMessageVersionResponse = 15,
- ChannelMessageUnload = 16,
+typedef enum _VMBUS_CHANNEL_MESSAGE_TYPE {
+ ChannelMessageInvalid = 0,
+ ChannelMessageOfferChannel = 1,
+ ChannelMessageRescindChannelOffer = 2,
+ ChannelMessageRequestOffers = 3,
+ ChannelMessageAllOffersDelivered = 4,
+ ChannelMessageOpenChannel = 5,
+ ChannelMessageOpenChannelResult = 6,
+ ChannelMessageCloseChannel = 7,
+ ChannelMessageGpadlHeader = 8,
+ ChannelMessageGpadlBody = 9,
+ ChannelMessageGpadlCreated = 10,
+ ChannelMessageGpadlTeardown = 11,
+ ChannelMessageGpadlTorndown = 12,
+ ChannelMessageRelIdReleased = 13,
+ ChannelMessageInitiateContact = 14,
+ ChannelMessageVersionResponse = 15,
+ ChannelMessageUnload = 16,
#ifdef VMBUS_FEATURE_PARENT_OR_PEER_MEMORY_MAPPED_INTO_A_CHILD
- ChannelMessageViewRangeAdd = 17,
- ChannelMessageViewRangeRemove = 18,
+ ChannelMessageViewRangeAdd = 17,
+ ChannelMessageViewRangeRemove = 18,
#endif
- ChannelMessageCount
-} VMBUS_CHANNEL_MESSAGE_TYPE, *PVMBUS_CHANNEL_MESSAGE_TYPE;
+ ChannelMessageCount
+} __attribute__((packed)) VMBUS_CHANNEL_MESSAGE_TYPE, *PVMBUS_CHANNEL_MESSAGE_TYPE;
-/* begin_wpp config */
-/* CUSTOM_TYPE(ChannelMessageType, ItemEnum(_VMBUS_CHANNEL_MESSAGE_TYPE)); */
-/* end_wpp */
-
-typedef struct _VMBUS_CHANNEL_MESSAGE_HEADER
-{
- VMBUS_CHANNEL_MESSAGE_TYPE MessageType;
- u32 Padding;
-} VMBUS_CHANNEL_MESSAGE_HEADER, *PVMBUS_CHANNEL_MESSAGE_HEADER;
+typedef struct _VMBUS_CHANNEL_MESSAGE_HEADER {
+ VMBUS_CHANNEL_MESSAGE_TYPE MessageType;
+ u32 Padding;
+} __attribute__((packed)) VMBUS_CHANNEL_MESSAGE_HEADER, *PVMBUS_CHANNEL_MESSAGE_HEADER;
/* Query VMBus Version parameters */
-typedef struct _VMBUS_CHANNEL_QUERY_VMBUS_VERSION
-{
- VMBUS_CHANNEL_MESSAGE_HEADER Header;
- u32 Version;
-} VMBUS_CHANNEL_QUERY_VMBUS_VERSION, *PVMBUS_CHANNEL_QUERY_VMBUS_VERSION;
+typedef struct _VMBUS_CHANNEL_QUERY_VMBUS_VERSION {
+ VMBUS_CHANNEL_MESSAGE_HEADER Header;
+ u32 Version;
+} __attribute__((packed)) VMBUS_CHANNEL_QUERY_VMBUS_VERSION, *PVMBUS_CHANNEL_QUERY_VMBUS_VERSION;
/* VMBus Version Supported parameters */
-typedef struct _VMBUS_CHANNEL_VERSION_SUPPORTED
-{
- VMBUS_CHANNEL_MESSAGE_HEADER Header;
- bool VersionSupported;
-} VMBUS_CHANNEL_VERSION_SUPPORTED, *PVMBUS_CHANNEL_VERSION_SUPPORTED;
+typedef struct _VMBUS_CHANNEL_VERSION_SUPPORTED {
+ VMBUS_CHANNEL_MESSAGE_HEADER Header;
+ bool VersionSupported;
+} __attribute__((packed)) VMBUS_CHANNEL_VERSION_SUPPORTED, *PVMBUS_CHANNEL_VERSION_SUPPORTED;
/* Offer Channel parameters */
-typedef struct _VMBUS_CHANNEL_OFFER_CHANNEL
-{
- VMBUS_CHANNEL_MESSAGE_HEADER Header;
- struct vmbus_channel_offer Offer;
- u32 ChildRelId;
- u8 MonitorId;
- bool MonitorAllocated;
-} VMBUS_CHANNEL_OFFER_CHANNEL, *PVMBUS_CHANNEL_OFFER_CHANNEL;
-
-
-/* Make sure VMBUS_CHANNEL_OFFER_CHANNEL fits into Synic message. */
-
-C_ASSERT(sizeof(VMBUS_CHANNEL_OFFER_CHANNEL) <= MAXIMUM_SYNIC_MESSAGE_BYTES);
+typedef struct _VMBUS_CHANNEL_OFFER_CHANNEL {
+ VMBUS_CHANNEL_MESSAGE_HEADER Header;
+ struct vmbus_channel_offer Offer;
+ u32 ChildRelId;
+ u8 MonitorId;
+ bool MonitorAllocated;
+} __attribute__((packed)) VMBUS_CHANNEL_OFFER_CHANNEL, *PVMBUS_CHANNEL_OFFER_CHANNEL;
/* Rescind Offer parameters */
-typedef struct _VMBUS_CHANNEL_RESCIND_OFFER
-{
- VMBUS_CHANNEL_MESSAGE_HEADER Header;
- u32 ChildRelId;
-} VMBUS_CHANNEL_RESCIND_OFFER, *PVMBUS_CHANNEL_RESCIND_OFFER;
-
-/* Request Offer -- no parameters, SynIC message contains the partition ID */
-/* Set Snoop -- no parameters, SynIC message contains the partition ID */
-/* Clear Snoop -- no parameters, SynIC message contains the partition ID */
-/* All Offers Delivered -- no parameters, SynIC message contains the partition ID */
-/* Flush Client -- no parameters, SynIC message contains the partition ID */
-
-/* Open Channel parameters */
-typedef struct _VMBUS_CHANNEL_OPEN_CHANNEL
-{
- VMBUS_CHANNEL_MESSAGE_HEADER Header;
-
-
- /* Identifies the specific VMBus channel that is being opened. */
-
- u32 ChildRelId;
-
-
- /* ID making a particular open request at a channel offer unique. */
-
- u32 OpenId;
-
-
- /* GPADL for the channel's ring buffer. */
-
- u32 RingBufferGpadlHandle;
-
+typedef struct _VMBUS_CHANNEL_RESCIND_OFFER {
+ VMBUS_CHANNEL_MESSAGE_HEADER Header;
+ u32 ChildRelId;
+} __attribute__((packed)) VMBUS_CHANNEL_RESCIND_OFFER, *PVMBUS_CHANNEL_RESCIND_OFFER;
- /* GPADL for the channel's server context save area. */
-
- u32 ServerContextAreaGpadlHandle;
+/*
+ * Request Offer -- no parameters, SynIC message contains the partition ID
+ * Set Snoop -- no parameters, SynIC message contains the partition ID
+ * Clear Snoop -- no parameters, SynIC message contains the partition ID
+ * All Offers Delivered -- no parameters, SynIC message contains the partition
+ * ID
+ * Flush Client -- no parameters, SynIC message contains the partition ID
+ */
+/* Open Channel parameters */
+typedef struct _VMBUS_CHANNEL_OPEN_CHANNEL {
+ VMBUS_CHANNEL_MESSAGE_HEADER Header;
- /*
- * The upstream ring buffer begins at offset zero in the memory
- * described by RingBufferGpadlHandle. The downstream ring buffer
- * follows it at this offset (in pages).
- */
+ /* Identifies the specific VMBus channel that is being opened. */
+ u32 ChildRelId;
- u32 DownstreamRingBufferPageOffset;
+ /* ID making a particular open request at a channel offer unique. */
+ u32 OpenId;
+ /* GPADL for the channel's ring buffer. */
+ u32 RingBufferGpadlHandle;
- /* User-specific data to be passed along to the server endpoint. */
+ /* GPADL for the channel's server context save area. */
+ u32 ServerContextAreaGpadlHandle;
- unsigned char UserData[MAX_USER_DEFINED_BYTES];
+ /*
+ * The upstream ring buffer begins at offset zero in the memory
+ * described by RingBufferGpadlHandle. The downstream ring buffer
+ * follows it at this offset (in pages).
+ */
+ u32 DownstreamRingBufferPageOffset;
-} VMBUS_CHANNEL_OPEN_CHANNEL, *PVMBUS_CHANNEL_OPEN_CHANNEL;
+ /* User-specific data to be passed along to the server endpoint. */
+ unsigned char UserData[MAX_USER_DEFINED_BYTES];
+} __attribute__((packed)) VMBUS_CHANNEL_OPEN_CHANNEL, *PVMBUS_CHANNEL_OPEN_CHANNEL;
/* Reopen Channel parameters; */
typedef VMBUS_CHANNEL_OPEN_CHANNEL VMBUS_CHANNEL_REOPEN_CHANNEL, *PVMBUS_CHANNEL_REOPEN_CHANNEL;
/* Open Channel Result parameters */
-typedef struct _VMBUS_CHANNEL_OPEN_RESULT
-{
- VMBUS_CHANNEL_MESSAGE_HEADER Header;
- u32 ChildRelId;
- u32 OpenId;
- NTSTATUS Status;
-} VMBUS_CHANNEL_OPEN_RESULT, *PVMBUS_CHANNEL_OPEN_RESULT;
+typedef struct _VMBUS_CHANNEL_OPEN_RESULT {
+ VMBUS_CHANNEL_MESSAGE_HEADER Header;
+ u32 ChildRelId;
+ u32 OpenId;
+ u32 Status;
+} __attribute__((packed)) VMBUS_CHANNEL_OPEN_RESULT, *PVMBUS_CHANNEL_OPEN_RESULT;
/* Close channel parameters; */
-typedef struct _VMBUS_CHANNEL_CLOSE_CHANNEL
-{
- VMBUS_CHANNEL_MESSAGE_HEADER Header;
- u32 ChildRelId;
-} VMBUS_CHANNEL_CLOSE_CHANNEL, *PVMBUS_CHANNEL_CLOSE_CHANNEL;
+typedef struct _VMBUS_CHANNEL_CLOSE_CHANNEL {
+ VMBUS_CHANNEL_MESSAGE_HEADER Header;
+ u32 ChildRelId;
+} __attribute__((packed)) VMBUS_CHANNEL_CLOSE_CHANNEL, *PVMBUS_CHANNEL_CLOSE_CHANNEL;
/* Channel Message GPADL */
-#define GPADL_TYPE_RING_BUFFER 1
-#define GPADL_TYPE_SERVER_SAVE_AREA 2
-#define GPADL_TYPE_TRANSACTION 8
-
+#define GPADL_TYPE_RING_BUFFER 1
+#define GPADL_TYPE_SERVER_SAVE_AREA 2
+#define GPADL_TYPE_TRANSACTION 8
/*
* The number of PFNs in a GPADL message is defined by the number of
* implied number of PFNs won't fit in this packet, there will be a
* follow-up packet that contains more.
*/
-
-
-typedef struct _VMBUS_CHANNEL_GPADL_HEADER
-{
- VMBUS_CHANNEL_MESSAGE_HEADER Header;
- u32 ChildRelId;
- u32 Gpadl;
- u16 RangeBufLen;
- u16 RangeCount;
- GPA_RANGE Range[0];
-} VMBUS_CHANNEL_GPADL_HEADER, *PVMBUS_CHANNEL_GPADL_HEADER;
-
-
+typedef struct _VMBUS_CHANNEL_GPADL_HEADER {
+ VMBUS_CHANNEL_MESSAGE_HEADER Header;
+ u32 ChildRelId;
+ u32 Gpadl;
+ u16 RangeBufLen;
+ u16 RangeCount;
+ GPA_RANGE Range[0];
+} __attribute__((packed)) VMBUS_CHANNEL_GPADL_HEADER, *PVMBUS_CHANNEL_GPADL_HEADER;
/* This is the followup packet that contains more PFNs. */
-
-
-typedef struct _VMBUS_CHANNEL_GPADL_BODY
-{
- VMBUS_CHANNEL_MESSAGE_HEADER Header;
- u32 MessageNumber;
- u32 Gpadl;
- u64 Pfn[0];
-} VMBUS_CHANNEL_GPADL_BODY, *PVMBUS_CHANNEL_GPADL_BODY;
-
-
-typedef struct _VMBUS_CHANNEL_GPADL_CREATED
-{
- VMBUS_CHANNEL_MESSAGE_HEADER Header;
- u32 ChildRelId;
- u32 Gpadl;
- u32 CreationStatus;
-} VMBUS_CHANNEL_GPADL_CREATED, *PVMBUS_CHANNEL_GPADL_CREATED;
-
-typedef struct _VMBUS_CHANNEL_GPADL_TEARDOWN
-{
- VMBUS_CHANNEL_MESSAGE_HEADER Header;
- u32 ChildRelId;
- u32 Gpadl;
-} VMBUS_CHANNEL_GPADL_TEARDOWN, *PVMBUS_CHANNEL_GPADL_TEARDOWN;
-
-typedef struct _VMBUS_CHANNEL_GPADL_TORNDOWN
-{
- VMBUS_CHANNEL_MESSAGE_HEADER Header;
- u32 Gpadl;
-} VMBUS_CHANNEL_GPADL_TORNDOWN, *PVMBUS_CHANNEL_GPADL_TORNDOWN;
+typedef struct _VMBUS_CHANNEL_GPADL_BODY {
+ VMBUS_CHANNEL_MESSAGE_HEADER Header;
+ u32 MessageNumber;
+ u32 Gpadl;
+ u64 Pfn[0];
+} __attribute__((packed)) VMBUS_CHANNEL_GPADL_BODY, *PVMBUS_CHANNEL_GPADL_BODY;
+
+typedef struct _VMBUS_CHANNEL_GPADL_CREATED {
+ VMBUS_CHANNEL_MESSAGE_HEADER Header;
+ u32 ChildRelId;
+ u32 Gpadl;
+ u32 CreationStatus;
+} __attribute__((packed)) VMBUS_CHANNEL_GPADL_CREATED, *PVMBUS_CHANNEL_GPADL_CREATED;
+
+typedef struct _VMBUS_CHANNEL_GPADL_TEARDOWN {
+ VMBUS_CHANNEL_MESSAGE_HEADER Header;
+ u32 ChildRelId;
+ u32 Gpadl;
+} __attribute__((packed)) VMBUS_CHANNEL_GPADL_TEARDOWN, *PVMBUS_CHANNEL_GPADL_TEARDOWN;
+
+typedef struct _VMBUS_CHANNEL_GPADL_TORNDOWN {
+ VMBUS_CHANNEL_MESSAGE_HEADER Header;
+ u32 Gpadl;
+} __attribute__((packed)) VMBUS_CHANNEL_GPADL_TORNDOWN, *PVMBUS_CHANNEL_GPADL_TORNDOWN;
#ifdef VMBUS_FEATURE_PARENT_OR_PEER_MEMORY_MAPPED_INTO_A_CHILD
-typedef struct _VMBUS_CHANNEL_VIEW_RANGE_ADD
-{
- VMBUS_CHANNEL_MESSAGE_HEADER Header;
- PHYSICAL_ADDRESS ViewRangeBase;
- u64 ViewRangeLength;
- u32 ChildRelId;
-} VMBUS_CHANNEL_VIEW_RANGE_ADD, *PVMBUS_CHANNEL_VIEW_RANGE_ADD;
-
-typedef struct _VMBUS_CHANNEL_VIEW_RANGE_REMOVE
-{
- VMBUS_CHANNEL_MESSAGE_HEADER Header;
- PHYSICAL_ADDRESS ViewRangeBase;
- u32 ChildRelId;
-} VMBUS_CHANNEL_VIEW_RANGE_REMOVE, *PVMBUS_CHANNEL_VIEW_RANGE_REMOVE;
+typedef struct _VMBUS_CHANNEL_VIEW_RANGE_ADD {
+ VMBUS_CHANNEL_MESSAGE_HEADER Header;
+ PHYSICAL_ADDRESS ViewRangeBase;
+ u64 ViewRangeLength;
+ u32 ChildRelId;
+} __attribute__((packed)) VMBUS_CHANNEL_VIEW_RANGE_ADD, *PVMBUS_CHANNEL_VIEW_RANGE_ADD;
+
+typedef struct _VMBUS_CHANNEL_VIEW_RANGE_REMOVE {
+ VMBUS_CHANNEL_MESSAGE_HEADER Header;
+ PHYSICAL_ADDRESS ViewRangeBase;
+ u32 ChildRelId;
+} __attribute__((packed)) VMBUS_CHANNEL_VIEW_RANGE_REMOVE, *PVMBUS_CHANNEL_VIEW_RANGE_REMOVE;
#endif
-typedef struct _VMBUS_CHANNEL_RELID_RELEASED
-{
- VMBUS_CHANNEL_MESSAGE_HEADER Header;
- u32 ChildRelId;
-} VMBUS_CHANNEL_RELID_RELEASED, *PVMBUS_CHANNEL_RELID_RELEASED;
-
-typedef struct _VMBUS_CHANNEL_INITIATE_CONTACT
-{
- VMBUS_CHANNEL_MESSAGE_HEADER Header;
- u32 VMBusVersionRequested;
- u32 Padding2;
- u64 InterruptPage;
- u64 MonitorPage1;
- u64 MonitorPage2;
-} VMBUS_CHANNEL_INITIATE_CONTACT, *PVMBUS_CHANNEL_INITIATE_CONTACT;
-
-typedef struct _VMBUS_CHANNEL_VERSION_RESPONSE
-{
- VMBUS_CHANNEL_MESSAGE_HEADER Header;
- bool VersionSupported;
-} VMBUS_CHANNEL_VERSION_RESPONSE, *PVMBUS_CHANNEL_VERSION_RESPONSE;
+typedef struct _VMBUS_CHANNEL_RELID_RELEASED {
+ VMBUS_CHANNEL_MESSAGE_HEADER Header;
+ u32 ChildRelId;
+} __attribute__((packed)) VMBUS_CHANNEL_RELID_RELEASED, *PVMBUS_CHANNEL_RELID_RELEASED;
+
+typedef struct _VMBUS_CHANNEL_INITIATE_CONTACT {
+ VMBUS_CHANNEL_MESSAGE_HEADER Header;
+ u32 VMBusVersionRequested;
+ u32 Padding2;
+ u64 InterruptPage;
+ u64 MonitorPage1;
+ u64 MonitorPage2;
+} __attribute__((packed)) VMBUS_CHANNEL_INITIATE_CONTACT, *PVMBUS_CHANNEL_INITIATE_CONTACT;
+
+typedef struct _VMBUS_CHANNEL_VERSION_RESPONSE {
+ VMBUS_CHANNEL_MESSAGE_HEADER Header;
+ bool VersionSupported;
+} __attribute__((packed)) VMBUS_CHANNEL_VERSION_RESPONSE, *PVMBUS_CHANNEL_VERSION_RESPONSE;
typedef VMBUS_CHANNEL_MESSAGE_HEADER VMBUS_CHANNEL_UNLOAD, *PVMBUS_CHANNEL_UNLOAD;
-
-/* Kind of a table to use the preprocessor to get us the right type for a */
-/* specified message ID. Used with ChAllocateSendMessage() */
-
-#define ChannelMessageQueryVmbusVersion_TYPE VMBUS_CHANNEL_MESSAGE_HEADER
-#define ChannelMessageVmbusVersionSupported_TYPE VMBUS_CHANNEL_VERSION_SUPPORTED
-#define ChannelMessageOfferChannel_TYPE VMBUS_CHANNEL_OFFER_CHANNEL
-#define ChannelMessageRescindChannelOffer_TYPE VMBUS_CHANNEL_RESCIND_OFFER
-#define ChannelMessageRequestOffers_TYPE VMBUS_CHANNEL_MESSAGE_HEADER
-#define ChannelMessageAllOffersDelivered_TYPE VMBUS_CHANNEL_MESSAGE_HEADER
-#define ChannelMessageOpenChannel_TYPE VMBUS_CHANNEL_OPEN_CHANNEL
-#define ChannelMessageOpenChannelResult_TYPE VMBUS_CHANNEL_OPEN_RESULT
-#define ChannelMessageCloseChannel_TYPE VMBUS_CHANNEL_CLOSE_CHANNEL
-#define ChannelMessageAllGpadlsUnmapped_TYPE VMBUS_CHANNEL_CLOSE_CHANNEL
-#define ChannelMessageGpadlHeader_TYPE VMBUS_CHANNEL_GPADL_HEADER
-#define ChannelMessageGpadlBody_TYPE VMBUS_CHANNEL_GPADL_BODY
-#define ChannelMessageGpadlCreated_TYPE VMBUS_CHANNEL_GPADL_CREATED
-#define ChannelMessageGpadlTeardown_TYPE VMBUS_CHANNEL_GPADL_TEARDOWN
-#define ChannelMessageGpadlTorndown_TYPE VMBUS_CHANNEL_GPADL_TORNDOWN
-#define ChannelMessageViewRangeAdd_TYPE VMBUS_CHANNEL_VIEW_RANGE_ADD
-#define ChannelMessageViewRangeRemove_TYPE VMBUS_CHANNEL_VIEW_RANGE_REMOVE
-#define ChannelMessageRelIdReleased_TYPE VMBUS_CHANNEL_RELID_RELEASED
-#define ChannelMessageInitiateContact_TYPE VMBUS_CHANNEL_INITIATE_CONTACT
-#define ChannelMessageVersionResponse_TYPE VMBUS_CHANNEL_VERSION_RESPONSE
-#define ChannelMessageUnload_TYPE VMBUS_CHANNEL_UNLOAD
-
-
-/* Preprocessor wrapper to ChAllocateSendMessageSize() converting the return */
-/* value to the correct pointer and calculate the needed size. */
-
-/* Argument: */
-
-/* Id - the numberic ID (type VMBUS_CHANNEL_MESSAGE_TYPE) of the message to */
-/* send. */
-
-#define ChAllocateSendMessage(Id, Fn, Context) \
- (Id##_TYPE*)ChAllocateSendMessageSized(sizeof(Id##_TYPE), Id, Fn, Context)
-
-
-#pragma pack(pop)
+#endif