• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/staging/hv/
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 __HV_H__
26#define __HV_H__
27
28#include "hv_api.h"
29
30enum {
31	VMBUS_MESSAGE_CONNECTION_ID	= 1,
32	VMBUS_MESSAGE_PORT_ID		= 1,
33	VMBUS_EVENT_CONNECTION_ID	= 2,
34	VMBUS_EVENT_PORT_ID		= 2,
35	VMBUS_MONITOR_CONNECTION_ID	= 3,
36	VMBUS_MONITOR_PORT_ID		= 3,
37	VMBUS_MESSAGE_SINT		= 2,
38};
39
40/* #defines */
41
42#define HV_PRESENT_BIT			0x80000000
43
44#define HV_LINUX_GUEST_ID_LO		0x00000000
45#define HV_LINUX_GUEST_ID_HI		0xB16B00B5
46#define HV_LINUX_GUEST_ID		(((u64)HV_LINUX_GUEST_ID_HI << 32) | \
47					   HV_LINUX_GUEST_ID_LO)
48
49#define HV_CPU_POWER_MANAGEMENT		(1 << 0)
50#define HV_RECOMMENDATIONS_MAX		4
51
52#define HV_X64_MAX			5
53#define HV_CAPS_MAX			8
54
55
56#define HV_HYPERCALL_PARAM_ALIGN	sizeof(u64)
57
58
59/* Service definitions */
60
61#define HV_SERVICE_PARENT_PORT				(0)
62#define HV_SERVICE_PARENT_CONNECTION			(0)
63
64#define HV_SERVICE_CONNECT_RESPONSE_SUCCESS		(0)
65#define HV_SERVICE_CONNECT_RESPONSE_INVALID_PARAMETER	(1)
66#define HV_SERVICE_CONNECT_RESPONSE_UNKNOWN_SERVICE	(2)
67#define HV_SERVICE_CONNECT_RESPONSE_CONNECTION_REJECTED	(3)
68
69#define HV_SERVICE_CONNECT_REQUEST_MESSAGE_ID		(1)
70#define HV_SERVICE_CONNECT_RESPONSE_MESSAGE_ID		(2)
71#define HV_SERVICE_DISCONNECT_REQUEST_MESSAGE_ID	(3)
72#define HV_SERVICE_DISCONNECT_RESPONSE_MESSAGE_ID	(4)
73#define HV_SERVICE_MAX_MESSAGE_ID				(4)
74
75#define HV_SERVICE_PROTOCOL_VERSION (0x0010)
76#define HV_CONNECT_PAYLOAD_BYTE_COUNT 64
77
78/* #define VMBUS_REVISION_NUMBER	6 */
79
80/* Our local vmbus's port and connection id. Anything >0 is fine */
81/* #define VMBUS_PORT_ID		11 */
82
83/* 628180B8-308D-4c5e-B7DB-1BEB62E62EF4 */
84static const struct hv_guid VMBUS_SERVICE_ID = {
85	.data = {
86		0xb8, 0x80, 0x81, 0x62, 0x8d, 0x30, 0x5e, 0x4c,
87		0xb7, 0xdb, 0x1b, 0xeb, 0x62, 0xe6, 0x2e, 0xf4
88	},
89};
90
91#define MAX_NUM_CPUS	32
92
93
94struct hv_input_signal_event_buffer {
95	u64 Align8;
96	struct hv_input_signal_event Event;
97};
98
99struct hv_context {
100	/* We only support running on top of Hyper-V
101	* So at this point this really can only contain the Hyper-V ID
102	*/
103	u64 GuestId;
104
105	void *HypercallPage;
106
107	bool SynICInitialized;
108
109	/*
110	 * This is used as an input param to HvCallSignalEvent hypercall. The
111	 * input param is immutable in our usage and must be dynamic mem (vs
112	 * stack or global). */
113	struct hv_input_signal_event_buffer *SignalEventBuffer;
114	/* 8-bytes aligned of the buffer above */
115	struct hv_input_signal_event *SignalEventParam;
116
117	void *synICMessagePage[MAX_NUM_CPUS];
118	void *synICEventPage[MAX_NUM_CPUS];
119};
120
121extern struct hv_context gHvContext;
122
123
124/* Hv Interface */
125
126extern int HvInit(void);
127
128extern void HvCleanup(void);
129
130extern u16 HvPostMessage(union hv_connection_id connectionId,
131			 enum hv_message_type messageType,
132			 void *payload, size_t payloadSize);
133
134extern u16 HvSignalEvent(void);
135
136extern void HvSynicInit(void *irqarg);
137
138extern void HvSynicCleanup(void *arg);
139
140#endif /* __HV_H__ */
141