]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/qemu/PCIEdit.js
1 Ext
.define('PVE.qemu.PCIInputPanel', {
2 extend
: 'Proxmox.panel.InputPanel',
4 onlineHelp
: 'qm_pci_passthrough',
6 setVMConfig: function(vmconfig
) {
8 me
.vmconfig
= vmconfig
;
10 var hostpci
= me
.vmconfig
[me
.confid
] || '';
12 var values
= PVE
.Parser
.parsePropertyString(hostpci
, 'host');
13 if (values
.host
&& values
.host
.length
< 6) { // 00:00 format not 00:00.0
15 values
.multifunction
= true;
17 values
['x-vga'] = PVE
.Parser
.parseBoolean(values
['x-vga'], 0);
18 values
.pcie
= PVE
.Parser
.parseBoolean(values
.pcie
, 0);
19 values
.rombar
= PVE
.Parser
.parseBoolean(values
.rombar
, 1);
22 if (!me
.vmconfig
.machine
|| me
.vmconfig
.machine
.indexOf('q35') === -1) {
23 // machine is not set to some variant of q35, so we disable pcie
24 var pcie
= me
.down('field[name=pcie]');
25 pcie
.setDisabled(true);
26 pcie
.setBoxLabel(gettext('Q35 only'));
30 me
.down('field[name=romfile]').setVisible(true);
34 onGetValues: function(values
) {
39 for (i
= 0; i
< 5; i
++) {
40 if (!me
.vmconfig
['hostpci' + i
.toString()]) {
41 me
.confid
= 'hostpci' + i
.toString();
46 if (values
.multifunction
) {
47 // modify host to skip the '.X'
48 values
.host
= values
.host
.substring(0,5);
49 delete values
.multifunction
;
58 if (!values
.romfile
) {
59 delete values
.romfile
;
62 ret
[me
.confid
] = PVE
.Parser
.printPropertyString(values
, 'host');
66 initComponent: function() {
69 me
.nodename
= me
.pveSelNode
.data
.node
;
71 throw "no node name specified";
76 xtype
: 'pvePCISelector',
77 fieldLabel
: gettext('Device'),
79 nodename
: me
.nodename
,
81 onLoadCallBack: function(store
, records
, success
) {
82 if (!success
|| !records
.length
) {
86 var first
= records
[0];
87 if (first
.data
.iommugroup
=== -1) {
89 var warning
= Ext
.create('Ext.form.field.Display', {
92 value
: 'No IOMMU detected, please activate it.' +
93 'See Documentation for further information.',
96 me
.items
.insert(0, warning
);
97 me
.updateLayout(); // insert does not trigger that
101 change: function(pcisel
, value
) {
105 var pcidev
= pcisel
.getStore().getById(value
);
106 var mdevfield
= me
.down('field[name=mdev]');
107 mdevfield
.setDisabled(!pcidev
|| !pcidev
.data
.mdev
);
111 var id
= pcidev
.data
.id
.substring(0,5); // 00:00
112 var iommu
= pcidev
.data
.iommugroup
;
113 // try to find out if there are more devices
114 // in that iommu group
117 pcisel
.getStore().each(function(record
) {
118 if (record
.data
.iommugroup
=== iommu
&&
119 record
.data
.id
.substring(0,5) !== id
)
125 var warning
= me
.down('#iommuwarning');
126 if (count
&& !warning
) {
127 warning
= Ext
.create('Ext.form.field.Display', {
130 itemId
: 'iommuwarning',
131 value
: 'The selected Device is not in a seperate' +
132 'IOMMU group, make sure this is intended.',
135 me
.items
.insert(0, warning
);
136 me
.updateLayout(); // insert does not trigger that
137 } else if (!count
&& warning
) {
141 if (pcidev
.data
.mdev
) {
142 mdevfield
.setPciID(value
);
148 xtype
: 'proxmoxcheckbox',
149 fieldLabel
: gettext('All Functions'),
150 name
: 'multifunction'
156 xtype
: 'pveMDevSelector',
159 fieldLabel
: gettext('MDev Type'),
160 nodename
: me
.nodename
,
162 change: function(field
, value
) {
163 var mf
= me
.down('field[name=multifunction]');
167 mf
.setDisabled(!!value
);
172 xtype
: 'proxmoxcheckbox',
173 fieldLabel
: gettext('Primary GPU'),
178 me
.advancedColumn1
= [
180 xtype
: 'proxmoxcheckbox',
181 fieldLabel
: 'ROM-Bar',
185 xtype
: 'displayfield',
188 fieldLabel
: 'ROM-File',
193 me
.advancedColumn2
= [
195 xtype
: 'proxmoxcheckbox',
196 fieldLabel
: 'PCI-Express',
205 Ext
.define('PVE.qemu.PCIEdit', {
206 extend
: 'Proxmox.window.Edit',
212 subject
: gettext('PCI Device'),
215 initComponent : function() {
218 me
.isCreate
= !me
.confid
;
220 var ipanel
= Ext
.create('PVE.qemu.PCIInputPanel', {
222 pveSelNode
: me
.pveSelNode
232 success: function(response
) {
233 ipanel
.setVMConfig(response
.result
.data
);