mux-term: Localize timestamps
As we can have multiple multiplexed terminals, timestamp control and tracking should better take place per MuxDriver. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
759754f01f
commit
2d22959d61
16
qemu-char.c
16
qemu-char.c
|
@ -219,8 +219,6 @@ static CharDriverState *qemu_chr_open_null(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* MUX driver for serial I/O splitting */
|
/* MUX driver for serial I/O splitting */
|
||||||
static int term_timestamps;
|
|
||||||
static int64_t term_timestamps_start;
|
|
||||||
#define MAX_MUX 4
|
#define MAX_MUX 4
|
||||||
#define MUX_BUFFER_SIZE 32 /* Must be a power of 2. */
|
#define MUX_BUFFER_SIZE 32 /* Must be a power of 2. */
|
||||||
#define MUX_BUFFER_MASK (MUX_BUFFER_SIZE - 1)
|
#define MUX_BUFFER_MASK (MUX_BUFFER_SIZE - 1)
|
||||||
|
@ -239,6 +237,8 @@ typedef struct {
|
||||||
unsigned char buffer[MAX_MUX][MUX_BUFFER_SIZE];
|
unsigned char buffer[MAX_MUX][MUX_BUFFER_SIZE];
|
||||||
int prod[MAX_MUX];
|
int prod[MAX_MUX];
|
||||||
int cons[MAX_MUX];
|
int cons[MAX_MUX];
|
||||||
|
int timestamps;
|
||||||
|
int64_t timestamps_start;
|
||||||
} MuxDriver;
|
} MuxDriver;
|
||||||
|
|
||||||
|
|
||||||
|
@ -246,7 +246,7 @@ static int mux_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
|
||||||
{
|
{
|
||||||
MuxDriver *d = chr->opaque;
|
MuxDriver *d = chr->opaque;
|
||||||
int ret;
|
int ret;
|
||||||
if (!term_timestamps) {
|
if (!d->timestamps) {
|
||||||
ret = d->drv->chr_write(d->drv, buf, len);
|
ret = d->drv->chr_write(d->drv, buf, len);
|
||||||
} else {
|
} else {
|
||||||
int i;
|
int i;
|
||||||
|
@ -260,9 +260,9 @@ static int mux_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
|
||||||
int secs;
|
int secs;
|
||||||
|
|
||||||
ti = qemu_get_clock(rt_clock);
|
ti = qemu_get_clock(rt_clock);
|
||||||
if (term_timestamps_start == -1)
|
if (d->timestamps_start == -1)
|
||||||
term_timestamps_start = ti;
|
d->timestamps_start = ti;
|
||||||
ti -= term_timestamps_start;
|
ti -= d->timestamps_start;
|
||||||
secs = ti / 1000;
|
secs = ti / 1000;
|
||||||
snprintf(buf1, sizeof(buf1),
|
snprintf(buf1, sizeof(buf1),
|
||||||
"[%02d:%02d:%02d.%03d] ",
|
"[%02d:%02d:%02d.%03d] ",
|
||||||
|
@ -358,8 +358,8 @@ static int mux_proc_byte(CharDriverState *chr, MuxDriver *d, int ch)
|
||||||
mux_chr_send_event(d, chr->focus, CHR_EVENT_MUX_IN);
|
mux_chr_send_event(d, chr->focus, CHR_EVENT_MUX_IN);
|
||||||
break;
|
break;
|
||||||
case 't':
|
case 't':
|
||||||
term_timestamps = !term_timestamps;
|
d->timestamps = !d->timestamps;
|
||||||
term_timestamps_start = -1;
|
d->timestamps_start = -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if (ch == term_escape_char) {
|
} else if (ch == term_escape_char) {
|
||||||
|
|
Loading…
Reference in a new issue