Commit | Line | Data |
---|---|---|
565e7dc8 HJ |
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 | ||
1aa2383b GKH |
24 | #ifndef __VMBUSCHANNELINTERFACE_H |
25 | #define __VMBUSCHANNELINTERFACE_H | |
565e7dc8 | 26 | |
1aa2383b GKH |
27 | /* |
28 | * A revision number of vmbus that is used for ensuring both ends on a | |
29 | * partition are using compatible versions. | |
30 | */ | |
31 | #define VMBUS_REVISION_NUMBER 13 | |
565e7dc8 | 32 | |
454f18a9 | 33 | /* Make maximum size of pipe payload of 16K */ |
1aa2383b | 34 | #define MAX_PIPE_DATA_PAYLOAD (sizeof(u8) * 16384) |
454f18a9 BP |
35 | |
36 | /* Define PipeMode values. */ | |
1aa2383b GKH |
37 | #define VMBUS_PIPE_TYPE_BYTE 0x00000000 |
38 | #define VMBUS_PIPE_TYPE_MESSAGE 0x00000004 | |
454f18a9 BP |
39 | |
40 | /* The size of the user defined data buffer for non-pipe offers. */ | |
1aa2383b | 41 | #define MAX_USER_DEFINED_BYTES 120 |
454f18a9 BP |
42 | |
43 | /* The size of the user defined data buffer for pipe offers. */ | |
1aa2383b | 44 | #define MAX_PIPE_USER_DEFINED_BYTES 116 |
454f18a9 | 45 | |
1aa2383b GKH |
46 | /* |
47 | * At the center of the Channel Management library is the Channel Offer. This | |
48 | * struct contains the fundamental information about an offer. | |
49 | */ | |
1732a1e8 | 50 | struct vmbus_channel_offer { |
1aa2383b GKH |
51 | struct hv_guid InterfaceType; |
52 | struct hv_guid InterfaceInstance; | |
53 | u64 InterruptLatencyIn100nsUnits; | |
54 | u32 InterfaceRevision; | |
55 | u32 ServerContextAreaSize; /* in bytes */ | |
56 | u16 ChannelFlags; | |
57 | u16 MmioMegabytes; /* in bytes * 1024 * 1024 */ | |
58 | ||
59 | union { | |
60 | /* Non-pipes: The user has MAX_USER_DEFINED_BYTES bytes. */ | |
61 | struct { | |
62 | unsigned char UserDefined[MAX_USER_DEFINED_BYTES]; | |
63 | } Standard; | |
64 | ||
65 | /* | |
66 | * Pipes: | |
67 | * The following sructure is an integrated pipe protocol, which | |
68 | * is implemented on top of standard user-defined data. Pipe | |
69 | * clients have MAX_PIPE_USER_DEFINED_BYTES left for their own | |
70 | * use. | |
71 | */ | |
72 | struct { | |
73 | u32 PipeMode; | |
74 | unsigned char UserDefined[MAX_PIPE_USER_DEFINED_BYTES]; | |
75 | } Pipe; | |
76 | } u; | |
77 | u32 Padding; | |
1732a1e8 | 78 | } __attribute__((packed)); |
565e7dc8 | 79 | |
454f18a9 | 80 | /* Server Flags */ |
1aa2383b GKH |
81 | #define VMBUS_CHANNEL_ENUMERATE_DEVICE_INTERFACE 1 |
82 | #define VMBUS_CHANNEL_SERVER_SUPPORTS_TRANSFER_PAGES 2 | |
83 | #define VMBUS_CHANNEL_SERVER_SUPPORTS_GPADLS 4 | |
84 | #define VMBUS_CHANNEL_NAMED_PIPE_MODE 0x10 | |
85 | #define VMBUS_CHANNEL_LOOPBACK_OFFER 0x100 | |
86 | #define VMBUS_CHANNEL_PARENT_OFFER 0x200 | |
87 | #define VMBUS_CHANNEL_REQUEST_MONITORED_NOTIFICATION 0x400 | |
454f18a9 | 88 | |
565e7dc8 | 89 | #endif |