DataMuseum.dk

Presents historical artifacts from the history of:

Regnecentalen RC-900

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Regnecentalen RC-900

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦d619f5650⟧ TextFile

    Length: 43458 (0xa9c2)
    Types: TextFile
    Notes: Uncompressed file

Derivation

└─⟦5a9f1bdbd⟧ Bits:30004698 RC900 Environment Rel. 2.0 (5.25 inch)
└─⟦5a9f1bdbd⟧ UNIX Filesystem
    └─⟦2862ab31d⟧ »RCENV.ISC/new/usr/include/sys/kd.h.Z« 
└─⟦de58d8f44⟧ Bits:30004699 RC900 Environment Rel. 2.0 (3.5 inch)
└─⟦de58d8f44⟧ UNIX Filesystem
    └─⟦2862ab31d⟧ »RCENV.ISC/new/usr/include/sys/kd.h.Z« 
        └─⟦this⟧ 

TextFile

/*	Copyright (c) 1984, 1986, 1987, 1988 AT&T	*/
/*	  All Rights Reserved  	*/

/*	THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T	*/
/*	The copyright notice above does not evidence any   	*/
/*	actual or intended publication of such source code.	*/

/*	Copyright (c) 1987, 1988 Microsoft Corporation	*/
/*	  All Rights Reserved	*/

/*	This Module contains Proprietary Information of Microsoft  */
/*	Corporation and should be treated as Confidential.	   */

/*
 * definitions for PC AT keyboard/display driver
 */

/*
 * Copyrighted as an unpublished work.
 * (c) Copyright 1986,1988 INTERACTIVE Systems Corporation
 * All rights reserved.
 *
 * RESTRICTED RIGHTS
 *
 * These programs are supplied under a license.  They may be used,
 * disclosed, and/or copied only as permitted under such license
 * agreement.  Any copy must contain the above copyright notice and
 * this restricted rights notice.  Use, copying, and/or disclosure
 * of the programs is strictly prohibited unless otherwise provided
 * in the license agreement.
 */

#ident "@(#)kd.h	3.1 - 92/09/09"
#ident "@(#)kd.h	2.20 - 90/03/29 ISC"
#ident "@(#) (c) Copyright INTERACTIVE Systems Corporation 1986,1988"

/*
 * Adaptor specific values 
 */
#define AD_ON	1		/* turn device on */
#define AD_OFF	0		/* turn device off */
/*
 * Types of displays supported
 */
#define	KD_MONO		01	/* monochrome display adapter */
#define	KD_HERCULES	02	/* Hercules monochrome graphics adapter */
#define	KD_CGA		03	/* color graphics adapter */
#define	KD_EGA		04	/* enhanced graphics adapter */
#define	KD_VGA		05	/* video graphics array adapter */
/*
** Zenith Z449 definitions
*/
#define Z449_STAMP	0xc0039	/* the address of the stamp */
#define Z449_SWITCH	0x3cb	/* the switch location */
#define Z449_START	70	/* offset to the inittab in kd.c */

/*
** Toshiba T5100 definitions
*/
#define T5100_STAMP	0xfe000	/* the address of the stamp */

/* Xenix display/adapter definitions */
#define MONO	1		/* Xenix value for monochrome */
#define CGA	2		/* Xenix value for color graphics */
#define PGA	3		/* Xenix value for professional graphics */
#define EGA	4		/* Xenix value for enhanced graphics */
#define VGA	5		/* Xenix value for video graphics array */

/*
 * Virtual display constants
 */
#define	KD_WIDTH	80		/* normal screen width */
#define	KD_NARROWWIDTH	40		/* narrow screen width */
#define KD_EXTRAWIDTH   132             /* wide screen width */
#define	KD_HEIGHT	25		/* screen height */
#define	KD_TALLHEIGHT	43		/* tall screen height */
#define	KD_MAXSCRSIZE	(KD_EXTRAWIDTH * KD_TALLHEIGHT)	/* max screen size */
#define	KD_SCRTOBUF	0		/* transfer from screen to buffer */
#define	KD_BUFTOSCR	1		/* transfer from buffer to screen */
#define	DEFLTEGAMODE	2

/*
 * keyboard controller I/O port addresses
 */
#define KB_OUT	0x60		/* output buffer R/O */
#define KB_IDAT 0x60		/* input buffer data write W/O */
#define KB_STAT 0x64		/* keyboard controller status R/O */
#define KB_ICMD 0x64		/* input buffer command write W/O */

/*
 * keyboard controller commands and flags
 */
#define KB_INBF		0x02	/* input buffer full flag */
#define KB_OUTBF	0x01	/* output buffer full flag */
#define KB_GATE20	0x02	/* set this bit to allow addresses > 1Mb */
#define KB_ROP		0xD0	/* read output port command */
#define KB_WOP		0xD1	/* write output port command */
#define	KB_RCB		0x20	/* read command byte command */
#define	KB_WCB		0x60	/* write command byte command */
#define	KB_ENAB		0xae	/* enable keyboard interface */
#define	KB_DISAB	0x10	/* disable keyboard */
#define	KB_EOBFI	0x01	/* enable interrupt on output buffer full */
#define KB_ACK		0xFA	/* Acknowledgement byte from keyboard */
#define	KB_RESETCPU	0xFE	/* command to reset AT386 cpu */
#define KB_READID	0xF2	/* command to read keyboard id */

/*
 * Structure of keyboard translation table
 */
#define NUM_KEYS	256		/* Maximum number of keys */
#define NUM_STATES	8		/* Number of key states */
#pragma pack(2)
typedef struct {
	short  n_keys ;			/* Number of entries in table */
	struct key_t {
		unsigned char map[NUM_STATES];	/* Key code for each state */
		unsigned char spcl;	/* Bits marking states as special */
		unsigned char flgs;	/* Flags */
	} key[NUM_KEYS+1];		/* One entry for each key */
} keymap_t;

#pragma pack()

struct pfxstate {
	unchar	val;
	unchar	type;
};
/*
 * Keyboard translation modes
 */
#define	K_RAW		0x00		/* Just send raw up/down scan codes */
#define	K_XLATE		0x01		/* Translate scan codes to ASCII */
/*
 * character table flag bits.
 */
#define	NUMLCK		0x8000	/* flag key as affected by num lock key */
#define	CAPLCK		0x4000	/* flag key as affected by caps lock key */
#define	CTLKEY		0x2000	/* flag key as afected by control keys */
/*
 * character table key types
 */
#define	NORMKEY		0x0000	/* key is a normal key, send with no prefix */
#define	SHIFTKEY	0x0100	/* key is a shift key */
#define	BREAKKEY	0x0200	/* key is a break key */
#define	SS2PFX		0x0300	/* prefix key with <ESC> N */
#define	SS3PFX		0x0400	/* prefix key with <ESC> O */
#define	CSIPFX		0x0500	/* prefix key with <ESC> [ */
#define	SPECIALKEY	0x0600	/* special key type */
#define	NOKEY		0x0f00	/* flag a key as nonexistant */
#define	TYPEMASK	0x0f00	/* select key type bits */

/*
 * Table selectors for KDSKBENT/KDGKBENT ioctl's
 */
#define	K_NORMTAB	0x00		/* Select unaugmented keyboard table */
#define	K_SHIFTTAB	0x01		/* Select shifted keyboard table */
#define	K_ALTTAB	0x02		/* Select alted keyboard table */
#define	K_ALTSHIFTTAB	0x03		/* Select alt-shifted keyboard table */
#define	K_SRQTAB	0x04		/* select sysreq table */
/*
 * Make/break distinctions
 */
#define	KBD_BREAK	0x80		/* Key make/break bit (break=1) */
/*
 * Flags for key state calculation.
 */
#define SHIFTED	0x01			/* Keys are shifted */
#define CTRLED	0x02			/* Keys are ctrl'd */
#define ALTED 	0x04			/* Keys are alt'd */
/*
 * Possible key states.  Used as index into translation entry for key.
 */
#define NORMAL		0		/* Unmodified */
#define SHIFT		SHIFTED		/* Shift key depressed */
#define CTRL		CTRLED		/* Ctrl key depressed */
#define	SHFCTL		(CTRLED|SHIFTED)	/* Shift and ctrl keys */
#define ALT		ALTED		/* Alt key depressed */
#define	ALTSHF		(ALTED|SHIFTED)	/* Shift and alt keys depressed */
#define	ALTCTL		(ALTED|CTRLED)	/* Ctrl and alt keys depressed */
#define	ALTSHFCTL	(ALTED|CTRLED|SHIFTED)	/* Shift, ctrl, and alt keys */
/*
 * Key map table flags
 */
#define	KMF_CLOCK	0x01		/* Key affected by caps lock */
#define	KMF_NLOCK	0x02		/* Key affected by num lock */
/*
 * kb_state bit definitions
 */
#define LEFT_SHIFT	0x0001	/* left shift key depressed */
#define	LEFT_ALT	0x0002	/* left alt key depressed */
#define	LEFT_CTRL	0x0004	/* left control key depressed */
#define	RIGHT_SHIFT	0x0008	/* right shift key depressed */
#define	RIGHT_ALT	0x0010	/* right alt key depressed */
#define	RIGHT_CTRL	0x0020	/* right control key depressed */
#define	CAPS_LOCK	0x0040	/* caps lock key down */
#define	NUM_LOCK	0x0080	/* num lock key down */
#define	SCROLL_LOCK	0x0100	/* scroll lock key down */
#define	ALTSET		(LEFT_ALT|RIGHT_ALT)
#define	SHIFTSET	(LEFT_SHIFT|RIGHT_SHIFT)
#define	CTRLSET		(LEFT_CTRL|RIGHT_CTRL)
#define	NONTOGGLES	(ALTSET|SHIFTSET|CTRLSET)
/*
 * Keyboard scan codes
 */
#define	SCROLLLOCK	0x46		/* Scroll lock key */
/*
 * Number of entries in 0xe0 prefix translation table
 */
#define	ESCTBLSIZ	18		/* Entries in 101/102 key table */
/*
 * Character flags.  Should not conflict with FRERROR and friends in tty.h
 */
#define NO_CHAR		0x8000		/* Do not generate a char */
#define GEN_ESCLSB	0x0800		/* Generate <ESC> [ prefix to char */
#define GEN_ESCN	0x0400		/* Generate <ESC> N prefix to char */
#define GEN_ZERO	0x0200		/* Generate 0 prefix to char */
#define	GEN_FUNC	0x0100		/* Generate function key */
#define GEN_ESCO	0x1000		/* Generate <ESC> O prefix to char */
/*
 * Special key code definitions
 */
#define	K_NOP	0			/* Keys with no function */
#define K_LSH	2			/* Left shift */
#define K_RSH	3			/* Right shift */
#define K_CLK	4			/* Caps lock */
#define K_NLK	5			/* Num lock */
#define K_SLK	6			/* Scroll lock */
#define K_ALT	7			/* Alt */
#define	K_BTAB	8			/* Back tab */
#define K_CTL	9			/* Control */
#define	K_LAL	10			/* Left alt */
#define	K_RAL	11			/* Right alt */
#define	K_LCT	12			/* Left control */
#define	K_RCT	13			/* Right control */
#define	K_FUNF	27			/* First function key */
#define	K_FUNL	122			/* Last function key */
#define	K_SRQ	123			/* System request */
#define	K_BRK	124			/* Break */
#define	K_ESN	125			/* <ESC> N <unalt'd value> sequence */
#define	K_ESO	126
#define	K_ESL	127
#define	K_RBT	128			/* Reboot system */
#define	K_DBG	129			/* Invoke debugger */
#define	K_NEXT	130
#define	K_PREV	131
#define	K_FRCNEXT 132
#define	K_FRCPREV 133
#define K_VTF	134
#define	K_VTL	148
#define K_MGRF	149
#define	K_MGRL	191
#define	K_PFXF	192
#define	K_PFXL	255


/*
 * Macro for recognizing scan codes for special keys
 */
#define	IS_SPECIAL(d,s,i)(d->kb_keymap->key[(s)].spcl & (0x80>>(i))) 
#define	IS_NPKEY(s)	(((s) >= 71) && ((s) <=83))	/* Number pad? */
/*
 * Function key constants and macros
 */
#define	NSTRKEYS	(K_FUNL-K_FUNF+1)	/* Number of string keys */
#define STRTABLN	1024		/* Max length of sum of all strings */
#define STRTABLN_21	256		/* Max length of sum in version 2.1 */
#define	IS_FUNKEY(c)	(((c) >= K_FUNF) && ((c) <= K_FUNL) || ((c) >= K_PFXF) && ((c) <= K_PFXL))	/* Function? */
/* Seperate function keys from prefix keys, the later are carried from V.3 */
#define	IS_STRKEY(c)	(c >= K_FUNF && c <= K_FUNL )	/* String? */
#define	IS_PFXKEY(c)	(c >= K_PFXF && c <= K_PFXL )	/* Esc prefix? */
typedef unchar	strmap_t[STRTABLN];	/* String map table type */
typedef unchar *strmapp_t;		/* Pointer to string map type */
#define	STRMAPENT(m,t,e)	((m) + (t) * STRTABLN + (e))	/* Map entry */
typedef ushort stridx_t[NSTRKEYS + 1];	/* String map index type */
typedef ushort *stridxp_t;		/* Pointer to string map index type */
#define	STRMAPIDX(m,t,e)	(*((m) + (t) * (NSTRKEYS + 1) + (e)))	/* Index */

typedef unchar	srqtab_t[NUM_KEYS + 1];

/* Shorthand for constants so columns line up neatly */
#define	KF	K_FUNF			/* First function key */
#define	L_O	0			/* Key not affected by locks */
#define	L_C	KMF_CLOCK		/* Key affected by caps lock */
#define	L_N	KMF_NLOCK		/* Key affected by num lock */
#define	L_B	(KMF_CLOCK|KMF_NLOCK)	/* Key affected by caps and num lock */

/*
 * Structure used for SETFKEY and GETFKEY ioctls
 */
#define MAXFK	30			/* Maximum length of string */
#pragma pack(2)
struct fkeyarg {
	unsigned short	keynum;		/* Function key number */
	unchar	 	keydef[MAXFK];	/* Key definition */
	char		flen;		/* Length of key definition */
};
#pragma pack()
/*
 * Constants for extended keys
 */
#define	NUMEXTSTATES	4		/* Number of extended states */

/* Commands for LED and typematic start/rate on the AT */
#define	KDCQMAX		8	/* length of keyboard command queue */
#define LED_WARN	0xED	/* Tell kbd that following byte is led status */
#define LED_SCR		0x01	/* Flag bit for scroll lock */
#define LED_NUM		0x02	/* Flag bit for num lock */
#define LED_CAP		0x04	/* Flag bit for cap lock */
#define	ACK_WAIT	0x01	/* flag for waiting for kbd response */
#define	TYPE_WARN	0xF3	/* command--next byte is typematic values */
#define	TYPE_VALS	0x20	/* max speed (30/s) and 1/2 sec delay */
#define	SCAN_WARN	0xF0	/* kbd command to set scan code set */


/*
 * Screen mapping constants and types
 */
#define NUM_ASCII	256	/* Number of ASCII characters */
typedef unchar	scrnmap_t[NUM_ASCII];	/* Screen map type */
typedef unchar	*scrnmapp_t;	/* Pointer to screen map type */

/*
 * type of adapter installed, matches bits in CMOS ram
 */
#define	MCAP_UNK	0xff	/* adapter not determined yet */
#define MCAP_MONO	0x03	/* mono adapter installed */
#define MCAP_COLOR	0x02	/* color adapter installed in 80 column mode */
#define MCAP_COLOR40	0x01	/* color adapter installed in 40 column mode */
#define MCAP_EGA	0x00	/* EGA adapter installed */

/* 6845 base addresses */
#define	MONO_REGBASE	0x03b4	/* Base register address for mono modes */
#define	COLOR_REGBASE	0x03d4	/* Base register address for color modes */

/* offsets from 6845 base address for various registers */
#define DATA_REG	0x1
#define MODE_REG	0x4
#define MODE2_REG	0x0A	/* rite-vu card only */
#define COLOR_REG	0x5	/* color adapter only */
#define STATUS_REG	0x6

/* definitions for bits in the color adapter mode register */
#define M_ALPHA40	0x00	/* 40 by 25 alphanumeric */
#define M_ALPHA80	0x01	/* 80 by 25 alphanumeric */
#define M_GRAPH		0x02	/* 320x200 or 640x200 graphics */
#define M_BW		0x04	/* black & white */
#define M_ENABLE	0x08	/* video enable */
#define M_HIGHRES	0x10	/* 640x200 B&W graphics */
#define M_BLINK		0x20	/* enable blink attribute */

/* definitions for bits in the color adapter mode2 register ( rite-vu card )*/
#define	M_GRAPH2	0x01	/* 640x400 graphics AT&T mode */
#define	M_DEGAUSS	0x02	/* degauss color monitor */
#define	M_ALTCHAR	0x04	/* rite-vu card alternate character set */
#define	M_PGSEL		0x08	/* switch to 2nd 16kbytes of memory */
#define	M_UNDRLINE	0x40	/* underline white chars, not blue */


/* definitions for bits in the color adapter status register */
#define S_UPDATEOK	0x01	/* safe to update regen buffer */
#define S_VSYNC		0x08	/* raster is in vertical retrace mode */

/* definitions for loading data into CRT controller registers */
#define R_STARTADRH	12	/* start address, high word */
#define R_STARTADRL	13	/* start address, low word */
#define R_CURADRH	14	/* cursor address, high word */
#define R_CURADRL	15	/* cursor address, low word */

/* definitions for the EGA */
#define IN_STAT_0	0x3c2	/* input status register zero */
#define MISC_OUT	0x3c2	/* miscellaneous output register */
#define MISC_OUT_READ	0x3cc	/* read misc output register on VGA */
#define IO_ADDR_SEL	0x1	/* IO address select in misc out reg */
#define IN_STAT_1	6	/* offset of input status register 1 */
#define FEAT_CTRL	6	/* offset of feature control register */
#define SW_SENSE	0x10	/* switch sense bit in input status zero */
#define CLKSEL		2	/* shift to select switch number */
#define GRAPH_1_POS	0x3cc	/* graphics 1 position */
#define GRAPH_2_POS	0x3ca	/* graphics 2 position */
#define GRAPHICS1	0	/* value for graphics 1 */
#define GRAPHICS2	1	/* value for graphics 2 */
#define SEQ_RUN		0x03	/* start sequencer */
#define PALETTE_ENABLE	0x20	/* palette address source in attribute reg */
#define CHGEN_BASE	0xa0000	/* base address for character generator */
#define CHGEN_SIZE	8192	/* character generator is 8K */
#define MONO_BASE	0xb0000	/* Location of monochrome display memory */
#define MONO_SIZE	0x8000	/* Monochrome has 32K of memory available */
#define MONO_SCRMASK	0x7ff	/* Mono text memory wraps at 4K */
#define COLOR_BASE	0xb8000	/* Location of color display memory */
#define COLOR_SIZE	0x8000	/* Color has up to 32K of memory available */
#define COLOR_SCRMASK	0x1fff	/* Color text memory wraps at 16K */
#define	EGA_BASE	0xa0000	/* Location of enhanced display memory */
#define EGA_SIZE	0x10000	/* EGA has at 64K of memory available */
#define EGA_LGSIZE	0x20000	/* Larger EGA has 128K of memory available */
#define EGA_SCRMASK	0x3fff	/* EGA text memory wraps at 32K (minimum) */
#define NSEQ		5	/* number of sequencer registers */
#define NATTR		21	/* number of attribute registers */
#define NGRAPH		9	/* number of graphics registers */

/* Font types supported */
#define	FONTINV		0
#define	FONT8x8		1		/* 8x8 font */
#define	FONT8x14	2		/* 8x14 font */
#define	FONT8x14m	3		/* 8x14 font for monochrome */
#define	FONT8x16	4		/* 8x16 font */
#define	NUM_FONTS	4		/* Number of fonts supported */

/* Offsets and sizes of font tables */
#define F8x8		(FONT8x8-1)	/* Array entry of 8x8 font in table */
#define	F8x8_BPC	8		/* Bytes per character in 8x8 font */
#define	F8x8_NCH	256		/* Number of characters in 8x8 font */

#define F8x14		(FONT8x14-1)	/* Array entry of 8x14 font in table */
#define F8x14m		(FONT8x14m-1)	/* Array entry of 8x14 mono table */
#define	F8x14_BPC	14		/* Bytes per character in 8x14 font */
#define	F8x14_NCH	256		/* Number of characters in 8x14 font */

#define F8x16		(FONT8x16-1)	/* Array entry of 8x16 font in table */
#define	F8x16_BPC	16		/* Bytes per character in 8x16 font */
#define	F8x16_NCH	256		/* Number of characters in 8x16 font */

/* definitions for bits in the attribute byte */
#define BLINK		0x80
#define BRIGHT		0x08
#define REVERSE		0x70
#define NORM		0x07
#define UNDERLINE	0x01	/* underline on mono, blue on color */

#define CLEAR		(NORM<<8|0x20)
#define BCLEAR		(NORM|BRIGHT<<8|0x20)
#define ALLATTR		(BLINK|BRIGHT|REVERSE|NORM|UNDERLINE)
#define NOTBGRND	(ALLATTR&(~REVERSE))
#define NOTFGRND	(ALLATTR&(~NORM))

#define CLK_MODE	0x01	/* Sequencer memory mode */
#define MEM_MODE	0x04	/* Sequencer memory mode */
#define MAP_MASK	0x02	/* Sequencer memory write mask */
#define READ_MASK	0x04	/* Graphics Controller read mask */
#define GR_MODE		0x05	/* Graphics Controller mode */
#define GR_MISC		0x06	/* Graphics Controller miscellaneous reg */

#define GR_GRAPHICS	0x01	/* Graphics mode in misc register above */
#define SCREEN_OFF	0x20	/* turn off VGA display */

#define	MEM_MAP		0xc	/* Mask for the memory mapping register */
#define	MAP_A01		0x0	/* Memory mapped to A0000 for 128K bytes */
#define	MAP_A02		0x4	/* Memory mapped to A0000 for 64K bytes */
#define	MAP_B0		0x8	/* Memory mapped to B0000 for 32K bytes */
#define	MAP_B8		0xc	/* Memory mapped to B8000 for 32K bytes */

/* definitions for the VGA Video DAC */
#define	PEL_READ	0x3c7	/* Pel address to start reading RGB data */
#define	PEL_WRITE	0x3c8	/* Pel address to start writing RGB data */
#define	PEL_DATA	0x3c9	/* Register to read or write RGB data */
#define NPEL_REGS	256	/* entries in Video DAC color table */

/* definitions for ringing the bell */
#define NORMBELL	1331	/* initial value loaded into timer */
#define BELLLEN		(HZ/10)	/* ring for 1/10 sec. between checks */
#define BELLCNT		2	/* check bell twice before turning off */
#define TONE_ON		3	/* 8254 gate 2 and speaker and-gate enabled */
#define TIMER		0x40	/* 8254.2 timer address */
#define TIMERCR		TIMER+3	/* timer control register address */
#define TIMER2		TIMER+2	/* timer tone generation port */
#define T_CTLWORD	0xB6	/* value for timer control word */
#define TONE_CTL	0x61	/* address for enabling timer port 2 */


#define	AD_REGS	0x01		/* Reload before accessing register	*/
#define AD_ACTIVE 0x02

struct cga_registers 
{
	unchar	cga_mode;		/* Mode select register value */
	unchar	cga_color;		/* Color select register value */
	ushort	cga_index;		/* Index into cga_videop array */
};

struct kdvtinfo {		/* device specific info for kd vt driver */
	scrnmapp_t		kv_scrnmap;	/* Output character map */
	unsigned		kv_sending;	/* Sending screen? */
	ushort			kv_rows;	/* Rows sent from screen */
	ushort			kv_cols;	/* Columns sent from screen */
	unchar			kv_kbmode;	/* keyboard mode */
	unchar			kv_dmode;	/* display mode */
	unchar	                kv_egamode;	/* Saved EGA mode */
	unchar			kv_flags;	/* flags */
	struct ansistate	kv_as;		/* ansi terminal state */
	struct v86dat		**kv_stashed_p_86;
	struct	proc		*kv_proc;	/* owner of virtual display */
	int			(*kv_procrtn)();/* proc routine */
	strmapp_t		kv_strbuf;	/* ptr to string table	*/
	stridxp_t		kv_stridx;	/* prt to index table   */
	ushort			*kv_scrbuf;	/* screen buffer	*/
	struct keyboardinfo	*kv_kb;	/* description of keyboard	*/
	struct adtstruct	*kv_ad;	/* description of adaptor	*/
};

/* Space in bytes consumed by all structures for one virtual terminal */
#define	VTTYSIZE	(sizeof(struct tty) + sizeof(struct vtty) + \
			 sizeof(struct kdvtinfo) + sizeof(ushort) * KD_MAXSCRSIZE + \
			 sizeof(struct v86dat *) + sizeof(strmap_t) + \
			 sizeof(stridx_t) + sizeof(scrnmap_t))

/*
 * Description of the current state of the keyboard.
 */

#define KDINPUT		64
struct keyboardinfo {
    /* entries below must be initialized by device specific code */
    ushort    kb_station;	/* the station number of this keybrd    */
    unchar    kb_type;		/* type of keyboard 			*/
    ushort    kb_iocinfo;	/* Returned by the KIOCINFO call	*/
    keymap_t  *kb_keymap; 	/* pointer to input keymap 		*/
    struct pfxstate *kb_pfxstr; /* pointer to prefix string 		*/
    unchar    (*kb_getchar)();	/* routine to retrieve input chars	*/
    int       (*kb_send)();	/* routine to send command to keyboard	*/
    unchar    kb_typerat;       /* typematic rate of the keyboard       */

    /* entries below are temporary variables used by kd_cmn */
    unchar    kb_sysreq; 	/* true if last char was ctl-sys req 	*/
    ushort    kb_state;  	/* kb shift/control/alt state 		*/
    int       kb_alt_seq;	/* Alt seq buildup			*/
    unchar    kb_prevscan;  	/* previous scan code 			*/

    /* entries below not used by kd_cmn code, for local info */
    unchar    kb_flags;		/* Keyboard present or absent		*/
    unchar    kb_cmd_state; 	/* current command 			*/
    unchar    kb_in_char[KDINPUT];	/* character in queue		*/
    char      kb_in_len;
    unchar    kb_cmd_queue[KDCQMAX];	/* kb command queue 		*/
    char      kb_cmd_qlen;  	/* length of command queue 		*/
};
#define	KB_ABSENT	0x01
#define	KB_PRESENT	0x02

#define	KD_TEXT		0		/* ANSI x3.64 emulation mode */
#define	KD_TEXT0	KD_TEXT		/* Alias for KD_TEXT */
#define	KD_GRAPHICS	1		/* Graphics mode */
#define KD_TEXT1        2       	/* Text mode doesn't load char gen */

/*
 * Values for kv_flags
 */
#define	KD_MAPPED	0x01		/* Display is mapped */
#define	KD_LOCKED	0x02		/* Keyboard is locked */
#define	KD_QRESERVE	0x04		/* Queue mode init in progress */
#define KD_ACTIVE	0x4		/* Active virtual display	*/
#define	KD_EXTEND	0x8		/* Enable extended char		*/
#define	KD_CLOSING	0x10		/* Process closing file		*/
#define	KD_CONS		0x80		/* console			*/


/*
 * Macro for setting a particular EGA register.
 */
#define out_reg(riptr, index, data)  {  outb((riptr)->ri_address, (index)); \
					outb((riptr)->ri_data, (data)); }
/*
 * Types for indexing into reginfo table.
 */
#define I_6845MONO	0
#define I_6845COLOR	1
#define I_EGAMONO	2
#define I_EGACOLOR	3
#define I_SEQ		4
#define I_GRAPH		5
#define I_ATTR		6
#define I_VGAATTR	7

/*
 * for VGA, we can also read a register
 */
#define in_reg(riptr, index, data)  {   outb((riptr)->ri_address, (index)); \
					data = inb((riptr)->ri_data); }

struct reginfo {
	ushort	ri_count;	/* number of registers */
	ushort	ri_address;	/* address register */
	ushort	ri_data;	/* data register */
};

struct m6845init {
	unchar  mi_hortot;	/* Reg  0: Horizontal Total     (chars) */
	unchar  mi_hordsp;	/* Reg  1: Horizontal Displayed (chars) */
	unchar  mi_hsnpos;	/* Reg  2: Hsync Position       (chars) */
	unchar  mi_hsnwid;	/* Reg  3: Hsync Width          (chars) */
	unchar  mi_vertot;	/* Reg  4: Vertical Total   (char rows) */
	unchar  mi_veradj;	/* Reg  5: Vtotal Adjust   (scan lines) */
	unchar  mi_vsndsp;	/* Reg  6: Vertical Display (char rows) */
	unchar  mi_vsnpos;	/* Reg  7: Vsync Position   (char rows) */
	unchar  mi_intlac;	/* Reg  8: Interlace Mode               */
	unchar  mi_maxscn;	/* Reg  9: Max Scan Line   (scan lines) */
	unchar  mi_curbeg;	/* Reg 10: Cursor Start    (scan lines) */
	unchar  mi_curend;	/* Reg 11: Cursor End      (scan lines) */
	unchar  mi_stadh;	/* Reg 12: Start Address (H)            */
	unchar  mi_stadl;	/* Reg 13: Start Address (L)            */
	unchar  mi_cursh;	/* Reg 14: Cursor (H)                   */
	unchar  mi_cursl;	/* Reg 15: Cursor (L)                   */
};

struct egainit {
	unchar  ei_hortot;	/* Reg  0: Horizontal Total */
	unchar  ei_hde;		/* Reg  1: Horizontal Display End */
	unchar  ei_shb;		/* Reg  2: Start horizontal blank */
	unchar  ei_ehb;		/* Reg  3: End horizontal blank */
	unchar  ei_shr;		/* Reg  4: Start horizontal retrace */
	unchar  ei_ehr;		/* Reg  5: End horizontal retrace */
	unchar  ei_vertot;	/* Reg  6: Vertical total */
	unchar  ei_ovflow;	/* Reg  7: Overflow */
	unchar  ei_prs;		/* Reg  8: Preset row scan */
	unchar  ei_maxscn;	/* Reg  9: Max Scan Line */
	unchar  ei_curbeg;	/* Reg 10: Cursor Start */
	unchar  ei_curend;	/* Reg 11: Cursor End */
	unchar  ei_stadh;	/* Reg 12: Start Address (H) */
	unchar  ei_stadl;	/* Reg 13: Start Address (L) */
	unchar  ei_cursh;	/* Reg 14: Cursor location (H) */
	unchar  ei_cursl;	/* Reg 15: Cursor location (L) */
	unchar	ei_vrs;		/* Reg 16: Vertical retrace start */
	unchar	ei_vre;		/* Reg 17: Vertical retrace end */
	unchar	ei_vde;		/* Reg 18: Vertical display end */
	unchar	ei_offset;	/* Reg 19: Offset */
	unchar	ei_undloc;	/* Reg 20: Underline location */
	unchar	ei_svb;		/* Reg 21: Start vertical blank */
	unchar	ei_evb;		/* Reg 22: End vertical blank */
	unchar	ei_mode;	/* Reg 23: Mode control */
	unchar	ei_lcomp;	/* Reg 24: Line compare */
};

struct reginit {
	unchar		seqtab[NSEQ];
	unchar		miscreg;
	struct egainit	egatab;
	unchar		attrtab[NATTR];
	unchar		graphtab[NGRAPH];
};

struct adtmode {
	unchar	am_capability;
	unchar	am_colmode;
	unchar	am_colsel;
};

/* Display mode definitions */
#define DM_B40x25	0		/* 40x25 black & white text */
#define DM_C40x25	1		/* 40x25 color text */
#define DM_B80x25	2		/* 80x25 black & white text */
#define DM_C80x25	3		/* 80x25 color text */
#define DM_BG320	4		/* 320x200 black & white graphics */
#define DM_CG320	5		/* 320x200 color graphics */
#define DM_BG640	6		/* 640x200 black & white graphics */
#define DM_EGAMONO80x25	7		/* EGA mode 7 */
#define LOAD_COLOR	8		/* mode for loading color characters */
#define LOAD_MONO	9		/* mode for loading mono characters */
#define DM_ENH_B80x43	10		/* 80x43 black & white text */
#define DM_ENH_C80x43	11		/* 80x43 color text */
#define DM_CG320_D	13		/* EGA mode D */
#define DM_CG640_E	14		/* EGA mode E */
#define DM_EGAMONOAPA	15		/* EGA mode F */
#define DM_CG640x350	16		/* EGA mode 10 */
#define DM_ENHMONOAPA2	17		/* EGA mode F with extended memory */
#define DM_ENH_CG640	18		/* EGA mode 10* */
#define DM_ENH_B40x25	19		/* enhanced 40x25 black & white text */
#define DM_ENH_C40x25	20		/* enhanced 40x25 color text */
#define DM_ENH_B80x25	21		/* enhanced 80x25 black & white text */
#define DM_ENH_C80x25	22		/* enhanced 80x25 color text */
/* Note:  Below are VGA modes that may not be compatible with XENIX */
#define DM_VGA_C40x25	23		/* VGA 40x25 color text (1+) */
#define DM_VGA_C80x25	24		/* VGA 80x25 color text (3+) */
#define DM_VGAMONO80x25	25		/* VGA mode 7+ */
#define DM_BG640x480	26		/* 640x480 black & white graphics (11)*/
#define DM_CG640x480	27		/* 640x480 color graphic 16  clrs (12)*/
#define DM_VGA_CG320	28		/* 320x200 color graphic 256 clrs (13)*/
#define DM_VGA_B40x25	29		/* VGA 40x25 black & white text (0+) */
#define DM_VGA_B80x25	30		/* VGA 80x25 black & white text (2+) */
#define DM_VGAMONOAPA	31		/* VGA mode F+ */
#define DM_VGA_CG640	32		/* VGA mode 10+ */
#define	DM_ENH_CGA	33		/* AT&T 640x400 CGA mode */
#define DM_ATT_640	34		/* AT&T 640x400 16 color graphics */
#define DM_VGA_B132x25  35              /* VGA 132x25 black & white text */
#define DM_VGA_C132x25  36              /* VGA 132x25 color text */
#define DM_VGA_B132x43  37              /* VGA 132x43 black & white text */
#define DM_VGA_C132x43  38              /* VGA 132x43 color text */

/* Xenix display mode definitions.  Most are identical to the internal
   definitions above. */
#define M_B40x25	DM_B40x25	/* black & white 40 columns */
#define M_C40x25	DM_C40x25	/* color 40 columns */
#define M_B80x25	DM_B80x25	/* black & white 80 columns */
#define M_C80x25	DM_C80x25	/* color 80 columns */
#define M_BG320		DM_BG320	/* black & white graphics 320x200 */
#define M_CG320		DM_CG320	/* color graphics 320x200 */
#define M_BG640		DM_BG640	/* black & white graphics 640x200 */
#define M_EGAMONO80x25  DM_EGAMONO80x25	/* ega-mono 80x25 */
#define M_CG320_D	DM_CG320_D	/* ega mode D */
#define M_CG640_E	DM_CG640_E	/* ega mode E */
#define M_EGAMONOAPA	DM_EGAMONOAPA	/* ega mode F */
#define M_CG640x350	DM_CG640x350	/* ega mode 10 */
#define M_ENHMONOAPA2	DM_ENHMONOAPA2	/* ega mode F with extended memory */
#define M_ENH_CG640	DM_ENH_CG640	/* ega mode 10* */
#define M_ENH_B40x25    DM_ENH_B40x25	/* enhanced black & white 40 columns */
#define M_ENH_C40x25    DM_ENH_C40x25	/* enhanced color 40 columns */
#define M_ENH_B80x25    DM_ENH_B80x25	/* enhanced black & white 80 columns */
#define M_ENH_C80x25    DM_ENH_C80x25	/* enhanced color 80 columns */
#define M_VGA_40x25	DM_VGA_C40x25 	/* VGA 40x25 color text (1+) */ 	
#define M_VGA_80x25	DM_VGA_C80x25	/* VGA 80x25 color text (3+) */
#define M_VGA_M80x25	DM_VGAMONO80x25	/* VGA mode 7+ */
#define M_VGA11		DM_BG640x480	/* 640x480 black & white graphics (11)*/
#define M_VGA12		DM_CG640x480	/* 640x480 color graphic 16  clrs (12)*/
#define M_VGA13		DM_VGA_CG320	/* 320x200 color graphic 256 clrs (13)*/
#define M_ENH_B80x43	0x70		/* ega black & white 80x43 */
#define M_ENH_C80x43	0x71		/* ega color 80x43 */
#define M_MCA_MODE	0xff		/* monochrome adapter mode */
#define	OFFSET_80x43	(M_ENH_B80x43-DM_ENH_B80x43)	/* Offset for converting 80x43 numbers */
#define M_ENH_CGA	DM_ENH_CGA	/* AT&T 640x400 CGA hardware mode - (Super-VU adapter) */

/* Defines for keyboard and display ioctl's */
#define KIOC		('K'<<8)
#define	KDDISPTYPE	(KIOC|1)	/* return display type to user */
#define	KDMAPDISP	(KIOC|2)	/* map display into user space */
#define	KDUNMAPDISP	(KIOC|3)	/* unmap display from user space */
#define	KDGKBENT	(KIOC|4)	/* get keyboard table entry */
#define	KDSKBENT	(KIOC|5)	/* set keyboard table entry */
#define	KDGKBMODE	(KIOC|6)	/* get keyboard translation mode */
#define	KDSKBMODE	(KIOC|7)	/* set keyboard translation mode */
#define	KDMKTONE	(KIOC|8)	/* sound tone */
#define	KDGETMODE	(KIOC|9)	/* get text/graphics mode */
#define	KDSETMODE	(KIOC|10)	/* set text/graphics mode */
#define	KDADDIO		(KIOC|11)	/* add I/O address to list */
#define	KDDELIO		(KIOC|12)	/* delete I/O address from list */
#define KDSBORDER	(KIOC|13)	/* set ega color border */
#define KDQUEMODE	(KIOC|15)	/* enable/disable queue mode */
#define KDADDINP        (KIOC|16)       /* add input into keyboard stream */
#define KDSETRAD	(KIOC|20)	/* set keyboard typematic rate/delay */
#define KDSCROLL	(KIOC|21)	/* set hardware scrolling on */
/* EJ 91.05.30 RC specific ioctls */
#define KDSKBCNV	(KIOC|30)	/* set keyboard 7-bit conv. table */
/* VP/ix reserved ioctls */
#define KDENABIO	(KIOC|60)	/* enable direct I/O to ports */
#define KDDISABIO	(KIOC|61)	/* disable direct I/O to ports */
#define KIOCINFO	(KIOC|62)	/* tell user what device we are */
#define KIOCSOUND	(KIOC|63)	/* start sound generation */
#define KDGKBTYPE	(KIOC|64)	/* get keyboard type */
#define KDGETLED	(KIOC|65)	/* get keyboard LED status */
#define KDSETLED	(KIOC|66)	/* set keyboard LED status */

/* Defines for Xenix keyboard and display ioctl's */
#define MIOC		('k' << 8)	/* Upper byte of mapping ioctl's */
#define GETFKEY   	(MIOC | 0)	/* Get function key */
#define SETFKEY   	(MIOC | 1)	/* Set function key */
#define GIO_SCRNMAP	(MIOC | 2)	/* Get screen output map table */
#define PIO_SCRNMAP	(MIOC | 3)	/* Set screen output map table */
#define	GIO_STRMAP_21	(MIOC | 4)	/* Get 2.1 function key string table */
#define	PIO_STRMAP_21	(MIOC | 5)	/* Put 2.1 function key string table */
#define GIO_KEYMAP	(MIOC | 6)	/* Get keyboard map table */
#define PIO_KEYMAP	(MIOC | 7)	/* Set keyboard map table */
#define GIO_STRMAP	(MIOC | 11)	/* Get function key string table */
#define PIO_STRMAP	(MIOC | 12)	/* Set function key string table */
#define GIO_ATTR	('a' << 8)	/* Get present screen attribute */
#define GIO_COLOR	('c' << 8)	/* Get whether adaptor is color */
#define MODESWITCH	('x' << 8)	/* Upper byte of mode switch ioctl's */
#define KDMODEMASK	0xff		/* Mask for lower byte of mode ioctl */
#define SW_B40x25	(MODESWITCH | DM_B40x25)	/* Select 40x25 b&w */
#define SW_C40x25	(MODESWITCH | DM_C40x25)	/* Select 40x25 clr */
#define SW_B80x25	(MODESWITCH | DM_B80x25)	/* Select 80x25 b&w */
#define SW_C80x25	(MODESWITCH | DM_C80x25)	/* Select 80x25 clr */
#define SW_BG320	(MODESWITCH | DM_BG320)	/* Select 320x200 b&w */
#define SW_CG320	(MODESWITCH | DM_CG320)	/* Select 320x200 color */
#define SW_BG640	(MODESWITCH | DM_BG640)	/* Select 640x200 b&w */
#define SW_EGAMONO80x25	(MODESWITCH | DM_EGAMONO80x25)	/* Select EGA mode 7 */
#define SW_CG320_D	(MODESWITCH | DM_CG320_D)	/* Select EGA mode D */
#define SW_CG640_E	(MODESWITCH | DM_CG640_E)	/* Select EGA mode E */
#define SW_EGAMONOAPA	(MODESWITCH | DM_EGAMONOAPA)	/* Select EGA mode F */
#define SW_CG640x350	(MODESWITCH | DM_CG640x350)	/* EGA mode 10 */
#define SW_ENH_MONOAPA2	(MODESWITCH | DM_ENHMONOAPA2)	/* EGA mode F* */
#define SW_ENH_CG640	(MODESWITCH | DM_ENH_CG640)	/* EGA mode 16 */
#define SW_ENHB40x25	(MODESWITCH | DM_ENH_B40x25)	/* 40x25 b&w */
#define SW_ENHC40x25	(MODESWITCH | DM_ENH_C40x25)	/* 40x25 color */
#define SW_ENHB80x25	(MODESWITCH | DM_ENH_B80x25)	/* 80x25 b&w */
#define SW_ENHC80x25	(MODESWITCH | DM_ENH_C80x25)	/* 80x25 color */
#define SW_ENHB80x43	(MODESWITCH | M_ENH_B80x43)	/* 80x43 b&w */
#define SW_ENHC80x43	(MODESWITCH | M_ENH_C80x43)	/* 80x43 color */
#define SW_MCAMODE	(MODESWITCH | M_MCA_MODE)	/* Reinitialize mono */
#define SW_ATT640	(MODESWITCH | DM_ATT_640)	/* 640x400 16 color */
#define SW_VGAMONOAPA	(MODESWITCH | DM_VGAMONOAPA)	/* VGA mode F+ */
#define SW_VGA_CG640    (MODESWITCH | DM_VGA_CG640)	/* VGA mode 10+ */
#define SW_VGA_B40x25	(MODESWITCH | DM_VGA_B40x25)	/* VGA 40x25 b&w text */
#define SW_VGA_C40x25	(MODESWITCH | DM_VGA_C40x25)	/* VGA 40x25 clr text */
#define SW_VGAB80x25	(MODESWITCH | DM_VGA_B80x25)	/* 80x25 vga b&w */
#define SW_VGAC80x25	(MODESWITCH | DM_VGA_C80x25)	/* 80x25 vga color */
#define SW_VGAMONO80x25	(MODESWITCH | DM_VGAMONO80x25)	/* VGA mode 7+ */
#define SW_BG640x480	(MODESWITCH | DM_BG640x480)	/* 640x480 vga b&w */
#define SW_CG640x480	(MODESWITCH | DM_CG640x480)	/* 640x480 vga color */
#define SW_VGA_CG320	(MODESWITCH | DM_VGA_CG320)	/* VGA mode 13 */
#define SW_VGA_B132x25  (MODESWITCH | DM_VGA_B132x25)   /* VGA 132x25 black & white text */
#define SW_VGA_C132x25  (MODESWITCH | DM_VGA_C132x25)   /* VGA 132x25 color text */
#define SW_VGA_B132x43  (MODESWITCH | DM_VGA_B132x43)   /* VGA 132x43 black & white text */
#define SW_VGA_C132x43  (MODESWITCH | DM_VGA_C132x43)   /* VGA 132x43 color text */

#define O_MODESWITCH	('S' << 8)	/* Upper byte of old mode ioctl's */
#define O_SW_B40x25	(O_MODESWITCH | DM_B40x25)	/* Select 40x25 b&w */
#define O_SW_C40x25	(O_MODESWITCH | DM_C40x25)	/* Select 40x25 clr */
#define O_SW_B80x25	(O_MODESWITCH | DM_B80x25)	/* Select 80x25 b&w */
#define O_SW_C80x25	(O_MODESWITCH | DM_C80x25)	/* Select 80x25 clr */
#define O_SW_BG320	(O_MODESWITCH | DM_BG320)	/* Select 320x200 b&w */
#define O_SW_CG320	(O_MODESWITCH | DM_CG320)	/* Select 320x200 clr */
#define O_SW_BG640	(O_MODESWITCH | DM_BG640)	/* Select 640x200 b&w */
#define O_SW_EGAMONO80x25	(O_MODESWITCH | DM_EGAMONO80x25)
#define O_SW_CG320_D	(O_MODESWITCH | DM_CG320_D)	/* Select EGA mode D */
#define O_SW_CG640_E	(O_MODESWITCH | DM_CG640_E)	/* Select EGA mode E */
#define O_SW_EGAMONOAPA	(O_MODESWITCH | DM_EGAMONOAPA)	/* Select EGA mode F */
#define O_SW_CG640x350	(O_MODESWITCH | DM_CG640x350)	/* EGA mode 10 */
#define O_SW_ENH_MONOAPA2	(O_MODESWITCH | DM_ENHMONOAPA2)	/* Mode F* */
#define O_SW_ENH_CG640	(O_MODESWITCH | DM_ENH_CG640)	/* EGA mode 16 */
#define O_SW_ENHB40x25	(O_MODESWITCH | DM_ENH_B40x25)	/* 40x25 b&w */
#define O_SW_ENHC40x25	(O_MODESWITCH | DM_ENH_C40x25)	/* 40x25 color */
#define O_SW_ENHB80x25	(O_MODESWITCH | DM_ENH_B80x25)	/* 80x25 b&w */
#define O_SW_ENHC80x25	(O_MODESWITCH | DM_ENH_C80x25)	/* 80x25 color */
#define O_SW_ENHB80x43	(O_MODESWITCH | M_ENH_B80x43)	/* 80x43 b&w */
#define O_SW_ENHC80x43	(O_MODESWITCH | M_ENH_C80x43)	/* 80x43 color */
#define O_SW_MCAMODE	(O_MODESWITCH | M_MCA_MODE)	/* Reinitialize mono */
#define O_SW_ATT640	(O_MODESWITCH | DM_ATT_640)	/* 640x400 16 color */
#define O_SW_ATT640	(O_MODESWITCH | DM_ATT_640)	/* 640x400 16 color */
#define O_SW_VGAMONOAPA	(O_MODESWITCH | DM_VGAMONOAPA)	/* VGA mode F+ */
#define O_SW_VGA_CG640  (O_MODESWITCH | DM_VGA_CG640)	/* VGA mode 10+ */
#define O_SW_VGA_B40x25	(O_MODESWITCH | DM_VGA_B40x25)	/* VGA 40x25 b&w text */
#define O_SW_VGA_C40x25	(O_MODESWITCH | DM_VGA_C40x25)	/* VGA 40x25 clr text */
#define O_SW_VGAB80x25	(O_MODESWITCH | DM_VGA_B80x25)	/* 80x25 vga b&w */
#define O_SW_VGAC80x25	(O_MODESWITCH | DM_VGA_C80x25)	/* 80x25 vga color */
#define O_SW_VGAMONO80x25 (O_MODESWITCH | DM_VGAMONO80x25) /* VGA mode 7+ */
#define O_SW_BG640x480	(O_MODESWITCH | DM_BG640x480)	/* 640x480 vga b&w */
#define O_SW_CG640x480	(O_MODESWITCH | DM_CG640x480)	/* 640x480 vga color */
#define O_SW_VGA_CG320	(O_MODESWITCH | DM_VGA_CG320)	/* VGA mode 13 */
/* XENIX compatibility */
#define SW_VGA40x25	SW_VGA_C40x25	/* VGA 40x25 clr text */
#define SW_VGA80x25	SW_VGAC80x25	/* 80x25 vga color */
#define SW_VGAM80x25	SW_VGAMONO80x25	/* VGA mode 7+ */
#define SW_VGA11	SW_BG640x480	/* 640x480 vga b&w */
#define SW_VGA12	SW_CG640x480	/* 640x480 vga color */
#define SW_VGA13	SW_VGA_CG320	/* VGA mode 13 */

#define	CGAIOC		('C' << 8)	/* Upper byte of CGA ioctl's */
#define CGAIO		(CGAIOC | 2)	/* Do I/O on CGA port */
#define CGA_GET 	(CGAIOC | 3)	/* Get CGA mode setting */
#define PGAIOC		('P' << 8)	/* Upper byte of PGA ioctl's */
#define PGAIO		(PGAIOC | 2)	/* Do I/O on PGA port */
#define PGA_GET 	(PGAIOC | 3)	/* Get PGA mode setting */
#define EGAIOC		('E' << 8)	/* Upper byte of EGA ioctl's */
#define EGAIO		(EGAIOC | 2)	/* Do I/O on EGA port */
#define EGA_GET 	(EGAIOC | 3)	/* Get EGA mode setting */
#define VGAIOC		('E' << 8)	/* Upper byte of VGA ioctl's */
#define VGAIO		(VGAIOC | 66)	/* Do I/O on VGA port */
#define VGA_GET 	(VGAIOC | 67)	/* Get VGA mode setting */
#define VGA_IOPRIVL 	(VGAIOC | 68)	/* Get in/out privilege for vga port */
#define MCAIOC		('M' << 8)	/* Upper byte of MCA ioctl's */
#define MCAIO		(MCAIOC | 2)	/* Do I/O on MCA port */
#define MCA_GET 	(MCAIOC | 3)	/* Get MCA mode setting */
#define CONSIOC		('c' << 8)	/* Upper byte of console ioctl's */
#define CONS_CURRENT 	(CONSIOC | 1)	/* Get display adapter type */
#define CONS_GET	(CONSIOC | 2)	/* Get display mode setting */
#define CONSIO		(CONSIOC | 3)	/* Do I/O on current adaptor port */
#define PIO_FONT8x8	(CONSIOC | 64)  
#define GIO_FONT8x8	(CONSIOC | 65)  
#define PIO_FONT8x14	(CONSIOC | 66)  
#define GIO_FONT8x14	(CONSIOC | 67)  
#define PIO_FONT8x16	(CONSIOC | 68)  
#define GIO_FONT8x16	(CONSIOC | 69)  
#define CONSADP		(CONSIOC | 72)  /* get specific adapter screen */	

#define MAPADAPTER 	('m' << 8)	/* Upper byte of mapping ioctl's */
#define MAPCONS 	(MAPADAPTER)	/* Map display adapter memory */
#define MAPMONO 	(MAPADAPTER | MONO)	/* Map MCA adapter memory */
#define MAPCGA  	(MAPADAPTER | CGA) 	/* Map CGA adapter memory */
#define MAPPGA  	(MAPADAPTER | PGA)	/* Map PGA adapter memory */
#define MAPEGA  	(MAPADAPTER | EGA)	/* Map EGA adapter memory */
#define MAPVGA  	(MAPADAPTER | VGA)	/* Map VGA adapter memory */
#define SWAPCONS 	('s' << 8)	/* Upper byte of switching ioctl's */
#define SWAPMONO 	(SWAPCONS | MONO)	/* Swap MCA adapter */
#define SWAPCGA  	(SWAPCONS | CGA)	/* Swap CGA adapter */
#define SWAPPGA  	(SWAPCONS | PGA)	/* Swap PGA adapter */
#define SWAPEGA  	(SWAPCONS | EGA)	/* Swap EGA adapter */
#define SWAPVGA  	(SWAPCONS | VGA)	/* Swap VGA adapter */
#define TIOCKBON  	(TIOC | 8)	/* Turn on extended keys */
#define TIOCKBOF  	(TIOC | 9)	/* Turn off extended keys */
#define KBENABLED 	(TIOC | 10)	/* Are extended keys enabled? */

/* VP/ix keyboard types */
#define	KB_84		1		/* 84-key keyboard */
#define	KB_101		2		/* 101/102-key keyboard */
#define	KB_OTHER	3		/* other type of keyboard */

struct kdaddinp {		/* add specified scan code to input stream*/
	int	len;
	unchar	data[3];
};

struct kbentry {
	unchar	kb_table;	/* which table to use */
	unchar	kb_index;	/* which entry in table */
	ushort	kb_value;	/* value to get/set in table */
};

#define	MKDIOADDR	64	/* max no. of I/O addresses supported */
#define	MKDCONFADDR	20	/* max no. of configurable I/O addresses */

struct kd_disparam {
	long	type;		/* display type */
	char	*addr;		/* display memory address */
	ushort	ioaddr[MKDIOADDR];	/* valid I/O addresses */
};

struct kd_memloc {
	char	*vaddr;		/* virtual address to map to */
	char	*physaddr;	/* physical address to map from */
	long	length;		/* size in bytes to map */
	long	ioflg;		/* enable I/O addresses if non-zero */
};

struct	kd_range {
	unsigned long	start;		/* start address of video memory */
	unsigned long	end;		/* last address of video memory */
};

struct kd_quemode {
	int	qsize;	/* desired # elements in queue (set by user) */
	int	signo;	/* signal number to send when queue goes non-empty
							(set by user) */
	char	*qaddr;	/* user virtual address of queue (set by driver) */
};

/* Defines for port I/O ioctls for graphics adapter ports */
#define IN_ON_PORT	1
#define OUT_ON_PORT	0

/* Structures for port I/O ioctls for graphics adapter ports */
#pragma pack(2)

struct port_io_struct {
	char	dir;		/* Direction flag (in or out) */
	ushort	port;		/* Port address */
	char	data;		/* Port data */
};
struct port_io_arg {
	struct port_io_struct args[4];	/* Port I/O's for single call */
};
#pragma pack()


struct adtstruct {
	ushort	*ad_scraddr;	/* address of adaptor memory */
	int	(*ad_activate)();	/* Activate an adaptor */
	int	(*ad_colormove)();	/* Move things in color memory	*/
	int	(*ad_colorcopy)();	/* Copy things in color memory	*/
	int	(*ad_bell)();	/* Turn bell on or off */
	int	(*ad_dsply)();	/* Turn display on or off - CGA only */
	int	(*ad_setcursor)();	/* Set the cursor position */
	int	(*ad_setcursorshape)();	/* Set the cursor shape */
	int	(*ad_setstartaddr)();	/* Set the start address  */
	int	(*ad_setdir)();	/* Set the adapter write direction */
	int	(*ad_restore)();/* Program the adapter to given mode */
	int	(*ad_setborder)();/* Set the border parameters */
	int	(*ad_getfont)();/* Return the specified font to user */
	int	(*ad_putfont)();/* Replace the font with specified font */
	int	(*ad_setreg)();	/* Allow direct writes to registers */
	unchar	(*ad_getreg)();	/* Allow direct reads from registers */
	ushort	(*ad_getcursor)();/* Return the cursor position */
	ushort	(*ad_getcursorshape)();/* Return the cursor shape */
	ushort	(*ad_getstartaddr)();/* Return the start address */
	ushort  ad_station;	/* the station number of this adaptor */
	ushort	ad_scrmask;	/* mask for fitting text into screen memory */
	unchar	ad_type;	/* adapter type */
	unchar	ad_undattr;
	unchar	ad_egamode;	/* Saved EGA mode */
	unchar	ad_dfltegamode;	/* Default EGA mode */
	unchar	ad_fontcurrent;	/* Current font loaded */
	int	ad_bellcnt; 	/* Nuber of ticks left */
	int	ad_toneon;	/* Is bell on or not?  */
	struct	kd_disparam  ad_param;	/* Type of display installed	*/
	struct	kd_memloc ad_mapaddr;	/* for mapped displays		*/
	struct  kd_range  ad_basevmem[MKDIOADDR];  /* valid memory addresses */
	int	ad_vmemcnt; 	/* number of valid memory addresses */
	int     ad_scroll;     /* enables or disables hardware scrolling */

	/* entries below not used by kd_cmn code, for local info */
	ushort	ad_status;	/* status information	*/
	ushort	ad_modesel;	/* mode values 			*/
	ushort	ad_address;	/* I/O address 0x3B? or 0x3D? */
};