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