xref: /openbmc/linux/drivers/video/fbdev/i810/i810.h (revision e5451c8f8330e03ad3cfa16048b4daf961af434f)
1f7018c21STomi Valkeinen /*-*- linux-c -*-
2f7018c21STomi Valkeinen  *  linux/drivers/video/i810.h -- Intel 810 General Definitions/Declarations
3f7018c21STomi Valkeinen  *
4f7018c21STomi Valkeinen  *      Copyright (C) 2001 Antonino Daplas<adaplas@pol.net>
5f7018c21STomi Valkeinen  *      All Rights Reserved
6f7018c21STomi Valkeinen  *
7f7018c21STomi Valkeinen  *
8f7018c21STomi Valkeinen  *  This file is subject to the terms and conditions of the GNU General Public
9f7018c21STomi Valkeinen  *  License. See the file COPYING in the main directory of this archive for
10f7018c21STomi Valkeinen  *  more details.
11f7018c21STomi Valkeinen  */
12f7018c21STomi Valkeinen 
13f7018c21STomi Valkeinen #ifndef __I810_H__
14f7018c21STomi Valkeinen #define __I810_H__
15f7018c21STomi Valkeinen 
16f7018c21STomi Valkeinen #include <linux/list.h>
17f7018c21STomi Valkeinen #include <linux/agp_backend.h>
18f7018c21STomi Valkeinen #include <linux/fb.h>
19f7018c21STomi Valkeinen #include <linux/i2c.h>
20f7018c21STomi Valkeinen #include <linux/i2c-algo-bit.h>
21f7018c21STomi Valkeinen #include <video/vga.h>
22f7018c21STomi Valkeinen 
23f7018c21STomi Valkeinen /* Fence */
24f7018c21STomi Valkeinen #define TILEWALK_X            (0 << 12)
25f7018c21STomi Valkeinen #define TILEWALK_Y            (1 << 12)
26f7018c21STomi Valkeinen 
27f7018c21STomi Valkeinen /* Raster ops */
28f7018c21STomi Valkeinen #define COLOR_COPY_ROP        0xF0
29f7018c21STomi Valkeinen #define PAT_COPY_ROP          0xCC
30f7018c21STomi Valkeinen #define CLEAR_ROP             0x00
31f7018c21STomi Valkeinen #define WHITE_ROP             0xFF
32f7018c21STomi Valkeinen #define INVERT_ROP            0x55
33f7018c21STomi Valkeinen #define XOR_ROP               0x5A
34f7018c21STomi Valkeinen 
35f7018c21STomi Valkeinen /* 2D Engine definitions */
36f7018c21STomi Valkeinen #define SOLIDPATTERN          0x80000000
37f7018c21STomi Valkeinen #define NONSOLID              0x00000000
38f7018c21STomi Valkeinen #define BPP8                  (0 << 24)
39f7018c21STomi Valkeinen #define BPP16                 (1 << 24)
40f7018c21STomi Valkeinen #define BPP24                 (2 << 24)
41f7018c21STomi Valkeinen 
42f7018c21STomi Valkeinen #define PIXCONF8              (2 << 16)
43f7018c21STomi Valkeinen #define PIXCONF15             (4 << 16)
44f7018c21STomi Valkeinen #define PIXCONF16             (5 << 16)
45f7018c21STomi Valkeinen #define PIXCONF24             (6 << 16)
46f7018c21STomi Valkeinen #define PIXCONF32             (7 << 16)
47f7018c21STomi Valkeinen 
48f7018c21STomi Valkeinen #define DYN_COLOR_EN          (1 << 26)
49f7018c21STomi Valkeinen #define DYN_COLOR_DIS         (0 << 26)
50f7018c21STomi Valkeinen #define INCREMENT             0x00000000
51f7018c21STomi Valkeinen #define DECREMENT             (0x01 << 30)
52f7018c21STomi Valkeinen #define ARB_ON                0x00000001
53f7018c21STomi Valkeinen #define ARB_OFF               0x00000000
54f7018c21STomi Valkeinen #define SYNC_FLIP             0x00000000
55f7018c21STomi Valkeinen #define ASYNC_FLIP            0x00000040
56f7018c21STomi Valkeinen #define OPTYPE_MASK           0xE0000000
57f7018c21STomi Valkeinen #define PARSER_MASK           0x001F8000
58f7018c21STomi Valkeinen #define D2_MASK               0x001FC000         /* 2D mask */
59f7018c21STomi Valkeinen 
60f7018c21STomi Valkeinen /* Instruction type */
61f7018c21STomi Valkeinen /* There are more but pertains to 3D */
62f7018c21STomi Valkeinen #define PARSER                0x00000000
63f7018c21STomi Valkeinen #define BLIT                  (0x02 << 29)
64f7018c21STomi Valkeinen #define RENDER                (0x03 << 29)
65f7018c21STomi Valkeinen 
66f7018c21STomi Valkeinen /* Parser */
67f7018c21STomi Valkeinen #define NOP                   0x00               /* No operation, padding */
68f7018c21STomi Valkeinen #define BP_INT                (0x01 << 23)         /* Breakpoint interrupt */
69f7018c21STomi Valkeinen #define USR_INT               (0x02 << 23)         /* User interrupt */
70f7018c21STomi Valkeinen #define WAIT_FOR_EVNT         (0x03 << 23)         /* Wait for event */
71f7018c21STomi Valkeinen #define FLUSH                 (0x04 << 23)
72f7018c21STomi Valkeinen #define CONTEXT_SEL           (0x05 << 23)
73f7018c21STomi Valkeinen #define REPORT_HEAD           (0x07 << 23)
74f7018c21STomi Valkeinen #define ARB_ON_OFF            (0x08 << 23)
75f7018c21STomi Valkeinen #define OVERLAY_FLIP          (0x11 << 23)
76f7018c21STomi Valkeinen #define LOAD_SCAN_INC         (0x12 << 23)
77f7018c21STomi Valkeinen #define LOAD_SCAN_EX          (0x13 << 23)
78f7018c21STomi Valkeinen #define FRONT_BUFFER          (0x14 << 23)
79f7018c21STomi Valkeinen #define DEST_BUFFER           (0x15 << 23)
80f7018c21STomi Valkeinen #define Z_BUFFER              (0x16 << 23)
81f7018c21STomi Valkeinen 
82f7018c21STomi Valkeinen #define STORE_DWORD_IMM       (0x20 << 23)
83f7018c21STomi Valkeinen #define STORE_DWORD_IDX       (0x21 << 23)
84f7018c21STomi Valkeinen #define BATCH_BUFFER          (0x30 << 23)
85f7018c21STomi Valkeinen 
86f7018c21STomi Valkeinen /* Blit */
87f7018c21STomi Valkeinen #define SETUP_BLIT                      0x00
88f7018c21STomi Valkeinen #define SETUP_MONO_PATTERN_SL_BLT       (0x10 << 22)
89f7018c21STomi Valkeinen #define PIXEL_BLT                       (0x20 << 22)
90f7018c21STomi Valkeinen #define SCANLINE_BLT                    (0x21 << 22)
91f7018c21STomi Valkeinen #define TEXT_BLT                        (0x22 << 22)
92f7018c21STomi Valkeinen #define TEXT_IMM_BLT                    (0x30 << 22)
93f7018c21STomi Valkeinen #define COLOR_BLT                       (0x40 << 22)
94f7018c21STomi Valkeinen #define MONO_PAT_BLIT                   (0x42 << 22)
95f7018c21STomi Valkeinen #define SOURCE_COPY_BLIT                (0x43 << 22)
96f7018c21STomi Valkeinen #define MONO_SOURCE_COPY_BLIT           (0x44 << 22)
97f7018c21STomi Valkeinen #define SOURCE_COPY_IMMEDIATE           (0x60 << 22)
98f7018c21STomi Valkeinen #define MONO_SOURCE_COPY_IMMEDIATE      (0x61 << 22)
99f7018c21STomi Valkeinen 
100f7018c21STomi Valkeinen #define VERSION_MAJOR            0
101f7018c21STomi Valkeinen #define VERSION_MINOR            9
102f7018c21STomi Valkeinen #define VERSION_TEENIE           0
103f7018c21STomi Valkeinen #define BRANCH_VERSION           ""
104f7018c21STomi Valkeinen 
105f7018c21STomi Valkeinen 
106f7018c21STomi Valkeinen /* mvo: intel i815 */
107f7018c21STomi Valkeinen #ifndef PCI_DEVICE_ID_INTEL_82815_100
108f7018c21STomi Valkeinen   #define PCI_DEVICE_ID_INTEL_82815_100           0x1102
109f7018c21STomi Valkeinen #endif
110f7018c21STomi Valkeinen #ifndef PCI_DEVICE_ID_INTEL_82815_NOAGP
111f7018c21STomi Valkeinen   #define PCI_DEVICE_ID_INTEL_82815_NOAGP         0x1112
112f7018c21STomi Valkeinen #endif
113f7018c21STomi Valkeinen #ifndef PCI_DEVICE_ID_INTEL_82815_FULL_CTRL
114f7018c21STomi Valkeinen   #define PCI_DEVICE_ID_INTEL_82815_FULL_CTRL     0x1130
115f7018c21STomi Valkeinen #endif
116f7018c21STomi Valkeinen 
117f7018c21STomi Valkeinen /* General Defines */
118f7018c21STomi Valkeinen #define I810_PAGESIZE               4096
119f7018c21STomi Valkeinen #define MAX_DMA_SIZE                (1024 * 4096)
120f7018c21STomi Valkeinen #define SAREA_SIZE                  4096
121f7018c21STomi Valkeinen #define PCI_I810_MISCC              0x72
122f7018c21STomi Valkeinen #define MMIO_SIZE                   (512*1024)
123f7018c21STomi Valkeinen #define GTT_SIZE                    (16*1024)
124f7018c21STomi Valkeinen #define RINGBUFFER_SIZE             (64*1024)
125f7018c21STomi Valkeinen #define CURSOR_SIZE                 4096
126f7018c21STomi Valkeinen #define OFF                         0
127f7018c21STomi Valkeinen #define ON                          1
128f7018c21STomi Valkeinen #define MAX_KEY                     256
129f7018c21STomi Valkeinen #define WAIT_COUNT                  10000000
130f7018c21STomi Valkeinen #define IRING_PAD                   8
131f7018c21STomi Valkeinen #define FONTDATAMAX                 8192
132f7018c21STomi Valkeinen /* Masks (AND ops) and OR's */
133f7018c21STomi Valkeinen #define FB_START_MASK               (0x3f << (32 - 6))
134f7018c21STomi Valkeinen #define MMIO_ADDR_MASK              (0x1FFF << (32 - 13))
135f7018c21STomi Valkeinen #define FREQ_MASK                   (1 << 4)
136f7018c21STomi Valkeinen #define SCR_OFF                     0x20
137f7018c21STomi Valkeinen #define DRAM_ON                     0x08
138f7018c21STomi Valkeinen #define DRAM_OFF                    0xE7
139f7018c21STomi Valkeinen #define PG_ENABLE_MASK              0x01
140f7018c21STomi Valkeinen #define RING_SIZE_MASK              (RINGBUFFER_SIZE - 1)
141f7018c21STomi Valkeinen 
142f7018c21STomi Valkeinen /* defines for restoring registers partially */
143f7018c21STomi Valkeinen #define ADDR_MAP_MASK               (0x07 << 5)
144f7018c21STomi Valkeinen #define DISP_CTRL                   ~0
145f7018c21STomi Valkeinen #define PIXCONF_0                   (0x64 << 8)
146f7018c21STomi Valkeinen #define PIXCONF_2                   (0xF3 << 24)
147f7018c21STomi Valkeinen #define PIXCONF_1                   (0xF0 << 16)
148f7018c21STomi Valkeinen #define MN_MASK                     0x3FF03FF
149f7018c21STomi Valkeinen #define P_OR                        (0x7 << 4)
150f7018c21STomi Valkeinen #define DAC_BIT                     (1 << 16)
151f7018c21STomi Valkeinen #define INTERLACE_BIT               (1 << 7)
152f7018c21STomi Valkeinen #define IER_MASK                    (3 << 13)
153f7018c21STomi Valkeinen #define IMR_MASK                    (3 << 13)
154f7018c21STomi Valkeinen 
155f7018c21STomi Valkeinen /* Power Management */
156f7018c21STomi Valkeinen #define DPMS_MASK                   0xF0000
157f7018c21STomi Valkeinen #define POWERON                     0x00000
158f7018c21STomi Valkeinen #define STANDBY                     0x20000
159f7018c21STomi Valkeinen #define SUSPEND                     0x80000
160f7018c21STomi Valkeinen #define POWERDOWN                   0xA0000
161f7018c21STomi Valkeinen #define EMR_MASK                    ~0x3F
162f7018c21STomi Valkeinen #define FW_BLC_MASK                 ~(0x3F|(7 << 8)|(0x3F << 12)|(7 << 20))
163f7018c21STomi Valkeinen 
164f7018c21STomi Valkeinen /* Ringbuffer */
165f7018c21STomi Valkeinen #define RBUFFER_START_MASK          0xFFFFF000
166f7018c21STomi Valkeinen #define RBUFFER_SIZE_MASK           0x001FF000
167f7018c21STomi Valkeinen #define RBUFFER_HEAD_MASK           0x001FFFFC
168f7018c21STomi Valkeinen #define RBUFFER_TAIL_MASK           0x001FFFF8
169f7018c21STomi Valkeinen 
170f7018c21STomi Valkeinen /* Video Timings */
171f7018c21STomi Valkeinen #define REF_FREQ                    24000000
172f7018c21STomi Valkeinen #define TARGET_N_MAX                30
173f7018c21STomi Valkeinen 
174f7018c21STomi Valkeinen #define MAX_PIXELCLOCK              230000000
175f7018c21STomi Valkeinen #define MIN_PIXELCLOCK               15000000
176f7018c21STomi Valkeinen #define VFMAX                       60
177f7018c21STomi Valkeinen #define VFMIN                       60
178f7018c21STomi Valkeinen #define HFMAX                       30000
179f7018c21STomi Valkeinen #define HFMIN                       29000
180f7018c21STomi Valkeinen 
181f7018c21STomi Valkeinen /* Cursor */
182f7018c21STomi Valkeinen #define CURSOR_ENABLE_MASK          0x1000
183f7018c21STomi Valkeinen #define CURSOR_MODE_64_TRANS        4
184f7018c21STomi Valkeinen #define CURSOR_MODE_64_XOR	    5
185f7018c21STomi Valkeinen #define CURSOR_MODE_64_3C	    6
186f7018c21STomi Valkeinen #define COORD_INACTIVE              0
187f7018c21STomi Valkeinen #define COORD_ACTIVE                (1 << 4)
188f7018c21STomi Valkeinen #define EXTENDED_PALETTE	    1
189f7018c21STomi Valkeinen 
190f7018c21STomi Valkeinen /* AGP Memory Types*/
191f7018c21STomi Valkeinen #define AGP_NORMAL_MEMORY           0
192f7018c21STomi Valkeinen #define AGP_DCACHE_MEMORY	    1
193f7018c21STomi Valkeinen #define AGP_PHYSICAL_MEMORY         2
194f7018c21STomi Valkeinen 
195f7018c21STomi Valkeinen /* Allocated resource Flags */
196f7018c21STomi Valkeinen #define FRAMEBUFFER_REQ             1
197f7018c21STomi Valkeinen #define MMIO_REQ                    2
198f7018c21STomi Valkeinen #define PCI_DEVICE_ENABLED          4
199f7018c21STomi Valkeinen #define HAS_FONTCACHE               8
200f7018c21STomi Valkeinen 
201f7018c21STomi Valkeinen /* driver flags */
202f7018c21STomi Valkeinen #define HAS_ACCELERATION            2
203f7018c21STomi Valkeinen #define ALWAYS_SYNC                 4
204f7018c21STomi Valkeinen #define LOCKUP                      8
205f7018c21STomi Valkeinen 
206f7018c21STomi Valkeinen struct gtt_data {
207f7018c21STomi Valkeinen 	struct agp_memory *i810_fb_memory;
208f7018c21STomi Valkeinen 	struct agp_memory *i810_cursor_memory;
209f7018c21STomi Valkeinen };
210f7018c21STomi Valkeinen 
211f7018c21STomi Valkeinen struct mode_registers {
212f7018c21STomi Valkeinen 	u32 pixclock, M, N, P;
213f7018c21STomi Valkeinen 	u8 cr00, cr01, cr02, cr03;
214f7018c21STomi Valkeinen 	u8 cr04, cr05, cr06, cr07;
215f7018c21STomi Valkeinen 	u8 cr09, cr10, cr11, cr12;
216f7018c21STomi Valkeinen 	u8 cr13, cr15, cr16, cr30;
217f7018c21STomi Valkeinen 	u8 cr31, cr32, cr33, cr35, cr39;
218f7018c21STomi Valkeinen 	u32 bpp8_100, bpp16_100;
219f7018c21STomi Valkeinen 	u32 bpp24_100, bpp8_133;
220f7018c21STomi Valkeinen 	u32 bpp16_133, bpp24_133;
221f7018c21STomi Valkeinen 	u8 msr;
222f7018c21STomi Valkeinen };
223f7018c21STomi Valkeinen 
224f7018c21STomi Valkeinen struct heap_data {
225f7018c21STomi Valkeinen         unsigned long physical;
226f7018c21STomi Valkeinen 	__u8 __iomem *virtual;
227f7018c21STomi Valkeinen 	u32 offset;
228f7018c21STomi Valkeinen 	u32 size;
229f7018c21STomi Valkeinen };
230f7018c21STomi Valkeinen 
231f7018c21STomi Valkeinen struct state_registers {
232f7018c21STomi Valkeinen 	u32 dclk_1d, dclk_2d, dclk_0ds;
233f7018c21STomi Valkeinen 	u32 pixconf, fw_blc, pgtbl_ctl;
234f7018c21STomi Valkeinen 	u32 fence0, hws_pga, dplystas;
235f7018c21STomi Valkeinen 	u16 bltcntl, hwstam, ier, iir, imr;
236f7018c21STomi Valkeinen 	u8 cr00, cr01, cr02, cr03, cr04;
237f7018c21STomi Valkeinen 	u8 cr05, cr06, cr07, cr08, cr09;
238f7018c21STomi Valkeinen 	u8 cr10, cr11, cr12, cr13, cr14;
239f7018c21STomi Valkeinen 	u8 cr15, cr16, cr17, cr80, gr10;
240f7018c21STomi Valkeinen 	u8 cr30, cr31, cr32, cr33, cr35;
241f7018c21STomi Valkeinen 	u8 cr39, cr41, cr70, sr01, msr;
242f7018c21STomi Valkeinen };
243f7018c21STomi Valkeinen 
244f7018c21STomi Valkeinen struct i810fb_par;
245f7018c21STomi Valkeinen 
246f7018c21STomi Valkeinen struct i810fb_i2c_chan {
247f7018c21STomi Valkeinen 	struct i810fb_par *par;
248f7018c21STomi Valkeinen 	struct i2c_adapter adapter;
249f7018c21STomi Valkeinen 	struct i2c_algo_bit_data algo;
250f7018c21STomi Valkeinen 	unsigned long ddc_base;
251f7018c21STomi Valkeinen };
252f7018c21STomi Valkeinen 
253f7018c21STomi Valkeinen struct i810fb_par {
254f7018c21STomi Valkeinen 	struct mode_registers    regs;
255f7018c21STomi Valkeinen 	struct state_registers   hw_state;
256f7018c21STomi Valkeinen 	struct gtt_data          i810_gtt;
257f7018c21STomi Valkeinen 	struct fb_ops            i810fb_ops;
258f7018c21STomi Valkeinen 	struct pci_dev           *dev;
259f7018c21STomi Valkeinen 	struct heap_data         aperture;
260f7018c21STomi Valkeinen 	struct heap_data         fb;
261f7018c21STomi Valkeinen 	struct heap_data         iring;
262f7018c21STomi Valkeinen 	struct heap_data         cursor_heap;
263f7018c21STomi Valkeinen 	struct vgastate          state;
264f7018c21STomi Valkeinen 	struct i810fb_i2c_chan   chan[3];
265f7018c21STomi Valkeinen 	struct mutex		 open_lock;
266f7018c21STomi Valkeinen 	unsigned int		 use_count;
267f7018c21STomi Valkeinen 	u32 pseudo_palette[16];
268f7018c21STomi Valkeinen 	unsigned long mmio_start_phys;
269f7018c21STomi Valkeinen 	u8 __iomem *mmio_start_virtual;
270f7018c21STomi Valkeinen 	u8 *edid;
271f7018c21STomi Valkeinen 	u32 pitch;
272f7018c21STomi Valkeinen 	u32 pixconf;
273f7018c21STomi Valkeinen 	u32 watermark;
274f7018c21STomi Valkeinen 	u32 mem_freq;
275f7018c21STomi Valkeinen 	u32 res_flags;
276f7018c21STomi Valkeinen 	u32 dev_flags;
277f7018c21STomi Valkeinen 	u32 cur_tail;
278f7018c21STomi Valkeinen 	u32 depth;
279f7018c21STomi Valkeinen 	u32 blit_bpp;
280f7018c21STomi Valkeinen 	u32 ovract;
281f7018c21STomi Valkeinen 	u32 cur_state;
282f7018c21STomi Valkeinen 	u32 ddc_num;
283*775a8a56SLuis R. Rodriguez 	int wc_cookie;
284f7018c21STomi Valkeinen 	u16 bltcntl;
285f7018c21STomi Valkeinen 	u8 interlace;
286f7018c21STomi Valkeinen };
287f7018c21STomi Valkeinen 
288f7018c21STomi Valkeinen /*
289f7018c21STomi Valkeinen  * Register I/O
290f7018c21STomi Valkeinen  */
291f7018c21STomi Valkeinen #define i810_readb(where, mmio) readb(mmio + where)
292f7018c21STomi Valkeinen #define i810_readw(where, mmio) readw(mmio + where)
293f7018c21STomi Valkeinen #define i810_readl(where, mmio) readl(mmio + where)
294f7018c21STomi Valkeinen #define i810_writeb(where, mmio, val) writeb(val, mmio + where)
295f7018c21STomi Valkeinen #define i810_writew(where, mmio, val) writew(val, mmio + where)
296f7018c21STomi Valkeinen #define i810_writel(where, mmio, val) writel(val, mmio + where)
297f7018c21STomi Valkeinen 
298f7018c21STomi Valkeinen #endif /* __I810_H__ */
299