1*47674Scael.\" Copyright (c) 1983, 1991 Regents of the University of California. 2*47674Scael.\" All rights reserved. 320738Smckusick.\" 4*47674Scael.\" %sccs.include.redist.man% 520738Smckusick.\" 6*47674Scael.\" @(#)ps.4 6.4 (Berkeley) 03/27/91 7*47674Scael.\" 8*47674Scael.Dd 9*47674Scael.Dt PS 4 vax 10*47674Scael.Os BSD 4.2 11*47674Scael.Sh NAME 12*47674Scael.Nm ps 13*47674Scael.Nd Evans and Sutherland Picture System 2 graphics device interface 14*47674Scael.Sh SYNOPSIS 15*47674Scael.Cd "device ps0 at uba? csr 0172460 vector psclockintr pssystemintr" 16*47674Scael.Sh DESCRIPTION 1720738SmckusickThe 18*47674Scael.Nm ps 1920738Smckusickdriver provides access 2020738Smckusickto an Evans and 2120738SmckusickSutherland Picture System 2 graphics device. 22*47674ScaelEach minor device is a new 23*47674Scael.Tn PS2 . 2420738SmckusickWhen the device is opened, its interface registers are mapped, 2520738Smckusickvia virtual memory, into a user process's address space. 2620738SmckusickThis allows the user process very high bandwidth to the device 2720738Smckusickwith no system call overhead. 28*47674Scael.Pp 29*47674Scael.Tn DMA 30*47674Scaelto and from the 31*47674Scael.Tn PS2 32*47674Scaelis not supported. All read and write 3320738Smckusicksystem calls will fail. 34*47674ScaelAll data is moved to and from the 35*47674Scael.Tn PS2 36*47674Scaelvia programmed 37*47674Scael.Tn I/O 38*47674Scaelusing 3920738Smckusickthe device's interface registers. 40*47674Scael.Pp 41*47674ScaelCommands are fed to and from the driver using the following 42*47674Scael.Xr ioctl 2 Ns s : 43*47674Scael.Bl -tag -width PSIOSINGLEREFRESH 44*47674Scael.It Dv PSIOGETADDR 4520738SmckusickReturns the virtual address through which the user process can access 4620738Smckusickthe device's interface registers. 47*47674Scael.It Dv PSIOAUTOREFRESH 4820738SmckusickStart auto refreshing the screen. 4920738SmckusickThe argument is an address in user space where the following data resides. 5020738SmckusickThe first longword is a 51*47674Scael.Em count 5220738Smckusickof the number of static refresh buffers. 5320738SmckusickThe next 54*47674Scael.Em count 5520738Smckusicklongwords are the addresses in refresh memory where 5620738Smckusickthe refresh buffers lie. 5728336SanneThe driver will cycle through these refresh buffers displaying them one by one 5820738Smckusickon the screen. 59*47674Scael.It Dv PSIOAUTOMAP 6028336SanneStart automatically passing the display file through the matrix processor and 6120738Smckusickinto the refresh buffer. 6220738SmckusickThe argument is an address in user memory where the following data resides. 6320738SmckusickThe first longword is a 64*47674Scael.Em count 6520738Smckusickof the number of display files to operate on. 6620738SmckusickThe next 67*47674Scael.Em count 6820738Smckusicklongwords are the address of these display files. 6920738SmckusickThe final longword is the address in refresh buffer memory where transformed 7020738Smckusickcoordinates are to be placed if the driver is not in double buffer mode (see 7120738Smckusickbelow). 72*47674Scael.It Dv PSIODOUBLEBUFFER 7320738SmckusickCause the driver to double buffer the output from the map that 7420738Smckusickis going to the refresh buffer. 7520738SmckusickThe argument is again a user space address where the real arguments are stored. 7620738SmckusickThe first argument is the starting address of refresh memory where the two 7720738Smckusickdouble buffers are located. 7820738SmckusickThe second argument is the length of each double buffer. 7920738SmckusickThe refresh mechanism displays the current double buffer, in addition 8020738Smckusickto its static refresh lists, when in double buffer mode. 81*47674Scael.It Dv PSIOSINGLEREFRESH 8220738SmckusickSingle step the refresh process. That is, the driver does not continually 8320738Smckusickrefresh the screen. 84*47674Scael.It Dv PSIOSINGLEMAP 8520738SmckusickSingle step the matrix process. 8628336SanneThe driver does not automatically feed display files through the matrix unit. 87*47674Scael.It Dv PSIOSINGLEBUFFER 8820738SmckusickTurn off double buffering. 89*47674Scael.It Dv PSIOTIMEREFRESH 9020738SmckusickThe argument is a count of the number of refresh interrupts to take 9120738Smckusickbefore turning off the screen. This is used to do time exposures. 92*47674Scael.It Dv PSIOWAITREFRESH 9320738SmckusickSuspend the user process until a refresh interrupt has occurred. 94*47674ScaelIf in 95*47674Scael.Dv TIMEREFRESH 96*47674Scaelmode, suspend until count refreshes have occurred. 97*47674Scael.It Dv PSIOSTOPREFRESH 9820738SmckusickWait for the next refresh, stop all refreshes, and then return to user process. 99*47674Scael.It Dv PSIOWAITMAP 10020738SmckusickWait until a map done interrupt has occurred. 101*47674Scael.It Dv PSIOSTOPMAP 10220738SmckusickWait for a map done interrupt, do not restart the map, and then 10320738Smckusickreturn to the user. 104*47674Scael.El 105*47674Scael.Sh FILES 106*47674Scael.Bl -tag -width /dev/psxx 107*47674Scael.It Pa /dev/ps 108*47674Scael.El 109*47674Scael.Sh DIAGNOSTICS 110*47674Scael.Bl -diag 111*47674Scael.It ps device intr. 112*47674Scael.It ps dma intr. 11320738SmckusickAn interrupt was received from the device. 11420738SmckusickThis shouldn't happen, 11520738Smckusickcheck your device configuration for overlapping interrupt vectors. 116*47674Scael.El 117*47674Scael.Sh HISTORY 118*47674ScaelThe 119*47674Scael.Nm 120*47674Scaeldriver appeared in 121*47674Scael.Bx 4.2 . 122*47674Scael.Sh BUGS 12320738SmckusickAn invalid access (e.g., longword) to a mapped interface register 12420738Smckusickcan cause the system to crash with a machine check. 12520738SmckusickA user process could possibly cause infinite interrupts hence 12620738Smckusickbringing things to a crawl. 127