Annotation of 43BSDTahoe/sys/vaxuba/qduser.h, revision 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.