/* * Jailhouse, a Linux-based partitioning hypervisor * * Configuration for Linux inmate, 1 CPU, 74 MB RAM, ~1MB shmem, serial ports * * Copyright (c) Siemens AG, 2013-2015 * * Authors: * Jan Kiszka * * This work is licensed under the terms of the GNU GPL, version 2. See * the COPYING file in the top-level directory. */ #include #include struct { struct jailhouse_cell_desc cell; __u64 cpus[1]; #ifdef CONFIG_QEMU_E1000E_ASSIGNMENT struct jailhouse_memory mem_regions[24]; #else struct jailhouse_memory mem_regions[20]; #endif struct jailhouse_cache cache_regions[1]; struct jailhouse_irqchip irqchips[1]; struct jailhouse_pio pio_regions[2]; #ifdef CONFIG_QEMU_E1000E_ASSIGNMENT struct jailhouse_pci_device pci_devices[5]; #else struct jailhouse_pci_device pci_devices[4]; #endif struct jailhouse_pci_capability pci_caps[6]; } __attribute__((packed)) config = { .cell = { .signature = JAILHOUSE_CELL_DESC_SIGNATURE, .revision = JAILHOUSE_CONFIG_REVISION, .name = "agl-linux-x86-demo", .flags = JAILHOUSE_CELL_PASSIVE_COMMREG | JAILHOUSE_CELL_VIRTUAL_CONSOLE_PERMITTED, .cpu_set_size = sizeof(config.cpus), .num_memory_regions = ARRAY_SIZE(config.mem_regions), .num_cache_regions = ARRAY_SIZE(config.cache_regions), .num_irqchips = ARRAY_SIZE(config.irqchips), .num_pio_regions = ARRAY_SIZE(config.pio_regions), .num_pci_devices = ARRAY_SIZE(config.pci_devices), .num_pci_caps = ARRAY_SIZE(config.pci_caps), }, .cpus = { 0b1100, }, .mem_regions = { /* IVSHMEM shared memory region (virtio-blk front) */ { .phys_start = 0x22000000, .virt_start = 0x22000000, .size = 0x1000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_ROOTSHARED, }, { .phys_start = 0x22001000, .virt_start = 0x22001000, .size = 0xdf000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_ROOTSHARED, }, { 0 }, { 0 }, /* IVSHMEM shared memory region (virtio-con front) */ { .phys_start = 0x220e0000, .virt_start = 0x220e0000, .size = 0x1000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_ROOTSHARED, }, { .phys_start = 0x220e1000, .virt_start = 0x220e1000, .size = 0xf000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_ROOTSHARED, }, { 0 }, { 0 }, /* IVSHMEM shared memory regions (demo) */ { .phys_start = 0x220f0000, .virt_start = 0x220f0000, .size = 0x1000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_ROOTSHARED, }, { .phys_start = 0x220f1000, .virt_start = 0x220f1000, .size = 0x9000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_ROOTSHARED, }, { .phys_start = 0x220fa000, .virt_start = 0x220fa000, .size = 0x2000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_ROOTSHARED, }, { .phys_start = 0x220fc000, .virt_start = 0x220fc000, .size = 0x2000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_ROOTSHARED, }, { .phys_start = 0x220fe000, .virt_start = 0x220fe000, .size = 0x2000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_ROOTSHARED, }, /* IVSHMEM shared memory regions (networking) */ JAILHOUSE_SHMEM_NET_REGIONS(0x22100000, 1), /* low RAM */ { .phys_start = 0x22600000, .virt_start = 0, .size = 0x00100000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA | JAILHOUSE_MEM_LOADABLE, }, /* communication region */ { .virt_start = 0x00100000, .size = 0x00001000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_COMM_REGION, }, /* high RAM */ { .phys_start = 0x22700000, .virt_start = 0x00200000, .size = 0x4700000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA | JAILHOUSE_MEM_LOADABLE, }, #ifdef CONFIG_QEMU_E1000E_ASSIGNMENT /* MemRegion: feb40000-feb7ffff : 0000:00:02.0 */ { .phys_start = 0xfeb40000, .virt_start = 0xfeb40000, .size = 0x40000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE, }, /* MemRegion: feb80000-feb9ffff : e1000e */ { .phys_start = 0xfeb80000, .virt_start = 0xfeb80000, .size = 0x20000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE, }, /* MemRegion: feba0000-febbffff : e1000e */ { .phys_start = 0xfeba0000, .virt_start = 0xfeba0000, .size = 0x20000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE, }, /* MemRegion: febd1000-febd3fff : e1000e */ { .phys_start = 0xfebd1000, .virt_start = 0xfebd1000, .size = 0x3000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE, }, #endif }, .cache_regions = { { .start = 0, .size = 2, .type = JAILHOUSE_CACHE_L3, }, }, .irqchips = { /* IOAPIC */ { .address = 0xfec00000, .id = 0xff00, .pin_bitmap = { (1 << 3) | (1 << 4), }, }, }, .pio_regions = { PIO_RANGE(0x2e8, 8), /* serial 2: ttyS3(0x2e8) */ PIO_RANGE(0x3e8, 8), /* serial 1: ttyS2(0x3e8) */ // PIO_RANGE(0xe010, 8), /* OXPCIe952 serial1 */ }, .pci_devices = { { .type = JAILHOUSE_PCI_TYPE_IVSHMEM, .domain = 0x0, .bdf = 0x0c << 3, .bar_mask = JAILHOUSE_IVSHMEM_BAR_MASK_MSIX, .num_msix_vectors = 2, .shmem_regions_start = 0, .shmem_dev_id = 1, .shmem_peers = 2, .shmem_protocol = JAILHOUSE_SHMEM_PROTO_VIRTIO_FRONT + VIRTIO_DEV_BLOCK, }, { .type = JAILHOUSE_PCI_TYPE_IVSHMEM, .domain = 0x0, .bdf = 0x0d << 3, .bar_mask = JAILHOUSE_IVSHMEM_BAR_MASK_MSIX, .num_msix_vectors = 3, .shmem_regions_start = 4, .shmem_dev_id = 1, .shmem_peers = 2, .shmem_protocol = JAILHOUSE_SHMEM_PROTO_VIRTIO_FRONT + VIRTIO_DEV_CONSOLE, }, { .type = JAILHOUSE_PCI_TYPE_IVSHMEM, .domain = 0x0, .bdf = 0x0e << 3, .bar_mask = JAILHOUSE_IVSHMEM_BAR_MASK_MSIX, .num_msix_vectors = 16, .shmem_regions_start = 8, .shmem_dev_id = 2, .shmem_peers = 3, .shmem_protocol = JAILHOUSE_SHMEM_PROTO_UNDEFINED, }, { .type = JAILHOUSE_PCI_TYPE_IVSHMEM, .domain = 0x0, .bdf = 0x0f << 3, .bar_mask = JAILHOUSE_IVSHMEM_BAR_MASK_MSIX, .num_msix_vectors = 2, .shmem_regions_start = 13, .shmem_dev_id = 1, .shmem_peers = 2, .shmem_protocol = JAILHOUSE_SHMEM_PROTO_VETH, }, #ifdef CONFIG_QEMU_E1000E_ASSIGNMENT { /* e1000e */ .type = JAILHOUSE_PCI_TYPE_DEVICE, .domain = 0x0000, .bdf = 0x0010, .bar_mask = { 0xfffe0000, 0xfffe0000, 0xffffffe0, 0xffffc000, 0x00000000, 0x00000000, }, .caps_start = 0, .num_caps = 6, .num_msi_vectors = 1, .msi_64bits = 1, .num_msix_vectors = 5, .msix_region_size = 0x1000, .msix_address = 0xfebd0000, }, #endif }, .pci_caps = { { /* e1000e */ .id = PCI_CAP_ID_PM, .start = 0xc8, .len = 8, .flags = JAILHOUSE_PCICAPS_WRITE, }, { .id = PCI_CAP_ID_MSI, .start = 0xd0, .len = 14, .flags = JAILHOUSE_PCICAPS_WRITE, }, { .id = PCI_CAP_ID_EXP, .start = 0xe0, .len = 20, .flags = JAILHOUSE_PCICAPS_WRITE, }, { .id = PCI_CAP_ID_MSIX, .start = 0xa0, .len = 12, .flags = JAILHOUSE_PCICAPS_WRITE, }, { .id = PCI_EXT_CAP_ID_ERR | JAILHOUSE_PCI_EXT_CAP, .start = 0x100, .len = 4, .flags = 0, }, { .id = PCI_EXT_CAP_ID_DSN | JAILHOUSE_PCI_EXT_CAP, .start = 0x140, .len = 4, .flags = 0, }, } };