try to make sure that path-addrs always have <angle brackets>
[unix-history] / usr / src / sys / luna68k / dev / fb.c
CommitLineData
5820bb6f
AF
1/*-
2 * Copyright (c) 1988 University of Utah.
3 * Copyright (c) 1992 OMRON Corporation.
117bddbc
KB
4 * Copyright (c) 1993, 19901992
5 * The Regents of the University of California. All rights reserved.
5820bb6f
AF
6 *
7 * %sccs.include.redist.c%
8 *
9 * from: hp/dev/grf.c 7.13 (Berkeley) 7/12/92
10 *
117bddbc 11 * @(#)fb.c 8.1 (Berkeley) %G%
5820bb6f
AF
12 */
13
14/*
15 * fb.c -- frame-buffer device driver
16 * by A.Fujita, Dec-16-1992
17 */
18
19#include <sys/param.h>
20#include <sys/proc.h>
21#include <sys/ioctl.h>
22#include <luna68k/dev/fbio.h>
23
92cced2e
AF
24extern int hz;
25
26int fb_erase_screen();
27
5820bb6f
AF
28volatile struct fb_rfc *rfcPtr = (struct fb_rfc *) 0xB1000000;
29static struct fb_rfc rfcVal;
30
31int
32fbopen(dev, flags, mode, p)
33 dev_t dev;
34 int flags, mode;
35 struct proc *p;
36{
92cced2e
AF
37 fb_erase_screen();
38
5820bb6f
AF
39 return(0);
40}
41
42int
43fbclose(dev, flags, mode, p)
44 dev_t dev;
45 int flags, mode;
46 struct proc *p;
47{
92cced2e
AF
48 fb_adjust(7, -27);
49
50 timeout(fb_erase_screen, (caddr_t)0, hz);
51
5820bb6f
AF
52 return(0);
53}
54
55int
56fbioctl(dev, cmd, data, flags, p)
57 dev_t dev;
58 int cmd;
59 caddr_t data;
60 int flags;
61 struct proc *p;
62{
63 struct fb_rfc *rfcp;
64 int error;
65
66 error = 0;
67 switch (cmd) {
68
4cd1cbcb
AF
69 case FBIOSETRFCT:
70 *rfcPtr = rfcVal = *((struct fb_rfc *) data);
5820bb6f
AF
71 break;
72
4cd1cbcb
AF
73 case FBIOGETRFCT:
74 *(struct fb_rfc *)data = rfcVal;
5820bb6f
AF
75 break;
76
5820bb6f
AF
77 default:
78 error = EINVAL;
79 break;
80
81 }
82 return(error);
83}
84
85fb_adjust(hcnt, vcnt)
86 int hcnt, vcnt;
87{
88 rfcVal.rfc_hcnt = hcnt; /* shift left 16 dot */
89 rfcVal.rfc_vcnt = vcnt; /* shift down 1 dot */
90
91 *rfcPtr = rfcVal;
92}
93
92cced2e
AF
94#define PL_WIDTH 64 /* Plane Width (long) */
95
96#define SB_HIGHT 1024 /* Screen Hight (Bit) */
97#define SL_WIDTH 40 /* Screen Width (Long) */
98
99#define SKIP_NEXT_LINE(addr) ( addr += (PL_WIDTH - SL_WIDTH) )
100
101fb_erase_screen()
102{
103 volatile register u_long *lp = (u_long *) 0xB1080008;
104
105 register int i, j;
106
107 for (i = 0; i < SB_HIGHT; i++) {
108 for (j = 0; j < SL_WIDTH; j++)
109 *lp++ = 0;
110 SKIP_NEXT_LINE(lp);
111 }
112
113 return;
114}
115
5820bb6f
AF
116int
117fbselect(dev, rw)
118 dev_t dev;
119 int rw;
120{
121 return(0);
122}
123
124int
125fbmap(dev, off, prot)
126 dev_t dev;
127 int off, prot;
128{
129 return(((u_int) 0xB10C0000 + off) >> PGSHIFT);
130}