X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=drivers%2Fstaging%2Fhv%2FChannel.h;h=6b283edcae68b9513c0e872cfd7d9cb7fbddac70;hb=0949a02544b7ffc8378fdb61aa7d0e783de73c36;hp=f511ca820ada52ab2437da2af2940bb2f70adc33;hpb=8282c400144a83f85f637a5251740d670e392e84;p=~andy%2Flinux diff --git a/drivers/staging/hv/Channel.h b/drivers/staging/hv/Channel.h index f511ca820ad..6b283edcae6 100644 --- a/drivers/staging/hv/Channel.h +++ b/drivers/staging/hv/Channel.h @@ -25,133 +25,88 @@ #ifndef _CHANNEL_H_ #define _CHANNEL_H_ -#include "include/osd.h" #include "ChannelMgmt.h" -#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_ */