Revision 574b711a
b/include/char/char.h | ||
---|---|---|
68 | 68 |
void (*chr_close)(struct CharDriverState *chr); |
69 | 69 |
void (*chr_accept_input)(struct CharDriverState *chr); |
70 | 70 |
void (*chr_set_echo)(struct CharDriverState *chr, bool echo); |
71 |
void (*chr_guest_open)(struct CharDriverState *chr); |
|
72 |
void (*chr_guest_close)(struct CharDriverState *chr); |
|
71 |
void (*chr_set_fe_open)(struct CharDriverState *chr, int fe_open); |
|
73 | 72 |
void *opaque; |
74 | 73 |
int idle_tag; |
75 | 74 |
char *label; |
b/qemu-char.c | ||
---|---|---|
514 | 514 |
chr->chr_update_read_handler = mux_chr_update_read_handler; |
515 | 515 |
chr->chr_accept_input = mux_chr_accept_input; |
516 | 516 |
/* Frontend guest-open / -close notification is not support with muxes */ |
517 |
chr->chr_guest_open = NULL; |
|
518 |
chr->chr_guest_close = NULL; |
|
517 |
chr->chr_set_fe_open = NULL; |
|
519 | 518 |
|
520 | 519 |
/* Muxes are always open on creation */ |
521 | 520 |
qemu_chr_be_generic_open(chr); |
... | ... | |
3425 | 3424 |
return; |
3426 | 3425 |
} |
3427 | 3426 |
chr->fe_open = fe_open; |
3428 |
if (fe_open && chr->chr_guest_open) { |
|
3429 |
chr->chr_guest_open(chr); |
|
3430 |
} |
|
3431 |
if (!fe_open && chr->chr_guest_close) { |
|
3432 |
chr->chr_guest_close(chr); |
|
3427 |
if (chr->chr_set_fe_open) { |
|
3428 |
chr->chr_set_fe_open(chr, fe_open); |
|
3433 | 3429 |
} |
3434 | 3430 |
} |
3435 | 3431 |
|
b/spice-qemu-char.c | ||
---|---|---|
176 | 176 |
g_free(s); |
177 | 177 |
} |
178 | 178 |
|
179 |
static void spice_chr_guest_open(struct CharDriverState *chr)
|
|
179 |
static void spice_chr_set_fe_open(struct CharDriverState *chr, int fe_open)
|
|
180 | 180 |
{ |
181 | 181 |
SpiceCharDriver *s = chr->opaque; |
182 |
vmc_register_interface(s); |
|
183 |
} |
|
184 |
|
|
185 |
static void spice_chr_guest_close(struct CharDriverState *chr) |
|
186 |
{ |
|
187 |
SpiceCharDriver *s = chr->opaque; |
|
188 |
vmc_unregister_interface(s); |
|
182 |
if (fe_open) { |
|
183 |
vmc_register_interface(s); |
|
184 |
} else { |
|
185 |
vmc_unregister_interface(s); |
|
186 |
} |
|
189 | 187 |
} |
190 | 188 |
|
191 | 189 |
static void print_allowed_subtypes(void) |
... | ... | |
218 | 216 |
chr->opaque = s; |
219 | 217 |
chr->chr_write = spice_chr_write; |
220 | 218 |
chr->chr_close = spice_chr_close; |
221 |
chr->chr_guest_open = spice_chr_guest_open; |
|
222 |
chr->chr_guest_close = spice_chr_guest_close; |
|
219 |
chr->chr_set_fe_open = spice_chr_set_fe_open; |
|
223 | 220 |
|
224 | 221 |
QLIST_INSERT_HEAD(&spice_chars, s, next); |
225 | 222 |
|
Also available in: Unified diff