18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef CONSOLE_H
28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CONSOLE_H
38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "qemu-char.h"
5025c32ffcd9f682cd761a836fe8798738d1648f2David Turner#include "qdict.h"
6025c32ffcd9f682cd761a836fe8798738d1648f2David Turner#include "notify.h"
78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* keyboard/mouse support */
98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define MOUSE_EVENT_LBUTTON 0x01
118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define MOUSE_EVENT_RBUTTON 0x02
128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define MOUSE_EVENT_MBUTTON 0x04
1317410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turnerextern int multitouch_enabled;
148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
15025c32ffcd9f682cd761a836fe8798738d1648f2David Turner/* identical to the ps/2 keyboard bits */
16025c32ffcd9f682cd761a836fe8798738d1648f2David Turner#define QEMU_SCROLL_LOCK_LED (1 << 0)
17025c32ffcd9f682cd761a836fe8798738d1648f2David Turner#define QEMU_NUM_LOCK_LED    (1 << 1)
18025c32ffcd9f682cd761a836fe8798738d1648f2David Turner#define QEMU_CAPS_LOCK_LED   (1 << 2)
19025c32ffcd9f682cd761a836fe8798738d1648f2David Turner
208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* in ms */
21025c32ffcd9f682cd761a836fe8798738d1648f2David Turner#ifdef CONFIG_ANDROID
228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define GUI_REFRESH_INTERVAL (1000/60)  /* 60 frames/s is better */
238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define GUI_REFRESH_INTERVAL 30
258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2717410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turnertypedef int QEMUDisplayCloseCallback(void *opaque);
2817410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turnervoid qemu_set_display_close_handler(QEMUDisplayCloseCallback *cb, void *opaque);
2917410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turnerint qemu_run_display_close_handler(void);
3017410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner
318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef void QEMUPutKBDEvent(void *opaque, int keycode);
32025c32ffcd9f682cd761a836fe8798738d1648f2David Turnertypedef void QEMUPutLEDEvent(void *opaque, int ledstate);
338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef void QEMUPutMouseEvent(void *opaque, int dx, int dy, int dz, int buttons_state);
348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct QEMUPutMouseEntry {
368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    QEMUPutMouseEvent *qemu_put_mouse_event;
378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    void *qemu_put_mouse_event_opaque;
388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    int qemu_put_mouse_event_absolute;
398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    char *qemu_put_mouse_event_name;
408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
41025c32ffcd9f682cd761a836fe8798738d1648f2David Turner    int index;
42025c32ffcd9f682cd761a836fe8798738d1648f2David Turner
438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* used internally by qemu for handling mice */
44025c32ffcd9f682cd761a836fe8798738d1648f2David Turner    QTAILQ_ENTRY(QEMUPutMouseEntry) node;
458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} QEMUPutMouseEntry;
468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4717410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turnertypedef struct QEMUPutKBDEntry {
4817410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner    QEMUPutKBDEvent *put_kbd_event;
4917410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner    void *opaque;
5017410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner
5117410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner    /* used internally by qemu for handling keyboards */
5217410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner    QTAILQ_ENTRY(QEMUPutKBDEntry) next;
5317410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner} QEMUPutKBDEntry;
5417410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner
55025c32ffcd9f682cd761a836fe8798738d1648f2David Turnertypedef struct QEMUPutLEDEntry {
56025c32ffcd9f682cd761a836fe8798738d1648f2David Turner    QEMUPutLEDEvent *put_led;
57025c32ffcd9f682cd761a836fe8798738d1648f2David Turner    void *opaque;
58025c32ffcd9f682cd761a836fe8798738d1648f2David Turner    QTAILQ_ENTRY(QEMUPutLEDEntry) next;
59025c32ffcd9f682cd761a836fe8798738d1648f2David Turner} QEMUPutLEDEntry;
60025c32ffcd9f682cd761a836fe8798738d1648f2David Turner
618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque);
6217410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turnervoid qemu_remove_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque);
638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source ProjectQEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                                void *opaque, int absolute,
658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                                const char *name);
668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry);
67025c32ffcd9f682cd761a836fe8798738d1648f2David Turnervoid qemu_activate_mouse_event_handler(QEMUPutMouseEntry *entry);
68025c32ffcd9f682cd761a836fe8798738d1648f2David Turner
69025c32ffcd9f682cd761a836fe8798738d1648f2David TurnerQEMUPutLEDEntry *qemu_add_led_event_handler(QEMUPutLEDEvent *func, void *opaque);
70025c32ffcd9f682cd761a836fe8798738d1648f2David Turnervoid qemu_remove_led_event_handler(QEMUPutLEDEntry *entry);
718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid kbd_put_keycode(int keycode);
73025c32ffcd9f682cd761a836fe8798738d1648f2David Turnervoid kbd_put_ledstate(int ledstate);
748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid kbd_mouse_event(int dx, int dy, int dz, int buttons_state);
75025c32ffcd9f682cd761a836fe8798738d1648f2David Turner
76025c32ffcd9f682cd761a836fe8798738d1648f2David Turner/* Does the current mouse generate absolute events */
778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint kbd_mouse_is_absolute(void);
78025c32ffcd9f682cd761a836fe8798738d1648f2David Turnervoid qemu_add_mouse_mode_change_notifier(Notifier *notify);
79025c32ffcd9f682cd761a836fe8798738d1648f2David Turnervoid qemu_remove_mouse_mode_change_notifier(Notifier *notify);
80025c32ffcd9f682cd761a836fe8798738d1648f2David Turner
81025c32ffcd9f682cd761a836fe8798738d1648f2David Turner/* Of all the mice, is there one that generates absolute events */
82025c32ffcd9f682cd761a836fe8798738d1648f2David Turnerint kbd_mouse_has_absolute(void);
838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct MouseTransformInfo {
858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* Touchscreen resolution */
868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    int x;
878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    int y;
888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* Calibration values as used/generated by tslib */
898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    int a[7];
908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
92025c32ffcd9f682cd761a836fe8798738d1648f2David Turnervoid do_info_mice_print(Monitor *mon, const QObject *data);
93025c32ffcd9f682cd761a836fe8798738d1648f2David Turnervoid do_info_mice(Monitor *mon, QObject **ret_data);
94025c32ffcd9f682cd761a836fe8798738d1648f2David Turnervoid do_mouse_set(Monitor *mon, const QDict *qdict);
958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* keysym is a unicode code except for special keys (see QEMU_KEY_xxx
978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   constants) */
988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_KEY_ESC1(c) ((c) | 0xe100)
998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_KEY_BACKSPACE  0x007f
1008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_KEY_UP         QEMU_KEY_ESC1('A')
1018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_KEY_DOWN       QEMU_KEY_ESC1('B')
1028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_KEY_RIGHT      QEMU_KEY_ESC1('C')
1038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_KEY_LEFT       QEMU_KEY_ESC1('D')
1048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_KEY_HOME       QEMU_KEY_ESC1(1)
1058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_KEY_END        QEMU_KEY_ESC1(4)
1068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_KEY_PAGEUP     QEMU_KEY_ESC1(5)
1078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_KEY_PAGEDOWN   QEMU_KEY_ESC1(6)
1088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_KEY_DELETE     QEMU_KEY_ESC1(3)
1098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_KEY_CTRL_UP         0xe400
1118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_KEY_CTRL_DOWN       0xe401
1128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_KEY_CTRL_LEFT       0xe402
1138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_KEY_CTRL_RIGHT      0xe403
1148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_KEY_CTRL_HOME       0xe404
1158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_KEY_CTRL_END        0xe405
1168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_KEY_CTRL_PAGEUP     0xe406
1178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_KEY_CTRL_PAGEDOWN   0xe407
1188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid kbd_put_keysym(int keysym);
1208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* consoles */
1228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define QEMU_BIG_ENDIAN_FLAG    0x01
1245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define QEMU_ALLOCATED_FLAG     0x02
125dd9cb7929e2b98bf9f8017ebbd7e433d38541664David 'Digit' Turner#define QEMU_REALPIXELS_FLAG    0x04
1265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct PixelFormat {
1285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    uint8_t bits_per_pixel;
1295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    uint8_t bytes_per_pixel;
1305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    uint8_t depth; /* color depth in bits */
1315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    uint32_t rmask, gmask, bmask, amask;
1325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    uint8_t rshift, gshift, bshift, ashift;
1335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    uint8_t rmax, gmax, bmax, amax;
1345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    uint8_t rbits, gbits, bbits, abits;
1355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner};
1365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct DisplaySurface {
1385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    uint8_t flags;
1398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    int width;
1408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    int height;
1415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    int linesize;        /* bytes per line */
1425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    uint8_t *data;
1435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct PixelFormat pf;
1455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner};
1465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
147025c32ffcd9f682cd761a836fe8798738d1648f2David Turner/* cursor data format is 32bit RGBA */
148025c32ffcd9f682cd761a836fe8798738d1648f2David Turnertypedef struct QEMUCursor {
149025c32ffcd9f682cd761a836fe8798738d1648f2David Turner    int                 width, height;
150025c32ffcd9f682cd761a836fe8798738d1648f2David Turner    int                 hot_x, hot_y;
151025c32ffcd9f682cd761a836fe8798738d1648f2David Turner    int                 refcount;
152025c32ffcd9f682cd761a836fe8798738d1648f2David Turner    uint32_t            data[];
153025c32ffcd9f682cd761a836fe8798738d1648f2David Turner} QEMUCursor;
154025c32ffcd9f682cd761a836fe8798738d1648f2David Turner
155025c32ffcd9f682cd761a836fe8798738d1648f2David TurnerQEMUCursor *cursor_alloc(int width, int height);
156025c32ffcd9f682cd761a836fe8798738d1648f2David Turnervoid cursor_get(QEMUCursor *c);
157025c32ffcd9f682cd761a836fe8798738d1648f2David Turnervoid cursor_put(QEMUCursor *c);
158025c32ffcd9f682cd761a836fe8798738d1648f2David TurnerQEMUCursor *cursor_builtin_hidden(void);
159025c32ffcd9f682cd761a836fe8798738d1648f2David TurnerQEMUCursor *cursor_builtin_left_ptr(void);
160025c32ffcd9f682cd761a836fe8798738d1648f2David Turnervoid cursor_print_ascii_art(QEMUCursor *c, const char *prefix);
161025c32ffcd9f682cd761a836fe8798738d1648f2David Turnerint cursor_get_mono_bpl(QEMUCursor *c);
162025c32ffcd9f682cd761a836fe8798738d1648f2David Turnervoid cursor_set_mono(QEMUCursor *c,
163025c32ffcd9f682cd761a836fe8798738d1648f2David Turner                     uint32_t foreground, uint32_t background, uint8_t *image,
164025c32ffcd9f682cd761a836fe8798738d1648f2David Turner                     int transparent, uint8_t *mask);
165025c32ffcd9f682cd761a836fe8798738d1648f2David Turnervoid cursor_get_mono_image(QEMUCursor *c, int foreground, uint8_t *mask);
166025c32ffcd9f682cd761a836fe8798738d1648f2David Turnervoid cursor_get_mono_mask(QEMUCursor *c, int transparent, uint8_t *mask);
167025c32ffcd9f682cd761a836fe8798738d1648f2David Turner
1685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct DisplayChangeListener {
1695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    int idle;
1708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    uint64_t gui_timer_interval;
1718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    void (*dpy_update)(struct DisplayState *s, int x, int y, int w, int h);
1735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    void (*dpy_resize)(struct DisplayState *s);
1745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    void (*dpy_setdata)(struct DisplayState *s);
1758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    void (*dpy_refresh)(struct DisplayState *s);
1768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    void (*dpy_copy)(struct DisplayState *s, int src_x, int src_y,
1778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                     int dst_x, int dst_y, int w, int h);
1788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    void (*dpy_fill)(struct DisplayState *s, int x, int y,
1798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                     int w, int h, uint32_t c);
1808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    void (*dpy_text_cursor)(struct DisplayState *s, int x, int y);
18117410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner#ifdef CONFIG_GLES2
18217410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner    void (*dpy_updatecaption)(void);
18317410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner#endif
18417410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner#ifdef CONFIG_SKINNING
18517410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner    void (*dpy_enablezoom)(struct DisplayState *s, int width, int height);
18617410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner    void (*dpy_getresolution)(int *width, int *height);
18717410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner#endif
1885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct DisplayChangeListener *next;
1895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner};
1905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1917a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner#ifdef CONFIG_ANDROID
1927a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner/* The problem with DisplayChangeListener is that the callbacks can't
1937a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner * differentiate between different DisplayChangeListeners. Instead of
1947a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner * modifying the type above, which is going to generate conflicts with
1957a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner * upstream changes, we define our own listener type here.
1967a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner */
1977a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turnertypedef struct DisplayUpdateListener {
1987a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner    void* opaque;
1997a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner    void (*dpy_update)(void* opaque, int x, int y, int w, int h);
2007a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner    struct DisplayUpdateListener *next;
2017a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner} DisplayUpdateListener;
2027a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner#endif
2037a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner
2045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct DisplayAllocator {
2055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    DisplaySurface* (*create_displaysurface)(int width, int height);
2065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    DisplaySurface* (*resize_displaysurface)(DisplaySurface *surface, int width, int height);
2075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    void (*free_displaysurface)(DisplaySurface *surface);
2085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner};
2095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
2105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct DisplayState {
2115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct DisplaySurface *surface;
2125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    void *opaque;
2135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct QEMUTimer *gui_timer;
2145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
2155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct DisplayAllocator* allocator;
2165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct DisplayChangeListener* listeners;
2177a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner#ifdef CONFIG_ANDROID
2187a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner    struct DisplayUpdateListener* update_listeners;
2197a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner#endif
2208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    void (*mouse_set)(int x, int y, int on);
221f52506f4827dfa6da47730c4756a984b05db6ddaDavid Turner    void (*cursor_define)(QEMUCursor *cursor);
2225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
2235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct DisplayState *next;
2248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project};
2258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2263b2846ad9f156e62574a0abc5ec489f8f13f1121David 'Digit' Turnervoid vga_fill_rect (DisplayState *ds, int posx, int posy,
2273b2846ad9f156e62574a0abc5ec489f8f13f1121David 'Digit' Turner    int width, int height, uint32_t color);
2285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid register_displaystate(DisplayState *ds);
2295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' TurnerDisplayState *get_displaystate(void);
2305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' TurnerDisplaySurface* qemu_create_displaysurface_from(int width, int height, int bpp,
2315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                                int linesize, uint8_t *data);
2323b2846ad9f156e62574a0abc5ec489f8f13f1121David 'Digit' Turnervoid qemu_alloc_display(DisplaySurface *surface, int width, int height,
2333b2846ad9f156e62574a0abc5ec489f8f13f1121David 'Digit' Turner                        int linesize, PixelFormat pf, int newflags);
2345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' TurnerPixelFormat qemu_different_endianness_pixelformat(int bpp);
2355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' TurnerPixelFormat qemu_default_pixelformat(int bpp);
2365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
2375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' TurnerDisplayAllocator *register_displayallocator(DisplayState *ds, DisplayAllocator *da);
2385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
2395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline DisplaySurface* qemu_create_displaysurface(DisplayState *ds, int width, int height)
2405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
24194702b0dc4a9729b234c6f0265a9e43c72ef79adDavid 'Digit' Turner    return ds->allocator->create_displaysurface(width, height);
2425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
2435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
2445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline DisplaySurface* qemu_resize_displaysurface(DisplayState *ds, int width, int height)
2455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
2465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    return ds->allocator->resize_displaysurface(ds->surface, width, height);
2475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
2485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
2495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void qemu_free_displaysurface(DisplayState *ds)
2505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
2515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ds->allocator->free_displaysurface(ds->surface);
2525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
2535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
2545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline int is_surface_bgr(DisplaySurface *surface)
2555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
2565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    if (surface->pf.bits_per_pixel == 32 && surface->pf.rshift == 0)
2575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        return 1;
2585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    else
2595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        return 0;
2605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
2615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
2625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline int is_buffer_shared(DisplaySurface *surface)
2635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
264f52506f4827dfa6da47730c4756a984b05db6ddaDavid Turner    return (!(surface->flags & QEMU_ALLOCATED_FLAG) &&
265f52506f4827dfa6da47730c4756a984b05db6ddaDavid Turner            !(surface->flags & QEMU_REALPIXELS_FLAG));
2665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
2675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
2685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void register_displaychangelistener(DisplayState *ds, DisplayChangeListener *dcl)
2695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
2705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    dcl->next = ds->listeners;
2715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    ds->listeners = dcl;
2725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
2735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
2747a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner#ifdef CONFIG_ANDROID
2757a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turnerstatic inline void register_displayupdatelistener(DisplayState *ds, DisplayUpdateListener *dul)
2767a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner{
2777a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner    dul->next = ds->update_listeners;
2787a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner    ds->update_listeners = dul;
2797a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner}
2807a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner
2817a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turnervoid unregister_displayupdatelistener(DisplayState *ds, DisplayUpdateListener *dul);
2827a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner#endif
2837a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner
2848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void dpy_update(DisplayState *s, int x, int y, int w, int h)
2858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
2865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct DisplayChangeListener *dcl = s->listeners;
2875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    while (dcl != NULL) {
2885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        dcl->dpy_update(s, x, y, w, h);
2895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        dcl = dcl->next;
2905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
2917a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner#ifdef CONFIG_ANDROID
2927a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner    DisplayUpdateListener* dul = s->update_listeners;
2937a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner    while (dul != NULL) {
2947a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner        dul->dpy_update(dul->opaque, x, y, w, h);
2957a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner        dul = dul->next;
2967a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner    }
2977a5ee57895822a769f48ab40e590711a2459e2d1David 'Digit' Turner#endif
2985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
2995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
30017410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner#ifdef CONFIG_GLES2
30117410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turnerstatic inline void dpy_updatecaption(DisplayState *s)
30217410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner{
30317410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner    struct DisplayChangeListener *dcl = s->listeners;
30417410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner    while (dcl != NULL) {
30517410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner        if(dcl->dpy_updatecaption != NULL)
30617410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner        {
30717410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner            dcl->dpy_updatecaption();
30817410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner        }
30917410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner        dcl = dcl->next;
31017410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner    }
31117410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner}
31217410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner#endif
31317410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner
3145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void dpy_resize(DisplayState *s)
3155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
3165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct DisplayChangeListener *dcl = s->listeners;
3175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    while (dcl != NULL) {
3185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        dcl->dpy_resize(s);
3195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        dcl = dcl->next;
3205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
3218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void dpy_setdata(DisplayState *s)
3248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct DisplayChangeListener *dcl = s->listeners;
3265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    while (dcl != NULL) {
3275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        if (dcl->dpy_setdata) dcl->dpy_setdata(s);
3285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        dcl = dcl->next;
3295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
3305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
3315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
3325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void dpy_refresh(DisplayState *s)
3335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
3345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct DisplayChangeListener *dcl = s->listeners;
3355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    while (dcl != NULL) {
3365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        if (dcl->dpy_refresh) dcl->dpy_refresh(s);
3375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        dcl = dcl->next;
3385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
3395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
3405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
3415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void dpy_copy(struct DisplayState *s, int src_x, int src_y,
3425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                             int dst_x, int dst_y, int w, int h) {
3435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct DisplayChangeListener *dcl = s->listeners;
3445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    while (dcl != NULL) {
3455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        if (dcl->dpy_copy)
3465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner            dcl->dpy_copy(s, src_x, src_y, dst_x, dst_y, w, h);
3475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        else /* TODO */
3485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner            dcl->dpy_update(s, dst_x, dst_y, w, h);
3495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        dcl = dcl->next;
3505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
3515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
3525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
3535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void dpy_fill(struct DisplayState *s, int x, int y,
3545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                             int w, int h, uint32_t c) {
3555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct DisplayChangeListener *dcl = s->listeners;
3565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    while (dcl != NULL) {
3575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        if (dcl->dpy_fill) dcl->dpy_fill(s, x, y, w, h, c);
3585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        dcl = dcl->next;
3595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
3605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
3615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
3625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void dpy_cursor(struct DisplayState *s, int x, int y) {
3635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct DisplayChangeListener *dcl = s->listeners;
3645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    while (dcl != NULL) {
3655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        if (dcl->dpy_text_cursor) dcl->dpy_text_cursor(s, x, y);
3665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner        dcl = dcl->next;
3675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    }
3688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
3698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
37017410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner#ifdef CONFIG_SKINNING
37117410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turnerstatic inline void dpy_enablezoom(struct DisplayState *s, int width, int height)
37217410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner{
37317410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner    struct DisplayChangeListener *dcl = s->listeners;
37417410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner    while (dcl != NULL) {
37517410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner        if (dcl->dpy_enablezoom) dcl->dpy_enablezoom(s, width, height);
37617410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner        dcl = dcl->next;
37717410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner    }
37817410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner}
37917410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner
38017410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turnerstatic inline void dpy_getresolution(struct DisplayState *s, int *width, int *height)
38117410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner{
38217410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner    struct DisplayChangeListener *dcl = s->listeners;
38317410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner    while (dcl != NULL) {
38417410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner        if (dcl->dpy_getresolution) dcl->dpy_getresolution(width, height);
38517410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner        dcl = dcl->next;
38617410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner    }
38717410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner}
38817410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner#endif
38917410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner
3905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline int ds_get_linesize(DisplayState *ds)
3918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
3925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    return ds->surface->linesize;
3935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
3945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
3955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline uint8_t* ds_get_data(DisplayState *ds)
3965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
3975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    return ds->surface->data;
3985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
3995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
4005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline int ds_get_width(DisplayState *ds)
4015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
4025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    return ds->surface->width;
4035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
4045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
4055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline int ds_get_height(DisplayState *ds)
4065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
4075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    return ds->surface->height;
4085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
4095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
4105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline int ds_get_bits_per_pixel(DisplayState *ds)
4115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
4125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    return ds->surface->pf.bits_per_pixel;
4135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
4145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
4155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline int ds_get_bytes_per_pixel(DisplayState *ds)
4165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{
4175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    return ds->surface->pf.bytes_per_pixel;
4188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef unsigned long console_ch_t;
4218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic inline void console_write_ch(console_ch_t *dest, uint32_t ch)
4228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
423025c32ffcd9f682cd761a836fe8798738d1648f2David Turner    if (!(ch & 0xff))
424025c32ffcd9f682cd761a836fe8798738d1648f2David Turner        ch |= ' ';
42517410ee4539bb5216421bb9f9dc287b1f678b6cdDavid 'Digit' Turner    *dest = ch;
4268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
4278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef void (*vga_hw_update_ptr)(void *);
4298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef void (*vga_hw_invalidate_ptr)(void *);
4308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef void (*vga_hw_screen_dump_ptr)(void *, const char *);
4318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef void (*vga_hw_text_update_ptr)(void *, console_ch_t *);
4328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' TurnerDisplayState *graphic_console_init(vga_hw_update_ptr update,
4345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   vga_hw_invalidate_ptr invalidate,
4355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   vga_hw_screen_dump_ptr screen_dump,
4365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   vga_hw_text_update_ptr text_update,
4375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   void *opaque);
4385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
4398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid vga_hw_update(void);
4408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid vga_hw_invalidate(void);
4418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid vga_hw_screen_dump(const char *filename);
4428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid vga_hw_text_update(console_ch_t *chardata);
4438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint is_graphic_console(void);
4455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint is_fixedsize_console(void);
446f52506f4827dfa6da47730c4756a984b05db6ddaDavid TurnerCharDriverState *text_console_init(QemuOpts *opts);
447f52506f4827dfa6da47730c4756a984b05db6ddaDavid TurnerCharDriverState* text_console_init_compat(const char *label, const char *p);
4485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid text_consoles_set_display(DisplayState *ds);
4498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid console_select(unsigned int index);
4508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid console_color_init(DisplayState *ds);
4515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid qemu_console_resize(DisplayState *ds, int width, int height);
4525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid qemu_console_copy(DisplayState *ds, int src_x, int src_y,
4535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                       int dst_x, int dst_y, int w, int h);
4548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* sdl.c */
4568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid sdl_display_init(DisplayState *ds, int full_screen, int no_frame);
4578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* cocoa.m */
4598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid cocoa_display_init(DisplayState *ds, int full_screen);
4608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* vnc.c */
4628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid vnc_display_init(DisplayState *ds);
4638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid vnc_display_close(DisplayState *ds);
4648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint vnc_display_open(DisplayState *ds, const char *display);
4658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint vnc_display_password(DisplayState *ds, const char *password);
4665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid do_info_vnc(Monitor *mon);
4675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerchar *vnc_display_local_addr(DisplayState *ds);
4688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
4698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* curses.c */
4708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid curses_display_init(DisplayState *ds, int full_screen);
4718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
472f52506f4827dfa6da47730c4756a984b05db6ddaDavid Turner#ifdef CONFIG_ANDROID
47394702b0dc4a9729b234c6f0265a9e43c72ef79adDavid 'Digit' Turnervoid android_display_reset(DisplayState* ds, int width, int height, int bitspp);
474f52506f4827dfa6da47730c4756a984b05db6ddaDavid Turner#endif
475f52506f4827dfa6da47730c4756a984b05db6ddaDavid Turner
4768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
477