NetBSD/sys/arch/arm32/include/vconsole.h

298 lines
9.9 KiB
C

/* $NetBSD: vconsole.h,v 1.5 2000/06/26 04:55:28 simonb 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
*/
/*
* Hopefully this file has a short life with the new console coming just
* round the corner
*/
#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 <machine/vidc.h>
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 ));
paddr_t ( *mmap ) __P(( struct vconsole *vc, off_t 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 */