-#pragma pack(push,1)
-
-
-// The format must be the same as VMDATA_GPA_DIRECT
-typedef struct _VMBUS_CHANNEL_PACKET_PAGE_BUFFER {
- UINT16 Type;
- UINT16 DataOffset8;
- UINT16 Length8;
- UINT16 Flags;
- UINT64 TransactionId;
- UINT32 Reserved;
- UINT32 RangeCount;
- PAGE_BUFFER Range[MAX_PAGE_BUFFER_COUNT];
-} VMBUS_CHANNEL_PACKET_PAGE_BUFFER;
-
-
-// The format must be the same as VMDATA_GPA_DIRECT
-typedef struct _VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER {
- UINT16 Type;
- UINT16 DataOffset8;
- UINT16 Length8;
- UINT16 Flags;
- UINT64 TransactionId;
- UINT32 Reserved;
- UINT32 RangeCount; // Always 1 in this case
- MULTIPAGE_BUFFER Range;
-} VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER;
-
-#pragma pack(pop)
-
-//
-// Routines
-//
-
-static int
-VmbusChannelOpen(
- VMBUS_CHANNEL *Channel,
- UINT32 SendRingBufferSize,
- UINT32 RecvRingBufferSize,
- void * UserData,
- UINT32 UserDataLen,
- PFN_CHANNEL_CALLBACK pfnOnChannelCallback,
- void * Context
- );
-
-static void
-VmbusChannelClose(
- VMBUS_CHANNEL *Channel
- );
-
-static int
-VmbusChannelSendPacket(
- VMBUS_CHANNEL *Channel,
- const void * Buffer,
- UINT32 BufferLen,
- UINT64 RequestId,
- VMBUS_PACKET_TYPE Type,
- UINT32 Flags
-);
-
-static int
-VmbusChannelSendPacketPageBuffer(
- VMBUS_CHANNEL *Channel,
- PAGE_BUFFER PageBuffers[],
- UINT32 PageCount,
- void * Buffer,
- UINT32 BufferLen,
- UINT64 RequestId
- );
-
-static int
-VmbusChannelSendPacketMultiPageBuffer(
- VMBUS_CHANNEL *Channel,
- MULTIPAGE_BUFFER *MultiPageBuffer,
- void * Buffer,
- UINT32 BufferLen,
- UINT64 RequestId
-);
-
-static int
-VmbusChannelEstablishGpadl(
- VMBUS_CHANNEL *Channel,
- void * Kbuffer, // from kmalloc()
- UINT32 Size, // page-size multiple
- UINT32 *GpadlHandle
- );
-
-static int
-VmbusChannelTeardownGpadl(
- VMBUS_CHANNEL *Channel,
- UINT32 GpadlHandle
- );
-
-static int
-VmbusChannelRecvPacket(
- VMBUS_CHANNEL *Channel,
- void * Buffer,
- UINT32 BufferLen,
- UINT32* BufferActualLen,
- UINT64* RequestId
- );
-
-static int
-VmbusChannelRecvPacketRaw(
- VMBUS_CHANNEL *Channel,
- void * Buffer,
- UINT32 BufferLen,
- UINT32* BufferActualLen,
- UINT64* RequestId
- );
-
-static void
-VmbusChannelOnChannelEvent(
- VMBUS_CHANNEL *Channel
- );
-
-static void
-VmbusChannelGetDebugInfo(
- VMBUS_CHANNEL *Channel,
- VMBUS_CHANNEL_DEBUG_INFO *DebugInfo
- );
-
-static void
-VmbusChannelOnTimer(
- void *Context
- );
-#endif //_CHANNEL_H_
+/* The format must be the same as struct vmdata_gpa_direct */
+struct VMBUS_CHANNEL_PACKET_PAGE_BUFFER {
+ u16 Type;
+ u16 DataOffset8;
+ u16 Length8;
+ u16 Flags;
+ u64 TransactionId;
+ u32 Reserved;
+ u32 RangeCount;
+ struct hv_page_buffer Range[MAX_PAGE_BUFFER_COUNT];
+} __attribute__((packed));
+
+/* The format must be the same as struct vmdata_gpa_direct */
+struct VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER {
+ u16 Type;
+ u16 DataOffset8;
+ u16 Length8;
+ u16 Flags;
+ u64 TransactionId;
+ u32 Reserved;
+ u32 RangeCount; /* Always 1 in this case */
+ struct hv_multipage_buffer Range;
+} __attribute__((packed));
+
+
+extern int VmbusChannelOpen(struct vmbus_channel *channel,
+ u32 SendRingBufferSize,
+ u32 RecvRingBufferSize,
+ void *UserData,
+ u32 UserDataLen,
+ void(*OnChannelCallback)(void *context),
+ void *Context);
+
+extern void VmbusChannelClose(struct vmbus_channel *channel);
+
+extern int VmbusChannelSendPacket(struct vmbus_channel *channel,
+ const void *Buffer,
+ u32 BufferLen,
+ u64 RequestId,
+ enum vmbus_packet_type Type,
+ u32 Flags);
+
+extern int VmbusChannelSendPacketPageBuffer(struct vmbus_channel *channel,
+ struct hv_page_buffer PageBuffers[],
+ u32 PageCount,
+ void *Buffer,
+ u32 BufferLen,
+ u64 RequestId);
+
+extern int VmbusChannelSendPacketMultiPageBuffer(struct vmbus_channel *channel,
+ struct hv_multipage_buffer *mpb,
+ void *Buffer,
+ u32 BufferLen,
+ u64 RequestId);
+
+extern int VmbusChannelEstablishGpadl(struct vmbus_channel *channel,
+ void *Kbuffer,
+ u32 Size,
+ u32 *GpadlHandle);
+
+extern int VmbusChannelTeardownGpadl(struct vmbus_channel *channel,
+ u32 GpadlHandle);
+
+extern int VmbusChannelRecvPacket(struct vmbus_channel *channel,
+ void *Buffer,
+ u32 BufferLen,
+ u32 *BufferActualLen,
+ u64 *RequestId);
+
+extern int VmbusChannelRecvPacketRaw(struct vmbus_channel *channel,
+ void *Buffer,
+ u32 BufferLen,
+ u32 *BufferActualLen,
+ u64 *RequestId);
+
+extern void VmbusChannelOnChannelEvent(struct vmbus_channel *channel);
+
+extern void VmbusChannelGetDebugInfo(struct vmbus_channel *channel,
+ struct vmbus_channel_debug_info *debug);
+
+extern void VmbusChannelOnTimer(unsigned long data);
+
+#endif /* _CHANNEL_H_ */