Message ID | 4d9a296e9a64abe6743655a4778ee7f6f2efc719.1296713825.git.amit.shah@redhat.com |
---|---|
State | New |
Headers | show |
On Thu, 2011-02-03 at 11:47 +0530, Amit Shah wrote: > Instead of using a single variable to pass to the virtio_serial_init > function, use a struct so that expanding the number of variables to be > passed on later is easier. > > Signed-off-by: Amit Shah <amit.shah@redhat.com> > --- > hw/virtio-pci.c | 12 ++++++------ > hw/virtio-serial-bus.c | 16 ++++++++-------- > hw/virtio-serial.h | 5 +++++ > hw/virtio.h | 3 ++- > 4 files changed, 21 insertions(+), 15 deletions(-) Acked-by: Alex Williamson <alex.williamson@redhat.com> > diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c > index 3911b09..952b5d2 100644 > --- a/hw/virtio-pci.c > +++ b/hw/virtio-pci.c > @@ -18,6 +18,7 @@ > #include "virtio.h" > #include "virtio-blk.h" > #include "virtio-net.h" > +#include "virtio-serial.h" > #include "pci.h" > #include "qemu-error.h" > #include "msix.h" > @@ -109,8 +110,7 @@ typedef struct { > #ifdef CONFIG_LINUX > V9fsConf fsconf; > #endif > - /* Max. number of ports we can have for a the virtio-serial device */ > - uint32_t max_virtserial_ports; > + virtio_serial_conf serial; > virtio_net_conf net; > bool ioeventfd_disabled; > bool ioeventfd_started; > @@ -770,12 +770,12 @@ static int virtio_serial_init_pci(PCIDevice *pci_dev) > proxy->class_code != PCI_CLASS_OTHERS) /* qemu-kvm */ > proxy->class_code = PCI_CLASS_COMMUNICATION_OTHER; > > - vdev = virtio_serial_init(&pci_dev->qdev, proxy->max_virtserial_ports); > + vdev = virtio_serial_init(&pci_dev->qdev, &proxy->serial); > if (!vdev) { > return -1; > } > vdev->nvectors = proxy->nvectors == DEV_NVECTORS_UNSPECIFIED > - ? proxy->max_virtserial_ports + 1 > + ? proxy->serial.max_virtserial_ports + 1 > : proxy->nvectors; > virtio_init_pci(proxy, vdev, > PCI_VENDOR_ID_REDHAT_QUMRANET, > @@ -902,8 +902,8 @@ static PCIDeviceInfo virtio_info[] = { > DEV_NVECTORS_UNSPECIFIED), > DEFINE_PROP_HEX32("class", VirtIOPCIProxy, class_code, 0), > DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features), > - DEFINE_PROP_UINT32("max_ports", VirtIOPCIProxy, max_virtserial_ports, > - 31), > + DEFINE_PROP_UINT32("max_ports", VirtIOPCIProxy, > + serial.max_virtserial_ports, 31), > DEFINE_PROP_END_OF_LIST(), > }, > .qdev.reset = virtio_pci_reset, > diff --git a/hw/virtio-serial-bus.c b/hw/virtio-serial-bus.c > index 09e22aa..1753785 100644 > --- a/hw/virtio-serial-bus.c > +++ b/hw/virtio-serial-bus.c > @@ -811,19 +811,19 @@ void virtio_serial_port_qdev_register(VirtIOSerialPortInfo *info) > qdev_register(&info->qdev); > } > > -VirtIODevice *virtio_serial_init(DeviceState *dev, uint32_t max_nr_ports) > +VirtIODevice *virtio_serial_init(DeviceState *dev, virtio_serial_conf *conf) > { > VirtIOSerial *vser; > VirtIODevice *vdev; > uint32_t i, max_supported_ports; > > - if (!max_nr_ports) > + if (!conf->max_virtserial_ports) > return NULL; > > /* Each port takes 2 queues, and one pair is for the control queue */ > max_supported_ports = VIRTIO_PCI_QUEUE_MAX / 2 - 1; > > - if (max_nr_ports > max_supported_ports) { > + if (conf->max_virtserial_ports > max_supported_ports) { > error_report("maximum ports supported: %u", max_supported_ports); > return NULL; > } > @@ -839,9 +839,9 @@ VirtIODevice *virtio_serial_init(DeviceState *dev, uint32_t max_nr_ports) > vser->bus->vser = vser; > QTAILQ_INIT(&vser->ports); > > - vser->bus->max_nr_ports = max_nr_ports; > - vser->ivqs = qemu_malloc(max_nr_ports * sizeof(VirtQueue *)); > - vser->ovqs = qemu_malloc(max_nr_ports * sizeof(VirtQueue *)); > + vser->bus->max_nr_ports = conf->max_virtserial_ports; > + vser->ivqs = qemu_malloc(conf->max_virtserial_ports * sizeof(VirtQueue *)); > + vser->ovqs = qemu_malloc(conf->max_virtserial_ports * sizeof(VirtQueue *)); > > /* Add a queue for host to guest transfers for port 0 (backward compat) */ > vser->ivqs[0] = virtio_add_queue(vdev, 128, handle_input); > @@ -866,8 +866,8 @@ VirtIODevice *virtio_serial_init(DeviceState *dev, uint32_t max_nr_ports) > vser->ovqs[i] = virtio_add_queue(vdev, 128, handle_output); > } > > - vser->config.max_nr_ports = max_nr_ports; > - vser->ports_map = qemu_mallocz(((max_nr_ports + 31) / 32) > + vser->config.max_nr_ports = conf->max_virtserial_ports; > + vser->ports_map = qemu_mallocz(((conf->max_virtserial_ports + 31) / 32) > * sizeof(vser->ports_map[0])); > /* > * Reserve location 0 for a console port for backward compat > diff --git a/hw/virtio-serial.h b/hw/virtio-serial.h > index a308196..de624c3 100644 > --- a/hw/virtio-serial.h > +++ b/hw/virtio-serial.h > @@ -45,6 +45,11 @@ struct virtio_console_control { > uint16_t value; /* Extra information for the key */ > }; > > +struct virtio_serial_conf { > + /* Max. number of ports we can have for a the virtio-serial device */ > + uint32_t max_virtserial_ports; > +}; > + > /* Some events for the internal messages (control packets) */ > #define VIRTIO_CONSOLE_DEVICE_READY 0 > #define VIRTIO_CONSOLE_PORT_ADD 1 > diff --git a/hw/virtio.h b/hw/virtio.h > index 31d16e1..d0920a8 100644 > --- a/hw/virtio.h > +++ b/hw/virtio.h > @@ -195,7 +195,8 @@ VirtIODevice *virtio_blk_init(DeviceState *dev, BlockConf *conf); > struct virtio_net_conf; > VirtIODevice *virtio_net_init(DeviceState *dev, NICConf *conf, > struct virtio_net_conf *net); > -VirtIODevice *virtio_serial_init(DeviceState *dev, uint32_t max_nr_ports); > +typedef struct virtio_serial_conf virtio_serial_conf; > +VirtIODevice *virtio_serial_init(DeviceState *dev, virtio_serial_conf *serial); > VirtIODevice *virtio_balloon_init(DeviceState *dev); > #ifdef CONFIG_LINUX > VirtIODevice *virtio_9p_init(DeviceState *dev, V9fsConf *conf);
diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c index 3911b09..952b5d2 100644 --- a/hw/virtio-pci.c +++ b/hw/virtio-pci.c @@ -18,6 +18,7 @@ #include "virtio.h" #include "virtio-blk.h" #include "virtio-net.h" +#include "virtio-serial.h" #include "pci.h" #include "qemu-error.h" #include "msix.h" @@ -109,8 +110,7 @@ typedef struct { #ifdef CONFIG_LINUX V9fsConf fsconf; #endif - /* Max. number of ports we can have for a the virtio-serial device */ - uint32_t max_virtserial_ports; + virtio_serial_conf serial; virtio_net_conf net; bool ioeventfd_disabled; bool ioeventfd_started; @@ -770,12 +770,12 @@ static int virtio_serial_init_pci(PCIDevice *pci_dev) proxy->class_code != PCI_CLASS_OTHERS) /* qemu-kvm */ proxy->class_code = PCI_CLASS_COMMUNICATION_OTHER; - vdev = virtio_serial_init(&pci_dev->qdev, proxy->max_virtserial_ports); + vdev = virtio_serial_init(&pci_dev->qdev, &proxy->serial); if (!vdev) { return -1; } vdev->nvectors = proxy->nvectors == DEV_NVECTORS_UNSPECIFIED - ? proxy->max_virtserial_ports + 1 + ? proxy->serial.max_virtserial_ports + 1 : proxy->nvectors; virtio_init_pci(proxy, vdev, PCI_VENDOR_ID_REDHAT_QUMRANET, @@ -902,8 +902,8 @@ static PCIDeviceInfo virtio_info[] = { DEV_NVECTORS_UNSPECIFIED), DEFINE_PROP_HEX32("class", VirtIOPCIProxy, class_code, 0), DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features), - DEFINE_PROP_UINT32("max_ports", VirtIOPCIProxy, max_virtserial_ports, - 31), + DEFINE_PROP_UINT32("max_ports", VirtIOPCIProxy, + serial.max_virtserial_ports, 31), DEFINE_PROP_END_OF_LIST(), }, .qdev.reset = virtio_pci_reset, diff --git a/hw/virtio-serial-bus.c b/hw/virtio-serial-bus.c index 09e22aa..1753785 100644 --- a/hw/virtio-serial-bus.c +++ b/hw/virtio-serial-bus.c @@ -811,19 +811,19 @@ void virtio_serial_port_qdev_register(VirtIOSerialPortInfo *info) qdev_register(&info->qdev); } -VirtIODevice *virtio_serial_init(DeviceState *dev, uint32_t max_nr_ports) +VirtIODevice *virtio_serial_init(DeviceState *dev, virtio_serial_conf *conf) { VirtIOSerial *vser; VirtIODevice *vdev; uint32_t i, max_supported_ports; - if (!max_nr_ports) + if (!conf->max_virtserial_ports) return NULL; /* Each port takes 2 queues, and one pair is for the control queue */ max_supported_ports = VIRTIO_PCI_QUEUE_MAX / 2 - 1; - if (max_nr_ports > max_supported_ports) { + if (conf->max_virtserial_ports > max_supported_ports) { error_report("maximum ports supported: %u", max_supported_ports); return NULL; } @@ -839,9 +839,9 @@ VirtIODevice *virtio_serial_init(DeviceState *dev, uint32_t max_nr_ports) vser->bus->vser = vser; QTAILQ_INIT(&vser->ports); - vser->bus->max_nr_ports = max_nr_ports; - vser->ivqs = qemu_malloc(max_nr_ports * sizeof(VirtQueue *)); - vser->ovqs = qemu_malloc(max_nr_ports * sizeof(VirtQueue *)); + vser->bus->max_nr_ports = conf->max_virtserial_ports; + vser->ivqs = qemu_malloc(conf->max_virtserial_ports * sizeof(VirtQueue *)); + vser->ovqs = qemu_malloc(conf->max_virtserial_ports * sizeof(VirtQueue *)); /* Add a queue for host to guest transfers for port 0 (backward compat) */ vser->ivqs[0] = virtio_add_queue(vdev, 128, handle_input); @@ -866,8 +866,8 @@ VirtIODevice *virtio_serial_init(DeviceState *dev, uint32_t max_nr_ports) vser->ovqs[i] = virtio_add_queue(vdev, 128, handle_output); } - vser->config.max_nr_ports = max_nr_ports; - vser->ports_map = qemu_mallocz(((max_nr_ports + 31) / 32) + vser->config.max_nr_ports = conf->max_virtserial_ports; + vser->ports_map = qemu_mallocz(((conf->max_virtserial_ports + 31) / 32) * sizeof(vser->ports_map[0])); /* * Reserve location 0 for a console port for backward compat diff --git a/hw/virtio-serial.h b/hw/virtio-serial.h index a308196..de624c3 100644 --- a/hw/virtio-serial.h +++ b/hw/virtio-serial.h @@ -45,6 +45,11 @@ struct virtio_console_control { uint16_t value; /* Extra information for the key */ }; +struct virtio_serial_conf { + /* Max. number of ports we can have for a the virtio-serial device */ + uint32_t max_virtserial_ports; +}; + /* Some events for the internal messages (control packets) */ #define VIRTIO_CONSOLE_DEVICE_READY 0 #define VIRTIO_CONSOLE_PORT_ADD 1 diff --git a/hw/virtio.h b/hw/virtio.h index 31d16e1..d0920a8 100644 --- a/hw/virtio.h +++ b/hw/virtio.h @@ -195,7 +195,8 @@ VirtIODevice *virtio_blk_init(DeviceState *dev, BlockConf *conf); struct virtio_net_conf; VirtIODevice *virtio_net_init(DeviceState *dev, NICConf *conf, struct virtio_net_conf *net); -VirtIODevice *virtio_serial_init(DeviceState *dev, uint32_t max_nr_ports); +typedef struct virtio_serial_conf virtio_serial_conf; +VirtIODevice *virtio_serial_init(DeviceState *dev, virtio_serial_conf *serial); VirtIODevice *virtio_balloon_init(DeviceState *dev); #ifdef CONFIG_LINUX VirtIODevice *virtio_9p_init(DeviceState *dev, V9fsConf *conf);
Instead of using a single variable to pass to the virtio_serial_init function, use a struct so that expanding the number of variables to be passed on later is easier. Signed-off-by: Amit Shah <amit.shah@redhat.com> --- hw/virtio-pci.c | 12 ++++++------ hw/virtio-serial-bus.c | 16 ++++++++-------- hw/virtio-serial.h | 5 +++++ hw/virtio.h | 3 ++- 4 files changed, 21 insertions(+), 15 deletions(-)