/* $NetBSD: vconsole.h,v 1.3 1996/10/14 22:35:03 mark Exp $ */ /* * Copyright (c) 1994,1995 Melvyn Tang-Richardson * All rights reserved. * * This code is derived from software written for Brini by Mark Brinicombe * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the RiscBSD team * 4. The name of the company nor the name of the author may be used to * endorse or promote products derived from this software without specific * prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * RiscBSD kernel project * * vconsole.h * * Virtual console header * * Created : 18/09/94 */ #ifdef _KERNEL #define LOSSY 1 #define FIXEDRES 2 #define BOLD (1<<15) #define UNDERLINE (1<<16) #define REVERSE (1<<17) #define BLINKING (1<<18) #include struct vconsole; /* * Render routines and terminal drivers which conform to version 1.00 * of the spec should always be present. This is the lowest common * denominator, which enables the driver to always find something that * will work. * * Prefered drivers can be added required in the tables. */ struct render_engine { char * name; int ( *init ) __P(( struct vconsole *vc )); void ( *putchar ) __P(( dev_t dev, char c, struct vconsole *vc )); int ( *spawn ) __P(( struct vconsole *vc )); int ( *swapin ) __P(( struct vconsole *vc )); int ( *mmap ) __P(( struct vconsole *vc, int offset, int nprot )); void ( *render ) __P(( struct vconsole *vc, char c)); void ( *scrollup ) __P(( struct vconsole *vc, int low, int high )); void ( *scrolldown ) __P(( struct vconsole *vc, int low, int high )); void ( *cls ) __P(( struct vconsole *vc )); void ( *update ) __P(( struct vconsole *vc )); int ( *scrollback ) __P(( struct vconsole *vc )); int ( *scrollforward ) __P(( struct vconsole *vc )); int ( *scrollbackend ) __P(( struct vconsole *vc )); int ( *clreos ) __P(( struct vconsole *vc, int code )); int ( *debugprint ) __P(( struct vconsole *vc )); int ( *cursorupdate ) __P(( struct vconsole *vc )); int ( *cursorflashrate ) __P(( struct vconsole *vc, int rate )); int ( *setfgcol ) __P(( struct vconsole *vc, int col )); int ( *setbgcol ) __P(( struct vconsole *vc, int col )); int ( *textpalette ) __P(( struct vconsole *vc )); int ( *sgr ) __P(( struct vconsole *vc, int type )); int ( *blank ) __P(( struct vconsole *vc, int type )); int ( *ioctl ) __P(( struct vconsole *vc, dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)); int ( *redraw ) __P(( struct vconsole *vc, int x, int y, int a, int b )); int ( *attach ) __P(( struct vconsole *vc, struct device *dev, struct device *dev1, void * arg)); int ( *flash ) __P(( struct vconsole *vc, int flash )); int ( *cursor_flash ) __P(( struct vconsole *vc, int flash )); }; /* Blank types. VESA defined */ /* Blank type 3 is suported by default */ #define BLANK_NONE 0 /* Not really blanked */ #define BLANK_IDLE 1 /* Vsync dropped for fast reactivation */ #define BLANK_UNUSED 2 /* Hsync dropped for semi fast reactivation */ #define BLANK_OFF 3 /* All signals removed slowest reactivation */ #define R_NAME render_engine->name #define SPAWN render_engine->spawn #define SCROLLUP render_engine->scrollup #define SCROLLDOWN render_engine->scrolldown #define RENDER render_engine->render #define R_SWAPIN render_engine->swapin #define CLS render_engine->cls #define R_INIT render_engine->init #define PUTCHAR render_engine->putchar #define R_SWAPIN render_engine->swapin #define MMAP render_engine->mmap #define R_SCROLLBACK render_engine->scrollback #define R_SCROLLFORWARD render_engine->scrollforward #define R_SCROLLBACKEND render_engine->scrollbackend #define R_CLREOS render_engine->clreos #define R_DEBUGPRINT render_engine->debugprint #define CURSORUPDATE render_engine->cursorupdate #define CURSORFLASHRATE render_engine->cursorflashrate #define SETFGCOL render_engine->setfgcol #define SETBGCOL render_engine->setbgcol #define TEXTPALETTE render_engine->textpalette #define SGR render_engine->sgr #define BLANK render_engine->blank #define IOCTL render_engine->ioctl #define REDRAW render_engine->redraw #define R_ATTACH render_engine->attach #define FLASH render_engine->flash #define CURSOR_FLASH render_engine->cursor_flash /* * The terminal emulator's scroll back is only used as a last resort for * cases when a render engine can't scrollback. In most cases though, the * terminal emulator won't allocate enough chapmap to perform scrollback. */ struct terminal_emulator { char *name; /* Terminal emulation routines */ int (*term_init) __P((struct vconsole *vc)); int (*putstring) __P((char *string, int length, struct vconsole *vc)); int (*swapin) __P((struct vconsole *vc)); int (*swapout) __P((struct vconsole *vc)); int (*sleep) __P((struct vconsole *vc)); int (*wake) __P((struct vconsole *vc)); int ( *scrollback) __P(( struct vconsole *vc )); int ( *scrollforward) __P(( struct vconsole *vc )); int ( *scrollbackend) __P(( struct vconsole *vc )); int ( *debugprint) __P(( struct vconsole *vc )); int ( *modechange) __P(( struct vconsole *vc )); int ( *attach ) __P(( struct vconsole *vc, struct device *dev, struct device *dev1, void *arg )); }; #define T_NAME terminal_emulator->name #define TERM_INIT terminal_emulator->term_init #define T_SWAPIN terminal_emulator->swapin #define PUTSTRING terminal_emulator->putstring #define SLEEP terminal_emulator->sleep #define WAKE terminal_emulator->wake #define T_SCROLLBACK terminal_emulator->scrollback #define T_SCROLLFORWARD terminal_emulator->scrollforward #define T_SCROLLBACKEND terminal_emulator->scrollbackend #define T_DEBUGPRINT terminal_emulator->debugprint #define MODECHANGE terminal_emulator->modechange #define T_ATTACH terminal_emulator->attach struct vconsole { /* Management of consoles */ struct vconsole *next; int number; int opened; struct tty *tp; struct proc *proc; int flags; /* Data structures */ char *data; char *r_data; /* Structures required for the generic character map */ int xchars, ychars; int *charmap; int xcur, ycur; /* This is the end of the old stuff */ struct render_engine *render_engine; struct terminal_emulator *terminal_emulator; int t_scrolledback; int r_scrolledback; int blanktime; int blanked; int vtty; }; extern int vconsole_pending; extern int vconsole_blankinit; extern int vconsole_blankcounter; extern struct vconsole *vconsole_current; extern struct render_engine *render_engine_tab[]; extern struct terminal_emulator *terminal_emulator_tab[]; #endif /* ioctls for switching between vconsoles */ #define CONSOLE_SWITCHUP _IO( 'n', 0 ) #define CONSOLE_SWITCHDOWN _IO( 'n', 1 ) #define CONSOLE_SWITCHTO _IOW( 'n', 2, int ) #define CONSOLE_SWITCHPREV _IO( 'n', 3 ) /* ioctls for creating new virtual consoles */ #define CONSOLE_CREATE _IOW( 'n', 10, int ) #define CONSOLE_RENDERTYPE _IOR( 'n', 11, 20 ) #define CONSOLE_TERMTYPE _IOR( 'n', 12, 20 ) /* ioctls for locking in the current console. Kinky eh ? */ #define CONSOLE_LOCK _IO( 'n', 20 ) #define CONSOLE_UNLOCK _IO( 'n', 21 ) /* ioctls for animation, multimedia and games */ #define CONSOLE_SWOP _IO( 'n', 30 ) /* Screen Banking */ #ifdef CONSOLEGFX struct console_line { int len; char data[128]; }; struct console_coords { int x, y; }; #define CONSOLE_DRAWGFX _IOW( 'n', 31, struct console_line ) /* Screen Banking */ #define CONSOLE_MOVE _IOW( 'n', 32, struct console_coords ) #endif /* ioctls for configuration and control */ #define CONSOLE_CURSORFLASHRATE _IOW ( 'n', 40, int ) #define CONSOLE_MODE _IOW ( 'n', 41, struct vidc_mode ) #define CONSOLE_MODE_ALL _IOW ( 'n', 42, struct vidc_mode ) #define CONSOLE_BLANKTIME _IOW ( 'n', 44, int ) /* ioctls for developers *DO NOT USE * */ #define CONSOLE_SPAWN_VIDC _IOW( 'n', 100, int ) #define CONSOLE_DEBUGPRINT _IOW( 'n', 101, int ) /* structures and ioctls added by mark for the Xserver development */ struct console_info { videomemory_t videomemory; int width; int height; int bpp; }; struct console_palette { int entry; int red; int green; int blue; }; #define CONSOLE_RESETSCREEN _IO( 'n', 102) #define CONSOLE_RESTORESCREEN _IO( 'n', 103) #define CONSOLE_GETINFO _IOR( 'n', 104, struct console_info ) #define CONSOLE_PALETTE _IOW( 'n', 105, struct console_palette ) #define CONSOLE_GETVC _IOR( 'n', 106, int ) #define CONSOLE_IOCTL_COMPAT_N _IO( 'n', 107 ) #define CONSOLE_IOCTL_COMPAT_T _IO( 't', 107 ) /* End of vconsole.h */