|
|
1.1 ! root 1: /*++ ! 2: ! 3: Copyright (c) 1990-1992 Microsoft Corporation ! 4: ! 5: Module Name: ! 6: ! 7: s3.h ! 8: ! 9: Abstract: ! 10: ! 11: This module contains the definitions for the S3 miniport driver. ! 12: ! 13: Environment: ! 14: ! 15: Kernel mode ! 16: ! 17: Revision History: ! 18: ! 19: --*/ ! 20: ! 21: #include "dderror.h" ! 22: #include "devioctl.h" ! 23: #include "miniport.h" ! 24: ! 25: #include "ntddvdeo.h" ! 26: #include "video.h" ! 27: ! 28: ! 29: // ! 30: // Number of access ranges used by an S3. ! 31: // ! 32: ! 33: #define NUM_S3_ACCESS_RANGES 22 ! 34: #define S3_EXTENDED_RANGE_START 4 ! 35: ! 36: ! 37: // ! 38: // Supported board definitions. ! 39: // ! 40: ! 41: typedef enum _S3_BOARDS { ! 42: S3_GENERIC = 0, ! 43: S3_ORCHID, ! 44: S3_NUMBER_NINE, ! 45: S3_DELL, ! 46: MAX_S3_BOARD ! 47: } S3_BOARDS; ! 48: ! 49: // ! 50: // Chip type definitions ! 51: // ! 52: ! 53: typedef enum _S3_CHIPSETS { ! 54: S3_911 = 0, // 911 and 924 boards ! 55: S3_801, // 801 and 805 boards ! 56: S3_928, // 928 boards ! 57: MAX_S3_CHIPSET ! 58: } S3_CHIPSET; ! 59: ! 60: // ! 61: // Characteristics of each mode ! 62: // ! 63: ! 64: typedef struct _S3_VIDEO_MODES { ! 65: ! 66: UCHAR ModeValid; ! 67: ULONG RequiredVideoMemory; ! 68: USHORT Int10ModeNumber; ! 69: ! 70: PUSHORT CRTCTables[MAX_S3_CHIPSET]; // Array of mode table pointers. ! 71: ! 72: VIDEO_MODE_INFORMATION ModeInformation; ! 73: ! 74: } S3_VIDEO_MODES, *PS3_VIDEO_MODES; ! 75: ! 76: ! 77: // ! 78: // Register definitions used with VideoPortRead/Write functions ! 79: // ! 80: ! 81: #define DAC_PIXEL_MASK_REG (PVOID) ((ULONG)( ((PHW_DEVICE_EXTENSION)HwDeviceExtension)->MappedAddress[2]) + (0x03C6 - 0x03C0)) ! 82: ! 83: #define DAC_ADDRESS_WRITE_PORT (PVOID) ((ULONG)(HwDeviceExtension->MappedAddress[2]) + (0x03C8 - 0x03C0)) ! 84: #define DAC_DATA_REG_PORT (PVOID) ((ULONG)(HwDeviceExtension->MappedAddress[2]) + (0x03C9 - 0x03C0)) ! 85: ! 86: #define MISC_OUTPUT_REG_WRITE (PVOID) ((ULONG)(HwDeviceExtension->MappedAddress[2]) + (0x03C2 - 0x03C0)) ! 87: #define MISC_OUTPUT_REG_READ (PVOID) ((ULONG)(HwDeviceExtension->MappedAddress[2]) + (0x03CC - 0x03C0)) ! 88: ! 89: #define SEQ_ADDRESS_REG (PVOID) ((ULONG)(HwDeviceExtension->MappedAddress[2]) + (0x03C4 - 0x03C0)) ! 90: #define SEQ_DATA_REG (PVOID) ((ULONG)(HwDeviceExtension->MappedAddress[2]) + (0x03C5 - 0x03C0)) ! 91: ! 92: #define CRT_ADDRESS_REG (PVOID) ((PHW_DEVICE_EXTENSION)HwDeviceExtension)->MappedAddress[3] ! 93: #define CRT_DATA_REG (PVOID) ((ULONG)( ((PHW_DEVICE_EXTENSION)HwDeviceExtension)->MappedAddress[3]) + (0x03D5 - 0x03D4)) ! 94: #define SYSTEM_CONTROL_REG (PVOID) ((ULONG)( ((PHW_DEVICE_EXTENSION)HwDeviceExtension)->MappedAddress[3]) + (0x03DA - 0x03D4)) ! 95: ! 96: #define ADV_FUNC_CTL (PVOID) ((PHW_DEVICE_EXTENSION)HwDeviceExtension)->MappedAddress[5] ! 97: ! 98: #define SUB_SYS_STAT HwDeviceExtension->MappedAddress[4] // 0x42E8 ! 99: #define CUR_Y HwDeviceExtension->MappedAddress[6] // 0x82E8 ! 100: #define CUR_X HwDeviceExtension->MappedAddress[7] // 0x86E8 ! 101: #define RECT_WIDTH HwDeviceExtension->MappedAddress[11] // 0x96E8 ! 102: #define GP_STAT ((PHW_DEVICE_EXTENSION)HwDeviceExtension)->MappedAddress[12] // 0x9AE8 ! 103: #define CMD HwDeviceExtension->MappedAddress[12] // 0x9AE8 ! 104: #define BKGD_COLOR HwDeviceExtension->MappedAddress[14] // 0xA2E8 ! 105: #define FRGD_COLOR HwDeviceExtension->MappedAddress[15] // 0xA6E8 ! 106: #define WRT_MASK HwDeviceExtension->MappedAddress[16] // 0xAAE8 ! 107: #define RD_MASK HwDeviceExtension->MappedAddress[17] // 0xAEE8 ! 108: #define BKGD_MIX HwDeviceExtension->MappedAddress[18] // 0xB6E8 ! 109: #define FRGD_MIX HwDeviceExtension->MappedAddress[19] // 0xBAE8 ! 110: #define MULTIFUNC_CNTL HwDeviceExtension->MappedAddress[20] // 0xBEE8 ! 111: #define PIXEL_TRANSFER HwDeviceExtension->MappedAddress[21] // 0xE2E8 ! 112: ! 113: // ! 114: // Define device extension structure. This is device dependant/private ! 115: // information. ! 116: // ! 117: ! 118: typedef struct _HW_DEVICE_EXTENSION { ! 119: PVOID FrameAddress; ! 120: PHYSICAL_ADDRESS PhysicalFrameAddress; ! 121: ULONG FrameLength; ! 122: PHYSICAL_ADDRESS PhysicalRegisterAddress; ! 123: ULONG RegisterLength; ! 124: UCHAR RegisterSpace; ! 125: BOOLEAN bUsingInt10; ! 126: ULONG ModeNumber; ! 127: ULONG BoardID; ! 128: ULONG ChipID; ! 129: ULONG NumAvailableModes; ! 130: ULONG AdapterMemorySize; ! 131: PVOID MappedAddress[NUM_S3_ACCESS_RANGES]; ! 132: } HW_DEVICE_EXTENSION, *PHW_DEVICE_EXTENSION; ! 133: ! 134: ! 135: // ! 136: // Highest valid DAC color register index. ! 137: // ! 138: ! 139: #define VIDEO_MAX_COLOR_REGISTER 0xFF ! 140: ! 141: ! 142: // Equates to handle the S3 graphics engine. ! 143: ! 144: #define S3BM_WIDTH 1024 ! 145: #define S3BM_HEIGHT 768 ! 146: ! 147: ! 148: // Command Types ! 149: ! 150: #define NOP 0x0000 ! 151: #define DRAW_LINE 0x2000 ! 152: #define RECTANGLE_FILL 0x4000 ! 153: #define BITBLT 0xC000 ! 154: ! 155: #define BYTE_SWAP 0x1000 ! 156: #define BUS_SIZE_16 0x0200 ! 157: #define BUS_SIZE_8 0x0000 ! 158: #define WAIT 0x0100 ! 159: ! 160: // Drawing directions (radial) ! 161: ! 162: #define DRAWING_DIRECTION_0 0x0000 ! 163: #define DRAWING_DIRECTION_45 0x0020 ! 164: #define DRAWING_DIRECTION_90 0x0040 ! 165: #define DRAWING_DIRECTION_135 0x0060 ! 166: #define DRAWING_DIRECTION_180 0x0080 ! 167: #define DRAWING_DIRECTION_225 0x00A0 ! 168: #define DRAWING_DIRECTION_270 0x00C0 ! 169: #define DRAWING_DIRECTION_315 0x00E0 ! 170: ! 171: // Drawing directions (x/y) ! 172: ! 173: #define DRAWING_DIR_BTRLXM 0x0000 ! 174: #define DRAWING_DIR_BTLRXM 0x0020 ! 175: #define DRAWING_DIR_BTRLYM 0x0040 ! 176: #define DRAWING_DIR_BTLRYM 0x0060 ! 177: #define DRAWING_DIR_TBRLXM 0x0080 ! 178: #define DRAWING_DIR_TBLRXM 0x00A0 ! 179: #define DRAWING_DIR_TBRLYM 0x00C0 ! 180: #define DRAWING_DIR_TBLRYM 0x00E0 ! 181: ! 182: // Drawing Direction Bits ! 183: ! 184: #define PLUS_X 0x0020 ! 185: #define PLUS_Y 0x0080 ! 186: #define MAJOR_Y 0x0040 ! 187: ! 188: // Draw ! 189: ! 190: #define DRAW 0x0010 ! 191: ! 192: // Direction type ! 193: ! 194: #define DIR_TYPE_RADIAL 0x0008 ! 195: #define DIR_TYPE_XY 0x0000 ! 196: ! 197: // Last Pixel ! 198: ! 199: #define LAST_PIXEL_OFF 0x0004 ! 200: #define LAST_PIXEL_ON 0x0000 ! 201: ! 202: // Pixel Mode ! 203: ! 204: #define MULTIPLE_PIXELS 0x0002 ! 205: #define SINGLE_PIXEL 0x0000 ! 206: ! 207: // Read/Write ! 208: ! 209: #define READ 0x0000 ! 210: #define WRITE 0x0001 ! 211: ! 212: ! 213: // G.P. Status ! 214: ! 215: #define HARDWARE_BUSY 0x200 ! 216: #define READ_DATA_AVAILABLE 0x100 ! 217: ! 218: // Fifo Status ! 219: ! 220: #define FIFO_7_STATUS 0x080 ! 221: #define FIFO_6_STATUS 0x040 ! 222: #define FIFO_5_STATUS 0x020 ! 223: #define FIFO_4_STATUS 0x010 ! 224: #define FIFO_3_STATUS 0x008 ! 225: #define FIFO_2_STATUS 0x004 ! 226: #define FIFO_1_STATUS 0x002 ! 227: #define FIFO_0_STATUS 0x001 ! 228: ! 229: // Fifo status in terms of empty entries ! 230: ! 231: #define FIFO_1_EMPTY FIFO_7_STATUS ! 232: #define FIFO_2_EMPTY FIFO_6_STATUS ! 233: #define FIFO_3_EMPTY FIFO_5_STATUS ! 234: #define FIFO_4_EMPTY FIFO_4_STATUS ! 235: #define FIFO_5_EMPTY FIFO_3_STATUS ! 236: #define FIFO_6_EMPTY FIFO_2_STATUS ! 237: #define FIFO_7_EMPTY FIFO_1_STATUS ! 238: #define FIFO_8_EMPTY FIFO_0_STATUS ! 239: ! 240: ! 241: ! 242: // These are the defines for the multifunction control register. ! 243: // The 4 MSBs define the function of the register. ! 244: ! 245: #define RECT_HEIGHT 0x0000 ! 246: ! 247: #define CLIP_TOP 0x1000 ! 248: #define CLIP_LEFT 0x2000 ! 249: #define CLIP_BOTTOM 0x3000 ! 250: #define CLIP_RIGHT 0x4000 ! 251: ! 252: ! 253: #define DATA_EXTENSION 0xA000 ! 254: #define ALL_ONES 0x0000 ! 255: #define CPU_DATA 0x0080 ! 256: #define DISPLAY_MEMORY 0x00C0 ! 257: ! 258: // Color source ! 259: ! 260: #define BACKGROUND_COLOR 0x00 ! 261: #define FOREGROUND_COLOR 0x20 ! 262: #define SRC_CPU_DATA 0x40 ! 263: #define SRC_DISPLAY_MEMORY 0x60 ! 264: ! 265: // Mix modes ! 266: ! 267: #define NOT_SCREEN 0x00 ! 268: #define LOGICAL_0 0x01 ! 269: #define LOGICAL_1 0x02 ! 270: #define LEAVE_ALONE 0x03 ! 271: #define NOT_NEW 0x04 ! 272: #define SCREEN_XOR_NEW 0x05 ! 273: #define NOT_SCREEN_XOR_NEW 0x06 ! 274: #define OVERPAINT 0x07 ! 275: #define NOT_SCREEN_OR_NOT_NEW 0x08 ! 276: #define SCREEN_OR_NOT_NEW 0x09 ! 277: #define NOT_SCREEN_OR_NEW 0x0A ! 278: #define SCREEN_OR_NEW 0x0B ! 279: #define SCREEN_AND_NEW 0x0C ! 280: #define NOT_SCREEN_AND_NEW 0x0D ! 281: #define SCREEN_AND_NOT_NEW 0x0E ! 282: #define NOT_SCREEN_AND_NOT_NEW 0x0F ! 283: ! 284: // ! 285: // General purpose support routines & macros. ! 286: // ! 287: ! 288: #define FIFOWAIT(level) while (VideoPortReadPortUshort(GP_STAT) & level);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.