savage_regs.h revision ab47cfaa
1ab47cfaaSmrg/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/savage/savage_regs.h,v 1.11 2002/05/14 20:19:52 alanh Exp $ */ 2ab47cfaaSmrg 3ab47cfaaSmrg#ifndef _SAVAGE_REGS_H 4ab47cfaaSmrg#define _SAVAGE_REGS_H 5ab47cfaaSmrg 6ab47cfaaSmrg/* Copied and renamed from radeon_reg.h for AGP/PCI detection. */ 7ab47cfaaSmrg#define SAVAGE_STATUS_PCI_CONFIG 0x06 8ab47cfaaSmrg# define SAVAGE_CAP_LIST 0x100000 9ab47cfaaSmrg#define SAVAGE_CAPABILITIES_PTR_PCI_CONFIG 0x34 /* offset in PCI config*/ 10ab47cfaaSmrg# define SAVAGE_CAP_PTR_MASK 0xfc /* mask off reserved bits of CAP_PTR */ 11ab47cfaaSmrg# define SAVAGE_CAP_ID_NULL 0x00 /* End of capability list */ 12ab47cfaaSmrg# define SAVAGE_CAP_ID_AGP 0x02 /* AGP capability ID */ 13ab47cfaaSmrg 14ab47cfaaSmrg#define S3_SAVAGE3D_SERIES(chip) ((chip>=S3_SAVAGE3D) && (chip<=S3_SAVAGE_MX)) 15ab47cfaaSmrg 16ab47cfaaSmrg#define S3_SAVAGE4_SERIES(chip) ((chip==S3_SAVAGE4) \ 17ab47cfaaSmrg || (chip==S3_PROSAVAGE) \ 18ab47cfaaSmrg || (chip==S3_TWISTER) \ 19ab47cfaaSmrg || (chip==S3_PROSAVAGEDDR)) 20ab47cfaaSmrg 21ab47cfaaSmrg#define S3_SAVAGE_MOBILE_SERIES(chip) ((chip==S3_SAVAGE_MX) || (chip==S3_SUPERSAVAGE)) 22ab47cfaaSmrg 23ab47cfaaSmrg#define S3_SAVAGE_SERIES(chip) ((chip>=S3_SAVAGE3D) && (chip<=S3_SAVAGE2000)) 24ab47cfaaSmrg 25ab47cfaaSmrg#define S3_MOBILE_TWISTER_SERIES(chip) ((chip==S3_TWISTER) \ 26ab47cfaaSmrg ||(chip==S3_PROSAVAGEDDR)) 27ab47cfaaSmrg 28ab47cfaaSmrg/* Chip tags. These are used to group the adapters into 29ab47cfaaSmrg * related families. 30ab47cfaaSmrg */ 31ab47cfaaSmrg 32ab47cfaaSmrgenum S3CHIPTAGS { 33ab47cfaaSmrg S3_UNKNOWN = 0, 34ab47cfaaSmrg S3_SAVAGE3D, 35ab47cfaaSmrg S3_SAVAGE_MX, 36ab47cfaaSmrg S3_SAVAGE4, 37ab47cfaaSmrg S3_PROSAVAGE, 38ab47cfaaSmrg S3_TWISTER, 39ab47cfaaSmrg S3_PROSAVAGEDDR, 40ab47cfaaSmrg S3_SUPERSAVAGE, 41ab47cfaaSmrg S3_SAVAGE2000, 42ab47cfaaSmrg S3_LAST 43ab47cfaaSmrg}; 44ab47cfaaSmrg 45ab47cfaaSmrg#define BIOS_BSIZE 1024 46ab47cfaaSmrg#define BIOS_BASE 0xc0000 47ab47cfaaSmrg 48ab47cfaaSmrg#define SAVAGE_NEWMMIO_REGBASE_S3 0x1000000 /* 16MB */ 49ab47cfaaSmrg#define SAVAGE_NEWMMIO_REGBASE_S4 0x0000000 50ab47cfaaSmrg#define SAVAGE_NEWMMIO_REGSIZE 0x0080000 /* 512kb */ 51ab47cfaaSmrg#define SAVAGE_NEWMMIO_VGABASE 0x8000 52ab47cfaaSmrg 53ab47cfaaSmrg#define BASE_FREQ 14.31818 54ab47cfaaSmrg 55ab47cfaaSmrg#define FIFO_CONTROL_REG 0x8200 56ab47cfaaSmrg#define MIU_CONTROL_REG 0x8204 57ab47cfaaSmrg#define STREAMS_TIMEOUT_REG 0x8208 58ab47cfaaSmrg#define MISC_TIMEOUT_REG 0x820c 59ab47cfaaSmrg 60ab47cfaaSmrg#define ADVANCED_FUNC_CTRL 0x850C 61ab47cfaaSmrg 62ab47cfaaSmrg/* 63ab47cfaaSmrg * CR/SR registers MMIO offset 64ab47cfaaSmrg * MISC Output Register(W:0x3c2,R:0x3cc) controls CR is 0X83Cx or 0X83Bx 65ab47cfaaSmrg * but do we need to set MISC Output Register ??? 66ab47cfaaSmrg * (Note that CRT_ADDRESS_REG and CRT_DATA_REG are assumed to be COLOR)??? 67ab47cfaaSmrg */ 68ab47cfaaSmrg#define MMIO_BASE_OF_VGA3C0 0X83C0 69ab47cfaaSmrg#define MMIO_BASE_OF_VGA3D0 0X83D0 70ab47cfaaSmrg 71ab47cfaaSmrg#define ATTR_ADDRESS_REG \ 72ab47cfaaSmrg (MMIO_BASE_OF_VGA3C0 + (0x03C0 - 0x03C0)) 73ab47cfaaSmrg#define ATTR_DATA_WRITE_REG \ 74ab47cfaaSmrg (MMIO_BASE_OF_VGA3C0 + (0x03C0 - 0x03C0)) 75ab47cfaaSmrg#define ATTR_DATA_READ_REG \ 76ab47cfaaSmrg (MMIO_BASE_OF_VGA3C0 + (0x03C1 - 0x03C0)) 77ab47cfaaSmrg#define VIDEO_SUBSYSTEM_ENABLE \ 78ab47cfaaSmrg (MMIO_BASE_OF_VGA3C0 + (0x03C3 - 0x03C0)) 79ab47cfaaSmrg#define SEQ_ADDRESS_REG \ 80ab47cfaaSmrg (MMIO_BASE_OF_VGA3C0 + (0x03C4 - 0x03C0)) 81ab47cfaaSmrg#define SEQ_DATA_REG \ 82ab47cfaaSmrg (MMIO_BASE_OF_VGA3C0 + (0x03C5 - 0x03C0)) 83ab47cfaaSmrg#define DAC_PIXEL_MASK_REG \ 84ab47cfaaSmrg (MMIO_BASE_OF_VGA3C0 + (0x03C6 - 0x03C0)) 85ab47cfaaSmrg#define DAC_PEL_MASK \ 86ab47cfaaSmrg (MMIO_BASE_OF_VGA3C0 + (0x03C6 - 0x03C0)) 87ab47cfaaSmrg#define DAC_STATUS_REG \ 88ab47cfaaSmrg (MMIO_BASE_OF_VGA3C0 + (0x03C7 - 0x03C0)) 89ab47cfaaSmrg#define DAC_ADDRESS_READ_REG \ 90ab47cfaaSmrg (MMIO_BASE_OF_VGA3C0 + (0x03C7 - 0x03C0)) 91ab47cfaaSmrg#define DAC_ADDRESS_WRITE_REG \ 92ab47cfaaSmrg (MMIO_BASE_OF_VGA3C0 + (0x03C8 - 0x03C0)) 93ab47cfaaSmrg#define DAC_DATA_REG \ 94ab47cfaaSmrg (MMIO_BASE_OF_VGA3C0 + (0x03C9 - 0x03C0)) 95ab47cfaaSmrg#define DAC_DATA_REG_PORT \ 96ab47cfaaSmrg (MMIO_BASE_OF_VGA3C0 + (0x03C9 - 0x03C0)) 97ab47cfaaSmrg#define MISC_OUTPUT_REG_WRITE \ 98ab47cfaaSmrg (MMIO_BASE_OF_VGA3C0 + (0x03C2 - 0x03C0)) 99ab47cfaaSmrg#define MISC_OUTPUT_REG_READ \ 100ab47cfaaSmrg (MMIO_BASE_OF_VGA3C0 + (0x03CC - 0x03C0)) 101ab47cfaaSmrg#define GR_ADDRESS_REG \ 102ab47cfaaSmrg (MMIO_BASE_OF_VGA3C0 + (0x03CE - 0x03C0)) 103ab47cfaaSmrg#define GR_DATA_REG \ 104ab47cfaaSmrg (MMIO_BASE_OF_VGA3C0 + (0x03CF - 0x03C0)) 105ab47cfaaSmrg#define WAKEUP_REG \ 106ab47cfaaSmrg (MMIO_BASE_OF_VGA3C0 + (0x0510 - 0x03C0)) 107ab47cfaaSmrg 108ab47cfaaSmrg#define CRT_ADDRESS_REG \ 109ab47cfaaSmrg (MMIO_BASE_OF_VGA3D0 + (0x03D4 - 0x03D0)) 110ab47cfaaSmrg#define CRT_DATA_REG \ 111ab47cfaaSmrg (MMIO_BASE_OF_VGA3D0 + (0x03D5 - 0x03D0)) 112ab47cfaaSmrg#define SYSTEM_CONTROL_REG \ 113ab47cfaaSmrg (MMIO_BASE_OF_VGA3D0 + (0x03DA - 0x03D0)) 114ab47cfaaSmrg 115ab47cfaaSmrg/* GX-3 Configuration/Status Registers */ 116ab47cfaaSmrg#define S3_SHADOW_STATUS 0x48C0C 117ab47cfaaSmrg#define S3_BUFFER_THRESHOLD 0x48C10 118ab47cfaaSmrg#define S3_OVERFLOW_BUFFER 0x48C14 119ab47cfaaSmrg#define S3_OVERFLOW_BUFFER_PTR 0x48C18 120ab47cfaaSmrg 121ab47cfaaSmrg#define ENABLE_BCI 0x08 /* MM48C18_3 */ 122ab47cfaaSmrg#define ENABLE_COMMAND_OVERFLOW_BUF 0x04 /* MM48C18_2 */ 123ab47cfaaSmrg#define ENABLE_COMMAND_BUF_STATUS_UPDATE 0x02 /* MM48C18_1 */ 124ab47cfaaSmrg#define ENABLE_SHADOW_STATUS_UPDATE 0x01 /* MM48C0C_0 */ 125ab47cfaaSmrg 126ab47cfaaSmrg 127ab47cfaaSmrg#define MEMORY_CTRL0_REG 0xCA 128ab47cfaaSmrg#define MEMORY_CTRL1_REG 0xCB 129ab47cfaaSmrg#define MEMORY_CTRL2_REG 0xCC 130ab47cfaaSmrg 131ab47cfaaSmrg#define MEMORY_CONFIG_REG 0x31 132ab47cfaaSmrg 133ab47cfaaSmrg/* bitmap descriptor register */ 134ab47cfaaSmrg#define S3_GLB_BD_LOW 0X8168 135ab47cfaaSmrg#define S3_GLB_BD_HIGH 0X816C 136ab47cfaaSmrg#define S3_PRI_BD_LOW 0X8170 137ab47cfaaSmrg#define S3_PRI_BD_HIGH 0X8174 138ab47cfaaSmrg#define S3_SEC_BD_LOW 0X8178 139ab47cfaaSmrg#define S3_SEC_BD_HIGH 0X817c 140ab47cfaaSmrg 141ab47cfaaSmrg/* duoview */ 142ab47cfaaSmrg 143ab47cfaaSmrg#define SELECT_IGA1 0x4026 144ab47cfaaSmrg#define SELECT_IGA2_READS_WRITES 0x4f26 145ab47cfaaSmrg 146ab47cfaaSmrg#define SelectIGA1() \ 147ab47cfaaSmrgdo { \ 148ab47cfaaSmrg OUTREG16(SEQ_ADDRESS_REG,SELECT_IGA1); \ 149ab47cfaaSmrg} while (0) 150ab47cfaaSmrg 151ab47cfaaSmrg#define SelectIGA2() \ 152ab47cfaaSmrgdo { \ 153ab47cfaaSmrg OUTREG16(SEQ_ADDRESS_REG,SELECT_IGA2_READS_WRITES); \ 154ab47cfaaSmrg} while (0) 155ab47cfaaSmrg 156ab47cfaaSmrg#define MEM_PS1 0x10 /*CRCA_4 :Primary stream 1*/ 157ab47cfaaSmrg#define MEM_PS2 0x20 /*CRCA_5 :Primary stream 2*/ 158ab47cfaaSmrg#define MEM_SS1 0x40 /*CRCA_6 :Secondary stream 1*/ 159ab47cfaaSmrg#define MEM_SS2 0x80 /*CRCA_7 :Secondary stream 2*/ 160ab47cfaaSmrg 161ab47cfaaSmrg#define SUBSYS_STAT_REG 0x8504 162ab47cfaaSmrg 163ab47cfaaSmrg#define SRC_BASE 0xa4d4 164ab47cfaaSmrg#define DEST_BASE 0xa4d8 165ab47cfaaSmrg#define CLIP_L_R 0xa4dc 166ab47cfaaSmrg#define CLIP_T_B 0xa4e0 167ab47cfaaSmrg#define DEST_SRC_STR 0xa4e4 168ab47cfaaSmrg#define MONO_PAT_0 0xa4e8 169ab47cfaaSmrg#define MONO_PAT_1 0xa4ec 170ab47cfaaSmrg 171ab47cfaaSmrg#define TILED_SURFACE_REGISTER_0 0x48c40 172ab47cfaaSmrg#define TILED_SURFACE_REGISTER_1 0x48c44 173ab47cfaaSmrg#define TILED_SURFACE_REGISTER_2 0x48c48 174ab47cfaaSmrg#define TILED_SURFACE_REGISTER_3 0x48c4c 175ab47cfaaSmrg#define TILED_SURFACE_REGISTER_4 0x48c50 176ab47cfaaSmrg 177ab47cfaaSmrg#define TILED_SURF_BPP4 0x00000000 /* bits 31-30=00 for 4 bits/pixel */ 178ab47cfaaSmrg#define TILED_SURF_BPP8 0x40000000 /* bits 31-30=01 for 8 bits/pixel */ 179ab47cfaaSmrg#define TILED_SURF_BPP16 0x80000000 /* bits 31-30=10 for 16 bits/pixel */ 180ab47cfaaSmrg#define TILED_SURF_BPP32 0xC0000000 /* bits 31-30=11 for 32 bits/pixel */ 181ab47cfaaSmrg 182ab47cfaaSmrg#define TILED_SURF_BPP16_2000 0x00000000 /* bit 31=0 for 16 bits/pixel */ 183ab47cfaaSmrg#define TILED_SURF_BPP32_2000 0x80000000 /* bit 31=1 for 32 bits/pixel */ 184ab47cfaaSmrg 185ab47cfaaSmrg/* 186ab47cfaaSmrg * CR88_4 =1 : disable block write 187ab47cfaaSmrg * the "2D" is partly to set this apart from "BLOCK_WRITE_DISABLE" 188ab47cfaaSmrg * constant used for bitmap descriptor 189ab47cfaaSmrg */ 190ab47cfaaSmrg#define DISABLE_BLOCK_WRITE_2D 0x10 191ab47cfaaSmrg#define BLOCK_WRITE_DISABLE 0x0 192ab47cfaaSmrg 193ab47cfaaSmrg/* CR31[0] set = Enable 8MB display memory through 64K window at A0000H. */ 194ab47cfaaSmrg#define ENABLE_CPUA_BASE_A0000 0x01 195ab47cfaaSmrg 196ab47cfaaSmrg/* Constants for CR69. */ 197ab47cfaaSmrg 198ab47cfaaSmrg#define CRT_ACTIVE 0x01 199ab47cfaaSmrg#define LCD_ACTIVE 0x02 200ab47cfaaSmrg#define TV_ACTIVE 0x04 201ab47cfaaSmrg#define CRT_ATTACHED 0x10 202ab47cfaaSmrg#define LCD_ATTACHED 0x20 203ab47cfaaSmrg#define TV_ATTACHED 0x40 204ab47cfaaSmrg 205ab47cfaaSmrg 206ab47cfaaSmrg/* 207ab47cfaaSmrg * reads from SUBSYS_STAT 208ab47cfaaSmrg */ 209ab47cfaaSmrg#define STATUS_WORD0 (INREG(0x48C00)) 210ab47cfaaSmrg#define ALT_STATUS_WORD0 (INREG(0x48C60)) 211ab47cfaaSmrg#define MAXLOOP 0xffffff 212ab47cfaaSmrg#define IN_SUBSYS_STAT() (INREG(SUBSYS_STAT_REG)) 213ab47cfaaSmrg 214ab47cfaaSmrg#define MAXFIFO 0x7f00 215ab47cfaaSmrg 216ab47cfaaSmrg#define inStatus1() (VGAHWPTR(pScrn))->readST01( VGAHWPTR(pScrn) ) 217ab47cfaaSmrg 218ab47cfaaSmrg 219ab47cfaaSmrg/* 220ab47cfaaSmrg * unprotect CRTC[0-7] 221ab47cfaaSmrg * CR11_7 = 0: Writing to all CRT Controller registers enabled 222ab47cfaaSmrg * = 1: Writing to all bits of CR0~CR7 except CR7_4 disabled 223ab47cfaaSmrg */ 224ab47cfaaSmrg#define UnProtectCRTC() \ 225ab47cfaaSmrgdo { \ 226ab47cfaaSmrg unsigned char byte; \ 227ab47cfaaSmrg OUTREG8(CRT_ADDRESS_REG,0x11); \ 228ab47cfaaSmrg byte = INREG8(CRT_DATA_REG) & 0X7F; \ 229ab47cfaaSmrg OUTREG16(CRT_ADDRESS_REG,byte << 8 | 0x11); \ 230ab47cfaaSmrg} while (0) 231ab47cfaaSmrg 232ab47cfaaSmrg/* 233ab47cfaaSmrg * unlock extended regs 234ab47cfaaSmrg * CR38:unlock CR20~CR3F 235ab47cfaaSmrg * CR39:unlock CR40~CRFF 236ab47cfaaSmrg * SR08:unlock SR09~SRFF 237ab47cfaaSmrg */ 238ab47cfaaSmrg#define UnLockExtRegs() \ 239ab47cfaaSmrgdo { \ 240ab47cfaaSmrg OUTREG16(CRT_ADDRESS_REG,0X4838); \ 241ab47cfaaSmrg OUTREG16(CRT_ADDRESS_REG,0XA039); \ 242ab47cfaaSmrg OUTREG16(SEQ_ADDRESS_REG,0X0608); \ 243ab47cfaaSmrg} while (0) 244ab47cfaaSmrg 245ab47cfaaSmrg#define VerticalRetraceWait() \ 246ab47cfaaSmrgdo { \ 247ab47cfaaSmrg INREG8(CRT_ADDRESS_REG); \ 248ab47cfaaSmrg OUTREG8(CRT_ADDRESS_REG, 0x17); \ 249ab47cfaaSmrg if (INREG8(CRT_DATA_REG) & 0x80) { \ 250ab47cfaaSmrg int i = 0x10000; \ 251ab47cfaaSmrg while ((INREG8(SYSTEM_CONTROL_REG) & 0x08) == 0x08 && i--) ; \ 252ab47cfaaSmrg i = 0x10000; \ 253ab47cfaaSmrg while ((INREG8(SYSTEM_CONTROL_REG) & 0x08) == 0x00 && i--) ; \ 254ab47cfaaSmrg } \ 255ab47cfaaSmrg} while (0) 256ab47cfaaSmrg 257ab47cfaaSmrg/* 258ab47cfaaSmrg * Jiayo Hsu, Mar 21, 2002 259ab47cfaaSmrg * modify this to scalable schema,because different chips have differnt regs, 260ab47cfaaSmrg * besides add in patch code for Paramount(SuperSavage) from 2K 261ab47cfaaSmrg */ 262ab47cfaaSmrg#define InI2CREG(a,reg) \ 263ab47cfaaSmrgdo { \ 264ab47cfaaSmrg OUTREG8(CRT_ADDRESS_REG, reg); \ 265ab47cfaaSmrg if (psav->Chipset == S3_SUPERSAVAGE) \ 266ab47cfaaSmrg OUTREG8(CRT_DATA_REG, INREG8(CRT_DATA_REG)); \ 267ab47cfaaSmrg a = INREG8(CRT_DATA_REG); \ 268ab47cfaaSmrg} while (0) 269ab47cfaaSmrg 270ab47cfaaSmrg#define OutI2CREG(a,reg) \ 271ab47cfaaSmrgdo { \ 272ab47cfaaSmrg OUTREG8(CRT_ADDRESS_REG, reg); \ 273ab47cfaaSmrg if (psav->Chipset == S3_SUPERSAVAGE) \ 274ab47cfaaSmrg OUTREG8(CRT_DATA_REG, a); \ 275ab47cfaaSmrg OUTREG8(CRT_DATA_REG, a); \ 276ab47cfaaSmrg} while (0) 277ab47cfaaSmrg 278ab47cfaaSmrg#define HZEXP_COMP_1 0x54 279ab47cfaaSmrg#define HZEXP_BORDER 0x58 280ab47cfaaSmrg#define HZEXP_FACTOR_IGA1 0x59 281ab47cfaaSmrg 282ab47cfaaSmrg#define VTEXP_COMP_1 0x56 283ab47cfaaSmrg#define VTEXP_BORDER 0x5a 284ab47cfaaSmrg#define VTEXP_FACTOR_IGA1 0x5b 285ab47cfaaSmrg 286ab47cfaaSmrg#define EC1_CENTER_ON 0x10 287ab47cfaaSmrg#define EC1_EXPAND_ON 0x0c 288ab47cfaaSmrg 289ab47cfaaSmrg#endif /* _SAVAGE_REGS_H */ 290