Annotation of 43BSDTahoe/sys/vaxuba/qduser.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1982, 1986 Regents of the University of California.
                      3:  * All rights reserved.  The Berkeley software License Agreement
                      4:  * specifies the terms and conditions for redistribution.
                      5:  *
                      6:  *             @(#)qduser.h    1.4  Berkeley  6/3/88
                      7:  */
                      8: /* derived from: @(#)qduser.h  6.1     (ULTRIX)        11/24/87       */
                      9: /************************************************************************
                     10:  *                                                                     *
                     11:  *                     Copyright (c) 1986 by                           *
                     12:  *             Digital Equipment Corporation, Maynard, MA              *
                     13:  *                     All rights reserved.                            *
                     14:  *                                                                     *
                     15:  *   This software is furnished under a license and may be used and    *
                     16:  *   copied  only  in accordance with the terms of such license and    *
                     17:  *   with the  inclusion  of  the  above  copyright  notice.   This    *
                     18:  *   software  or  any  other copies thereof may not be provided or    *
                     19:  *   otherwise made available to any other person.  No title to and    *
                     20:  *   ownership of the software is hereby transferred.                  *
                     21:  *                                                                     *
                     22:  *   The information in this software is subject to change  without    *
                     23:  *   notice  and should not be construed as a commitment by Digital    *
                     24:  *   Equipment Corporation.                                            *
                     25:  *                                                                     *
                     26:  *   Digital assumes no responsibility for the use  or  reliability    *
                     27:  *   of its software on equipment which is not supplied by Digital.    *
                     28:  *                                                                     *
                     29:  ************************************************************************/
                     30: 
                     31: /***************************************************************************
                     32: *
                     33: *      QDUSER...
                     34: *      This file defines values shared between the driver and a client
                     35: *
                     36: ***************************************************************************/
                     37: 
                     38: /***************************************************************************
                     39: *      revision history:
                     40: ****************************************************************************
                     41: *
                     42: * 21 jul 86  ram    fixed define of CURSOR_MIN_Y
                     43: * 25 nov 85  longo  added macro and bit defines for DMA error flags
                     44: * 11 nov 85  longo  renamed _vs_eventqueue to "qdinput" struct
                     45: * 23 oct 85  longo  added more defines to the DMA stuff
                     46: * 17 oct 85  longo  changed "struct rgb" chars to be unsigned
                     47: * 16 oct 85  longo  added new TABLET support definitions
                     48: * 15 oct 85  longo  re-wrote DMA queue access macros
                     49: * 08 oct 85  longo  added status flag manipulation macros to DMA stuff
                     50: * 02 oct 85  longo  added support for color map write buffer loading
                     51: * 26 sep 85  longo  removed adder sertup params from DMA request struct
                     52: * 23 sep 85  longo  added DMA queue access macros
                     53: * 30 aug 85  longo  fixed crock in "qdiobuf" struct compile-time sizing. Also
                     54: *                  removed DMAcontrol struct from DMA buffer for field test
                     55: * 26 aug 85  longo  put in conditional include of "qevent.h" for user prg's
                     56: * 18 jul 85  longo  changed semantics so that head is tail and tail is head
                     57: * 12 jul 85  longo  moved "mouse_report" struct and defs over to qd_data.c
                     58: * 11 jul 85  longo  added device coordinate to gate array cursor coordinate
                     59: *                  transformation macros
                     60: * 03 jul 85  longo  changed kernel typdef's for data types to long-hand
                     61: * 10 may 85  longo  created
                     62: *
                     63: ***************************************************************************/
                     64: 
                     65: #ifdef KERNEL
                     66: #include "qevent.h"            /* include event struct defs */
                     67: #else
                     68: #include <vaxuba/qevent.h>
                     69: #endif
                     70: 
                     71: /*---------------------
                     72: * QDSS device map */
                     73: 
                     74:        struct qdmap {                  /* map of register blocks in QDSS */
                     75: 
                     76:            char *template;
                     77:            char *adder;
                     78:            char *dga;
                     79:            char *duart;
                     80:            char *memcsr;
                     81:            char *red;
                     82:            char *blue;
                     83:            char *green;
                     84:        };
                     85: 
                     86: /*--------------------------------------------
                     87: * DGA CSR bit definitions and register map */
                     88: 
                     89: #define DMADONE                0x8000          /* DMA done status */
                     90: #define SET_DONE_FIFO  0x4000          /* set DMADONE when FIFO empty.. */
                     91:                                        /* ..AND count = 0 */
                     92: 
                     93: #define PTOB_ENB       0x0600          /* host-to-bitmap DMA xfer */
                     94: #define BTOP_ENB       0x0400          /* bitmap-to-host DMA xfer */
                     95: #define DL_ENB         0x0200          /* display list DMA xfer */
                     96: #define HALT           0x0000          /* halt DGA */
                     97: 
                     98: #define BYTE_DMA       0x0100          /* byte/word DMA xfer */
                     99: 
                    100: #define DMA_ERR                0x0080          /* DMA error bits */
                    101: #define PARITY_ERR     0x0040          /* memory parity error in DMA */
                    102: #define BUS_ERR                0x0020          /* bus timeout error in DMA */
                    103: 
                    104: #define GLOBAL_IE      0x0004          /* global interrupt enable */
                    105: #define DMA_IE         0x0002          /* DMA interrupt enable */
                    106: #define CURS_ENB       0x0001          /* cursor enable */
                    107: 
                    108: /* QDSS memcsr bit definitions */
                    109: 
                    110: #define        UNBLANK                 0x0020
                    111: #define SYNC_ON                        0x0008
                    112: 
                    113:        struct dga {
                    114: 
                    115:            unsigned short csr;
                    116:            unsigned short adrs_lo;     /* destination address of bitmap to */
                    117:            unsigned short adrs_hi;     /*   host DMA */
                    118:            unsigned short bytcnt_lo;   /* byte length of requested DMA */
                    119:            unsigned short bytcnt_hi;   /* (WO = bytcnt) (RO = fifo count) */
                    120:            unsigned short fifo;        /* FIFO register */
                    121:            unsigned short x_cursor;    /* cursor position registers */
                    122:            unsigned short y_cursor;
                    123:            unsigned short ivr;         /* interrupt vector register */
                    124:            unsigned short memadr;      /* memory base address register */
                    125:        };
                    126: 
                    127: /*-------------------------------------------------------------------------
                    128: * macros to transform device coordinates to hardware cursor coordinates */
                    129: 
                    130: #define CURS_MIN_X     232     /* device coordinate x = 0 */
                    131: #define CURS_MIN_Y     16      /* device coordinate y = 0 */
                    132: 
                    133: #define TRANX(x) ( -(((int)(x)+CURS_MIN_X) & ~0x0003) | \
                    134:                   (((int)(x)+CURS_MIN_X) & 0x0003) )
                    135: 
                    136: #define TRANY(y) ( -((y)+CURS_MIN_Y) )
                    137: 
                    138: /*********************************************************************
                    139: *
                    140: *      EVENT QUEUE DEFINITIONS
                    141: *
                    142: **********************************************************************
                    143: * most of the event queue definitions are found in "qevent.h".  But a
                    144: * few things not found there are here.  */     
                    145: 
                    146: /* The event queue header */
                    147:        
                    148: typedef struct qdinput {
                    149: 
                    150:            struct _vs_eventqueue header;  /* event queue ring handling */
                    151: 
                    152:            /* for VS100 and QVSS compatability reasons, additions to this
                    153:            *  structure must be made below this point.  */
                    154: 
                    155:            struct _vs_cursor curs_pos; /* current mouse position */
                    156:            struct _vs_box curs_box;    /* cursor reporting box */
                    157: 
                    158:        };
                    159:        
                    160: /* vse_key field.  definitions for mouse buttons */
                    161: 
                    162: #define VSE_LEFT_BUTTON                0
                    163: #define VSE_MIDDLE_BUTTON      1
                    164: #define VSE_RIGHT_BUTTON       2
                    165: 
                    166: /* vse_key field.  definitions for mouse buttons */
                    167: 
                    168: #define VSE_T_LEFT_BUTTON      0
                    169: #define VSE_T_FRONT_BUTTON     1
                    170: #define VSE_T_RIGHT_BUTTON     2
                    171: #define VSE_T_BACK_BUTTON      4
                    172: 
                    173: #define VSE_T_BARREL_BUTTON    VSE_T_LEFT_BUTTON
                    174: #define VSE_T_TIP_BUTTON       VSE_T_FRONT_BUTTON
                    175: 
                    176: /*--------------------------------------------------------------------------
                    177: *   These are the macros to be used for loading and extracting from the event
                    178: * queue.  It is presumed that the macro user will only use the access macros
                    179: * if the event queue is non-empty ( ISEMPTY(eq) == FALSE ), and that the
                    180: * driver will only load the event queue after checking that it is not full
                    181: * ( ISFULL(eq) == FALSE ).  ("eq" is a pointer to the event queue header.)
                    182: *
                    183: *   Before an event access session for a particular event, the macro users
                    184: * must use the xxxBEGIN macro, and the xxxEND macro after an event is through
                    185: * with.  As seen below, the xxxBEGIN and xxxEND macros maintain the event
                    186: * queue access mechanism.
                    187: *
                    188: * First, the macros to be used by the event queue reader 
                    189: */
                    190: 
                    191: #define ISEMPTY(eq)      ((eq)->header.head == (eq)->header.tail)
                    192: #define GETBEGIN(eq)     (&(eq)->header.events[(eq)->header.head]) 
                    193: 
                    194: #define GET_X(event)     ((event)->vse_x)           /* get x position */
                    195: #define GET_Y(event)     ((event)->vse_y)           /* get y position */
                    196: #define GET_TIME(event)          ((event)->vse_time)        /* get time */
                    197: #define GET_TYPE(event)          ((event)->vse_type)        /* get entry type */
                    198: #define GET_KEY(event)   ((event)->vse_key)         /* get keycode */
                    199: #define GET_DIR(event)   ((event)->vse_direction)     /* get direction */
                    200: #define GET_DEVICE(event) ((event)->vse_device)        /* get device */
                    201: 
                    202: #define GETEND(eq)        (++(eq)->header.head >= (eq)->header.size ? \
                    203:                           (eq)->header.head = 0 : 0 )
                    204: 
                    205: /*------------------------------------------------
                    206: * macros to be used by the event queue loader  */
                    207: 
                    208:        /* ISFULL yields TRUE if queue is full */
                    209: 
                    210: #define ISFULL(eq)     ((eq)->header.tail+1 == (eq)->header.head ||   \
                    211:                         ((eq)->header.tail+1 == (eq)->header.size &&  \
                    212:                          (eq)->header.head == 0))
                    213: 
                    214:        /* get address of the billet for NEXT event */
                    215: 
                    216: #define PUTBEGIN(eq)   (&(eq)->header.events[(eq)->header.tail])
                    217: 
                    218: #define PUT_X(event, value)    ((event)->vse_x = value)    /* put X pos */
                    219: #define PUT_Y(event, value)    ((event)->vse_y = value)    /* put Y pos */
                    220: #define PUT_TIME(event, value) ((event)->vse_time = value)   /* put time */
                    221: #define PUT_TYPE(event, value) ((event)->vse_type = value) /* put type */
                    222: #define PUT_KEY(event, value)  ((event)->vse_key = value) /* put input key */
                    223: #define PUT_DIR(event, value)  ((event)->vse_direction = value) /* put dir */
                    224: #define PUT_DEVICE(event, value) ((event)->vse_device = value)   /* put dev */
                    225: 
                    226: #define PUTEND(eq)     (++(eq)->header.tail >= (eq)->header.size ?  \
                    227:                        (eq)->header.tail = 0 : 0) 
                    228: 
                    229: /******************************************************************
                    230: *
                    231: *      DMA I/O DEFINITIONS
                    232: *
                    233: ******************************************************************/
                    234: 
                    235: /*---------------------------------------------------------------------
                    236: * The DMA request queue is implemented as a ring buffer of "DMAreq"
                    237:   structures.  The queue is accessed using ring indices located in the
                    238:   "DMAreq_header" structure.  Access is implemented using access macros
                    239:   similar to the event queue access macros above.  */
                    240: 
                    241:        struct DMAreq {
                    242: 
                    243:            short DMAtype;              /* DMA type code (for QDSS) */
                    244:            short DMAdone;              /* DMA done parameter */
                    245:            char  *bufp;                /* virtual adrs of buffer */
                    246:            int   length;               /* transfer buffer length */
                    247:        };
                    248: 
                    249: /* DMA type command codes */
                    250: 
                    251: #define DISPLIST       1       /* display list DMA */
                    252: #define PTOB           2       /* 1 plane Qbus to bitmap DMA */
                    253: #define BTOP           3       /* 1 plane bitmap to Qbus DMA */
                    254: 
                    255: /* DMA done notification code */
                    256: 
                    257: #define FIFO_EMPTY     0x01    /* DONE when FIFO becomes empty */
                    258: #define COUNT_ZERO     0x02    /* DONE when count becomes zero */
                    259: #define WORD_PACK      0x04    /* program the gate array for word packing */
                    260: #define BYTE_PACK      0x08    /* program gate array for byte packing */
                    261: #define REQUEST_DONE   0x100   /* clear when driver has processed request */
                    262: #define HARD_ERROR     0x200   /* DMA hardware error occurred */
                    263: 
                    264: /* DMA request queue is a ring buffer of request structures */
                    265: 
                    266:        struct DMAreq_header {
                    267: 
                    268:            int QBAreg;             /* cookie Qbus map reg for this buffer */
                    269:            short status;           /* master DMA status word */
                    270:            int shared_size;        /* size of shared memory in bytes */
                    271:            struct DMAreq *DMAreq;  /* start address of request queue */
                    272:            int used;               /* # of queue entries currently used */
                    273:            int size;               /* # of "DMAreq"'s in the request queue */
                    274:            int oldest;             /* index to oldest queue'd request */
                    275:            int newest;             /* index to newest queue'd request */
                    276:        };
                    277: 
                    278: /* bit definitions for DMAstatus word in DMAreq_header */
                    279: 
                    280: #define        DMA_ACTIVE      0x0004          /* DMA in progress */
                    281: #define DMA_ERROR      0x0080          /* DMA hardware error */
                    282: #define DMA_IGNORE     0x0002          /* flag to ignore this interrupt */
                    283: 
                    284: /*------------------------------------------
                    285: * macros for DMA request queue fiddling  */
                    286: 
                    287:        /* DMA status set/check macros */
                    288: 
                    289: #define DMA_SETACTIVE(header)   ((header)->status |= DMA_ACTIVE)
                    290: #define DMA_CLRACTIVE(header)  ((header)->status &= ~DMA_ACTIVE)
                    291: #define DMA_ISACTIVE(header)    ((header)->status & DMA_ACTIVE)
                    292: 
                    293: #define DMA_SETERROR(header)    ((header)->status |= DMA_ERROR)
                    294: #define DMA_CLRERROR(header)    ((header)->status &= ~DMA_ERROR)
                    295: #define DMA_ISERROR(header)     ((header)->status & DMA_ERROR)
                    296: 
                    297: #define DMA_SETIGNORE(header)  ((header)->status |= DMA_IGNORE)
                    298: #define DMA_CLRIGNORE(header)   ((header)->status &= ~DMA_IGNORE)
                    299: #define DMA_ISIGNORE(header)    ((header)->status & DMA_IGNORE)
                    300: 
                    301:        /* yields TRUE if queue is empty (ISEMPTY) or full (ISFULL) */
                    302: 
                    303: #define DMA_ISEMPTY(header)    ((header)->used == 0)
                    304: #define DMA_ISFULL(header)     ((header)->used >= (header)->size)
                    305: 
                    306:        /* returns address of the billet for next (PUT)
                    307:         * or oldest (GET) request */
                    308: 
                    309: #define DMA_PUTBEGIN(header)   (&(header)->DMAreq[(header)->newest])
                    310: #define DMA_GETBEGIN(header)   (&(header)->DMAreq[(header)->oldest])
                    311: 
                    312:        /* does queue access pointer maintenance */
                    313: 
                    314: #define DMA_GETEND(header)      (++(header)->oldest >= (header)->size    \
                    315:                                  ? (header)->oldest = 0 : 0);           \
                    316:                                --(header)->used;
                    317: 
                    318: #define DMA_PUTEND(header)             (++(header)->newest >= (header)->size    \
                    319:                                  ? (header)->newest = 0 : 0);           \
                    320:                                ++(header)->used;
                    321: 
                    322: /******************************************************************
                    323: *
                    324: *      COLOR MAP WRITE BUFFER DEFINITIONS
                    325: *
                    326: ******************************************************************/
                    327: 
                    328:        struct rgb {
                    329: 
                    330:            unsigned char offset;       /* color map address for load */
                    331:            unsigned char red;          /* data for red map */
                    332:            unsigned char green;        /* data for green map */
                    333:            unsigned char blue;         /* data for blue map */
                    334:        };
                    335: 
                    336:        struct color_buf {
                    337: 
                    338:            char status;                /* load request/service status */
                    339:            short count;                /* number of entries to br loaded */
                    340:            struct rgb rgb[256];
                    341:        };
                    342: 
                    343: #define LOAD_COLOR_MAP 0x0001
                    344: 
                    345: /******************************************************************
                    346: *
                    347: *      SCROLL ASSIST DEFINITIONS
                    348: *
                    349: ******************************************************************/
                    350: 
                    351:        struct scroll {
                    352: 
                    353:            short status;
                    354:            short viper_constant;
                    355:            short y_scroll_constant;
                    356:            short y_offset;
                    357:            short x_index_pending;
                    358:            short y_index_pending;
                    359:        };
                    360: 
                    361: #define LOAD_REGS      0x0001
                    362: #define LOAD_INDEX     0x0002
                    363: 
                    364: /******************************************************************
                    365: *
                    366: *      MOUSE/TABLET/KBD PROGRAMMING DEFINITIONS
                    367: *
                    368: ******************************************************************/
                    369: 
                    370: /*-----------------------------------
                    371: * LK201 programmming definitions  */
                    372: 
                    373: #define LK_UPDOWN      0x86            /* bits for setting lk201 modes */
                    374: #define LK_AUTODOWN    0x82
                    375: #define LK_DOWN        0x80
                    376: #define LK_DEFAULTS    0xD3            /* reset (some) default settings */
                    377: #define LK_AR_ENABLE   0xE3            /* global auto repeat enable */
                    378: #define LK_CL_ENABLE   0x1B            /* keyclick enable */
                    379: #define LK_KBD_ENABLE  0x8B            /* keyboard enable */
                    380: #define LK_BELL_ENABLE         0x23            /* the bell */
                    381: #define LK_RING_BELL   0xA7            /* ring keyboard bell */
                    382: 
                    383: #define LK_LED_ENABLE  0x13            /* light led */
                    384: #define LK_LED_DISABLE         0x11            /* turn off led */
                    385: #define LED_1          0x81            /* led bits */
                    386: #define LED_2          0x82
                    387: #define LED_3          0x84
                    388: #define LED_4          0x88
                    389: #define LED_ALL        0x8F
                    390: #define LK_LED_HOLD    LED_4
                    391: #define LK_LED_LOCK    LED_3
                    392: #define LK_LED_COMPOSE LED_2
                    393: #define LK_LED_WAIT    LED_1
                    394: 
                    395: #define LK_KDOWN_ERROR 0x3D            /* key down on powerup error */
                    396: #define LK_POWER_ERROR         0x3E            /* keyboard failure on powerup test */
                    397: #define LK_OUTPUT_ERROR        0xB5            /* keystrokes lost during inhibit */
                    398: #define LK_INPUT_ERROR         0xB6            /* garbage command to keyboard */
                    399: #define LK_LOWEST      0x56            /* lowest significant keycode */
                    400: #define LK_DIV6_START  0xAD            /* start of div 6 */
                    401: #define LK_DIV5_END    0xB2            /* end of div 5 */
                    402: 
                    403: #define LAST_PARAM     0x80            /* "no more params" bit */
                    404: 
                    405:        struct prgkbd {
                    406: 
                    407:            short cmd;                  /* LK201 command opcode */
                    408:            short param1;               /* 1st cmd parameter (can be null) */
                    409:            short param2;               /* 2nd cmd parameter (can be null) */
                    410:        };
                    411: 
                    412: /*-------------------------
                    413: * "special" LK-201 keys */
                    414: 
                    415: #define SHIFT          174
                    416: #define LOCK           176
                    417: #define REPEAT         180
                    418: #define CNTRL          175
                    419: #define ALLUP          179
                    420: 
                    421: /*--------------------------------
                    422: * cursor programming structure */
                    423: 
                    424:        struct prg_cursor {
                    425: 
                    426:            unsigned short acc_factor;  /* cursor aceleration factor */
                    427:            unsigned short threshold;   /* threshold to trigger acc at */
                    428:        };
                    429: 
                    430: /*---------------------
                    431: * mouse definitions */
                    432: 
                    433: #define INC_STREAM_MODE        'R'             /* stream mode reports (55 hz) */
                    434: #define PROMPT_MODE    'D'             /* report when prompted */
                    435: #define REQUEST_POS    'P'             /* request position report */
                    436: #define SELF_TEST      'T'             /* request self test */
                    437: 
                    438: #define MOUSE_ID       0x2             /* mouse ID in lo 4 bits */
                    439: 
                    440: #define START_FRAME    0x80            /* start of report frame bit */
                    441: #define X_SIGN         0x10            /* position sign bits */
                    442: #define Y_SIGN         0x08
                    443: 
                    444: #define RIGHT_BUTTON   0x01            /* mouse buttons */
                    445: #define MIDDLE_BUTTON  0x02
                    446: #define LEFT_BUTTON    0x04
                    447: 
                    448:        /* mouse report structure definition */
                    449: 
                    450:        struct mouse_report {
                    451: 
                    452:            char state;         /* buttons and sign bits */
                    453:            short dx;           /* delta X since last change */
                    454:            short dy;           /* delta Y since last change */
                    455:            char bytcnt;        /* mouse report byte count */
                    456:        };
                    457: 
                    458: /*-----------------------------------------
                    459: * tablet command/interface definitions  */
                    460: 
                    461: #define T_STREAM       'R'             /* continuous stream report mode */
                    462: #define T_POINT                'D'             /* enter report-on-request mode */
                    463: #define T_REQUEST      'P'             /* request position report */
                    464: 
                    465: #define T_BAUD         'B'             /* increase baud to 9600 from 4800 */
                    466: #define T_RATE_55      'K'             /* report rate: 55/sec */
                    467: #define T_RATE_72      'L'             /* report rate: 72/sec */
                    468: #define T_RATE_120     'M'             /* report rate: 120/sec (9600 only) */
                    469: 
                    470: #define T_TEST         SELF_TEST       /* do self test */
                    471: 
                    472: #define TABLET_ID      0x4             /* tablet ID in lo 4 bits */
                    473: 
                    474: #define T_START_FRAME  0x80            /* start of report frame bit */
                    475: #define T_PROXIMITY    0x01            /* state pointer in proximity */
                    476: 
                    477: #define T_LEFT_BUTTON  0x02            /* puck buttons */
                    478: #define T_FRONT_BUTTON 0x04
                    479: #define T_RIGHT_BUTTON 0x08
                    480: #define T_BACK_BUTTON  0x10
                    481: 
                    482: #define T_BARREL_BUTTON T_LEFT_BUTTON          /* stylus buttons */
                    483: #define T_TIP_BUTTON   T_FRONT_BUTTON
                    484: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.