1 /* 2 * Copyright (c) 1988 University of Utah. 3 * Copyright (c) 1990 The Regents of the University of California. 4 * All rights reserved. 5 * 6 * This code is derived from software contributed to Berkeley by 7 * the Systems Programming Group of the University of Utah Computer 8 * Science Department. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 3. All advertising materials mentioning features or use of this software 19 * must display the following acknowledgement: 20 * This product includes software developed by the University of 21 * California, Berkeley and its contributors. 22 * 4. Neither the name of the University nor the names of its contributors 23 * may be used to endorse or promote products derived from this software 24 * without specific prior written permission. 25 * 26 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 27 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 28 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 29 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 30 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 31 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 36 * SUCH DAMAGE. 37 * 38 * from: Utah Hdr: itevar.h 1.1 90/07/09 39 * from: @(#)itevar.h 7.2 (Berkeley) 11/4/90 40 * $Id: itevar.h,v 1.3 1993/09/02 18:08:05 mw Exp $ 41 */ 42 43 #define UNIT(dev) minor(dev) 44 45 struct itesw { 46 int (*ite_init)(); 47 int (*ite_deinit)(); 48 int (*ite_clear)(); 49 int (*ite_putc)(); 50 int (*ite_cursor)(); 51 int (*ite_scroll)(); 52 }; 53 54 /* maximum number of argument characters (<CSI>33;34;3m for example) */ 55 #define ARGBUF_SIZE 256 56 57 struct ite_softc { 58 int flags; 59 int type; 60 int open_cnt; 61 struct grf_softc *grf; 62 void *priv; 63 short curx, cury; 64 short cursorx, cursory; 65 u_char *font; 66 u_char *cursor; 67 u_char font_lo, font_hi; 68 short rows, cols; 69 short cpl; 70 short ftheight, ftwidth; 71 short attribute; 72 u_char *attrbuf; 73 short planemask; 74 short pos; 75 char imode, fpd, hold; 76 u_char escape, cursor_opt, key_repeat; 77 /* not currently used, but maintained */ 78 char GL, GR, G0, G1, G2, G3; 79 char linefeed_newline, auto_wrap; 80 char cursor_appmode, keypad_appmode; 81 char argbuf[ARGBUF_SIZE], *ap, *tabs; 82 char emul_level, eightbit_C1; 83 int top_margin, bottom_margin, inside_margins; 84 short save_curx, save_cury, save_attribute; 85 }; 86 87 /* emulation levels: */ 88 #define EMUL_VT100 1 89 #define EMUL_VT300_8 2 90 #define EMUL_VT300_7 3 91 92 /* Flags */ 93 #define ITE_ALIVE 0x01 /* hardware exists */ 94 #define ITE_INITED 0x02 /* device has been initialized */ 95 #define ITE_CONSOLE 0x04 /* device can be console */ 96 #define ITE_ISCONS 0x08 /* device is console */ 97 #define ITE_ACTIVE 0x10 /* device is being used as ITE */ 98 #define ITE_INGRF 0x20 /* device in use as non-ITE */ 99 100 /* Types - indices into itesw */ 101 #define ITE_CUSTOMCHIPS 0 102 #define ITE_TIGA_A2410 1 103 #define ITE_RETINA 2 104 105 #ifdef DO_WEIRD_ATTRIBUTES 106 #define attrloc(ip, y, x) \ 107 (ip->attrbuf + ((y) * ip->cols) + (x)) 108 109 #define attrclr(ip, sy, sx, h, w) \ 110 bzero(ip->attrbuf + ((sy) * ip->cols) + (sx), (h) * (w)) 111 112 #define attrmov(ip, sy, sx, dy, dx, h, w) \ 113 bcopy(ip->attrbuf + ((sy) * ip->cols) + (sx), \ 114 ip->attrbuf + ((dy) * ip->cols) + (dx), \ 115 (h) * (w)) 116 117 #define attrtest(ip, attr) \ 118 ((* (u_char *) attrloc(ip, ip->cury, ip->curx)) & attr) 119 120 #define attrset(ip, attr) \ 121 ((* (u_char *) attrloc(ip, ip->cury, ip->curx)) = attr) 122 #else 123 #define attrloc(ip, y, x) 0 124 #define attrclr(ip, sy, sx, h, w) 125 #define attrmov(ip, sy, sx, dy, dx, h, w) 126 #define attrtest(ip, attr) 0 127 #define attrset(ip, attr) 128 #endif 129 130 131 /* 132 * X and Y location of character 'c' in the framebuffer, in pixels. 133 */ 134 #define charX(ip,c) \ 135 (((c) % (ip)->cpl) * (ip)->ftwidth + (ip)->fontx) 136 137 #define charY(ip,c) \ 138 (((c) / (ip)->cpl) * (ip)->ftheight + (ip)->fonty) 139 140 /* Character attributes */ 141 #define ATTR_NOR 0x0 /* normal */ 142 #define ATTR_INV 0x1 /* inverse */ 143 #define ATTR_UL 0x2 /* underline */ 144 #define ATTR_BOLD 0x4 /* bold */ 145 #define ATTR_BLINK 0x8 /* blink */ 146 #define ATTR_ALL (ATTR_INV | ATTR_UL|ATTR_BOLD|ATTR_BLINK) 147 148 /* Keyboard attributes */ 149 #define ATTR_KPAD 0x80 /* keypad transmit */ 150 151 /* Replacement Rules */ 152 #define RR_CLEAR 0x0 153 #define RR_COPY 0x3 154 #define RR_XOR 0x6 155 #define RR_COPYINVERTED 0xc 156 157 #define SCROLL_UP 0x01 158 #define SCROLL_DOWN 0x02 159 #define SCROLL_LEFT 0x03 160 #define SCROLL_RIGHT 0x04 161 #define DRAW_CURSOR 0x05 162 #define ERASE_CURSOR 0x06 163 #define MOVE_CURSOR 0x07 164 #define START_CURSOROPT 0x08 /* at start of output. May disable cursor */ 165 #define END_CURSOROPT 0x09 /* at end, make sure cursor state is ok */ 166 167 /* special key codes */ 168 #define KBD_LEFT_SHIFT 0x60 169 #define KBD_RIGHT_SHIFT 0x61 170 #define KBD_CAPS_LOCK 0x62 171 #define KBD_CTRL 0x63 172 #define KBD_LEFT_ALT 0x64 173 #define KBD_RIGHT_ALT 0x65 174 #define KBD_LEFT_META 0x66 175 #define KBD_RIGHT_META 0x67 176 177 /* modifier map for use in itefilter() */ 178 #define KBD_MOD_LSHIFT (1<<0) 179 #define KBD_MOD_RSHIFT (1<<1) 180 #define KBD_MOD_SHIFT (KBD_MOD_LSHIFT | KBD_MOD_RSHIFT) 181 #define KBD_MOD_CTRL (1<<2) 182 #define KBD_MOD_LALT (1<<3) 183 #define KBD_MOD_RALT (1<<4) 184 #define KBD_MOD_ALT (KBD_MOD_LALT | KBD_MOD_RALT) 185 #define KBD_MOD_LMETA (1<<5) 186 #define KBD_MOD_RMETA (1<<6) 187 #define KBD_MOD_META (KBD_MOD_LMETA | KBD_MOD_RMETA) 188 #define KBD_MOD_CAPS (1<<7) 189 190 /* type for the second argument to itefilter(). Note that the 191 driver doesn't support key-repeat for console-mode, since it can't use 192 timeout() for polled I/O. */ 193 194 enum caller { ITEFILT_TTY, ITEFILT_CONSOLE, ITEFILT_REPEATER }; 195 196 #define TABSIZE 8 197 #define TABEND(u) (ite_tty[u]->t_winsize.ws_col - TABSIZE) 198 199 #ifdef KERNEL 200 extern struct ite_softc ite_softc[]; 201 #endif 202