Commit 9850b05d authored by Marc-André Lureau's avatar Marc-André Lureau Committed by Paolo Bonzini
Browse files

malta: replace chr init by CHR_EVENT_OPENED handler



The CharDriverState.init() callback was introduced in commit
ceecf1d1. It is only called from text_console_do_init(), but it is no
longer set since commit a61ae7f8 (init assignment has been removed by
accident).

It seems correct to use an event callback instead and print the console
text on CHR_EVENT_OPENED. That way we can remove the single user of
CharDriverState init().

Signed-off-by: default avatarMarc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20161022095318.17775-6-marcandre.lureau@redhat.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 4496dc49
Loading
Loading
Loading
Loading
+19 −11
Original line number Diff line number Diff line
@@ -88,6 +88,7 @@ typedef struct {
    CharDriverState *display;
    char display_text[9];
    SerialState *uart;
    bool display_inited;
} MaltaFPGAState;

#define TYPE_MIPS_MALTA "mips-malta"
@@ -530,17 +531,22 @@ static void malta_fpga_reset(void *opaque)
    snprintf(s->display_text, 9, "        ");
}

static void malta_fpga_led_init(CharDriverState *chr)
static void malta_fgpa_display_event(void *opaque, int event)
{
    qemu_chr_fe_printf(chr, "\e[HMalta LEDBAR\r\n");
    qemu_chr_fe_printf(chr, "+--------+\r\n");
    qemu_chr_fe_printf(chr, "+        +\r\n");
    qemu_chr_fe_printf(chr, "+--------+\r\n");
    qemu_chr_fe_printf(chr, "\n");
    qemu_chr_fe_printf(chr, "Malta ASCII\r\n");
    qemu_chr_fe_printf(chr, "+--------+\r\n");
    qemu_chr_fe_printf(chr, "+        +\r\n");
    qemu_chr_fe_printf(chr, "+--------+\r\n");
    MaltaFPGAState *s = opaque;

    if (event == CHR_EVENT_OPENED && !s->display_inited) {
        qemu_chr_fe_printf(s->display, "\e[HMalta LEDBAR\r\n");
        qemu_chr_fe_printf(s->display, "+--------+\r\n");
        qemu_chr_fe_printf(s->display, "+        +\r\n");
        qemu_chr_fe_printf(s->display, "+--------+\r\n");
        qemu_chr_fe_printf(s->display, "\n");
        qemu_chr_fe_printf(s->display, "Malta ASCII\r\n");
        qemu_chr_fe_printf(s->display, "+--------+\r\n");
        qemu_chr_fe_printf(s->display, "+        +\r\n");
        qemu_chr_fe_printf(s->display, "+--------+\r\n");
        s->display_inited = true;
    }
}

static MaltaFPGAState *malta_fpga_init(MemoryRegion *address_space,
@@ -560,7 +566,9 @@ static MaltaFPGAState *malta_fpga_init(MemoryRegion *address_space,
    memory_region_add_subregion(address_space, base, &s->iomem_lo);
    memory_region_add_subregion(address_space, base + 0xa00, &s->iomem_hi);

    s->display = qemu_chr_new("fpga", "vc:320x200", malta_fpga_led_init);
    s->display = qemu_chr_new("fpga", "vc:320x200", NULL);
    qemu_chr_add_handlers(s->display, NULL, NULL,
                          malta_fgpa_display_event, s);

    s->uart = serial_mm_init(address_space, base + 0x900, 3, uart_irq,
                             230400, uart_chr, DEVICE_NATIVE_ENDIAN);