]> Git Repo - qemu.git/blobdiff - hw/ssd0303.c
Save/restore for stellaris boards.
[qemu.git] / hw / ssd0303.c
index 383a6232b53b3e42f6e23a8fafdc93772e575fa4..7f03237683aeaf9ad4e9e3a44e85916f901fe607 100644 (file)
@@ -45,6 +45,7 @@ enum ssd0303_cmd {
 typedef struct {
     i2c_slave i2c;
     DisplayState *ds;
+    QEMUConsole *console;
     int row;
     int col;
     int start_line;
@@ -260,6 +261,49 @@ static void ssd0303_invalidate_display(void * opaque)
     s->redraw = 1;
 }
 
+static void ssd0303_save(QEMUFile *f, void *opaque)
+{
+    ssd0303_state *s = (ssd0303_state *)opaque;
+
+    qemu_put_be32(f, s->row);
+    qemu_put_be32(f, s->col);
+    qemu_put_be32(f, s->start_line);
+    qemu_put_be32(f, s->mirror);
+    qemu_put_be32(f, s->flash);
+    qemu_put_be32(f, s->enabled);
+    qemu_put_be32(f, s->inverse);
+    qemu_put_be32(f, s->redraw);
+    qemu_put_be32(f, s->mode);
+    qemu_put_be32(f, s->cmd_state);
+    qemu_put_buffer(f, s->framebuffer, sizeof(s->framebuffer));
+
+    i2c_slave_save(f, &s->i2c);
+}
+
+static int ssd0303_load(QEMUFile *f, void *opaque, int version_id)
+{
+    ssd0303_state *s = (ssd0303_state *)opaque;
+
+    if (version_id != 1)
+        return -EINVAL;
+
+    s->row = qemu_get_be32(f);
+    s->col = qemu_get_be32(f);
+    s->start_line = qemu_get_be32(f);
+    s->mirror = qemu_get_be32(f);
+    s->flash = qemu_get_be32(f);
+    s->enabled = qemu_get_be32(f);
+    s->inverse = qemu_get_be32(f);
+    s->redraw = qemu_get_be32(f);
+    s->mode = qemu_get_be32(f);
+    s->cmd_state = qemu_get_be32(f);
+    qemu_get_buffer(f, s->framebuffer, sizeof(s->framebuffer));
+
+    i2c_slave_load(f, &s->i2c);
+
+    return 0;
+}
+
 void ssd0303_init(DisplayState *ds, i2c_bus *bus, int address)
 {
     ssd0303_state *s;
@@ -269,7 +313,9 @@ void ssd0303_init(DisplayState *ds, i2c_bus *bus, int address)
     s->i2c.event = ssd0303_event;
     s->i2c.recv = ssd0303_recv;
     s->i2c.send = ssd0303_send;
-    graphic_console_init(ds, ssd0303_update_display, ssd0303_invalidate_display,
-                         NULL, s);
-    dpy_resize(s->ds, 96 * MAGNIFY, 16 * MAGNIFY);
+    s->console = graphic_console_init(ds, ssd0303_update_display,
+                                      ssd0303_invalidate_display,
+                                      NULL, NULL, s);
+    qemu_console_resize(s->console, 96 * MAGNIFY, 16 * MAGNIFY);
+    register_savevm("ssd0303_oled", -1, 1, ssd0303_save, ssd0303_load, s);
 }
This page took 0.025411 seconds and 4 git commands to generate.