[6125] in Athena Bugs
video blanking for SM displays
daemon@ATHENA.MIT.EDU (Ken Raeburn)
Fri Sep 28 14:33:02 1990
Date: Fri, 28 Sep 90 14:32:45 EDT
From: Ken Raeburn <Raeburn@MIT.Edu>
To: bugs@ATHENA.MIT.EDU, cfields@ATHENA.MIT.EDU
This change to the SM driver should permit user programs controlling
the graphics device (e.g., Xqvss) to switch the video signal on or
off. (You'll probably need "patch -l".)
The X server will need a little work (in ddx/dec/qvss/qvss_io.c) to
get it to find the sm ioctls (as opposed to just the qv ones;
alternatively, add exactly the same ioctls to qvioctl.h also), and
it'll need to deal with the possibility that some drivers (e.g., the
qv) won't support the ioctls needed, so it may still need to paint the
display black.
If you want to try it out:
/prometheus/u3/Xqvss.blank
/prometheus/u3/vmunix.multics
I've built a hacked server (which probably won't do the right thing
for video blanking with a qv, or with the standard kernel). The
source changes I made to get it to build correctly are inappropriate
for a production source tree; some cleaner way will have to be coded.
The kernel is based on the VS3100 kernel, with these changes added,
but is missing some unnecessary devices (sg, sl, vd).
There is one problem I forsee with this, which is that changing the
mouse cursor will reload nb_cur_cmd from cur_reg, so it will re-enable
the video signal. The fix to this would probably be to have QIOVIDEO*
actually change cur_reg and reload nb_cur_cmd. I'd do it, but I'm
really trying to wrap up this piece of work, and don't feel like
building another kernel and doing further testing....
An alternative: Incorporate a newer Ultrix driver into our code. In
the 3.1 vax sources, both qv and sm drivers support video blanking.
(I'd want to see the qv one in action before using it, though.)
*** old/smioctl.h Mon Jun 1 20:19:46 1987
--- smioctl.h Tue Sep 18 15:51:49 1990
***************
*** 109,112 ****
#define QIOWCURSOR _IOW(q, 7, short[32]) /* write cursor bit map*/
#define QIOKERNLOOP _IO(q, 8) /*re-route kernel console output */
#define QIOKERNUNLOOP _IO(q, 9) /*don't re-route kernel console output */
!
--- 109,113 ----
#define QIOWCURSOR _IOW(q, 7, short[32]) /* write cursor bit map*/
#define QIOKERNLOOP _IO(q, 8) /*re-route kernel console output */
#define QIOKERNUNLOOP _IO(q, 9) /*don't re-route kernel console output */
! #define QIOVIDEOON _IO(q, 10) /* turn off video */
! #define QIOVIDEOOFF _IO(q, 11) /* turn on video */
*** old/sm.c Sat Oct 28 06:56:06 1989
--- sm.c Tue Sep 18 17:19:21 1990
***************
*** 1157,1162 ****
--- 1157,1171 ----
case QIOKERNUNLOOP: /* don't redirect kernel console output */
sm_kern_loop = 0;
+ break;
+
+ case QIOVIDEOOFF:
+ ((struct nb1_regs *) umem)->nb_cur_cmd =
+ FOPB | cur_reg & ~(FOPA|ENPA);
+ break;
+
+ case QIOVIDEOON:
+ ((struct nb1_regs *) umem)->nb_cur_cmd = cur_reg;
break;
#ifdef notdef
End of patch.