299 lines
10 KiB
C
299 lines
10 KiB
C
#ident "@(#) NEC cirrus.h 1.2 94/11/21 13:58:39"
|
|
/* #pragma comment(exestr, "@(#) NEC(MIPS) cirrus.h 1.7 94/02/03 18:58:17" ) */
|
|
/* #pragma comment(exestr, "@(#) NEC(MIPS) cirrus.h 1.6 94/01/28 11:50:02" ) */
|
|
/* #pragma comment(exestr, "@(#) NEC(MIPS) cirrus.h 1.4 93/10/29 12:25:02" ) */
|
|
/*++
|
|
|
|
Copyright (c) 1992 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
cirrus.h
|
|
|
|
Abstract:
|
|
|
|
This module contains the definitions for the code that implements the
|
|
Cirrus Logic VGA 6410/6420/542x device driver.
|
|
|
|
Environment:
|
|
|
|
Kernel mode
|
|
|
|
Notes:
|
|
|
|
This module based on Cirrus Minport Driver. And modify for R96 MIPS
|
|
R4400 HAL Cirrus display initialize.
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
/*
|
|
* M001 1993.19.28 A. Kuriyama @ oa2
|
|
*
|
|
* - Modify for R96 MIPS R4400 HAL
|
|
*
|
|
* Delete : Miniport Driver Interface
|
|
*
|
|
* M002 1994.2.2 A. Kuriyama @ oa2
|
|
* - Bug fix
|
|
*
|
|
* Modify : Video Memory Physical Address
|
|
*
|
|
*
|
|
* Revision History in Cirrus Miniport Driver as follows:
|
|
*
|
|
* L001 1993.10.15 Kuroki
|
|
*
|
|
* - Modify for R96 MIPS R4400 *
|
|
* Delete : Micro channel Bus Initialize.
|
|
* VDM & Text, Fullscreen mode support.
|
|
* Banking routine.
|
|
* CL64xx Chip support.
|
|
* 16-color mode.
|
|
*
|
|
* Add : Liner Addressing.
|
|
*
|
|
* L002 1993.10.21 Kuroki
|
|
*
|
|
* - Warniing clear
|
|
*
|
|
***************************************************************
|
|
*
|
|
* S001 1994.06.06 T.Samezima
|
|
*
|
|
* - Modify for R98 MIPS R4400
|
|
*
|
|
* Change : LA_MASK
|
|
*
|
|
* S002 '94.11/21 T.Samezima
|
|
* Chg invalid S001
|
|
*
|
|
*/
|
|
|
|
//
|
|
// Change Ushort to Uchar, because R96 is mips machine.
|
|
//
|
|
|
|
|
|
//
|
|
// Base address of VGA memory range. Also used as base address of VGA
|
|
// memory when loading a font, which is done with the VGA mapped at A0000.
|
|
//
|
|
|
|
/* START L001 */
|
|
|
|
/* START M002 */
|
|
#define LA_MASK 0xe // S001, S002
|
|
/* END M002 */
|
|
#define MEM_VGA (LA_MASK << 20)
|
|
#define MEM_VGA_SIZE 0x100000
|
|
|
|
/* END L001 */
|
|
|
|
//
|
|
// Port definitions for filling the ACCSES_RANGES structure in the miniport
|
|
// information, defines the range of I/O ports the VGA spans.
|
|
// There is a break in the IO ports - a few ports are used for the parallel
|
|
// port. Those cannot be defined in the ACCESS_RANGE, but are still mapped
|
|
// so all VGA ports are in one address range.
|
|
//
|
|
|
|
#define VGA_BASE_IO_PORT 0x000003B0
|
|
#define VGA_START_BREAK_PORT 0x000003BB
|
|
#define VGA_END_BREAK_PORT 0x000003C0
|
|
#define VGA_MAX_IO_PORT 0x000003DF
|
|
|
|
//
|
|
// VGA port-related definitions.
|
|
//
|
|
|
|
//
|
|
// VGA register definitions
|
|
//
|
|
// ports in monochrome mode
|
|
#define CRTC_ADDRESS_PORT_MONO 0x0004 // CRT Controller Address and
|
|
#define CRTC_DATA_PORT_MONO 0x0005 // Data registers in mono mode
|
|
#define FEAT_CTRL_WRITE_PORT_MONO 0x000A // Feature Control write port
|
|
// in mono mode
|
|
#define INPUT_STATUS_1_MONO 0x000A // Input Status 1 register read
|
|
// port in mono mode
|
|
#define ATT_INITIALIZE_PORT_MONO INPUT_STATUS_1_MONO
|
|
// Register to read to reset
|
|
// Attribute Controller index/data
|
|
#define ATT_ADDRESS_PORT 0x0010 // Attribute Controller Address and
|
|
#define ATT_DATA_WRITE_PORT 0x0010 // Data registers share one port
|
|
// for writes, but only Address is
|
|
// readable at 0x010
|
|
#define ATT_DATA_READ_PORT 0x0011 // Attribute Controller Data reg is
|
|
// readable here
|
|
#define MISC_OUTPUT_REG_WRITE_PORT 0x0012 // Miscellaneous Output reg write
|
|
// port
|
|
#define INPUT_STATUS_0_PORT 0x0012 // Input Status 0 register read
|
|
// port
|
|
#define VIDEO_SUBSYSTEM_ENABLE_PORT 0x0013 // Bit 0 enables/disables the
|
|
// entire VGA subsystem
|
|
#define SEQ_ADDRESS_PORT 0x0014 // Sequence Controller Address and
|
|
#define SEQ_DATA_PORT 0x0015 // Data registers
|
|
#define DAC_PIXEL_MASK_PORT 0x0016 // DAC pixel mask reg
|
|
#define DAC_ADDRESS_READ_PORT 0x0017 // DAC register read index reg,
|
|
// write-only
|
|
#define DAC_STATE_PORT 0x0017 // DAC state (read/write),
|
|
// read-only
|
|
#define DAC_ADDRESS_WRITE_PORT 0x0018 // DAC register write index reg
|
|
#define DAC_DATA_REG_PORT 0x0019 // DAC data transfer reg
|
|
#define FEAT_CTRL_READ_PORT 0x001A // Feature Control read port
|
|
#define MISC_OUTPUT_REG_READ_PORT 0x001C // Miscellaneous Output reg read
|
|
// port
|
|
#define GRAPH_ADDRESS_PORT 0x001E // Graphics Controller Address
|
|
#define GRAPH_DATA_PORT 0x001F // and Data registers
|
|
|
|
// ports in color mode
|
|
#define CRTC_ADDRESS_PORT_COLOR 0x0024 // CRT Controller Address and
|
|
#define CRTC_DATA_PORT_COLOR 0x0025 // Data registers in color mode
|
|
#define FEAT_CTRL_WRITE_PORT_COLOR 0x002A // Feature Control write port
|
|
#define INPUT_STATUS_1_COLOR 0x002A // Input Status 1 register read
|
|
// port in color mode
|
|
#define ATT_INITIALIZE_PORT_COLOR INPUT_STATUS_1_COLOR
|
|
// Register to read to reset
|
|
// Attribute Controller index/data
|
|
// toggle in color mode
|
|
|
|
//
|
|
// Offsets in HardwareStateHeader->PortValue[] of save areas for non-indexed
|
|
// VGA registers.
|
|
//
|
|
|
|
#define CRTC_ADDRESS_MONO_OFFSET 0x04
|
|
#define FEAT_CTRL_WRITE_MONO_OFFSET 0x0A
|
|
#define ATT_ADDRESS_OFFSET 0x10
|
|
#define MISC_OUTPUT_REG_WRITE_OFFSET 0x12
|
|
#define VIDEO_SUBSYSTEM_ENABLE_OFFSET 0x13
|
|
#define SEQ_ADDRESS_OFFSET 0x14
|
|
#define DAC_PIXEL_MASK_OFFSET 0x16
|
|
#define DAC_STATE_OFFSET 0x17
|
|
#define DAC_ADDRESS_WRITE_OFFSET 0x18
|
|
#define GRAPH_ADDRESS_OFFSET 0x1E
|
|
#define CRTC_ADDRESS_COLOR_OFFSET 0x24
|
|
#define FEAT_CTRL_WRITE_COLOR_OFFSET 0x2A
|
|
|
|
// toggle in color mode
|
|
//
|
|
// VGA indexed register indexes.
|
|
//
|
|
|
|
// CL-GD542x specific registers:
|
|
//
|
|
#define IND_CL_EXTS_ENB 0x06 // index in Sequencer to enable exts
|
|
#define IND_CL_SCRATCH_PAD 0x0A // index in Seq of POST scratch pad
|
|
#define IND_CL_ID_REG 0x27 // index in CRTC of ID Register
|
|
//
|
|
#define IND_CURSOR_START 0x0A // index in CRTC of the Cursor Start
|
|
#define IND_CURSOR_END 0x0B // and End registers
|
|
#define IND_CURSOR_HIGH_LOC 0x0E // index in CRTC of the Cursor Location
|
|
#define IND_CURSOR_LOW_LOC 0x0F // High and Low Registers
|
|
#define IND_VSYNC_END 0x11 // index in CRTC of the Vertical Sync
|
|
// End register, which has the bit
|
|
// that protects/unprotects CRTC
|
|
// index registers 0-7
|
|
#define IND_SET_RESET_ENABLE 0x01 // index of Set/Reset Enable reg in GC
|
|
#define IND_DATA_ROTATE 0x03 // index of Data Rotate reg in GC
|
|
#define IND_READ_MAP 0x04 // index of Read Map reg in Graph Ctlr
|
|
#define IND_GRAPH_MODE 0x05 // index of Mode reg in Graph Ctlr
|
|
#define IND_GRAPH_MISC 0x06 // index of Misc reg in Graph Ctlr
|
|
#define IND_BIT_MASK 0x08 // index of Bit Mask reg in Graph Ctlr
|
|
#define IND_SYNC_RESET 0x00 // index of Sync Reset reg in Seq
|
|
#define IND_MAP_MASK 0x02 // index of Map Mask in Sequencer
|
|
#define IND_MEMORY_MODE 0x04 // index of Memory Mode reg in Seq
|
|
#define IND_CRTC_PROTECT 0x11 // index of reg containing regs 0-7 in
|
|
// CRTC
|
|
#define IND_CRTC_COMPAT 0x34 // index of CRTC Compatibility reg
|
|
// in CRTC
|
|
#define START_SYNC_RESET_VALUE 0x01 // value for Sync Reset reg to start
|
|
// synchronous reset
|
|
#define END_SYNC_RESET_VALUE 0x03 // value for Sync Reset reg to end
|
|
// synchronous reset
|
|
|
|
//
|
|
// Values for Attribute Controller Index register to turn video off
|
|
// and on, by setting bit 5 to 0 (off) or 1 (on).
|
|
//
|
|
|
|
#define VIDEO_DISABLE 0
|
|
#define VIDEO_ENABLE 0x20
|
|
|
|
// Masks to keep only the significant bits of the Graphics Controller and
|
|
// Sequencer Address registers. Masking is necessary because some VGAs, such
|
|
// as S3-based ones, don't return unused bits set to 0, and some SVGAs use
|
|
// these bits if extensions are enabled.
|
|
//
|
|
|
|
#define GRAPH_ADDR_MASK 0x0F
|
|
#define SEQ_ADDR_MASK 0x07
|
|
|
|
//
|
|
// Mask used to toggle Chain4 bit in the Sequencer's Memory Mode register.
|
|
//
|
|
|
|
#define CHAIN4_MASK 0x08
|
|
|
|
//
|
|
// Value written to the Read Map register when identifying the existence of
|
|
// a VGA in VgaInitialize. This value must be different from the final test
|
|
// value written to the Bit Mask in that routine.
|
|
//
|
|
|
|
#define READ_MAP_TEST_SETTING 0x03
|
|
|
|
//
|
|
// Default text mode setting for various registers, used to restore their
|
|
// states if VGA detection fails after they've been modified.
|
|
//
|
|
|
|
#define MEMORY_MODE_TEXT_DEFAULT 0x02
|
|
#define BIT_MASK_DEFAULT 0xFF
|
|
#define READ_MAP_DEFAULT 0x00
|
|
|
|
|
|
//
|
|
// Palette-related info.
|
|
//
|
|
|
|
//
|
|
// Highest valid DAC color register index.
|
|
//
|
|
|
|
#define VIDEO_MAX_COLOR_REGISTER 0xFF
|
|
|
|
//
|
|
// Indices for type of memory mapping; used in ModesVGA[], must match
|
|
// MemoryMap[].
|
|
//
|
|
|
|
typedef enum _VIDEO_MEMORY_MAP {
|
|
MemMap_Mono,
|
|
MemMap_CGA,
|
|
MemMap_VGA
|
|
} VIDEO_MEMORY_MAP, *PVIDEO_MEMORY_MAP;
|
|
|
|
//
|
|
// For a mode, the type of banking supported. Controls the information
|
|
// returned in VIDEO_BANK_SELECT. PlanarHCBanking includes NormalBanking.
|
|
//
|
|
|
|
typedef enum _BANK_TYPE {
|
|
NoBanking = 0,
|
|
NormalBanking,
|
|
PlanarHCBanking
|
|
} BANK_TYPE, *PBANK_TYPE;
|
|
|
|
#define CL6410 0x0001
|
|
#define CL6420 0x0002
|
|
#define CL542x 0x0004
|
|
|
|
// bitfields for the DisplayType
|
|
#define crt 0x0001
|
|
#define panel 0x0002
|
|
#define simulscan 0x0004 // this means both, but is unused for now.
|