__u8 pio_bitmap[0x2000];
} __attribute__((packed)) config = {
.cell = {
+ .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
.name = "apic-demo",
.cpu_set_size = sizeof(config.cpus),
struct jailhouse_memory mem_regions[3];
} __attribute__((packed)) config = {
.cell = {
+ .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
.name = "bananapi-gic-demo",
.flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
struct jailhouse_memory mem_regions[3];
} __attribute__((packed)) config = {
.cell = {
+ .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
.name = "bananapi-uart-demo",
.flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
struct jailhouse_irqchip irqchips[1];
} __attribute__((packed)) config = {
.header = {
+ .signature = JAILHOUSE_SYSTEM_SIGNATURE,
.hypervisor_memory = {
.phys_start = 0x7c000000,
.size = 0x4000000,
struct jailhouse_pci_capability pci_caps[1];
} __attribute__((packed)) config = {
.cell = {
+ .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
.name = "e1000-demo",
.flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
struct jailhouse_pci_capability pci_caps[27];
} __attribute__((packed)) config = {
.header = {
+ .signature = JAILHOUSE_SYSTEM_SIGNATURE,
.hypervisor_memory = {
.phys_start = 0x3b000000,
.size = 0x4000000,
struct jailhouse_pci_capability pci_caps[28];
} __attribute__((packed)) config = {
.header = {
+ .signature = JAILHOUSE_SYSTEM_SIGNATURE,
.hypervisor_memory = {
.phys_start = 0x3b000000,
.size = 0x4000000,
struct jailhouse_pci_capability pci_caps[26];
} __attribute__((packed)) config = {
.header = {
+ .signature = JAILHOUSE_SYSTEM_SIGNATURE,
.hypervisor_memory = {
.phys_start = 0x3b000000,
.size = 0x4000000,
__u8 pio_bitmap[0x2000];
} __attribute__((packed)) config = {
.cell = {
+ .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
.name = "ioapic-demo",
.flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
struct jailhouse_pci_capability pci_caps[0];
} __attribute__((packed)) config = {
.cell = {
+ .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
.name = "ivshmem-demo",
.flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
struct jailhouse_memory mem_regions[2];
} __attribute__((packed)) config = {
.cell = {
+ .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
.name = "jetson-tk1-demo",
.flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
struct jailhouse_irqchip irqchips[1];
} __attribute__((packed)) config = {
.header = {
+ .signature = JAILHOUSE_SYSTEM_SIGNATURE,
.hypervisor_memory = {
.phys_start = 0xfc000000,
.size = 0x4000000 - 0x100000, /* -1MB (PSCI) */
struct jailhouse_pci_device pci_devices[1];
} __attribute__((packed)) config = {
.cell = {
+ .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
.name = "linux-x86-demo",
.flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
struct jailhouse_pci_capability pci_caps[1];
} __attribute__((packed)) config = {
.cell = {
+ .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
.name = "pci-demo",
.flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
struct jailhouse_pci_capability pci_caps[5];
} __attribute__((packed)) config = {
.header = {
+ .signature = JAILHOUSE_SYSTEM_SIGNATURE,
.hypervisor_memory = {
.phys_start = 0x3b000000,
.size = 0x600000,
__u8 pio_bitmap[0x2000];
} __attribute__((packed)) config = {
.cell = {
+ .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
.name = "smp-demo",
.flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
__u8 pio_bitmap[0x2000];
} __attribute__((packed)) config = {
.cell = {
+ .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
.name = "tiny-demo",
.flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
struct jailhouse_memory mem_regions[2];
} __attribute__((packed)) config = {
.cell = {
+ .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
.name = "gic-demo",
.flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
struct jailhouse_irqchip irqchips[1];
} __attribute__((packed)) config = {
.cell = {
+ .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
.name = "linux-demo",
.flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
struct jailhouse_memory mem_regions[2];
} __attribute__((packed)) config = {
.cell = {
+ .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
.name = "pl011-demo",
.flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
struct jailhouse_irqchip irqchips[1];
} __attribute__((packed)) config = {
.header = {
+ .signature = JAILHOUSE_SYSTEM_SIGNATURE,
.hypervisor_memory = {
.phys_start = 0xfc000000,
.size = 0x4000000,
err = -EFAULT;
goto kfree_config_out;
}
+
+ if (memcmp(config->signature, JAILHOUSE_CELL_DESC_SIGNATURE,
+ sizeof(config->signature)) != 0) {
+ pr_err("jailhouse: Not a cell configuration\n");
+ err = -EINVAL;
+ goto kfree_config_out;
+ }
+
config->name[JAILHOUSE_CELL_NAME_MAXLEN] = 0;
if (mutex_lock_interruptible(&jailhouse_lock) != 0) {
if (copy_from_user(&config_header, arg, sizeof(config_header)))
return -EFAULT;
+
+ if (memcmp(config_header.signature, JAILHOUSE_SYSTEM_SIGNATURE,
+ sizeof(config_header.signature)) != 0) {
+ pr_err("jailhouse: Not a system configuration\n");
+ return -EINVAL;
+ }
+
config_header.root_cell.name[JAILHOUSE_CELL_NAME_MAXLEN] = 0;
max_cpus = get_max_cpus(config_header.root_cell.cpu_set_size, arg);
#define JAILHOUSE_CELL_PASSIVE_COMMREG 0x00000001
+#define JAILHOUSE_CELL_DESC_SIGNATURE "JAILCELL"
+
struct jailhouse_cell_desc {
+ char signature[8];
char name[JAILHOUSE_CELL_NAME_MAXLEN+1];
__u32 flags;
#define JAILHOUSE_MAX_IOMMU_UNITS 8
+#define JAILHOUSE_SYSTEM_SIGNATURE "JAILSYST"
+
struct jailhouse_system {
+ char signature[8];
struct jailhouse_memory hypervisor_memory;
struct jailhouse_memory debug_uart;
union {
class Config:
- _HEADER_FORMAT = '32sIIIIIII'
+ _HEADER_FORMAT = '8x32sIIIIIII'
def __init__(self, config_file):
self.data = config_file.read()
struct jailhouse_pci_capability pci_caps[${len(pcicaps)}];
} __attribute__((packed)) config = {
.header = {
+ .signature = JAILHOUSE_SYSTEM_SIGNATURE,
.hypervisor_memory = {
.phys_start = ${hex(hvmem[0])},
.size = ${hex(hvmem[1])},