Commit | Line | Data |
---|---|---|
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 |
24 | extern int hz; |
25 | ||
26 | int fb_erase_screen(); | |
27 | ||
5820bb6f AF |
28 | volatile struct fb_rfc *rfcPtr = (struct fb_rfc *) 0xB1000000; |
29 | static struct fb_rfc rfcVal; | |
30 | ||
31 | int | |
32 | fbopen(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 | ||
42 | int | |
43 | fbclose(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 | ||
55 | int | |
56 | fbioctl(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 | ||
85 | fb_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 | ||
101 | fb_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 |
116 | int |
117 | fbselect(dev, rw) | |
118 | dev_t dev; | |
119 | int rw; | |
120 | { | |
121 | return(0); | |
122 | } | |
123 | ||
124 | int | |
125 | fbmap(dev, off, prot) | |
126 | dev_t dev; | |
127 | int off, prot; | |
128 | { | |
129 | return(((u_int) 0xB10C0000 + off) >> PGSHIFT); | |
130 | } |