-#============================================================================
+#============================================================================UTO
# This library is free software; you can redistribute it and/or
# modify it under the terms of version 2.1 of the GNU Lesser General Public
# License as published by the Free Software Foundation.
from xen.xend import osdep
import xen.xend.XendClient
from xen.xend.XendBootloader import bootloader
+from xen.xend.XendConstants import *
from xen.xend.server.DevConstants import xenbusState
from xen.util import blkif
from xen.util import vscsi_util
backend driver domain to use for the disk.
The option may be repeated to add more than one disk.""")
-gopts.var('pci', val='BUS:DEV.FUNC[,msitranslate=0|1][,power_mgmt=0|1]',
+gopts.var('pci', val='BUS:DEV.FUNC[@VSLOT][,msitranslate=0|1][,power_mgmt=0|1]',
fn=append_value, default=[],
use="""Add a PCI device to a domain, using given params (in hex).
For example 'pci=c0:02.1'.
+ If VSLOT is supplied the device will be inserted into that
+ virtual slot in the guest, else a free slot is selected.
If msitranslate is set, MSI-INTx translation is enabled if possible.
Guest that doesn't support MSI will get IO-APIC type IRQs
translated from physical MSI, HVM only. Default is 1.
"""Create the config for pci devices.
"""
config_pci = []
- for (domain, bus, slot, func, opts) in vals.pci:
+ for (domain, bus, slot, func, vslot, opts) in vals.pci:
config_pci_opts = []
d = comma_sep_kv_to_dict(opts)
config_pci_opts.append([k, d[k]])
config_pci_bdf = ['dev', ['domain', domain], ['bus', bus], \
- ['slot', slot], ['func', func]]
+ ['slot', slot], ['func', func], ['vslot', vslot]]
map(f, d.keys())
if len(config_pci_opts)>0:
config_pci_bdf.append(['opts', config_pci_opts])
r"(?P<bus>[0-9a-fA-F]{1,2})[:,]" + \
r"(?P<slot>[0-9a-fA-F]{1,2})[.,]" + \
r"(?P<func>[0-7])" + \
- r"(,(?P<opts>.*))?$", pci_dev_str)
+ r"(@(?P<vslot>[0-9a-fA-F]))?" + \
+ r"(,(?P<opts>.*))?$", \
+ pci_dev_str)
if pci_match!=None:
pci_dev_info = pci_match.groupdict('')
if pci_dev_info['domain']=='':
pci_dev_info['domain']='0'
+ if pci_dev_info['vslot']=='':
+ pci_dev_info['vslot']="%02x" % AUTO_PHP_SLOT
try:
pci.append( ('0x'+pci_dev_info['domain'], \
'0x'+pci_dev_info['bus'], \
'0x'+pci_dev_info['slot'], \
'0x'+pci_dev_info['func'], \
+ '0x'+pci_dev_info['vslot'], \
pci_dev_info['opts']))
except IndexError:
err('Error in PCI slot syntax "%s"'%(pci_dev_str))