xref: /openbsd-src/usr.sbin/ldomd/hvctl.h (revision 670616fc736d94265e4b0f3ac9782fef3126bea3)
1*670616fcSkettenis /*	$OpenBSD: hvctl.h,v 1.2 2012/12/10 06:42:12 kettenis Exp $	*/
234574250Skettenis 
334574250Skettenis /*
434574250Skettenis  * Copyright (c) 2012 Mark Kettenis
534574250Skettenis  *
634574250Skettenis  * Permission to use, copy, modify, and distribute this software for any
734574250Skettenis  * purpose with or without fee is hereby granted, provided that the above
834574250Skettenis  * copyright notice and this permission notice appear in all copies.
934574250Skettenis  *
1034574250Skettenis  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1134574250Skettenis  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1234574250Skettenis  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1334574250Skettenis  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1434574250Skettenis  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1534574250Skettenis  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1634574250Skettenis  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1734574250Skettenis  */
1834574250Skettenis 
1934574250Skettenis struct hv_io {
2034574250Skettenis 	uint64_t	hi_cookie;
2134574250Skettenis 	void		*hi_addr;
2234574250Skettenis 	size_t		hi_len;
2334574250Skettenis };
2434574250Skettenis 
2534574250Skettenis #define HVIOCREAD	_IOW('h', 0, struct hv_io)
2634574250Skettenis #define HVIOCWRITE	_IOW('h', 1, struct hv_io)
2734574250Skettenis 
2834574250Skettenis #define SIS_NORMAL		0x1
2934574250Skettenis #define SIS_TRANSITION		0x2
3034574250Skettenis #define SOFT_STATE_SIZE		32
3134574250Skettenis 
3234574250Skettenis #define GUEST_STATE_STOPPED		0x0
3334574250Skettenis #define GUEST_STATE_RESETTING		0x1
3434574250Skettenis #define GUEST_STATE_NORMAL		0x2
3534574250Skettenis #define GUEST_STATE_SUSPENDED		0x3
3634574250Skettenis #define GUEST_STATE_EXITING		0x4
3734574250Skettenis #define GUEST_STATE_UNCONFIGURED	0xff
3834574250Skettenis 
3934574250Skettenis #define HVCTL_RES_STATUS_DATA_SIZE	40
4034574250Skettenis 
4134574250Skettenis struct hvctl_header {
4234574250Skettenis 	uint16_t	op;
4334574250Skettenis 	uint16_t	seq;
4434574250Skettenis 	uint16_t	chksum;
4534574250Skettenis 	uint16_t	status;
4634574250Skettenis };
4734574250Skettenis 
4834574250Skettenis struct hvctl_hello {
4934574250Skettenis 	uint16_t	major;
5034574250Skettenis 	uint16_t	minor;
5134574250Skettenis };
5234574250Skettenis 
5334574250Skettenis struct hvctl_challenge {
5434574250Skettenis 	uint64_t	code;
5534574250Skettenis };
5634574250Skettenis 
5734574250Skettenis struct hvctl_hvconfig {
5834574250Skettenis 	uint64_t	hv_membase;
5934574250Skettenis 	uint64_t	hv_memsize;
6034574250Skettenis 	uint64_t	hvmdp;
6134574250Skettenis 	uint64_t	del_reconf_hvmdp;
6234574250Skettenis 	uint32_t	del_reconf_gid;
6334574250Skettenis };
6434574250Skettenis 
6534574250Skettenis struct hvctl_reconfig {
6634574250Skettenis 	uint64_t	hvmdp;
6734574250Skettenis 	uint32_t	guestid;
6834574250Skettenis };
6934574250Skettenis 
7034574250Skettenis struct hvctl_guest_op {
7134574250Skettenis 	uint32_t	guestid;
7234574250Skettenis 	uint32_t	code;
7334574250Skettenis };
7434574250Skettenis 
7534574250Skettenis struct hvctl_res_status {
7634574250Skettenis 	uint32_t	res;
7734574250Skettenis 	uint32_t	resid;
7834574250Skettenis 	uint32_t	infoid;
7934574250Skettenis 	uint32_t	code;
8034574250Skettenis 	uint8_t         data[HVCTL_RES_STATUS_DATA_SIZE];
8134574250Skettenis };
8234574250Skettenis 
8334574250Skettenis struct hvctl_rs_guest_state {
8434574250Skettenis 	uint64_t	state;
8534574250Skettenis };
8634574250Skettenis 
8734574250Skettenis struct hvctl_rs_guest_softstate {
8834574250Skettenis 	uint8_t		soft_state;
8934574250Skettenis 	char		soft_state_str[SOFT_STATE_SIZE];
9034574250Skettenis };
9134574250Skettenis 
9234574250Skettenis struct hvctl_rs_guest_util {
9334574250Skettenis 	uint64_t	lifespan;
9434574250Skettenis 	uint64_t	wallclock_delta;
9534574250Skettenis 	uint64_t	active_delta;
9634574250Skettenis 	uint64_t	stopped_cycles;
9734574250Skettenis 	uint64_t	yielded_cycles;
9834574250Skettenis };
9934574250Skettenis 
10034574250Skettenis struct hvctl_msg {
10134574250Skettenis 	struct hvctl_header	hdr;
10234574250Skettenis 	union {
10334574250Skettenis 		struct hvctl_hello	hello;
10434574250Skettenis 		struct hvctl_challenge	clnge;
10534574250Skettenis 		struct hvctl_hvconfig	hvcnf;
10634574250Skettenis 		struct hvctl_reconfig	reconfig;
10734574250Skettenis 		struct hvctl_guest_op	guestop;
10834574250Skettenis 		struct hvctl_res_status	resstat;
10934574250Skettenis 	} msg;
11034574250Skettenis };
11134574250Skettenis 
11234574250Skettenis #define HVCTL_OP_HELLO		0
11334574250Skettenis #define HVCTL_OP_CHALLENGE	1
11434574250Skettenis #define HVCTL_OP_RESPONSE	2
11534574250Skettenis #define HVCTL_OP_GET_HVCONFIG	3
11634574250Skettenis #define HVCTL_OP_RECONFIGURE	4
11734574250Skettenis #define HVCTL_OP_GUEST_START	5
11834574250Skettenis #define HVCTL_OP_GUEST_STOP	6
119*670616fcSkettenis #define HVCTL_OP_GUEST_PANIC	10
12034574250Skettenis #define HVCTL_OP_GET_RES_STAT	11
12134574250Skettenis 
12234574250Skettenis #define HVCTL_ST_OK		0
12334574250Skettenis 
12434574250Skettenis #define HVCTL_RES_GUEST		0
12534574250Skettenis 
12634574250Skettenis #define HVCTL_INFO_GUEST_STATE		0
12734574250Skettenis #define HVCTL_INFO_GUEST_SOFT_STATE	1
12834574250Skettenis #define HVCTL_INFO_GUEST_UTILISATION	3
12934574250Skettenis 
130