]> Pileus Git - ~andy/linux/blob - drivers/staging/hv/Channel.h
Staging: hv: cleanup coding style issues in Channel.h
[~andy/linux] / drivers / staging / hv / Channel.h
1 /*
2  *
3  * Copyright (c) 2009, Microsoft Corporation.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms and conditions of the GNU General Public License,
7  * version 2, as published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
12  * more details.
13  *
14  * You should have received a copy of the GNU General Public License along with
15  * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
16  * Place - Suite 330, Boston, MA 02111-1307 USA.
17  *
18  * Authors:
19  *   Haiyang Zhang <haiyangz@microsoft.com>
20  *   Hank Janssen  <hjanssen@microsoft.com>
21  *
22  */
23
24
25 #ifndef _CHANNEL_H_
26 #define _CHANNEL_H_
27
28 #include "include/osd.h"
29 #include "ChannelMgmt.h"
30
31 /* The format must be the same as VMDATA_GPA_DIRECT */
32 struct VMBUS_CHANNEL_PACKET_PAGE_BUFFER {
33         u16 Type;
34         u16 DataOffset8;
35         u16 Length8;
36         u16 Flags;
37         u64 TransactionId;
38         u32 Reserved;
39         u32 RangeCount;
40         PAGE_BUFFER Range[MAX_PAGE_BUFFER_COUNT];
41 } __attribute__((packed));
42
43 /* The format must be the same as VMDATA_GPA_DIRECT */
44 struct VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER {
45         u16 Type;
46         u16 DataOffset8;
47         u16 Length8;
48         u16 Flags;
49         u64 TransactionId;
50         u32 Reserved;
51         u32 RangeCount;         /* Always 1 in this case */
52         MULTIPAGE_BUFFER Range;
53 } __attribute__((packed));
54
55
56 extern int VmbusChannelOpen(VMBUS_CHANNEL *Channel,
57                             u32 SendRingBufferSize,
58                             u32 RecvRingBufferSize,
59                             void *UserData,
60                             u32 UserDataLen,
61                             PFN_CHANNEL_CALLBACK pfnOnChannelCallback,
62                             void *Context);
63
64 extern void VmbusChannelClose(VMBUS_CHANNEL *Channel);
65
66 extern int VmbusChannelSendPacket(VMBUS_CHANNEL *Channel,
67                                   const void *Buffer,
68                                   u32 BufferLen,
69                                   u64 RequestId,
70                                   VMBUS_PACKET_TYPE Type,
71                                   u32 Flags);
72
73 extern int VmbusChannelSendPacketPageBuffer(VMBUS_CHANNEL *Channel,
74                                             PAGE_BUFFER PageBuffers[],
75                                             u32 PageCount,
76                                             void *Buffer,
77                                             u32 BufferLen,
78                                             u64 RequestId);
79
80 extern int VmbusChannelSendPacketMultiPageBuffer(VMBUS_CHANNEL *Channel,
81                                         MULTIPAGE_BUFFER *MultiPageBuffer,
82                                         void *Buffer,
83                                         u32 BufferLen,
84                                         u64 RequestId);
85
86 extern int VmbusChannelEstablishGpadl(VMBUS_CHANNEL *Channel,
87                                       void *Kbuffer,
88                                       u32 Size,
89                                       u32 *GpadlHandle);
90
91 extern int VmbusChannelTeardownGpadl(VMBUS_CHANNEL *Channel,
92                                      u32 GpadlHandle);
93
94 extern int VmbusChannelRecvPacket(VMBUS_CHANNEL *Channel,
95                                   void *Buffer,
96                                   u32 BufferLen,
97                                   u32 *BufferActualLen,
98                                   u64 *RequestId);
99
100 extern int VmbusChannelRecvPacketRaw(VMBUS_CHANNEL *Channel,
101                                      void *Buffer,
102                                      u32 BufferLen,
103                                      u32 *BufferActualLen,
104                                      u64 *RequestId);
105
106 extern void VmbusChannelOnChannelEvent(VMBUS_CHANNEL *Channel);
107
108 extern void VmbusChannelGetDebugInfo(VMBUS_CHANNEL *Channel,
109                                      VMBUS_CHANNEL_DEBUG_INFO *DebugInfo);
110
111 extern void VmbusChannelOnTimer(unsigned long data);
112
113 #endif /* _CHANNEL_H_ */