Annotation of sys/dev/pci/tga_conf.c, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: tga_conf.c,v 1.5 2002/04/01 11:26:32 matthieu Exp $ */
2: /* $NetBSD: tga_conf.c,v 1.5 2001/11/13 07:48:49 lukem Exp $ */
3:
4: /*
5: * Copyright (c) 1995, 1996 Carnegie-Mellon University.
6: * All rights reserved.
7: *
8: * Author: Chris G. Demetriou
9: *
10: * Permission to use, copy, modify and distribute this software and
11: * its documentation is hereby granted, provided that both the copyright
12: * notice and this permission notice appear in all copies of the
13: * software, derivative works or modified versions, and any portions
14: * thereof, and that both notices appear in supporting documentation.
15: *
16: * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
17: * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
18: * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
19: *
20: * Carnegie Mellon requests users of this software to return to
21: *
22: * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
23: * School of Computer Science
24: * Carnegie Mellon University
25: * Pittsburgh PA 15213-3890
26: *
27: * any improvements or extensions that they make and grant Carnegie the
28: * rights to redistribute these changes.
29: */
30:
31: #include <sys/param.h>
32: #include <sys/device.h>
33:
34: #include <dev/pci/pcivar.h>
35: #include <dev/pci/tgareg.h>
36: #include <dev/pci/tgavar.h>
37:
38: #include <dev/ic/bt485var.h>
39: #include <dev/ic/bt463var.h>
40: #include <dev/ic/ibm561var.h>
41:
42: #undef KB
43: #define KB * 1024
44: #undef MB
45: #define MB * 1024 * 1024
46:
47: static const struct tga_conf tga_configs[TGA_TYPE_UNKNOWN] = {
48: /* TGA_TYPE_T8_01 */
49: {
50: "T8-01",
51: bt485_funcs,
52: 8,
53: 4 MB,
54: 2 KB,
55: 1, { 2 MB, 0 }, { 1 MB, 0 },
56: 0, { 0, 0 }, { 0, 0 },
57: },
58: /* TGA_TYPE_T8_02 */
59: {
60: "T8-02",
61: bt485_funcs,
62: 8,
63: 4 MB,
64: 4 KB,
65: 1, { 2 MB, 0 }, { 2 MB, 0 },
66: 0, { 0, 0 }, { 0, 0 },
67: },
68: /* TGA_TYPE_T8_22 */
69: {
70: "T8-22",
71: bt485_funcs,
72: 8,
73: 8 MB,
74: 4 KB,
75: 1, { 4 MB, 0 }, { 2 MB, 0 },
76: 1, { 6 MB, 0 }, { 2 MB, 0 },
77: },
78: /* TGA_TYPE_T8_44 */
79: {
80: "T8-44",
81: bt485_funcs,
82: 8,
83: 16 MB,
84: 4 KB,
85: 2, { 8 MB, 12 MB }, { 2 MB, 2 MB },
86: 2, { 10 MB, 14 MB }, { 2 MB, 2 MB },
87: },
88: /* TGA_TYPE_T32_04 */
89: {
90: "T32-04",
91: bt463_funcs,
92: 32,
93: 16 MB,
94: 8 KB,
95: 1, { 8 MB, 0 }, { 4 MB, 0 },
96: 0, { 0, 0 }, { 0, 0 },
97: },
98: /* TGA_TYPE_T32_08 */
99: {
100: "T32-08",
101: bt463_funcs,
102: 32,
103: 16 MB,
104: 16 KB,
105: 1, { 8 MB, 0 }, { 8 MB, 0 },
106: 0, { 0, 0 }, { 0, 0 },
107: },
108: /* TGA_TYPE_T32_88 */
109: {
110: "T32-88",
111: bt463_funcs,
112: 32,
113: 32 MB,
114: 16 KB,
115: 1, { 16 MB, 0 }, { 8 MB, 0 },
116: 1, { 24 MB, 0 }, { 8 MB, 0 },
117: },
118: /* TGA_TYPE_POWERSTORM_4D20 */
119: /* XXX: These numbers may be incorrect */
120: {
121: "PS4d20",
122: ibm561_funcs,
123: 32,
124: 32 MB,
125: 16 KB,
126: 1, { 16 MB, 0 }, { 8 MB, 0 },
127: 1, { 24 MB, 0 }, { 8 MB, 0 },
128: },
129: };
130:
131: #undef KB
132: #undef MB
133:
134: int
135: tga_identify(dc)
136: struct tga_devconfig *dc;
137: {
138: int type;
139: int gder;
140: int grev;
141: int deep, addrmask, wide;
142: int tga2;
143:
144: gder = TGARREG(dc, TGA_REG_GDER);
145: grev = TGARREG(dc, TGA_REG_GREV);
146:
147: deep = (gder & 0x1) != 0; /* XXX */
148: addrmask = (gder >> 2) & 0x7; /* XXX */
149: wide = (gder & 0x200) == 0; /* XXX */
150: tga2 = (grev & 0x20) != 0;
151:
152:
153: type = TGA_TYPE_UNKNOWN;
154:
155: if (!deep) {
156: /* 8bpp frame buffer */
157:
158: if (addrmask == 0x0) {
159: /* 4MB core map; T8-01 or T8-02 */
160:
161: if (!wide)
162: type = TGA_TYPE_T8_01;
163: else
164: type = TGA_TYPE_T8_02;
165: } else if (addrmask == 0x1) {
166: /* 8MB core map; T8-22 */
167:
168: if (wide) /* sanity */
169: type = TGA_TYPE_T8_22;
170: } else if (addrmask == 0x3) {
171: /* 16MB core map; T8-44 */
172:
173: if (wide) /* sanity */
174: type = TGA_TYPE_T8_44;
175: }
176: } else {
177: /* 32bpp frame buffer */
178: if (addrmask == 0x00 && tga2 && wide) {
179: /* My PowerStorm 4d20 shows up this way? */
180: type = TGA_TYPE_POWERSTORM_4D20;
181: }
182:
183: if (addrmask == 0x3) {
184: /* 16MB core map; T32-04 or T32-08 */
185:
186: if (!wide)
187: type = TGA_TYPE_T32_04;
188: else
189: type = TGA_TYPE_T32_08;
190: } else if (addrmask == 0x7) {
191: /* 32MB core map; T32-88 */
192:
193: if (wide && !tga2) /* sanity */
194: type = TGA_TYPE_T32_88;
195: }
196: }
197:
198: return (type);
199: }
200:
201: const struct tga_conf *
202: tga_getconf(type)
203: int type;
204: {
205:
206: if (type >= 0 && type < TGA_TYPE_UNKNOWN)
207: return &tga_configs[type];
208:
209: return (NULL);
210: }
CVSweb