sstfb.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:11k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * linux/drivers/video/sstfb.h -- voodoo graphics frame buffer
  3.  *
  4.  *     Copyright (c) 2000,2001 Ghozlane Toumi <gtoumi@messel.emse.fr>
  5.  *
  6.  *     Created 28 Aug 2001 by Ghozlane Toumi
  7.  *
  8.  * $Id: sstfb.h,v 1.1.4.1 2001/08/29 01:30:38 ghoz Exp $
  9.  */
  10. #ifndef _SSTFB_H_
  11. #define _SSTFB_H_
  12. /*
  13.  *
  14.  *  Debug Stuff
  15.  *
  16.  */
  17. #ifdef SST_DEBUG
  18. #  define dprintk(X...) printk(KERN_DEBUG "sstfb: " X)
  19. #else
  20. #  define dprintk(X...)
  21. #  undef SST_DEBUG_REG
  22. #  undef SST_DEBUG_FUNC
  23. #  undef SST_DEBUG_VAR
  24. #  undef SST_DEBUG_IOCTL
  25. #endif
  26. #if (SST_DEBUG_REG > 0)
  27. #  define r_dprintk(X...) dprintk(X)
  28. #else
  29. #  define r_dprintk(X...)
  30. #endif
  31. #if (SST_DEBUG_REG > 1)
  32. #  define r_ddprintk(X...) dprintk(" " X)
  33. #else
  34. #  define r_ddprintk(X...)
  35. #endif
  36. #if (SST_DEBUG_FUNC > 0)
  37. #  define f_dprintk(X...) dprintk(X)
  38. #else
  39. #  define f_dprintk(X...)
  40. #endif
  41. #if (SST_DEBUG_FUNC > 1)
  42. #  define f_ddprintk(X...) dprintk(" " X)
  43. #else
  44. #  define f_ddprintk(X...)
  45. #endif
  46. #if (SST_DEBUG_FUNC > 2)
  47. #  define f_dddprintk(X...) dprintk(" " X)
  48. #else
  49. #  define f_dddprintk(X...)
  50. #endif
  51. #if (SST_DEBUG_VAR > 0)
  52. #  define v_dprintk(X...) dprintk(X)
  53. #  define print_var(V, X...)
  54.    {
  55.      dprintk(X);
  56.      printk(" :n");
  57.      sst_dbg_print_var(V);
  58.    }
  59. #else
  60. #  define v_dprintk(X...)
  61. #  define print_var(X,Y...)
  62. #endif
  63. #define eprintk(X...) printk(KERN_ERR "sstfb: " X)
  64. #define iprintk(X...) printk(KERN_INFO "sstfb: " X)
  65. #define wprintk(X...) printk(KERN_WARNING "sstfb: " X)
  66. #define BIT(x) (1ul<<(x))
  67. #define PS2KHZ(a) (1000000000UL/(a)) /* picoseconds to KHz */
  68. #define KHZ2PS(a) (1000000000UL/(a))
  69. #define POW2(x) (1ul<<(x))
  70. #ifndef ABS
  71. # define ABS(x) (((x)<0)?-(x):(x))
  72. #endif
  73. //void Dump_regs(void);
  74. /*
  75.  *
  76.  *  Const
  77.  *
  78.  */
  79. /* pci stuff */
  80. #define PCI_INIT_ENABLE 0x40
  81. #  define PCI_EN_INIT_WR   BIT(0)
  82. #  define PCI_EN_FIFO_WR   BIT(1)
  83. #  define PCI_REMAP_DAC   BIT(2)
  84. #define PCI_VCLK_ENABLE 0xc0 /* enable video */
  85. #define PCI_VCLK_DISABLE 0xe0
  86. /* register offsets from memBaseAddr */
  87. #define STATUS 0x0000
  88. #  define STATUS_FBI_BUSY   BIT(7)
  89. #define FBZMODE 0x0110
  90. #  define EN_CLIPPING   BIT(0) /* enable clipping */
  91. #  define EN_RGB_WRITE   BIT(9) /* enable writes to rgb area */
  92. #  define EN_ALPHA_WRITE   BIT(10)
  93. #  define ENGINE_INVERT_Y   BIT(17) /* invert Y origin (pipe) */
  94. #define LFBMODE 0x0114
  95. #  define LFB_565   0 /* bits 3:0 .16 bits RGB */
  96. #  define LFB_888   4 /* 24 bits RGB */
  97. #  define LFB_8888   5 /* 32 bits ARGB */
  98. #  define WR_BUFF_FRONT   0 /* write buf select (front) */
  99. #  define WR_BUFF_BACK   (1 << 4) /* back */
  100. #  define RD_BUFF_FRONT   0 /* read buff select (front) */
  101. #  define RD_BUFF_BACK   (1 << 6) /* back */
  102. #  define EN_PXL_PIPELINE   BIT(8) /* pixel pipeline (clip..)*/
  103. #  define LFB_WORD_SWIZZLE_WR   BIT(11) /* enable write-wordswap (big-endian) */
  104. #  define LFB_BYTE_SWIZZLE_WR   BIT(12) /* enable write-byteswap (big-endian) */
  105. #  define LFB_INVERT_Y   BIT(13) /* invert Y origin (LFB) */
  106. #  define LFB_WORD_SWIZZLE_RD   BIT(15) /* enable read-wordswap (big-endian) */
  107. #  define LFB_BYTE_SWIZZLE_RD   BIT(16) /* enable read-byteswap (big-endian) */
  108. #define CLIP_LEFT_RIGHT 0x0118
  109. #define CLIP_LOWY_HIGHY 0x011c
  110. #define NOPCMD 0x0120
  111. #define FASTFILLCMD 0x0124
  112. #define SWAPBUFFCMD 0x0128
  113. #define FBIINIT4 0x0200 /* misc controls */
  114. #  define FAST_PCI_READS   0 /* 1 waitstate */
  115. #  define SLOW_PCI_READS   BIT(0) /* 2 ws */
  116. #  define LFB_READ_AHEAD   BIT(1)
  117. #define BACKPORCH 0x0208
  118. #define VIDEODIMENSIONS 0x020c
  119. #define FBIINIT0 0x0210 /* misc+fifo  controls */
  120. #  define EN_VGA_PASSTHROUGH   BIT(0)
  121. #  define FBI_RESET   BIT(1)
  122. #  define FIFO_RESET   BIT(2)
  123. #define FBIINIT1 0x0214 /* PCI + video controls */
  124. #  define VIDEO_MASK   0x8080010f /* masks video related bits V1+V2*/
  125. #  define FAST_PCI_WRITES   0 /* 0 ws */
  126. #  define SLOW_PCI_WRITES   BIT(1) /* 1 ws */
  127. #  define EN_LFB_READ   BIT(3)
  128. #  define TILES_IN_X_SHIFT   4
  129. #  define VIDEO_RESET   BIT(8)
  130. #  define EN_BLANKING   BIT(12)
  131. #  define EN_DATA_OE   BIT(13)
  132. #  define EN_BLANK_OE   BIT(14)
  133. #  define EN_HVSYNC_OE   BIT(15)
  134. #  define EN_DCLK_OE   BIT(16)
  135. #  define SEL_INPUT_VCLK_2X   0 /* bit 17 */
  136. #  define SEL_INPUT_VCLK_SLAVE   BIT(17)
  137. #  define SEL_SOURCE_VCLK_SLAVE   0 /* bits 21:20 */
  138. #  define SEL_SOURCE_VCLK_2X_DIV2 (0x01 << 20)
  139. #  define SEL_SOURCE_VCLK_2X_SEL  (0x02 << 20)
  140. #  define EN_24BPP   BIT(22)
  141. #  define TILES_IN_X_MSB_SHIFT   24 /* v2 */
  142. #  define VCLK_2X_SEL_DEL_SHIFT   27 /* vclk out delay 0,4,6,8ns */
  143. #  define VCLK_DEL_SHIFT   29 /* vclk in delay */
  144. #define FBIINIT2 0x0218 /* Dram controls */
  145. #  define EN_FAST_RAS_READ   BIT(5)
  146. #  define EN_DRAM_OE   BIT(6)
  147. #  define EN_FAST_RD_AHEAD_WR   BIT(7)
  148. #  define VIDEO_OFFSET_SHIFT   11 /* unit: #rows tile 64x16/2 */
  149. #  define SWAP_DACVSYNC   0
  150. #  define SWAP_DACDATA0   (1 << 9)
  151. #  define SWAP_FIFO_STALL   (2 << 9)
  152. #  define EN_RD_AHEAD_FIFO   BIT(21)
  153. #  define EN_DRAM_REFRESH   BIT(22)
  154. #  define DRAM_REFRESH_16   (0x30 << 23) /* dram 16 ms */
  155. #define DAC_READ FBIINIT2 /* in remap mode */
  156. #define FBIINIT3 0x021c /* fbi controls */
  157. #  define DISABLE_TEXTURE   BIT(6)
  158. #  define Y_SWAP_ORIGIN_SHIFT   22 /* Y swap substraction value */
  159. #define HSYNC 0x0220
  160. #define VSYNC 0x0224
  161. #define DAC_DATA 0x022c
  162. #  define DAC_READ_CMD   BIT(11) /* set read dacreg mode */
  163. #define FBIINIT5 0x0244 /* v2 specific */
  164. #  define FBIINIT5_MASK   0xfa40ffff    /* mask video bits*/
  165. #  define HDOUBLESCAN   BIT(20)
  166. #  define VDOUBLESCAN   BIT(21)
  167. #  define HSYNC_HIGH    BIT(23)
  168. #  define VSYNC_HIGH    BIT(24)
  169. #  define INTERLACE   BIT(26)
  170. #define FBIINIT6 0x0248 /* v2 specific */
  171. #  define TILES_IN_X_LSB_SHIFT   30 /* v2 */
  172. #define FBIINIT7 0x024c /* v2 specific */
  173. /* Dac Registers */
  174. #define DACREG_WMA 0x0 /* pixel write mode address */
  175. #define DACREG_LUT 0x01 /* color value */
  176. #define DACREG_RMR 0x02 /* pixel mask */
  177. #define DACREG_RMA 0x03 /* pixel read mode address */
  178. /*Dac registers in indexed mode (TI, ATT dacs) */
  179. #define DACREG_ADDR_I DACREG_WMA
  180. #define DACREG_DATA_I DACREG_RMR
  181. #define DACREG_RMR_I 0x00
  182. #define DACREG_CR0_I 0x01
  183. #  define DACREG_CR0_EN_INDEXED   BIT(0) /* enable indexec mode */
  184. #  define DACREG_CR0_8BIT   BIT(1) /* set dac to 8 bits/read */
  185. #  define DACREG_CR0_PWDOWN   BIT(3) /* powerdown dac */
  186. #  define DACREG_CR0_16BPP   0x30 /* mode 3 */
  187. #  define DACREG_CR0_24BPP   0x50 /* mode 5 */
  188. #define DACREG_CR1_I 0x05
  189. #define DACREG_CC_I 0x06
  190. #  define DACREG_CC_CLKA   BIT(7) /* clk A controled by regs */
  191. #  define DACREG_CC_CLKA_C   (2<<4) /* clk A uses reg C */
  192. #  define DACREG_CC_CLKB   BIT(3) /* clk B controled by regs */
  193. #  define DACREG_CC_CLKB_D   3 /* clkB uses reg D */
  194. #define DACREG_AC0_I 0x48 /* clock A reg C */
  195. #define DACREG_AC1_I 0x49
  196. #define DACREG_BD0_I 0x6c /* clock B reg D */
  197. #define DACREG_BD1_I 0x6d
  198. /* identification constants */
  199. #define DACREG_MIR_TI 0x97
  200. #define DACREG_DIR_TI 0x09
  201. #define DACREG_MIR_ATT 0x84
  202. #define DACREG_DIR_ATT 0x09
  203. /* ics dac specific registers*/
  204. #define DACREG_ICS_PLLWMA 0x04 /* PLL write mode address */
  205. #define DACREG_ICS_PLLDATA 0x05 /* PLL data /parameter */
  206. #define DACREG_ICS_CMD 0x06 /* command */
  207. #  define DACREG_ICS_CMD_16BPP   0x50 /* ics color mode 6 (16bpp bypass)*/
  208. #  define DACREG_ICS_CMD_24BPP   0x70 /* ics color mode 7 (24bpp bypass)*/
  209. #  define DACREG_ICS_CMD_PWDOWN BIT(0) /* powerdown dac */
  210. #define DACREG_ICS_PLLRMA 0x07 /* PLL read mode address */
  211. /*
  212.  * pll parameter register:
  213.  * indexed : write addr to PLLWMA, write data in PLLDATA.
  214.  * for reads use PLLRMA .
  215.  * 8 freq registers (0-7) for video clock (CLK0)
  216.  * 2 freq registers (a-b) for graphic clock (CLK1)
  217.  */
  218. #define DACREG_ICS_PLL_CLK0_1_INI 0x55 /* initial pll M value for freq f1  */
  219. #define DACREG_ICS_PLL_CLK0_7_INI 0x71 /* f7 */
  220. #define DACREG_ICS_PLL_CLK1_B_INI 0x79 /* fb */
  221. #define DACREG_ICS_PLL_CTRL 0x0e
  222. #  define DACREG_ICS_CLK0   BIT(5)
  223. #  define DACREG_ICS_CLK0_0   0
  224. #  define DACREG_ICS_CLK1_A   0 /* bit4 */
  225. /* sst default init registers */
  226. #define FBIINIT0_DEFAULT EN_VGA_PASSTHROUGH
  227. #define FBIINIT1_DEFAULT 
  228. (
  229.   FAST_PCI_WRITES
  230. /*   SLOW_PCI_WRITES*/
  231. | VIDEO_RESET
  232. | 10 << TILES_IN_X_SHIFT
  233. | SEL_SOURCE_VCLK_2X_SEL
  234. | EN_LFB_READ
  235. )
  236. #define FBIINIT2_DEFAULT
  237. (
  238.  SWAP_DACVSYNC
  239. | EN_DRAM_OE
  240. | DRAM_REFRESH_16
  241. | EN_DRAM_REFRESH
  242. | EN_FAST_RAS_READ
  243. | EN_RD_AHEAD_FIFO
  244. | EN_FAST_RD_AHEAD_WR
  245. )
  246. #define FBIINIT3_DEFAULT 
  247. ( DISABLE_TEXTURE )
  248. #define FBIINIT4_DEFAULT
  249. (
  250.   FAST_PCI_READS
  251. /*   SLOW_PCI_READS*/
  252. | LFB_READ_AHEAD
  253. )
  254. /* Careful with this one : writing back the data just read will trash the DAC
  255.    reading some fields give logic value on pins, but setting this field will
  256.    set the source signal driving the pin. conclusion : just use the default
  257.    as a base before writing back .
  258. */
  259. #define FBIINIT6_DEFAULT (0x0)
  260. /*
  261.  *
  262.  * Misc Const
  263.  *
  264.  */
  265. /* used to know witch clock to set */
  266. enum {
  267. VID_CLOCK=0,
  268. GFX_CLOCK=1,
  269. };
  270. /* freq max */
  271. #define DAC_FREF 14318 /* DAC reference freq (Khz) */
  272. #define VCO_MAX 260000
  273. /*
  274.  *  driver structs
  275.  */
  276. struct pll_timing {
  277. unsigned int m;
  278. unsigned int n;
  279. unsigned int p;
  280. };
  281. struct sstfb_info;
  282. struct dac_switch {
  283. char * name;
  284. int (*detect) (struct sstfb_info *sst_info);
  285. int (*set_pll) (struct sstfb_info *sst_info, const struct pll_timing *t, const int clock);
  286. void (*set_vidmod) (struct sstfb_info *sst_info, const int bpp);
  287. };
  288. struct sst_spec {
  289. char * name;
  290. int default_gfx_clock; /* 50000 for voodoo1, 75000 for voodoo2 */
  291. int max_gfxclk;  /* ! in Mhz ie 60 for voodoo 1 */
  292. };
  293. struct sstfb_par {
  294. unsigned int bpp;
  295. unsigned int xDim; /* xres */
  296. unsigned int hSyncOn; /* hsync_len */
  297. unsigned int hSyncOff; /* left_margin + xres + right_margin */
  298. unsigned int hBackPorch;/* left_margin */
  299. unsigned int yDim;
  300. unsigned int vSyncOn;
  301. unsigned int vSyncOff;
  302. unsigned int vBackPorch;
  303. unsigned int freq; /* freq in kHz */
  304. struct pll_timing pll;
  305. unsigned int tiles_in_X;/* num of tiles in X res */
  306. unsigned int vmode;     /* doublescan/interlaced */
  307. unsigned int sync;      /* H/V sync polarity */
  308. unsigned int valid; /* par is correct (fool proof) */
  309. };
  310. struct sstfb_info {
  311. struct fb_info info;
  312. struct sstfb_par current_par;
  313. struct pci_dev * dev;
  314. struct {
  315. unsigned long base; /* physical */
  316. unsigned long vbase; /* virtual (CPU view) */
  317. unsigned long len;
  318. } video; /* fb memory info */
  319. struct {
  320. unsigned long base;
  321. unsigned long vbase;
  322. } mmio; /* registers memory info */
  323. struct dac_switch  dac_sw; /* dac specific functions */
  324. int type;
  325. u8 revision;
  326. /* status */
  327. /*XXX int configured;
  328. int indexed_mode;
  329. int vgapass;
  330. int clipping; */
  331. int gfx_clock;
  332. int currcon;
  333. struct display   disp; /* current display */
  334. struct { u_int red, green, blue, transp; } palette[16];
  335. union {
  336. #ifdef FBCON_HAS_CFB16
  337. u16 cfb16[16];
  338. #endif
  339. #ifdef EN_24_32_BPP
  340. #if defined (FBCON_HAS_CFB24) || defined(FBCON_HAS_CFB32)
  341. u32 cfb32[16];
  342. #endif
  343. #endif
  344. } fbcon_cmap;
  345. };
  346. #endif /* _SSTFB_H_ */