Annotation of sys/dev/pci/tga_conf.c, Revision 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