117ee9d00SSøren Schmidt /*- 2*718cf2ccSPedro F. Giffuni * SPDX-License-Identifier: BSD-3-Clause 3*718cf2ccSPedro F. Giffuni * 49a14aa01SUlrich Spörlein * Copyright (c) 1995-1998 Søren Schmidt 517ee9d00SSøren Schmidt * All rights reserved. 617ee9d00SSøren Schmidt * 7f1121206SXin LI * This code is derived from software contributed to The DragonFly Project 8f1121206SXin LI * by Sascha Wildner <[email protected]> 9f1121206SXin LI * 1017ee9d00SSøren Schmidt * Redistribution and use in source and binary forms, with or without 1117ee9d00SSøren Schmidt * modification, are permitted provided that the following conditions 1217ee9d00SSøren Schmidt * are met: 1317ee9d00SSøren Schmidt * 1. Redistributions of source code must retain the above copyright 14a8445737SSøren Schmidt * notice, this list of conditions and the following disclaimer, 15a8445737SSøren Schmidt * without modification, immediately at the beginning of the file. 1617ee9d00SSøren Schmidt * 2. Redistributions in binary form must reproduce the above copyright 1717ee9d00SSøren Schmidt * notice, this list of conditions and the following disclaimer in the 1817ee9d00SSøren Schmidt * documentation and/or other materials provided with the distribution. 1917ee9d00SSøren Schmidt * 3. The name of the author may not be used to endorse or promote products 20a8445737SSøren Schmidt * derived from this software without specific prior written permission. 2117ee9d00SSøren Schmidt * 2217ee9d00SSøren Schmidt * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 2317ee9d00SSøren Schmidt * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 2417ee9d00SSøren Schmidt * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2517ee9d00SSøren Schmidt * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2617ee9d00SSøren Schmidt * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2717ee9d00SSøren Schmidt * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2817ee9d00SSøren Schmidt * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2917ee9d00SSøren Schmidt * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3017ee9d00SSøren Schmidt * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 3117ee9d00SSøren Schmidt * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3217ee9d00SSøren Schmidt * 33c3aac50fSPeter Wemm * $FreeBSD$ 3417ee9d00SSøren Schmidt */ 3517ee9d00SSøren Schmidt 362ad872c5SKazutaka YOKOTA #ifndef _DEV_SYSCONS_SYSCONS_H_ 372ad872c5SKazutaka YOKOTA #define _DEV_SYSCONS_SYSCONS_H_ 3877f77631SPaul Traina 39d350ce61SBruce Evans #include <sys/kdb.h> /* XXX */ 40d350ce61SBruce Evans #include <sys/_lock.h> 41d350ce61SBruce Evans #include <sys/_mutex.h> 42988129b8SScott Long 436e8394b8SKazutaka YOKOTA /* default values for configuration options */ 446e8394b8SKazutaka YOKOTA 456e8394b8SKazutaka YOKOTA #ifndef MAXCONS 466e8394b8SKazutaka YOKOTA #define MAXCONS 16 476e8394b8SKazutaka YOKOTA #endif 486e8394b8SKazutaka YOKOTA 496e8394b8SKazutaka YOKOTA #ifdef SC_NO_SYSMOUSE 506e8394b8SKazutaka YOKOTA #undef SC_NO_CUTPASTE 516e8394b8SKazutaka YOKOTA #define SC_NO_CUTPASTE 1 526e8394b8SKazutaka YOKOTA #endif 536e8394b8SKazutaka YOKOTA 546e8394b8SKazutaka YOKOTA #ifdef SC_NO_MODE_CHANGE 556e8394b8SKazutaka YOKOTA #undef SC_PIXEL_MODE 566e8394b8SKazutaka YOKOTA #endif 576e8394b8SKazutaka YOKOTA 5844b37d96SKazutaka YOKOTA /* Always load font data if the pixel (raster text) mode is to be used. */ 5944b37d96SKazutaka YOKOTA #ifdef SC_PIXEL_MODE 6044b37d96SKazutaka YOKOTA #undef SC_NO_FONT_LOADING 6144b37d96SKazutaka YOKOTA #endif 6244b37d96SKazutaka YOKOTA 6344b37d96SKazutaka YOKOTA /* 6444b37d96SKazutaka YOKOTA * If font data is not available, the `arrow'-shaped mouse cursor cannot 6544b37d96SKazutaka YOKOTA * be drawn. Use the alternative drawing method. 6644b37d96SKazutaka YOKOTA */ 6744b37d96SKazutaka YOKOTA #ifdef SC_NO_FONT_LOADING 6844b37d96SKazutaka YOKOTA #undef SC_ALT_MOUSE_IMAGE 6944b37d96SKazutaka YOKOTA #define SC_ALT_MOUSE_IMAGE 1 7044b37d96SKazutaka YOKOTA #endif 7144b37d96SKazutaka YOKOTA 7209132359SKazutaka YOKOTA #ifndef SC_CURSOR_CHAR 7355d26fc0SBruce Evans #define SC_CURSOR_CHAR 7 7409132359SKazutaka YOKOTA #endif 7509132359SKazutaka YOKOTA 76e2f29c6eSKazutaka YOKOTA #ifndef SC_MOUSE_CHAR 7755d26fc0SBruce Evans #define SC_MOUSE_CHAR 8 78e2f29c6eSKazutaka YOKOTA #endif 79e2f29c6eSKazutaka YOKOTA 8009132359SKazutaka YOKOTA #if SC_MOUSE_CHAR <= SC_CURSOR_CHAR && SC_CURSOR_CHAR < (SC_MOUSE_CHAR + 4) 8109132359SKazutaka YOKOTA #undef SC_CURSOR_CHAR 8209132359SKazutaka YOKOTA #define SC_CURSOR_CHAR (SC_MOUSE_CHAR + 4) 8309132359SKazutaka YOKOTA #endif 8409132359SKazutaka YOKOTA 856e8394b8SKazutaka YOKOTA #ifndef SC_DEBUG_LEVEL 866e8394b8SKazutaka YOKOTA #define SC_DEBUG_LEVEL 0 876e8394b8SKazutaka YOKOTA #endif 886e8394b8SKazutaka YOKOTA 896e8394b8SKazutaka YOKOTA #define DPRINTF(l, p) if (SC_DEBUG_LEVEL >= (l)) printf p 906e8394b8SKazutaka YOKOTA 91fc0e49bdSMarius Strobl #ifndef __sparc64__ 926e8394b8SKazutaka YOKOTA #define SC_DRIVER_NAME "sc" 93fc0e49bdSMarius Strobl #else 94fc0e49bdSMarius Strobl /* 95fc0e49bdSMarius Strobl * Use a different driver name on sparc64 so it does not get confused 96fc0e49bdSMarius Strobl * with the system controller devices which are also termed 'sc' in OFW. 97fc0e49bdSMarius Strobl */ 98fc0e49bdSMarius Strobl #define SC_DRIVER_NAME "syscons" 99fc0e49bdSMarius Strobl #endif 100bc093719SEd Schouten #define SC_VTY(dev) (((sc_ttysoftc *)tty_softc(tp))->st_index) 1018c12242cSKazutaka YOKOTA #define SC_DEV(sc, vty) ((sc)->dev[(vty) - (sc)->first_vty]) 102bc093719SEd Schouten #define SC_STAT(tp) (*((scr_stat **)&((sc_ttysoftc *)tty_softc(tp))->st_stat)) 10317ee9d00SSøren Schmidt 10417ee9d00SSøren Schmidt /* printable chars */ 1056e8394b8SKazutaka YOKOTA #ifndef PRINTABLE 10638994061SBruce Evans #define PRINTABLE(ch) ((ch) > 0x1b || ((ch) > 0x0d && (ch) < 0x1b) \ 10738994061SBruce Evans || (ch) < 0x07) 1086e8394b8SKazutaka YOKOTA #endif 10917ee9d00SSøren Schmidt 1108c4344beSSøren Schmidt /* macros for "intelligent" screen update */ 1118c4344beSSøren Schmidt #define mark_for_update(scp, x) {\ 1128c4344beSSøren Schmidt if ((x) < scp->start) scp->start = (x);\ 1138c4344beSSøren Schmidt else if ((x) > scp->end) scp->end = (x);\ 1148c4344beSSøren Schmidt } 1158c4344beSSøren Schmidt #define mark_all(scp) {\ 1168c4344beSSøren Schmidt scp->start = 0;\ 1178a69c85aSPoul-Henning Kamp scp->end = scp->xsize * scp->ysize - 1;\ 1188c4344beSSøren Schmidt } 1198c4344beSSøren Schmidt 1206e8394b8SKazutaka YOKOTA /* vty status flags (scp->status) */ 12109132359SKazutaka YOKOTA #define UNKNOWN_MODE 0x00010 /* unknown video mode */ 12209132359SKazutaka YOKOTA #define SWITCH_WAIT_REL 0x00080 /* waiting for vty release */ 12309132359SKazutaka YOKOTA #define SWITCH_WAIT_ACQ 0x00100 /* waiting for vty ack */ 12409132359SKazutaka YOKOTA #define BUFFER_SAVED 0x00200 /* vty buffer is saved */ 12509132359SKazutaka YOKOTA #define CURSOR_ENABLED 0x00400 /* text cursor is enabled */ 12609132359SKazutaka YOKOTA #define MOUSE_MOVED 0x01000 /* mouse cursor has moved */ 12709132359SKazutaka YOKOTA #define MOUSE_CUTTING 0x02000 /* mouse cursor is cutting text */ 12809132359SKazutaka YOKOTA #define MOUSE_VISIBLE 0x04000 /* mouse cursor is showing */ 12909132359SKazutaka YOKOTA #define GRAPHICS_MODE 0x08000 /* vty is in a graphics mode */ 13009132359SKazutaka YOKOTA #define PIXEL_MODE 0x10000 /* vty is in a raster text mode */ 13109132359SKazutaka YOKOTA #define SAVER_RUNNING 0x20000 /* screen saver is running */ 13209132359SKazutaka YOKOTA #define VR_CURSOR_BLINK 0x40000 /* blinking text cursor */ 13309132359SKazutaka YOKOTA #define VR_CURSOR_ON 0x80000 /* text cursor is on */ 13409132359SKazutaka YOKOTA #define MOUSE_HIDDEN 0x100000 /* mouse cursor is temporarily hidden */ 13517ee9d00SSøren Schmidt 13617ee9d00SSøren Schmidt /* misc defines */ 13717ee9d00SSøren Schmidt #define FALSE 0 13817ee9d00SSøren Schmidt #define TRUE 1 1390301e9c8SDavid E. O'Brien 1400301e9c8SDavid E. O'Brien /* 1410301e9c8SDavid E. O'Brien The following #defines are hard-coded for a maximum text 1420301e9c8SDavid E. O'Brien resolution corresponding to a maximum framebuffer 14350b9fb46SJulio Merino resolution of 1920x1200 with an 8x8 font... 1440301e9c8SDavid E. O'Brien */ 145478b2704SJulio Merino #define COL 240 1460301e9c8SDavid E. O'Brien #define ROW 150 1470301e9c8SDavid E. O'Brien 14817ee9d00SSøren Schmidt #define PCBURST 128 14917ee9d00SSøren Schmidt 1506e8394b8SKazutaka YOKOTA #ifndef BELL_DURATION 151266aa942SPoul-Henning Kamp #define BELL_DURATION ((5 * hz + 99) / 100) 1526e8394b8SKazutaka YOKOTA #define BELL_PITCH 800 1536e8394b8SKazutaka YOKOTA #endif 1546e8394b8SKazutaka YOKOTA 1556e8394b8SKazutaka YOKOTA /* virtual terminal buffer */ 1566e8394b8SKazutaka YOKOTA typedef struct sc_vtb { 1576e8394b8SKazutaka YOKOTA int vtb_flags; 1586e8394b8SKazutaka YOKOTA #define VTB_VALID (1 << 0) 1592317b701SKazutaka YOKOTA #define VTB_ALLOCED (1 << 1) 1606e8394b8SKazutaka YOKOTA int vtb_type; 1616e8394b8SKazutaka YOKOTA #define VTB_INVALID 0 1626e8394b8SKazutaka YOKOTA #define VTB_MEMORY 1 1636e8394b8SKazutaka YOKOTA #define VTB_FRAMEBUFFER 2 1646e8394b8SKazutaka YOKOTA #define VTB_RINGBUFFER 3 1656e8394b8SKazutaka YOKOTA int vtb_cols; 1666e8394b8SKazutaka YOKOTA int vtb_rows; 1676e8394b8SKazutaka YOKOTA int vtb_size; 1686e8394b8SKazutaka YOKOTA vm_offset_t vtb_buffer; 1696e8394b8SKazutaka YOKOTA int vtb_tail; /* valid for VTB_RINGBUFFER only */ 1706e8394b8SKazutaka YOKOTA } sc_vtb_t; 1716e8394b8SKazutaka YOKOTA 1729bc7c363SBruce Evans /* text and some mouse cursor attributes */ 1734866e276SKazutaka YOKOTA struct cursor_attr { 1749bc7c363SBruce Evans u_char flags; 1759bc7c363SBruce Evans u_char base; 1769bc7c363SBruce Evans u_char height; 1779bc7c363SBruce Evans u_char bg[3]; 1789bc7c363SBruce Evans u_char mouse_ba; 1799bc7c363SBruce Evans u_char mouse_ia; 1804866e276SKazutaka YOKOTA }; 1814866e276SKazutaka YOKOTA 1826e8394b8SKazutaka YOKOTA /* softc */ 1836e8394b8SKazutaka YOKOTA 1846e8394b8SKazutaka YOKOTA struct keyboard; 1856e8394b8SKazutaka YOKOTA struct video_adapter; 1866e8394b8SKazutaka YOKOTA struct scr_stat; 1876e8394b8SKazutaka YOKOTA struct tty; 1886e8394b8SKazutaka YOKOTA 189e866ca56SBruce Evans struct sc_cnstate { 190a95582c6SBruce Evans u_char kbd_locked; 19190adad10SBruce Evans u_char kdb_locked; 19290adad10SBruce Evans u_char mtx_locked; 193e866ca56SBruce Evans u_char kbd_opened; 194e866ca56SBruce Evans u_char scr_opened; 195e866ca56SBruce Evans }; 196e866ca56SBruce Evans 1976e8394b8SKazutaka YOKOTA typedef struct sc_softc { 1986e8394b8SKazutaka YOKOTA int unit; /* unit # */ 1996e8394b8SKazutaka YOKOTA int config; /* configuration flags */ 200493d6f54SXin LI #define SC_VESAMODE (1 << 7) 2016e8394b8SKazutaka YOKOTA #define SC_AUTODETECT_KBD (1 << 8) 2026e8394b8SKazutaka YOKOTA #define SC_KERNEL_CONSOLE (1 << 9) 2036e8394b8SKazutaka YOKOTA 2046e8394b8SKazutaka YOKOTA int flags; /* status flags */ 2056e8394b8SKazutaka YOKOTA #define SC_VISUAL_BELL (1 << 0) 2066e8394b8SKazutaka YOKOTA #define SC_QUIET_BELL (1 << 1) 2074866e276SKazutaka YOKOTA #if 0 /* not used anymore */ 2086e8394b8SKazutaka YOKOTA #define SC_BLINK_CURSOR (1 << 2) 2096e8394b8SKazutaka YOKOTA #define SC_CHAR_CURSOR (1 << 3) 2104866e276SKazutaka YOKOTA #endif 2116e8394b8SKazutaka YOKOTA #define SC_MOUSE_ENABLED (1 << 4) 2126e8394b8SKazutaka YOKOTA #define SC_SCRN_IDLE (1 << 5) 2136e8394b8SKazutaka YOKOTA #define SC_SCRN_BLANKED (1 << 6) 2146e8394b8SKazutaka YOKOTA #define SC_SAVER_FAILED (1 << 7) 215ce907d42SDima Dorfman #define SC_SCRN_VTYLOCK (1 << 8) 2166e8394b8SKazutaka YOKOTA 2176e8394b8SKazutaka YOKOTA #define SC_INIT_DONE (1 << 16) 2186e8394b8SKazutaka YOKOTA #define SC_SPLASH_SCRN (1 << 17) 2196e8394b8SKazutaka YOKOTA 2206e8394b8SKazutaka YOKOTA int keyboard; /* -1 if unavailable */ 2216e8394b8SKazutaka YOKOTA struct keyboard *kbd; 2226e8394b8SKazutaka YOKOTA 2236e8394b8SKazutaka YOKOTA int adapter; 2246e8394b8SKazutaka YOKOTA struct video_adapter *adp; 2256e8394b8SKazutaka YOKOTA int initial_mode; /* initial video mode */ 2266e8394b8SKazutaka YOKOTA 2276e8394b8SKazutaka YOKOTA int first_vty; 2286e8394b8SKazutaka YOKOTA int vtys; 229bc093719SEd Schouten struct tty **dev; 2306e8394b8SKazutaka YOKOTA struct scr_stat *cur_scp; 2316e8394b8SKazutaka YOKOTA struct scr_stat *new_scp; 2326e8394b8SKazutaka YOKOTA struct scr_stat *old_scp; 2336e8394b8SKazutaka YOKOTA int delayed_next_scr; 2346e8394b8SKazutaka YOKOTA 2356e8394b8SKazutaka YOKOTA char font_loading_in_progress; 2366e8394b8SKazutaka YOKOTA char switch_in_progress; 2376e8394b8SKazutaka YOKOTA char write_in_progress; 2386e8394b8SKazutaka YOKOTA char blink_in_progress; 2391388e8b1SBruce Evans int grab_level; 240e866ca56SBruce Evans /* 2 is just enough for kdb to grab for stepping normal grabbing: */ 241e866ca56SBruce Evans struct sc_cnstate grab_state[2]; 242e866ca56SBruce Evans int kbd_open_level; 243988129b8SScott Long struct mtx video_mtx; 2446e8394b8SKazutaka YOKOTA 2456e8394b8SKazutaka YOKOTA long scrn_time_stamp; 2466e8394b8SKazutaka YOKOTA 2474866e276SKazutaka YOKOTA struct cursor_attr dflt_curs_attr; 2484866e276SKazutaka YOKOTA struct cursor_attr curs_attr; 2496e8394b8SKazutaka YOKOTA 2506e8394b8SKazutaka YOKOTA u_char scr_map[256]; 2516e8394b8SKazutaka YOKOTA u_char scr_rmap[256]; 2526e8394b8SKazutaka YOKOTA 2536e8394b8SKazutaka YOKOTA #ifdef _SC_MD_SOFTC_DECLARED_ 2546e8394b8SKazutaka YOKOTA sc_md_softc_t md; /* machine dependent vars */ 2556e8394b8SKazutaka YOKOTA #endif 2566e8394b8SKazutaka YOKOTA 2576e8394b8SKazutaka YOKOTA #ifndef SC_NO_PALETTE_LOADING 2586e8394b8SKazutaka YOKOTA u_char palette[256 * 3]; 2598d521790SJung-uk Kim #ifdef SC_PIXEL_MODE 2608d521790SJung-uk Kim u_char palette2[256 * 3]; 2618d521790SJung-uk Kim #endif 2626e8394b8SKazutaka YOKOTA #endif 2636e8394b8SKazutaka YOKOTA 2646e8394b8SKazutaka YOKOTA #ifndef SC_NO_FONT_LOADING 2656e8394b8SKazutaka YOKOTA int fonts_loaded; 2662b944ee2SKazutaka YOKOTA #define FONT_8 2 2672b944ee2SKazutaka YOKOTA #define FONT_14 4 2682b944ee2SKazutaka YOKOTA #define FONT_16 8 269b7c96c0dSMarius Strobl #define FONT_22 8 2706e8394b8SKazutaka YOKOTA u_char *font_8; 2716e8394b8SKazutaka YOKOTA u_char *font_14; 2726e8394b8SKazutaka YOKOTA u_char *font_16; 273b7c96c0dSMarius Strobl u_char *font_22; 2746e8394b8SKazutaka YOKOTA #endif 2756e8394b8SKazutaka YOKOTA 27609132359SKazutaka YOKOTA u_char cursor_char; 277e2f29c6eSKazutaka YOKOTA u_char mouse_char; 278e2f29c6eSKazutaka YOKOTA 279a608af78SRobert Watson #ifdef KDB 280a608af78SRobert Watson int sc_altbrk; 281a608af78SRobert Watson #endif 2826b98f115SDavide Italiano struct callout ctimeout; 2836b98f115SDavide Italiano struct callout cblink; 2846e8394b8SKazutaka YOKOTA } sc_softc_t; 2856e8394b8SKazutaka YOKOTA 2866e8394b8SKazutaka YOKOTA /* virtual screen */ 28717ee9d00SSøren Schmidt typedef struct scr_stat { 2886e8394b8SKazutaka YOKOTA int index; /* index of this vty */ 2896e8394b8SKazutaka YOKOTA struct sc_softc *sc; /* pointer to softc */ 2906e8394b8SKazutaka YOKOTA struct sc_rndr_sw *rndr; /* renderer */ 2918b9698b7SJake Burkholder #ifndef __sparc64__ 2926e8394b8SKazutaka YOKOTA sc_vtb_t scr; 2938b9698b7SJake Burkholder #endif 2946e8394b8SKazutaka YOKOTA sc_vtb_t vtb; 2952b944ee2SKazutaka YOKOTA 29617ee9d00SSøren Schmidt int xpos; /* current X position */ 29717ee9d00SSøren Schmidt int ypos; /* current Y position */ 298a221620cSSøren Schmidt int xsize; /* X text size */ 299a221620cSSøren Schmidt int ysize; /* Y text size */ 300a221620cSSøren Schmidt int xpixel; /* X graphics size */ 301a221620cSSøren Schmidt int ypixel; /* Y graphics size */ 302a8445737SSøren Schmidt int xoff; /* X offset in pixel mode */ 303a8445737SSøren Schmidt int yoff; /* Y offset in pixel mode */ 3042b944ee2SKazutaka YOKOTA 3056e8394b8SKazutaka YOKOTA u_char *font; /* current font */ 306da040b22SSøren Schmidt int font_size; /* fontsize in Y direction */ 30773b0c907SJake Burkholder int font_width; /* fontsize in X direction */ 3082b944ee2SKazutaka YOKOTA 309736277a9SSøren Schmidt int start; /* modified area start */ 310736277a9SSøren Schmidt int end; /* modified area end */ 3112b944ee2SKazutaka YOKOTA 3122b944ee2SKazutaka YOKOTA struct sc_term_sw *tsw; 3132b944ee2SKazutaka YOKOTA void *ts; 3142b944ee2SKazutaka YOKOTA 31517ee9d00SSøren Schmidt int status; /* status (bitfield) */ 3162ad872c5SKazutaka YOKOTA int kbd_mode; /* keyboard I/O mode */ 3172b944ee2SKazutaka YOKOTA 3186e8394b8SKazutaka YOKOTA int cursor_pos; /* cursor buffer position */ 3196e8394b8SKazutaka YOKOTA int cursor_oldpos; /* cursor old buffer position */ 3204866e276SKazutaka YOKOTA struct cursor_attr dflt_curs_attr; 3214ea1f4f5SBruce Evans struct cursor_attr base_curs_attr; 3224866e276SKazutaka YOKOTA struct cursor_attr curs_attr; 3232b944ee2SKazutaka YOKOTA 3246e8394b8SKazutaka YOKOTA int mouse_pos; /* mouse buffer position */ 3256e8394b8SKazutaka YOKOTA int mouse_oldpos; /* mouse old buffer position */ 32617ee9d00SSøren Schmidt short mouse_xpos; /* mouse x coordinate */ 32717ee9d00SSøren Schmidt short mouse_ypos; /* mouse y coordinate */ 32809132359SKazutaka YOKOTA short mouse_oldxpos; /* mouse previous x coordinate */ 32909132359SKazutaka YOKOTA short mouse_oldypos; /* mouse previous y coordinate */ 330ad0c0c78SSøren Schmidt short mouse_buttons; /* mouse buttons */ 3316e8394b8SKazutaka YOKOTA int mouse_cut_start; /* mouse cut start pos */ 3326e8394b8SKazutaka YOKOTA int mouse_cut_end; /* mouse cut end pos */ 33353e69c0cSEd Schouten int mouse_level; /* xterm mouse protocol */ 334ad0c0c78SSøren Schmidt struct proc *mouse_proc; /* proc* of controlling proc */ 335ad0c0c78SSøren Schmidt pid_t mouse_pid; /* pid of controlling proc */ 336ad0c0c78SSøren Schmidt int mouse_signal; /* signal # to report with */ 33728bbe30cSBruce Evans const void *mouse_data; /* renderer (pixmap) data */ 3382b944ee2SKazutaka YOKOTA 33917ee9d00SSøren Schmidt u_short bell_duration; 34017ee9d00SSøren Schmidt u_short bell_pitch; 3412b944ee2SKazutaka YOKOTA 34217ee9d00SSøren Schmidt u_char border; /* border color */ 34388a5f0ccSKazutaka YOKOTA int mode; /* mode */ 34417ee9d00SSøren Schmidt pid_t pid; /* pid of controlling proc */ 34517ee9d00SSøren Schmidt struct proc *proc; /* proc* of controlling proc */ 34617ee9d00SSøren Schmidt struct vt_mode smode; /* switch mode */ 3472b944ee2SKazutaka YOKOTA 3486e8394b8SKazutaka YOKOTA sc_vtb_t *history; /* circular history buffer */ 3496e8394b8SKazutaka YOKOTA int history_pos; /* position shown on screen */ 35017ee9d00SSøren Schmidt int history_size; /* size of history buffer */ 3512b944ee2SKazutaka YOKOTA 352a8445737SSøren Schmidt int splash_save_mode; /* saved mode for splash screen */ 353a8445737SSøren Schmidt int splash_save_status; /* saved status for splash screen */ 3546e8394b8SKazutaka YOKOTA #ifdef _SCR_MD_STAT_DECLARED_ 3556e8394b8SKazutaka YOKOTA scr_md_stat_t md; /* machine dependent vars */ 3566e8394b8SKazutaka YOKOTA #endif 35717ee9d00SSøren Schmidt } scr_stat; 35817ee9d00SSøren Schmidt 359bc093719SEd Schouten /* TTY softc. */ 360bc093719SEd Schouten typedef struct sc_ttysoftc { 361bc093719SEd Schouten int st_index; 362bc093719SEd Schouten scr_stat *st_stat; 363bc093719SEd Schouten } sc_ttysoftc; 364bc093719SEd Schouten 3656e8394b8SKazutaka YOKOTA #ifndef SC_NORM_ATTR 3666e8394b8SKazutaka YOKOTA #define SC_NORM_ATTR (FG_LIGHTGREY | BG_BLACK) 3676e8394b8SKazutaka YOKOTA #endif 3686e8394b8SKazutaka YOKOTA #ifndef SC_NORM_REV_ATTR 3696e8394b8SKazutaka YOKOTA #define SC_NORM_REV_ATTR (FG_BLACK | BG_LIGHTGREY) 3706e8394b8SKazutaka YOKOTA #endif 3716e8394b8SKazutaka YOKOTA #ifndef SC_KERNEL_CONS_ATTR 3726e8394b8SKazutaka YOKOTA #define SC_KERNEL_CONS_ATTR (FG_WHITE | BG_BLACK) 3736e8394b8SKazutaka YOKOTA #endif 3746e8394b8SKazutaka YOKOTA #ifndef SC_KERNEL_CONS_REV_ATTR 3756e8394b8SKazutaka YOKOTA #define SC_KERNEL_CONS_REV_ATTR (FG_BLACK | BG_LIGHTGREY) 3766e8394b8SKazutaka YOKOTA #endif 377a8445737SSøren Schmidt 3782b944ee2SKazutaka YOKOTA /* terminal emulator */ 3792b944ee2SKazutaka YOKOTA 3802b944ee2SKazutaka YOKOTA #ifndef SC_DFLT_TERM 3812b944ee2SKazutaka YOKOTA #define SC_DFLT_TERM "*" /* any */ 3822b944ee2SKazutaka YOKOTA #endif 3832b944ee2SKazutaka YOKOTA 3842b944ee2SKazutaka YOKOTA typedef int sc_term_init_t(scr_stat *scp, void **tcp, int code); 3852b944ee2SKazutaka YOKOTA #define SC_TE_COLD_INIT 0 3862b944ee2SKazutaka YOKOTA #define SC_TE_WARM_INIT 1 3872b944ee2SKazutaka YOKOTA typedef int sc_term_term_t(scr_stat *scp, void **tcp); 388d91400bfSBruce Evans typedef void sc_term_puts_t(scr_stat *scp, u_char *buf, int len); 3892b944ee2SKazutaka YOKOTA typedef int sc_term_ioctl_t(scr_stat *scp, struct tty *tp, u_long cmd, 390bc093719SEd Schouten caddr_t data, struct thread *td); 3912b944ee2SKazutaka YOKOTA typedef int sc_term_reset_t(scr_stat *scp, int code); 3922b944ee2SKazutaka YOKOTA #define SC_TE_HARD_RESET 0 3932b944ee2SKazutaka YOKOTA #define SC_TE_SOFT_RESET 1 3942b944ee2SKazutaka YOKOTA typedef void sc_term_default_attr_t(scr_stat *scp, int norm, int rev); 3952b944ee2SKazutaka YOKOTA typedef void sc_term_clear_t(scr_stat *scp); 3962b944ee2SKazutaka YOKOTA typedef void sc_term_notify_t(scr_stat *scp, int event); 3972b944ee2SKazutaka YOKOTA #define SC_TE_NOTIFY_VTSWITCH_IN 0 3982b944ee2SKazutaka YOKOTA #define SC_TE_NOTIFY_VTSWITCH_OUT 1 3992b944ee2SKazutaka YOKOTA typedef int sc_term_input_t(scr_stat *scp, int c, struct tty *tp); 4003a8a07eaSEd Schouten typedef const char *sc_term_fkeystr_t(scr_stat *scp, int c); 401912da699SBruce Evans typedef void sc_term_sync_t(scr_stat *scp); 4022b944ee2SKazutaka YOKOTA 4032b944ee2SKazutaka YOKOTA typedef struct sc_term_sw { 404e3975643SJake Burkholder LIST_ENTRY(sc_term_sw) link; 4052b944ee2SKazutaka YOKOTA char *te_name; /* name of the emulator */ 4062b944ee2SKazutaka YOKOTA char *te_desc; /* description */ 4072b944ee2SKazutaka YOKOTA char *te_renderer; /* matching renderer */ 4082b944ee2SKazutaka YOKOTA size_t te_size; /* size of internal buffer */ 4092b944ee2SKazutaka YOKOTA int te_refcount; /* reference counter */ 4102b944ee2SKazutaka YOKOTA sc_term_init_t *te_init; 4112b944ee2SKazutaka YOKOTA sc_term_term_t *te_term; 4122b944ee2SKazutaka YOKOTA sc_term_puts_t *te_puts; 4132b944ee2SKazutaka YOKOTA sc_term_ioctl_t *te_ioctl; 4142b944ee2SKazutaka YOKOTA sc_term_reset_t *te_reset; 4152b944ee2SKazutaka YOKOTA sc_term_default_attr_t *te_default_attr; 4162b944ee2SKazutaka YOKOTA sc_term_clear_t *te_clear; 4172b944ee2SKazutaka YOKOTA sc_term_notify_t *te_notify; 4182b944ee2SKazutaka YOKOTA sc_term_input_t *te_input; 4193a8a07eaSEd Schouten sc_term_fkeystr_t *te_fkeystr; 420912da699SBruce Evans sc_term_sync_t *te_sync; 4212b944ee2SKazutaka YOKOTA } sc_term_sw_t; 4222b944ee2SKazutaka YOKOTA 4232b944ee2SKazutaka YOKOTA #define SCTERM_MODULE(name, sw) \ 4242b944ee2SKazutaka YOKOTA DATA_SET(scterm_set, sw); \ 4252b944ee2SKazutaka YOKOTA static int \ 4262b944ee2SKazutaka YOKOTA scterm_##name##_event(module_t mod, int type, void *data) \ 4272b944ee2SKazutaka YOKOTA { \ 4282b944ee2SKazutaka YOKOTA switch (type) { \ 4292b944ee2SKazutaka YOKOTA case MOD_LOAD: \ 4302b944ee2SKazutaka YOKOTA return sc_term_add(&sw); \ 4312b944ee2SKazutaka YOKOTA case MOD_UNLOAD: \ 4322b944ee2SKazutaka YOKOTA if (sw.te_refcount > 0) \ 4332b944ee2SKazutaka YOKOTA return EBUSY; \ 4342b944ee2SKazutaka YOKOTA return sc_term_remove(&sw); \ 4352b944ee2SKazutaka YOKOTA default: \ 4363e019deaSPoul-Henning Kamp return EOPNOTSUPP; \ 4372b944ee2SKazutaka YOKOTA break; \ 4382b944ee2SKazutaka YOKOTA } \ 4392b944ee2SKazutaka YOKOTA return 0; \ 4402b944ee2SKazutaka YOKOTA } \ 4412b944ee2SKazutaka YOKOTA static moduledata_t scterm_##name##_mod = { \ 4422b944ee2SKazutaka YOKOTA "scterm-" #name, \ 4432b944ee2SKazutaka YOKOTA scterm_##name##_event, \ 4442b944ee2SKazutaka YOKOTA NULL, \ 4452b944ee2SKazutaka YOKOTA }; \ 4462b944ee2SKazutaka YOKOTA DECLARE_MODULE(scterm_##name, scterm_##name##_mod, \ 4472b944ee2SKazutaka YOKOTA SI_SUB_DRIVERS, SI_ORDER_MIDDLE) 4482b944ee2SKazutaka YOKOTA 4496e8394b8SKazutaka YOKOTA /* renderer function table */ 450f1121206SXin LI typedef void vr_init_t(scr_stat *scp); 4516e8394b8SKazutaka YOKOTA typedef void vr_clear_t(scr_stat *scp, int c, int attr); 4526e8394b8SKazutaka YOKOTA typedef void vr_draw_border_t(scr_stat *scp, int color); 4536e8394b8SKazutaka YOKOTA typedef void vr_draw_t(scr_stat *scp, int from, int count, int flip); 4546e8394b8SKazutaka YOKOTA typedef void vr_set_cursor_t(scr_stat *scp, int base, int height, int blink); 4556e8394b8SKazutaka YOKOTA typedef void vr_draw_cursor_t(scr_stat *scp, int at, int blink, 4566e8394b8SKazutaka YOKOTA int on, int flip); 4576e8394b8SKazutaka YOKOTA typedef void vr_blink_cursor_t(scr_stat *scp, int at, int flip); 4586e8394b8SKazutaka YOKOTA typedef void vr_set_mouse_t(scr_stat *scp); 4596e8394b8SKazutaka YOKOTA typedef void vr_draw_mouse_t(scr_stat *scp, int x, int y, int on); 4606e8394b8SKazutaka YOKOTA 4616e8394b8SKazutaka YOKOTA typedef struct sc_rndr_sw { 462f1121206SXin LI vr_init_t *init; 4636e8394b8SKazutaka YOKOTA vr_clear_t *clear; 4646e8394b8SKazutaka YOKOTA vr_draw_border_t *draw_border; 4656e8394b8SKazutaka YOKOTA vr_draw_t *draw; 4666e8394b8SKazutaka YOKOTA vr_set_cursor_t *set_cursor; 4676e8394b8SKazutaka YOKOTA vr_draw_cursor_t *draw_cursor; 4686e8394b8SKazutaka YOKOTA vr_blink_cursor_t *blink_cursor; 4696e8394b8SKazutaka YOKOTA vr_set_mouse_t *set_mouse; 4706e8394b8SKazutaka YOKOTA vr_draw_mouse_t *draw_mouse; 4716e8394b8SKazutaka YOKOTA } sc_rndr_sw_t; 4726e8394b8SKazutaka YOKOTA 4736e8394b8SKazutaka YOKOTA typedef struct sc_renderer { 4746e8394b8SKazutaka YOKOTA char *name; 4756e8394b8SKazutaka YOKOTA int mode; 4766e8394b8SKazutaka YOKOTA sc_rndr_sw_t *rndrsw; 477e3975643SJake Burkholder LIST_ENTRY(sc_renderer) link; 4786e8394b8SKazutaka YOKOTA } sc_renderer_t; 4796e8394b8SKazutaka YOKOTA 4802b944ee2SKazutaka YOKOTA #define RENDERER(name, mode, sw, set) \ 48122c1cd20SPeter Wemm static struct sc_renderer scrndr_##name##_##mode = { \ 4826e8394b8SKazutaka YOKOTA #name, mode, &sw \ 4836e8394b8SKazutaka YOKOTA }; \ 48422c1cd20SPeter Wemm DATA_SET(scrndr_set, scrndr_##name##_##mode); \ 48522c1cd20SPeter Wemm DATA_SET(set, scrndr_##name##_##mode) 4866e8394b8SKazutaka YOKOTA 4872b944ee2SKazutaka YOKOTA #define RENDERER_MODULE(name, set) \ 488f41325dbSPeter Wemm SET_DECLARE(set, sc_renderer_t); \ 4892b944ee2SKazutaka YOKOTA static int \ 4902b944ee2SKazutaka YOKOTA scrndr_##name##_event(module_t mod, int type, void *data) \ 4912b944ee2SKazutaka YOKOTA { \ 4922b944ee2SKazutaka YOKOTA sc_renderer_t **list; \ 4932b944ee2SKazutaka YOKOTA int error = 0; \ 4942b944ee2SKazutaka YOKOTA switch (type) { \ 4952b944ee2SKazutaka YOKOTA case MOD_LOAD: \ 496f41325dbSPeter Wemm SET_FOREACH(list, set) { \ 497f41325dbSPeter Wemm error = sc_render_add(*list); \ 4982b944ee2SKazutaka YOKOTA if (error) \ 4992b944ee2SKazutaka YOKOTA break; \ 5002b944ee2SKazutaka YOKOTA } \ 5012b944ee2SKazutaka YOKOTA break; \ 5022b944ee2SKazutaka YOKOTA case MOD_UNLOAD: \ 503f41325dbSPeter Wemm SET_FOREACH(list, set) { \ 504f41325dbSPeter Wemm error = sc_render_remove(*list);\ 5052b944ee2SKazutaka YOKOTA if (error) \ 5062b944ee2SKazutaka YOKOTA break; \ 5072b944ee2SKazutaka YOKOTA } \ 5082b944ee2SKazutaka YOKOTA break; \ 5092b944ee2SKazutaka YOKOTA default: \ 5103e019deaSPoul-Henning Kamp return EOPNOTSUPP; \ 5112b944ee2SKazutaka YOKOTA break; \ 5122b944ee2SKazutaka YOKOTA } \ 5132b944ee2SKazutaka YOKOTA return error; \ 5142b944ee2SKazutaka YOKOTA } \ 5152b944ee2SKazutaka YOKOTA static moduledata_t scrndr_##name##_mod = { \ 5162b944ee2SKazutaka YOKOTA "scrndr-" #name, \ 5172b944ee2SKazutaka YOKOTA scrndr_##name##_event, \ 5182b944ee2SKazutaka YOKOTA NULL, \ 5192b944ee2SKazutaka YOKOTA }; \ 52022c1cd20SPeter Wemm DECLARE_MODULE(scrndr_##name, scrndr_##name##_mod, \ 5212b944ee2SKazutaka YOKOTA SI_SUB_DRIVERS, SI_ORDER_MIDDLE) 5226e8394b8SKazutaka YOKOTA 5236e8394b8SKazutaka YOKOTA typedef struct { 5246e8394b8SKazutaka YOKOTA int shift_state; 5256e8394b8SKazutaka YOKOTA int bell_pitch; 5266e8394b8SKazutaka YOKOTA } bios_values_t; 5276e8394b8SKazutaka YOKOTA 5286e8394b8SKazutaka YOKOTA /* other macros */ 529a8445737SSøren Schmidt #define ISTEXTSC(scp) (!((scp)->status \ 530a8445737SSøren Schmidt & (UNKNOWN_MODE | GRAPHICS_MODE | PIXEL_MODE))) 531a8445737SSøren Schmidt #define ISGRAPHSC(scp) (((scp)->status \ 532a8445737SSøren Schmidt & (UNKNOWN_MODE | GRAPHICS_MODE))) 533a8445737SSøren Schmidt #define ISPIXELSC(scp) (((scp)->status \ 534a8445737SSøren Schmidt & (UNKNOWN_MODE | GRAPHICS_MODE | PIXEL_MODE))\ 535a8445737SSøren Schmidt == PIXEL_MODE) 536a8445737SSøren Schmidt #define ISUNKNOWNSC(scp) ((scp)->status & UNKNOWN_MODE) 537a8445737SSøren Schmidt 538a8445737SSøren Schmidt #define ISMOUSEAVAIL(af) ((af) & V_ADP_FONT) 5396e8394b8SKazutaka YOKOTA #define ISFONTAVAIL(af) ((af) & V_ADP_FONT) 540a8445737SSøren Schmidt #define ISPALAVAIL(af) ((af) & V_ADP_PALETTE) 541a8445737SSøren Schmidt 5426e8394b8SKazutaka YOKOTA #define ISSIGVALID(sig) ((sig) > 0 && (sig) < NSIG) 5436e8394b8SKazutaka YOKOTA 544988129b8SScott Long #define SC_VIDEO_LOCKINIT(sc) \ 5451d9c3ad3SJohn Baldwin mtx_init(&(sc)->video_mtx, "syscons video lock", NULL, \ 5461d9c3ad3SJohn Baldwin MTX_SPIN | MTX_RECURSE); 547988129b8SScott Long #define SC_VIDEO_LOCK(sc) \ 548988129b8SScott Long do { \ 549d350ce61SBruce Evans if (!kdb_active) \ 550988129b8SScott Long mtx_lock_spin(&(sc)->video_mtx); \ 551988129b8SScott Long } while(0) 552988129b8SScott Long #define SC_VIDEO_UNLOCK(sc) \ 553988129b8SScott Long do { \ 554d350ce61SBruce Evans if (!kdb_active) \ 555988129b8SScott Long mtx_unlock_spin(&(sc)->video_mtx); \ 556988129b8SScott Long } while(0) 557988129b8SScott Long 558a8445737SSøren Schmidt /* syscons.c */ 559bc093719SEd Schouten extern int (*sc_user_ioctl)(struct tty *tp, u_long cmd, caddr_t data, 560bc093719SEd Schouten struct thread *td); 5616e8394b8SKazutaka YOKOTA 562f359876fSKazutaka YOKOTA int sc_probe_unit(int unit, int flags); 563f359876fSKazutaka YOKOTA int sc_attach_unit(int unit, int flags); 564a8445737SSøren Schmidt 565a8445737SSøren Schmidt int set_mode(scr_stat *scp); 566a8445737SSøren Schmidt 5672b944ee2SKazutaka YOKOTA void sc_set_border(scr_stat *scp, int color); 568b7c96c0dSMarius Strobl void sc_load_font(scr_stat *scp, int page, int size, int width, 569b7c96c0dSMarius Strobl u_char *font, int base, int count); 570b7c96c0dSMarius Strobl void sc_save_font(scr_stat *scp, int page, int size, int width, 571b7c96c0dSMarius Strobl u_char *font, int base, int count); 5722b944ee2SKazutaka YOKOTA void sc_show_font(scr_stat *scp, int page); 573a8445737SSøren Schmidt 5742ad872c5SKazutaka YOKOTA void sc_touch_scrn_saver(void); 5752b944ee2SKazutaka YOKOTA void sc_draw_cursor_image(scr_stat *scp); 5762b944ee2SKazutaka YOKOTA void sc_remove_cursor_image(scr_stat *scp); 5776e8394b8SKazutaka YOKOTA void sc_set_cursor_image(scr_stat *scp); 5784866e276SKazutaka YOKOTA void sc_change_cursor_shape(scr_stat *scp, int flags, 5794866e276SKazutaka YOKOTA int base, int height); 580a8445737SSøren Schmidt int sc_clean_up(scr_stat *scp); 5812b944ee2SKazutaka YOKOTA int sc_switch_scr(sc_softc_t *sc, u_int next_scr); 5826e8394b8SKazutaka YOKOTA void sc_alloc_scr_buffer(scr_stat *scp, int wait, int discard); 5832b944ee2SKazutaka YOKOTA int sc_init_emulator(scr_stat *scp, char *name); 584b4b1c516SEd Schouten void sc_paste(scr_stat *scp, const u_char *p, int count); 58553e69c0cSEd Schouten void sc_respond(scr_stat *scp, const u_char *p, 58653e69c0cSEd Schouten int count, int wakeup); 5872b944ee2SKazutaka YOKOTA void sc_bell(scr_stat *scp, int pitch, int duration); 5886e8394b8SKazutaka YOKOTA 5896e8394b8SKazutaka YOKOTA /* schistory.c */ 5906e8394b8SKazutaka YOKOTA #ifndef SC_NO_HISTORY 591c4c9400bSKazutaka YOKOTA int sc_alloc_history_buffer(scr_stat *scp, int lines, 592c4c9400bSKazutaka YOKOTA int prev_ysize, int wait); 593c4c9400bSKazutaka YOKOTA void sc_free_history_buffer(scr_stat *scp, int prev_ysize); 5946e8394b8SKazutaka YOKOTA void sc_hist_save(scr_stat *scp); 5956e8394b8SKazutaka YOKOTA #define sc_hist_save_one_line(scp, from) \ 5966e8394b8SKazutaka YOKOTA sc_vtb_append(&(scp)->vtb, (from), (scp)->history, (scp)->xsize) 5976e8394b8SKazutaka YOKOTA int sc_hist_restore(scr_stat *scp); 5986e8394b8SKazutaka YOKOTA void sc_hist_home(scr_stat *scp); 5996e8394b8SKazutaka YOKOTA void sc_hist_end(scr_stat *scp); 6006e8394b8SKazutaka YOKOTA int sc_hist_up_line(scr_stat *scp); 6016e8394b8SKazutaka YOKOTA int sc_hist_down_line(scr_stat *scp); 6026e8394b8SKazutaka YOKOTA int sc_hist_ioctl(struct tty *tp, u_long cmd, caddr_t data, 603bc093719SEd Schouten struct thread *td); 6046e8394b8SKazutaka YOKOTA #endif /* SC_NO_HISTORY */ 6056e8394b8SKazutaka YOKOTA 6066e8394b8SKazutaka YOKOTA /* scmouse.c */ 6076e8394b8SKazutaka YOKOTA #ifndef SC_NO_CUTPASTE 6086e8394b8SKazutaka YOKOTA void sc_alloc_cut_buffer(scr_stat *scp, int wait); 6096e8394b8SKazutaka YOKOTA void sc_draw_mouse_image(scr_stat *scp); 6106e8394b8SKazutaka YOKOTA void sc_remove_mouse_image(scr_stat *scp); 6116e8394b8SKazutaka YOKOTA int sc_inside_cutmark(scr_stat *scp, int pos); 6126e8394b8SKazutaka YOKOTA void sc_remove_cutmarking(scr_stat *scp); 6136e8394b8SKazutaka YOKOTA void sc_remove_all_cutmarkings(sc_softc_t *scp); 6146e8394b8SKazutaka YOKOTA void sc_remove_all_mouse(sc_softc_t *scp); 6154629b5e0SAndrey A. Chernov void sc_mouse_paste(scr_stat *scp); 6166e8394b8SKazutaka YOKOTA #else 617c2c86c2bSKazutaka YOKOTA #define sc_draw_mouse_image(scp) 618c2c86c2bSKazutaka YOKOTA #define sc_remove_mouse_image(scp) 6196e8394b8SKazutaka YOKOTA #define sc_inside_cutmark(scp, pos) FALSE 6206e8394b8SKazutaka YOKOTA #define sc_remove_cutmarking(scp) 621c2c86c2bSKazutaka YOKOTA #define sc_remove_all_cutmarkings(scp) 622c2c86c2bSKazutaka YOKOTA #define sc_remove_all_mouse(scp) 6234629b5e0SAndrey A. Chernov #define sc_mouse_paste(scp) 6246e8394b8SKazutaka YOKOTA #endif /* SC_NO_CUTPASTE */ 6256e8394b8SKazutaka YOKOTA #ifndef SC_NO_SYSMOUSE 6266e8394b8SKazutaka YOKOTA void sc_mouse_move(scr_stat *scp, int x, int y); 6276e8394b8SKazutaka YOKOTA int sc_mouse_ioctl(struct tty *tp, u_long cmd, caddr_t data, 628bc093719SEd Schouten struct thread *td); 6296e8394b8SKazutaka YOKOTA #endif /* SC_NO_SYSMOUSE */ 630a8445737SSøren Schmidt 631a8445737SSøren Schmidt /* scvidctl.c */ 632a8445737SSøren Schmidt int sc_set_text_mode(scr_stat *scp, struct tty *tp, int mode, 63386330afeSCraig Rodrigues int xsize, int ysize, int fontsize, 63486330afeSCraig Rodrigues int font_width); 635a8445737SSøren Schmidt int sc_set_graphics_mode(scr_stat *scp, struct tty *tp, int mode); 63686330afeSCraig Rodrigues int sc_set_pixel_mode(scr_stat *scp, struct tty *tp, int xsize, 63786330afeSCraig Rodrigues int ysize, int fontsize, int font_width); 6384a9b63a4SJung-uk Kim int sc_support_pixel_mode(void *arg); 639bc093719SEd Schouten int sc_vid_ioctl(struct tty *tp, u_long cmd, caddr_t data, 640b40ce416SJulian Elischer struct thread *td); 641a8445737SSøren Schmidt 6422b944ee2SKazutaka YOKOTA int sc_render_add(sc_renderer_t *rndr); 6432b944ee2SKazutaka YOKOTA int sc_render_remove(sc_renderer_t *rndr); 6442b944ee2SKazutaka YOKOTA sc_rndr_sw_t *sc_render_match(scr_stat *scp, char *name, int mode); 6452b944ee2SKazutaka YOKOTA 6466e8394b8SKazutaka YOKOTA /* scvtb.c */ 6476e8394b8SKazutaka YOKOTA void sc_vtb_init(sc_vtb_t *vtb, int type, int cols, int rows, 6486e8394b8SKazutaka YOKOTA void *buffer, int wait); 6496e8394b8SKazutaka YOKOTA void sc_vtb_destroy(sc_vtb_t *vtb); 6506e8394b8SKazutaka YOKOTA size_t sc_vtb_size(int cols, int rows); 6516e8394b8SKazutaka YOKOTA void sc_vtb_clear(sc_vtb_t *vtb, int c, int attr); 6526e8394b8SKazutaka YOKOTA 6536e8394b8SKazutaka YOKOTA int sc_vtb_getc(sc_vtb_t *vtb, int at); 6546e8394b8SKazutaka YOKOTA int sc_vtb_geta(sc_vtb_t *vtb, int at); 6556e8394b8SKazutaka YOKOTA void sc_vtb_putc(sc_vtb_t *vtb, int at, int c, int a); 6566e8394b8SKazutaka YOKOTA vm_offset_t sc_vtb_putchar(sc_vtb_t *vtb, vm_offset_t p, int c, int a); 6576e8394b8SKazutaka YOKOTA vm_offset_t sc_vtb_pointer(sc_vtb_t *vtb, int at); 6586e8394b8SKazutaka YOKOTA int sc_vtb_pos(sc_vtb_t *vtb, int pos, int offset); 6596e8394b8SKazutaka YOKOTA 6606e8394b8SKazutaka YOKOTA #define sc_vtb_tail(vtb) ((vtb)->vtb_tail) 6616e8394b8SKazutaka YOKOTA #define sc_vtb_rows(vtb) ((vtb)->vtb_rows) 662d94eccc2SKazutaka YOKOTA #define sc_vtb_cols(vtb) ((vtb)->vtb_cols) 6636e8394b8SKazutaka YOKOTA 6646e8394b8SKazutaka YOKOTA void sc_vtb_copy(sc_vtb_t *vtb1, int from, sc_vtb_t *vtb2, int to, 6656e8394b8SKazutaka YOKOTA int count); 6666e8394b8SKazutaka YOKOTA void sc_vtb_append(sc_vtb_t *vtb1, int from, sc_vtb_t *vtb2, 6676e8394b8SKazutaka YOKOTA int count); 6686e8394b8SKazutaka YOKOTA void sc_vtb_seek(sc_vtb_t *vtb, int pos); 6696e8394b8SKazutaka YOKOTA void sc_vtb_erase(sc_vtb_t *vtb, int at, int count, int c, int attr); 6707107ea4aSKazutaka YOKOTA void sc_vtb_move(sc_vtb_t *vtb, int from, int to, int count); 6716e8394b8SKazutaka YOKOTA void sc_vtb_delete(sc_vtb_t *vtb, int at, int count, int c, int attr); 6726e8394b8SKazutaka YOKOTA void sc_vtb_ins(sc_vtb_t *vtb, int at, int count, int c, int attr); 6736e8394b8SKazutaka YOKOTA 6742b944ee2SKazutaka YOKOTA /* sysmouse.c */ 6752b944ee2SKazutaka YOKOTA int sysmouse_event(mouse_info_t *info); 6762b944ee2SKazutaka YOKOTA 6772b944ee2SKazutaka YOKOTA /* scterm.c */ 6782b944ee2SKazutaka YOKOTA void sc_move_cursor(scr_stat *scp, int x, int y); 6792b944ee2SKazutaka YOKOTA void sc_clear_screen(scr_stat *scp); 6802b944ee2SKazutaka YOKOTA int sc_term_add(sc_term_sw_t *sw); 6812b944ee2SKazutaka YOKOTA int sc_term_remove(sc_term_sw_t *sw); 6822b944ee2SKazutaka YOKOTA sc_term_sw_t *sc_term_match(char *name); 6832b944ee2SKazutaka YOKOTA sc_term_sw_t *sc_term_match_by_number(int index); 6842b944ee2SKazutaka YOKOTA 6856e8394b8SKazutaka YOKOTA /* machine dependent functions */ 6866e8394b8SKazutaka YOKOTA int sc_max_unit(void); 6876e8394b8SKazutaka YOKOTA sc_softc_t *sc_get_softc(int unit, int flags); 6886e8394b8SKazutaka YOKOTA sc_softc_t *sc_find_softc(struct video_adapter *adp, struct keyboard *kbd); 6896e8394b8SKazutaka YOKOTA int sc_get_cons_priority(int *unit, int *flags); 6906e8394b8SKazutaka YOKOTA void sc_get_bios_values(bios_values_t *values); 6916e8394b8SKazutaka YOKOTA int sc_tone(int herz); 6926e8394b8SKazutaka YOKOTA 6932ad872c5SKazutaka YOKOTA #endif /* !_DEV_SYSCONS_SYSCONS_H_ */ 694