/[qemu]/qemu/vl.c
ViewVC logotype

Diff of /qemu/vl.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.139 by bellard, Sat Nov 5 18:55:27 2005 UTC revision 1.140 by bellard, Sun Nov 6 16:13:29 2005 UTC
# Line 154  CharDriverState *parallel_hds[MAX_PARALL Line 154  CharDriverState *parallel_hds[MAX_PARALL
154  int win2k_install_hack = 0;  int win2k_install_hack = 0;
155  #endif  #endif
156  int usb_enabled = 0;  int usb_enabled = 0;
157    USBPort *vm_usb_ports[MAX_VM_USB_PORTS];
158    USBDevice *vm_usb_hub;
159    
160  /***********************************************************/  /***********************************************************/
161  /* x86 ISA bus support */  /* x86 ISA bus support */
# Line 1738  static int net_fd_init(NetDriverState *n Line 1740  static int net_fd_init(NetDriverState *n
1740  #endif /* !_WIN32 */  #endif /* !_WIN32 */
1741    
1742  /***********************************************************/  /***********************************************************/
1743    /* USB devices */
1744    
1745    static int usb_device_add(const char *devname)
1746    {
1747        const char *p;
1748        USBDevice *dev;
1749        int i;
1750    
1751        if (!vm_usb_hub)
1752            return -1;
1753        for(i = 0;i < MAX_VM_USB_PORTS; i++) {
1754            if (!vm_usb_ports[i]->dev)
1755                break;
1756        }
1757        if (i == MAX_VM_USB_PORTS)
1758            return -1;
1759    
1760        if (strstart(devname, "host:", &p)) {
1761            dev = usb_host_device_open(p);
1762            if (!dev)
1763                return -1;
1764        } else if (!strcmp(devname, "mouse")) {
1765            dev = usb_mouse_init();
1766            if (!dev)
1767                return -1;
1768        } else {
1769            return -1;
1770        }
1771        usb_attach(vm_usb_ports[i], dev);
1772        return 0;
1773    }
1774    
1775    static int usb_device_del(const char *devname)
1776    {
1777        USBDevice *dev;
1778        int bus_num, addr, i;
1779        const char *p;
1780    
1781        if (!vm_usb_hub)
1782            return -1;
1783    
1784        p = strchr(devname, '.');
1785        if (!p)
1786            return -1;
1787        bus_num = strtoul(devname, NULL, 0);
1788        addr = strtoul(p + 1, NULL, 0);
1789        if (bus_num != 0)
1790            return -1;
1791        for(i = 0;i < MAX_VM_USB_PORTS; i++) {
1792            dev = vm_usb_ports[i]->dev;
1793            if (dev && dev->addr == addr)
1794                break;
1795        }
1796        if (i == MAX_VM_USB_PORTS)
1797            return -1;
1798        usb_attach(vm_usb_ports[i], NULL);
1799        return 0;
1800    }
1801    
1802    void do_usb_add(const char *devname)
1803    {
1804        int ret;
1805        ret = usb_device_add(devname);
1806        if (ret < 0)
1807            term_printf("Could not add USB device '%s'\n", devname);
1808    }
1809    
1810    void do_usb_del(const char *devname)
1811    {
1812        int ret;
1813        ret = usb_device_del(devname);
1814        if (ret < 0)
1815            term_printf("Could not remove USB device '%s'\n", devname);
1816    }
1817    
1818    void usb_info(void)
1819    {
1820        USBDevice *dev;
1821        int i;
1822        const char *speed_str;
1823    
1824        if (!vm_usb_hub) {
1825            term_printf("USB support not enabled\n");
1826            return;
1827        }
1828    
1829        for(i = 0; i < MAX_VM_USB_PORTS; i++) {
1830            dev = vm_usb_ports[i]->dev;
1831            if (dev) {
1832                term_printf("Hub port %d:\n", i);
1833                switch(dev->speed) {
1834                case USB_SPEED_LOW:
1835                    speed_str = "1.5";
1836                    break;
1837                case USB_SPEED_FULL:
1838                    speed_str = "12";
1839                    break;
1840                case USB_SPEED_HIGH:
1841                    speed_str = "480";
1842                    break;
1843                default:
1844                    speed_str = "?";
1845                    break;
1846                }
1847                term_printf("  Device %d.%d, speed %s Mb/s\n",
1848                            0, dev->addr, speed_str);
1849            }
1850        }
1851    }
1852    
1853    /***********************************************************/
1854  /* pid file */  /* pid file */
1855    
1856  static char *pid_filename;  static char *pid_filename;
# Line 2989  enum { Line 3102  enum {
3102      QEMU_OPTION_no_kqemu,      QEMU_OPTION_no_kqemu,
3103      QEMU_OPTION_win2k_hack,      QEMU_OPTION_win2k_hack,
3104      QEMU_OPTION_usb,      QEMU_OPTION_usb,
3105        QEMU_OPTION_usbdevice,
3106  };  };
3107    
3108  typedef struct QEMUOption {  typedef struct QEMUOption {
# Line 3063  const QEMUOption qemu_options[] = { Line 3177  const QEMUOption qemu_options[] = {
3177      { "full-screen", 0, QEMU_OPTION_full_screen },      { "full-screen", 0, QEMU_OPTION_full_screen },
3178      { "pidfile", HAS_ARG, QEMU_OPTION_pidfile },      { "pidfile", HAS_ARG, QEMU_OPTION_pidfile },
3179      { "win2k-hack", 0, QEMU_OPTION_win2k_hack },      { "win2k-hack", 0, QEMU_OPTION_win2k_hack },
3180      { "usb", 0, QEMU_OPTION_usb },      { "usbdevice", HAS_ARG, QEMU_OPTION_usbdevice },
3181            
3182      /* temporary options */      /* temporary options */
3183        { "usb", 0, QEMU_OPTION_usb },
3184      { "pci", 0, QEMU_OPTION_pci },      { "pci", 0, QEMU_OPTION_pci },
3185      { "cirrusvga", 0, QEMU_OPTION_cirrusvga },      { "cirrusvga", 0, QEMU_OPTION_cirrusvga },
3186      { NULL },      { NULL },
# Line 3239  int main(int argc, char **argv) Line 3354  int main(int argc, char **argv)
3354      int parallel_device_index;      int parallel_device_index;
3355      const char *loadvm = NULL;      const char *loadvm = NULL;
3356      QEMUMachine *machine;      QEMUMachine *machine;
3357        char usb_devices[MAX_VM_USB_PORTS][128];
3358        int usb_devices_index;
3359        
3360  #if !defined(CONFIG_SOFTMMU)  #if !defined(CONFIG_SOFTMMU)
3361      /* we never want that malloc() uses mmap() */      /* we never want that malloc() uses mmap() */
3362      mallopt(M_MMAP_THRESHOLD, 4096 * 1024);      mallopt(M_MMAP_THRESHOLD, 4096 * 1024);
# Line 3282  int main(int argc, char **argv) Line 3399  int main(int argc, char **argv)
3399          parallel_devices[i][0] = '\0';          parallel_devices[i][0] = '\0';
3400      parallel_device_index = 0;      parallel_device_index = 0;
3401            
3402        usb_devices_index = 0;
3403        
3404      nb_tun_fds = 0;      nb_tun_fds = 0;
3405      net_if_type = -1;      net_if_type = -1;
3406      nb_nics = 1;      nb_nics = 1;
# Line 3653  int main(int argc, char **argv) Line 3772  int main(int argc, char **argv)
3772              case QEMU_OPTION_usb:              case QEMU_OPTION_usb:
3773                  usb_enabled = 1;                  usb_enabled = 1;
3774                  break;                  break;
3775                case QEMU_OPTION_usbdevice:
3776                    usb_enabled = 1;
3777                    if (usb_devices_index >= MAX_VM_USB_PORTS) {
3778                        fprintf(stderr, "Too many USB devices\n");
3779                        exit(1);
3780                    }
3781                    pstrcpy(usb_devices[usb_devices_index],
3782                            sizeof(usb_devices[usb_devices_index]),
3783                            optarg);
3784                    usb_devices_index++;
3785                    break;
3786              }              }
3787          }          }
3788      }      }
# Line 3817  int main(int argc, char **argv) Line 3947  int main(int argc, char **argv)
3947              }              }
3948          }          }
3949      }      }
3950    
3951        /* init USB devices */
3952        if (usb_enabled) {
3953            vm_usb_hub = usb_hub_init(vm_usb_ports, MAX_VM_USB_PORTS);
3954            for(i = 0; i < usb_devices_index; i++) {
3955                if (usb_device_add(usb_devices[i]) < 0) {
3956                    fprintf(stderr, "Warning: could not add USB device %s\n",
3957                            usb_devices[i]);
3958                }
3959            }
3960        }
3961    
3962      /* init CPU state */      /* init CPU state */
3963      env = cpu_init();      env = cpu_init();

Legend:
Removed from v.1.139  
changed lines
  Added in v.1.140

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26