]> rtime.felk.cvut.cz Git - jailhouse.git/blob - configs/f2a88xm-hd3.c
core, configs, tools: Introduce struct jailhouse_iommu
[jailhouse.git] / configs / f2a88xm-hd3.c
1 /*
2  * Jailhouse, a Linux-based partitioning hypervisor
3  *
4  * Copyright (c) Siemens AG, 2014
5  * Copyright (c) Valentine Sinitsyn, 2014
6  *
7  * This work is licensed under the terms of the GNU GPL, version 2.  See
8  * the COPYING file in the top-level directory.
9  *
10  * Configuration for Gigabyte Technology Co., Ltd. GA-F2A88XM-HD3 Rev. 3.0
11  * board with AMD A10-7800 APU and 1G RAM.
12  *
13  * Created with 'jailhouse config create f2a88xm-hd3.c' and adjusted
14  * by Valentine Sinitsyn <valentine.sinitsyn@gmail.com>.
15  *
16  * NOTE: This config expects the following to be appended to your kernel cmdline
17  *       "memmap=0x4200000$0x3b000000"
18  */
19
20 #include <linux/types.h>
21 #include <jailhouse/cell-config.h>
22
23 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
24
25 struct {
26         struct jailhouse_system header;
27         __u64 cpus[1];
28         struct jailhouse_memory mem_regions[35];
29         struct jailhouse_irqchip irqchips[2];
30         __u8 pio_bitmap[0x2000];
31         struct jailhouse_pci_device pci_devices[26];
32         struct jailhouse_pci_capability pci_caps[27];
33 } __attribute__((packed)) config = {
34         .header = {
35                 .signature = JAILHOUSE_SYSTEM_SIGNATURE,
36                 .hypervisor_memory = {
37                         .phys_start = 0x3b000000,
38                         .size = 0x4000000,
39                 },
40                 .debug_console = {
41                         .phys_start = 0x3f8,
42                 },
43                 .platform_info.x86 = {
44                         .mmconfig_base = 0xe0000000,
45                         .mmconfig_end_bus = 0xff,
46                         .pm_timer_address = 0x808,
47                         .iommu_units = {
48                                 {
49                                         .base = 0xfeb80000,
50                                 },
51                         },
52                 },
53                 .device_limit = 128,
54                 .interrupt_limit = 256,
55                 .root_cell = {
56                         .name = "F2A88XM-HD3",
57                         .cpu_set_size = sizeof(config.cpus),
58                         .num_memory_regions = ARRAY_SIZE(config.mem_regions),
59                         .num_irqchips = ARRAY_SIZE(config.irqchips),
60                         .pio_bitmap_size = ARRAY_SIZE(config.pio_bitmap),
61                         .num_pci_devices = ARRAY_SIZE(config.pci_devices),
62                         .num_pci_caps = ARRAY_SIZE(config.pci_caps),
63                 },
64         },
65
66         .cpus = {
67                 0x000000000000000f,
68         },
69
70         .mem_regions = {
71                 /* MemRegion: 00000000-0009e7ff : System RAM */
72                 {
73                         .phys_start = 0x0,
74                         .virt_start = 0x0,
75                         .size = 0x9f000,
76                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
77                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
78                 },
79                 /* MemRegion: 000a0000-000bffff : PCI Bus 0000:00 */
80                 {
81                         .phys_start = 0xa0000,
82                         .virt_start = 0xa0000,
83                         .size = 0x20000,
84                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
85                 },
86                 /* MemRegion: 000c0000-000cf5ff : Video ROM */
87                 {
88                         .phys_start = 0xc0000,
89                         .virt_start = 0xc0000,
90                         .size = 0x10000,
91                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
92                 },
93                 /* MemRegion: 000e0000-000fffff : System ROM */
94                 {
95                         .phys_start = 0xe0000,
96                         .virt_start = 0xe0000,
97                         .size = 0x20000,
98                         .flags = JAILHOUSE_MEM_READ,
99                 },
100                 /* MemRegion: 00100000-00ffffff : System RAM */
101                 {
102                         .phys_start = 0x100000,
103                         .virt_start = 0x100000,
104                         .size = 0xf00000,
105                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
106                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
107                 },
108                 /* MemRegion: 01000000-01ffffff : Kernel */
109                 {
110                         .phys_start = 0x1000000,
111                         .virt_start = 0x1000000,
112                         .size = 0x1000000,
113                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
114                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
115                 },
116                 /* MemRegion: 02000000-3affffff : System RAM */
117                 {
118                         .phys_start = 0x2000000,
119                         .virt_start = 0x2000000,
120                         .size = 0x39000000,
121                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
122                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
123                 },
124                 /* MemRegion: 3f200000-6b8ecfff : System RAM */
125                 {
126                         .phys_start = 0x3f200000,
127                         .virt_start = 0x3f200000,
128                         .size = 0x2c6ed000,
129                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
130                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
131                 },
132                 /* MemRegion: 6b91d000-6bbdffff : System RAM */
133                 {
134                         .phys_start = 0x6b91d000,
135                         .virt_start = 0x6b91d000,
136                         .size = 0x2c3000,
137                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
138                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
139                 },
140                 /* MemRegion: 6bbe0000-6bcadfff : ACPI Non-volatile Storage */
141                 {
142                         .phys_start = 0x6bbe0000,
143                         .virt_start = 0x6bbe0000,
144                         .size = 0xce000,
145                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
146                 },
147                 /* MemRegion: 6d1c9000-6d1c9fff : System RAM */
148                 {
149                         .phys_start = 0x6d1c9000,
150                         .virt_start = 0x6d1c9000,
151                         .size = 0x1000,
152                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
153                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
154                 },
155                 /* MemRegion: 6d1ca000-6d3cffff : ACPI Non-volatile Storage */
156                 {
157                         .phys_start = 0x6d1ca000,
158                         .virt_start = 0x6d1ca000,
159                         .size = 0x206000,
160                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
161                 },
162                 /* MemRegion: 6d3d0000-6d850fff : System RAM */
163                 {
164                         .phys_start = 0x6d3d0000,
165                         .virt_start = 0x6d3d0000,
166                         .size = 0x481000,
167                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
168                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
169                 },
170                 /* MemRegion: 6dfe2000-6dffffff : System RAM */
171                 {
172                         .phys_start = 0x6dfe2000,
173                         .virt_start = 0x6dfe2000,
174                         .size = 0x1e000,
175                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
176                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
177                 },
178                 /* MemRegion: 6e000000-6fffffff : RAM buffer */
179                 {
180                         .phys_start = 0x6e000000,
181                         .virt_start = 0x6e000000,
182                         .size = 0x2000000,
183                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
184                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
185                 },
186                 /* MemRegion: c0000000-cfffffff : 0000:00:01.0 */
187                 {
188                         .phys_start = 0xc0000000,
189                         .virt_start = 0xc0000000,
190                         .size = 0x10000000,
191                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
192                 },
193                 /* MemRegion: d0000000-d07fffff : 0000:00:01.0 */
194                 {
195                         .phys_start = 0xd0000000,
196                         .virt_start = 0xd0000000,
197                         .size = 0x800000,
198                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
199                 },
200                 /* MemRegion: d0801000-d0803fff : r8169 */
201                 {
202                         .phys_start = 0xd0801000,
203                         .virt_start = 0xd0801000,
204                         .size = 0x3000,
205                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
206                 },
207                 /* MemRegion: fea00000-fea00fff : r8169 */
208                 {
209                         .phys_start = 0xfea00000,
210                         .virt_start = 0xfea00000,
211                         .size = 0x1000,
212                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
213                 },
214                 /* MemRegion: feb00000-feb3ffff : 0000:00:01.0 */
215                 {
216                         .phys_start = 0xfeb00000,
217                         .virt_start = 0xfeb00000,
218                         .size = 0x40000,
219                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
220                 },
221                 /* MemRegion: feb40000-feb5ffff : 0000:00:01.0 */
222                 {
223                         .phys_start = 0xfeb40000,
224                         .virt_start = 0xfeb40000,
225                         .size = 0x20000,
226                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
227                 },
228                 /* MemRegion: feb60000-feb63fff : ICH HD audio */
229                 {
230                         .phys_start = 0xfeb60000,
231                         .virt_start = 0xfeb60000,
232                         .size = 0x4000,
233                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
234                 },
235                 /* MemRegion: feb64000-feb67fff : ICH HD audio */
236                 {
237                         .phys_start = 0xfeb64000,
238                         .virt_start = 0xfeb64000,
239                         .size = 0x4000,
240                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
241                 },
242                 /* MemRegion: feb68000-feb68fff : xhci_hcd */
243                 {
244                         .phys_start = 0xfeb68000,
245                         .virt_start = 0xfeb68000,
246                         .size = 0x1000,
247                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
248                 },
249                 /* MemRegion: feb6a000-feb6afff : xhci_hcd */
250                 {
251                         .phys_start = 0xfeb6a000,
252                         .virt_start = 0xfeb6a000,
253                         .size = 0x1000,
254                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
255                 },
256                 /* MemRegion: feb6c000-feb6cfff : ohci_hcd */
257                 {
258                         .phys_start = 0xfeb6c000,
259                         .virt_start = 0xfeb6c000,
260                         .size = 0x1000,
261                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
262                 },
263                 /* MemRegion: feb6d000-feb6d0ff : ehci_hcd */
264                 {
265                         .phys_start = 0xfeb6d000,
266                         .virt_start = 0xfeb6d000,
267                         .size = 0x1000,
268                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
269                 },
270                 /* MemRegion: feb6e000-feb6efff : ohci_hcd */
271                 {
272                         .phys_start = 0xfeb6e000,
273                         .virt_start = 0xfeb6e000,
274                         .size = 0x1000,
275                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
276                 },
277                 /* MemRegion: feb6f000-feb6f0ff : ehci_hcd */
278                 {
279                         .phys_start = 0xfeb6f000,
280                         .virt_start = 0xfeb6f000,
281                         .size = 0x1000,
282                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
283                 },
284                 /* MemRegion: feb70000-feb70fff : ohci_hcd */
285                 {
286                         .phys_start = 0xfeb70000,
287                         .virt_start = 0xfeb70000,
288                         .size = 0x1000,
289                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
290                 },
291                 /* MemRegion: feb71000-feb717ff : ahci */
292                 {
293                         .phys_start = 0xfeb71000,
294                         .virt_start = 0xfeb71000,
295                         .size = 0x1000,
296                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
297                 },
298                 /* MemRegion: feb80000-febfffff : pnp 00:02 */
299                 {
300                         .phys_start = 0xfeb80000,
301                         .virt_start = 0xfeb80000,
302                         .size = 0x80000,
303                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
304                 },
305                 /* MemRegion: fed00000-fed003ff : HPET 0 */
306                 {
307                         .phys_start = 0xfed00000,
308                         .virt_start = 0xfed00000,
309                         .size = 0x1000,
310                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
311                 },
312                 /* MemRegion: fed61000-fed70fff : pnp 00:09 */
313                 {
314                         .phys_start = 0xfed61000,
315                         .virt_start = 0xfed61000,
316                         .size = 0x10000,
317                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
318                 },
319                 /* MemRegion: 3f000000-3f1fffff : JAILHOUSE Inmate Memory */
320                 {
321                         .phys_start = 0x3f000000,
322                         .virt_start = 0x3f000000,
323                         .size = 0x200000,
324                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
325                 },
326         },
327
328         .irqchips = {
329                 /* IOAPIC 0, GSI base 0 */
330                 {
331                         .address = 0xfec00000,
332                         .id = 0x0,
333                         .pin_bitmap = 0xffffff,
334                 },
335                 /* IOAPIC 1, GSI base 24 */
336                 {
337                         .address = 0xfec01000,
338                         .id = 0x0,
339                         .pin_bitmap = 0xffffff,
340                 },
341         },
342
343         .pio_bitmap = {
344                 [     0/8 ...   0x1f/8] = -1,
345                 [  0x20/8 ...   0x27/8] = 0xfc, /* HACK: PIC */
346                 [  0x28/8 ...   0x3f/8] = -1,
347                 [  0x40/8 ...   0x47/8] = 0xf0, /* PIT */
348                 [  0x48/8 ...   0x5f/8] = -1,
349                 [  0x60/8 ...   0x67/8] = 0xec, /* HACK: NMI status/control */
350                 [  0x68/8 ...   0x6f/8] = -1,
351                 [  0x70/8 ...   0x77/8] = 0xfc, /* RTC */
352                 [  0x78/8 ...   0x7f/8] = -1,
353                 [  0x80/8 ...   0x87/8] = 0xfe, /* Port 80 (delays) */
354                 [  0x88/8 ...  0x3af/8] = -1,
355                 [ 0x3b0/8 ...  0x3df/8] = 0x00, /* VGA */
356                 [ 0x3e0/8 ...  0xcf7/8] = 0, /* HACK: PCI bus */
357                 [ 0xcf8/8 ...  0xcff/8] = -1,
358                 [ 0xd00/8 ... 0xffff/8] = 0, /* HACK: PCI bus */
359         },
360
361         .pci_devices = {
362                 /* PCIDevice: 00:00.0 */
363                 {
364                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
365                         .domain = 0x0,
366                         .bdf = 0x0,
367                         .caps_start = 0,
368                         .num_caps = 0,
369                         .num_msi_vectors = 0,
370                         .msi_64bits = 0,
371                         .num_msix_vectors = 0,
372                         .msix_region_size = 0x0,
373                         .msix_address = 0x0,
374                 },
375                 /* PCIDevice: 00:01.0 */
376                 {
377                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
378                         .iommu = 0,
379                         .domain = 0x0,
380                         .bdf = 0x8,
381                         .caps_start = 3,
382                         .num_caps = 4,
383                         .num_msi_vectors = 1,
384                         .msi_64bits = 1,
385                         .num_msix_vectors = 0,
386                         .msix_region_size = 0x0,
387                         .msix_address = 0x0,
388                 },
389                 /* PCIDevice: 00:01.1 */
390                 {
391                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
392                         .iommu = 0,
393                         .domain = 0x0,
394                         .bdf = 0x9,
395                         .caps_start = 3,
396                         .num_caps = 4,
397                         .num_msi_vectors = 1,
398                         .msi_64bits = 1,
399                         .num_msix_vectors = 0,
400                         .msix_region_size = 0x0,
401                         .msix_address = 0x0,
402                 },
403                 /* PCIDevice: 00:02.0 */
404                 {
405                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
406                         .iommu = 0,
407                         .domain = 0x0,
408                         .bdf = 0x10,
409                         .caps_start = 0,
410                         .num_caps = 0,
411                         .num_msi_vectors = 0,
412                         .msi_64bits = 0,
413                         .num_msix_vectors = 0,
414                         .msix_region_size = 0x0,
415                         .msix_address = 0x0,
416                 },
417                 /* PCIDevice: 00:03.0 */
418                 {
419                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
420                         .iommu = 0,
421                         .domain = 0x0,
422                         .bdf = 0x18,
423                         .caps_start = 0,
424                         .num_caps = 0,
425                         .num_msi_vectors = 0,
426                         .msi_64bits = 0,
427                         .num_msix_vectors = 0,
428                         .msix_region_size = 0x0,
429                         .msix_address = 0x0,
430                 },
431                 /* PCIDevice: 00:03.1 */
432                 {
433                         .type = JAILHOUSE_PCI_TYPE_BRIDGE,
434                         .iommu = 0,
435                         .domain = 0x0,
436                         .bdf = 0x19,
437                         .caps_start = 7,
438                         .num_caps = 5,
439                         .num_msi_vectors = 1,
440                         .msi_64bits = 1,
441                         .num_msix_vectors = 0,
442                         .msix_region_size = 0x0,
443                         .msix_address = 0x0,
444                 },
445                 /* PCIDevice: 00:04.0 */
446                 {
447                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
448                         .iommu = 0,
449                         .domain = 0x0,
450                         .bdf = 0x20,
451                         .caps_start = 0,
452                         .num_caps = 0,
453                         .num_msi_vectors = 0,
454                         .msi_64bits = 0,
455                         .num_msix_vectors = 0,
456                         .msix_region_size = 0x0,
457                         .msix_address = 0x0,
458                 },
459                 /* PCIDevice: 00:10.0 */
460                 {
461                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
462                         .iommu = 0,
463                         .domain = 0x0,
464                         .bdf = 0x80,
465                         .caps_start = 12,
466                         .num_caps = 4,
467                         .num_msi_vectors = 8,
468                         .msi_64bits = 1,
469                         .num_msix_vectors = 8,
470                         .msix_region_size = 0x1000,
471                         .msix_address = 0xfeb6b000,
472                 },
473                 /* PCIDevice: 00:10.1 */
474                 {
475                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
476                         .iommu = 0,
477                         .domain = 0x0,
478                         .bdf = 0x81,
479                         .caps_start = 12,
480                         .num_caps = 4,
481                         .num_msi_vectors = 8,
482                         .msi_64bits = 1,
483                         .num_msix_vectors = 8,
484                         .msix_region_size = 0x1000,
485                         .msix_address = 0xfeb69000,
486                 },
487                 /* PCIDevice: 00:11.0 */
488                 {
489                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
490                         .iommu = 0,
491                         .domain = 0x0,
492                         .bdf = 0x88,
493                         .caps_start = 16,
494                         .num_caps = 2,
495                         .num_msi_vectors = 8,
496                         .msi_64bits = 1,
497                         .num_msix_vectors = 0,
498                         .msix_region_size = 0x0,
499                         .msix_address = 0x0,
500                 },
501                 /* PCIDevice: 00:12.0 */
502                 {
503                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
504                         .iommu = 0,
505                         .domain = 0x0,
506                         .bdf = 0x90,
507                         .caps_start = 0,
508                         .num_caps = 0,
509                         .num_msi_vectors = 0,
510                         .msi_64bits = 0,
511                         .num_msix_vectors = 0,
512                         .msix_region_size = 0x0,
513                         .msix_address = 0x0,
514                 },
515                 /* PCIDevice: 00:12.2 */
516                 {
517                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
518                         .iommu = 0,
519                         .domain = 0x0,
520                         .bdf = 0x92,
521                         .caps_start = 18,
522                         .num_caps = 2,
523                         .num_msi_vectors = 0,
524                         .msi_64bits = 0,
525                         .num_msix_vectors = 0,
526                         .msix_region_size = 0x0,
527                         .msix_address = 0x0,
528                 },
529                 /* PCIDevice: 00:13.0 */
530                 {
531                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
532                         .iommu = 0,
533                         .domain = 0x0,
534                         .bdf = 0x98,
535                         .caps_start = 0,
536                         .num_caps = 0,
537                         .num_msi_vectors = 0,
538                         .msi_64bits = 0,
539                         .num_msix_vectors = 0,
540                         .msix_region_size = 0x0,
541                         .msix_address = 0x0,
542                 },
543                 /* PCIDevice: 00:13.2 */
544                 {
545                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
546                         .iommu = 0,
547                         .domain = 0x0,
548                         .bdf = 0x9a,
549                         .caps_start = 18,
550                         .num_caps = 2,
551                         .num_msi_vectors = 0,
552                         .msi_64bits = 0,
553                         .num_msix_vectors = 0,
554                         .msix_region_size = 0x0,
555                         .msix_address = 0x0,
556                 },
557                 /* PCIDevice: 00:14.0 */
558                 {
559                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
560                         .iommu = 0,
561                         .domain = 0x0,
562                         .bdf = 0xa0,
563                         .caps_start = 0,
564                         .num_caps = 0,
565                         .num_msi_vectors = 0,
566                         .msi_64bits = 0,
567                         .num_msix_vectors = 0,
568                         .msix_region_size = 0x0,
569                         .msix_address = 0x0,
570                 },
571                 /* PCIDevice: 00:14.2 */
572                 {
573                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
574                         .iommu = 0,
575                         .domain = 0x0,
576                         .bdf = 0xa2,
577                         .caps_start = 20,
578                         .num_caps = 1,
579                         .num_msi_vectors = 0,
580                         .msi_64bits = 0,
581                         .num_msix_vectors = 0,
582                         .msix_region_size = 0x0,
583                         .msix_address = 0x0,
584                 },
585                 /* PCIDevice: 00:14.3 */
586                 {
587                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
588                         .iommu = 0,
589                         .domain = 0x0,
590                         .bdf = 0xa3,
591                         .caps_start = 0,
592                         .num_caps = 0,
593                         .num_msi_vectors = 0,
594                         .msi_64bits = 0,
595                         .num_msix_vectors = 0,
596                         .msix_region_size = 0x0,
597                         .msix_address = 0x0,
598                 },
599                 /* PCIDevice: 00:14.4 */
600                 {
601                         .type = JAILHOUSE_PCI_TYPE_BRIDGE,
602                         .iommu = 0,
603                         .domain = 0x0,
604                         .bdf = 0xa4,
605                         .caps_start = 0,
606                         .num_caps = 0,
607                         .num_msi_vectors = 0,
608                         .msi_64bits = 0,
609                         .num_msix_vectors = 0,
610                         .msix_region_size = 0x0,
611                         .msix_address = 0x0,
612                 },
613                 /* PCIDevice: 00:14.5 */
614                 {
615                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
616                         .iommu = 0,
617                         .domain = 0x0,
618                         .bdf = 0xa5,
619                         .caps_start = 0,
620                         .num_caps = 0,
621                         .num_msi_vectors = 0,
622                         .msi_64bits = 0,
623                         .num_msix_vectors = 0,
624                         .msix_region_size = 0x0,
625                         .msix_address = 0x0,
626                 },
627                 /* PCIDevice: 00:18.0 */
628                 {
629                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
630                         .iommu = 0,
631                         .domain = 0x0,
632                         .bdf = 0xc0,
633                         .caps_start = 0,
634                         .num_caps = 0,
635                         .num_msi_vectors = 0,
636                         .msi_64bits = 0,
637                         .num_msix_vectors = 0,
638                         .msix_region_size = 0x0,
639                         .msix_address = 0x0,
640                 },
641                 /* PCIDevice: 00:18.1 */
642                 {
643                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
644                         .iommu = 0,
645                         .domain = 0x0,
646                         .bdf = 0xc1,
647                         .caps_start = 0,
648                         .num_caps = 0,
649                         .num_msi_vectors = 0,
650                         .msi_64bits = 0,
651                         .num_msix_vectors = 0,
652                         .msix_region_size = 0x0,
653                         .msix_address = 0x0,
654                 },
655                 /* PCIDevice: 00:18.2 */
656                 {
657                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
658                         .iommu = 0,
659                         .domain = 0x0,
660                         .bdf = 0xc2,
661                         .caps_start = 0,
662                         .num_caps = 0,
663                         .num_msi_vectors = 0,
664                         .msi_64bits = 0,
665                         .num_msix_vectors = 0,
666                         .msix_region_size = 0x0,
667                         .msix_address = 0x0,
668                 },
669                 /* PCIDevice: 00:18.3 */
670                 {
671                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
672                         .iommu = 0,
673                         .domain = 0x0,
674                         .bdf = 0xc3,
675                         .caps_start = 21,
676                         .num_caps = 1,
677                         .num_msi_vectors = 0,
678                         .msi_64bits = 0,
679                         .num_msix_vectors = 0,
680                         .msix_region_size = 0x0,
681                         .msix_address = 0x0,
682                 },
683                 /* PCIDevice: 00:18.4 */
684                 {
685                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
686                         .iommu = 0,
687                         .domain = 0x0,
688                         .bdf = 0xc4,
689                         .caps_start = 0,
690                         .num_caps = 0,
691                         .num_msi_vectors = 0,
692                         .msi_64bits = 0,
693                         .num_msix_vectors = 0,
694                         .msix_region_size = 0x0,
695                         .msix_address = 0x0,
696                 },
697                 /* PCIDevice: 00:18.5 */
698                 {
699                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
700                         .iommu = 0,
701                         .domain = 0x0,
702                         .bdf = 0xc5,
703                         .caps_start = 0,
704                         .num_caps = 0,
705                         .num_msi_vectors = 0,
706                         .msi_64bits = 0,
707                         .num_msix_vectors = 0,
708                         .msix_region_size = 0x0,
709                         .msix_address = 0x0,
710                 },
711                 /* PCIDevice: 01:00.0 */
712                 {
713                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
714                         .iommu = 0,
715                         .domain = 0x0,
716                         .bdf = 0x100,
717                         .caps_start = 22,
718                         .num_caps = 5,
719                         .num_msi_vectors = 1,
720                         .msi_64bits = 1,
721                         .num_msix_vectors = 4,
722                         .msix_region_size = 0x1000,
723                         .msix_address = 0xd0800000,
724                 },
725         },
726
727         .pci_caps = {
728                 /* PCIDevice: 00:00.2 */
729                 {
730                         .id = 0xf,
731                         .start = 0x40,
732                         .len = 2,
733                         .flags = 0,
734                 },
735                 {
736                         .id = 0x5,
737                         .start = 0x54,
738                         .len = 14,
739                         .flags = JAILHOUSE_PCICAPS_WRITE,
740                 },
741                 {
742                         .id = 0x8,
743                         .start = 0x64,
744                         .len = 2,
745                         .flags = 0,
746                 },
747                 /* PCIDevice: 00:01.0 */
748                 /* PCIDevice: 00:01.1 */
749                 {
750                         .id = 0x9,
751                         .start = 0x48,
752                         .len = 2,
753                         .flags = 0,
754                 },
755                 {
756                         .id = 0x1,
757                         .start = 0x50,
758                         .len = 8,
759                         .flags = JAILHOUSE_PCICAPS_WRITE,
760                 },
761                 {
762                         .id = 0x10,
763                         .start = 0x58,
764                         .len = 2,
765                         .flags = 0,
766                 },
767                 {
768                         .id = 0x5,
769                         .start = 0xa0,
770                         .len = 14,
771                         .flags = JAILHOUSE_PCICAPS_WRITE,
772                 },
773                 /* PCIDevice: 00:03.1 */
774                 {
775                         .id = 0x1,
776                         .start = 0x50,
777                         .len = 8,
778                         .flags = JAILHOUSE_PCICAPS_WRITE,
779                 },
780                 {
781                         .id = 0x10,
782                         .start = 0x58,
783                         .len = 2,
784                         .flags = 0,
785                 },
786                 {
787                         .id = 0x5,
788                         .start = 0xa0,
789                         .len = 14,
790                         .flags = JAILHOUSE_PCICAPS_WRITE,
791                 },
792                 {
793                         .id = 0xd,
794                         .start = 0xb0,
795                         .len = 2,
796                         .flags = 0,
797                 },
798                 {
799                         .id = 0x8,
800                         .start = 0xb8,
801                         .len = 2,
802                         .flags = 0,
803                 },
804                 /* PCIDevice: 00:10.0 */
805                 /* PCIDevice: 00:10.1 */
806                 {
807                         .id = 0x1,
808                         .start = 0x50,
809                         .len = 8,
810                         .flags = JAILHOUSE_PCICAPS_WRITE,
811                 },
812                 {
813                         .id = 0x5,
814                         .start = 0x70,
815                         .len = 14,
816                         .flags = JAILHOUSE_PCICAPS_WRITE,
817                 },
818                 {
819                         .id = 0x11,
820                         .start = 0x90,
821                         .len = 12,
822                         .flags = JAILHOUSE_PCICAPS_WRITE,
823                 },
824                 {
825                         .id = 0x10,
826                         .start = 0xa0,
827                         .len = 2,
828                         .flags = 0,
829                 },
830                 /* PCIDevice: 00:11.0 */
831                 {
832                         .id = 0x5,
833                         .start = 0x50,
834                         .len = 14,
835                         .flags = JAILHOUSE_PCICAPS_WRITE,
836                 },
837                 {
838                         .id = 0x12,
839                         .start = 0x70,
840                         .len = 2,
841                         .flags = 0,
842                 },
843                 /* PCIDevice: 00:12.2 */
844                 /* PCIDevice: 00:13.2 */
845                 {
846                         .id = 0x1,
847                         .start = 0xc0,
848                         .len = 8,
849                         .flags = JAILHOUSE_PCICAPS_WRITE,
850                 },
851                 {
852                         .id = 0xa,
853                         .start = 0xe4,
854                         .len = 2,
855                         .flags = 0,
856                 },
857                 /* PCIDevice: 00:14.2 */
858                 {
859                         .id = 0x1,
860                         .start = 0x50,
861                         .len = 8,
862                         .flags = JAILHOUSE_PCICAPS_WRITE,
863                 },
864                 /* PCIDevice: 00:18.3 */
865                 {
866                         .id = 0xf,
867                         .start = 0xf0,
868                         .len = 2,
869                         .flags = 0,
870                 },
871                 /* PCIDevice: 01:00.0 */
872                 {
873                         .id = 0x1,
874                         .start = 0x40,
875                         .len = 8,
876                         .flags = JAILHOUSE_PCICAPS_WRITE,
877                 },
878                 {
879                         .id = 0x5,
880                         .start = 0x50,
881                         .len = 14,
882                         .flags = JAILHOUSE_PCICAPS_WRITE,
883                 },
884                 {
885                         .id = 0x10,
886                         .start = 0x70,
887                         .len = 2,
888                         .flags = 0,
889                 },
890                 {
891                         .id = 0x11,
892                         .start = 0xb0,
893                         .len = 12,
894                         .flags = JAILHOUSE_PCICAPS_WRITE,
895                 },
896                 {
897                         .id = 0x3,
898                         .start = 0xd0,
899                         .len = 2,
900                         .flags = 0,
901                 },
902         },
903 };