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