162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef _TDFX_H 362306a36Sopenharmony_ci#define _TDFX_H 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#include <linux/i2c.h> 662306a36Sopenharmony_ci#include <linux/i2c-algo-bit.h> 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci/* membase0 register offsets */ 962306a36Sopenharmony_ci#define STATUS 0x00 1062306a36Sopenharmony_ci#define PCIINIT0 0x04 1162306a36Sopenharmony_ci#define SIPMONITOR 0x08 1262306a36Sopenharmony_ci#define LFBMEMORYCONFIG 0x0c 1362306a36Sopenharmony_ci#define MISCINIT0 0x10 1462306a36Sopenharmony_ci#define MISCINIT1 0x14 1562306a36Sopenharmony_ci#define DRAMINIT0 0x18 1662306a36Sopenharmony_ci#define DRAMINIT1 0x1c 1762306a36Sopenharmony_ci#define AGPINIT 0x20 1862306a36Sopenharmony_ci#define TMUGBEINIT 0x24 1962306a36Sopenharmony_ci#define VGAINIT0 0x28 2062306a36Sopenharmony_ci#define VGAINIT1 0x2c 2162306a36Sopenharmony_ci#define DRAMCOMMAND 0x30 2262306a36Sopenharmony_ci#define DRAMDATA 0x34 2362306a36Sopenharmony_ci/* reserved 0x38 */ 2462306a36Sopenharmony_ci/* reserved 0x3c */ 2562306a36Sopenharmony_ci#define PLLCTRL0 0x40 2662306a36Sopenharmony_ci#define PLLCTRL1 0x44 2762306a36Sopenharmony_ci#define PLLCTRL2 0x48 2862306a36Sopenharmony_ci#define DACMODE 0x4c 2962306a36Sopenharmony_ci#define DACADDR 0x50 3062306a36Sopenharmony_ci#define DACDATA 0x54 3162306a36Sopenharmony_ci#define RGBMAXDELTA 0x58 3262306a36Sopenharmony_ci#define VIDPROCCFG 0x5c 3362306a36Sopenharmony_ci#define HWCURPATADDR 0x60 3462306a36Sopenharmony_ci#define HWCURLOC 0x64 3562306a36Sopenharmony_ci#define HWCURC0 0x68 3662306a36Sopenharmony_ci#define HWCURC1 0x6c 3762306a36Sopenharmony_ci#define VIDINFORMAT 0x70 3862306a36Sopenharmony_ci#define VIDINSTATUS 0x74 3962306a36Sopenharmony_ci#define VIDSERPARPORT 0x78 4062306a36Sopenharmony_ci#define VIDINXDELTA 0x7c 4162306a36Sopenharmony_ci#define VIDININITERR 0x80 4262306a36Sopenharmony_ci#define VIDINYDELTA 0x84 4362306a36Sopenharmony_ci#define VIDPIXBUFTHOLD 0x88 4462306a36Sopenharmony_ci#define VIDCHRMIN 0x8c 4562306a36Sopenharmony_ci#define VIDCHRMAX 0x90 4662306a36Sopenharmony_ci#define VIDCURLIN 0x94 4762306a36Sopenharmony_ci#define VIDSCREENSIZE 0x98 4862306a36Sopenharmony_ci#define VIDOVRSTARTCRD 0x9c 4962306a36Sopenharmony_ci#define VIDOVRENDCRD 0xa0 5062306a36Sopenharmony_ci#define VIDOVRDUDX 0xa4 5162306a36Sopenharmony_ci#define VIDOVRDUDXOFF 0xa8 5262306a36Sopenharmony_ci#define VIDOVRDVDY 0xac 5362306a36Sopenharmony_ci/* ... */ 5462306a36Sopenharmony_ci#define VIDOVRDVDYOFF 0xe0 5562306a36Sopenharmony_ci#define VIDDESKSTART 0xe4 5662306a36Sopenharmony_ci#define VIDDESKSTRIDE 0xe8 5762306a36Sopenharmony_ci#define VIDINADDR0 0xec 5862306a36Sopenharmony_ci#define VIDINADDR1 0xf0 5962306a36Sopenharmony_ci#define VIDINADDR2 0xf4 6062306a36Sopenharmony_ci#define VIDINSTRIDE 0xf8 6162306a36Sopenharmony_ci#define VIDCUROVRSTART 0xfc 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci#define INTCTRL (0x00100000 + 0x04) 6462306a36Sopenharmony_ci#define CLIP0MIN (0x00100000 + 0x08) 6562306a36Sopenharmony_ci#define CLIP0MAX (0x00100000 + 0x0c) 6662306a36Sopenharmony_ci#define DSTBASE (0x00100000 + 0x10) 6762306a36Sopenharmony_ci#define DSTFORMAT (0x00100000 + 0x14) 6862306a36Sopenharmony_ci#define SRCBASE (0x00100000 + 0x34) 6962306a36Sopenharmony_ci#define COMMANDEXTRA_2D (0x00100000 + 0x38) 7062306a36Sopenharmony_ci#define CLIP1MIN (0x00100000 + 0x4c) 7162306a36Sopenharmony_ci#define CLIP1MAX (0x00100000 + 0x50) 7262306a36Sopenharmony_ci#define SRCFORMAT (0x00100000 + 0x54) 7362306a36Sopenharmony_ci#define SRCSIZE (0x00100000 + 0x58) 7462306a36Sopenharmony_ci#define SRCXY (0x00100000 + 0x5c) 7562306a36Sopenharmony_ci#define COLORBACK (0x00100000 + 0x60) 7662306a36Sopenharmony_ci#define COLORFORE (0x00100000 + 0x64) 7762306a36Sopenharmony_ci#define DSTSIZE (0x00100000 + 0x68) 7862306a36Sopenharmony_ci#define DSTXY (0x00100000 + 0x6c) 7962306a36Sopenharmony_ci#define COMMAND_2D (0x00100000 + 0x70) 8062306a36Sopenharmony_ci#define LAUNCH_2D (0x00100000 + 0x80) 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci#define COMMAND_3D (0x00200000 + 0x120) 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci/* register bitfields (not all, only as needed) */ 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ci/* COMMAND_2D reg. values */ 8762306a36Sopenharmony_ci#define TDFX_ROP_COPY 0xcc /* src */ 8862306a36Sopenharmony_ci#define TDFX_ROP_INVERT 0x55 /* NOT dst */ 8962306a36Sopenharmony_ci#define TDFX_ROP_XOR 0x66 /* src XOR dst */ 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci#define AUTOINC_DSTX BIT(10) 9262306a36Sopenharmony_ci#define AUTOINC_DSTY BIT(11) 9362306a36Sopenharmony_ci#define COMMAND_2D_FILLRECT 0x05 9462306a36Sopenharmony_ci#define COMMAND_2D_S2S_BITBLT 0x01 /* screen to screen */ 9562306a36Sopenharmony_ci#define COMMAND_2D_H2S_BITBLT 0x03 /* host to screen */ 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci#define COMMAND_3D_NOP 0x00 9862306a36Sopenharmony_ci#define STATUS_RETRACE BIT(6) 9962306a36Sopenharmony_ci#define STATUS_BUSY BIT(9) 10062306a36Sopenharmony_ci#define MISCINIT1_CLUT_INV BIT(0) 10162306a36Sopenharmony_ci#define MISCINIT1_2DBLOCK_DIS BIT(15) 10262306a36Sopenharmony_ci#define DRAMINIT0_SGRAM_NUM BIT(26) 10362306a36Sopenharmony_ci#define DRAMINIT0_SGRAM_TYPE BIT(27) 10462306a36Sopenharmony_ci#define DRAMINIT0_SGRAM_TYPE_MASK (BIT(27) | BIT(28) | BIT(29)) 10562306a36Sopenharmony_ci#define DRAMINIT0_SGRAM_TYPE_SHIFT 27 10662306a36Sopenharmony_ci#define DRAMINIT1_MEM_SDRAM BIT(30) 10762306a36Sopenharmony_ci#define VGAINIT0_VGA_DISABLE BIT(0) 10862306a36Sopenharmony_ci#define VGAINIT0_EXT_TIMING BIT(1) 10962306a36Sopenharmony_ci#define VGAINIT0_8BIT_DAC BIT(2) 11062306a36Sopenharmony_ci#define VGAINIT0_EXT_ENABLE BIT(6) 11162306a36Sopenharmony_ci#define VGAINIT0_WAKEUP_3C3 BIT(8) 11262306a36Sopenharmony_ci#define VGAINIT0_LEGACY_DISABLE BIT(9) 11362306a36Sopenharmony_ci#define VGAINIT0_ALT_READBACK BIT(10) 11462306a36Sopenharmony_ci#define VGAINIT0_FAST_BLINK BIT(11) 11562306a36Sopenharmony_ci#define VGAINIT0_EXTSHIFTOUT BIT(12) 11662306a36Sopenharmony_ci#define VGAINIT0_DECODE_3C6 BIT(13) 11762306a36Sopenharmony_ci#define VGAINIT0_SGRAM_HBLANK_DISABLE BIT(22) 11862306a36Sopenharmony_ci#define VGAINIT1_MASK 0x1fffff 11962306a36Sopenharmony_ci#define VIDCFG_VIDPROC_ENABLE BIT(0) 12062306a36Sopenharmony_ci#define VIDCFG_CURS_X11 BIT(1) 12162306a36Sopenharmony_ci#define VIDCFG_INTERLACE BIT(3) 12262306a36Sopenharmony_ci#define VIDCFG_HALF_MODE BIT(4) 12362306a36Sopenharmony_ci#define VIDCFG_DESK_ENABLE BIT(7) 12462306a36Sopenharmony_ci#define VIDCFG_CLUT_BYPASS BIT(10) 12562306a36Sopenharmony_ci#define VIDCFG_2X BIT(26) 12662306a36Sopenharmony_ci#define VIDCFG_HWCURSOR_ENABLE BIT(27) 12762306a36Sopenharmony_ci#define VIDCFG_PIXFMT_SHIFT 18 12862306a36Sopenharmony_ci#define DACMODE_2X BIT(0) 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_ci/* I2C bit locations in the VIDSERPARPORT register */ 13162306a36Sopenharmony_ci#define DDC_ENAB 0x00040000 13262306a36Sopenharmony_ci#define DDC_SCL_OUT 0x00080000 13362306a36Sopenharmony_ci#define DDC_SDA_OUT 0x00100000 13462306a36Sopenharmony_ci#define DDC_SCL_IN 0x00200000 13562306a36Sopenharmony_ci#define DDC_SDA_IN 0x00400000 13662306a36Sopenharmony_ci#define I2C_ENAB 0x00800000 13762306a36Sopenharmony_ci#define I2C_SCL_OUT 0x01000000 13862306a36Sopenharmony_ci#define I2C_SDA_OUT 0x02000000 13962306a36Sopenharmony_ci#define I2C_SCL_IN 0x04000000 14062306a36Sopenharmony_ci#define I2C_SDA_IN 0x08000000 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_ci/* VGA rubbish, need to change this for multihead support */ 14362306a36Sopenharmony_ci#define MISC_W 0x3c2 14462306a36Sopenharmony_ci#define MISC_R 0x3cc 14562306a36Sopenharmony_ci#define SEQ_I 0x3c4 14662306a36Sopenharmony_ci#define SEQ_D 0x3c5 14762306a36Sopenharmony_ci#define CRT_I 0x3d4 14862306a36Sopenharmony_ci#define CRT_D 0x3d5 14962306a36Sopenharmony_ci#define ATT_IW 0x3c0 15062306a36Sopenharmony_ci#define IS1_R 0x3da 15162306a36Sopenharmony_ci#define GRA_I 0x3ce 15262306a36Sopenharmony_ci#define GRA_D 0x3cf 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_ci#ifdef __KERNEL__ 15562306a36Sopenharmony_ci 15662306a36Sopenharmony_cistruct banshee_reg { 15762306a36Sopenharmony_ci /* VGA rubbish */ 15862306a36Sopenharmony_ci unsigned char att[21]; 15962306a36Sopenharmony_ci unsigned char crt[25]; 16062306a36Sopenharmony_ci unsigned char gra[9]; 16162306a36Sopenharmony_ci unsigned char misc[1]; 16262306a36Sopenharmony_ci unsigned char seq[5]; 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_ci /* Banshee extensions */ 16562306a36Sopenharmony_ci unsigned char ext[2]; 16662306a36Sopenharmony_ci unsigned long vidcfg; 16762306a36Sopenharmony_ci unsigned long vidpll; 16862306a36Sopenharmony_ci unsigned long mempll; 16962306a36Sopenharmony_ci unsigned long gfxpll; 17062306a36Sopenharmony_ci unsigned long dacmode; 17162306a36Sopenharmony_ci unsigned long vgainit0; 17262306a36Sopenharmony_ci unsigned long vgainit1; 17362306a36Sopenharmony_ci unsigned long screensize; 17462306a36Sopenharmony_ci unsigned long stride; 17562306a36Sopenharmony_ci unsigned long cursloc; 17662306a36Sopenharmony_ci unsigned long curspataddr; 17762306a36Sopenharmony_ci unsigned long cursc0; 17862306a36Sopenharmony_ci unsigned long cursc1; 17962306a36Sopenharmony_ci unsigned long startaddr; 18062306a36Sopenharmony_ci unsigned long clip0min; 18162306a36Sopenharmony_ci unsigned long clip0max; 18262306a36Sopenharmony_ci unsigned long clip1min; 18362306a36Sopenharmony_ci unsigned long clip1max; 18462306a36Sopenharmony_ci unsigned long miscinit0; 18562306a36Sopenharmony_ci}; 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_cistruct tdfx_par; 18862306a36Sopenharmony_ci 18962306a36Sopenharmony_cistruct tdfxfb_i2c_chan { 19062306a36Sopenharmony_ci struct tdfx_par *par; 19162306a36Sopenharmony_ci struct i2c_adapter adapter; 19262306a36Sopenharmony_ci struct i2c_algo_bit_data algo; 19362306a36Sopenharmony_ci}; 19462306a36Sopenharmony_ci 19562306a36Sopenharmony_cistruct tdfx_par { 19662306a36Sopenharmony_ci u32 max_pixclock; 19762306a36Sopenharmony_ci u32 palette[16]; 19862306a36Sopenharmony_ci void __iomem *regbase_virt; 19962306a36Sopenharmony_ci unsigned long iobase; 20062306a36Sopenharmony_ci int wc_cookie; 20162306a36Sopenharmony_ci#ifdef CONFIG_FB_3DFX_I2C 20262306a36Sopenharmony_ci struct tdfxfb_i2c_chan chan[2]; 20362306a36Sopenharmony_ci#endif 20462306a36Sopenharmony_ci}; 20562306a36Sopenharmony_ci 20662306a36Sopenharmony_ci#endif /* __KERNEL__ */ 20762306a36Sopenharmony_ci 20862306a36Sopenharmony_ci#endif /* _TDFX_H */ 20962306a36Sopenharmony_ci 210