📄 sst1init3.h
字号:
/*-*-c++-*-*/
/*
** Copyright (c) 1997, 3Dfx Interactive, Inc.
** All Rights Reserved.
**
** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.;
** the contents of this file may not be disclosed to third parties, copied or
** duplicated in any form, in whole or in part, without the prior written
** permission of 3Dfx Interactive, Inc.
**
** RESTRICTED RIGHTS LEGEND:
** Use, duplication or disclosure by the Government is subject to restrictions
** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
** and Computer Software clause at DFARS 252.227-7013, and/or in similar or
** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
** rights reserved under the Copyright Laws of the United States.
**
**
** $Revision: 47 $
** $Date: 1/30/98 7:13p $
**
*/
#ifndef __SST1INIT_H__
#define __SST1INIT_H__
/*
** Copyright (c) 1996, 3Dfx Interactive, Inc.
** All Rights Reserved.
**
** This is UNPUBLISHED PROPRIETARY SOURCE CODE of 3Dfx Interactive, Inc.;
** the contents of this file may not be disclosed to third parties, copied or
** duplicated in any form, in whole or in part, without the prior written
** permission of 3Dfx Interactive, Inc.
**
** RESTRICTED RIGHTS LEGEND:
** Use, duplication or disclosure by the Government is subject to restrictions
** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
** and Computer Software clause at DFARS 252.227-7013, and/or in similar or
** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
** rights reserved under the Copyright Laws of the United States.
**
** $Revision: 47 $
** $Date: 1/30/98 7:13p $
**
** SST-1 Initialization routine protypes
**
** If all initialization routines are called, it is assumed they are called
** in the following order:
** 1. sst1InitMapBoard();
** 2. sst1InitRegisters();
** 3. sst1InitGamma();
** 4. sst1InitVideoBuffers();
** 5. sst1InitSli(); [Optional]
** 6. sst1InitCmdFifo();
**
** sst1InitShutdown() is called at the end of an application to turn off
** the SST-1 graphics subsystem
**
*/
/* sst1init.h assumes "glide.h" and "sst.h" are already included */
/* For Voodoo2 Bringup:
* Define SST_CHUCK_ONLY to 0 for Chuck & Bruce Boards
* Define SST_CHUCK_ONLY to 1 for Chuck-only Boards
*/
#define SST_CHUCK_ONLY 0
/* Init code debug print routine */
#ifdef INIT_DOS /* Glide version... */
#define INIT_OUTPUT
#define INIT_PRINTF(a) sst1InitPrintf a
#define INIT_INFO(A)
#endif
#ifndef DIRECTX
#undef GETENV
#undef ATOI
#undef ATOF
#undef SSCANF
#undef POW
#define GETENV(A) sst1InitGetenv(A)
#define ATOI(A) atoi(A)
#define ATOF(A) atof(A)
#define SSCANF( A, B, C ) sscanf( A, B, C )
#define POW( A, B ) pow( A, B )
#define FTOL( X ) ((FxU32)(X))
// Video resolution declarations
#include "sst1vid3.h"
// Info Structure declaration
#include "cvginfo.h"
#else /* DIRECTX */
#include "ddglobal.h"
#pragma optimize ("",off) /* ddglobal.h tuns this on for retail builds */
#undef INIT_PRINTF
#undef INIT_INFO
#undef GETENV
#undef ATOI
#undef ATOF
#undef FTOL
#undef ITOF_INV
#undef SSCANF
#undef POW
/* #define INIT_PRINTF(a) */
#ifdef FXTRACE
#define INIT_PRINTF DDPRINTF
#else
#define INIT_PRINTF 1 ? (void) 0 : (void)
#endif
#define INIT_INFO(A)
#define GETENV(A) ddgetenv(A)
#define ATOI(A) ddatoi(A)
#define ATOF(A) ddatof(A)
#define FTOL(A) ddftol(A)
#define ITOF_INV(A) dd_itof_inv(A)
#define SSCANF( A, B, C ) ddsscanf( A, B, C )
#define POW( A, B ) ddpow( A, B )
#endif /* DIRECTX */
/* Defines to writing to/reading from SST-1 */
#if 0
#define IGET(A) A
#define ISET(A,D) A = (D)
#else
#define IGET(A) sst1InitRead32((FxU32 *) &(A))
#define ISET(A,D) sst1InitWrite32((FxU32 *) &(A), D)
#endif
/*
** P6 Fence
**
** Here's the stuff to do P6 Fencing. This is required for the
** certain things on the P6
*/
#ifdef __cplusplus
extern "C" {
#endif
#ifdef SST1INIT_ALLOCATE
FxU32 p6FenceVar;
#else
extern FxU32 p6FenceVar;
#endif
#if defined(__WATCOMC__)
void
p6Fence(void);
# pragma aux p6Fence = \
"xchg eax, p6FenceVar" \
modify [eax];
# define P6FENCE p6Fence()
#elif defined(__MSC__)
# define P6FENCE {_asm xchg eax, p6FenceVar}
#elif defined(macintosh) && __POWERPC__ && defined(__MWERKS__)
# define P6FENCE __eieio()
#else
# error "P6 Fencing in-line assembler code needs to be added for this compiler"
#endif
#ifdef __cplusplus
}
#endif
#ifndef _FXPCI_H_
#include <fxpci3.h>
#endif
#include <sst1_pci.h>
/*--------------------------------------------------------*/
/* Following defines need to go in "cvgdefs.h" eventually */
#define SST_CMDFIFO_ADDR BIT(21)
/*--------- SST PCI Configuration Command bits --------------*/
#define SST_PCIMEM_ACCESS_EN BIT(1)
/*------- SST PCI Configuration Register defaults -----------*/
#define SST_PCI_INIT_ENABLE_DEFAULT 0x0
#define SST_PCI_BUS_SNOOP_DEFAULT 0x0
/*--- SST PCI Init Enable Configuration Register defaults ---*/
#define SST_SLI_OWNPCI SST_SCANLINE_SLV_OWNPCI
#define SST_SLI_MASTER_OWNPCI 0x0
#define SST_SLI_SLAVE_OWNPCI SST_SCANLINE_SLV_OWNPCI
#define SST_CHUCK_REVISION_ID_SHIFT 12
#define SST_CHUCK_REVISION_ID (0xF<<SST_CHUCK_REVISION_ID_SHIFT)
#define SST_CHUCK_MFTG_ID_SHIFT 16
#define SST_CHUCK_MFTG_ID (0xF<<SST_CHUCK_MFTG_ID_SHIFT)
#define SST_PCI_INTR_EN BIT(20)
#define SST_PCI_INTR_TIMEOUT_EN BIT(21)
#define SST_SLI_SNOOP_EN BIT(23)
#define SST_SLI_SNOOP_MEMBASE_SHIFT 24
#define SST_SLI_SNOOP_MEMBASE (0xFF<<SST_SLI_SNOOP_MEMBASE_SHIFT)
/*------- SST Silicon Process Monitor Register Defines ------*/
#define SST_SIPROCESS_OSC_CNTR 0xFFFF
#define SST_SIPROCESS_PCI_CNTR_SHIFT 16
#define SST_SIPROCESS_PCI_CNTR (0xFFF<<SST_SIPROCESS_PCI_CNTR_SHIFT)
#define SST_SIPROCESS_OSC_CNTR_RESET_N 0
#define SST_SIPROCESS_OSC_CNTR_RUN BIT(28)
#define SST_SIPROCESS_OSC_NAND_SEL 0
#define SST_SIPROCESS_OSC_NOR_SEL BIT(29)
#define SST_SIPROCESS_OSC_FORCE_ENABLE BIT(30)
/*----------------- SST fbiinit0 bits -----------------------*/
//#define SST_FBIINIT0_DEFAULT 0x00000410
// Must include SST_EN_TEX_MEMFIFO and SST_EN_LFB_MEMFIFO in FBIINIT0_DEFAULT
// or else texture memory detection will hang on some machines (see bug_3.c)
#define SST_FBIINIT0_DEFAULT (0x00000410 | SST_EN_TEX_MEMFIFO | \
SST_EN_LFB_MEMFIFO)
#define SST_GRX_RESET BIT(1)
#define SST_PCI_FIFO_RESET BIT(2)
#define SST_EN_ENDIAN_SWAPPING BIT(3)
/*----------------- SST fbiinit1 bits -----------------------*/
#define SST_FBIINIT1_DEFAULT 0x00201102
#define SST_VIDEO_TILES_MASK 0x010000F0
#define SST_VIDEO_TILES_IN_X_MSB_SHIFT 24
#define SST_VIDEO_TILES_IN_X_MSB (1<<SST_VIDEO_TILES_IN_X_MSB_SHIFT)
/*----------------- SST fbiinit2 bits -----------------------*/
#define SST_FBIINIT2_DEFAULT 0x80000040
#define SST_SWAP_ALGORITHM_SHIFT 9
#define SST_SWAP_ALGORITHM (0x3<<SST_SWAP_ALGORITHM_SHIFT)
# define SST_SWAP_VSYNC (0<<SST_SWAP_ALGORITHM_SHIFT)
# define SST_SWAP_DACDATA0 (1<<SST_SWAP_ALGORITHM_SHIFT)
# define SST_SWAP_FIFOSTALL (2<<SST_SWAP_ALGORITHM_SHIFT)
# define SST_SWAP_SLISYNC (3<<SST_SWAP_ALGORITHM_SHIFT)
#define SST_DRAM_REFRESH_16MS (0x30 << SST_DRAM_REFRESH_CNTR_SHIFT)
/*----------------- SST fbiinit3 bits -----------------------*/
#define SST_FBIINIT3_DEFAULT 0x001E4000
#define SST_TEXMAP_DISABLE BIT(6)
#define SST_FBI_MEM_TYPE_SHIFT 8
#define SST_FBI_MEM_TYPE (0x7<<SST_FBI_MEM_TYPE_SHIFT)
#define SST_FBI_VGA_PASS_POWERON BIT(12)
#define SST_FT_CLK_DEL_ADJ_SHIFT 13
#define SST_FT_CLK_DEL_ADJ (0xF<<SST_FT_CLK_DEL_ADJ_SHIFT)
#define SST_TF_FIFO_THRESH_SHIFT 17
#define SST_TF_FIFO_THRESH (0x1F<<SST_TF_FIFO_THRESH_SHIFT)
/*----------------- SST fbiinit4 bits -----------------------*/
#define SST_FBIINIT4_DEFAULT 0x00000001
#define SST_PCI_RDWS_1 0x0
#define SST_PCI_RDWS_2 BIT(0)
#define SST_EN_LFB_RDAHEAD BIT(1)
#define SST_MEM_FIFO_LWM_SHIFT 2
#define SST_MEM_FIFO_LWM (0x3F<<SST_MEM_FIFO_LWM_SHIFT)
#define SST_MEM_FIFO_ROW_BASE_SHIFT 8
#define SST_MEM_FIFO_ROW_BASE (0x3FF<<SST_MEM_FIFO_ROW_BASE_SHIFT)
#define SST_MEM_FIFO_ROW_ROLL_SHIFT 18
#define SST_MEM_FIFO_ROW_ROLL (0x3FF<<SST_MEM_FIFO_ROW_ROLL_SHIFT)
/*----------------- SST fbiinit5 bits -----------------------*/
#define SST_DAC_24BPP_PORT BIT(2)
#define SST_GPIO_0 BIT(3)
#define SST_GPIO_0_DRIVE0 0x0
#define SST_GPIO_0_DRIVE1 BIT(3)
#define SST_GPIO_1 BIT(4)
#define SST_GPIO_1_DRIVE0 0x0
#define SST_GPIO_1_DRIVE1 BIT(4)
#define SST_BUFFER_ALLOC_SHIFT 9
#define SST_BUFFER_ALLOC (0x3 << SST_BUFFER_ALLOC_SHIFT)
# define SST_BUFFER_ALLOC_2C0Z (0x0 << SST_BUFFER_ALLOC_SHIFT)
# define SST_BUFFER_ALLOC_2C1Z (0x0 << SST_BUFFER_ALLOC_SHIFT)
# define SST_BUFFER_ALLOC_3C0Z (0x1 << SST_BUFFER_ALLOC_SHIFT)
# define SST_BUFFER_ALLOC_3C1Z (0x2 << SST_BUFFER_ALLOC_SHIFT)
#define SST_VIDEO_CLK_SLAVE_OE_EN BIT(11)
#define SST_VID_CLK_2X_OUT_OE_N BIT(12)
#define SST_VID_CLK_DAC_DATA16_SEL BIT(13)
#define SST_SLI_DETECT BIT(14)
#define SST_HVRETRACE_SYNC_READS BIT(15)
#define SST_COLOR_BORDER_RIGHT_EN BIT(16)
#define SST_COLOR_BORDER_LEFT_EN BIT(17)
#define SST_COLOR_BORDER_BOTTOM_EN BIT(18)
#define SST_COLOR_BORDER_TOP_EN BIT(19)
#define SST_SCAN_DOUBLE_HORIZ BIT(20)
#define SST_SCAN_DOUBLE_VERT BIT(21)
#define SST_GAMMA_CORRECT_16BPP_EN BIT(22)
#define SST_INVERT_HSYNC BIT(23)
#define SST_INVERT_VSYNC BIT(24)
#define SST_VIDEO_OUT_24BPP_EN BIT(25)
#define SST_FBIINIT5_DEFAULT \
(SST_HVRETRACE_SYNC_READS | \
SST_GAMMA_CORRECT_16BPP_EN)
/*----------------- SST fbiinit6 bits -----------------------*/
#define SST_SLI_SWAP_VACTIVE_SHIFT 0
#define SST_SLI_SWAP_VACTIVE (0x7<<SST_SLI_SWAP_VACTIVE_SHIFT)
#define SST_SLI_SWAP_VACTIVE_DRAG_SHIFT 3
#define SST_SLI_SWAP_VACTIVE_DRAG (0x1F<<SST_SLI_SWAP_VACTIVE_DRAG_SHIFT)
#define SST_SLI_SYNC_MASTER BIT(8)
#define SST_GPIO_2 (0x3<<9)
#define SST_GPIO_2_DRIVE0 (0x2<<9)
#define SST_GPIO_2_DRIVE1 (0x3<<9)
#define SST_GPIO_2_FLOAT (0x1<<9)
#define SST_GPIO_3 (0x3<<11)
#define SST_GPIO_3_DRIVE0 (0x2<<11)
#define SST_GPIO_3_DRIVE1 (0x3<<11)
#define SST_GPIO_3_FLOAT (0x1<<11)
#define SST_SLI_SYNCIN (0x3<<13)
#define SST_SLI_SYNCIN_DRIVE0 (0x2<<13)
#define SST_SLI_SYNCIN_DRIVE1 (0x3<<13)
#define SST_SLI_SYNCIN_FLOAT (0x1<<13)
#define SST_SLI_SYNCOUT (0x3<<15)
#define SST_SLI_SYNCOUT_DRIVE0 (0x2<<15)
#define SST_SLI_SYNCOUT_DRIVE1 (0x3<<15)
#define SST_SLI_SYNCOUT_FLOAT (0x1<<15)
#define SST_DAC_RD (0x3<<17)
#define SST_DAC_RD_DRIVE0 (0x2<<17)
#define SST_DAC_RD_DRIVE1 (0x3<<17)
#define SST_DAC_RD_FLOAT (0x1<<17)
#define SST_DAC_WR (0x3<<19)
#define SST_DAC_WR_DRIVE0 (0x2<<19)
#define SST_DAC_WR_DRIVE1 (0x3<<19)
#define SST_DAC_WR_FLOAT (0x1<<19)
#define SST_PCI_FIFO_LWM_RDY_SHIFT 21
#define SST_PCI_FIFO_LWM_RDY (0x7f<<SST_PCI_FIFO_LWM_RDY_SHIFT)
#define SST_VGA_PASS_N (0x3<<28)
#define SST_VGA_PASS_N_DRIVE0 (0x2<<28)
#define SST_VGA_PASS_N_DRIVE1 (0x3<<28)
#define SST_VIDEO_TILES_IN_X_LSB_SHIFT 30
#define SST_VIDEO_TILES_IN_X_LSB (1<<SST_VIDEO_TILES_IN_X_LSB_SHIFT)
#define SST_FBIINIT6_DEFAULT 0x0
/*----------------- SST fbiinit7 bits -----------------------*/
#define SST_CMDFIFO_EN BIT(8)
#define SST_CMDFIFO_STORE_OFFSCREEN BIT(9)
#define SST_CMDFIFO_DISABLE_HOLES BIT(10)
#define SST_CMDFIFO_RDFETCH_THRESH_SHIFT 11
#define SST_CMDFIFO_RDFETCH_THRESH (0x1FUL<<SST_CMDFIFO_RDFETCH_THRESH_SHIFT)
#define SST_CMDFIFO_SYNC_WRITES BIT(16)
#define SST_CMDFIFO_SYNC_READS BIT(17)
#define SST_PCI_PACKER_RESET BIT(18)
#define SST_TMU_CHROMA_REG_WR_EN BIT(19)
#define SST_CMDFIFO_PCI_TIMEOUT_SHIFT 20
#define SST_CMDFIFO_PCI_TIMEOUT (0x7FUL<<SST_CMDFIFO_PCI_TIMEOUT_SHIFT)
#define SST_TEXMEMWR_BURST_EN BIT(27)
#define SST_FBIINIT7_DEFAULT \
(SST_TEXMEMWR_BURST_EN | SST_TMU_CHROMA_REG_WR_EN)
/*----------------- SST trexInit0 bits -----------------------*/
#define SST_EN_TEX_MEM_REFRESH BIT(0)
#define SST_TEX_MEM_REFRESH_SHIFT 1
#define SST_TEX_MEM_REFRESH (0x1FF<<SST_TEX_MEM_REFRESH_SHIFT)
#define SST_TEX_MEM_PAGE_SIZE_SHIFT 10
#define SST_TEX_MEM_PAGE_SIZE_8BITS (0x0<<SST_TEX_MEM_PAGE_SIZE_SHIFT)
#define SST_TEX_MEM_PAGE_SIZE_9BITS (0x1<<SST_TEX_MEM_PAGE_SIZE_SHIFT)
#define SST_TEX_MEM_PAGE_SIZE_10BITS (0x2<<SST_TEX_MEM_PAGE_SIZE_SHIFT)
#define SST_TEX_MEM_SECOND_RAS_BIT_SHIFT 12
#define SST_TEX_MEM_SECOND_RAS_BIT_BIT17 (0x0<<SST_TEX_MEM_SECOND_RAS_BIT_SHIFT)
#define SST_TEX_MEM_SECOND_RAS_BIT_BIT18 (0x1<<SST_TEX_MEM_SECOND_RAS_BIT_SHIFT)
#define SST_EN_TEX_MEM_SECOND_RAS BIT(14)
#define SST_TEX_MEM_TYPE_SHIFT 15
#define SST_TEX_MEM_TYPE_EDO (0x0<<SST_TEX_MEM_TYPE_SHIFT)
#define SST_TEX_MEM_TYPE_SYNC (0x1<<SST_TEX_MEM_TYPE_SHIFT)
#define SST_TEX_MEM_DATA_SIZE_16BIT 0x0
#define SST_TEX_MEM_DATA_SIZE_8BIT BIT(18)
#define SST_TEX_MEM_DO_EXTRA_CAS BIT(19)
#define SST_TEX_MEM2 BIT(20)
#define SST_TREXINIT0_DEFAULT \
( (SST_EN_TEX_MEM_REFRESH) \
| (0x020 << SST_TEX_MEM_REFRESH_SHIFT) \
| (SST_TEX_MEM_PAGE_SIZE_9BITS) \
| (SST_TEX_MEM_SECOND_RAS_BIT_BIT18) \
| (SST_EN_TEX_MEM_SECOND_RAS) \
| (SST_TEX_MEM_TYPE_EDO) \
| (SST_TEX_MEM_DATA_SIZE_16BIT) \
| (0 & SST_TEX_MEM_DO_EXTRA_CAS) \
| (0 & SST_TEX_MEM2) )
#define SST_TREX0INIT0_DEFAULT SST_TREXINIT0_DEFAULT
#define SST_TREX1INIT0_DEFAULT SST_TREXINIT0_DEFAULT
#define SST_TREX2INIT0_DEFAULT SST_TREXINIT0_DEFAULT
/*----------------- SST trexInit1 bits -----------------------*/
#define SST_TEX_SCANLINE_INTERLEAVE_MASTER 0x0
#define SST_TEX_SCANLINE_INTERLEAVE_SLAVE BIT(0)
#define SST_EN_TEX_SCANLINE_INTERLEAVE BIT(1)
#define SST_TEX_FT_FIFO_SIL_SHIFT 2
#define SST_TEX_FT_FIFO_SIL (0x1F<<SST_TEX_FT_FIFO_SIL_SHIFT)
#define SST_TEX_TT_FIFO_SIL_SHIFT 7
#define SST_TEX_TT_FIFO_SIL (0xF<<SST_TEX_TT_FIFO_SIL_SHIFT)
#define SST_TEX_TF_CLK_DEL_ADJ_SHIFT 12
#define SST_TEX_TF_CLK_DEL_ADJ (0xF<<SST_TEX_TF_CLK_DEL_ADJ_SHIFT)
#define SST_TEX_RG_TTCII_INH BIT(16)
#define SST_TEX_USE_RG_TTCII_INH BIT(17)
#define SST_TEX_SEND_CONFIG BIT(18)
#define SST_TEX_RESET_FIFO BIT(19)
#define SST_TEX_RESET_GRX BIT(20)
#define SST_TEX_PALETTE_DEL_SHIFT 21
#define SST_TEX_PALETTE_DEL (0x3<<SST_TEX_PALETTE_DEL_SHIFT)
#define SST_TEX_SEND_CONFIG_SEL_SHIFT 23
#define SST_TEX_SEND_CONFIG_SEL (0x7<<SST_TEX_SEND_CONFIG_SEL_SHIFT)
/* After things stabilize, the fifo stall inputs levels should be backed off
from the max. conservative values that are being used now for better
performance.
SST_TEX_FT_FIFO_SIL = ??
SST_TEX_TT_FIFO_SIL = ?? (effects multi-trex only)
*/
/* for trex ver. 1 bringup, SST_TEX_PALETTE_DEL should be set to it's max
(== 3) for <50 MHz bringup */
#define SST_TREXINIT1_DEFAULT \
( (SST_TEX_SCANLINE_INTERLEAVE_MASTER) \
| (0 & SST_EN_TEX_SCANLINE_INTERLEAVE) \
| (0x8 << SST_TEX_FT_FIFO_SIL_SHIFT) \
| (0x8 << SST_TEX_TT_FIFO_SIL_SHIFT) \
| (0xf << SST_TEX_TF_CLK_DEL_ADJ_SHIFT) \
| (0 & SST_TEX_RG_TTCII_INH) \
| (0 & SST_TEX_USE_RG_TTCII_INH) \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -