11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _INTELFB_H
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _INTELFB_H
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* $DHD: intelfb/intelfb.h,v 1.40 2003/06/27 15:06:25 dawes Exp $ */
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/agp_backend.h>
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/fb.h>
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
9183b1214402a205bf6eea2030686249c7d365fd1Dennis Munsie#ifdef CONFIG_FB_INTEL_I2C
10183b1214402a205bf6eea2030686249c7d365fd1Dennis Munsie#include <linux/i2c.h>
11183b1214402a205bf6eea2030686249c7d365fd1Dennis Munsie#include <linux/i2c-algo-bit.h>
12183b1214402a205bf6eea2030686249c7d365fd1Dennis Munsie#endif
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*** Version/name ***/
153f7a26b4b9768fe31597d1af35106aa512dc3742Phil Endecott#define INTELFB_VERSION			"0.9.6"
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INTELFB_MODULE_NAME		"intelfb"
173f7a26b4b9768fe31597d1af35106aa512dc3742Phil Endecott#define SUPPORTED_CHIPSETS		"830M/845G/852GM/855GM/865G/915G/915GM/945G/945GM/945GME/965G/965GM"
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*** Debug/feature defines ***/
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef DEBUG
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DEBUG				0
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef VERBOSE
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define VERBOSE				0
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef REGDUMP
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REGDUMP				0
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef DETECT_VGA_CLASS_ONLY
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DETECT_VGA_CLASS_ONLY		1
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef ALLOCATE_FOR_PANNING
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ALLOCATE_FOR_PANNING		1
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef PREFERRED_MODE
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PREFERRED_MODE			"1024x768-32@70"
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*** hw-related values ***/
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
484b3760ce3d448d4af3036cd6c650d651a16ee02dAntonino A. Daplas/* Resource Allocation */
494b3760ce3d448d4af3036cd6c650d651a16ee02dAntonino A. Daplas#define INTELFB_FB_ACQUIRED                 1
504b3760ce3d448d4af3036cd6c650d651a16ee02dAntonino A. Daplas#define INTELFB_MMIO_ACQUIRED               2
514b3760ce3d448d4af3036cd6c650d651a16ee02dAntonino A. Daplas
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* PCI ids for supported devices */
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCI_DEVICE_ID_INTEL_830M	0x3577
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCI_DEVICE_ID_INTEL_845G	0x2562
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCI_DEVICE_ID_INTEL_85XGM	0x3582
56347486bb108fa6e0fd2753c1be3519d6be2516edStefan Husemann#define PCI_DEVICE_ID_INTEL_854		0x358E
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCI_DEVICE_ID_INTEL_865G	0x2572
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCI_DEVICE_ID_INTEL_915G	0x2582
593a59026ba111d85b1a86af0f1c4e5a8ef1242d82Scott MacKenzie#define PCI_DEVICE_ID_INTEL_915GM	0x2592
609639d5ec07a490134f05ac890506a367aaf8663bDave Airlie#define PCI_DEVICE_ID_INTEL_945G	0x2772
619a90603f65dd5046ddcd586158abcad7784892b6Dave Airlie#define PCI_DEVICE_ID_INTEL_945GM	0x27A2
623f7a26b4b9768fe31597d1af35106aa512dc3742Phil Endecott#define PCI_DEVICE_ID_INTEL_945GME	0x27AE
630e170c72c0c55bd78213a0f5053bd9a1dde403b7Maik Broemme#define PCI_DEVICE_ID_INTEL_965G	0x29A2
640e170c72c0c55bd78213a0f5053bd9a1dde403b7Maik Broemme#define PCI_DEVICE_ID_INTEL_965GM	0x2A02
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Size of MMIO region */
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INTEL_REG_SIZE			0x80000
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define STRIDE_ALIGNMENT		16
70df7df8ab7b38ca80bbaf5ffafd401d6c739fd45fDennis Munsie#define STRIDE_ALIGNMENT_I9XX		64
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PALETTE_8_ENTRIES		256
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*** Macros ***/
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* basic arithmetic */
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define KB(x)			((x) * 1024)
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MB(x)			((x) * 1024 * 1024)
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BtoKB(x)		((x) / 1024)
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BtoMB(x)		((x) / 1024 / 1024)
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define GTT_PAGE_SIZE           KB(4)
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ROUND_UP_TO(x, y)	(((x) + (y) - 1) / (y) * (y))
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ROUND_DOWN_TO(x, y)	((x) / (y) * (y))
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ROUND_UP_TO_PAGE(x)	ROUND_UP_TO((x), GTT_PAGE_SIZE)
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ROUND_DOWN_TO_PAGE(x)	ROUND_DOWN_TO((x), GTT_PAGE_SIZE)
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* messages */
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PFX			INTELFB_MODULE_NAME ": "
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ERR_MSG(fmt, args...)	printk(KERN_ERR PFX fmt, ## args)
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WRN_MSG(fmt, args...)	printk(KERN_WARNING PFX fmt, ## args)
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NOT_MSG(fmt, args...)	printk(KERN_NOTICE PFX fmt, ## args)
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define INF_MSG(fmt, args...)	printk(KERN_INFO PFX fmt, ## args)
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if DEBUG
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DBG_MSG(fmt, args...)	printk(KERN_DEBUG PFX fmt, ## args)
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DBG_MSG(fmt, args...)	while (0) printk(fmt, ## args)
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* get commonly used pointers */
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define GET_DINFO(info)		(info)->par
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* misc macros */
1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ACCEL(d, i)                                                     \
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	((d)->accel && !(d)->ring_lockup &&                             \
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 ((i)->var.accel_flags & FB_ACCELF_TEXT))
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*#define NOACCEL_CHIPSET(d)						\
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	((d)->chipset != INTEL_865G)*/
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NOACCEL_CHIPSET(d)						\
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	(0)
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FIXED_MODE(d) ((d)->fixed_mode)
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
11844363f14d9e7c9786ddbe7742d0f002b4ad685e1Joe Perches/*** Driver parameters ***/
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RINGBUFFER_SIZE		KB(64)
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HW_CURSOR_SIZE		KB(4)
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Intel agpgart driver */
1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define AGP_PHYSICAL_MEMORY     2
1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
126dd696ec852dc34c40e2a18cc426c8f462c0715a5Dennis Munsie/* store information about an Ixxx DVO */
127dd696ec852dc34c40e2a18cc426c8f462c0715a5Dennis Munsie/* The i830->i865 use multiple DVOs with multiple i2cs */
128dd696ec852dc34c40e2a18cc426c8f462c0715a5Dennis Munsie/* the i915, i945 have a single sDVO i2c bus - which is different */
129dd696ec852dc34c40e2a18cc426c8f462c0715a5Dennis Munsie#define MAX_OUTPUTS 6
130dd696ec852dc34c40e2a18cc426c8f462c0715a5Dennis Munsie
131399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie/* these are outputs from the chip - integrated only
132399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie   external chips are via DVO or SDVO output */
133399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie#define INTELFB_OUTPUT_UNUSED 0
134399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie#define INTELFB_OUTPUT_ANALOG 1
135399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie#define INTELFB_OUTPUT_DVO 2
136399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie#define INTELFB_OUTPUT_SDVO 3
137399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie#define INTELFB_OUTPUT_LVDS 4
138399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie#define INTELFB_OUTPUT_TVOUT 5
139399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie
140399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie#define INTELFB_DVO_CHIP_NONE 0
141399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie#define INTELFB_DVO_CHIP_LVDS 1
142399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie#define INTELFB_DVO_CHIP_TMDS 2
143399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie#define INTELFB_DVO_CHIP_TVOUT 4
144399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie
145399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie#define INTELFB_OUTPUT_PIPE_NC  0
146399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie#define INTELFB_OUTPUT_PIPE_A   1
147399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie#define INTELFB_OUTPUT_PIPE_B   2
148399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie
1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*** Data Types ***/
1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* supported chipsets */
1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsenum intel_chips {
1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	INTEL_830M,
1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	INTEL_845G,
1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	INTEL_85XGM,
1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	INTEL_852GM,
1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	INTEL_852GME,
158347486bb108fa6e0fd2753c1be3519d6be2516edStefan Husemann	INTEL_854,
1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	INTEL_855GM,
1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	INTEL_855GME,
1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	INTEL_865G,
1623a59026ba111d85b1a86af0f1c4e5a8ef1242d82Scott MacKenzie	INTEL_915G,
1639639d5ec07a490134f05ac890506a367aaf8663bDave Airlie	INTEL_915GM,
1649a90603f65dd5046ddcd586158abcad7784892b6Dave Airlie	INTEL_945G,
1659a90603f65dd5046ddcd586158abcad7784892b6Dave Airlie	INTEL_945GM,
1663f7a26b4b9768fe31597d1af35106aa512dc3742Phil Endecott	INTEL_945GME,
1670e170c72c0c55bd78213a0f5053bd9a1dde403b7Maik Broemme	INTEL_965G,
1680e170c72c0c55bd78213a0f5053bd9a1dde403b7Maik Broemme	INTEL_965GM,
1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct intelfb_hwstate {
1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 vga0_divisor;
1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 vga1_divisor;
1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 vga_pd;
1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 dpll_a;
1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 dpll_b;
1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 fpa0;
1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 fpa1;
1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 fpb0;
1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 fpb1;
1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 palette_a[PALETTE_8_ENTRIES];
1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 palette_b[PALETTE_8_ENTRIES];
1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 htotal_a;
1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 hblank_a;
1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 hsync_a;
1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 vtotal_a;
1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 vblank_a;
1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 vsync_a;
1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 src_size_a;
1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 bclrpat_a;
1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 htotal_b;
1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 hblank_b;
1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 hsync_b;
1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 vtotal_b;
1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 vblank_b;
1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 vsync_b;
1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 src_size_b;
1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 bclrpat_b;
1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 adpa;
2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 dvoa;
2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 dvob;
2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 dvoc;
2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 dvoa_srcdim;
2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 dvob_srcdim;
2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 dvoc_srcdim;
2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 lvds;
2071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 pipe_a_conf;
2081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 pipe_b_conf;
2091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 disp_arb;
2101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 cursor_a_control;
2111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 cursor_b_control;
2121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 cursor_a_base;
2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 cursor_b_base;
2141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 cursor_size;
2151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 disp_a_ctrl;
2161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 disp_b_ctrl;
2171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 disp_a_base;
2181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 disp_b_base;
2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 cursor_a_palette[4];
2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 cursor_b_palette[4];
2211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 disp_a_stride;
2221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 disp_b_stride;
2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 vgacntrl;
2241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 add_id;
2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 swf0x[7];
2261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 swf1x[7];
2271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 swf3x[3];
2281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 fence[8];
2291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 instpm;
2301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 mem_mode;
2311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 fw_blc_0;
2321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 fw_blc_1;
2339a5f019b1a9ea6a75ba36d7c312ff069006ed479Eric Hustvedt	u16 hwstam;
2349a5f019b1a9ea6a75ba36d7c312ff069006ed479Eric Hustvedt	u16 ier;
2359a5f019b1a9ea6a75ba36d7c312ff069006ed479Eric Hustvedt	u16 iir;
2369a5f019b1a9ea6a75ba36d7c312ff069006ed479Eric Hustvedt	u16 imr;
2371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct intelfb_heap_data {
2401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 physical;
2411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u8 __iomem *virtual;
242689c9568f54747c13f287ae53956281e7cd810faKrzysztof Halasa	u32 offset;		/* in GATT pages */
243689c9568f54747c13f287ae53956281e7cd810faKrzysztof Halasa	u32 size;		/* in bytes */
2441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
246183b1214402a205bf6eea2030686249c7d365fd1Dennis Munsie#ifdef CONFIG_FB_INTEL_I2C
247183b1214402a205bf6eea2030686249c7d365fd1Dennis Munsiestruct intelfb_i2c_chan {
248183b1214402a205bf6eea2030686249c7d365fd1Dennis Munsie    struct intelfb_info *dinfo;
249183b1214402a205bf6eea2030686249c7d365fd1Dennis Munsie    u32 reg;
250183b1214402a205bf6eea2030686249c7d365fd1Dennis Munsie    struct i2c_adapter adapter;
251183b1214402a205bf6eea2030686249c7d365fd1Dennis Munsie    struct i2c_algo_bit_data algo;
252183b1214402a205bf6eea2030686249c7d365fd1Dennis Munsie};
253183b1214402a205bf6eea2030686249c7d365fd1Dennis Munsie#endif
254183b1214402a205bf6eea2030686249c7d365fd1Dennis Munsie
255399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsiestruct intelfb_output_rec {
256399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie    int type;
257399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie    int pipe;
258399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie    int flags;
259399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie
260399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie#ifdef CONFIG_FB_INTEL_I2C
261399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie    struct intelfb_i2c_chan i2c_bus;
262399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie    struct intelfb_i2c_chan ddc_bus;
263399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie#endif
264399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie};
265399fb4316ab4fe4c46d1e4ed8b12d56c94b4c251Dennis Munsie
2667649757bd900bc900adcd95ab08903cdc28342faEric Hustvedtstruct intelfb_vsync {
2677649757bd900bc900adcd95ab08903cdc28342faEric Hustvedt	wait_queue_head_t wait;
2687649757bd900bc900adcd95ab08903cdc28342faEric Hustvedt	unsigned int count;
269f80d0d23f2010b7682e06449345e8199a2b2619cEric Hustvedt	int pan_display;
270f80d0d23f2010b7682e06449345e8199a2b2619cEric Hustvedt	u32 pan_offset;
2717649757bd900bc900adcd95ab08903cdc28342faEric Hustvedt};
2727649757bd900bc900adcd95ab08903cdc28342faEric Hustvedt
2731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct intelfb_info {
2741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct fb_info *info;
2751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct fb_ops  *fbops;
2761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct pci_dev *pdev;
2771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct intelfb_hwstate save_state;
2791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* agpgart structs */
281689c9568f54747c13f287ae53956281e7cd810faKrzysztof Halasa	struct agp_memory *gtt_fb_mem;     /* use all stolen memory or vram */
282689c9568f54747c13f287ae53956281e7cd810faKrzysztof Halasa	struct agp_memory *gtt_ring_mem;   /* ring buffer */
283689c9568f54747c13f287ae53956281e7cd810faKrzysztof Halasa	struct agp_memory *gtt_cursor_mem; /* hw cursor */
2841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* use a gart reserved fb mem */
2861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u8 fbmem_gart;
2871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* mtrr support */
289d5afabcea215a828eb00df992b429486aae14c2fDave Airlie	int mtrr_reg;
2901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 has_mtrr;
2911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* heap data */
2931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct intelfb_heap_data aperture;
2941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct intelfb_heap_data fb;
2951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct intelfb_heap_data ring;
2961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct intelfb_heap_data cursor;
2971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* mmio regs */
2991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 mmio_base_phys;
3001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u8 __iomem *mmio_base;
3011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* fb start offset (in bytes) */
3031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 fb_start;
3041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* ring buffer */
3060fe6e2d2928e089d16ec5ed7ba634c1d60916020Al Viro	u32 ring_head;
3071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 ring_tail;
3081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 ring_tail_mask;
3091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 ring_space;
3101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 ring_lockup;
3111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* palette */
313c312f97df65bf38a8e7f664b76154639f593775dAntonino A. Daplas	u32 pseudo_palette[16];
3141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* chip info */
3161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int pci_chipset;
3171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int chipset;
3181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	const char *name;
3191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int mobile;
3201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* current mode */
3221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int bpp, depth;
3231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 visual;
3241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int xres, yres, pitch;
3251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int pixclock;
3261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* current pipe */
3281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int pipe;
3291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* some flags */
3311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int accel;
3321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int hwcursor;
3331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int fixed_mode;
3341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int ring_active;
3354b3760ce3d448d4af3036cd6c650d651a16ee02dAntonino A. Daplas	int flag;
3367649757bd900bc900adcd95ab08903cdc28342faEric Hustvedt	unsigned long irq_flags;
3377649757bd900bc900adcd95ab08903cdc28342faEric Hustvedt	int open;
3387649757bd900bc900adcd95ab08903cdc28342faEric Hustvedt
3397649757bd900bc900adcd95ab08903cdc28342faEric Hustvedt	/* vsync */
3407649757bd900bc900adcd95ab08903cdc28342faEric Hustvedt	struct intelfb_vsync vsync;
3417649757bd900bc900adcd95ab08903cdc28342faEric Hustvedt	spinlock_t int_lock;
3421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* hw cursor */
3441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int cursor_on;
3451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int cursor_blanked;
3461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u8  cursor_src[64];
3471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* initial parameters */
3491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int initial_vga;
3501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct fb_var_screeninfo initial_var;
3511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 initial_fb_base;
3521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 initial_video_ram;
3531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 initial_pitch;
3541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* driver registered */
3561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int registered;
357689c9568f54747c13f287ae53956281e7cd810faKrzysztof Halasa
358d024960cff5173bef6e83c01cf9cd2763c2c0ab0Dave Airlie	/* index into plls */
359d024960cff5173bef6e83c01cf9cd2763c2c0ab0Dave Airlie	int pll_index;
360dd696ec852dc34c40e2a18cc426c8f462c0715a5Dennis Munsie
361dd696ec852dc34c40e2a18cc426c8f462c0715a5Dennis Munsie	/* outputs */
362dd696ec852dc34c40e2a18cc426c8f462c0715a5Dennis Munsie	int num_outputs;
363dd696ec852dc34c40e2a18cc426c8f462c0715a5Dennis Munsie	struct intelfb_output_rec output[MAX_OUTPUTS];
3641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
366ee5618f4937dcbff15e504663d81a7adb3d849bfKrzysztof Halasa#define IS_I9XX(dinfo) (((dinfo)->chipset == INTEL_915G) ||	\
367ee5618f4937dcbff15e504663d81a7adb3d849bfKrzysztof Halasa			((dinfo)->chipset == INTEL_915GM) ||	\
368ee5618f4937dcbff15e504663d81a7adb3d849bfKrzysztof Halasa			((dinfo)->chipset == INTEL_945G) ||	\
3690e170c72c0c55bd78213a0f5053bd9a1dde403b7Maik Broemme			((dinfo)->chipset == INTEL_945GM) ||	\
3703f7a26b4b9768fe31597d1af35106aa512dc3742Phil Endecott			((dinfo)->chipset == INTEL_945GME) ||	\
3710e170c72c0c55bd78213a0f5053bd9a1dde403b7Maik Broemme			((dinfo)->chipset == INTEL_965G) ||	\
3720e170c72c0c55bd78213a0f5053bd9a1dde403b7Maik Broemme			((dinfo)->chipset == INTEL_965GM))
3738bb91f6a2d1db8031bfbb367df075f041d0cdfe2Dave Airlie
3741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*** function prototypes ***/
3751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int intelfb_var_to_depth(const struct fb_var_screeninfo *var);
3771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
37841c9480a1d22e8f28b8675a2d7ec7fd4c50bc900Dennis Munsie#ifdef CONFIG_FB_INTEL_I2C
37941c9480a1d22e8f28b8675a2d7ec7fd4c50bc900Dennis Munsieextern void intelfb_create_i2c_busses(struct intelfb_info *dinfo);
3807627899b11ece118b46fbf652e944f9a239f6cd1Dennis Munsieextern void intelfb_delete_i2c_busses(struct intelfb_info *dinfo);
38141c9480a1d22e8f28b8675a2d7ec7fd4c50bc900Dennis Munsie#endif
38241c9480a1d22e8f28b8675a2d7ec7fd4c50bc900Dennis Munsie
3831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* _INTELFB_H */
384