~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/drivers/video/cyber2000fb.h

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  *  linux/drivers/video/cyber2000fb.h
  3  *
  4  *  Copyright (C) 1998-2000 Russell King
  5  *
  6  * This program is free software; you can redistribute it and/or modify
  7  * it under the terms of the GNU General Public License version 2 as
  8  * published by the Free Software Foundation.
  9  *
 10  * Integraphics Cyber2000 frame buffer device
 11  */
 12 #include <linux/config.h>
 13 
 14 #define cyber2000_outb(dat,reg) writeb(dat, CyberRegs + reg)
 15 #define cyber2000_outw(dat,reg) writew(dat, CyberRegs + reg)
 16 #define cyber2000_outl(dat,reg) writel(dat, CyberRegs + reg)
 17 
 18 #define cyber2000_inb(reg)      readb(CyberRegs + reg)
 19 #define cyber2000_inw(reg)      readw(CyberRegs + reg)
 20 #define cyber2000_inl(reg)      readl(CyberRegs + reg)
 21 
 22 /*
 23  * Internal CyberPro sizes and offsets.
 24  */
 25 #define MMIO_OFFSET     0x00800000
 26 #define MMIO_SIZE       0x000c0000
 27 
 28 #define NR_PALETTE      256
 29 
 30 #if defined(DEBUG) && defined(CONFIG_DEBUG_LL)
 31 static void debug_printf(char *fmt, ...)
 32 {
 33         char buffer[128];
 34         va_list ap;
 35 
 36         va_start(ap, fmt);
 37         vsprintf(buffer, fmt, ap);
 38         va_end(ap);
 39 
 40         printascii(buffer);
 41 }
 42 #else
 43 #define debug_printf(x...) do { } while (0)
 44 #endif
 45 
 46 static inline void cyber2000_crtcw(int reg, int val)
 47 {
 48         cyber2000_outb(reg, 0x3d4);
 49         cyber2000_outb(val, 0x3d5);
 50 }
 51 
 52 static inline void cyber2000_grphw(int reg, int val)
 53 {
 54         cyber2000_outb(reg, 0x3ce);
 55         cyber2000_outb(val, 0x3cf);
 56 }
 57 
 58 static inline unsigned int cyber2000_grphr(int reg)
 59 {
 60         cyber2000_outb(reg, 0x3ce);
 61         return cyber2000_inb(0x3cf);
 62 }
 63 
 64 static inline void cyber2000_attrw(int reg, int val)
 65 {
 66         cyber2000_inb(0x3da);
 67         cyber2000_outb(reg, 0x3c0);
 68         cyber2000_inb(0x3c1);
 69         cyber2000_outb(val, 0x3c0);
 70 }
 71 
 72 static inline void cyber2000_seqw(int reg, int val)
 73 {
 74         cyber2000_outb(reg, 0x3c4);
 75         cyber2000_outb(val, 0x3c5);
 76 }
 77 
 78 #define PIXFORMAT_8BPP          0
 79 #define PIXFORMAT_16BPP         1
 80 #define PIXFORMAT_24BPP         2
 81 
 82 #define VISUALID_256            1
 83 #define VISUALID_64K            2
 84 #define VISUALID_16M            4
 85 #define VISUALID_32K            6
 86 
 87 #define FUNC_CTL                0x3c
 88 #define FUNC_CTL_EXTREGENBL             0x80    /* enable access to 0xbcxxx             */
 89 
 90 #define BIU_BM_CONTROL          0x3e
 91 #define BIU_BM_CONTROL_ENABLE           0x01    /* enable bus-master                    */
 92 #define BIU_BM_CONTROL_BURST            0x02    /* enable burst                         */
 93 #define BIU_BM_CONTROL_BACK2BACK        0x04    /* enable back to back                  */
 94 
 95 #define X_V2_VID_MEM_START      0x40
 96 #define X_V2_VID_SRC_WIDTH      0x43
 97 #define X_V2_X_START            0x45
 98 #define X_V2_X_END              0x47
 99 #define X_V2_Y_START            0x49
100 #define X_V2_Y_END              0x4b
101 #define X_V2_VID_SRC_WIN_WIDTH  0x4d
102 
103 #define Y_V2_DDA_X_INC          0x43
104 #define Y_V2_DDA_Y_INC          0x47
105 #define Y_V2_VID_FIFO_CTL       0x49
106 #define Y_V2_VID_FMT            0x4b
107 #define Y_V2_VID_DISP_CTL1      0x4c
108 #define Y_V2_VID_FIFO_CTL1      0x4d
109 
110 #define J_X2_VID_MEM_START      0x40
111 #define J_X2_VID_SRC_WIDTH      0x43
112 #define J_X2_X_START            0x47
113 #define J_X2_X_END              0x49
114 #define J_X2_Y_START            0x4b
115 #define J_X2_Y_END              0x4d
116 #define J_X2_VID_SRC_WIN_WIDTH  0x4f
117 
118 #define K_X2_DDA_X_INIT         0x40
119 #define K_X2_DDA_X_INC          0x42
120 #define K_X2_DDA_Y_INIT         0x44
121 #define K_X2_DDA_Y_INC          0x46
122 #define K_X2_VID_FMT            0x48
123 #define K_X2_VID_DISP_CTL1      0x49
124 
125 #define K_CAP_X2_CTL1           0x49
126 
127 #define CAP_X_START             0x60
128 #define CAP_X_END               0x62
129 #define CAP_Y_START             0x64
130 #define CAP_Y_END               0x66
131 #define CAP_DDA_X_INIT          0x68
132 #define CAP_DDA_X_INC           0x6a
133 #define CAP_DDA_Y_INIT          0x6c
134 #define CAP_DDA_Y_INC           0x6e
135 
136 #define MEM_CTL1                0x71
137 
138 #define MEM_CTL2                0x72
139 #define MEM_CTL2_SIZE_2MB               0x01
140 #define MEM_CTL2_SIZE_4MB               0x02
141 #define MEM_CTL2_SIZE_MASK              0x03
142 #define MEM_CTL2_64BIT                  0x04
143 
144 #define EXT_FIFO_CTL            0x74
145 
146 #define CAP_PIP_X_START         0x80
147 #define CAP_PIP_X_END           0x82
148 #define CAP_PIP_Y_START         0x84
149 #define CAP_PIP_Y_END           0x86
150 
151 #define CAP_NEW_CTL1            0x88
152 
153 #define CAP_NEW_CTL2            0x89
154 
155 #define BM_CTRL0                0x9c
156 #define BM_CTRL1                0x9d
157 
158 #define CAP_MODE1               0xa4
159 #define CAP_MODE1_8BIT                  0x01    /* enable 8bit capture mode             */
160 #define CAP_MODE1_CCIR656               0x02    /* CCIR656 mode                         */
161 #define CAP_MODE1_IGNOREVGT             0x04    /* ignore VGT                           */
162 #define CAP_MODE1_ALTFIFO               0x10    /* use alternate FIFO for capture       */
163 #define CAP_MODE1_SWAPUV                0x20    /* swap UV bytes                        */
164 #define CAP_MODE1_MIRRORY               0x40    /* mirror vertically                    */
165 #define CAP_MODE1_MIRRORX               0x80    /* mirror horizontally                  */
166 
167 #define DCLK_MULT               0xb0
168 #define DCLK_DIV                0xb1
169 #define MCLK_MULT               0xb2
170 #define MCLK_DIV                0xb3
171 
172 #define CAP_MODE2               0xa5
173 
174 #define Y_TV_CTL                0xae
175 
176 #define EXT_MEM_START           0xc0            /* ext start address 21 bits            */
177 #define HOR_PHASE_SHIFT         0xc2            /* high 3 bits                          */
178 #define EXT_SRC_WIDTH           0xc3            /* ext offset phase  10 bits            */
179 #define EXT_SRC_HEIGHT          0xc4            /* high 6 bits                          */
180 #define EXT_X_START             0xc5            /* ext->screen, 16 bits                 */
181 #define EXT_X_END               0xc7            /* ext->screen, 16 bits                 */
182 #define EXT_Y_START             0xc9            /* ext->screen, 16 bits                 */
183 #define EXT_Y_END               0xcb            /* ext->screen, 16 bits                 */
184 #define EXT_SRC_WIN_WIDTH       0xcd            /* 8 bits                               */
185 #define EXT_COLOUR_COMPARE      0xce            /* 24 bits                              */
186 #define EXT_DDA_X_INIT          0xd1            /* ext->screen 16 bits                  */
187 #define EXT_DDA_X_INC           0xd3            /* ext->screen 16 bits                  */
188 #define EXT_DDA_Y_INIT          0xd5            /* ext->screen 16 bits                  */
189 #define EXT_DDA_Y_INC           0xd7            /* ext->screen 16 bits                  */
190 
191 #define EXT_VID_FIFO_CTL        0xd9
192 
193 #define EXT_VID_FMT             0xdb
194 #define EXT_VID_FMT_YUV422              0x00    /* formats - does this cause conversion? */
195 #define EXT_VID_FMT_RGB555              0x01
196 #define EXT_VID_FMT_RGB565              0x02
197 #define EXT_VID_FMT_RGB888_24           0x03
198 #define EXT_VID_FMT_RGB888_32           0x04
199 #define EXT_VID_FMT_DUP_PIX_ZOON        0x08    /* duplicate pixel zoom                 */
200 #define EXT_VID_FMT_MOD_3RD_PIX         0x20    /* modify 3rd duplicated pixel          */
201 #define EXT_VID_FMT_DBL_H_PIX           0x40    /* double horiz pixels                  */
202 #define EXT_VID_FMT_UV128               0x80    /* UV data offset by 128                */
203 
204 #define EXT_VID_DISP_CTL1       0xdc
205 #define EXT_VID_DISP_CTL1_INTRAM        0x01    /* video pixels go to internal RAM      */
206 #define EXT_VID_DISP_CTL1_IGNORE_CCOMP  0x02    /* ignore colour compare registers      */
207 #define EXT_VID_DISP_CTL1_NOCLIP        0x04    /* do not clip to 16235,16240           */
208 #define EXT_VID_DISP_CTL1_UV_AVG        0x08    /* U/V data is averaged                 */
209 #define EXT_VID_DISP_CTL1_Y128          0x10    /* Y data offset by 128                 */
210 #define EXT_VID_DISP_CTL1_VINTERPOL_OFF 0x20    /* vertical interpolation off           */
211 #define EXT_VID_DISP_CTL1_FULL_WIN      0x40    /* video out window full                */
212 #define EXT_VID_DISP_CTL1_ENABLE_WINDOW 0x80    /* enable video window                  */
213 
214 #define EXT_VID_FIFO_CTL1       0xdd
215 
216 #define VFAC_CTL1               0xe8
217 #define VFAC_CTL1_CAPTURE               0x01    /* capture enable                       */
218 #define VFAC_CTL1_VFAC_ENABLE           0x02    /* vfac enable                          */
219 #define VFAC_CTL1_FREEZE_CAPTURE        0x04    /* freeze capture                       */
220 #define VFAC_CTL1_FREEZE_CAPTURE_SYNC   0x08    /* sync freeze capture                  */
221 #define VFAC_CTL1_VALIDFRAME_SRC        0x10    /* select valid frame source            */
222 #define VFAC_CTL1_PHILIPS               0x40    /* select Philips mode                  */
223 #define VFAC_CTL1_MODVINTERPOLCLK       0x80    /* modify vertical interpolation clocl  */
224 
225 #define VFAC_CTL2               0xe9
226 #define VFAC_CTL2_INVERT_VIDDATAVALID   0x01    /* invert video data valid              */
227 #define VFAC_CTL2_INVERT_GRAPHREADY     0x02    /* invert graphic ready output sig      */
228 #define VFAC_CTL2_INVERT_DATACLK        0x04    /* invert data clock signal             */
229 #define VFAC_CTL2_INVERT_HSYNC          0x08    /* invert hsync input                   */
230 #define VFAC_CTL2_INVERT_VSYNC          0x10    /* invert vsync input                   */
231 #define VFAC_CTL2_INVERT_FRAME          0x20    /* invert frame odd/even input          */
232 #define VFAC_CTL2_INVERT_BLANK          0x40    /* invert blank output                  */
233 #define VFAC_CTL2_INVERT_OVSYNC         0x80    /* invert other vsync input             */
234 
235 #define VFAC_CTL3               0xea
236 #define VFAC_CTL3_CAP_IRQ               0x40    /* enable capture interrupt             */
237 
238 #define CAP_MEM_START           0xeb            /* 18 bits                              */
239 #define CAP_MAP_WIDTH           0xed            /* high 6 bits                          */
240 #define CAP_PITCH               0xee            /* 8 bits                               */
241 
242 #define CAP_CTL_MISC            0xef
243 #define CAP_CTL_MISC_HDIV               0x01
244 #define CAP_CTL_MISC_HDIV4              0x02
245 #define CAP_CTL_MISC_ODDEVEN            0x04
246 #define CAP_CTL_MISC_HSYNCDIV2          0x08
247 #define CAP_CTL_MISC_SYNCTZHIGH         0x10
248 #define CAP_CTL_MISC_SYNCTZOR           0x20
249 #define CAP_CTL_MISC_DISPUSED           0x80
250 
251 #define REG_BANK                0xfa
252 #define REG_BANK_X                      0x00
253 #define REG_BANK_Y                      0x01
254 #define REG_BANK_W                      0x02
255 #define REG_BANK_T                      0x03
256 #define REG_BANK_J                      0x04
257 #define REG_BANK_K                      0x05
258 
259 /*
260  * Bus-master
261  */
262 #define BM_VID_ADDR_LOW         0xbc040
263 #define BM_VID_ADDR_HIGH        0xbc044
264 #define BM_ADDRESS_LOW          0xbc080
265 #define BM_ADDRESS_HIGH         0xbc084
266 #define BM_LENGTH               0xbc088
267 #define BM_CONTROL              0xbc08c
268 #define BM_CONTROL_ENABLE               0x01    /* enable transfer                      */
269 #define BM_CONTROL_IRQEN                0x02    /* enable IRQ at end of transfer        */
270 #define BM_CONTROL_INIT                 0x04    /* initialise status & count            */
271 #define BM_COUNT                0xbc090         /* read-only                            */
272 
273 /*
274  * Graphics Co-processor
275  */
276 #define CO_CMD_L_PATTERN_FGCOL  0x8000
277 #define CO_CMD_L_INC_LEFT       0x0004
278 #define CO_CMD_L_INC_UP         0x0002
279 
280 #define CO_CMD_H_SRC_PIXMAP     0x2000
281 #define CO_CMD_H_BLITTER        0x0800
282 
283 #define CO_REG_CONTROL          0xbf011
284 #define CO_REG_SRC_WIDTH        0xbf018
285 #define CO_REG_PIX_FORMAT       0xbf01c
286 #define CO_REG_FORE_MIX         0xbf048
287 #define CO_REG_FOREGROUND       0xbf058
288 #define CO_REG_WIDTH            0xbf060
289 #define CO_REG_HEIGHT           0xbf062
290 #define CO_REG_X_PHASE          0xbf078
291 #define CO_REG_CMD_L            0xbf07c
292 #define CO_REG_CMD_H            0xbf07e
293 #define CO_REG_SRC_PTR          0xbf170
294 #define CO_REG_DEST_PTR         0xbf178
295 #define CO_REG_DEST_WIDTH       0xbf218
296 
297 /*
298  * Private structure
299  */
300 struct cfb_info;
301 
302 struct cyberpro_info {
303         struct pci_dev  *dev;
304         unsigned char   *regs;
305         char            *fb;
306         char            dev_name[32];
307         unsigned int    fb_size;
308 
309         /*
310          * The following is a pointer to be passed into the
311          * functions below.  The modules outside the main
312          * cyber2000fb.c driver have no knowledge as to what
313          * is within this structure.
314          */
315         struct cfb_info *info;
316 
317         /*
318          * Use these to enable the BM or TV registers.  In an SMP
319          * environment, these two function pointers should only be
320          * called from the module_init() or module_exit()
321          * functions.
322          */
323         void (*enable_extregs)(struct cfb_info *);
324         void (*disable_extregs)(struct cfb_info *);
325 };
326 
327 /*
328  * Note! Writing to the Cyber20x0 registers from an interrupt
329  * routine is definitely a bad idea atm.
330  */
331 int cyber2000fb_attach(struct cyberpro_info *info, int idx);
332 void cyber2000fb_detach(int idx);
333 
334 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.