[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Adds a new device interface to xend/xm similar to the one for ioports
# HG changeset patch # User kaf24@xxxxxxxxxxxxxxxxxxxx # Node ID 5ea87acc07dc748ad7aaa60e32bfd2f3a1fccfea # Parent 37f3f5ad9110ac29273087150b8c8aa548a55e7e Adds a new device interface to xend/xm similar to the one for ioports where an interrupt (irq) can be specified in the configuration file and permission to bind to that interrupt will be given to a driver domain. This functionality could be used when trying to give a legacy device to a driver domain. For example, by specifying the i/o ports and the interrupt of your serial controller, you can use this patch to put a serial port in a driver domain. This was discussed briefly on xen-users in regards to using an external modem in a domU: http://article.gmane.org/gmane.comp.emulators.xen.devel/20573 http://article.gmane.org/gmane.comp.emulators.xen.user/8754 Also adds the ability to specify irqs on the xm command-line when creating a domain (the following examples show a serial port being given to a domU): xm create serial-dd irq=4 ioports=03f8-03ff or in a flat config-file: irq = [4] ioports = ['03f8-03ff'] or in an SXP config file: (device (irq (irq 4))) (device (ioports (from '0x03f8')(to '0x03ff'))) The ioports functionality is already in xen, but this patch also fixes a bug with it that I assume cropped up due to changes in xend since it was submitted ('dev' doesn't exist in iopif.py, returning 'None' seems to be the solution). Also adds some in-line documentation in tools/python/xen/xm/create.py to be more accurate regarding adding pci devices and i/o ports on the command-line. Signed-off-by: Ryan Wilson <hap9@xxxxxxxxxxxxxx> diff -r 37f3f5ad9110 -r 5ea87acc07dc tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Thu Mar 9 10:17:29 2006 +++ b/tools/python/xen/xend/XendDomainInfo.py Thu Mar 9 10:20:31 2006 @@ -1580,10 +1580,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 37f3f5ad9110 -r 5ea87acc07dc tools/python/xen/xend/server/iopif.py --- a/tools/python/xen/xend/server/iopif.py Thu Mar 9 10:17:29 2006 +++ b/tools/python/xen/xend/server/iopif.py Thu Mar 9 10:20:31 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 37f3f5ad9110 -r 5ea87acc07dc tools/python/xen/xm/create.py --- a/tools/python/xen/xm/create.py Thu Mar 9 10:17:29 2006 +++ b/tools/python/xen/xm/create.py Thu Mar 9 10:20:31 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 37f3f5ad9110 -r 5ea87acc07dc tools/python/xen/xend/server/irqif.py --- /dev/null Thu Mar 9 10:17:29 2006 +++ b/tools/python/xen/xend/server/irqif.py Thu Mar 9 10:20:31 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 <mike.wray@xxxxxx> +# 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, {}, {}) _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |