Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

347 lines
12 KiB

/************************************************************************/
/* */
/* QUERY_CX.H */
/* */
/* Oct 19 1993 (c) 1993, ATI Technologies Incorporated. */
/************************************************************************/
/********************** PolyTron RCS Utilities
$Revision: 1.14 $
$Date: 01 May 1996 14:11:26 $
$Author: RWolff $
$Log: S:/source/wnt/ms11/miniport/archive/query_cx.h_v $
*
* Rev 1.14 01 May 1996 14:11:26 RWolff
* Added prototype for new routine DenseOnAlpha().
*
* Rev 1.13 23 Apr 1996 17:24:00 RWolff
* Split mapping of memory types reported by BIOS into our enumeration
* of memory types according to ASIC type, since ?T and ?X use the same
* memory type code to refer to different memory types.
*
* Rev 1.12 15 Apr 1996 16:58:22 RWolff
* Added prototype for routine which identifies which flavour of the
* Mach 64 is in use.
*
* Rev 1.11 20 Mar 1996 13:45:38 RWolff
* Increased size of buffer where screen is stored prior to video memory
* being used to hold query information.
*
* Rev 1.10 01 Mar 1996 12:16:02 RWolff
* Added definitions used for Alpha "blue screen" preservation.
*
* Rev 1.9 11 Jan 1996 19:43:32 RWolff
* New definitions and structures to support use of AX=A?07 BIOS call rather
* than special cases to restrict refresh rates.
*
* Rev 1.8 24 Feb 1995 12:29:18 RWOLFF
* Prototype for TextBanding_cx()
*
* Rev 1.7 18 Nov 1994 11:54:14 RWOLFF
* Split structures and internal variables so that they can be included
* separately, as needed for no-BIOS support.
*
* Rev 1.6 14 Sep 1994 15:20:26 RWOLFF
* Added definitions for all 32BPP colour orderings.
*
* Rev 1.5 31 Aug 1994 16:28:18 RWOLFF
* Added support for 1152x864.
*
* Rev 1.4 30 Jun 1994 18:12:56 RWOLFF
* Removed prototype for IsApertureConflict_cx() and definitions used
* only by this function. Function moved to SETUP_CX.C because the
* new method of checking for conflict requires access to definitions
* and data structures which are only available in this module.
*
* Rev 1.3 12 May 1994 11:21:02 RWOLFF
* Updated comment.
*
* Rev 1.2 27 Apr 1994 14:11:22 RWOLFF
* Removed unused lookup table.
*
* Rev 1.1 07 Feb 1994 14:13:02 RWOLFF
* Removed prototype for GetMemoryNeeded_cx().
*
* Rev 1.0 31 Jan 1994 11:43:00 RWOLFF
* Initial revision.
*
* Rev 1.2 14 Jan 1994 15:24:32 RWOLFF
* Updated CX query structure to match BIOS version 0.13, added 1600x1200
* support, prototype for BlockWriteAvail_cx()
*
* Rev 1.1 30 Nov 1993 18:27:38 RWOLFF
* Prototypes for new routines, fields of cx_query structure now match
* fields in structure returned by BIOS query call.
*
* Rev 1.0 05 Nov 1993 13:36:52 RWOLFF
* Initial revision.
End of PolyTron RCS section *****************/
#ifdef DOC
QUERY_CX.H - Header file for QUERY_CX.C
#endif
/*
* Definitions for deep colour and RAMDAC special features support,
* stored in q_shadow_1 field (Mach 64 does not use shadow sets)
* of query_structure.
*/
#define S1_SYNC_ON_GREEN 0x8000
#define S1_GAMMA_CORRECT 0x4000
#define S1_GREYSCALE_256 0x2000
#define S1_SLEEPMODE 0x1000
#define S1_32BPP 0x00F0
#define S1_32BPP_xRGB 0x0080
#define S1_32BPP_BGRx 0x0040
#define S1_32BPP_RGBx 0x0020
#define S1_32BPP_xBGR 0x0010
#define S1_24BPP 0x000C
#define S1_24BPP_BGR 0x0008
#define S1_24BPP_RGB 0x0004
#define S1_16BPP 0x0003
#define S1_16BPP_555 0x0002
#define S1_16BPP_565 0x0001
/*
* Prototypes for functions provided by QUERY_CX.C
*/
extern int DetectMach64(void);
extern VP_STATUS QueryMach64(struct query_structure *Query);
extern BOOL BlockWriteAvail_cx(struct query_structure *Query);
extern BOOL TextBanding_cx(struct query_structure *Query);
extern PWSTR IdentifyMach64Asic(struct query_structure *Query, PULONG AsicStringLength);
#if defined(ALPHA)
extern BOOL DenseOnAlpha(struct query_structure *Query);
#endif
/*
* Structures used in QUERY_CX.C and (on non-x86 machines with no
* emulation, so VideoPortInt10() is not available) modules which
* emulate the query functions of the BIOS.
*/
#ifdef STRUCTS_QUERY_CX
/*
* Hardware capability structure returned by BIOS call AX=0xA?07.
*/
#pragma pack(1)
struct cx_hw_cap{
BYTE cx_HorRes; /* Horizontal resolution in units of 8 pixels */
BYTE cx_RamOrDacType; /* RAM type or bitmask of DAC types */
BYTE cx_MemReq; /* Minimum memory to support the mode in question */
BYTE cx_MaxDotClock; /* Maximum dot clock, in megahertz */
BYTE cx_MaxPixDepth; /* Code for maximum pixel depth for the mode in question */
};
/*
* Query structure returned by CX BIOS call AX=0xA?09. This structure
* is NOT interchangeable with query_structure from AMACH1.H.
*
* The alignment of fields within the BIOS query and mode table
* structures does not match the default structure alignment of the
* Windows NT C compiler, so we must force byte alignment.
*/
struct cx_query{
WORD cx_sizeof_struct; /* Size of the structure in bytes */
BYTE cx_structure_rev; /* Structure revision number */
BYTE cx_number_modes; /* Number of mode tables */
WORD cx_mode_offset; /* Offset in bytes to first mode table */
BYTE cx_mode_size; /* Size of each mode table */
BYTE cx_vga_type; /* VGA enabled/disabled status */
WORD cx_asic_rev; /* ASIC revision */
BYTE cx_vga_boundary; /* VGA boundary */
BYTE cx_memory_size; /* Amount of memory installed */
BYTE cx_dac_type; /* DAC type */
BYTE cx_memory_type; /* Type of memory chips installed */
BYTE cx_bus_type; /* Bus type */
BYTE cx_special_sync; /* Flags for composite sync and sync on green */
WORD cx_aperture_addr; /* Aperture address in megabytes (0-4095) */
BYTE cx_aperture_cfg; /* Aperture configuration */
BYTE cx_deep_colour; /* Deep colour support information */
BYTE cx_ramdac_info; /* Special features available from DAC */
BYTE cx_reserved_1; /* Reserved */
WORD cx_current_mode; /* Offset of current mode table */
WORD cx_io_base; /* I/O base address */
BYTE cx_reserved_2[6]; /* Reserved */
};
/*
* Mode table structure returned by CX BIOS call AX=0xA?09. This structure
* is NOT interchangeable with st_mode_table from AMACH1.H.
*/
struct cx_mode_table{
WORD cx_x_size; /* Horizontal resolution in pixels */
WORD cx_y_size; /* Vertical resolution in pixels */
BYTE cx_pixel_depth; /* Maximum pixel depth */
BYTE cx_reserved_1; /* Reserved */
WORD cx_eeprom_offset; /* Offset of table into EEPROM */
WORD cx_reserved_2; /* Reserved */
WORD cx_reserved_3; /* Reserved */
WORD cx_crtc_gen_cntl; /* Interlace and double scan status */
BYTE cx_crtc_h_total; /* CRTC_H_TOTAL value */
BYTE cx_crtc_h_disp; /* CRTC_H_DISP value */
BYTE cx_crtc_h_sync_strt; /* CRTC_H_SYNC_STRT value */
BYTE cx_crtc_h_sync_wid; /* CRTC_H_SYNC_WID value */
WORD cx_crtc_v_total; /* CRTC_V_TOTAL value */
WORD cx_crtc_v_disp; /* CRTC_V_DISP value */
WORD cx_crtc_v_sync_strt; /* CRTC_V_SYNC_STRT value */
BYTE cx_crtc_v_sync_wid; /* CRTC_V_SYNC_WID value */
BYTE cx_clock_cntl; /* Clock selector and divider */
WORD cx_dot_clock; /* Dot clock for programmable clock chip */
WORD cx_h_overscan; /* Horizontal overscan information */
WORD cx_v_overscan; /* Vertical overscan information */
WORD cx_overscan_8b; /* 8BPP and blue overscan colour */
WORD cx_overscan_gr; /* Green and red overscan colour */
};
#pragma pack()
#endif /* defined STRUCTS_QUERY_CX */
#ifdef INCLUDE_QUERY_CX
/*
* Private definitions used in QUERY_CX.C
*/
#define FORMAT_DACMASK 0 /* cx_hw_cap.cx_RamOrDacType is mask of DAC types */
#define FORMAT_RAMMASK 1 /* cx_hw_cap.cx_RamOrDacType is mask of RAM types */
#define FORMAT_DACTYPE 2 /* cx_hw_cap.cx_RamOrDacType is DAC type */
#define FORMAT_RAMTYPE 3 /* cx_hw_cap.cx_RamOrDacType is RAM type */
/*
* The following definitions are used in creating a buffer where the
* contents of an existing VGA graphics screen and specific VGA registers
* are stored in preparation for using the screen as a buffer below
* 1M physical in order to store the BIOS query information. It is
* assumed that the temporary buffer used to store this information
* is an array of unsigned characters.
*
* According to Arthur Lai, older BIOSes determined the required size
* of the query buffer at runtime by examining the installed modes,
* while newer BIOSes take a buffer large enough to handle the worst
* case scenario in order to reduce code size. This should never be
* larger than 1 kilobyte. In the unlikely event that this is exceeded,
* we will save the first kilobyte and allow the remainder to be
* overwritten by query data, rather than overflowing our save buffer.
*/
#define VGA_SAVE_SIZE 1024 /* Array location where size of buffer is stored */
#define VGA_SAVE_SIZE_H 1025
#define VGA_SAVE_SEQ02 1026 /* Array location where sequencer register 2 value stored */
#define VGA_SAVE_GRA08 1027 /* Array location where graphics register 8 value stored */
#define VGA_SAVE_GRA01 1028 /* Array location where graphics register 1 value stored */
#define VGA_TOTAL_SIZE 1029 /* Size of screen/register save buffer */
/*
* Pixel depths for use as an array index. Two columns will be wasted
* since there is no depth code equal to zero and we don't use 15BPP,
* but this allows direct indexing using the pixel width field of the
* hardware capabilities structure returned by BIOS call AX=0xA?07.
*/
enum {
DEPTH_NOTHING = 0,
DEPTH_4BPP,
DEPTH_8BPP,
DEPTH_15BPP,
DEPTH_16BPP,
DEPTH_24BPP,
DEPTH_32BPP,
HOW_MANY_DEPTHS
};
/*
* Mappings of Mach 64 query values to enumerations from AMACH1.H
*/
UCHAR CXMapMemSize[8] =
{
VRAM_512k,
VRAM_1mb,
VRAM_2mb,
VRAM_4mb,
VRAM_6mb,
VRAM_8mb
};
UCHAR CXMapRamType[7] =
{
VMEM_DRAM_256Kx16,
VMEM_VRAM_256Kx4_SER512,
VMEM_VRAM_256Kx16_SER256,
VMEM_DRAM_256Kx4,
VMEM_DRAM_256Kx4_GRAP, /* Space filler - type 4 not documented */
VMEM_VRAM_256Kx4_SPLIT512,
VMEM_VRAM_256Kx16_SPLIT256
};
UCHAR CTMapRamType[7] =
{
VMEM_GENERIC_DRAM, /* Space filler - type 0 not documented */
VMEM_GENERIC_DRAM,
VMEM_EDO_DRAM,
VMEM_BRRAM,
VMEM_SDRAM,
VMEM_GENERIC_DRAM, /* Space filler - type 5 not documented */
VMEM_GENERIC_DRAM /* Space filler - type 6 not documented */
};
UCHAR CXMapBus[8] =
{
BUS_ISA_16, /* ISA bus */
BUS_EISA,
BUS_ISA_8, /* Use "weakest" bus for types marked as reserved */
BUS_ISA_8, /* Reserved */
BUS_ISA_8, /* Reserved */
BUS_ISA_8, /* Reserved */
BUS_LB_486, /* Mach 64 lumps all VLB types together */
BUS_PCI
};
/*
* Lookup table to translate the code for maximum colour depth returned
* in the BIOS mode tables into bits per pixel.
*/
USHORT CXPixelDepth[7] =
{
0, /* Undefined */
4,
8,
16, /* xRRR RRGG GGGB BBBB */
16, /* RRRR RGGG GGGB BBBB */
24,
32
};
/*
* Used in searching mode tables for desired resolution.
*/
USHORT CXHorRes[6] =
{
640,
800,
1024,
1152,
1280,
1600
};
/*
* Flags to show that a given resolution is supported.
*/
UCHAR CXStatusFlags[6] =
{
VRES_640x480,
VRES_800x600,
VRES_1024x768,
VRES_1152x864,
VRES_1280x1024,
VRES_1600x1200
};
#endif /* defined INCLUDE_QUERY_CX */