1 /* $OpenBSD: ldomctl.h,v 1.5 2012/12/01 10:39:38 kettenis Exp $ */ 2 3 /* 4 * Copyright (c) 2012 Mark Kettenis 5 * 6 * Permission to use, copy, modify, and distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19 struct core; 20 struct guest; 21 22 struct console { 23 uint64_t ino; 24 uint64_t resource_id; 25 26 struct guest *guest; 27 struct ldc_endpoint *client_endpoint; 28 struct ldc_endpoint *server_endpoint; 29 struct md_node *hv_node; 30 TAILQ_ENTRY(console) link; 31 }; 32 33 struct cpu { 34 uint64_t pid, vid, gid, partid; 35 uint64_t resource_id; 36 37 struct guest *guest; 38 struct md_node *hv_node; 39 struct core *core; 40 TAILQ_ENTRY(cpu) link; 41 }; 42 43 struct device { 44 uint64_t gid; 45 uint64_t cfghandle; 46 uint64_t resource_id; 47 48 struct guest *guest; 49 struct md_node *hv_node; 50 TAILQ_ENTRY(device) link; 51 }; 52 53 struct mblock { 54 uint64_t membase; 55 uint64_t memsize; 56 uint64_t realbase; 57 uint64_t resource_id; 58 59 struct guest *guest; 60 struct md_node *hv_node; 61 TAILQ_ENTRY(mblock) link; 62 }; 63 64 struct ldc_endpoint { 65 uint64_t target_type; 66 uint64_t target_guest; 67 uint64_t channel; 68 uint64_t target_channel; 69 uint64_t tx_ino; 70 uint64_t rx_ino; 71 uint64_t resource_id; 72 uint64_t private_svc; 73 uint64_t svc_id; 74 75 struct guest *guest; 76 struct md_node *hv_node; 77 TAILQ_ENTRY(ldc_endpoint) link; 78 }; 79 80 struct ldc_channel { 81 struct ldc_endpoint *client_endpoint; 82 struct ldc_endpoint *server_endpoint; 83 }; 84 85 struct guest { 86 const char *name; 87 uint64_t gid; 88 uint64_t pid; 89 uint64_t resource_id; 90 uint64_t tod_offset; 91 uint64_t perfctraccess; 92 uint64_t perfctrhtaccess; 93 uint64_t rngctlaccessible; 94 uint64_t mdpa; 95 96 struct md_node *hv_node; 97 98 struct md *md; 99 uint64_t cpu_vid; 100 uint64_t endpoint_id; 101 102 struct console *console; 103 TAILQ_HEAD(, cpu) cpu_list; 104 int num_cpus; 105 TAILQ_HEAD(, device) device_list; 106 TAILQ_HEAD(, mblock) mblock_list; 107 TAILQ_HEAD(, ldc_endpoint) endpoint_list; 108 109 struct ldc_channel domain_services; 110 struct ldc_channel vio[8]; 111 int num_vios; 112 113 TAILQ_ENTRY(guest) link; 114 }; 115 116 extern TAILQ_HEAD(guest_head, guest) guest_list; 117 118 void add_guest(struct md_node *); 119 120 extern struct md *hvmd; 121 extern uint64_t hv_mdpa; 122 extern uint64_t hv_membase; 123 extern uint64_t hv_memsize; 124 125 struct vdisk { 126 SIMPLEQ_ENTRY(vdisk) entry; 127 const char *path; 128 }; 129 130 struct vnet { 131 SIMPLEQ_ENTRY(vnet) entry; 132 uint64_t mac_addr; 133 uint64_t mtu; 134 }; 135 136 struct domain { 137 SIMPLEQ_ENTRY(domain) entry; 138 const char *name; 139 uint64_t vcpu; 140 uint64_t memory; 141 SIMPLEQ_HEAD(, vdisk) vdisk_list; 142 SIMPLEQ_HEAD(, vnet) vnet_list; 143 } *domain; 144 145 struct ldom_config { 146 SIMPLEQ_HEAD(, domain) domain_list; 147 }; 148 149 int parse_config(const char *, struct ldom_config *); 150 void build_config(const char *); 151