2 * Jailhouse, a Linux-based partitioning hypervisor
4 * Copyright (c) Siemens AG, 2013
7 * Jan Kiszka <jan.kiszka@siemens.com>
9 * This work is licensed under the terms of the GNU GPL, version 2. See
10 * the COPYING file in the top-level directory.
13 #include <asm/bitops.h>
14 #include <asm/percpu.h>
15 #include <jailhouse/cell-config.h>
17 #define SHUTDOWN_NONE 0
18 #define SHUTDOWN_STARTED 1
20 extern struct jailhouse_system *system_config;
22 unsigned int next_cpu(unsigned int cpu, struct cpu_set *cpu_set,
25 #define for_each_cpu(cpu, set) \
27 (cpu) = next_cpu((cpu), (set), -1), \
28 (cpu) <= (set)->max_cpu_id; \
31 #define for_each_cpu_except(cpu, set, exception) \
33 (cpu) = next_cpu((cpu), (set), (exception)), \
34 (cpu) <= (set)->max_cpu_id; \
37 static inline bool cell_owns_cpu(struct cell *cell, unsigned int cpu_id)
39 return (cpu_id <= cell->cpu_set->max_cpu_id &&
40 test_bit(cpu_id, cell->cpu_set->bitmap));
43 bool cpu_id_valid(unsigned long cpu_id);
45 int check_mem_regions(const struct jailhouse_cell_desc *config);
46 int cell_init(struct cell *cell);
48 long hypercall(struct per_cpu *cpu_data, unsigned long code,
49 unsigned long arg1, unsigned long arg2);
51 void __attribute__((noreturn)) panic_stop(void);
52 void panic_halt(void);
54 void arch_suspend_cpu(unsigned int cpu_id);
55 void arch_resume_cpu(unsigned int cpu_id);
56 void arch_reset_cpu(unsigned int cpu_id);
57 void arch_park_cpu(unsigned int cpu_id);
58 void arch_shutdown_cpu(unsigned int cpu_id);
60 int arch_map_memory_region(struct cell *cell,
61 const struct jailhouse_memory *mem);
62 int arch_unmap_memory_region(struct cell *cell,
63 const struct jailhouse_memory *mem);
65 int arch_cell_create(struct per_cpu *cpu_data, struct cell *cell);
66 void arch_cell_destroy(struct per_cpu *cpu_data, struct cell *cell);
68 void arch_config_commit(struct per_cpu *cpu_data,
69 struct cell *cell_added_removed);
71 void arch_shutdown(void);
73 void __attribute__((noreturn)) arch_panic_stop(void);
74 void arch_panic_halt(void);