mirror of https://gitee.com/openkylin/qemu.git
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
|
@ -66,26 +66,15 @@ static ssize_t flush_buf(VirtIOSerialPort *port, const uint8_t *buf, size_t len)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Callback function that's called when the guest opens the port */
|
/* Callback function that's called when the guest opens/closes the port */
|
||||||
static void guest_open(VirtIOSerialPort *port)
|
static void set_guest_connected(VirtIOSerialPort *port, int guest_connected)
|
||||||
{
|
{
|
||||||
VirtConsole *vcon = DO_UPCAST(VirtConsole, port, port);
|
VirtConsole *vcon = DO_UPCAST(VirtConsole, port, port);
|
||||||
|
|
||||||
if (!vcon->chr) {
|
if (!vcon->chr) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
qemu_chr_fe_set_open(vcon->chr, 1);
|
qemu_chr_fe_set_open(vcon->chr, guest_connected);
|
||||||
}
|
|
||||||
|
|
||||||
/* 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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Readiness of the guest to accept data on a port */
|
/* 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->is_console = true;
|
||||||
k->init = virtconsole_initfn;
|
k->init = virtconsole_initfn;
|
||||||
k->have_data = flush_buf;
|
k->have_data = flush_buf;
|
||||||
k->guest_open = guest_open;
|
k->set_guest_connected = set_guest_connected;
|
||||||
k->guest_close = guest_close;
|
|
||||||
dc->props = virtconsole_properties;
|
dc->props = virtconsole_properties;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,8 +164,7 @@ static void virtserialport_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
||||||
k->init = virtconsole_initfn;
|
k->init = virtconsole_initfn;
|
||||||
k->have_data = flush_buf;
|
k->have_data = flush_buf;
|
||||||
k->guest_open = guest_open;
|
k->set_guest_connected = set_guest_connected;
|
||||||
k->guest_close = guest_close;
|
|
||||||
dc->props = virtserialport_properties;
|
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:
|
case VIRTIO_CONSOLE_PORT_OPEN:
|
||||||
port->guest_connected = cpkt.value;
|
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 */
|
/* Send the guest opened notification if an app is interested */
|
||||||
vsc->guest_open(port);
|
vsc->set_guest_connected(port, cpkt.value);
|
||||||
}
|
|
||||||
|
|
||||||
if (!cpkt.value && vsc->guest_close) {
|
|
||||||
/* Send the guest closed notification if an app is interested */
|
|
||||||
vsc->guest_close(port);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -484,9 +479,9 @@ static void guest_reset(VirtIOSerial *vser)
|
||||||
vsc = VIRTIO_SERIAL_PORT_GET_CLASS(port);
|
vsc = VIRTIO_SERIAL_PORT_GET_CLASS(port);
|
||||||
if (port->guest_connected) {
|
if (port->guest_connected) {
|
||||||
port->guest_connected = false;
|
port->guest_connected = false;
|
||||||
|
if (vsc->set_guest_connected) {
|
||||||
if (vsc->guest_close)
|
vsc->set_guest_connected(port, false);
|
||||||
vsc->guest_close(port);
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,10 +92,8 @@ typedef struct VirtIOSerialPortClass {
|
||||||
int (*exit)(VirtIOSerialPort *port);
|
int (*exit)(VirtIOSerialPort *port);
|
||||||
|
|
||||||
/* Callbacks for guest events */
|
/* Callbacks for guest events */
|
||||||
/* Guest opened device. */
|
/* Guest opened/closed device. */
|
||||||
void (*guest_open)(VirtIOSerialPort *port);
|
void (*set_guest_connected)(VirtIOSerialPort *port, int guest_connected);
|
||||||
/* Guest closed device. */
|
|
||||||
void (*guest_close)(VirtIOSerialPort *port);
|
|
||||||
|
|
||||||
/* Guest is now ready to accept data (virtqueues set up). */
|
/* Guest is now ready to accept data (virtqueues set up). */
|
||||||
void (*guest_ready)(VirtIOSerialPort *port);
|
void (*guest_ready)(VirtIOSerialPort *port);
|
||||||
|
|
Loading…
Reference in New Issue