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:
Jan Kiszka 2009-06-15 22:25:30 +02:00 committed by Anthony Liguori
parent 759754f01f
commit 2d22959d61

View file

@ -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] ",
@ -357,10 +357,10 @@ static int mux_proc_byte(CharDriverState *chr, MuxDriver *d, int ch)
chr->focus = 0; chr->focus = 0;
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) {
d->term_got_escape = 1; d->term_got_escape = 1;