Blob Blame History Raw
From 28ab0502bb6ab306d5a998ab1e95133ac4c5090d Mon Sep 17 00:00:00 2001
From: "Zeeshan Ali (Khattak)" <zeeshanak@gnome.org>
Date: Fri, 16 Mar 2012 17:19:13 +0200
Subject: [PATCH] Add USB devices to newly created domains

co-author: Christophe Fergeau <cfergeau@redhat.com>

https://bugzilla.gnome.org/show_bug.cgi?id=672268
---
 src/vm-configurator.vala | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/src/vm-configurator.vala b/src/vm-configurator.vala
index a83a2c4..eda29ca 100644
--- a/src/vm-configurator.vala
+++ b/src/vm-configurator.vala
@@ -74,6 +74,23 @@ public static Domain create_domain_config (InstallerMedia install_media, string
         channel.set_source (vmc);
         domain.add_device (channel);
 
+        // USB redirection channel
+        var usb_redir = new DomainRedirdev ();
+        usb_redir.set_bus (DomainRedirdevBus.USB);
+        vmc = new DomainChardevSourceSpiceVmc ();
+        usb_redir.set_source (vmc);
+        domain.add_device (usb_redir);
+
+        // USB controllers
+        var master_controller = create_usb_controller (DomainControllerUsbModel.ICH9_EHCI1);
+        domain.add_device (master_controller);
+        var controller = create_usb_controller (DomainControllerUsbModel.ICH9_UHCI1, master_controller, 0, 0);
+        domain.add_device (controller);
+        controller = create_usb_controller (DomainControllerUsbModel.ICH9_UHCI2, master_controller, 0, 2);
+        domain.add_device (controller);
+        controller = create_usb_controller (DomainControllerUsbModel.ICH9_UHCI3, master_controller, 0, 4);
+        domain.add_device (controller);
+
         set_video_config (domain, install_media);
         set_sound_config (domain, install_media);
         set_tablet_config (domain, install_media);
@@ -292,6 +309,19 @@ private static StoragePermissions get_default_permissions () {
         return null;
     }
 
+    private static DomainControllerUsb create_usb_controller (DomainControllerUsbModel model,
+                                                              DomainControllerUsb?     master = null,
+                                                              uint                     index = 0,
+                                                              uint                     start_port = 0) {
+        var controller = new DomainControllerUsb ();
+        controller.set_model (model);
+        controller.set_index (index);
+        if (master != null)
+            controller.set_master (master, start_port);
+
+        return controller;
+    }
+
     private static CapabilitiesGuest get_best_guest_caps (Capabilities caps, InstallerMedia install_media)
                                                           throws VMConfiguratorError {
         var guests_caps = caps.get_guests ();
-- 
1.7.12.1