/************************************************************************/ /* */ /* ATIMP.H */ /* */ /* November 2 1992 (c) 1992, ATI Technologies Incorporated. */ /************************************************************************/ /********************** PolyTron RCS Utilities $Revision: 1.22 $ $Date: 01 Mar 1996 12:10:48 $ $Author: RWolff $ $Log: S:/source/wnt/ms11/miniport/archive/atimp.h_v $ * * Rev 1.22 01 Mar 1996 12:10:48 RWolff * Allocated more space for mapped registers, since VGA Graphics Index * and Graphics Data are now handled as separate registers rather than * as offsets into the block of VGA registers. * * Rev 1.21 02 Feb 1996 17:14:52 RWolff * Moved DDC/VDIF merge source information into hardware device extension * so each card can be considered independently in a multihead setup. * * Rev 1.20 29 Jan 1996 16:53:58 RWolff * Now uses VideoPortInt10() rather than no-BIOS code on PPC, removed * dead code. * * Rev 1.19 22 Dec 1995 14:52:32 RWolff * Added support for Mach 64 GT internal DAC. * * Rev 1.18 19 Dec 1995 14:00:26 RWolff * Increased size of buffer used to store query structure and mode tables * to allow for increase in the number of "canned" tables due to support * for higher refresh rates. * * Rev 1.17 28 Nov 1995 18:07:58 RWolff * Added "Card Initialized" field to hardware device extension. This * is part of multiheaded support, to prevent multiple initializations * of a single card. * * Rev 1.16 27 Oct 1995 14:21:26 RWolff * Removed mapped LFB from hardware device extension. * * Rev 1.15 08 Sep 1995 16:36:12 RWolff * Added support for AT&T 408 DAC (STG1703 equivalent). * * Rev 1.14 24 Aug 1995 15:38:38 RWolff * Changed detection of block I/O cards to match Microsoft's * standard for plug-and-play. * * Rev 1.13 28 Jul 1995 14:39:50 RWolff * Added support for the Mach 64 VT (CT equivalent with video overlay). * * Rev 1.12 31 Mar 1995 11:57:44 RWOLFF * Changed debug thresholds to avoid being swamped by level 3 statements * in VIDEOPRT.SYS, removed DEBUG_SWITCH since it's no longer used. * * Rev 1.11 30 Mar 1995 12:01:54 RWOLFF * Added definitions for debug level thresholds. * * Rev 1.10 07 Feb 1995 18:19:54 RWOLFF * Updated colour depth table for STG1702/1703. Entries for DACs * that are supposedly equivalent to these are unchanged, since * I did not have cards with these DACs and more than 2M of * video memory to test with. * * Rev 1.9 30 Jan 1995 11:56:42 RWOLFF * Added support for CT internal DAC. * * Rev 1.8 18 Jan 1995 15:39:32 RWOLFF * Added support for Chrontel DAC. * * Rev 1.7 23 Dec 1994 10:48:32 ASHANMUG * ALPHA/Chrontel-DAC * * Rev 1.6 18 Nov 1994 11:53:28 RWOLFF * Added support for split rasters, Power PC, and new DAC type DAC_STG1703. * * Rev 1.5 06 Sep 1994 10:46:52 ASHANMUG * Disable 1600x1200 on all cards except with TVM DAC * * Rev 1.4 31 Aug 1994 16:16:10 RWOLFF * Added support for TVP3026 DAC and 1152x864, doubled QUERYSIZE to * allow additional mode tables (needed because we now support 1152x864 * and 1600x1200, we have more refresh rates at 1280x1024, and TVP DAC * supports high-res high depth modes AND 4BPP). * * Rev 1.3 19 Aug 1994 17:06:22 RWOLFF * Added support for the SC15026 DAC. * * Rev 1.2 12 May 1994 11:09:00 RWOLFF * Expanded CardInfo field of hardware device extension structure to allow * more mode tables (needed when setting up "canned" refresh rates"), added * defined value for hardware default refresh rate. * * Rev 1.1 03 Mar 1994 12:37:10 ASHANMUG * Make pageable * * Rev 1.0 31 Jan 1994 11:40:12 RWOLFF * Initial revision. Rev 1.8 14 Jan 1994 15:19:14 RWOLFF Added support for 1600x1200 mode. Rev 1.7 15 Dec 1993 15:25:04 RWOLFF Added support for SC15021 DAC. Rev 1.6 30 Nov 1993 18:11:38 RWOLFF Changed maximum pixel depth for STG1700 DAC at 640x480 and 800x600 to 32BPP Rev 1.5 05 Nov 1993 13:22:46 RWOLFF Added new DAC types. Rev 1.4 08 Oct 1993 15:16:54 RWOLFF Updated build and version numbers. Rev 1.3 08 Oct 1993 11:01:46 RWOLFF Removed code specific to a particular family of ATI accelerators, added definition for a delay which is only used on DEC Alpha machines. Rev 1.2 24 Sep 1993 11:47:44 RWOLFF Added definition for DEBUG_SWITCH, which will allow VideoDebugPrint() calls to be turned on and off all at once. Rev 1.1 03 Sep 1993 14:27:00 RWOLFF Partway through CX isolation. Rev 1.0 16 Aug 1993 13:30:56 Robert_Wolff Initial revision. Rev 1.15 06 Jul 1993 15:48:32 RWOLFF Added MaxDepth[] entries for AT&T 491 and ATI 68860 DACs. Rev 1.14 10 Jun 1993 15:57:02 RWOLFF Added definition for size of buffer used in registry reads, moved definition of checked-version-only breakpoint INT here to avoid duplicating it in all C files. Rev 1.13 07 Jun 1993 12:59:00 BRADES add EXT_CUR_Y, and EXT_SRC_Y mach8 register defines. Rev 1.12 18 May 1993 14:07:38 RWOLFF Added definition TTY_ATTR_NORMAL (white on blue attribute), which is needed in aperture tests and was supplied by now-obsolete TTY.H. Rev 1.11 10 May 1993 16:41:18 RWOLFF Added table listing maximum pixel depth for each supported DAC/resolution combination. Rev 1.10 30 Apr 1993 17:08:24 RWOLFF RegistryBuffer is now dynamically allocated. Rev 1.9 30 Apr 1993 15:52:42 BRADES fix DISP_STATUS from 5 to 2e8. Rev 1.7 14 Apr 1993 17:41:30 RWOLFF Removed redundant definitions to eliminate warnings. Rev 1.6 08 Apr 1993 16:45:42 RWOLFF Revision level as checked in at Microsoft. Rev 1.5 30 Mar 1993 17:09:38 RWOLFF Made RegistryParameterCallback() avialable to all miniport source files, increased buffer capacity for registry reads. Rev 1.4 25 Mar 1993 11:17:16 RWOLFF No longer grabs registers we don't use. Rev 1.3 08 Mar 1993 19:30:52 BRADES submit to MS NT Rev 1.2 10 Feb 1993 13:00:48 Robert_Wolff Added VideoRamLength field to HW_DEVICE_EXTENSION, FrameLength is now the aperture size rather than the amount of video memory. Rev 1.1 05 Feb 1993 16:55:06 Robert_Wolff Now initializes "shareable" field of VIDEO_ACCESS_RANGE structures to allow VGA driver to run concurrently with ours. This allows switching to/from full-screen DOS sessions. Rev 1.0 05 Feb 1993 16:17:42 Robert_Wolff Initial revision. Rev 1.0 02 Nov 1992 20:48:14 Chris_Brady Initial revision. End of PolyTron RCS section *****************/ #ifdef DOC DESCRIPTION ATI Windows NT Miniport driver for the Mach64, Mach32, and Mach8 families. This file will select the appropriate functions depending on the computer configuration. Environment: Kernel mode #endif /* * SPLIT_RASTERS is defined in order to work with a display driver which * may break a scan line across the boundary between 64k pages when using * the VGA aperture, and undefined when working with a display driver * which requires that every scan line be contained within a single page * (modes with a screen width of less than 1024 pixels are padded to a * pitch of 1024, modes with a width greater than 1024 but less than * 2048 are padded to a pitch of 2048). */ #define SPLIT_RASTERS 1 /* * Values used to indicate priority of VideoDebugPrint() calls. * * To set the debug threshold, set the ati\Device0\VideoDebugLevel * registry field to the lowest-priority debug statments you want * to see. For example, a value of 2 will display DEBUG_ERROR and * DEBUG_IMPORTANT in addition to DEBUG_TRACE, but will not display * DEBUG_DETAIL. */ #define DEBUG_ERROR 0 /* Statements with this level should never happen */ #define DEBUG_NORMAL 1 /* Entry/exit points of major functions and other important information */ #define DEBUG_DETAIL 2 /* Detailed debug information */ #define DEBUG_RIDICULOUS 3 /* This level will trigger MASSIVE numbers of statments from VIDEOPRT.SYS */ /* * Uncomment to allow building using free version of VIDEOPRT.LIB */ //#undef VideoDebugPrint //#define VideoDebugPrint(x) /* * Delay for DEC Alpha and other machines too fast to allow * consecutive I/O instructions without a delay in between. */ #if defined (ALPHA) || defined (_ALPHA_) #define DEC_DELAY delay(3); #else #define DEC_DELAY #endif /* * Definitions used by the IOCTL_VIDEO_ATI_GET_VERSION packet. */ #define MINIPORT_BUILD 511 /* NT Retail build number */ #define MINIPORT_VERSION_MAJOR 0 /* Major version number */ #define MINIPORT_VERSION_MINOR 3 /* Minor version number */ // #define DBG 1 #define CURSOR_WIDTH 64 #define CURSOR_HEIGHT 64 /* * Screen attributes for "blue screen" text (white on blue), used * to recognize whether or not we are looking at the "blue screen" * or other memory. */ #define TTY_ATTR_NORMAL 0x17 //------------------------------------------------------------------------ /* * List of available resolutions */ #define RES_640 0 #define RES_800 1 #define RES_1024 2 #define RES_1152 3 #define RES_1280 4 #define RES_1600 5 /* * "Card found" status variables. We support a single card that does * not use block relocatable I/O, or up to 16 cards (INT 10 AH=A0 through * AH=AF) that use block relocatable I/O, but never a mix of block and * non-block cards. */ extern BOOL FoundNonBlockCard; extern USHORT NumBlockCardsFound; /* * List of greatest pixel depths available for each supported * DAC at all resolutions. * * A value of 0 indicates that the DAC is known to not support * the corresponding resolution. A value of 1 indicates that * it is unknown whether or not the DAC supports the corresponding * resolution. Since we don't report any modes with a colour depth * less than 4BPP, both will be seen as the resolution not being * supported. */ #ifdef INCLUDE_ATIMP short MaxDepth[HOW_MANY_DACs][RES_1600-RES_640+1] = { 16, 16, 16, 16, 8, 1, /* DAC_ATI_68830 */ 24, 16, 8, 8, 8, 1, /* DAC_SIERRA */ 32, 32, 16, 16, 8, 1, /* DAC_TI34075 */ 8, 8, 8, 8, 8, 1, /* DAC_BT47x */ 24, 16, 8, 8, 8, 1, /* DAC_BT48x */ 32, 32, 32, 32, 24, 1, /* DAC_ATI_68860 */ 32, 32, 16, 16, 8, 1, /* DAC_STG1700 */ 24, 24, 24, 24, 16, 1, /* DAC_SC15021 NOTE: Should be able to handle 32BPP. */ /* * DAC types below are for cases where incompatible DAC types * report the same code in CONFIG_STATUS_1. Since the DAC type * field is 3 bits and can't grow (bits immediately above and * below are already assigned), DAC types 8 and above will * not conflict with reported DAC types but are still legal * in the query structure's DAC type field (8 bit unsigned integer). */ 24, 16, 8, 8, 8, 1, /* DAC_ATT491 */ 32, 32, 16, 16, 8, 1, /* DAC_ATT498 */ 24, 16, 8, 8, 8, 1, /* DAC_SC15026 */ 32, 32, 32, 32, 24, 24, /* DAC_TVP3026 */ 32, 32, 32, 32, 24, 24, /* DAC_IBM514 */ 32, 32, 24, 16, 16, 1, /* DAC_STG1702 */ 32, 32, 24, 16, 16, 1, /* DAC_STG1703 */ 32, 32, 16, 16, 8, 1, /* DAC_CH8398 */ 32, 32, 16, 16, 8, 1, /* DAC_ATT408 */ 32, 32, 16, 16, 8, 1, /* DAC_INTERNAL_CT */ 32, 32, 16, 16, 8, 1, /* DAC_INTERNAL_GT */ 32, 32, 16, 16, 8, 1 /* DAC_INTERNAL_VT */ }; #else extern short MaxDepth[HOW_MANY_DACs][RES_1600-RES_640+1]; #endif //----------------------------------------------------------------------- typedef struct tagVDATA { ULONG Address; ULONG Value; } VDATA, *PVDATA; //------------------------------------------ #ifndef QUERYSIZE #define QUERYSIZE 12288 #endif /* * Value stored in VIDEO_MODE_INFORMATION.Frequency field to * indicate hardware default refresh rate. */ #define DEFAULT_REFRESH 1 /* * Number of mapped address ranges allowed in HW_DEVICE_EXTENSION * structure. Modules which will be mapping address ranges to fill * arrays with this size contain checks on this value. If the array * would be overfilled, these checks will cause compile-time errors. */ #define NUM_ADDRESS_RANGES_ALLOWED 108 /* * Define device extension structure. This is device dependant/private * information. */ typedef struct _HW_DEVICE_EXTENSION { /* * I/O space ranges used. The extra 1 is for the * VGAWONDER extended base register, which is determined * at runtime. */ PVOID aVideoAddressIO[NUM_ADDRESS_RANGES_ALLOWED]; /* * Memory Mapped address ranges used. This array must * be the same size as the I/O mapped array. */ PVOID aVideoAddressMM[NUM_ADDRESS_RANGES_ALLOWED]; PVOID RomBaseRange; /* ROM address range used */ PHYSICAL_ADDRESS PhysicalFrameAddress; /* Physical address of the LFB */ ULONG VideoRamSize; /* Amount of installed video memory */ ULONG FrameLength; /* Aperture size. */ ULONG ModeIndex; /* Index of current mode in either ModesVGA[] */ /* or mode tables in CardInfo[], depending on */ /* whether video card is VGAWonder or accelerator */ ULONG HardwareCursorAddr; /* Storage of cursor bitmap for 68800 hardware cursor */ ULONG ModelNumber; /* ATI Adapter Card Type */ USHORT BiosPrefix; /* Card sequence for accelerator INT 10 calls */ ULONG BaseIOAddress; /* Used in matching BIOS prefix to I/O base on relocatable cards */ char CardInfo[QUERYSIZE]; /* Storage for query information */ struct st_eeprom_data *ee; /* Information used to access EEPROM */ /* * The following 4 fields are used when re-initializing the windowed * screen after a full-screen DOS session. They are a flag to show * that the mode is being re-initialized instead of entered for the * first time, the palette of colours to use, the first palette entry * to be reloaded, and the number of palette entries to be reloaded. */ BOOL ReInitializing; ULONG Clut[256]; USHORT FirstEntry; USHORT NumEntries; /* * Used to ensure that ATIMPInitialize() is only called once for * any given card. */ BOOL CardInitialized; ULONG PreviousPowerState; /* * Shows whether to merge "canned" mode tables with tables from * VDIF file, or with tables from EDID structure returned by DDC. */ ULONG MergeSource; ULONG EdidChecksum; /* Checksum of EDID structure */ } HW_DEVICE_EXTENSION, *PHW_DEVICE_EXTENSION; #if defined INCLUDE_ATIMP PHW_DEVICE_EXTENSION phwDeviceExtension; // Global Miniport Variable now #else extern PHW_DEVICE_EXTENSION phwDeviceExtension; #endif /* * Registry callback routine and buffers to allow data to be retrieved * by other routines. */ extern VP_STATUS RegistryParameterCallback( PHW_DEVICE_EXTENSION phwDeviceExtension, PVOID Context, PWSTR Name, PVOID Data, ULONG Length ); #define REGISTRY_BUFFER_SIZE 200 /* Size of buffer used in registry reads */ extern UCHAR RegistryBuffer[]; /* Last value retrieved from the registry */ extern ULONG RegistryBufferLength; /* Size of last retrieved value */ /* * Macros to provide debug breakpoints in checked version while * clearing them in free version. */ #if DBG #if defined(i386) || defined(_X86_) #define INT _asm int 3; #else #define INT DbgBreakPoint(); /* * Function prototype has vanished from headers we include, so * we must supply it on our own. */ extern void DbgBreakPoint(void); #endif #else #define INT #endif /* * Routine to make an absolute far call. */ #if 0 #ifdef _X86_ extern VP_STATUS CallAbsolute(unsigned short, unsigned short, VIDEO_X86_BIOS_ARGUMENTS *); #endif #endif