summaryrefslogtreecommitdiffstats
path: root/drivers/staging/hv/include/VmbusChannelInterface.h
blob: 900e1fc2fb861fadf1dbc38751c86e2eaa7e4687 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
 *
 * 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>
 *
 */


#pragma once
// allow nameless unions
//#pragma warning(disable : 4201)

//
// A revision number of vmbus that is used for ensuring both ends on a
// partition are using compatible versions.
//
#define VMBUS_REVISION_NUMBER       13

//
// Make maximum size of pipe payload of 16K
//
#define MAX_PIPE_DATA_PAYLOAD 		(sizeof(BYTE) * 16384)

//
// Define PipeMode values.
//
#define VMBUS_PIPE_TYPE_BYTE                    0x00000000
#define VMBUS_PIPE_TYPE_MESSAGE                 0x00000004

//
// The size of the user defined data buffer for non-pipe offers.
//
#define MAX_USER_DEFINED_BYTES                  120

//
// The size of the user defined data buffer for pipe offers.
//
#define MAX_PIPE_USER_DEFINED_BYTES             116


//
// At the center of the Channel Management library is
// the Channel Offer. This struct contains the
// fundamental information about an offer.
//
#pragma pack(push,1)

typedef struct
{

    GUID    InterfaceType;
    GUID    InterfaceInstance;
    UINT64  InterruptLatencyIn100nsUnits;
    u32  InterfaceRevision;
    u32  ServerContextAreaSize;  // in bytes
    u16  ChannelFlags;
    u16  MmioMegabytes;          // in bytes * 1024 * 1024

    union
    {
        //
        // Non-pipes: The user has MAX_USER_DEFINED_BYTES bytes.
        //
        struct
        {
            UCHAR   UserDefined[MAX_USER_DEFINED_BYTES];
        } Standard;

        //
        // Pipes: The following sructure is an integrated pipe protocol, which
        //        is implemented on top of standard user-defined data. Pipe clients
        //        have MAX_PIPE_USER_DEFINED_BYTES left for their own use.
        //
        struct
        {
            u32  PipeMode;
            UCHAR   UserDefined[MAX_PIPE_USER_DEFINED_BYTES];
        } Pipe;
    } u;
	u32	Padding;
} VMBUS_CHANNEL_OFFER, *PVMBUS_CHANNEL_OFFER;
#pragma pack(pop)


//
// Verify the MAX_PIPE_USER_DEFINED_BYTES value.
//
//C_ASSERT(MAX_PIPE_USER_DEFINED_BYTES ==
//         MAX_USER_DEFINED_BYTES -
//         (FIELD_OFFSET(VMBUS_CHANNEL_OFFER, u.Pipe.UserDefined) -
//          FIELD_OFFSET(VMBUS_CHANNEL_OFFER, u.Standard.UserDefined)));
//

typedef u32 GPADL_HANDLE;

//
// Server Flags
//

#define VMBUS_CHANNEL_ENUMERATE_DEVICE_INTERFACE           1
#define VMBUS_CHANNEL_SERVER_SUPPORTS_TRANSFER_PAGES       2
#define VMBUS_CHANNEL_SERVER_SUPPORTS_GPADLS               4
#define VMBUS_CHANNEL_NAMED_PIPE_MODE                   0x10
#define VMBUS_CHANNEL_LOOPBACK_OFFER                   0x100
#define VMBUS_CHANNEL_PARENT_OFFER                     0x200
#define VMBUS_CHANNEL_REQUEST_MONITORED_NOTIFICATION   0x400

//
// TEMPTEMP -- move this next define to devioctl.h some day
//

#ifndef FILE_DEVICE_VMBUS
#define FILE_DEVICE_VMBUS   0x0000003E
#endif

OpenPOWER on IntegriCloud