|
|
1.1 ! root 1: /* CONFIDENTIAL ! 2: * Copyright (c) 1993 by NeXT Computer, Inc as an unpublished work. ! 3: * All rights reserved. ! 4: * ! 5: * S3Modes.h -- internal definitions for S3 driver. ! 6: * ! 7: * History ! 8: * Thu Sep 15 15:16:43 PDT 1994, James C. Lee ! 9: * Added AT&T 20C505 DAC support ! 10: * Author: Derek B Clegg 21 May 1993 ! 11: * Based on work by Peter Graffagnino, 31 January 1993. ! 12: */ ! 13: ! 14: #ifndef S3MODES_H__ ! 15: #define S3MODES_H__ ! 16: ! 17: #import <objc/objc.h> ! 18: #import <mach/mach.h> ! 19: #import <driverkit/displayDefs.h> ! 20: #import <driverkit/i386/ioPorts.h> ! 21: #import "vgaModes.h" ! 22: ! 23: enum S3AdapterType { ! 24: UnknownAdapter, S3_805, S3_928, ! 25: }; ! 26: typedef enum S3AdapterType S3AdapterType; ! 27: ! 28: enum DACtype { ! 29: UnknownDAC, ! 30: ATT20C491, /* AT&T 20C491 or Sierra SC15025. */ ! 31: Bt484, /* BrookTree 484. */ ! 32: Bt485, /* BrookTree 485. */ ! 33: Bt485A, /* BrookTree 485A. */ ! 34: ATT20C505 /* AT&T 20C505 */ ! 35: }; ! 36: typedef enum DACtype DACtype; ! 37: ! 38: #define ONE_MEGABYTE (1 << 20) ! 39: #define TWO_MEGABYTES (2 << 20) ! 40: #define THREE_MEGABYTES (3 << 20) ! 41: #define FOUR_MEGABYTES (4 << 20) ! 42: ! 43: #define S3_XCRTC_COUNT 48 ! 44: #define S3_MODE_COUNT 10 /* Maximum refresh rate/mode control pairs. */ ! 45: ! 46: struct S3ModeControl { ! 47: unsigned char refreshRate; ! 48: unsigned char modeControl; /* 0x3D4:42 */ ! 49: }; ! 50: ! 51: struct S3Mode { ! 52: const char *name; /* The name of this mode. */ ! 53: S3AdapterType adapter; /* The adapter required for this mode. */ ! 54: unsigned long memSize; /* The memory necessary for this mode. */ ! 55: ! 56: struct S3ModeControl modeControl[S3_MODE_COUNT]; ! 57: unsigned char advFuncCntl; /* 0x4AE8 */ ! 58: unsigned char xcrtc[S3_XCRTC_COUNT]; ! 59: VGAMode vgaData; ! 60: }; ! 61: typedef struct S3Mode S3Mode; ! 62: ! 63: extern const IODisplayInfo S3_805_ModeTable[]; ! 64: extern const int S3_805_ModeTableCount; ! 65: extern const int S3_805_defaultMode; ! 66: extern const IODisplayInfo S3_928_ModeTable[]; ! 67: extern const int S3_928_ModeTableCount; ! 68: extern const int S3_928_defaultMode; ! 69: ! 70: /* Definitions for the S3 registers that we use. */ ! 71: ! 72: #define S3_EXTENDED_REGISTER_MAX 0x7F ! 73: ! 74: /* Indexes for S3 registers. */ ! 75: ! 76: #define S3_CHIP_ID_INDEX 0x30 /* Chip ID/REV register. */ ! 77: #define S3_CHIP_ID_MASK 0xF0 ! 78: #define S3_CHIP_ID_805 0xA0 ! 79: #define S3_CHIP_ID_928 0x90 ! 80: #define S3_REVISION_MASK 0x0F ! 81: ! 82: #define S3_MEM_CNFG_INDEX 0x31 /* Memory configuration register. */ ! 83: ! 84: #define S3_BKWD_2 0x33 /* Backward compatibility register. */ ! 85: ! 86: #define S3_CRTR_LOCK_INDEX 0x35 /* CRT register lock register. */ ! 87: ! 88: #define S3_CONFG_REG1_INDEX 0x36 /* Configuration 1 register. */ ! 89: #define S3_CONFG_REG2_INDEX 0x37 /* Configuration 2 register. */ ! 90: #define S3_BUS_SELECT_MASK 0x03 ! 91: #define S3_EISA_BUS 0x00 ! 92: #define S3_LOCAL_BUS 0x01 ! 93: #define S3_ISA_BUS 0x03 ! 94: #define S3_MEM_SIZE_MASK 0xC0 ! 95: #define S3_4_MEG 0 ! 96: #define S3_3_MEG (2 << 5) ! 97: #define S3_2_MEG (4 << 5) ! 98: #define S3_1_MEG (6 << 5) ! 99: #define S3_HALF_MEG (7 << 5) ! 100: ! 101: /* Lock registers */ ! 102: ! 103: #define S3_REG_LOCK1 0x38 /* Register lock 1 register. */ ! 104: #define S3_LOCK1_KEY 0x48 ! 105: #define S3_REG_LOCK2 0x39 /* Register lock 2 register. */ ! 106: #define S3_LOCK2_KEY 0xA0 ! 107: ! 108: #define S3_DT_EX_POS 0x3B /* Data transfer execute position ! 109: register. */ ! 110: #define S3_IL_RTSTART 0x3C /* Interlace retrace start register. */ ! 111: ! 112: /* System Control Registers */ ! 113: ! 114: #define S3_SYS_CNFG 0x40 /* System configuration register. */ ! 115: #define S3_8514_ACCESS_MASK 0x01 ! 116: #define S3_8514_ENABLE_ACCESS 0x01 ! 117: #define S3_8514_DISABLE_ACCESS 0x00 ! 118: #define S3_WRITE_POST_MASK 0x08 ! 119: #define S3_WRITE_POST_ENABLE 0x08 ! 120: #define S3_WRITE_POST_DISABLE 0x00 ! 121: ! 122: #define S3_MODE_CTL 0x42 /* Mode control register. */ ! 123: #define S3_EXT_MODE 0x43 /* Extended mode register. */ ! 124: #define S3_HGC_MODE 0x45 /* Hardware graphics cursor mode ! 125: register. */ ! 126: #define S3_ENB_485 (1 << 5)/* Cursor control enable for Brooktree ! 127: Bt485 DAC. */ ! 128: ! 129: /* System Extension Registers. */ ! 130: ! 131: #define S3_EX_SCTL_1 0x50 /* Extended system control 1 ! 132: register. */ ! 133: ! 134: #define S3_EX_MCTL_1 0x53 /* Extended memory control 1 ! 135: register. */ ! 136: #define S3_MMIO_ACCESS_MASK 0x10 ! 137: #define S3_ENABLE_MMIO_ACCESS 0x10 ! 138: #define S3_DISABLE_MMIO_ACCESS 0x00 ! 139: ! 140: #define S3_EX_MCTL_2 0x54 /* Extended memory control 2 ! 141: register. */ ! 142: #define S3_PREFETCH_CTRL_MASK 0x07 ! 143: #define S3_PREFETCH_MAX 0x07 ! 144: ! 145: #define S3_EX_DAC_CT 0x55 /* Extended video DAC control ! 146: register. */ ! 147: #define S3_DAC_R_SEL_MASK 0x03 /* Mask for extension bits of the ! 148: RS[1:0] signals for video DAC ! 149: addressing. */ ! 150: #define S3_ENB_SID 0x80 /* Enable external SID operation. */ ! 151: #define S3_HWGC_EXOP 0x20 /* Hardware cursor external operation ! 152: mode. */ ! 153: ! 154: #define S3_LAW_CTL 0x58 /* Linear address window control ! 155: register. */ ! 156: #define S3_LAW_SIZE_MASK 0x03 ! 157: #define S3_LAW_SIZE_64K 0x00 ! 158: #define S3_LAW_SIZE_1M 0x01 ! 159: #define S3_LAW_SIZE_2M 0x02 ! 160: #define S3_LAW_SIZE_4M 0x03 ! 161: #define S3_PREFETCH_MASK 0x04 ! 162: #define S3_ENABLE_PREFETCH 0x04 ! 163: #define S3_DISABLE_PREFETCH 0x00 ! 164: #define S3_LAW_ENABLE_MASK 0x10 ! 165: #define S3_ENABLE_LAW 0x10 ! 166: #define S3_DISABLE_LAW 0x00 ! 167: ! 168: #define S3_LAW_POS_HI 0x59 /* Linear address window position ! 169: registers. */ ! 170: #define S3_LAW_POS_LO 0x5A ! 171: ! 172: #define S3_GOUT_PORT 0x5C /* General output port register. */ ! 173: ! 174: #define S3_EXT_H_OVF 0x5D /* Extended horizontal overflow ! 175: register. */ ! 176: #define S3_EXT_V_OVF 0x5E /* Extended vertical overflow ! 177: register. */ ! 178: ! 179: /* Enhanced Command Registers */ ! 180: ! 181: #define S3_ADVFUNC_CNTL 0x4AE8 /* Advanced function control ! 182: register. */ ! 183: #define S3_GP_STAT 0x9AE8 /* Graphics processor status ! 184: register. */ ! 185: #define S3_GP_BUSY_MASK (1 << 9) ! 186: ! 187: /* DAC registers. */ ! 188: ! 189: #define RS_00 0x3C8 ! 190: #define RS_01 0x3C9 ! 191: #define RS_02 0x3C6 ! 192: #define RS_03 0x3C7 ! 193: ! 194: /* Register read/write helpers. */ ! 195: ! 196: /* Set an index on `port' to `index', and return the byte read from `port + 1'. ! 197: */ ! 198: static inline int rread(int port, int index) ! 199: { ! 200: outb(port, index); ! 201: return (inb(port + 1)); ! 202: } ! 203: ! 204: /* Use outw to send index and data together. ! 205: */ ! 206: static inline void rwrite(int port, int index, int value) ! 207: { ! 208: outw(port, index | (value << 8)); ! 209: } ! 210: ! 211: /* Read-modify-write. ! 212: */ ! 213: static inline void rrmw(int port, int index, int protect, int value) ! 214: { ! 215: unsigned int u = rread(port, index); ! 216: rwrite(port,index, (u & protect) | value); ! 217: } ! 218: ! 219: static inline void ! 220: S3_unlockRegisters(void) ! 221: { ! 222: rwrite(VGA_CRTC_INDEX, S3_REG_LOCK1, S3_LOCK1_KEY); ! 223: rwrite(VGA_CRTC_INDEX, S3_REG_LOCK2, S3_LOCK2_KEY); ! 224: } ! 225: ! 226: static inline void ! 227: S3_lockRegisters(void) ! 228: { ! 229: rwrite(VGA_CRTC_INDEX, S3_REG_LOCK1, 0); ! 230: rwrite(VGA_CRTC_INDEX, S3_REG_LOCK2, 0); ! 231: } ! 232: ! 233: #endif /* S3MODES_H__ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.