Li Zhang <zhlci...@gmail.com> writes: > On Fri, Jun 15, 2012 at 10:34 PM, Markus Armbruster <arm...@redhat.com> wrote: >> Li Zhang <zhlci...@gmail.com> writes: >> >>> On Fri, Jun 15, 2012 at 8:04 PM, Markus Armbruster <arm...@redhat.com> >>> wrote: >>>> Li Zhang <zhlci...@linux.vnet.ibm.com> writes: >>>> >>>>> For pseries machine, it needs to enable usb to add >>>>> keyboard or usb mouse. -usb option won't be used in >>>>> the future, and machine options is a better way to >>>>> enable usb. >>>>> >>>>> So this patch is to add usb option to machine options >>>>> (-machine type=psereis,usb=on/off)to enable/disable >>>>> usb controller. >>>>> >>>>> In this patch, usb_on is an global option which can >>>>> be checked by machines. >>>>> For example, on pseries, it will check if usb_on is 1, >>>>> if it is 1, it will create one usb ohci controller. >>>>> As the following: >>>>> if (usb_on == 1) { >>>>> pci_create_simple(bus, -1, "pci-ohci"); >>>>> } >>>>> >>>>> In this patch, usb is on by default. So, for -nodefault, >>>>> usb should be set off in the command line as the following: >>>>> -machine type=pseries,usb=off. >>>>> >>>>> Signed-off-by: Li Zhang <zhlci...@linux.vnet.ibm.com> >>>>> >>>>> --- >>>>> hw/spapr.c | 5 +++++ >>>>> sysemu.h | 1 + >>>>> vl.c | 17 +++++++++++++++++ >>>>> 3 files changed, 23 insertions(+) >>>>> >>>>> diff --git a/hw/spapr.c b/hw/spapr.c >>>>> index d0bddbc..1feb739 100644 >>>>> --- a/hw/spapr.c >>>>> +++ b/hw/spapr.c >>>>> @@ -661,6 +661,11 @@ static void ppc_spapr_init(ram_addr_t ram_size, >>>>> spapr_vscsi_create(spapr->vio_bus); >>>>> } >>>>> >>>>> + if (usb_on == 1) { >>>>> + pci_create_simple(QLIST_FIRST(&spapr->phbs)->host_state.bus, >>>>> + -1, "pci-ohci"); >>>>> + } >>>>> + >>>>> if (rma_size < (MIN_RMA_SLOF << 20)) { >>>>> fprintf(stderr, "qemu: pSeries SLOF firmware requires >= " >>>>> "%ldM guest RMA (Real Mode Area memory)\n", >>>>> MIN_RMA_SLOF); >>>>> diff --git a/sysemu.h b/sysemu.h >>>>> index bc2c788..08134ae 100644 >>>>> --- a/sysemu.h >>>>> +++ b/sysemu.h >>>>> @@ -109,6 +109,7 @@ extern int vga_interface_type; >>>>> #define vmsvga_enabled (vga_interface_type == VGA_VMWARE) >>>>> #define qxl_enabled (vga_interface_type == VGA_QXL) >>>>> >>>>> +extern int usb_on; >>>>> extern int graphic_width; >>>>> extern int graphic_height; >>>>> extern int graphic_depth; >>>>> diff --git a/vl.c b/vl.c >>>>> index 204d85b..b200203 100644 >>>>> --- a/vl.c >>>>> +++ b/vl.c >>>>> @@ -202,6 +202,7 @@ int smp_cpus = 1; >>>>> int max_cpus = 0; >>>>> int smp_cores = 1; >>>>> int smp_threads = 1; >>>>> +int usb_on = 0; >>>>> #ifdef CONFIG_VNC >>>>> const char *vnc_display; >>>>> #endif >>>>> @@ -758,6 +759,21 @@ static int bt_parse(const char *opt) >>>>> return 1; >>>>> } >>>>> >>>>> +static int get_usb_opt(QemuOpts *opts) >>>>> +{ >>>>> + const char *usb_opt = NULL; >>>> >>>> Useless initializer. >>> Thanks. I will remove it. >>>> >>>>> + int usb_on = 0; >>>>> + >>>>> + if (NULL == qemu_opt_get(opts, "usb")) >>>>> + qemu_opt_set(opts, "usb", "on"); >>>> >>>> Why are you changing opts? >>> USB is enabled by default when there is no usb option setting. >>> For example, >>> using # qemu-system-ppc64 -machine type=pseries >>> There is no usb option, but usb is set on. >> >> Isn't it off by default for at least some machines now? >> > OK. This default setting is decided by the machine. > In the new version, I put this setting in machine. > It can be set off or on. > For psereis it sets on.
Makes sense. Perhaps we really have three kinds of machines, not just two: 1. Must have USB: main() sets usb_enabled to true. 2. May have USB: usb_enabled = -usb or -usbdevice given 3. Can't have USB: fail if the user tries to enable it. Code sketch: /* init USB devices */ if (!machine->has_usb) { if (usb_enabled) [report error; should point to the offending options] exit(1); } } else { if (machine->has_usb > 0) { usb_enabled = 1; } if (usb_enabled) { if (foreach_device_config(DEV_USB, usb_parse) < 0) exit(1); } } >> Anyway, I don't see why we need to update opts. Who's using the updated >> opts? >> > psereis will use this opts. > usb kbd and mouse will be needed with vga enabled. Do they use the updated QemuOpts *opts? I'd expect them to use usb_on, or whatever flag variable governs USB (now: usb_enabled). [...]