2 * Jailhouse, a Linux-based partitioning hypervisor
4 * Copyright (c) Siemens AG, 2014
6 * This work is licensed under the terms of the GNU GPL, version 2. See
7 * the COPYING file in the top-level directory.
9 * Configuration for ${product[0]} ${product[1]}
10 * created with '${argstr}'
12 * NOTE: This config expects the following to be appended to your kernel cmdline
13 * "memmap=${hex(ourmem[1])}$${hex(ourmem[0])}"
16 #include <linux/types.h>
17 #include <jailhouse/cell-config.h>
19 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
22 struct jailhouse_system header;
23 __u64 cpus[${int((cpucount + 63) / 64)}];
24 struct jailhouse_memory mem_regions[${len(regions)}];
25 struct jailhouse_irqchip irqchips[1];
26 __u8 pio_bitmap[0x2000];
27 struct jailhouse_pci_device pci_devices[${len(pcidevices)}];
28 struct jailhouse_pci_capability pci_caps[${len(pcicaps)}];
29 } __attribute__((packed)) config = {
31 .hypervisor_memory = {
32 .phys_start = ${hex(hvmem[0])},
33 .size = ${hex(hvmem[1])},
35 .platform_info.x86 = {
36 .mmconfig_base = ${hex(mmconfig.base)},
37 .mmconfig_end_bus = ${hex(mmconfig.end_bus)},
38 .pm_timer_address = ${hex(pm_timer_base)},
39 .pm_timer_val_ext = ${pm_timer_val_ext},
42 % for d in dmar_units:
49 .interrupt_limit = 256,
52 .cpu_set_size = sizeof(config.cpus),
53 .num_memory_regions = ARRAY_SIZE(config.mem_regions),
54 .num_irqchips = ARRAY_SIZE(config.irqchips),
55 .pio_bitmap_size = ARRAY_SIZE(config.pio_bitmap),
56 .num_pci_devices = ARRAY_SIZE(config.pci_devices),
57 .num_pci_caps = ARRAY_SIZE(config.pci_caps),
62 % for n in range(int(cpucount / 64)):
66 ${'0x%016x,' % ((1 << (cpucount % 64)) - 1)}
73 % for c in r.comments:
77 .phys_start = ${hex(r.start).strip('L')},
78 .virt_start = ${hex(r.start).strip('L')},
79 .size = ${hex(r.size()).strip('L')},
80 .flags = ${r.flagstr('\t\t')},
87 .address = 0xfec00000,
88 .id = ${hex(ioapic_id)},
89 .pin_bitmap = 0xffffff,
94 [ 0/8 ... 0x3f/8] = -1,
95 [ 0x40/8 ... 0x47/8] = 0xf0, /* PIT */
96 [ 0x48/8 ... 0x5f/8] = -1,
97 [ 0x60/8 ... 0x67/8] = 0xec, /* HACK: NMI status/control */
98 [ 0x68/8 ... 0x6f/8] = -1,
99 [ 0x70/8 ... 0x77/8] = 0xfc, /* RTC */
100 [ 0x78/8 ... 0x3af/8] = -1,
101 [ 0x3b0/8 ... 0x3df/8] = 0x00, /* VGA */
102 [ 0x3e0/8 ... 0xcff/8] = -1,
103 [ 0xd00/8 ... 0xffff/8] = 0, /* HACK: PCI bus */
107 % for d in pcidevices:
112 .domain = ${hex(d.domain)},
113 .bdf = ${hex(d.bdf())},
114 .caps_start = ${d.caps_start},
115 .num_caps = ${d.num_caps},
116 .num_msi_vectors = ${d.num_msi_vectors},
117 .msi_64bits = ${d.msi_64bits},
118 .num_msix_vectors = ${d.num_msix_vectors},
119 .msix_region_size = ${hex(d.msix_region_size)},
120 .msix_address = ${hex(d.msix_address).strip('L')},
127 % for comment in c.comments:
132 .start = ${hex(c.start)},