home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0010 - 0019 / ibm0010-0019 / ibm0010.tar / ibm0010 / UNIX3862.ZIP / U386-06.ZIP / U386-6.TD0 / usr / include / sys / kd.h < prev    next >
Encoding:
C/C++ Source or Header  |  1988-06-26  |  30.6 KB  |  744 lines

  1. /*    Copyright (c) 1984, 1986, 1987, 1988 AT&T    */
  2. /*      All Rights Reserved      */
  3.  
  4. /*    THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T    */
  5. /*    The copyright notice above does not evidence any       */
  6. /*    actual or intended publication of such source code.    */
  7.  
  8. /*    Copyright (c) 1987, 1988 Microsoft Corporation    */
  9. /*      All Rights Reserved    */
  10.  
  11. /*    This Module contains Proprietary Information of Microsoft  */
  12. /*    Corporation and should be treated as Confidential.       */
  13.  
  14. /*
  15.  * definitions for PC AT keyboard/display driver
  16.  */
  17.  
  18. #ident    "@(#)head.sys:kd.h    1.6.2.11"
  19.  
  20. /*
  21.  * Types of displays supported
  22.  */
  23. #define    KD_MONO        01    /* monochrome display adapter */
  24. #define    KD_HERCULES    02    /* Hercules monochrome graphics adapter */
  25. #define    KD_CGA        03    /* color graphics adapter */
  26. #define    KD_EGA        04    /* enhanced graphics adapter */
  27. #define KD_VGA        05    /* IBM video graphics array adapter */
  28.  
  29. /* Xenix display/adapter definitions */
  30. #define MONO    1        /* Xenix value for monochrome */
  31. #define CGA    2        /* Xenix value for color graphics */
  32. #define PGA    3        /* Xenix value for professional graphics */
  33. #define EGA    4        /* Xenix value for enhanced graphics */
  34.  
  35. /*
  36.  * Virtual display constants
  37.  */
  38. #define    KD_WIDTH    80        /* normal screen width */
  39. #define    KD_NARROWWIDTH    40        /* narrow screen width */
  40. #define    KD_HEIGHT    25        /* screen height */
  41. #define    KD_TALLHEIGHT    43        /* tall screen height */
  42. #define    KD_MAXSCRSIZE    (KD_WIDTH * KD_TALLHEIGHT)    /* max screen size */
  43. #define    KD_SCRTOBUF    0        /* transfer from screen to buffer */
  44. #define    KD_BUFTOSCR    1        /* transfer from buffer to screen */
  45.  
  46. /*
  47.  * keyboard controller I/O port addresses
  48.  */
  49. #define KB_OUT    0x60        /* output buffer R/O */
  50. #define KB_IDAT 0x60        /* input buffer data write W/O */
  51. #define KB_STAT 0x64        /* keyboard controller status R/O */
  52. #define KB_ICMD 0x64        /* input buffer command write W/O */
  53.  
  54. /*
  55.  * keyboard controller commands and flags
  56.  */
  57. #define KB_INBF        0x02    /* input buffer full flag */
  58. #define KB_OUTBF    0x01    /* output buffer full flag */
  59. #define KB_GATE20    0x02    /* set this bit to allow addresses > 1Mb */
  60. #define KB_ROP        0xD0    /* read output port command */
  61. #define KB_WOP        0xD1    /* write output port command */
  62. #define    KB_RCB        0x20    /* read command byte command */
  63. #define    KB_WCB        0x60    /* write command byte command */
  64. #define    KB_ENAB        0xae    /* enable keyboard interface */
  65. #define    KB_DISAB    0x10    /* disable keyboard */
  66. #define    KB_EOBFI    0x01    /* enable interrupt on output buffer full */
  67. #define KB_ACK        0xFA    /* Acknowledgement byte from keyboard */
  68. #define    KB_RESETCPU    0xFE    /* command to reset AT386 cpu */
  69. #define KB_READID    0xF2    /* command to read keyboard id */
  70.  
  71. /*
  72.  * Structure of keyboard translation table
  73.  */
  74. #define NUM_KEYS    256        /* Maximum number of keys */
  75. #define NUM_STATES    8        /* Number of key states */
  76. #pragma pack(2)
  77. typedef struct {
  78.     short  n_keys ;            /* Number of entries in table */
  79.     struct key_t {
  80.         unsigned char map[NUM_STATES];    /* Key code for each state */
  81.         unsigned char spcl;    /* Bits marking states as special */
  82.         unsigned char flgs;    /* Flags */
  83.     } key[NUM_KEYS+1];        /* One entry for each key */
  84. } keymap_t;
  85. #pragma pack()
  86. /*
  87.  * Keyboard translation modes
  88.  */
  89. #define    K_RAW        0x00        /* Just send raw up/down scan codes */
  90. #define    K_XLATE        0x01        /* Translate scan codes to ASCII */
  91. /*
  92.  * character table flag bits.
  93.  */
  94. #define    NUMLCK        0x8000    /* flag key as affected by num lock key */
  95. #define    CAPLCK        0x4000    /* flag key as affected by caps lock key */
  96. #define    CTLKEY        0x2000    /* flag key as afected by control keys */
  97. /*
  98.  * character table key types
  99.  */
  100. #define    NORMKEY        0x0000    /* key is a normal key, send with no prefix */
  101. #define    SHIFTKEY    0x0100    /* key is a shift key */
  102. #define    BREAKKEY    0x0200    /* key is a break key */
  103. #define    SS2PFX        0x0300    /* prefix key with <ESC> N */
  104. #define    SS3PFX        0x0400    /* prefix key with <ESC> O */
  105. #define    CSIPFX        0x0500    /* prefix key with <ESC> [ */
  106. #define    SPECIALKEY    0x0600    /* special key type */
  107. #define    NOKEY        0x0f00    /* flag a key as nonexistant */
  108. #define    TYPEMASK    0x0f00    /* select key type bits */
  109.  
  110.  
  111. /*
  112.  * Table selectors for KDSKBENT/KDGKBENT ioctl's
  113.  */
  114. #define    K_NORMTAB    0x00        /* Select unaugmented keyboard table */
  115. #define    K_SHIFTTAB    0x01        /* Select shifted keyboard table */
  116. #define    K_ALTTAB    0x02        /* Select alted keyboard table */
  117. #define    K_ALTSHIFTTAB    0x03        /* Select alt-shifted keyboard table */
  118. #define    K_SRQTAB    0x04        /* select sysreq table */
  119. /*
  120.  * Make/break distinctions
  121.  */
  122. #define    KBD_BREAK    0x80        /* Key make/break bit (break=1) */
  123. /*
  124.  * Flags for key state calculation.
  125.  */
  126. #define SHIFTED    0x01            /* Keys are shifted */
  127. #define CTRLED    0x02            /* Keys are ctrl'd */
  128. #define ALTED     0x04            /* Keys are alt'd */
  129. /*
  130.  * Possible key states.  Used as index into translation entry for key.
  131.  */
  132. #define NORMAL        0        /* Unmodified */
  133. #define SHIFT        SHIFTED        /* Shift key depressed */
  134. #define CTRL        CTRLED        /* Ctrl key depressed */
  135. #define    SHFCTL        (CTRLED|SHIFTED)    /* Shift and ctrl keys */
  136. #define ALT        ALTED        /* Alt key depressed */
  137. #define    ALTSHF        (ALTED|SHIFTED)    /* Shift and alt keys depressed */
  138. #define    ALTCTL        (ALTED|CTRLED)    /* Ctrl and alt keys depressed */
  139. #define    ALTSHFCTL    (ALTED|CTRLED|SHIFTED)    /* Shift, ctrl, and alt keys */
  140. /*
  141.  * Key map table flags
  142.  */
  143. #define    KMF_CLOCK    0x01        /* Key affected by caps lock */
  144. #define    KMF_NLOCK    0x02        /* Key affected by num lock */
  145. /*
  146.  * kb_state bit definitions
  147.  */
  148. #define LEFT_SHIFT    0x0001    /* left shift key depressed */
  149. #define    LEFT_ALT    0x0002    /* left alt key depressed */
  150. #define    LEFT_CTRL    0x0004    /* left control key depressed */
  151. #define    RIGHT_SHIFT    0x0008    /* right shift key depressed */
  152. #define    RIGHT_ALT    0x0010    /* right alt key depressed */
  153. #define    RIGHT_CTRL    0x0020    /* right control key depressed */
  154. #define    CAPS_LOCK    0x0040    /* caps lock key down */
  155. #define    NUM_LOCK    0x0080    /* num lock key down */
  156. #define    SCROLL_LOCK    0x0100    /* scroll lock key down */
  157. #define    ALTSET        (LEFT_ALT|RIGHT_ALT)
  158. #define    SHIFTSET    (LEFT_SHIFT|RIGHT_SHIFT)
  159. #define    CTRLSET        (LEFT_CTRL|RIGHT_CTRL)
  160. #define    NONTOGGLES    (ALTSET|SHIFTSET|CTRLSET)
  161. /*
  162.  * Keyboard scan codes
  163.  */
  164. #define    SCROLLLOCK    0x46        /* Scroll lock key */
  165. /*
  166.  * Number of entries in 0xe0 prefix translation table
  167.  */
  168. #define    ESCTBLSIZ    18        /* Entries in 101/102 key table */
  169. /*
  170.  * Character flags.  Should not conflict with FRERROR and friends in tty.h
  171.  */
  172. #define NO_CHAR        0x8000        /* Do not generate a char */
  173. #define GEN_ESCLSB    0x0800        /* Generate <ESC> [ prefix to char */
  174. #define GEN_ESCN    0x0400        /* Generate <ESC> N prefix to char */
  175. #define GEN_ZERO    0x0200        /* Generate 0 prefix to char */
  176. #define    GEN_FUNC    0x0100        /* Generate function key */
  177. #define GEN_ESCO    0x1000        /* Generate <ESC> O prefix to char */
  178. /*
  179.  * Special key code definitions
  180.  */
  181. #define    K_NOP    0            /* Keys with no function */
  182. #define K_LSH    2            /* Left shift */
  183. #define K_RSH    3            /* Right shift */
  184. #define K_CLK    4            /* Caps lock */
  185. #define K_NLK    5            /* Num lock */
  186. #define K_SLK    6            /* Scroll lock */
  187. #define K_ALT    7            /* Alt */
  188. #define    K_BTAB    8            /* Back tab */
  189. #define K_CTL    9            /* Control */
  190. #define    K_LAL    10            /* Left alt */
  191. #define    K_RAL    11            /* Right alt */
  192. #define    K_LCT    12            /* Left control */
  193. #define    K_RCT    13            /* Right control */
  194. #define    K_FUNF    27            /* First function key */
  195. #define    K_FUNL    122            /* Last function key */
  196. #define    K_SRQ    123            /* System request */
  197. #define    K_BRK    124            /* Break */
  198. #define    K_ESN    125            /* <ESC> N <unalt'd value> sequence */
  199. #define    K_ESO    126
  200. #define    K_ESL    127
  201. #define    K_RBT    128            /* Reboot system */
  202. #define    K_DBG    129            /* Invoke debugger */
  203. #define    K_NEXT    130
  204. #define    K_PREV    131
  205. #define    K_FRCNEXT 132
  206. #define    K_FRCPREV 133
  207. #define K_VTF    134
  208. #define    K_VTL    148
  209. #define K_MGRF    149
  210. #define    K_MGRL    191
  211. #define    K_PFXF    192
  212. #define    K_PFXL    255
  213.  
  214.  
  215.  
  216. /*
  217.  * Macro for recognizing scan codes for special keys
  218.  */
  219. #define    IS_SPECIAL(s,i)    (kdkeymap.key[(s)].spcl & (0x80>>(i)))    /* Special? */
  220. #define    IS_NPKEY(s)    (((s) >= 71) && ((s) <=83))    /* Number pad? */
  221. /*
  222.  * Function key constants and macros
  223.  */
  224. #define    NSTRKEYS    (K_FUNL-K_FUNF+1)    /* Number of string keys */
  225. #define STRTABLN    512        /* Max length of sum of all strings */
  226. #define STRTABLN_21    256        /* Max length of sum in version 2.1 */
  227. #define    IS_FUNKEY(c)    (((c) >= K_FUNF) && ((c) <= K_FUNL) || ((c) >= K_PFXF) && ((c) <= K_PFXL))    /* Function? */
  228. typedef unchar strmap_t[STRTABLN];    /* String map table type */
  229. typedef ushort stridx_t[NSTRKEYS + 1];    /* String map index type */
  230.  
  231. typedef unsigned char    srqtab_t[NUM_KEYS + 1];
  232.  
  233. /* Shorthand for constants so columns line up neatly */
  234. #define    KF    K_FUNF            /* First function key */
  235. #define    L_O    0            /* Key not affected by locks */
  236. #define    L_C    KMF_CLOCK        /* Key affected by caps lock */
  237. #define    L_N    KMF_NLOCK        /* Key affected by num lock */
  238. #define    L_B    (KMF_CLOCK|KMF_NLOCK)    /* Key affected by caps and num lock */
  239.  
  240. /*
  241.  * Structure used for SETFKEY and GETFKEY ioctls
  242.  */
  243. #define MAXFK    30            /* Maximum length of string */
  244. #pragma pack(2)
  245. struct fkeyarg {
  246.     unsigned short    keynum;        /* Function key number */
  247.     unchar         keydef[MAXFK];    /* Key definition */
  248.     char        flen;        /* Length of key definition */
  249. };
  250. #pragma pack()
  251. /*
  252.  * Constants for extended keys
  253.  */
  254. #define    NUMEXTSTATES    4        /* Number of extended states */
  255.  
  256. /* Commands for LED and typematic start/rate on the AT */
  257. #define    KDCQMAX        8    /* length of keyboard command queue */
  258. #define LED_WARN    0xED    /* Tell kbd that following byte is led status */
  259. #define LED_SCR        0x01    /* Flag bit for scroll lock */
  260. #define LED_CAP        0x04    /* Flag bit for cap lock */
  261. #define LED_NUM        0x02    /* Flag bit for num lock */
  262. #define    ACK_WAIT    0x01    /* flag for waiting for kbd response */
  263. #define    TYPE_WARN    0xF3    /* command--next byte is typematic values */
  264. #define    TYPE_VALS    0x20    /* max speed (30/s) and 1/2 sec delay */
  265. #define    SCAN_WARN    0xF0    /* kbd command to set scan code set */
  266.  
  267.  
  268. /*
  269.  * Screen mapping constants and types
  270.  */
  271. #define NUM_ASCII    256        /* Number of ASCII characters */
  272. typedef unsigned char scrnmap_t[NUM_ASCII];    /* Screen map type */
  273. typedef unsigned char *scrnmapp_t;    /* Pointer to screen map type */
  274.  
  275. /*
  276.  * type of adapter installed, matches bits in CMOS ram
  277.  */
  278. #define    MCAP_UNK    0xff    /* adapter not determined yet */
  279. #define MCAP_MONO    0x03    /* mono adapter installed */
  280. #define MCAP_COLOR    0x02    /* color adapter installed in 80 column mode */
  281. #define MCAP_COLOR40    0x01    /* color adapter installed in 40 column mode */
  282. #define MCAP_EGA    0x00    /* EGA adapter installed */
  283.  
  284. /* 6845 base addresses */
  285. #define    MONO_REGBASE    0x03b4    /* Base register address for mono modes */
  286. #define    COLOR_REGBASE    0x03d4    /* Base register address for color modes */
  287.  
  288. /* offsets from 6845 base address for various registers */
  289. #define DATA_REG    0x1
  290. #define MODE_REG    0x4
  291. #define MODE2_REG    0x0A    /* rite-vu card only */
  292. #define COLOR_REG    0x5    /* color adapter only */
  293. #define STATUS_REG    0x6
  294.  
  295. /* definitions for bits in the color adapter mode register */
  296. #define M_ALPHA40    0x00    /* 40 by 25 alphanumeric */
  297. #define M_ALPHA80    0x01    /* 80 by 25 alphanumeric */
  298. #define M_GRAPH        0x02    /* 320x200 or 640x200 graphics */
  299. #define M_BW        0x04    /* black & white */
  300. #define M_ENABLE    0x08    /* video enable */
  301. #define M_HIGHRES    0x10    /* 640x200 B&W graphics */
  302. #define M_BLINK        0x20    /* enable blink attribute */
  303.  
  304. /* definitions for bits in the color adapter mode2 register ( rite-vu card )*/
  305. #define    M_GRAPH2    0x01    /* 640x400 graphics AT&T mode */
  306. #define    M_DEGAUSS    0x02    /* degauss color monitor */
  307. #define    M_ALTCHAR    0x04    /* rite-vu card alternate character set */
  308. #define    M_PGSEL        0x08    /* switch to 2nd 16kbytes of memory */
  309. #define    M_UNDRLINE    0x40    /* underline white chars, not blue */
  310.  
  311.  
  312. /* definitions for bits in the color adapter status register */
  313. #define S_UPDATEOK    0x01    /* safe to update regen buffer */
  314. #define S_VSYNC        0x08    /* raster is in vertical retrace mode */
  315.  
  316. /* definitions for loading data into CRT controller registers */
  317. #define R_STARTADRH    12    /* start address, high word */
  318. #define R_STARTADRL    13    /* start address, low word */
  319. #define R_CURADRH    14    /* cursor address, high word */
  320. #define R_CURADRL    15    /* cursor address, low word */
  321.  
  322. /* definitions for the EGA */
  323. #define IN_STAT_0    0x3c2    /* input status register zero */
  324. #define MISC_OUT    0x3c2    /* miscellaneous output register */
  325. #define IN_STAT_1    6    /* offset of input status register 1 */
  326. #define FEAT_CTRL    6    /* offset of feature control register */
  327. #define SW_SENSE    0x10    /* switch sense bit in input status zero */
  328. #define CLKSEL        2    /* shift to select switch number */
  329. #define GRAPH_1_POS    0x3cc    /* graphics 1 position */
  330. #define GRAPH_2_POS    0x3ca    /* graphics 2 position */
  331. #define GRAPHICS1    0    /* value for graphics 1 */
  332. #define GRAPHICS2    1    /* value for graphics 2 */
  333. #define SEQ_RUN        0x03    /* start sequencer */
  334. #define PALETTE_ENABLE    0x20    /* palette address source in attribute reg */
  335. #define CHGEN_BASE    0xa0000    /* base address for character generator */
  336. #define CHGEN_SIZE    8192    /* character generator is 8K */
  337. #define MONO_BASE    0xb0000    /* Location of monochrome display memory */
  338. #define MONO_SIZE    0x8000    /* Monochrome has 32K of memory available */
  339. #define MONO_SCRMASK    0x7ff    /* Mono text memory wraps at 4K */
  340. #define COLOR_BASE    0xb8000    /* Location of color display memory */
  341. #define COLOR_SIZE    0x8000    /* Color has up to 32K of memory available */
  342. #define COLOR_SCRMASK    0x1fff    /* Color text memory wraps at 16K */
  343. #define    EGA_BASE    0xa0000    /* Location of enhanced display memory */
  344. #define EGA_SIZE    0x10000    /* EGA has at 64K of memory available */
  345. #define EGA_LGSIZE    0x20000    /* Larger EGA has 128K of memory available */
  346. #define EGA_SCRMASK    0x3fff    /* EGA text memory wraps at 32K (minimum) */
  347. #define NSEQ        5    /* number of sequencer registers */
  348. #define NATTR        20    /* number of attribute registers */
  349. #define NGRAPH        9    /* number of graphics registers */
  350. #define LOAD_COLOR    8    /* mode number for loading color characters */
  351. #define LOAD_MONO    9    /* mode number for loading mono characters */
  352.  
  353. /* Font types supported */
  354. #define    FONTINV        0
  355. #define    FONT8x8        1        /* 8x8 font */
  356. #define    FONT8x14    2        /* 8x14 font */
  357. #define    FONT8x14m    3        /* 8x14 font for monochrome */
  358.  
  359. /* Offsets of font tables in ROM */
  360. #define F8x8_OFF    0xf30        /* Offset of 8x8 font table */
  361. #define    F8x8_BPC    8        /* Bytes per character in 8x8 font */
  362. #define    F8x8_NCH    256        /* Number of characters in 8x8 font */
  363.  
  364. #define    F8x14_OFF    0        /* Offset of 8x14 font table */
  365. #define F8x14m_OFF    0xe00        /* Offset of 8x14 mono fudge table */
  366. #define    F8x14_BPC    14        /* Bytes per character in 8x14 font */
  367. #define    F8x16_BPC    16        /* Bytes per character in 8x16 font */
  368. #define    F8x14_NCH    256        /* Number of characters in 8x14 font */
  369.  
  370. #define    FONT_TAB_LIM    0x172f        /* Total size of all font tables */
  371.  
  372. /* definitions for bits in the attribute byte */
  373. #define BLINK        0x80
  374. #define BRIGHT        0x08
  375. #define REVERSE        0x70
  376. #define NORM        0x07
  377. #define UNDERLINE    0x01    /* underline on mono, blue on color */
  378.  
  379. #define CLEAR        (NORM<<8|0x20)
  380. #define BCLEAR        (NORM|BRIGHT<<8|0x20)
  381. #define ALLATTR        (BLINK|BRIGHT|REVERSE|NORM|UNDERLINE)
  382. #define NOTBGRND    (ALLATTR&(~REVERSE))
  383. #define NOTFGRND    (ALLATTR&(~NORM))
  384.  
  385. /* definitions for ringing the bell */
  386. #define NORMBELL    1331    /* initial value loaded into timer */
  387. #define BELLLEN        (HZ/10)    /* ring for 1/10 sec. between checks */
  388. #define BELLCNT        2    /* check bell twice before turning off */
  389. #define TONE_ON        3    /* 8254 gate 2 and speaker and-gate enabled */
  390. #define TIMER        0x40    /* 8254.2 timer address */
  391. #define TIMERCR        TIMER+3    /* timer control register address */
  392. #define TIMER2        TIMER+2    /* timer tone generation port */
  393. #define T_CTLWORD    0xB6    /* value for timer control word */
  394. #define TONE_CTL    0x61    /* address for enabling timer port 2 */
  395.  
  396.  
  397. struct adtstruct {
  398.     ushort    *ad_scraddr;    /* address of adaptor memory */
  399.     ushort    ad_scrmask;    /* mask for fitting text into screen memory */
  400.     ushort    ad_address;    /* address of corresponding M6845 or EGA */
  401.     unchar    ad_type;    /* adapter type */
  402.     unchar    ad_colsel;    /* color select register byte */
  403.     unchar    ad_modesel;    /* mode register byte */
  404.     unchar    ad_mode2sel;    /* mode2 register byte (rite-vu card ) */
  405.     unchar    ad_undattr;    /* attribute to use when underlining */
  406. };
  407.  
  408.  
  409. struct kdvtinfo {        /* device specific info for kd vt driver */
  410.     scrnmapp_t        kv_scrnmap;    /* Output character map */
  411.     unsigned        kv_sending;    /* Sending screen? */
  412.     ushort            kv_rows;    /* Rows sent from screen */
  413.     ushort            kv_cols;    /* Columns sent from screen */
  414.     unchar            kv_kbmode;    /* keyboard mode */
  415.     unchar            kv_dmode;    /* display mode */
  416.     unchar            kv_flags;    /* flags */
  417.     unchar            kv_egamode;    /* Saved EGA mode */
  418.     struct ansistate    kv_as;    /* ansi terminal state */
  419. };
  420.  
  421. #define    KD_TEXT        0    /* ansi x3.64 emulation mode */
  422. #define KD_TEXT0    0    /* same as above */
  423. #define KD_TEXT1    2    /* new text mode doesnt load char generator */
  424. #define    KD_GRAPHICS    1    /* graphics mode */
  425.  
  426. /*
  427.  * Values for kv_flags
  428.  */
  429. #define    KD_MAPPED    0x01        /* Display is mapped */
  430. #define    KD_LOCKED    0x02        /* Keyboard is locked */
  431. #define    KD_QRESERVE    0x04        /* Queue mode init in progress */
  432.  
  433. /*
  434.  * Types for indexing into reginfo table.
  435.  */
  436. #define I_6845MONO    0
  437. #define I_6845COLOR    1
  438. #define I_EGAMONO    2
  439. #define I_EGACOLOR    3
  440. #define I_SEQ        4
  441. #define I_GRAPH        5
  442. #define I_ATTR        6
  443.  
  444. /*
  445.  * Macro for setting a particular EGA register.
  446.  */
  447. #define out_reg(riptr, index, data)    outb((riptr)->ri_address, (index)); \
  448.                     outb((riptr)->ri_data, (data));
  449.  
  450. struct reginfo {
  451.     ushort    ri_count;    /* number of registers */
  452.     ushort    ri_address;    /* address register */
  453.     ushort    ri_data;    /* data register */
  454. };
  455.  
  456. struct m6845init {
  457.     unchar  mi_hortot;    /* Reg  0: Horizontal Total     (chars) */
  458.     unchar  mi_hordsp;    /* Reg  1: Horizontal Displayed (chars) */
  459.     unchar  mi_hsnpos;    /* Reg  2: Hsync Position       (chars) */
  460.     unchar  mi_hsnwid;    /* Reg  3: Hsync Width          (chars) */
  461.     unchar  mi_vertot;    /* Reg  4: Vertical Total   (char rows) */
  462.     unchar  mi_veradj;    /* Reg  5: Vtotal Adjust   (scan lines) */
  463.     unchar  mi_vsndsp;    /* Reg  6: Vertical Display (char rows) */
  464.     unchar  mi_vsnpos;    /* Reg  7: Vsync Position   (char rows) */
  465.     unchar  mi_intlac;    /* Reg  8: Interlace Mode               */
  466.     unchar  mi_maxscn;    /* Reg  9: Max Scan Line   (scan lines) */
  467.     unchar  mi_curbeg;    /* Reg 10: Cursor Start    (scan lines) */
  468.     unchar  mi_curend;    /* Reg 11: Cursor End      (scan lines) */
  469.     unchar  mi_stadh;    /* Reg 12: Start Address (H)            */
  470.     unchar  mi_stadl;    /* Reg 13: Start Address (L)            */
  471.     unchar  mi_cursh;    /* Reg 14: Cursor (H)                   */
  472.     unchar  mi_cursl;    /* Reg 15: Cursor (L)                   */
  473. };
  474.  
  475. struct egainit {
  476.     unchar  ei_hortot;    /* Reg  0: Horizontal Total */
  477.     unchar  ei_hde;        /* Reg  1: Horizontal Display End */
  478.     unchar  ei_shb;        /* Reg  2: Start horizontal blank */
  479.     unchar  ei_ehb;        /* Reg  3: End horizontal blank */
  480.     unchar  ei_shr;        /* Reg  4: Start horizontal retrace */
  481.     unchar  ei_ehr;        /* Reg  5: End horizontal retrace */
  482.     unchar  ei_vertot;    /* Reg  6: Vertical total */
  483.     unchar  ei_ovflow;    /* Reg  7: Overflow */
  484.     unchar  ei_prs;        /* Reg  8: Preset row scan */
  485.     unchar  ei_maxscn;    /* Reg  9: Max Scan Line */
  486.     unchar  ei_curbeg;    /* Reg 10: Cursor Start */
  487.     unchar  ei_curend;    /* Reg 11: Cursor End */
  488.     unchar  ei_stadh;    /* Reg 12: Start Address (H) */
  489.     unchar  ei_stadl;    /* Reg 13: Start Address (L) */
  490.     unchar  ei_cursh;    /* Reg 14: Cursor location (H) */
  491.     unchar  ei_cursl;    /* Reg 15: Cursor location (L) */
  492.     unchar    ei_vrs;        /* Reg 16: Vertical retrace start */
  493.     unchar    ei_vre;        /* Reg 17: Vertical retrace end */
  494.     unchar    ei_vde;        /* Reg 18: Vertical display end */
  495.     unchar    ei_offset;    /* Reg 19: Offset */
  496.     unchar    ei_undloc;    /* Reg 20: Underline location */
  497.     unchar    ei_svb;        /* Reg 21: Start vertical blank */
  498.     unchar    ei_evb;        /* Reg 22: End vertical blank */
  499.     unchar    ei_mode;    /* Reg 23: Mode control */
  500.     unchar    ei_lcomp;    /* Reg 24: Line compare */
  501. };
  502.  
  503. struct reginit {
  504.     unchar        seqtab[NSEQ];
  505.     unchar        miscreg;
  506.     struct egainit    egatab;
  507.     unchar        attrtab[NATTR];
  508.     unchar        graphtab[NGRAPH];
  509. };
  510.  
  511. struct adtmode {
  512.     unchar    am_capability;
  513.     unchar    am_colmode;
  514.     unchar    am_colsel;
  515. };
  516.  
  517. /* Display mode definitions */
  518. #define DM_B40x25    0        /* 40x25 black & white text */
  519. #define DM_C40x25    1        /* 40x25 color text */
  520. #define DM_B80x25    2        /* 80x25 black & white text */
  521. #define DM_C80x25    3        /* 80x25 color text */
  522. #define DM_BG320    4        /* 320x200 black & white graphics */
  523. #define DM_CG320    5        /* 320x200 color graphics */
  524. #define DM_BG640    6        /* 640x200 black & white graphics */
  525. #define DM_EGAMONO80x25    7        /* EGA mode 7 */
  526. #define LOAD_COLOR    8        /* mode for loading color characters */
  527. #define LOAD_MONO    9        /* mode for loading mono characters */
  528. #define DM_ENH_B80x43    10        /* 80x43 black & white text */
  529. #define DM_ENH_C80x43    11        /* 80x43 color text */
  530. #define DM_CG320_D    13        /* EGA mode D */
  531. #define DM_CG640_E    14        /* EGA mode E */
  532. #define DM_EGAMONOAPA    15        /* EGA mode F */
  533. #define DM_CG640x350    16        /* EGA mode 10 */
  534. #define DM_ENHMONOAPA2    17        /* EGA mode F with extended memory */
  535. #define DM_ENH_CG640    18        /* EGA mode 10* */
  536. #define DM_ENH_B40x25    19        /* enhanced 40x25 black & white text */
  537. #define DM_ENH_C40x25    20        /* enhanced 40x25 color text */
  538. #define DM_ENH_B80x25    21        /* enhanced 80x25 black & white text */
  539. #define DM_ENH_C80x25    22        /* enhanced 80x25 color text */
  540. #define    DM_ENH_CGA    23        /* AT&T 640x400 CGA hw emulation mode */
  541. #define DM_ATT_640    24        /* AT&T 640x400 16 color graphics */
  542.  
  543. /* Xenix display mode definitions.  Most are identical to the internal
  544.    definitions above. */
  545. #define M_B40x25    DM_B40x25    /* black & white 40 columns */
  546. #define M_C40x25    DM_C40x25    /* color 40 columns */
  547. #define M_B80x25    DM_B80x25    /* black & white 80 columns */
  548. #define M_C80x25    DM_C80x25    /* color 80 columns */
  549. #define M_BG320        DM_BG320    /* black & white graphics 320x200 */
  550. #define M_CG320        DM_CG320    /* color graphics 320x200 */
  551. #define M_BG640        DM_BG640    /* black & white graphics 640x200 */
  552. #define M_EGAMONO80x25  DM_EGAMONO80x25    /* ega-mono 80x25 */
  553. #define M_CG320_D    DM_CG320_D    /* ega mode D */
  554. #define M_CG640_E    DM_CG640_E    /* ega mode E */
  555. #define M_EGAMONOAPA    DM_EGAMONOAPA    /* ega mode F */
  556. #define M_CG640x350    DM_CG640x350    /* ega mode 10 */
  557. #define M_ENHMONOAPA2    DM_ENHMONOAPA2    /* ega mode F with extended memory */
  558. #define M_ENH_CG640    DM_ENH_CG640    /* ega mode 10* */
  559. #define M_ENH_B40x25    DM_ENH_B40x25    /* enhanced black & white 40 columns */
  560. #define M_ENH_C40x25    DM_ENH_C40x25    /* enhanced color 40 columns */
  561. #define M_ENH_B80x25    DM_ENH_B80x25    /* enhanced black & white 80 columns */
  562. #define M_ENH_C80x25    DM_ENH_C80x25    /* enhanced color 80 columns */
  563. #define M_ENH_B80x43    0x70        /* ega black & white 80x43 */
  564. #define M_ENH_C80x43    0x71        /* ega color 80x43 */
  565. #define M_MCA_MODE    0xff        /* monochrome adapter mode */
  566. #define    OFFSET_80x43    (M_ENH_B80x43-DM_ENH_B80x43)    /* Offset for converting 80x43 numbers */
  567. #define M_ENH_CGA    DM_ENH_CGA    /* AT&T 640x400 CGA hardware mode - (Super-VU adapter) */
  568.  
  569. /* Defines for keyboard and display ioctl's */
  570. #define KIOC        ('K'<<8)
  571. #define    KDDISPTYPE    (KIOC|1)    /* return display type to user */
  572. #define    KDMAPDISP    (KIOC|2)    /* map display into user space */
  573. #define    KDUNMAPDISP    (KIOC|3)    /* unmap display from user space */
  574. #define    KDGKBENT    (KIOC|4)    /* get keyboard table entry */
  575. #define    KDSKBENT    (KIOC|5)    /* set keyboard table entry */
  576. #define    KDGKBMODE    (KIOC|6)    /* get keyboard translation mode */
  577. #define    KDSKBMODE    (KIOC|7)    /* set keyboard translation mode */
  578. #define    KDMKTONE    (KIOC|8)    /* sound tone */
  579. #define    KDGETMODE    (KIOC|9)    /* get text/graphics mode */
  580. #define    KDSETMODE    (KIOC|10)    /* set text/graphics mode */
  581. #define    KDADDIO        (KIOC|11)    /* add I/O address to list */
  582. #define    KDDELIO        (KIOC|12)    /* delete I/O address from list */
  583. #define KDSBORDER    (KIOC|13)    /* set ega color border */
  584. #define KDQUEMODE    (KIOC|15)    /* enable/disable queue mode */
  585. /* VP/ix reserved ioctls */
  586. #define KDENABIO    (KIOC|60)    /* enable direct I/O to ports */
  587. #define KDDISABIO    (KIOC|61)    /* disable direct I/O to ports */
  588. #define KIOCINFO    (KIOC|62)    /* tell user what device we are */
  589. #define KIOCSOUND    (KIOC|63)    /* start sound generation */
  590. #define KDGKBTYPE    (KIOC|64)    /* get keyboard type */
  591. #define KDGETLED    (KIOC|65)    /* get keyboard LED status */
  592. #define KDSETLED    (KIOC|66)    /* set keyboard LED status */
  593.  
  594. /* Defines for Xenix keyboard and display ioctl's */
  595. #define MIOC        ('k' << 8)    /* Upper byte of mapping ioctl's */
  596. #define GETFKEY       (MIOC | 0)    /* Get function key */
  597. #define SETFKEY       (MIOC | 1)    /* Set function key */
  598. #define GIO_SCRNMAP    (MIOC | 2)    /* Get screen output map table */
  599. #define PIO_SCRNMAP    (MIOC | 3)    /* Set screen output map table */
  600. #define    GIO_STRMAP_21    (MIOC | 4)    /* Get 2.1 function key string table */
  601. #define    PIO_STRMAP_21    (MIOC | 5)    /* Put 2.1 function key string table */
  602. #define GIO_KEYMAP    (MIOC | 6)    /* Get keyboard map table */
  603. #define PIO_KEYMAP    (MIOC | 7)    /* Set keyboard map table */
  604. #define GIO_STRMAP    (MIOC | 11)    /* Get function key string table */
  605. #define PIO_STRMAP    (MIOC | 12)    /* Set function key string table */
  606. #define GIO_ATTR    ('a' << 8)    /* Get present screen attribute */
  607. #define GIO_COLOR    ('c' << 8)    /* Get whether adaptor is color */
  608.  
  609. #define MODESWITCH    ('x' << 8)    /* Upper byte of mode switch ioctl's */
  610. #define KDMODEMASK    0xff        /* Lower byte of mode switch ioctl's */
  611. #define SW_B40x25    (MODESWITCH | DM_B40x25)    /* Select 40x25 b&w */
  612. #define SW_C40x25    (MODESWITCH | DM_C40x25)    /* Select 40x25 clr */
  613. #define SW_B80x25    (MODESWITCH | DM_B80x25)    /* Select 80x25 b&w */
  614. #define SW_C80x25    (MODESWITCH | DM_C80x25)    /* Select 80x25 clr */
  615. #define SW_BG320    (MODESWITCH | DM_BG320)    /* Select 320x200 b&w */
  616. #define SW_CG320    (MODESWITCH | DM_CG320)    /* Select 320x200 color */
  617. #define SW_BG640    (MODESWITCH | DM_BG640)    /* Select 640x200 b&w */
  618. #define SW_EGAMONO80x25    (MODESWITCH | DM_EGAMONO80x25)    /* Select EGA mode 7 */
  619. #define SW_CG320_D    (MODESWITCH | DM_CG320_D)    /* Select EGA mode D */
  620. #define SW_CG640_E    (MODESWITCH | DM_CG640_E)    /* Select EGA mode E */
  621. #define SW_EGAMONOAPA    (MODESWITCH | DM_EGAMONOAPA)    /* Select EGA mode F */
  622. #define SW_CG640x350    (MODESWITCH | DM_CG640x350)    /* EGA mode 10 */
  623. #define SW_ENH_MONOAPA2    (MODESWITCH | DM_ENHMONOAPA2)    /* EGA mode F* */
  624. #define SW_ENH_CG640    (MODESWITCH | DM_ENH_CG640)    /* EGA mode 16 */
  625. #define SW_ENHB40x25    (MODESWITCH | DM_ENH_B40x25)    /* 40x25 b&w */
  626. #define SW_ENHC40x25    (MODESWITCH | DM_ENH_C40x25)    /* 40x25 color */
  627. #define SW_ENHB80x25    (MODESWITCH | DM_ENH_B80x25)    /* 80x25 b&w */
  628. #define SW_ENHC80x25    (MODESWITCH | DM_ENH_C80x25)    /* 80x25 color */
  629. #define SW_ENHB80x43    (MODESWITCH | M_ENH_B80x43)    /* 80x43 b&w */
  630. #define SW_ENHC80x43    (MODESWITCH | M_ENH_C80x43)    /* 80x43 color */
  631. #define SW_MCAMODE    (MODESWITCH | M_MCA_MODE)    /* Reinitialize mono */
  632. #define SW_ATT640    (MODESWITCH | DM_ATT_640)    /* 640x400 16 color */
  633.  
  634. #define O_MODESWITCH    ('S' << 8)    /* Upper byte of mode switch ioctl's */
  635. #define O_SW_B40x25    (O_MODESWITCH | DM_B40x25)    /* Select 40x25 b&w */
  636. #define O_SW_C40x25    (O_MODESWITCH | DM_C40x25)    /* Select 40x25 clr */
  637. #define O_SW_B80x25    (O_MODESWITCH | DM_B80x25)    /* Select 80x25 b&w */
  638. #define O_SW_C80x25    (O_MODESWITCH | DM_C80x25)    /* Select 80x25 clr */
  639. #define O_SW_BG320    (O_MODESWITCH | DM_BG320)    /* Select 320x200 b&w */
  640. #define O_SW_CG320    (O_MODESWITCH | DM_CG320)    /* Select 320x200 color */
  641. #define O_SW_BG640    (O_MODESWITCH | DM_BG640)    /* Select 640x200 b&w */
  642. #define O_SW_EGAMONO80x25    (O_MODESWITCH | DM_EGAMONO80x25)    /* Select EGA mode 7 */
  643. #define O_SW_CG320_D    (O_MODESWITCH | DM_CG320_D)    /* Select EGA mode D */
  644. #define O_SW_CG640_E    (O_MODESWITCH | DM_CG640_E)    /* Select EGA mode E */
  645. #define O_SW_EGAMONOAPA    (O_MODESWITCH | DM_EGAMONOAPA)    /* Select EGA mode F */
  646. #define O_SW_CG640x350    (O_MODESWITCH | DM_CG640x350)    /* EGA mode 10 */
  647. #define O_SW_ENH_MONOAPA2    (O_MODESWITCH | DM_ENHMONOAPA2)    /* EGA mode F* */
  648. #define O_SW_ENH_CG640    (O_MODESWITCH | DM_ENH_CG640)    /* EGA mode 16 */
  649. #define O_SW_ENHB40x25    (O_MODESWITCH | DM_ENH_B40x25)    /* 40x25 b&w */
  650. #define O_SW_ENHC40x25    (O_MODESWITCH | DM_ENH_C40x25)    /* 40x25 color */
  651. #define O_SW_ENHB80x25    (O_MODESWITCH | DM_ENH_B80x25)    /* 80x25 b&w */
  652. #define O_SW_ENHC80x25    (O_MODESWITCH | DM_ENH_C80x25)    /* 80x25 color */
  653. #define O_SW_ENHB80x43    (O_MODESWITCH | M_ENH_B80x43)    /* 80x43 b&w */
  654. #define O_SW_ENHC80x43    (O_MODESWITCH | M_ENH_C80x43)    /* 80x43 color */
  655. #define O_SW_MCAMODE    (O_MODESWITCH | M_MCA_MODE)    /* Reinitialize mono */
  656. #define O_SW_ATT640    (O_MODESWITCH | DM_ATT_640)    /* 640x400 16 color */
  657.  
  658. #define    CGAIOC        ('C' << 8)    /* Upper byte of CGA ioctl's */
  659. #define CGAIO        (CGAIOC | 2)    /* Do I/O on CGA port */
  660. #define CGA_GET     (CGAIOC | 3)    /* Get CGA mode setting */
  661. #define PGAIOC        ('P' << 8)    /* Upper byte of PGA ioctl's */
  662. #define PGAIO        (PGAIOC | 2)    /* Do I/O on PGA port */
  663. #define PGA_GET     (PGAIOC | 3)    /* Get PGA mode setting */
  664. #define EGAIOC        ('E' << 8)    /* Upper byte of EGA ioctl's */
  665. #define EGAIO        (EGAIOC | 2)    /* Do I/O on EGA port */
  666. #define EGA_GET     (EGAIOC | 3)    /* Get EGA mode setting */
  667. #define MCAIOC        ('M' << 8)    /* Upper byte of MCA ioctl's */
  668. #define MCAIO        (MCAIOC | 2)    /* Do I/O on MCA port */
  669. #define MCA_GET     (MCAIOC | 3)    /* Get MCA mode setting */
  670. #define CONSIOC        ('c' << 8)    /* Upper byte of console ioctl's */
  671. #define CONS_CURRENT     (CONSIOC | 1)    /* Get display adapter type */
  672. #define CONS_GET    (CONSIOC | 2)    /* Get display mode setting */
  673. #define MAPADAPTER     ('m' << 8)    /* Upper byte of mapping ioctl's */
  674. #define MAPCONS     (MAPADAPTER)    /* Map display adapter memory */
  675. #define MAPMONO     (MAPADAPTER | MONO)    /* Map MCA adapter memory */
  676. #define MAPCGA      (MAPADAPTER | CGA)     /* Map CGA adapter memory */
  677. #define MAPPGA      (MAPADAPTER | PGA)    /* Map PGA adapter memory */
  678. #define MAPEGA      (MAPADAPTER | EGA)    /* Map EGA adapter memory */
  679. #define SWAPCONS     ('s' << 8)    /* Upper byte of switching ioctl's */
  680. #define SWAPMONO     (SWAPCONS | MONO)    /* Swap MCA adapter */
  681. #define SWAPCGA      (SWAPCONS | CGA)    /* Swap CGA adapter */
  682. #define SWAPPGA      (SWAPCONS | PGA)    /* Swap PGA adapter */
  683. #define SWAPEGA      (SWAPCONS | EGA)    /* Swap EGA adapter */
  684. #define TIOCKBON      (TIOC | 8)    /* Turn on extended keys */
  685. #define TIOCKBOF      (TIOC | 9)    /* Turn off extended keys */
  686. #define KBENABLED     (TIOC | 10)    /* Are extended keys enabled? */
  687.  
  688. /* VP/ix keyboard types */
  689. #define KB_84        1
  690. #define KB_101        2
  691. #define KB_OTHER    3
  692.  
  693. struct kbentry {
  694.     unchar    kb_table;    /* which table to use */
  695.     unchar    kb_index;    /* which entry in table */
  696.     ushort    kb_value;    /* value to get/set in table */
  697. };
  698.  
  699. #define    MKDCONFADDR    20    /* max no. of configurable addrs 
  700.                  * that can be supported */
  701. #define    MKDIOADDR    64    /* max no. of I/O addresses supported */
  702.  
  703. struct kd_disparam {
  704.     long    type;        /* display type */
  705.     char    *addr;        /* display memory address */
  706.     ushort    ioaddr[MKDIOADDR];    /* valid I/O addresses */
  707. };
  708.  
  709. struct kd_memloc {
  710.     char    *vaddr;        /* virtual address to map to */
  711.     char    *physaddr;    /* physical address to map from */
  712.     long    length;        /* size in bytes to map */
  713.     long    ioflg;        /* enable I/O addresses if non-zero */
  714. };
  715.  
  716. struct    kd_range {
  717.     int    start;        /* start address of video memory */
  718.     int    end;        /* last address of video memory */
  719. };
  720.  
  721. struct kd_quemode {
  722.     int    qsize;    /* desired # elements in queue (set by user) */
  723.     int    signo;    /* signal number to send when queue goes non-empty
  724.                             (set by user) */
  725.     char    *qaddr;    /* user virtual address of queue (set by driver) */
  726. };
  727.  
  728. /* Defines for port I/O ioctls for graphics adapter ports */
  729. #define IN_ON_PORT    1
  730. #define OUT_ON_PORT    0
  731.  
  732. /* Structures for port I/O ioctls for graphics adapter ports */
  733. #pragma pack(2)
  734. struct port_io_struct {
  735.     char    dir;        /* Direction flag (in or out) */
  736.     ushort    port;        /* Port address */
  737.     char    data;        /* Port data */
  738. };
  739. struct port_io_arg {
  740.     struct port_io_struct args[4];    /* Port I/O's for single call */
  741. };
  742. #pragma pack()
  743.  
  744.