Retrieve various channel debug info
--*/
-static void
+void
VmbusChannelGetDebugInfo(
VMBUS_CHANNEL *Channel,
VMBUS_CHANNEL_DEBUG_INFO *DebugInfo
Open the specified channel.
--*/
-static int
+int
VmbusChannelOpen(
VMBUS_CHANNEL *NewChannel,
u32 SendRingBufferSize,
Estabish a GPADL for the specified buffer
--*/
-static int
+int
VmbusChannelEstablishGpadl(
VMBUS_CHANNEL *Channel,
void * Kbuffer, /* from kmalloc() */
Teardown the specified GPADL handle
--*/
-static int
+int
VmbusChannelTeardownGpadl(
VMBUS_CHANNEL *Channel,
u32 GpadlHandle
Close the specified channel
--*/
-static void
+void
VmbusChannelClose(
VMBUS_CHANNEL *Channel
)
Send the specified buffer on the given channel
--*/
-static int
+int
VmbusChannelSendPacket(
VMBUS_CHANNEL *Channel,
const void * Buffer,
Send a range of single-page buffer packets using a GPADL Direct packet type.
--*/
-static int
+int
VmbusChannelSendPacketPageBuffer(
VMBUS_CHANNEL *Channel,
PAGE_BUFFER PageBuffers[],
Send a multi-page buffer packet using a GPADL Direct packet type.
--*/
-static int
+int
VmbusChannelSendPacketMultiPageBuffer(
VMBUS_CHANNEL *Channel,
MULTIPAGE_BUFFER *MultiPageBuffer,
--*/
/* TODO: Do we ever receive a gpa direct packet other than the ones we send ? */
-static int
-VmbusChannelRecvPacket(
- VMBUS_CHANNEL *Channel,
- void * Buffer,
- u32 BufferLen,
- u32* BufferActualLen,
- u64* RequestId
- )
+int VmbusChannelRecvPacket(VMBUS_CHANNEL *Channel,
+ void *Buffer,
+ u32 BufferLen,
+ u32 *BufferActualLen,
+ u64 *RequestId)
{
VMPACKET_DESCRIPTOR desc;
u32 packetLen;
Retrieve the raw packet on the specified channel
--*/
-static int
+int
VmbusChannelRecvPacketRaw(
VMBUS_CHANNEL *Channel,
void * Buffer,
Channel event callback
--*/
-static void
-VmbusChannelOnChannelEvent(
- VMBUS_CHANNEL *Channel
- )
+void VmbusChannelOnChannelEvent(VMBUS_CHANNEL *Channel)
{
DumpVmbusChannel(Channel);
ASSERT(Channel->OnChannelCallback);
Timer event callback
--*/
-static void VmbusChannelOnTimer(unsigned long data)
+void VmbusChannelOnTimer(unsigned long data)
{
VMBUS_CHANNEL *channel = (VMBUS_CHANNEL*)data;
#include "include/osd.h"
#include "ChannelMgmt.h"
-#pragma pack(push,1)
-
-
/* The format must be the same as VMDATA_GPA_DIRECT */
struct VMBUS_CHANNEL_PACKET_PAGE_BUFFER {
- u16 Type;
- u16 DataOffset8;
- u16 Length8;
- u16 Flags;
- u64 TransactionId;
- u32 Reserved;
- u32 RangeCount;
- PAGE_BUFFER Range[MAX_PAGE_BUFFER_COUNT];
-};
-
+ u16 Type;
+ u16 DataOffset8;
+ u16 Length8;
+ u16 Flags;
+ u64 TransactionId;
+ u32 Reserved;
+ u32 RangeCount;
+ PAGE_BUFFER Range[MAX_PAGE_BUFFER_COUNT];
+} __attribute__((packed));
/* The format must be the same as 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 */
- MULTIPAGE_BUFFER Range;
-};
-
-#pragma pack(pop)
-
-
-/* Routines */
-
-
-static int
-VmbusChannelOpen(
- VMBUS_CHANNEL *Channel,
- u32 SendRingBufferSize,
- u32 RecvRingBufferSize,
- void * UserData,
- u32 UserDataLen,
- PFN_CHANNEL_CALLBACK pfnOnChannelCallback,
- void * Context
- );
-
-static void
-VmbusChannelClose(
- VMBUS_CHANNEL *Channel
- );
-
-static int
-VmbusChannelSendPacket(
- VMBUS_CHANNEL *Channel,
- const void * Buffer,
- u32 BufferLen,
- u64 RequestId,
- VMBUS_PACKET_TYPE Type,
- u32 Flags
-);
-
-static int
-VmbusChannelSendPacketPageBuffer(
- VMBUS_CHANNEL *Channel,
- PAGE_BUFFER PageBuffers[],
- u32 PageCount,
- void * Buffer,
- u32 BufferLen,
- u64 RequestId
- );
-
-static int
-VmbusChannelSendPacketMultiPageBuffer(
- VMBUS_CHANNEL *Channel,
- MULTIPAGE_BUFFER *MultiPageBuffer,
- void * Buffer,
- u32 BufferLen,
- u64 RequestId
-);
-
-static int
-VmbusChannelEstablishGpadl(
- VMBUS_CHANNEL *Channel,
- void * Kbuffer, /* from kmalloc() */
- u32 Size, /* page-size multiple */
- u32 *GpadlHandle
- );
-
-static int
-VmbusChannelTeardownGpadl(
- VMBUS_CHANNEL *Channel,
- u32 GpadlHandle
- );
-
-static int
-VmbusChannelRecvPacket(
- VMBUS_CHANNEL *Channel,
- void * Buffer,
- u32 BufferLen,
- u32* BufferActualLen,
- u64* RequestId
- );
-
-static int
-VmbusChannelRecvPacketRaw(
- VMBUS_CHANNEL *Channel,
- void * Buffer,
- u32 BufferLen,
- u32* BufferActualLen,
- u64* RequestId
- );
-
-static void
-VmbusChannelOnChannelEvent(
- VMBUS_CHANNEL *Channel
- );
-
-static void
-VmbusChannelGetDebugInfo(
- VMBUS_CHANNEL *Channel,
- VMBUS_CHANNEL_DEBUG_INFO *DebugInfo
- );
-
-static void VmbusChannelOnTimer(unsigned long data);
+ u16 Type;
+ u16 DataOffset8;
+ u16 Length8;
+ u16 Flags;
+ u64 TransactionId;
+ u32 Reserved;
+ u32 RangeCount; /* Always 1 in this case */
+ MULTIPAGE_BUFFER Range;
+} __attribute__((packed));
+
+
+extern int VmbusChannelOpen(VMBUS_CHANNEL *Channel,
+ u32 SendRingBufferSize,
+ u32 RecvRingBufferSize,
+ void *UserData,
+ u32 UserDataLen,
+ PFN_CHANNEL_CALLBACK pfnOnChannelCallback,
+ void *Context);
+
+extern void VmbusChannelClose(VMBUS_CHANNEL *Channel);
+
+extern int VmbusChannelSendPacket(VMBUS_CHANNEL *Channel,
+ const void *Buffer,
+ u32 BufferLen,
+ u64 RequestId,
+ VMBUS_PACKET_TYPE Type,
+ u32 Flags);
+
+extern int VmbusChannelSendPacketPageBuffer(VMBUS_CHANNEL *Channel,
+ PAGE_BUFFER PageBuffers[],
+ u32 PageCount,
+ void *Buffer,
+ u32 BufferLen,
+ u64 RequestId);
+
+extern int VmbusChannelSendPacketMultiPageBuffer(VMBUS_CHANNEL *Channel,
+ MULTIPAGE_BUFFER *MultiPageBuffer,
+ void *Buffer,
+ u32 BufferLen,
+ u64 RequestId);
+
+extern int VmbusChannelEstablishGpadl(VMBUS_CHANNEL *Channel,
+ void *Kbuffer,
+ u32 Size,
+ u32 *GpadlHandle);
+
+extern int VmbusChannelTeardownGpadl(VMBUS_CHANNEL *Channel,
+ u32 GpadlHandle);
+
+extern int VmbusChannelRecvPacket(VMBUS_CHANNEL *Channel,
+ void *Buffer,
+ u32 BufferLen,
+ u32 *BufferActualLen,
+ u64 *RequestId);
+
+extern int VmbusChannelRecvPacketRaw(VMBUS_CHANNEL *Channel,
+ void *Buffer,
+ u32 BufferLen,
+ u32 *BufferActualLen,
+ u64 *RequestId);
+
+extern void VmbusChannelOnChannelEvent(VMBUS_CHANNEL *Channel);
+
+extern void VmbusChannelGetDebugInfo(VMBUS_CHANNEL *Channel,
+ VMBUS_CHANNEL_DEBUG_INFO *DebugInfo);
+
+extern void VmbusChannelOnTimer(unsigned long data);
+
#endif /* _CHANNEL_H_ */