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