]> git.proxmox.com Git - qemu-server.git/blame - PVE/QemuServer/PCI.pm
add ivshmem device to config
[qemu-server.git] / PVE / QemuServer / PCI.pm
CommitLineData
de9768f0
DC
1package PVE::QemuServer::PCI;
2
3use base 'Exporter';
4
5our @EXPORT_OK = qw(
6print_pci_addr
7print_pcie_addr
8);
9
10my $devices = {
11 piix3 => { bus => 0, addr => 1 },
d559309f 12 ehci => { bus => 0, addr => 1 }, # instead of piix3 on arm
55655ebc 13 vga => { bus => 0, addr => 2 },
de9768f0
DC
14 balloon0 => { bus => 0, addr => 3 },
15 watchdog => { bus => 0, addr => 4 },
16 scsihw0 => { bus => 0, addr => 5 },
17 'pci.3' => { bus => 0, addr => 5 }, #can also be used for virtio-scsi-single bridge
18 scsihw1 => { bus => 0, addr => 6 },
19 ahci0 => { bus => 0, addr => 7 },
20 qga0 => { bus => 0, addr => 8 },
21 spice => { bus => 0, addr => 9 },
22 virtio0 => { bus => 0, addr => 10 },
23 virtio1 => { bus => 0, addr => 11 },
24 virtio2 => { bus => 0, addr => 12 },
25 virtio3 => { bus => 0, addr => 13 },
26 virtio4 => { bus => 0, addr => 14 },
27 virtio5 => { bus => 0, addr => 15 },
28 hostpci0 => { bus => 0, addr => 16 },
29 hostpci1 => { bus => 0, addr => 17 },
30 net0 => { bus => 0, addr => 18 },
31 net1 => { bus => 0, addr => 19 },
32 net2 => { bus => 0, addr => 20 },
33 net3 => { bus => 0, addr => 21 },
34 net4 => { bus => 0, addr => 22 },
35 net5 => { bus => 0, addr => 23 },
36 vga1 => { bus => 0, addr => 24 },
37 vga2 => { bus => 0, addr => 25 },
38 vga3 => { bus => 0, addr => 26 },
39 hostpci2 => { bus => 0, addr => 27 },
40 hostpci3 => { bus => 0, addr => 28 },
41 #addr29 : usb-host (pve-usb.cfg)
42 'pci.1' => { bus => 0, addr => 30 },
43 'pci.2' => { bus => 0, addr => 31 },
44 'net6' => { bus => 1, addr => 1 },
45 'net7' => { bus => 1, addr => 2 },
46 'net8' => { bus => 1, addr => 3 },
47 'net9' => { bus => 1, addr => 4 },
48 'net10' => { bus => 1, addr => 5 },
49 'net11' => { bus => 1, addr => 6 },
50 'net12' => { bus => 1, addr => 7 },
51 'net13' => { bus => 1, addr => 8 },
52 'net14' => { bus => 1, addr => 9 },
53 'net15' => { bus => 1, addr => 10 },
54 'net16' => { bus => 1, addr => 11 },
55 'net17' => { bus => 1, addr => 12 },
56 'net18' => { bus => 1, addr => 13 },
57 'net19' => { bus => 1, addr => 14 },
58 'net20' => { bus => 1, addr => 15 },
59 'net21' => { bus => 1, addr => 16 },
60 'net22' => { bus => 1, addr => 17 },
61 'net23' => { bus => 1, addr => 18 },
62 'net24' => { bus => 1, addr => 19 },
63 'net25' => { bus => 1, addr => 20 },
64 'net26' => { bus => 1, addr => 21 },
65 'net27' => { bus => 1, addr => 22 },
66 'net28' => { bus => 1, addr => 23 },
67 'net29' => { bus => 1, addr => 24 },
68 'net30' => { bus => 1, addr => 25 },
69 'net31' => { bus => 1, addr => 26 },
70 'xhci' => { bus => 1, addr => 27 },
71 'virtio6' => { bus => 2, addr => 1 },
72 'virtio7' => { bus => 2, addr => 2 },
73 'virtio8' => { bus => 2, addr => 3 },
74 'virtio9' => { bus => 2, addr => 4 },
75 'virtio10' => { bus => 2, addr => 5 },
76 'virtio11' => { bus => 2, addr => 6 },
77 'virtio12' => { bus => 2, addr => 7 },
78 'virtio13' => { bus => 2, addr => 8 },
79 'virtio14' => { bus => 2, addr => 9 },
80 'virtio15' => { bus => 2, addr => 10 },
6dbcb073 81 'ivshmem' => { bus => 2, addr => 11 },
de9768f0
DC
82 'virtioscsi0' => { bus => 3, addr => 1 },
83 'virtioscsi1' => { bus => 3, addr => 2 },
84 'virtioscsi2' => { bus => 3, addr => 3 },
85 'virtioscsi3' => { bus => 3, addr => 4 },
86 'virtioscsi4' => { bus => 3, addr => 5 },
87 'virtioscsi5' => { bus => 3, addr => 6 },
88 'virtioscsi6' => { bus => 3, addr => 7 },
89 'virtioscsi7' => { bus => 3, addr => 8 },
90 'virtioscsi8' => { bus => 3, addr => 9 },
91 'virtioscsi9' => { bus => 3, addr => 10 },
92 'virtioscsi10' => { bus => 3, addr => 11 },
93 'virtioscsi11' => { bus => 3, addr => 12 },
94 'virtioscsi12' => { bus => 3, addr => 13 },
95 'virtioscsi13' => { bus => 3, addr => 14 },
96 'virtioscsi14' => { bus => 3, addr => 15 },
97 'virtioscsi15' => { bus => 3, addr => 16 },
98 'virtioscsi16' => { bus => 3, addr => 17 },
99 'virtioscsi17' => { bus => 3, addr => 18 },
100 'virtioscsi18' => { bus => 3, addr => 19 },
101 'virtioscsi19' => { bus => 3, addr => 20 },
102 'virtioscsi20' => { bus => 3, addr => 21 },
103 'virtioscsi21' => { bus => 3, addr => 22 },
104 'virtioscsi22' => { bus => 3, addr => 23 },
105 'virtioscsi23' => { bus => 3, addr => 24 },
106 'virtioscsi24' => { bus => 3, addr => 25 },
107 'virtioscsi25' => { bus => 3, addr => 26 },
108 'virtioscsi26' => { bus => 3, addr => 27 },
109 'virtioscsi27' => { bus => 3, addr => 28 },
110 'virtioscsi28' => { bus => 3, addr => 29 },
111 'virtioscsi29' => { bus => 3, addr => 30 },
112 'virtioscsi30' => { bus => 3, addr => 31 },
113};
114
115sub print_pci_addr {
d559309f 116 my ($id, $bridges, $arch, $machine) = @_;
de9768f0
DC
117
118 my $res = '';
119
d559309f
WB
120 # We use the same bus slots on all hardware, so we need to check special
121 # cases here:
122 my $busname = 'pci';
123 if ($arch eq 'aarch64' && $machine =~ /^virt/) {
124 die "aarch64/virt cannot use IDE devices\n"
125 if $id =~ /^ide/;
126 $busname = 'pcie';
127 }
128
de9768f0
DC
129 if (defined($devices->{$id}->{bus}) && defined($devices->{$id}->{addr})) {
130 my $addr = sprintf("0x%x", $devices->{$id}->{addr});
131 my $bus = $devices->{$id}->{bus};
d559309f 132 $res = ",bus=$busname.$bus,addr=$addr";
de9768f0
DC
133 $bridges->{$bus} = 1 if $bridges;
134 }
135 return $res;
136
137}
138
139sub print_pcie_addr {
140 my ($id) = @_;
141
142 my $res = '';
143 my $devices = {
55655ebc 144 vga => { bus => 'pcie.0', addr => 1 },
de9768f0
DC
145 hostpci0 => { bus => "ich9-pcie-port-1", addr => 0 },
146 hostpci1 => { bus => "ich9-pcie-port-2", addr => 0 },
147 hostpci2 => { bus => "ich9-pcie-port-3", addr => 0 },
148 hostpci3 => { bus => "ich9-pcie-port-4", addr => 0 },
739ba340
DC
149 # win7 is picky about pcie assignments
150 hostpci0bus0 => { bus => "pcie.0", addr => 16 },
151 hostpci1bus0 => { bus => "pcie.0", addr => 17 },
152 hostpci2bus0 => { bus => "pcie.0", addr => 18 },
153 hostpci3bus0 => { bus => "pcie.0", addr => 19 },
6dbcb073 154 ivshmem => { bus => 'pcie.0', addr => 20 },
de9768f0
DC
155 };
156
157 if (defined($devices->{$id}->{bus}) && defined($devices->{$id}->{addr})) {
158 my $addr = sprintf("0x%x", $devices->{$id}->{addr});
159 my $bus = $devices->{$id}->{bus};
160 $res = ",bus=$bus,addr=$addr";
161 }
162 return $res;
163
164}
b71351a7
DC
165
1661;