diff options
author | Hank Janssen <hjanssen@microsoft.com> | 2009-07-13 23:02:34 (GMT) |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-09-15 19:01:43 (GMT) |
commit | 3e7ee4902fe6996048f03433dd111426db3cfa92 (patch) | |
tree | c42d158ecca25ddb0b99a400fa2682eeaa0aa82e /drivers/staging/hv/Channel.h | |
parent | ab05778195b5cc1e77130424f7f6b6f848a137f1 (diff) | |
download | linux-fsl-qoriq-3e7ee4902fe6996048f03433dd111426db3cfa92.tar.xz |
Staging: hv: add the Hyper-V virtual bus
This is the virtual bus that all of the Linux Hyper-V drivers use.
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/hv/Channel.h')
-rw-r--r-- | drivers/staging/hv/Channel.h | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/drivers/staging/hv/Channel.h b/drivers/staging/hv/Channel.h new file mode 100644 index 0000000..117b2e1 --- /dev/null +++ b/drivers/staging/hv/Channel.h @@ -0,0 +1,157 @@ +/* + * + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang <haiyangz@microsoft.com> + * Hank Janssen <hjanssen@microsoft.com> + * + */ + + +#ifndef _CHANNEL_H_ +#define _CHANNEL_H_ + +#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 +// + +INTERNAL int +VmbusChannelOpen( + VMBUS_CHANNEL *Channel, + UINT32 SendRingBufferSize, + UINT32 RecvRingBufferSize, + PVOID UserData, + UINT32 UserDataLen, + PFN_CHANNEL_CALLBACK pfnOnChannelCallback, + PVOID Context + ); + +INTERNAL void +VmbusChannelClose( + VMBUS_CHANNEL *Channel + ); + +INTERNAL int +VmbusChannelSendPacket( + VMBUS_CHANNEL *Channel, + const PVOID Buffer, + UINT32 BufferLen, + UINT64 RequestId, + VMBUS_PACKET_TYPE Type, + UINT32 Flags +); + +INTERNAL int +VmbusChannelSendPacketPageBuffer( + VMBUS_CHANNEL *Channel, + PAGE_BUFFER PageBuffers[], + UINT32 PageCount, + PVOID Buffer, + UINT32 BufferLen, + UINT64 RequestId + ); + +INTERNAL int +VmbusChannelSendPacketMultiPageBuffer( + VMBUS_CHANNEL *Channel, + MULTIPAGE_BUFFER *MultiPageBuffer, + PVOID Buffer, + UINT32 BufferLen, + UINT64 RequestId +); + +INTERNAL int +VmbusChannelEstablishGpadl( + VMBUS_CHANNEL *Channel, + PVOID Kbuffer, // from kmalloc() + UINT32 Size, // page-size multiple + UINT32 *GpadlHandle + ); + +INTERNAL int +VmbusChannelTeardownGpadl( + VMBUS_CHANNEL *Channel, + UINT32 GpadlHandle + ); + +INTERNAL int +VmbusChannelRecvPacket( + VMBUS_CHANNEL *Channel, + PVOID Buffer, + UINT32 BufferLen, + UINT32* BufferActualLen, + UINT64* RequestId + ); + +INTERNAL int +VmbusChannelRecvPacketRaw( + VMBUS_CHANNEL *Channel, + PVOID Buffer, + UINT32 BufferLen, + UINT32* BufferActualLen, + UINT64* RequestId + ); + +INTERNAL void +VmbusChannelOnChannelEvent( + VMBUS_CHANNEL *Channel + ); + +INTERNAL void +VmbusChannelGetDebugInfo( + VMBUS_CHANNEL *Channel, + VMBUS_CHANNEL_DEBUG_INFO *DebugInfo + ); + +INTERNAL void +VmbusChannelOnTimer( + void *Context + ); +#endif //_CHANNEL_H_ |