create TextConsole together with the CharDeviceState

A nicer solution would be to get rid of the opaque pointer and
use containment, but it would also be a much bigger patch.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
Paolo Bonzini 2010-12-23 13:42:51 +01:00 committed by Anthony Liguori
parent bb002513a9
commit 491e114a95

View File

@ -1435,35 +1435,13 @@ static QemuOpts *text_console_opts[128];
static void text_console_do_init(CharDriverState *chr, DisplayState *ds, QemuOpts *opts)
{
TextConsole *s;
unsigned width;
unsigned height;
static int color_inited;
width = qemu_opt_get_number(opts, "width", 0);
if (width == 0)
width = qemu_opt_get_number(opts, "cols", 0) * FONT_WIDTH;
s = chr->opaque;
height = qemu_opt_get_number(opts, "height", 0);
if (height == 0)
height = qemu_opt_get_number(opts, "rows", 0) * FONT_HEIGHT;
if (width == 0 || height == 0) {
s = new_console(ds, TEXT_CONSOLE);
width = ds_get_width(s->ds);
height = ds_get_height(s->ds);
} else {
s = new_console(ds, TEXT_CONSOLE_FIXED_SIZE);
}
if (!s) {
free(chr);
return;
}
chr->opaque = s;
chr->chr_write = console_puts;
chr->chr_send_event = console_send_event;
s->chr = chr;
s->out_fifo.buf = s->out_fifo_buf;
s->out_fifo.buf_size = sizeof(s->out_fifo_buf);
s->kbd_timer = qemu_new_timer(rt_clock, kbd_send_chars, s);
@ -1478,8 +1456,10 @@ static void text_console_do_init(CharDriverState *chr, DisplayState *ds, QemuOpt
s->total_height = DEFAULT_BACKSCROLL;
s->x = 0;
s->y = 0;
s->g_width = width;
s->g_height = height;
if (s->console_type == TEXT_CONSOLE) {
s->g_width = ds_get_width(s->ds);
s->g_height = ds_get_height(s->ds);
}
s->hw_invalidate = text_console_invalidate;
s->hw_text_update = text_console_update;
@ -1515,6 +1495,9 @@ static void text_console_do_init(CharDriverState *chr, DisplayState *ds, QemuOpt
CharDriverState *text_console_init(QemuOpts *opts)
{
CharDriverState *chr;
TextConsole *s;
unsigned width;
unsigned height;
chr = qemu_mallocz(sizeof(CharDriverState));
@ -1526,6 +1509,29 @@ CharDriverState *text_console_init(QemuOpts *opts)
text_console_opts[n_text_consoles] = opts;
n_text_consoles++;
width = qemu_opt_get_number(opts, "width", 0);
if (width == 0)
width = qemu_opt_get_number(opts, "cols", 0) * FONT_WIDTH;
height = qemu_opt_get_number(opts, "height", 0);
if (height == 0)
height = qemu_opt_get_number(opts, "rows", 0) * FONT_HEIGHT;
if (width == 0 || height == 0) {
s = new_console(NULL, TEXT_CONSOLE);
} else {
s = new_console(NULL, TEXT_CONSOLE_FIXED_SIZE);
}
if (!s) {
free(chr);
return NULL;
}
s->chr = chr;
s->g_width = width;
s->g_height = height;
chr->opaque = s;
return chr;
}