WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] Adds a new device interface to xend/xm similar to the on

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Adds a new device interface to xend/xm similar to the one for ioports
From: Xen patchbot -unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 09 Mar 2006 12:42:06 +0000
Delivery-date: Thu, 09 Mar 2006 12:42:52 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# 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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Adds a new device interface to xend/xm similar to the one for ioports, Xen patchbot -unstable <=