mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
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:
parent
a59bcd31c9
commit
b2c1394af1
3 changed files with 12 additions and 32 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue