Staging: hv: Added new hv_utils driver with shutdown as first functionality
[linux-2.6.git] / drivers / staging / hv / utils.h
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 _UTILS_H_
22 #define _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
43 struct vmbuspipe_hdr {
44     u32 flags;
45     u32 msgsize;
46 } __attribute__((packed));
47
48 struct ic_version {
49     u16 major;
50     u16 minor;
51 } __attribute__((packed));
52
53 struct 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
64 struct 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
71 struct shutdown_msg_data {
72         u32 reason_code;
73         u32 timeout_seconds;
74         u32 flags;
75         u8  display_message[2048];
76 } __attribute__((packed));
77
78 #define HV_SHUTDOWN_MSG             0
79
80 struct hyperv_service_callback {
81         u8 msg_type;
82         char *log_msg;
83         unsigned char data[16];
84         struct vmbus_channel *channel;
85         void (*callback) (void *context);
86 };
87
88 extern void prep_negotiate_resp(struct icmsg_hdr *,
89                                     struct icmsg_negotiate *, u8 *);
90 extern void shutdown_linux_system(void);
91 extern void chn_cb_negotiate(void *);
92 extern struct hyperv_service_callback hv_cb_utils[];
93
94 #endif /* _UTILS_H_ */