X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=drivers%2Fstaging%2Fhv%2FChannel.h;h=6b283edcae68b9513c0e872cfd7d9cb7fbddac70;hb=0949a02544b7ffc8378fdb61aa7d0e783de73c36;hp=54b79f083fbf9b2a43ce130d879ce70dd67a0211;hpb=0cf4fa80781dcdb5bf6096fa221f3fc6c7073405;p=~andy%2Flinux diff --git a/drivers/staging/hv/Channel.h b/drivers/staging/hv/Channel.h index 54b79f083fb..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 */ +/* 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; - PAGE_BUFFER Range[MAX_PAGE_BUFFER_COUNT]; -}; - - -/* The format must be the same as VMDATA_GPA_DIRECT */ -typedef 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; -} VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER; - -#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( - void *Context - ); + 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_ */