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