]> rtime.felk.cvut.cz Git - jailhouse.git/blob - configs/h87i.c
configs/tools: Describe DMAR units in config files
[jailhouse.git] / configs / h87i.c
1 /*
2  * Jailhouse, a Linux-based partitioning hypervisor
3  *
4  * Test configuration for Asus H87I-PLUS, 4 GB RAM, 64 MB hypervisor
5  *
6  * Copyright (c) Siemens AG, 2013
7  *
8  * Authors:
9  *  Jan Kiszka <jan.kiszka@siemens.com>
10  *
11  * This work is licensed under the terms of the GNU GPL, version 2.  See
12  * the COPYING file in the top-level directory.
13  */
14
15 #include <linux/types.h>
16 #include <jailhouse/cell-config.h>
17
18 #define ARRAY_SIZE(a) sizeof(a) / sizeof(a[0])
19
20 struct {
21         struct jailhouse_system header;
22         __u64 cpus[1];
23         struct jailhouse_memory mem_regions[9];
24         struct jailhouse_irqchip irqchips[1];
25         __u8 pio_bitmap[0x2000];
26         struct jailhouse_pci_device pci_devices[13];
27         struct jailhouse_pci_capability pci_caps[27];
28 } __attribute__((packed)) config = {
29         .header = {
30                 .hypervisor_memory = {
31                         .phys_start = 0x3c000000,
32                         .size = 0x4000000,
33                 },
34                 .config_memory = {
35                         .phys_start = 0xcca64000,
36                         .size = 0x15000,
37                 },
38                 .platform_info.x86 = {
39                         .mmconfig_base = 0xf8000000,
40                         .mmconfig_end_bus = 0x3f,
41                         .pm_timer_address = 0x1808,
42                         .dmar_unit_base = {
43                                 0xfed90000,
44                                 0xfed91000,
45                         },
46                 },
47                 .root_cell = {
48                         .name = "H87I-PLUS",
49
50                         .cpu_set_size = sizeof(config.cpus),
51                         .num_memory_regions = ARRAY_SIZE(config.mem_regions),
52                         .num_irqchips = ARRAY_SIZE(config.irqchips),
53                         .pio_bitmap_size = ARRAY_SIZE(config.pio_bitmap),
54                         .num_pci_devices = ARRAY_SIZE(config.pci_devices),
55                         .num_pci_caps = ARRAY_SIZE(config.pci_caps),
56                 },
57         },
58
59         .cpus = {
60                 0xff,
61         },
62
63         .mem_regions = {
64                 /* RAM */ {
65                         .phys_start = 0x0,
66                         .virt_start = 0x0,
67                         .size = 0x3c000000,
68                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
69                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
70                 },
71                 /* RAM */ {
72                         .phys_start = 0x40000000,
73                         .virt_start = 0x40000000,
74                         .size = 0x8ca64000,
75                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
76                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
77                 },
78                 /* ACPI */ {
79                         .phys_start = 0xcca63000,
80                         .virt_start = 0xcca63000,
81                         .size = 0x15000,
82                         .flags = JAILHOUSE_MEM_READ,
83                 },
84                 /* RAM */ {
85                         .phys_start = 0xcdfff000,
86                         .virt_start = 0xcdfff000,
87                         .size = 0x1000,
88                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
89                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
90                 },
91                 /* RAM */ {
92                         .phys_start = 0xcf200000,
93                         .virt_start = 0xcf200000,
94                         .size = 0x10000000,
95                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
96                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
97                 },
98                 /* PCI */ {
99                         .phys_start = 0xdf200000,
100                         .virt_start = 0xdf200000,
101                         .size = 0x18e00000,
102                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
103                 },
104                 /* not safe until we catch MSIs via interrupt remapping */
105                 /* HPET */ {
106                         .phys_start = 0xfed00000,
107                         .virt_start = 0xfed00000,
108                         .size = 0x1000,
109                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE,
110                 },
111                 /* RAM */ {
112                         .phys_start = 0x100000000,
113                         .virt_start = 0x100000000,
114                         .size = 0x20000000,
115                         .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
116                                 JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_DMA,
117                 },
118         },
119
120         .irqchips = {
121                 /* IOAPIC */ {
122                         .address = 0xfec00000,
123                         .pin_bitmap = 0xffffff,
124                 },
125         },
126
127         .pio_bitmap = {
128                 [     0/8 ...   0x3f/8] = -1,
129                 [  0x40/8 ...   0x47/8] = 0xf0, /* PIT */
130                 [  0x48/8 ...   0x5f/8] = -1,
131                 [  0x60/8 ...   0x67/8] = 0x0, /* HACK: 8042, and more? */
132                 [  0x68/8 ...   0x6f/8] = -1,
133                 [  0x70/8 ...   0x77/8] = 0xfc, /* rtc */
134                 [  0x78/8 ...  0x3af/8] = -1,
135                 [ 0x3b0/8 ...  0x3df/8] = 0, /* VGA */
136                 [ 0x3e0/8 ...  0xcff/8] = -1,
137                 [ 0xd00/8 ... 0xffff/8] = 0, /* HACK: full PCI */
138         },
139
140         .pci_devices = {
141                 /* PCIDevice: 00:00.0 */
142                 {
143                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
144                         .domain = 0x0,
145                         .bdf = 0x0,
146                         .caps_start = 0,
147                         .num_caps = 1,
148                 },
149                 /* PCIDevice: 00:01.0 */
150                 {
151                         .type = JAILHOUSE_PCI_TYPE_BRIDGE,
152                         .domain = 0x0,
153                         .bdf = 0x8,
154                         .caps_start = 1,
155                         .num_caps = 4,
156                 },
157                 /* PCIDevice: 00:02.0 */
158                 {
159                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
160                         .domain = 0x0,
161                         .bdf = 0x10,
162                         .caps_start = 5,
163                         .num_caps = 3,
164                 },
165                 /* PCIDevice: 00:03.0 */
166                 {
167                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
168                         .domain = 0x0,
169                         .bdf = 0x18,
170                         .caps_start = 8,
171                         .num_caps = 3,
172                 },
173                 /* PCIDevice: 00:14.0 */
174                 {
175                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
176                         .domain = 0x0,
177                         .bdf = 0xa0,
178                         .caps_start = 11,
179                         .num_caps = 2,
180                 },
181                 /* PCIDevice: 00:16.0 */
182                 {
183                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
184                         .domain = 0x0,
185                         .bdf = 0xb0,
186                         .caps_start = 13,
187                         .num_caps = 2,
188                 },
189                 /* PCIDevice: 00:19.0 */
190                 {
191                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
192                         .domain = 0x0,
193                         .bdf = 0xc8,
194                         .caps_start = 15,
195                         .num_caps = 3,
196                 },
197                 /* PCIDevice: 00:1a.0 */
198                 {
199                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
200                         .domain = 0x0,
201                         .bdf = 0xd0,
202                         .caps_start = 18,
203                         .num_caps = 3,
204                 },
205                 /* PCIDevice: 00:1b.0 */
206                 {
207                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
208                         .domain = 0x0,
209                         .bdf = 0xd8,
210                         .caps_start = 21,
211                         .num_caps = 3,
212                 },
213                 /* PCIDevice: 00:1d.0 */
214                 {
215                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
216                         .domain = 0x0,
217                         .bdf = 0xe8,
218                         .caps_start = 18,
219                         .num_caps = 3,
220                 },
221                 /* PCIDevice: 00:1f.0 */
222                 {
223                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
224                         .domain = 0x0,
225                         .bdf = 0xf8,
226                         .caps_start = 0,
227                         .num_caps = 1,
228                 },
229                 /* PCIDevice: 00:1f.2 */
230                 {
231                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
232                         .domain = 0x0,
233                         .bdf = 0xfa,
234                         .caps_start = 24,
235                         .num_caps = 3,
236                 },
237                 /* PCIDevice: 00:1f.3 */
238                 {
239                         .type = JAILHOUSE_PCI_TYPE_DEVICE,
240                         .domain = 0x0,
241                         .bdf = 0xfb,
242                         .caps_start = 0,
243                         .num_caps = 0,
244                 },
245         },
246
247         .pci_caps = {
248                 /* PCIDevice: 00:00.0 */
249                 /* PCIDevice: 00:1f.0 */
250                 {
251                         .id = 0x9,
252                         .start = 0xe0,
253                         .len = 2,
254                         .flags = 0,
255                 },
256                 /* PCIDevice: 00:01.0 */
257                 {
258                         .id = 0xd,
259                         .start = 0x88,
260                         .len = 2,
261                         .flags = 0,
262                 },
263                 {
264                         .id = 0x1,
265                         .start = 0x80,
266                         .len = 8,
267                         .flags = JAILHOUSE_PCICAPS_WRITE,
268                 },
269                 {
270                         .id = 0x5,
271                         .start = 0x90,
272                         .len = 10,
273                         .flags = JAILHOUSE_PCICAPS_WRITE,
274                 },
275                 {
276                         .id = 0x10,
277                         .start = 0xa0,
278                         .len = 2,
279                         .flags = 0,
280                 },
281                 /* PCIDevice: 00:02.0 */
282                 {
283                         .id = 0x5,
284                         .start = 0x90,
285                         .len = 10,
286                         .flags = JAILHOUSE_PCICAPS_WRITE,
287                 },
288                 {
289                         .id = 0x1,
290                         .start = 0xd0,
291                         .len = 8,
292                         .flags = JAILHOUSE_PCICAPS_WRITE,
293                 },
294                 {
295                         .id = 0x13,
296                         .start = 0xa4,
297                         .len = 2,
298                         .flags = 0,
299                 },
300                 /* PCIDevice: 00:03.0 */
301                 {
302                         .id = 0x1,
303                         .start = 0x50,
304                         .len = 8,
305                         .flags = JAILHOUSE_PCICAPS_WRITE,
306                 },
307                 {
308                         .id = 0x5,
309                         .start = 0x60,
310                         .len = 10,
311                         .flags = JAILHOUSE_PCICAPS_WRITE,
312                 },
313                 {
314                         .id = 0x10,
315                         .start = 0x70,
316                         .len = 2,
317                         .flags = 0,
318                 },
319                 /* PCIDevice: 00:14.0 */
320                 {
321                         .id = 0x1,
322                         .start = 0x70,
323                         .len = 8,
324                         .flags = JAILHOUSE_PCICAPS_WRITE,
325                 },
326                 {
327                         .id = 0x5,
328                         .start = 0x80,
329                         .len = 14,
330                         .flags = JAILHOUSE_PCICAPS_WRITE,
331                 },
332                 /* PCIDevice: 00:16.0 */
333                 {
334                         .id = 0x1,
335                         .start = 0x50,
336                         .len = 8,
337                         .flags = JAILHOUSE_PCICAPS_WRITE,
338                 },
339                 {
340                         .id = 0x5,
341                         .start = 0x8c,
342                         .len = 14,
343                         .flags = JAILHOUSE_PCICAPS_WRITE,
344                 },
345                 /* PCIDevice: 00:19.0 */
346                 {
347                         .id = 0x1,
348                         .start = 0xc8,
349                         .len = 8,
350                         .flags = JAILHOUSE_PCICAPS_WRITE,
351                 },
352                 {
353                         .id = 0x5,
354                         .start = 0xd0,
355                         .len = 14,
356                         .flags = JAILHOUSE_PCICAPS_WRITE,
357                 },
358                 {
359                         .id = 0x13,
360                         .start = 0xe0,
361                         .len = 2,
362                         .flags = 0,
363                 },
364                 /* PCIDevice: 00:1a.0 */
365                 /* PCIDevice: 00:1d.0 */
366                 {
367                         .id = 0x1,
368                         .start = 0x50,
369                         .len = 8,
370                         .flags = JAILHOUSE_PCICAPS_WRITE,
371                 },
372                 {
373                         .id = 0xa,
374                         .start = 0x58,
375                         .len = 2,
376                         .flags = 0,
377                 },
378                 {
379                         .id = 0x13,
380                         .start = 0x98,
381                         .len = 2,
382                         .flags = 0,
383                 },
384                 /* PCIDevice: 00:1b.0 */
385                 {
386                         .id = 0x1,
387                         .start = 0x50,
388                         .len = 8,
389                         .flags = JAILHOUSE_PCICAPS_WRITE,
390                 },
391                 {
392                         .id = 0x5,
393                         .start = 0x60,
394                         .len = 14,
395                         .flags = JAILHOUSE_PCICAPS_WRITE,
396                 },
397                 {
398                         .id = 0x10,
399                         .start = 0x70,
400                         .len = 2,
401                         .flags = 0,
402                 },
403                 /* PCIDevice: 00:1f.2 */
404                 {
405                         .id = 0x5,
406                         .start = 0x80,
407                         .len = 10,
408                         .flags = JAILHOUSE_PCICAPS_WRITE,
409                 },
410                 {
411                         .id = 0x1,
412                         .start = 0x70,
413                         .len = 8,
414                         .flags = JAILHOUSE_PCICAPS_WRITE,
415                 },
416                 {
417                         .id = 0x12,
418                         .start = 0xa8,
419                         .len = 2,
420                         .flags = 0,
421                 },
422         },
423 };