• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/drivers/staging/hv/
1/*
2 * Copyright (c) 2009, Microsoft Corporation.
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms and conditions of the GNU General Public License,
6 * version 2, as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope it will be useful, but WITHOUT
9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
11 * more details.
12 *
13 * You should have received a copy of the GNU General Public License along with
14 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
15 * Place - Suite 330, Boston, MA 02111-1307 USA.
16 *
17 * Authors:
18 *   Haiyang Zhang <haiyangz@microsoft.com>
19 *   Hank Janssen  <hjanssen@microsoft.com>
20 */
21#ifndef __HV_UTILS_H_
22#define __HV_UTILS_H_
23
24/*
25 * Common header for Hyper-V ICs
26 */
27#define ICMSGTYPE_NEGOTIATE		0
28#define ICMSGTYPE_HEARTBEAT		1
29#define ICMSGTYPE_KVPEXCHANGE		2
30#define ICMSGTYPE_SHUTDOWN		3
31#define ICMSGTYPE_TIMESYNC		4
32#define ICMSGTYPE_VSS			5
33
34#define ICMSGHDRFLAG_TRANSACTION	1
35#define ICMSGHDRFLAG_REQUEST		2
36#define ICMSGHDRFLAG_RESPONSE		4
37
38#define HV_S_OK				0x00000000
39#define HV_E_FAIL			0x80004005
40#define HV_ERROR_NOT_SUPPORTED		0x80070032
41#define HV_ERROR_MACHINE_LOCKED		0x800704F7
42
43struct vmbuspipe_hdr {
44	u32 flags;
45	u32 msgsize;
46} __attribute__((packed));
47
48struct ic_version {
49	u16 major;
50	u16 minor;
51} __attribute__((packed));
52
53struct icmsg_hdr {
54	struct ic_version icverframe;
55	u16 icmsgtype;
56	struct ic_version icvermsg;
57	u16 icmsgsize;
58	u32 status;
59	u8 ictransaction_id;
60	u8 icflags;
61	u8 reserved[2];
62} __attribute__((packed));
63
64struct icmsg_negotiate {
65	u16 icframe_vercnt;
66	u16 icmsg_vercnt;
67	u32 reserved;
68	struct ic_version icversion_data[1]; /* any size array */
69} __attribute__((packed));
70
71struct shutdown_msg_data {
72	u32 reason_code;
73	u32 timeout_seconds;
74	u32 flags;
75	u8  display_message[2048];
76} __attribute__((packed));
77
78struct heartbeat_msg_data {
79	u64 seq_num;
80	u32 reserved[8];
81} __attribute__((packed));
82
83/* Time Sync IC defs */
84#define ICTIMESYNCFLAG_PROBE	0
85#define ICTIMESYNCFLAG_SYNC	1
86#define ICTIMESYNCFLAG_SAMPLE	2
87
88#ifdef __x86_64__
89#define WLTIMEDELTA	116444736000000000L	/* in 100ns unit */
90#else
91#define WLTIMEDELTA	116444736000000000LL
92#endif
93
94struct ictimesync_data{
95	u64 parenttime;
96	u64 childtime;
97	u64 roundtriptime;
98	u8 flags;
99} __attribute__((packed));
100
101/* Index for each IC struct in array hv_cb_utils[] */
102#define HV_SHUTDOWN_MSG		0
103#define HV_TIMESYNC_MSG		1
104#define HV_HEARTBEAT_MSG	2
105
106struct hyperv_service_callback {
107	u8 msg_type;
108	char *log_msg;
109	unsigned char data[16];
110	struct vmbus_channel *channel;
111	void (*callback) (void *context);
112};
113
114extern void prep_negotiate_resp(struct icmsg_hdr *,
115				struct icmsg_negotiate *, u8 *);
116extern void chn_cb_negotiate(void *);
117extern struct hyperv_service_callback hv_cb_utils[];
118
119#endif /* __HV_UTILS_H_ */
120