[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 3/6] virtio-console: Add a virtio-console bus, s
From: |
Gerd Hoffmann |
Subject: |
Re: [Qemu-devel] [PATCH 3/6] virtio-console: Add a virtio-console bus, support for multiple ports |
Date: |
Tue, 29 Sep 2009 20:04:36 +0200 |
User-agent: |
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.1) Gecko/20090814 Fedora/3.0-2.6.b3.fc11 Lightning/1.0pre Thunderbird/3.0b3 |
+typedef struct VirtIOConsole
+{
You are reusing this struct name a few times.
Better don't do that, it is confusing.
+static VirtIOConsole *virtio_console;
Why do you need this?
+static void flush_queue(VirtConPort *port)
+{
+ VirtConPortBuffer *buf, *buf2;
+ uint8_t *outbuf;
+ size_t outlen, outsize;
+
+ /*
+ * If the app isn't interested in buffering packets till it's
+ * opened, just drop the data guest sends us till a connection is
+ * established.
+ */
+ if (!port->host_connected&& !port->flush_buffers)
+ return;
Hmm. Who needs that buffering? Only user seems to be the port driver
(patch 4/6). So move the buffering (and the host_connected state
tracking) from the core to that driver?
+/* Readiness of the guest to accept data on a port */
+static int vcon_can_read(void *opaque)
int vcon_can_read(VirtConPort *port)
+static void vcon_read(void *opaque, const uint8_t *buf, int size)
+static void vcon_event(void *opaque, int event)
Likewise.
+static VirtConBus *virtcon_bus;
Why do you need this?
+static int virtcon_port_qdev_init(DeviceState *qdev, DeviceInfo *base)
+{
+ if (port->chr) {
+ qemu_chr_add_handlers(port->chr, vcon_can_read, vcon_read, vcon_event,
+ port);
Should be handled by the VirtConPort drivers.
+ if (MAX_VIRTIO_CONSOLE_PORTS % 32) {
+ /* We require MAX_VIRTIO_CONSOLE_PORTS be a multiple of 32:
+ * We anyway use up that much space for the bitmap and it
+ * simplifies some calculations
+ */
+ return NULL;
+ }
Huh? Runtime check for a compile-time constant?
+ /* Spawn a new virtio-console bus on which the ports will ride as devices
*/
+ virtcon_bus_new(dev);
s->bus = virtcon_bus_new(dev);
port0 = qdev_create(s->bus, "virtconsole"); /* console @ port0 for
backward compat */
qdev_prop_set_*(port0, ...);
qdev_init(port0);
Or does that happen somewhere else?
+typedef struct VirtConBus VirtConBus;
+typedef struct VirtConPort VirtConPort;
+typedef struct VirtConPortInfo VirtConPortInfo;
+
+typedef struct VirtConDevice {
+ DeviceState qdev;
+ VirtConPortInfo *info;
+} VirtConDevice;
Leftover from old patch version?
+/*
+ * This is the state that's shared between all the ports. Some of the
+ * state is configurable via command-line options. Some of it can be
+ * set by individual devices in their initfn routines. Some of the
+ * state is set by the generic qdev device init routine.
+ */
+struct VirtConPort {
+ DeviceState dev;
+ VirtConPortInfo *info;
+
+ /* State for the chardevice associated with this port */
+ CharDriverState *chr;
That should go to the port driver if needed.
+typedef int (*virtcon_port_qdev_initfn)(VirtConDevice *dev);
+
+struct VirtConPortInfo {
+ DeviceInfo qdev;
+ virtcon_port_qdev_initfn init;
+
+ /* Callbacks for guest events */
+ void (*guest_open)(VirtConPort *port);
+ void (*guest_close)(VirtConPort *port);
+
+ size_t (*have_data)(VirtConPort *port, const uint8_t *buf, size_t len);
Maybe it is a good idea to pass a VirtConPortBuffer here instead of
buf+len, especially when it becomes the port drivers job to do any
buffering if needed.
cheers,
Gerd
- [Qemu-devel] [PATCH 1/6] char: Emit 'OPENED' events on char device open, (continued)
- [Qemu-devel] [PATCH 1/6] char: Emit 'OPENED' events on char device open, Amit Shah, 2009/09/29
- [Qemu-devel] [PATCH 2/6] qdev: add string property., Amit Shah, 2009/09/29
- [Qemu-devel] [PATCH 3/6] virtio-console: Add a virtio-console bus, support for multiple ports, Amit Shah, 2009/09/29
- [Qemu-devel] [PATCH 4/6] virtio-console-port: Add a new device on the virtio-console-bus for generic host-guest communication, Amit Shah, 2009/09/29
- [Qemu-devel] [PATCH 5/6] vnc: add a is_vnc_active() helper, Amit Shah, 2009/09/29
- [Qemu-devel] [PATCH 6/6] vnc: Add a virtio-console-bus device to send / receive guest clipboard, Amit Shah, 2009/09/29
- Re: [Qemu-devel] [PATCH 6/6] vnc: Add a virtio-console-bus device to send / receive guest clipboard, Gerd Hoffmann, 2009/09/29
- Re: [Qemu-devel] [PATCH 6/6] vnc: Add a virtio-console-bus device to send / receive guest clipboard, Amit Shah, 2009/09/30
- Re: [Qemu-devel] [PATCH 4/6] virtio-console-port: Add a new device on the virtio-console-bus for generic host-guest communication, Gerd Hoffmann, 2009/09/29
- Re: [Qemu-devel] [PATCH 4/6] virtio-console-port: Add a new device on the virtio-console-bus for generic host-guest communication, Nathan Baum, 2009/09/30
- Re: [Qemu-devel] [PATCH 3/6] virtio-console: Add a virtio-console bus, support for multiple ports,
Gerd Hoffmann <=
- Re: [Qemu-devel] [PATCH 3/6] virtio-console: Add a virtio-console bus, support for multiple ports, Amit Shah, 2009/09/30
- Re: [Qemu-devel] [PATCH 3/6] virtio-console: Add a virtio-console bus, support for multiple ports, Gerd Hoffmann, 2009/09/30
- Re: [Qemu-devel] [PATCH 3/6] virtio-console: Add a virtio-console bus, support for multiple ports, Amit Shah, 2009/09/30
- Re: [Qemu-devel] [PATCH 3/6] virtio-console: Add a virtio-console bus, support for multiple ports, Gerd Hoffmann, 2009/09/30
Re: [Qemu-devel] [PATCH 1/6] char: Emit 'OPENED' events on char device open, Anthony Liguori, 2009/09/30
Re: [Qemu-devel] virtio-console-bus, multiport, virtio-console-port, Amit Shah, 2009/09/29