virtio-serial: Consolidate guest_open/guest_close into set_guest_connected

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Message-id: 1364292483-16564-10-git-send-email-hdegoede@redhat.com
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
Hans de Goede 2013-03-26 11:08:01 +01:00 committed by Anthony Liguori
parent a59bcd31c9
commit b2c1394af1
3 changed files with 12 additions and 32 deletions

View file

@ -66,26 +66,15 @@ static ssize_t flush_buf(VirtIOSerialPort *port, const uint8_t *buf, size_t len)
return ret;
}
/* Callback function that's called when the guest opens the port */
static void guest_open(VirtIOSerialPort *port)
/* Callback function that's called when the guest opens/closes the port */
static void set_guest_connected(VirtIOSerialPort *port, int guest_connected)
{
VirtConsole *vcon = DO_UPCAST(VirtConsole, port, port);
if (!vcon->chr) {
return;
}
qemu_chr_fe_set_open(vcon->chr, 1);
}
/* Callback function that's called when the guest closes the port */
static void guest_close(VirtIOSerialPort *port)
{
VirtConsole *vcon = DO_UPCAST(VirtConsole, port, port);
if (!vcon->chr) {
return;
}
qemu_chr_fe_set_open(vcon->chr, 0);
qemu_chr_fe_set_open(vcon->chr, guest_connected);
}
/* Readiness of the guest to accept data on a port */
@ -152,8 +141,7 @@ static void virtconsole_class_init(ObjectClass *klass, void *data)
k->is_console = true;
k->init = virtconsole_initfn;
k->have_data = flush_buf;
k->guest_open = guest_open;
k->guest_close = guest_close;
k->set_guest_connected = set_guest_connected;
dc->props = virtconsole_properties;
}
@ -176,8 +164,7 @@ static void virtserialport_class_init(ObjectClass *klass, void *data)
k->init = virtconsole_initfn;
k->have_data = flush_buf;
k->guest_open = guest_open;
k->guest_close = guest_close;
k->set_guest_connected = set_guest_connected;
dc->props = virtserialport_properties;
}

View file

@ -372,14 +372,9 @@ static void handle_control_message(VirtIOSerial *vser, void *buf, size_t len)
case VIRTIO_CONSOLE_PORT_OPEN:
port->guest_connected = cpkt.value;
if (cpkt.value && vsc->guest_open) {
if (vsc->set_guest_connected) {
/* Send the guest opened notification if an app is interested */
vsc->guest_open(port);
}
if (!cpkt.value && vsc->guest_close) {
/* Send the guest closed notification if an app is interested */
vsc->guest_close(port);
vsc->set_guest_connected(port, cpkt.value);
}
break;
}
@ -484,9 +479,9 @@ static void guest_reset(VirtIOSerial *vser)
vsc = VIRTIO_SERIAL_PORT_GET_CLASS(port);
if (port->guest_connected) {
port->guest_connected = false;
if (vsc->guest_close)
vsc->guest_close(port);
if (vsc->set_guest_connected) {
vsc->set_guest_connected(port, false);
}
}
}
}

View file

@ -92,10 +92,8 @@ typedef struct VirtIOSerialPortClass {
int (*exit)(VirtIOSerialPort *port);
/* Callbacks for guest events */
/* Guest opened device. */
void (*guest_open)(VirtIOSerialPort *port);
/* Guest closed device. */
void (*guest_close)(VirtIOSerialPort *port);
/* Guest opened/closed device. */
void (*set_guest_connected)(VirtIOSerialPort *port, int guest_connected);
/* Guest is now ready to accept data (virtqueues set up). */
void (*guest_ready)(VirtIOSerialPort *port);