sstfb.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:10k
源码类别:

嵌入式Linux

开发平台:

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.  *
  15.  *  Debug Stuff
  16.  *
  17.  */
  18. #ifdef SST_DEBUG
  19. #  define dprintk(X...) printk(KERN_DEBUG "sstfb: " X)
  20. #else
  21. #  define dprintk(X...)
  22. #  undef SST_DEBUG_REG
  23. #  undef SST_DEBUG_FUNC
  24. #  undef SST_DEBUG_VAR
  25. #  undef SST_DEBUG_IOCTL
  26. #endif
  27. #if (SST_DEBUG_REG > 0)
  28. #  define r_dprintk(X...) dprintk(X)
  29. #else
  30. #  define r_dprintk(X...)
  31. #endif
  32. #if (SST_DEBUG_REG > 1)
  33. #  define r_ddprintk(X...) dprintk(" " X)
  34. #else
  35. #  define r_ddprintk(X...)
  36. #endif
  37. #if (SST_DEBUG_FUNC > 0)
  38. #  define f_dprintk(X...) dprintk(X)
  39. #else
  40. #  define f_dprintk(X...)
  41. #endif
  42. #if (SST_DEBUG_FUNC > 1)
  43. #  define f_ddprintk(X...) dprintk(" " X)
  44. #else
  45. #  define f_ddprintk(X...)
  46. #endif
  47. #if (SST_DEBUG_FUNC > 2)
  48. #  define f_dddprintk(X...) dprintk(" " X)
  49. #else
  50. #  define f_dddprintk(X...)
  51. #endif
  52. #if (SST_DEBUG_VAR > 0)
  53. #  define v_dprintk(X...) dprintk(X)
  54. #  define print_var(V, X...)
  55.    {
  56.      dprintk(X);
  57.      printk(" :n");
  58.      sst_dbg_print_var(V);
  59.    }
  60. #else
  61. #  define v_dprintk(X...)
  62. #  define print_var(X,Y...)
  63. #endif
  64. #define eprintk(X...) printk(KERN_ERR "sstfb: " X)
  65. #define iprintk(X...) printk(KERN_INFO "sstfb: " X)
  66. #define wprintk(X...) printk(KERN_WARNING "sstfb: " X)
  67. #define BIT(x) (1ul << (x))
  68. #define PS2KHZ(a) (1000000000UL/(a)) /* picoseconds to KHz */
  69. #define KHZ2PS(a) (1000000000UL/(a))
  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_INVERT_Y   BIT(13) /* invert Y origin (LFB) */
  104. #define CLIP_LEFT_RIGHT 0x0118
  105. #define CLIP_LOWY_HIGHY 0x011c
  106. #define NOPCMD 0x0120
  107. #define FASTFILLCMD 0x0124
  108. #define SWAPBUFFCMD 0x0128
  109. #define FBIINIT4 0x0200 /* misc controls */
  110. #  define FAST_PCI_READS   0 /* 1 waitstate */
  111. #  define SLOW_PCI_READS   BIT(0) /* 2 ws */
  112. #  define LFB_READ_AHEAD   BIT(1)
  113. #define BACKPORCH 0x0208
  114. #define VIDEODIMENSIONS 0x020c
  115. #define FBIINIT0 0x0210 /* misc+fifo  controls */
  116. #  define EN_VGA_PASSTHROUGH   BIT(0)
  117. #  define FBI_RESET   BIT(1)
  118. #  define FIFO_RESET   BIT(2)
  119. #define FBIINIT1 0x0214 /* PCI + video controls */
  120. #  define VIDEO_MASK   0x8080010f /* masks video related bits V1+V2*/
  121. #  define FAST_PCI_WRITES   0 /* 0 ws */
  122. #  define SLOW_PCI_WRITES   BIT(1) /* 1 ws */
  123. #  define EN_LFB_READ   BIT(3)
  124. #  define TILES_IN_X_SHIFT   4
  125. #  define VIDEO_RESET   BIT(8)
  126. #  define EN_BLANKING   BIT(12)
  127. #  define EN_DATA_OE   BIT(13)
  128. #  define EN_BLANK_OE   BIT(14)
  129. #  define EN_HVSYNC_OE   BIT(15)
  130. #  define EN_DCLK_OE   BIT(16)
  131. #  define SEL_INPUT_VCLK_2X   0 /* bit 17 */
  132. #  define SEL_INPUT_VCLK_SLAVE   BIT(17)
  133. #  define SEL_SOURCE_VCLK_SLAVE   0 /* bits 21:20 */
  134. #  define SEL_SOURCE_VCLK_2X_DIV2 (0x01 << 20)
  135. #  define SEL_SOURCE_VCLK_2X_SEL  (0x02 << 20)
  136. #  define EN_24BPP   BIT(22)
  137. #  define TILES_IN_X_MSB_SHIFT   24 /* v2 */
  138. #  define VCLK_2X_SEL_DEL_SHIFT   27 /* vclk out delay 0,4,6,8ns */
  139. #  define VCLK_DEL_SHIFT   29 /* vclk in delay */
  140. #define FBIINIT2 0x0218 /* Dram controls */
  141. #  define EN_FAST_RAS_READ   BIT(5)
  142. #  define EN_DRAM_OE   BIT(6)
  143. #  define EN_FAST_RD_AHEAD_WR   BIT(7)
  144. #  define VIDEO_OFFSET_SHIFT   11 /* unit: #rows tile 64x16/2 */
  145. #  define SWAP_DACVSYNC   0
  146. #  define SWAP_DACDATA0   (1 << 9)
  147. #  define SWAP_FIFO_STALL   (2 << 9)
  148. #  define EN_RD_AHEAD_FIFO   BIT(21)
  149. #  define EN_DRAM_REFRESH   BIT(22)
  150. #  define DRAM_REFRESH_16   (0x30 << 23) /* dram 16 ms */
  151. #define DAC_READ FBIINIT2 /* in remap mode */
  152. #define FBIINIT3 0x021c /* fbi controls */
  153. #  define DISABLE_TEXTURE   BIT(6)
  154. #  define Y_SWAP_ORIGIN_SHIFT   22 /* Y swap substraction value */
  155. #define HSYNC 0x0220
  156. #define VSYNC 0x0224
  157. #define DAC_DATA 0x022c
  158. #  define DAC_READ_CMD   BIT(11) /* set read dacreg mode */
  159. #define FBIINIT5 0x0244 /* v2 specific */
  160. #define FBIINIT6 0x0248 /* v2 specific */
  161. #define FBIINIT7 0x024c /* v2 specific */
  162. #  define TILES_IN_X_LSB_SHIFT   30 /* v2 */
  163. /* Dac Registers */
  164. #define DACREG_WMA 0x0 /* pixel write mode address */
  165. #define DACREG_LUT 0x01 /* color value */
  166. #define DACREG_RMR 0x02 /* pixel mask */
  167. #define DACREG_RMA 0x03 /* pixel read mode address */
  168. /*Dac registers in indexed mode (TI, ATT dacs) */
  169. #define DACREG_ADDR_I DACREG_WMA
  170. #define DACREG_DATA_I DACREG_RMR
  171. #define DACREG_RMR_I 0x00
  172. #define DACREG_CR0_I 0x01
  173. #  define DACREG_CR0_EN_INDEXED   BIT(0) /* enable indexec mode */
  174. #  define DACREG_CR0_8BIT   BIT(1) /* set dac to 8 bits/read */
  175. #  define DACREG_CR0_PWDOWN   BIT(3) /* powerdown dac */
  176. #  define DACREG_CR0_16BPP   0x30 /* mode 3 */
  177. #  define DACREG_CR0_24BPP   0x50 /* mode 5 */
  178. #define DACREG_CR1_I 0x05
  179. #define DACREG_CC_I 0x06
  180. #  define DACREG_CC_CLKA   BIT(7) /* clk A controled by regs */
  181. #  define DACREG_CC_CLKA_C   (2<<4) /* clk A uses reg C */
  182. #  define DACREG_CC_CLKB   BIT(3) /* clk B controled by regs */
  183. #  define DACREG_CC_CLKB_D   3 /* clkB uses reg D */
  184. #define DACREG_AC0_I 0x48 /* clock A reg C */
  185. #define DACREG_AC1_I 0x49
  186. #define DACREG_BD0_I 0x6c /* clock B reg D */
  187. #define DACREG_BD1_I 0x6d
  188. /* identification constants */
  189. #define DACREG_MIR_TI 0x97
  190. #define DACREG_DIR_TI 0x09
  191. #define DACREG_MIR_ATT 0x84
  192. #define DACREG_DIR_ATT 0x09
  193. /* ics dac specific registers*/
  194. #define DACREG_ICS_PLLWMA 0x04 /* PLL write mode address */
  195. #define DACREG_ICS_PLLDATA 0x05 /* PLL data /parameter */
  196. #define DACREG_ICS_CMD 0x06 /* command */
  197. #  define DACREG_ICS_CMD_16BPP   0x50 /* ics color mode 6 (16bpp bypass)*/
  198. #  define DACREG_ICS_CMD_24BPP   0x70 /* ics color mode 7 (24bpp bypass)*/
  199. #  define DACREG_ICS_CMD_PWDOWN BIT(0) /* powerdown dac */
  200. #define DACREG_ICS_PLLRMA 0x07 /* PLL read mode address */
  201. /*
  202.  * pll parameter register:
  203.  * indexed : write addr to PLLWMA, write data in PLLDATA.
  204.  * for reads use PLLRMA .
  205.  * 8 freq registers (0-7) for video clock (CLK0)
  206.  * 2 freq registers (a-b) for graphic clock (CLK1)
  207.  */
  208. #define DACREG_ICS_PLL_CLK0_1_INI 0x55 /* initial pll M value for freq f1  */
  209. #define DACREG_ICS_PLL_CLK0_7_INI 0x71 /* f7 */
  210. #define DACREG_ICS_PLL_CLK1_B_INI 0x79 /* fb */
  211. #define DACREG_ICS_PLL_CTRL 0x0e
  212. #  define DACREG_ICS_CLK0   BIT(5)
  213. #  define DACREG_ICS_CLK0_0   0
  214. #  define DACREG_ICS_CLK1_A   0 /* bit4 */
  215. /* sst default init registers */
  216. #define FBIINIT0_DEFAULT EN_VGA_PASSTHROUGH
  217. #define FBIINIT1_DEFAULT 
  218. (
  219.   FAST_PCI_WRITES
  220. /*   SLOW_PCI_WRITES*/
  221. | VIDEO_RESET
  222. | 10 << TILES_IN_X_SHIFT
  223. | SEL_SOURCE_VCLK_2X_SEL
  224. | EN_LFB_READ
  225. )
  226. #define FBIINIT2_DEFAULT
  227. (
  228.  SWAP_DACVSYNC
  229. | EN_DRAM_OE
  230. | DRAM_REFRESH_16
  231. | EN_DRAM_REFRESH
  232. | EN_FAST_RAS_READ
  233. | EN_RD_AHEAD_FIFO
  234. | EN_FAST_RD_AHEAD_WR
  235. )
  236. #define FBIINIT3_DEFAULT 
  237. ( DISABLE_TEXTURE )
  238. #define FBIINIT4_DEFAULT
  239. (
  240.   FAST_PCI_READS
  241. /*   SLOW_PCI_READS*/
  242. | LFB_READ_AHEAD
  243. )
  244. /* Careful with this one : writing back the data just read will trash the DAC
  245.    reading some fields give logic value on pins, but setting this field will
  246.    set the source signal driving the pin. conclusion : just use the default
  247.    as a base before writing back .
  248. */
  249. #define FBIINIT6_DEFAULT (0x0)
  250. /*
  251.  *
  252.  * Misc Const
  253.  *
  254.  */
  255. /* used to know witch clock to set */
  256. #define VID_CLOCK 0
  257. #define GFX_CLOCK 1
  258. /* freq max */
  259. #define DAC_FREF 14318 /* DAC reference freq (Khz) */
  260. #define VCO_MAX 260000
  261. /*
  262.  *
  263.  *  Declarations
  264.  *
  265.  */
  266. struct pll_timing {
  267. u8 m;
  268. u8 n;
  269. u8 p;
  270. };
  271. struct dac_switch {
  272. char * name;
  273. int (*detect) (void);
  274. int (*set_pll) (const struct pll_timing *t, const int clock);
  275. void (*set_vidmod) (const int bpp);
  276. };
  277. struct sst_spec {
  278. char * name;
  279. int default_gfx_clock; /* 50000 for voodoo1, 75000 for voodoo2 */
  280. int max_gfxclk;  /* ! in Mhz ie 60 for voodoo 1 */
  281. };
  282. struct sstfb_par {
  283. unsigned int bpp;
  284. unsigned int xDim; /* xres */
  285. unsigned int hSyncOn; /* hsync_len */
  286. unsigned int hSyncOff; /* left_margin + xres + right_margin */
  287. unsigned int hBackPorch;/* left_margin */
  288. unsigned int yDim;
  289. unsigned int vSyncOn;
  290. unsigned int vSyncOff;
  291. unsigned int vBackPorch;
  292. unsigned int freq; /* freq in picoseconds */
  293. unsigned int tiles_in_X; /* num of tiles in X res */
  294. };
  295. struct sstfb_info {
  296. struct fb_info info;
  297. struct sstfb_par current_par;
  298. struct pci_dev * dev;
  299. struct {
  300. unsigned long base; /* physical */
  301. unsigned long vbase; /* virtual (CPU view) */
  302. unsigned long len;
  303. } video; /* fb memory info */
  304. struct {
  305. unsigned long base;
  306. unsigned long vbase;
  307. } mmio; /* registers memory info */
  308. struct dac_switch * dac_sw; /* dac specific functions */
  309. struct sst_spec * spec;
  310. int is_voodoo2;
  311. u8 revision;
  312. /* status */
  313. int configured;
  314. /* int indexed_mode;
  315. int vgapass;
  316. int clipping; */
  317. int gfx_clock;
  318. };
  319. #endif /* _SSTFB_H_ */