meta-agl-jailhouse: Enable jailhouse on qemu-x86_64 through runqemu
[AGL/meta-agl-devel.git] / meta-agl-jailhouse / recipes-extended / jailhouse / files / qemu-agl.c
1 /*
2  * Jailhouse, a Linux-based partitioning hypervisor
3  *
4  * Copyright (c) Siemens AG, 2014-2017
5  *
6  * This work is licensed under the terms of the GNU GPL, version 2.  See
7  * the COPYING file in the top-level directory.
8  *
9  * Alternatively, you can use or redistribute this file under the following
10  * BSD license:
11  *
12  * Redistribution and use in source and binary forms, with or without
13  * modification, are permitted provided that the following conditions
14  * are met:
15  *
16  * 1. Redistributions of source code must retain the above copyright
17  *    notice, this list of conditions and the following disclaimer.
18  *
19  * 2. Redistributions in binary form must reproduce the above copyright
20  *    notice, this list of conditions and the following disclaimer in the
21  *    documentation and/or other materials provided with the distribution.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
27  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
33  * THE POSSIBILITY OF SUCH DAMAGE.
34  *
35  * Configuration for QEMU Standard PC (Q35 + ICH9, 2009)
36  * created with '/usr/libexec/jailhouse/jailhouse config create -c ttyS1 qemu-agl.c'
37  *
38  * NOTE: This config expects the following to be appended to your kernel cmdline
39  *       "memmap=0x5200000$0x22000000"
40  */
41
42 #include <jailhouse/types.h>
43 #include <jailhouse/cell-config.h>
44
45 struct {
46         struct jailhouse_system header;
47         __u64 cpus[1];
48         struct jailhouse_memory mem_regions[17];
49         struct jailhouse_irqchip irqchips[1];
50         struct jailhouse_pio pio_regions[14];
51         struct jailhouse_pci_device pci_devices[13];
52         struct jailhouse_pci_capability pci_caps[14];
53 } __attribute__((packed)) config = {
54         .header = {
55                 .signature = JAILHOUSE_SYSTEM_SIGNATURE,
56                 .revision = JAILHOUSE_CONFIG_REVISION,
57                 .flags = JAILHOUSE_SYS_VIRTUAL_DEBUG_CONSOLE,
58                 .hypervisor_memory = {
59                         .phys_start = 0x22000000,
60                         .size = 0x600000,
61                 },
62                 .debug_console = {
63                         .address = 0x2f8,
64                         .type = JAILHOUSE_CON_TYPE_8250,
65                         .flags = JAILHOUSE_CON_ACCESS_PIO |
66                                  JAILHOUSE_CON_REGDIST_1,
67                 },
68                 .platform_info = {
69                         .pci_mmconfig_base = 0xb0000000,
70                         .pci_mmconfig_end_bus = 0xff,
71                         .iommu_units = {
72                                 {
73                                         .type = JAILHOUSE_IOMMU_INTEL,
74                                         .base = 0xfed90000,
75                                         .size = 0x1000,
76                                 },
77                         },
78                         .x86 = {
79                                 .pm_timer_address = 0x608,
80                                 .vtd_interrupt_limit = 256,
81                         },
82                 },
83                 .root_cell = {
84                         .name = "RootCell",
85                         .cpu_set_size = sizeof(config.cpus),
86                         .num_memory_regions = ARRAY_SIZE(config.mem_regions),
87                         .num_irqchips = ARRAY_SIZE(config.irqchips),
88                         .num_pio_regions = ARRAY_SIZE(config.pio_regions),
89                         .num_pci_devices = ARRAY_SIZE(config.pci_devices),
90                         .num_pci_caps = ARRAY_SIZE(config.pci_caps),
91                 },
92         },
93
94         .cpus = {
95                 0x000000000000000f,
96         },
97
98         .mem_regions = {
99                 /* MemRegion: 00000000-0009fbff : System RAM */
100                 {
101                         .phys_start = 0x0,
102                         .virt_start = 0x0,
103                         .size = 0xa0000,
104                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
105                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
106                 },
107                 /* MemRegion: 00100000-201fffff : System RAM */
108                 {
109                         .phys_start = 0x100000,
110                         .virt_start = 0x100000,
111                         .size = 0x20100000,
112                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
113                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
114                 },
115                 /* MemRegion: 20200000-21ffffff : Kernel */
116                 {
117                         .phys_start = 0x20200000,
118                         .virt_start = 0x20200000,
119                         .size = 0x1e00000,
120                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
121                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
122                 },
123                 /* MemRegion: 27200000-31ffffff : System RAM */
124                 {
125                         .phys_start = 0x27200000,
126                         .virt_start = 0x27200000,
127                         .size = 0xae00000,
128                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
129                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
130                 },
131                 /* MemRegion: 32000000-33ffffff : RAM buffer */
132                 {
133                         .phys_start = 0x32000000,
134                         .virt_start = 0x32000000,
135                         .size = 0x2000000,
136                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
137                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
138                 },
139                 /* MemRegion: fe000000-fe7fffff : 0000:00:01.0 */
140                 {
141                         .phys_start = 0xfe000000,
142                         .virt_start = 0xfe000000,
143                         .size = 0x800000,
144                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
145                 },
146                 /* MemRegion: fe800000-fe803fff : virtio-pci-modern */
147                 {
148                         .phys_start = 0xfe800000,
149                         .virt_start = 0xfe800000,
150                         .size = 0x4000,
151                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
152                 },
153                 /* MemRegion: fe804000-fe807fff : virtio-pci-modern */
154                 {
155                         .phys_start = 0xfe804000,
156                         .virt_start = 0xfe804000,
157                         .size = 0x4000,
158                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
159                 },
160                 /* MemRegion: fe808000-fe80bfff : virtio-pci-modern */
161                 {
162                         .phys_start = 0xfe808000,
163                         .virt_start = 0xfe808000,
164                         .size = 0x4000,
165                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
166                 },
167                 /* MemRegion: fe80c000-fe80ffff : virtio-pci-modern */
168                 {
169                         .phys_start = 0xfe80c000,
170                         .virt_start = 0xfe80c000,
171                         .size = 0x4000,
172                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
173                 },
174                 /* MemRegion: feb80000-febbffff : 0000:00:02.0 */
175                 {
176                         .phys_start = 0xfeb80000,
177                         .virt_start = 0xfeb80000,
178                         .size = 0x40000,
179                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
180                 },
181                 /* MemRegion: febd0000-febd3fff : ICH HD audio */
182                 {
183                         .phys_start = 0xfebd0000,
184                         .virt_start = 0xfebd0000,
185                         .size = 0x4000,
186                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
187                 },
188                 /* MemRegion: febd7000-febd7fff : ehci_hcd */
189                 {
190                         .phys_start = 0xfebd7000,
191                         .virt_start = 0xfebd7000,
192                         .size = 0x1000,
193                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
194                 },
195                 /* MemRegion: febd8000-febd8fff : ahci */
196                 {
197                         .phys_start = 0xfebd8000,
198                         .virt_start = 0xfebd8000,
199                         .size = 0x1000,
200                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
201                 },
202                 /* MemRegion: fed00000-fed003ff : PNP0103:00 */
203                 {
204                         .phys_start = 0xfed00000,
205                         .virt_start = 0xfed00000,
206                         .size = 0x1000,
207                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
208                 },
209                 /* MemRegion: 000c0000-000dffff : ROMs */
210                 {
211                         .phys_start = 0xc0000,
212                         .virt_start = 0xc0000,
213                         .size = 0x20000,
214                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
215                 },
216                 /* MemRegion: 22600000-271fffff : JAILHOUSE Inmate Memory */
217                 {
218                         .phys_start = 0x22600000,
219                         .virt_start = 0x22600000,
220                         .size = 0x4c00000,
221                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
222                 },
223         },
224
225         .irqchips = {
226                 /* IOAPIC 0, GSI base 0 */
227                 {
228                         .address = 0xfec00000,
229                         .id = 0xff00,
230                         .pin_bitmap = {
231                                 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff
232                         },
233                 },
234         },
235
236         .pio_regions = {
237                 /* Port I/O: 0000-001f : dma1 */
238                 /* PIO_RANGE(0x0, 0x20), */
239                 /* Port I/O: 0020-0021 : pic1 */
240                 /* PIO_RANGE(0x20, 0x2), */
241                 /* Port I/O: 0040-0043 : timer0 */
242                 PIO_RANGE(0x40, 0x4),
243                 /* Port I/O: 0050-0053 : timer1 */
244                 /* PIO_RANGE(0x50, 0x4), */
245                 /* Port I/O: 0060-0060 : keyboard */
246                 PIO_RANGE(0x60, 0x1),
247                 /* Port I/O: 0064-0064 : keyboard */
248                 PIO_RANGE(0x64, 0x1),
249                 /* Port I/O: 0070-0077 : rtc0 */
250                 PIO_RANGE(0x70, 0x8),
251                 /* Port I/O: 0080-008f : dma page reg */
252                 /* PIO_RANGE(0x80, 0x10), */
253                 /* Port I/O: 00a0-00a1 : pic2 */
254                 /* PIO_RANGE(0xa0, 0x2), */
255                 /* Port I/O: 00c0-00df : dma2 */
256                 /* PIO_RANGE(0xc0, 0x20), */
257                 /* Port I/O: 00f0-00ff : fpu */
258                 /* PIO_RANGE(0xf0, 0x10), */
259                 /* Port I/O: 02f8-02ff : serial */
260                 PIO_RANGE(0x2f8, 0x8),
261                 /* Port I/O: 0378-037a : parport0 */
262                 /* PIO_RANGE(0x378, 0x3), */
263                 /* Port I/O: 03c0-03df : vga+ */
264                 PIO_RANGE(0x3c0, 0x20),
265                 /* Port I/O: 03f8-03ff : serial */
266                 PIO_RANGE(0x3f8, 0x8),
267                 /* Port I/O: 0510-051b : QEMU0002:00 */
268                 /* PIO_RANGE(0x510, 0xc), */
269                 /* Port I/O: 0600-0603 : ACPI PM1a_EVT_BLK */
270                 /* PIO_RANGE(0x600, 0x4), */
271                 /* Port I/O: 0604-0605 : ACPI PM1a_CNT_BLK */
272                 /* PIO_RANGE(0x604, 0x2), */
273                 /* Port I/O: 0608-060b : ACPI PM_TMR */
274                 /* PIO_RANGE(0x608, 0x4), */
275                 /* Port I/O: 0620-062f : ACPI GPE0_BLK */
276                 /* PIO_RANGE(0x620, 0x10), */
277                 /* Port I/O: 0700-073f : i801_smbus */
278                 /* PIO_RANGE(0x700, 0x40), */
279                 /* Port I/O: c000-c07f : 0000:00:04.0 */
280                 PIO_RANGE(0xc000, 0x80),
281                 /* Port I/O: c0c0-c0df : 0000:00:02.0 */
282                 PIO_RANGE(0xc0c0, 0x20),
283                 /* Port I/O: c0e0-c0ff : 0000:00:03.0 */
284                 PIO_RANGE(0xc0e0, 0x20),
285                 /* Port I/O: c100-c11f : 0000:00:1d.0 */
286                 PIO_RANGE(0xc100, 0x20),
287                 /* Port I/O: c120-c13f : 0000:00:1d.1 */
288                 PIO_RANGE(0xc120, 0x20),
289                 /* Port I/O: c140-c15f : 0000:00:1d.2 */
290                 PIO_RANGE(0xc140, 0x20),
291                 /* Port I/O: c160-c17f : 0000:00:1f.2 */
292                 PIO_RANGE(0xc160, 0x20),
293         },
294
295         .pci_devices = {
296                 /* PCIDevice: 00:00.0 */
297                 {
298                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
299                         .iommu = 0,
300                         .domain = 0x0,
301                         .bdf = 0x0,
302                         .bar_mask = {
303                                 0x00000000, 0x00000000, 0x00000000,
304                                 0x00000000, 0x00000000, 0x00000000,
305                         },
306                         .caps_start = 0,
307                         .num_caps = 0,
308                         .num_msi_vectors = 0,
309                         .msi_64bits = 0,
310                         .msi_maskable = 0,
311                         .num_msix_vectors = 0,
312                         .msix_region_size = 0x0,
313                         .msix_address = 0x0,
314                 },
315                 /* PCIDevice: 00:01.0 */
316                 {
317                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
318                         .iommu = 0,
319                         .domain = 0x0,
320                         .bdf = 0x8,
321                         .bar_mask = {
322                                 0xff800000, 0x00000000, 0xffffc000,
323                                 0xffffffff, 0xfffff000, 0x00000000,
324                         },
325                         .caps_start = 0,
326                         .num_caps = 6,
327                         .num_msi_vectors = 0,
328                         .msi_64bits = 0,
329                         .msi_maskable = 0,
330                         .num_msix_vectors = 3,
331                         .msix_region_size = 0x1000,
332                         .msix_address = 0xfebd4000,
333                 },
334                 /* PCIDevice: 00:02.0 */
335                 {
336                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
337                         .iommu = 0,
338                         .domain = 0x0,
339                         .bdf = 0x10,
340                         .bar_mask = {
341                                 0xffffffe0, 0xfffff000, 0x00000000,
342                                 0x00000000, 0xffffc000, 0xffffffff,
343                         },
344                         .caps_start = 0,
345                         .num_caps = 6,
346                         .num_msi_vectors = 0,
347                         .msi_64bits = 0,
348                         .msi_maskable = 0,
349                         .num_msix_vectors = 3,
350                         .msix_region_size = 0x1000,
351                         .msix_address = 0xfebd5000,
352                 },
353                 /* PCIDevice: 00:03.0 */
354                 {
355                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
356                         .iommu = 0,
357                         .domain = 0x0,
358                         .bdf = 0x18,
359                         .bar_mask = {
360                                 0xffffffe0, 0x00000000, 0x00000000,
361                                 0x00000000, 0xffffc000, 0xffffffff,
362                         },
363                         .caps_start = 6,
364                         .num_caps = 5,
365                         .num_msi_vectors = 0,
366                         .msi_64bits = 0,
367                         .msi_maskable = 0,
368                         .num_msix_vectors = 0,
369                         .msix_region_size = 0x0,
370                         .msix_address = 0x0,
371                 },
372                 /* PCIDevice: 00:04.0 */
373                 {
374                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
375                         .iommu = 0,
376                         .domain = 0x0,
377                         .bdf = 0x20,
378                         .bar_mask = {
379                                 0xffffff80, 0xfffff000, 0x00000000,
380                                 0x00000000, 0xffffc000, 0xffffffff,
381                         },
382                         .caps_start = 0,
383                         .num_caps = 6,
384                         .num_msi_vectors = 0,
385                         .msi_64bits = 0,
386                         .msi_maskable = 0,
387                         .num_msix_vectors = 2,
388                         .msix_region_size = 0x1000,
389                         .msix_address = 0xfebd6000,
390                 },
391                 /* PCIDevice: 00:1b.0 */
392                 {
393                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
394                         .iommu = 0,
395                         .domain = 0x0,
396                         .bdf = 0xd8,
397                         .bar_mask = {
398                                 0xffffc000, 0x00000000, 0x00000000,
399                                 0x00000000, 0x00000000, 0x00000000,
400                         },
401                         .caps_start = 11,
402                         .num_caps = 1,
403                         .num_msi_vectors = 1,
404                         .msi_64bits = 1,
405                         .msi_maskable = 0,
406                         .num_msix_vectors = 0,
407                         .msix_region_size = 0x0,
408                         .msix_address = 0x0,
409                 },
410                 /* PCIDevice: 00:1d.0 */
411                 {
412                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
413                         .iommu = 0,
414                         .domain = 0x0,
415                         .bdf = 0xe8,
416                         .bar_mask = {
417                                 0x00000000, 0x00000000, 0x00000000,
418                                 0x00000000, 0xffffffe0, 0x00000000,
419                         },
420                         .caps_start = 0,
421                         .num_caps = 0,
422                         .num_msi_vectors = 0,
423                         .msi_64bits = 0,
424                         .msi_maskable = 0,
425                         .num_msix_vectors = 0,
426                         .msix_region_size = 0x0,
427                         .msix_address = 0x0,
428                 },
429                 /* PCIDevice: 00:1d.1 */
430                 {
431                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
432                         .iommu = 0,
433                         .domain = 0x0,
434                         .bdf = 0xe9,
435                         .bar_mask = {
436                                 0x00000000, 0x00000000, 0x00000000,
437                                 0x00000000, 0xffffffe0, 0x00000000,
438                         },
439                         .caps_start = 0,
440                         .num_caps = 0,
441                         .num_msi_vectors = 0,
442                         .msi_64bits = 0,
443                         .msi_maskable = 0,
444                         .num_msix_vectors = 0,
445                         .msix_region_size = 0x0,
446                         .msix_address = 0x0,
447                 },
448                 /* PCIDevice: 00:1d.2 */
449                 {
450                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
451                         .iommu = 0,
452                         .domain = 0x0,
453                         .bdf = 0xea,
454                         .bar_mask = {
455                                 0x00000000, 0x00000000, 0x00000000,
456                                 0x00000000, 0xffffffe0, 0x00000000,
457                         },
458                         .caps_start = 0,
459                         .num_caps = 0,
460                         .num_msi_vectors = 0,
461                         .msi_64bits = 0,
462                         .msi_maskable = 0,
463                         .num_msix_vectors = 0,
464                         .msix_region_size = 0x0,
465                         .msix_address = 0x0,
466                 },
467                 /* PCIDevice: 00:1d.7 */
468                 {
469                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
470                         .iommu = 0,
471                         .domain = 0x0,
472                         .bdf = 0xef,
473                         .bar_mask = {
474                                 0xfffff000, 0x00000000, 0x00000000,
475                                 0x00000000, 0x00000000, 0x00000000,
476                         },
477                         .caps_start = 0,
478                         .num_caps = 0,
479                         .num_msi_vectors = 0,
480                         .msi_64bits = 0,
481                         .msi_maskable = 0,
482                         .num_msix_vectors = 0,
483                         .msix_region_size = 0x0,
484                         .msix_address = 0x0,
485                 },
486                 /* PCIDevice: 00:1f.0 */
487                 {
488                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
489                         .iommu = 0,
490                         .domain = 0x0,
491                         .bdf = 0xf8,
492                         .bar_mask = {
493                                 0x00000000, 0x00000000, 0x00000000,
494                                 0x00000000, 0x00000000, 0x00000000,
495                         },
496                         .caps_start = 0,
497                         .num_caps = 0,
498                         .num_msi_vectors = 0,
499                         .msi_64bits = 0,
500                         .msi_maskable = 0,
501                         .num_msix_vectors = 0,
502                         .msix_region_size = 0x0,
503                         .msix_address = 0x0,
504                 },
505                 /* PCIDevice: 00:1f.2 */
506                 {
507                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
508                         .iommu = 0,
509                         .domain = 0x0,
510                         .bdf = 0xfa,
511                         .bar_mask = {
512                                 0x00000000, 0x00000000, 0x00000000,
513                                 0x00000000, 0xffffffe0, 0xfffff000,
514                         },
515                         .caps_start = 12,
516                         .num_caps = 2,
517                         .num_msi_vectors = 1,
518                         .msi_64bits = 1,
519                         .msi_maskable = 0,
520                         .num_msix_vectors = 0,
521                         .msix_region_size = 0x0,
522                         .msix_address = 0x0,
523                 },
524                 /* PCIDevice: 00:1f.3 */
525                 {
526                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
527                         .iommu = 0,
528                         .domain = 0x0,
529                         .bdf = 0xfb,
530                         .bar_mask = {
531                                 0x00000000, 0x00000000, 0x00000000,
532                                 0x00000000, 0xffffffc0, 0x00000000,
533                         },
534                         .caps_start = 0,
535                         .num_caps = 0,
536                         .num_msi_vectors = 0,
537                         .msi_64bits = 0,
538                         .msi_maskable = 0,
539                         .num_msix_vectors = 0,
540                         .msix_region_size = 0x0,
541                         .msix_address = 0x0,
542                 },
543         },
544
545         .pci_caps = {
546                 /* PCIDevice: 00:01.0 */
547                 /* PCIDevice: 00:02.0 */
548                 /* PCIDevice: 00:04.0 */
549                 {
550                         .id = PCI_CAP_ID_MSIX,
551                         .start = 0x98,
552                         .len = 0xc,
553                         .flags = JAILHOUSE_PCICAPS_WRITE,
554                 },
555                 {
556                         .id = PCI_CAP_ID_VNDR,
557                         .start = 0x84,
558                         .len = 0x2,
559                         .flags = 0,
560                 },
561                 {
562                         .id = PCI_CAP_ID_VNDR,
563                         .start = 0x70,
564                         .len = 0x2,
565                         .flags = 0,
566                 },
567                 {
568                         .id = PCI_CAP_ID_VNDR,
569                         .start = 0x60,
570                         .len = 0x2,
571                         .flags = 0,
572                 },
573                 {
574                         .id = PCI_CAP_ID_VNDR,
575                         .start = 0x50,
576                         .len = 0x2,
577                         .flags = 0,
578                 },
579                 {
580                         .id = PCI_CAP_ID_VNDR,
581                         .start = 0x40,
582                         .len = 0x2,
583                         .flags = 0,
584                 },
585                 /* PCIDevice: 00:03.0 */
586                 {
587                         .id = PCI_CAP_ID_VNDR,
588                         .start = 0x84,
589                         .len = 0x2,
590                         .flags = 0,
591                 },
592                 {
593                         .id = PCI_CAP_ID_VNDR,
594                         .start = 0x70,
595                         .len = 0x2,
596                         .flags = 0,
597                 },
598                 {
599                         .id = PCI_CAP_ID_VNDR,
600                         .start = 0x60,
601                         .len = 0x2,
602                         .flags = 0,
603                 },
604                 {
605                         .id = PCI_CAP_ID_VNDR,
606                         .start = 0x50,
607                         .len = 0x2,
608                         .flags = 0,
609                 },
610                 {
611                         .id = PCI_CAP_ID_VNDR,
612                         .start = 0x40,
613                         .len = 0x2,
614                         .flags = 0,
615                 },
616                 /* PCIDevice: 00:1b.0 */
617                 {
618                         .id = PCI_CAP_ID_MSI,
619                         .start = 0x60,
620                         .len = 0xe,
621                         .flags = JAILHOUSE_PCICAPS_WRITE,
622                 },
623                 /* PCIDevice: 00:1f.2 */
624                 {
625                         .id = PCI_CAP_ID_MSI,
626                         .start = 0x80,
627                         .len = 0xe,
628                         .flags = JAILHOUSE_PCICAPS_WRITE,
629                 },
630                 {
631                         .id = PCI_CAP_ID_SATA,
632                         .start = 0xa8,
633                         .len = 0x2,
634                         .flags = 0,
635                 },
636         },
637 };