xref: /openbsd/usr.sbin/ldomctl/ldomctl.h (revision 898184e3)
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