diff -r fab6deef7e87 -r 5be0b38a85b2 tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Fri Mar 3 14:05:25 2006 +++ b/tools/python/xen/xend/XendDomainInfo.py Wed Mar 8 22:25:17 2006 @@ -1543,10 +1543,11 @@ controllerClasses[device_class] = cls -from xen.xend.server import blkif, netif, tpmif, pciif, iopif, usbif +from xen.xend.server import blkif, netif, tpmif, pciif, iopif, irqif, usbif addControllerClass('vbd', blkif.BlkifController) addControllerClass('vif', netif.NetifController) addControllerClass('vtpm', tpmif.TPMifController) addControllerClass('pci', pciif.PciController) addControllerClass('ioports', iopif.IOPortsController) +addControllerClass('irq', irqif.IRQController) addControllerClass('usb', usbif.UsbifController) diff -r fab6deef7e87 -r 5be0b38a85b2 tools/python/xen/xend/server/iopif.py --- a/tools/python/xen/xend/server/iopif.py Fri Mar 3 14:05:25 2006 +++ b/tools/python/xen/xend/server/iopif.py Wed Mar 8 22:25:17 2006 @@ -83,4 +83,4 @@ 'ioports: Failed to configure legacy i/o range: %s - %s' % (io_from, io_to)) - return (dev, {}, {}) + return (None, {}, {}) diff -r fab6deef7e87 -r 5be0b38a85b2 tools/python/xen/xm/create.py --- a/tools/python/xen/xm/create.py Fri Mar 3 14:05:25 2006 +++ b/tools/python/xen/xm/create.py Wed Mar 8 22:25:17 2006 @@ -252,14 +252,20 @@ gopts.var('pci', val='BUS:DEV.FUNC', fn=append_value, default=[], use="""Add a PCI device to a domain, using given params (in hex). - For example '-pci c0:02.1a'. + For example 'pci=c0:02.1a'. The option may be repeated to add more than one pci device.""") gopts.var('ioports', val='FROM[-TO]', fn=append_value, default=[], use="""Add a legacy I/O range to a domain, using given params (in hex). - For example '-ioports 02f8-02ff'. + For example 'ioports=02f8-02ff'. The option may be repeated to add more than one i/o range.""") + +gopts.var('irq', val='IRQ', + fn=append_value, default=[], + use="""Add an IRQ (interrupt line) to a domain. + For example 'irq=7'. + This option may be repeated to add more than one IRQ.""") gopts.var('usb', val='PATH', fn=append_value, default=[], @@ -487,6 +493,13 @@ for (io_from, io_to) in vals.ioports: config_ioports = ['ioports', ['from', io_from], ['to', io_to]] config_devs.append(['device', config_ioports]) + +def configure_irq(config_devs, vals): + """Create the config for irqs. + """ + for irq in vals.irq: + config_irq = ['irq', ['irq', irq]] + config_devs.append(['device', config_irq]) def configure_usb(config_devs, vals): for path in vals.usb: @@ -615,6 +628,7 @@ configure_disks(config_devs, vals) configure_pci(config_devs, vals) configure_ioports(config_devs, vals) + configure_irq(config_devs, vals) configure_vifs(config_devs, vals) configure_usb(config_devs, vals) configure_vtpm(config_devs, vals) diff -r fab6deef7e87 -r 5be0b38a85b2 tools/python/xen/xend/server/irqif.py --- /dev/null Fri Mar 3 14:05:25 2006 +++ b/tools/python/xen/xend/server/irqif.py Wed Mar 8 22:25:17 2006 @@ -0,0 +1,73 @@ +#============================================================================ +# 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. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +#============================================================================ +# Copyright (C) 2004, 2005 Mike Wray +# Copyright (C) 2005 XenSource Ltd +# Copyright (C) 2005 Jody Belka +#============================================================================ +# This code based on tools/python/xen/xend/server/iopif.py and modified +# to handle interrupts +#============================================================================ + + +import types + +import xen.lowlevel.xc; + +from xen.xend import sxp +from xen.xend.XendError import VmError + +from xen.xend.server.DevController import DevController + + +xc = xen.lowlevel.xc.xc() + + +class IRQController(DevController): + + def __init__(self, vm): + DevController.__init__(self, vm) + + + def getDeviceDetails(self, config): + """@see DevController.getDeviceDetails""" + + def get_param(field): + try: + val = sxp.child_value(config, field) + + if not val: + raise VmError('irq: Missing %s config setting' % field) + + if isinstance(val, types.StringType): + return int(val,10) + radix = 10 + else: + return val + except: + raise VmError('irq: Invalid config setting %s: %s' % + (field, val)) + + pirq = get_param('irq') + + rc = xc.domain_irq_permission(dom = self.getDomid(), + pirq = pirq, + allow_access = True) + + if rc < 0: + #todo non-fatal + raise VmError( + 'irq: Failed to configure irq: %d' % (pirq)) + + return (None, {}, {})