📄 qduser.h
字号:
/* * @(#)qduser.h 4.1 (ULTRIX) 7/2/90 *//************************************************************************ * * * Copyright (c) 1986 by * * Digital Equipment Corporation, Maynard, MA * * All rights reserved. * * * * This software is furnished under a license and may be used and * * copied only in accordance with the terms of such license and * * with the inclusion of the above copyright notice. This * * software or any other copies thereof may not be provided or * * otherwise made available to any other person. No title to and * * ownership of the software is hereby transferred. * * * * The information in this software is subject to change without * * notice and should not be construed as a commitment by Digital * * Equipment Corporation. * * * * Digital assumes no responsibility for the use or reliability * * of its software on equipment which is not supplied by Digital. * * * ************************************************************************//***************************************************************************** QDUSER...* This file defines values shared between the driver and a client****************************************************************************//**************************************************************************** revision history:****************************************************************************** 21 jul 86 ram fixed define of CURSOR_MIN_Y* 25 nov 85 longo added macro and bit defines for DMA error flags* 11 nov 85 longo renamed _vs_eventqueue to "qdinput" struct* 23 oct 85 longo added more defines to the DMA stuff* 17 oct 85 longo changed "struct rgb" chars to be unsigned* 16 oct 85 longo added new TABLET support definitions* 15 oct 85 longo re-wrote DMA queue access macros* 08 oct 85 longo added status flag manipulation macros to DMA stuff* 02 oct 85 longo added support for color map write buffer loading* 26 sep 85 longo removed adder sertup params from DMA request struct* 23 sep 85 longo added DMA queue access macros* 30 aug 85 longo fixed crock in "qdiobuf" struct compile-time sizing. Also* removed DMAcontrol struct from DMA buffer for field test* 26 aug 85 longo put in conditional include of "qevent.h" for user prg's* 18 jul 85 longo changed semantics so that head is tail and tail is head* 12 jul 85 longo moved "mouse_report" struct and defs over to qd_data.c* 11 jul 85 longo added device coordinate to gate array cursor coordinate* transformation macros* 03 jul 85 longo changed kernel typdef's for data types to long-hand* 10 may 85 longo created****************************************************************************/#ifdef KERNEL#include "../io/uba/qevent.h" /* include event struct defs */#else#include <io/uba/qevent.h>#endif/*---------------------* QDSS device map */ struct qdmap { /* map of register blocks in QDSS */ char *template; char *adder; char *dga; char *duart; char *memcsr; char *red; char *blue; char *green; };/*--------------------------------------------* DGA CSR bit definitions and register map */#define DMADONE 0x8000 /* DMA done status */#define SET_DONE_FIFO 0x4000 /* set DMADONE when FIFO empty.. */ /* ..AND count = 0 */#define PTOB_ENB 0x0600 /* host-to-bitmap DMA xfer */#define BTOP_ENB 0x0400 /* bitmap-to-host DMA xfer */#define DL_ENB 0x0200 /* display list DMA xfer */#define HALT 0x0000 /* halt DGA */#define BYTE_DMA 0x0100 /* byte/word DMA xfer */#define DMA_ERR 0x0080 /* DMA error bits */#define PARITY_ERR 0x0040 /* memory parity error in DMA */#define BUS_ERR 0x0020 /* bus timeout error in DMA */#define GLOBAL_IE 0x0004 /* global interrupt enable */#define DMA_IE 0x0002 /* DMA interrupt enable */#define CURS_ENB 0x0001 /* cursor enable *//* QDSS memcsr bit definitions */#define UNBLANK 0x0020#define SYNC_ON 0x0008 struct dga { unsigned short csr; unsigned short adrs_lo; /* destination address of bitmap to */ unsigned short adrs_hi; /* host DMA */ unsigned short bytcnt_lo; /* byte length of requested DMA */ unsigned short bytcnt_hi; /* (WO = bytcnt) (RO = fifo count) */ unsigned short fifo; /* FIFO register */ unsigned short x_cursor; /* cursor position registers */ unsigned short y_cursor; unsigned short ivr; /* interrupt vector register */ unsigned short memadr; /* memory base address register */ };/*-------------------------------------------------------------------------* macros to transform device coordinates to hardware cursor coordinates */#define CURS_MIN_X 232 /* device coordinate x = 0 */#define CURS_MIN_Y 16 /* device coordinate y = 0 */#define TRANX(x) ( -(((int)(x)+CURS_MIN_X) & ~0x0003) | \ (((int)(x)+CURS_MIN_X) & 0x0003) )#define TRANY(y) ( -((y)+CURS_MIN_Y) )/*********************************************************************** EVENT QUEUE DEFINITIONS************************************************************************ most of the event queue definitions are found in "qevent.h". But a* few things not found there are here. */ /* The event queue header */ typedef struct qdinput { struct _vs_eventqueue header; /* event queue ring handling */ /* for VS100 and QVSS compatability reasons, additions to this * structure must be made below this point. */ struct _vs_cursor curs_pos; /* current mouse position */ struct _vs_box curs_box; /* cursor reporting box */ }; /* vse_key field. definitions for mouse buttons */#define VSE_LEFT_BUTTON 0#define VSE_MIDDLE_BUTTON 1#define VSE_RIGHT_BUTTON 2/* vse_key field. definitions for mouse buttons */#define VSE_T_LEFT_BUTTON 0#define VSE_T_FRONT_BUTTON 1#define VSE_T_RIGHT_BUTTON 2#define VSE_T_BACK_BUTTON 4#define VSE_T_BARREL_BUTTON VSE_T_LEFT_BUTTON#define VSE_T_TIP_BUTTON VSE_T_FRONT_BUTTON/*--------------------------------------------------------------------------* These are the macros to be used for loading and extracting from the event* queue. It is presumed that the macro user will only use the access macros* if the event queue is non-empty ( ISEMPTY(eq) == FALSE ), and that the* driver will only load the event queue after checking that it is not full* ( ISFULL(eq) == FALSE ). ("eq" is a pointer to the event queue header.)** Before an event access session for a particular event, the macro users* must use the xxxBEGIN macro, and the xxxEND macro after an event is through* with. As seen below, the xxxBEGIN and xxxEND macros maintain the event* queue access mechanism.** First, the macros to be used by the event queue reader */#define ISEMPTY(eq) ((eq)->header.head == (eq)->header.tail)#define GETBEGIN(eq) (&(eq)->header.events[(eq)->header.head]) #define GET_X(event) ((event)->vse_x) /* get x position */#define GET_Y(event) ((event)->vse_y) /* get y position */#define GET_TIME(event) ((event)->vse_time) /* get time */#define GET_TYPE(event) ((event)->vse_type) /* get entry type */#define GET_KEY(event) ((event)->vse_key) /* get keycode */#define GET_DIR(event) ((event)->vse_direction) /* get direction */#define GET_DEVICE(event) ((event)->vse_device) /* get device */#define GETEND(eq) (++(eq)->header.head >= (eq)->header.size ? \ (eq)->header.head = 0 : 0 )/*------------------------------------------------* macros to be used by the event queue loader */ /* ISFULL yields TRUE if queue is full */#define ISFULL(eq) ((eq)->header.tail+1 == (eq)->header.head || \ ((eq)->header.tail+1 == (eq)->header.size && \ (eq)->header.head == 0)) /* get address of the billet for NEXT event */#define PUTBEGIN(eq) (&(eq)->header.events[(eq)->header.tail])#define PUT_X(event, value) ((event)->vse_x = value) /* put X pos */#define PUT_Y(event, value) ((event)->vse_y = value) /* put Y pos */#define PUT_TIME(event, value) ((event)->vse_time = value) /* put time */#define PUT_TYPE(event, value) ((event)->vse_type = value) /* put type */#define PUT_KEY(event, value) ((event)->vse_key = value) /* put input key */#define PUT_DIR(event, value) ((event)->vse_direction = value) /* put dir */#define PUT_DEVICE(event, value) ((event)->vse_device = value) /* put dev */#define PUTEND(eq) (++(eq)->header.tail >= (eq)->header.size ? \ (eq)->header.tail = 0 : 0) /******************************************************************** DMA I/O DEFINITIONS*******************************************************************//*---------------------------------------------------------------------* The DMA request queue is implemented as a ring buffer of "DMAreq" structures. The queue is accessed using ring indices located in the "DMAreq_header" structure. Access is implemented using access macros similar to the event queue access macros above. */ struct DMAreq { short DMAtype; /* DMA type code (for QDSS) */ short DMAdone; /* DMA done parameter */ char *bufp; /* virtual adrs of buffer */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -