|
|
/*************************************************************************
** ** ** ATINT.H ** ** ** ** Copyright (c) 1992, ATI Technologies Inc. ** *************************************************************************
Contains information specific to Windows NT, and is common between the Install application ANTPANEL, and the Display and Miniport drivers.
$Revision: 1.19 $ $Date: 30 Apr 1996 13:20:36 $ $Author: reng $ $Log: S:/source/wnt/ms11/displays/archive/atint.h_v $ * * Rev 1.19 30 Apr 1996 13:20:36 reng * 1 Meg SDRAM problem; GT cursor problem * * Rev 1.18 03 Apr 1996 10:12:26 reng * use WINVER to distinguish NT 4.0 from NT 3.51 * * Rev 1.17 26 Mar 1996 15:27:38 reng * New driver sources * * Rev 1.16 23 Jan 1996 11:41:36 RWolff * Now forces compile-time error if NTDDVDEO.H is not included before * this file rather than generating false values of TARGET_BUILD, added * DrvEscape() functions used by multiheaded display applet. * * Rev 1.15 22 Dec 1995 14:59:32 RWolff * Added support for Mach 64 GT internal DAC. * * Rev 1.14 21 Dec 1995 14:05:36 RWolff * Added TARGET_BUILD definition to identify which version of NT we are * building for, rather than using a different definition for each break * between versions. * * Rev 1.13 23 Nov 1995 11:25:10 RWolff * Added multihead support. * * Rev 1.12 24 Aug 1995 15:38:04 RWolff * Added definitions to report CT and VT ASICs to the display driver. * * Rev 1.11 27 Feb 1995 17:46:44 RWOLFF * Added flag for packed (relocatable) I/O to ENH_VERSION_NT.FeatureFlags * bitmask. * * Rev 1.10 24 Feb 1995 12:23:08 RWOLFF * Added flag for 24BPP text banding to ModeFlags field of mode * information structure. * * Rev 1.9 03 Feb 1995 15:14:16 RWOLFF * Added Feature Flag to show that dense space is available. * * Rev 1.8 30 Jan 1995 11:54:36 RWOLFF * Made detection of Daytona vs. older versions of NT automatic, miniport * and display driver now use the same version of this file. * * Rev 1.7 23 Dec 1994 10:48:34 ASHANMUG * ALPHA/Chrontel-DAC * * Rev 1.6 31 Aug 1994 16:18:38 RWOLFF * Added definiton to go in ENH_VERSION_NT.FeatureFlags to show that * TVP3026 cursor handling is needed. * * Rev 1.5 04 May 1994 19:24:04 RWOLFF * Moved block write flag back to IOCTL_VIDEO_ATI_GET_MODE_INFORMATION * because the test can only be run if we have already switched * into graphics mode. * * Rev 1.4 28 Apr 1994 10:58:52 RWOLFF * Moved mode-independent bug/feature flags to IOCTL_VIDEO_ATI_GET_VERSION * packet from IOCTL_VIDEO_ATI_GET_MODE_INFORMATION packet. * * Rev 1.3 27 Apr 1994 13:52:58 RWOLFF * Added definition for MIO bug in ModeFlags bitfield. * * Rev 1.2 31 Mar 1994 15:00:52 RWOLFF * Added key to be used in DrvEscape() and values to be returned. * * Rev 1.1 14 Mar 1994 16:29:08 RWOLFF * Added bit definition in ModeFlags for 2M boundary tearing, DPMS IOCTL * is now consistent with Daytona. * * Rev 1.0 31 Jan 1994 11:29:10 RWOLFF * Initial revision. * * Rev 1.3 24 Jan 1994 18:01:42 RWOLFF * Added definitions for new Mach 32 ASIC (68800LX), changed some Mach 64 * definitions to accomodate changes in 94/01/19 BIOS document. * * Rev 1.2 14 Jan 1994 15:19:32 RWOLFF * Added definition for unknown non-Mach32 ASIC, flags to show if block * write and memory mapped registers are available, added fields for * bus type in ENH_VERSION_NT structure, preliminary structure and * definitions for DPMS packet. * * Rev 1.1 30 Nov 1993 18:12:12 RWOLFF * Renamed definitions for Mach 64 chip. * * Rev 1.0 03 Sep 1993 14:27:20 RWOLFF * Initial revision.
Rev 1.5 22 Jan 1993 14:49:34 Chris_Brady add card capabilities to GET_INFO Ioctl.
Rev 1.4 22 Jan 1993 14:46:40 Chris_Brady add ATIC_ defines for the card capabilities.
Rev 1.3 20 Jan 1993 17:47:16 Robert_Wolff Added PVERSION_NT type definition, removed obsolete comment.
Rev 1.2 19 Jan 1993 09:50:58 Chris_Brady add ANT_ drawing interface defines.
Rev 1.1 18 Jan 1993 15:49:34 Chris_Brady new GetInof structure.
Rev 1.0 15 Jan 1993 16:43:08 Chris_Brady Initial revision.
------------------------------------------------------------------------*/
// is in the \ddk\public\sdk\inc directory
#include <devioctl.h>
// allow the miniport driver to Force seletion of a Programming Interface
enum { ANT_DEFAULT=0, ANT_ENGINE_ONLY, ANT_APERTURE, ANT_VGA };
// Private Display driver Functions. Communication from ANTPANEL to
// the Display ATI*.DLL to the Miniport ATI*.SYS drivers.
enum { ATI_GET_INFO=1, ATI_GET_nextone };
// Define the possible ATI graphics card configurations so the Display
// driver can decide the best drawing methods to use.
// size is ULONG 32 bit field
// assigned by miniport to VERSION_NT.capcard
#define ATIC_FIELD_LONGEST 0x80000000 //just to illustrate size
#define ATIC_APERTURE_LFB 0x0400
#define ATIC_APERTURE_VGA 0x0200
#define ATIC_APERTURE_NONE 0x0100 //neither VGA or LFB found
#define ATIC_CARD_TYPE 0x00F0 //defines from 68801.h << 4
#define ATIC_BUS_TYPE 0x000F //defines from 68801.H
// used with IOCTL_VIDEO_ATI_GET_VERSION
// In hex: BBBBVVMM where
// BBBB is the build number (0-32767),
// VV is the major version number (0-255)
// MM is the minor version number (0-255)
typedef struct { ULONG display; //Display Version number
ULONG miniport; //Miniport Version number
ULONG capcard; //card capabilities
struct { short xres; short yres; short color; // maximum bits per pixel
} resolution[6]; } VERSION_NT, *PVERSION_NT;
/*
* Definitions used with the ENH_VERSION_NT structure */ #define ENH_REVISION 1 // First revision of ENH_VERSION_NT structure
#define BETA_MINIPORT 0x00000080 // Bit set in InterfaceVersion for unsupported miniport versions
enum { CI_38800_1 = 0, // Mach 8 ASIC, only one revision in use
CI_68800_3, // Mach 32 ASIC, first production revision
CI_68800_6, // Mach 32 ASIC, second production revision
CI_68800_AX, // Mach 32 AX ASIC
CI_88800_GX, // Mach 64 GX ASIC
CI_68800_LX, // Mach 32 LX ASIC
CI_OTHER_UNKNOWN=30, // Unknown ASIC other than Mach 32
CI_68800_UNKNOWN=31, // Mach 32 ASIC other than versions above
CI_M64_VTA };
#define FL_CI_38800_1 0x00000001
#define FL_CI_68800_3 0x00000002
#define FL_CI_68800_6 0x00000004
#define FL_CI_68800_AX 0x00000008
#define FL_CI_88800_GX 0x00000010
#define FL_CI_68800_LX 0x00000020
#define FL_CI_OTHER_UNKNOWN 0x40000000
#define FL_CI_68800_UNKNOWN 0x80000000
enum { ENGINE_ONLY = 0, // No aperture available
AP_LFB, // Linear framebuffer available
AP_68800_VGA, // 64k VGA aperture available
AP_CX_VGA // Two 32k VGA apertures available
};
#define FL_ENGINE_ONLY 0x00000001
#define FL_AP_LFB 0x00000002
#define FL_68800_VGA 0x00000004
#define FL_CX_VGA 0x00000008
#define FL_MM_REGS 0x80000000 /* Memory Mapped registers are available */
/*
* Values which can be placed in FeatureFlags field of ENH_VERSION_NT. * * Flags should be added to this field if they represent bugs/features * which affect all resolution/pixel depth combinations on a given card. */ #define EVN_DPMS 0x00000001 // DPMS is supported
#define EVN_SPLIT_TRANS 0x00000002 // This card has split transfer bug
#define EVN_MIO_BUG 0x00000004 // Card has multiple in/out hardware bug
#define EVN_TVP_DAC_CUR 0x00000008 // Cursor handled by TVP DAC, not the ASIC
#define EVN_IBM514_DAC_CUR 0x00000010 // Cursor handled by IBM DAC, not the ASIC
#define EVN_DENSE_CAPABLE 0x00000020 // Card is capable of using dense space
#define EVN_PACKED_IO 0x00000040 // Card uses packed I/O space
#define EVN_INT_DAC_CUR 0x00000080 /* Cards with internal DAC must use double buffer to avoid flickering cursor */
#define EVN_VT_ASIC 0x00000100 /* VT has extended capabilities our other cards don't */
#define EVN_GT_ASIC 0x00000200 /* GT has extended capabilities our other cards don't */
#define EVN_CT_ASIC 0x00000400 /* Identify CT ASIC */
/*
* Cards with 1M of SDRAM need special handling (problem occurs on the * VTA4, may or may not happen with this configuration on future ASICs). */ #define EVN_SDRAM_1M 0x00000800
/*
* Enhanced information structure for use with IOCTL_VIDEO_ATI_GET_VERSION. * This structure will be used if a non-null input buffer is passed when * making the call, and the older structure above will be used if a null * input buffer is passed. */ typedef struct{ ULONG StructureVersion; /* Revision of structure being passed in */ ULONG InterfaceVersion; /* Revision of private interface being used */ ULONG ChipIndex; /* Which accelerator chip is present */ ULONG ChipFlag; /* Flag corresponding to chip being used */ ULONG ApertureType; /* Best aperture type available */ ULONG ApertureFlag; /* Flag corresponding to aperture type */ ULONG BusType; /* Type of bus being used */ ULONG BusFlag; /* Flag corresponding to bus type */ ULONG FeatureFlags; /* Flags for features/bugs of this card */ ULONG NumCards; /* Number of ATI cards in the system */ } ENH_VERSION_NT, *PENH_VERSION_NT;
/*
* Values which can be placed in ModeFlags field of ATI_MODE_INFO. * * Flags should be added to this field if they represent bugs/features * which affect some but not all resolution/pixel depth combinations * on a given card. */ #define AMI_ODD_EVEN 0x00000001 // Hardware cursor odd/even bug, undefined
// for cards without hardware cursor
#define AMI_MIN_MODE 0x00000002 // 8514/A compatible minimum mode
#define AMI_2M_BNDRY 0x00000004 // Tearing occurs on 2M boundary
#define AMI_BLOCK_WRITE 0x00000008 // Block write is supported. This is
// mode-independent, but must be tested
// after we have switched into graphics mode.
#define AMI_TEXTBAND 0x00000010 // Text banding in 24BPP mode
/*
* Mode information structure for use with IOCTL_VIDEO_ATI_GET_MODE_INFORMATION. * This structure provides information specific to the video mode in use. */ typedef struct{ ULONG ModeFlags; /* Flags for features/bugs of this mode */
LONG VisWidthPix; /* Visible screen width in pixels */ LONG VisWidthByte; /* Visible screen width in bytes */ LONG VisHeight; /* Visible screen height */ LONG BitsPerPixel; /*
* The next 2 fields hold the number of bytes of memory used per pixel * (integer and fractional parts). A 4BPP unpacked (1 pixel per byte, * ignore unused 4 bits) mode would yield 1 and 0, the same as for 8BPP * (1.0 bytes per pixel). A 4BPP packed (2 pixels per byte) mode would * yield 0 and 500 (0.500 bytes per pixel). The fractional field will * always hold a 3-digit number, since bytes per pixel will always be * a multiple of 0.125 (one bit is one-eighth of a byte). */ LONG IntBytesPerPixel; LONG FracBytesPerPixel; LONG PitchPix; /* Screen pitch in pixels */ LONG PitchByte; /* Screen pitch in bytes */
/*
* The following fields refer to the offscreen block to the right of * the visible screen. This block is only present when the screen pitch * differs from the visible screen width. Its height is always the * same as the visible screen height, and its vertical start offset * is assumed to be zero. * * NOTE: If RightWidthPix is zero, this block does not exist for the * current mode, and the other fields in this group are undefined. */ LONG RightWidthPix; /* Width of block in pixels */ LONG RightWidthByte; /* Width of block in bytes */ LONG RightStartOffPix; /* Horizontal start offset of block in pixels */ LONG RightStartOffByte; /* Horizontal start offset of block in bytes */ LONG RightEndOffPix; /* Horizontal end offset of block in pixels */ LONG RightEndOffByte; /* Horizontal end offset of block in bytes */
/*
* The following fields refer to the offscreen block below the visible * screen. Values listed as "Hard" refer to the maximum vertical offset * for which enough video memory exists to support a full line of pixels. * Values listed as "Soft" refer to the maximum vertical offset which * can be reached without writing to the GE_OFFSET register. * * The horizontal start offset is assumed to be zero. */ LONG BottomWidthPix; /* Width of block in pixels */ LONG BottomWidthByte; /* Width of block in bytes */ LONG BottomStartOff; /* Vertical start offset of block */ LONG BottomEndOffSoft; /* "Soft" vertical end offset of block */ LONG BottomEndOffHard; /* "Hard" vertical end offset of block */ LONG BottomHeightSoft; /* "Soft" height of block */ LONG BottomHeightHard; /* "Hard" height of block */
} ATI_MODE_INFO, *PATI_MODE_INFO;
//------------------------------------------------------------------------
/*
* IOCTL codes to allow communication between the miniport driver * and higher-level modules. The Windows NT specification allocates * function codes 2048-4095 to external vendors. */ #define IOCTL_VIDEO_MIN_EXTERNAL_VENDOR \
CTL_CODE(FILE_DEVICE_VIDEO, 2048, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_MAX_EXTERNAL_VENDOR \
CTL_CODE(FILE_DEVICE_VIDEO, 4095, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_ATI_GET_VERSION \
CTL_CODE(FILE_DEVICE_VIDEO, 2048, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_ATI_EM_SYNC_TO_MINIPORT \
CTL_CODE(FILE_DEVICE_VIDEO, 2049, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_ATI_EM_SYNC_FROM_MINIPORT \
CTL_CODE(FILE_DEVICE_VIDEO, 2050, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_ATI_GET_MODE_INFORMATION \
CTL_CODE(FILE_DEVICE_VIDEO, 2051, METHOD_BUFFERED, FILE_ANY_ACCESS)
/*
* The following definitions and IOCTLs are standard definitions from * the NTDDVDEO.H file in Daytona and later releases of Windows NT. * They are provided here to let earlier versions use the DPMS IOCTLs * without requiring source changes. Do not edit this section. * * Structures are made conditional on the absence of one of the * power management IOCTLs, rather than on the structure itself, * since "#if !defined(<symbol>)" doesn't trigger on symbols that * refer to structures, rather than numeric values. */
//
// IOCTL_VIDEO_SET_POWER_MANAGEMENT - Tells the device to change the power
// consumption level of the device to the
// new state.
// IOCTL_VIDEO_GET_POWER_MANAGEMENT - Return the current power consumption
// level of the device.
//
// NOTE:
// This IOCTL is based on the VESA DPMS proposal.
// Changes to the DPMS standard will be refelcted in this IOCTL.
//
/*
#if !defined(IOCTL_VIDEO_SET_POWER_MANAGEMENT)
typedef enum _VIDEO_POWER_STATE { VideoPowerOn = 1, VideoPowerStandBy, VideoPowerSuspend, VideoPowerOff } VIDEO_POWER_STATE, *PVIDEO_POWER_STATE; #endif
*/ #if !defined(IOCTL_VIDEO_SET_POWER_MANAGEMENT)
typedef struct _VIDEO_POWER_MANAGEMENT { ULONG Length; ULONG DPMSVersion; ULONG PowerState; } VIDEO_POWER_MANAGEMENT, *PVIDEO_POWER_MANAGEMENT; #endif
//
//Length - Length of the structure in bytes. Also used to do verisioning.
//
//DPMSVersion - Version of the DPMS standard supported by the device.
// Only used in the "GET" IOCTL.
//
//PowerState - One of the power states listed in VIDEO_POWER_STATE.
//
//
// Note:
// Once the power has been turned off to the device, all other IOCTLs made
// to the miniport will be intercepted by the port driver and will return
// failiure, until the power on the device has been turned back on.
//
/*
* We use the presence or absence of various IOCTLs to determine * the build of Windows NT for which we are compiling the driver. * If this file is included, but the file which contains the IOCTLs * is not, in a source file, this will result in a false report of * the target build, which can cause numerous problems. * * This conditional block will force a compile error if the file * containing the IOCTLs (NTDDVDEO.H in NT 3.51 retail) was not * included prior to this file being included. */ #if !defined(IOCTL_VIDEO_SET_CURRENT_MODE)
NTDDVDEO.H must be included before ATINT.H #endif
#if defined(IOCTL_VIDEO_SET_POWER_MANAGEMENT)
/*
* There are a number of non-DPMS features which differ between * Daytona and earlier versions of Windows NT. To make these * conditional compilations automatic, define the value "DAYTONA" * (formerly defined in SOURCES, and used to conditionally compile * the DPMS structures and IOCTLs) if IOCTL_VIDEO_SET_POWER_MANAGEMENT * is defined. */ #define DAYTONA 1
#define TARGET_BUILD 350
#else
#define TARGET_BUILD 310
#define IOCTL_VIDEO_SET_POWER_MANAGEMENT \
CTL_CODE(FILE_DEVICE_VIDEO, 2052, METHOD_BUFFERED, FILE_ANY_ACCESS) #endif
#if !defined(IOCTL_VIDEO_GET_POWER_MANAGEMENT)
#define IOCTL_VIDEO_GET_POWER_MANAGEMENT \
CTL_CODE(FILE_DEVICE_VIDEO, 2053, METHOD_BUFFERED, FILE_ANY_ACCESS) #endif
/*
* End of DPMS support for pre-Daytona versions of Windows NT. */
#define IOCTL_VIDEO_ATI_INIT_AUX_CARD \
CTL_CODE(FILE_DEVICE_VIDEO, 2054, METHOD_BUFFERED, FILE_ANY_ACCESS)
/*
* Structures used in DCI support. They were added some time after the * initial release of Windows NT 3.5, so we must make them available only * if they're not already defined. These "placeholders" are solely to * allow the miniport to be compiled - the packets will only be called * in later versions of Windows NT 3.5. * * There are no "placeholders" for the IOCTLs themselves, since their * presence or absence is used to determine whether or not to compile * the DCI cases in ATIMPStartIO(). */ #if defined (IOCTL_VIDEO_SHARE_VIDEO_MEMORY)
#undef TARGET_BUILD
#define TARGET_BUILD 351
#else
typedef struct _VIDEO_SHARE_MEMORY_INFORMATION { ULONG SharedViewOffset; ULONG SharedViewSize; PVOID VirtualAddress; } VIDEO_SHARE_MEMORY_INFORMATION, *PVIDEO_SHARE_MEMORY_INFORMATION; #endif
#if !defined (IOCTL_VIDEO_SHARE_VIDEO_MEMORY)
typedef struct _VIDEO_SHARE_MEMORY { HANDLE ProcessHandle; ULONG ViewOffset; ULONG ViewSize; PVOID RequestedVirtualAddress; } VIDEO_SHARE_MEMORY, *PVIDEO_SHARE_MEMORY; #endif
//
// New automatic definition added as of NT 4.0 - use it to check whether
// we are building under 3.51, 4.0, or 5.0.
//
#if (_WIN32_WINNT >= 0x400)
#undef TARGET_BUILD
#define TARGET_BUILD 400
#endif
#if (_WIN32_WINNT >= 0x500)
#undef TARGET_BUILD
#define TARGET_BUILD 500
#endif
/*
* Keys to be used in DrvEscape() call to handle DPMS and other private * ATI functions. These keys fit into a large "hole" between * GETSETSCREENPARAMS (3072) and BEGIN_PATH (4096) */ #define ESC_SET_POWER_MANAGEMENT 4000
#define ESC_GET_NUM_CARDS 4001
#define ESC_GET_MODES 4002
#define ESC_GET_VGA_ENABLED 4003
#define ESC_SET_CURRENT_FULLSCREEN 4004
/*
* Values to show whether or not a given function is supported by * the DrvEscape entry point. */ #define ESC_IS_SUPPORTED 0x00000001 /* Function is supported */
#define ESC_NOT_SUPPORTED 0xFFFFFFFF /* Unsupported function called */
#define ESC_NOT_IMPLEMENTED 0x00000000 /* QUERYESCSUPPORT called for unimplemented function */
//********************* end of ATINT.H ****************************
|