]> rtime.felk.cvut.cz Git - jailhouse.git/blob - hypervisor/include/jailhouse/control.h
core/x86: Provide "Cell Get State" hypercall
[jailhouse.git] / hypervisor / include / jailhouse / control.h
1 /*
2  * Jailhouse, a Linux-based partitioning hypervisor
3  *
4  * Copyright (c) Siemens AG, 2013
5  *
6  * Authors:
7  *  Jan Kiszka <jan.kiszka@siemens.com>
8  *
9  * This work is licensed under the terms of the GNU GPL, version 2.  See
10  * the COPYING file in the top-level directory.
11  */
12
13 #include <asm/types.h>
14 #include <asm/percpu.h>
15 #include <jailhouse/cell-config.h>
16
17 #define SHUTDOWN_NONE                   0
18 #define SHUTDOWN_STARTED                1
19
20 extern struct jailhouse_system *system_config;
21
22 unsigned int next_cpu(unsigned int cpu, struct cpu_set *cpu_set,
23                       int exception);
24
25 #define for_each_cpu(cpu, set)                                  \
26         for ((cpu) = -1;                                        \
27              (cpu) = next_cpu((cpu), (set), -1),                \
28              (cpu) <= (set)->max_cpu_id;                        \
29             )
30
31 #define for_each_cpu_except(cpu, set, exception)                \
32         for ((cpu) = -1;                                        \
33              (cpu) = next_cpu((cpu), (set), (exception)),       \
34              (cpu) <= (set)->max_cpu_id;                        \
35             )
36
37 int check_mem_regions(const struct jailhouse_cell_desc *config);
38 int cell_init(struct cell *cell, bool copy_cpu_set);
39
40 int cell_create(struct per_cpu *cpu_data, unsigned long config_address);
41 int cell_destroy(struct per_cpu *cpu_data, unsigned long id);
42 int cell_get_state(struct per_cpu *cpu_data, unsigned long id);
43
44 int shutdown(struct per_cpu *cpu_data);
45
46 void arch_suspend_cpu(unsigned int cpu_id);
47 void arch_resume_cpu(unsigned int cpu_id);
48 void arch_reset_cpu(unsigned int cpu_id);
49 void arch_park_cpu(unsigned int cpu_id);
50 void arch_shutdown_cpu(unsigned int cpu_id);
51
52 int arch_map_memory_region(struct cell *cell,
53                            const struct jailhouse_memory *mem);
54 void arch_unmap_memory_region(struct cell *cell,
55                               const struct jailhouse_memory *mem);
56
57 int arch_cell_create(struct per_cpu *cpu_data, struct cell *cell);
58 void arch_cell_destroy(struct per_cpu *cpu_data, struct cell *cell);
59
60 void arch_shutdown(void);