intelfb.h (8071B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef _INTELFB_H 3#define _INTELFB_H 4 5/* $DHD: intelfb/intelfb.h,v 1.40 2003/06/27 15:06:25 dawes Exp $ */ 6 7#include <linux/agp_backend.h> 8#include <linux/fb.h> 9 10#ifdef CONFIG_FB_INTEL_I2C 11#include <linux/i2c.h> 12#include <linux/i2c-algo-bit.h> 13#endif 14 15/*** Version/name ***/ 16#define INTELFB_VERSION "0.9.6" 17#define INTELFB_MODULE_NAME "intelfb" 18#define SUPPORTED_CHIPSETS "830M/845G/852GM/855GM/865G/915G/915GM/945G/945GM/945GME/965G/965GM" 19 20 21/*** Debug/feature defines ***/ 22 23#ifndef DEBUG 24#define DEBUG 0 25#endif 26 27#ifndef VERBOSE 28#define VERBOSE 0 29#endif 30 31#ifndef REGDUMP 32#define REGDUMP 0 33#endif 34 35#ifndef DETECT_VGA_CLASS_ONLY 36#define DETECT_VGA_CLASS_ONLY 1 37#endif 38 39#ifndef ALLOCATE_FOR_PANNING 40#define ALLOCATE_FOR_PANNING 1 41#endif 42 43#ifndef PREFERRED_MODE 44#define PREFERRED_MODE "1024x768-32@70" 45#endif 46 47/*** hw-related values ***/ 48 49/* Resource Allocation */ 50#define INTELFB_FB_ACQUIRED 1 51#define INTELFB_MMIO_ACQUIRED 2 52 53/* PCI ids for supported devices */ 54#define PCI_DEVICE_ID_INTEL_830M 0x3577 55#define PCI_DEVICE_ID_INTEL_845G 0x2562 56#define PCI_DEVICE_ID_INTEL_85XGM 0x3582 57#define PCI_DEVICE_ID_INTEL_854 0x358E 58#define PCI_DEVICE_ID_INTEL_865G 0x2572 59#define PCI_DEVICE_ID_INTEL_915G 0x2582 60#define PCI_DEVICE_ID_INTEL_915GM 0x2592 61#define PCI_DEVICE_ID_INTEL_945G 0x2772 62#define PCI_DEVICE_ID_INTEL_945GM 0x27A2 63#define PCI_DEVICE_ID_INTEL_945GME 0x27AE 64#define PCI_DEVICE_ID_INTEL_965G 0x29A2 65#define PCI_DEVICE_ID_INTEL_965GM 0x2A02 66 67/* Size of MMIO region */ 68#define INTEL_REG_SIZE 0x80000 69 70#define STRIDE_ALIGNMENT 16 71#define STRIDE_ALIGNMENT_I9XX 64 72 73#define PALETTE_8_ENTRIES 256 74 75 76/*** Macros ***/ 77 78/* basic arithmetic */ 79#define KB(x) ((x) * 1024) 80#define MB(x) ((x) * 1024 * 1024) 81#define BtoKB(x) ((x) / 1024) 82#define BtoMB(x) ((x) / 1024 / 1024) 83 84#define GTT_PAGE_SIZE KB(4) 85 86#define ROUND_UP_TO(x, y) (((x) + (y) - 1) / (y) * (y)) 87#define ROUND_DOWN_TO(x, y) ((x) / (y) * (y)) 88#define ROUND_UP_TO_PAGE(x) ROUND_UP_TO((x), GTT_PAGE_SIZE) 89#define ROUND_DOWN_TO_PAGE(x) ROUND_DOWN_TO((x), GTT_PAGE_SIZE) 90 91/* messages */ 92#define PFX INTELFB_MODULE_NAME ": " 93 94#define ERR_MSG(fmt, args...) printk(KERN_ERR PFX fmt, ## args) 95#define WRN_MSG(fmt, args...) printk(KERN_WARNING PFX fmt, ## args) 96#define NOT_MSG(fmt, args...) printk(KERN_NOTICE PFX fmt, ## args) 97#define INF_MSG(fmt, args...) printk(KERN_INFO PFX fmt, ## args) 98#if DEBUG 99#define DBG_MSG(fmt, args...) printk(KERN_DEBUG PFX fmt, ## args) 100#else 101#define DBG_MSG(fmt, args...) while (0) printk(fmt, ## args) 102#endif 103 104/* get commonly used pointers */ 105#define GET_DINFO(info) (info)->par 106 107/* misc macros */ 108#define ACCEL(d, i) \ 109 ((d)->accel && !(d)->ring_lockup && \ 110 ((i)->var.accel_flags & FB_ACCELF_TEXT)) 111 112/*#define NOACCEL_CHIPSET(d) \ 113 ((d)->chipset != INTEL_865G)*/ 114#define NOACCEL_CHIPSET(d) \ 115 (0) 116 117#define FIXED_MODE(d) ((d)->fixed_mode) 118 119/*** Driver parameters ***/ 120 121#define RINGBUFFER_SIZE KB(64) 122#define HW_CURSOR_SIZE KB(4) 123 124/* Intel agpgart driver */ 125#define AGP_PHYSICAL_MEMORY 2 126 127/* store information about an Ixxx DVO */ 128/* The i830->i865 use multiple DVOs with multiple i2cs */ 129/* the i915, i945 have a single sDVO i2c bus - which is different */ 130#define MAX_OUTPUTS 6 131 132/* these are outputs from the chip - integrated only 133 external chips are via DVO or SDVO output */ 134#define INTELFB_OUTPUT_UNUSED 0 135#define INTELFB_OUTPUT_ANALOG 1 136#define INTELFB_OUTPUT_DVO 2 137#define INTELFB_OUTPUT_SDVO 3 138#define INTELFB_OUTPUT_LVDS 4 139#define INTELFB_OUTPUT_TVOUT 5 140 141#define INTELFB_DVO_CHIP_NONE 0 142#define INTELFB_DVO_CHIP_LVDS 1 143#define INTELFB_DVO_CHIP_TMDS 2 144#define INTELFB_DVO_CHIP_TVOUT 4 145 146#define INTELFB_OUTPUT_PIPE_NC 0 147#define INTELFB_OUTPUT_PIPE_A 1 148#define INTELFB_OUTPUT_PIPE_B 2 149 150/*** Data Types ***/ 151 152/* supported chipsets */ 153enum intel_chips { 154 INTEL_830M, 155 INTEL_845G, 156 INTEL_85XGM, 157 INTEL_852GM, 158 INTEL_852GME, 159 INTEL_854, 160 INTEL_855GM, 161 INTEL_855GME, 162 INTEL_865G, 163 INTEL_915G, 164 INTEL_915GM, 165 INTEL_945G, 166 INTEL_945GM, 167 INTEL_945GME, 168 INTEL_965G, 169 INTEL_965GM, 170}; 171 172struct intelfb_hwstate { 173 u32 vga0_divisor; 174 u32 vga1_divisor; 175 u32 vga_pd; 176 u32 dpll_a; 177 u32 dpll_b; 178 u32 fpa0; 179 u32 fpa1; 180 u32 fpb0; 181 u32 fpb1; 182 u32 palette_a[PALETTE_8_ENTRIES]; 183 u32 palette_b[PALETTE_8_ENTRIES]; 184 u32 htotal_a; 185 u32 hblank_a; 186 u32 hsync_a; 187 u32 vtotal_a; 188 u32 vblank_a; 189 u32 vsync_a; 190 u32 src_size_a; 191 u32 bclrpat_a; 192 u32 htotal_b; 193 u32 hblank_b; 194 u32 hsync_b; 195 u32 vtotal_b; 196 u32 vblank_b; 197 u32 vsync_b; 198 u32 src_size_b; 199 u32 bclrpat_b; 200 u32 adpa; 201 u32 dvoa; 202 u32 dvob; 203 u32 dvoc; 204 u32 dvoa_srcdim; 205 u32 dvob_srcdim; 206 u32 dvoc_srcdim; 207 u32 lvds; 208 u32 pipe_a_conf; 209 u32 pipe_b_conf; 210 u32 disp_arb; 211 u32 cursor_a_control; 212 u32 cursor_b_control; 213 u32 cursor_a_base; 214 u32 cursor_b_base; 215 u32 cursor_size; 216 u32 disp_a_ctrl; 217 u32 disp_b_ctrl; 218 u32 disp_a_base; 219 u32 disp_b_base; 220 u32 cursor_a_palette[4]; 221 u32 cursor_b_palette[4]; 222 u32 disp_a_stride; 223 u32 disp_b_stride; 224 u32 vgacntrl; 225 u32 add_id; 226 u32 swf0x[7]; 227 u32 swf1x[7]; 228 u32 swf3x[3]; 229 u32 fence[8]; 230 u32 instpm; 231 u32 mem_mode; 232 u32 fw_blc_0; 233 u32 fw_blc_1; 234 u16 hwstam; 235 u16 ier; 236 u16 iir; 237 u16 imr; 238}; 239 240struct intelfb_heap_data { 241 u32 physical; 242 u8 __iomem *virtual; 243 u32 offset; /* in GATT pages */ 244 u32 size; /* in bytes */ 245}; 246 247#ifdef CONFIG_FB_INTEL_I2C 248struct intelfb_i2c_chan { 249 struct intelfb_info *dinfo; 250 u32 reg; 251 struct i2c_adapter adapter; 252 struct i2c_algo_bit_data algo; 253}; 254#endif 255 256struct intelfb_output_rec { 257 int type; 258 int pipe; 259 int flags; 260 261#ifdef CONFIG_FB_INTEL_I2C 262 struct intelfb_i2c_chan i2c_bus; 263 struct intelfb_i2c_chan ddc_bus; 264#endif 265}; 266 267struct intelfb_vsync { 268 wait_queue_head_t wait; 269 unsigned int count; 270 int pan_display; 271 u32 pan_offset; 272}; 273 274struct intelfb_info { 275 struct fb_info *info; 276 const struct fb_ops *fbops; 277 struct pci_dev *pdev; 278 279 struct intelfb_hwstate save_state; 280 281 /* agpgart structs */ 282 struct agp_memory *gtt_fb_mem; /* use all stolen memory or vram */ 283 struct agp_memory *gtt_ring_mem; /* ring buffer */ 284 struct agp_memory *gtt_cursor_mem; /* hw cursor */ 285 286 /* use a gart reserved fb mem */ 287 u8 fbmem_gart; 288 289 int wc_cookie; 290 291 /* heap data */ 292 struct intelfb_heap_data aperture; 293 struct intelfb_heap_data fb; 294 struct intelfb_heap_data ring; 295 struct intelfb_heap_data cursor; 296 297 /* mmio regs */ 298 u32 mmio_base_phys; 299 u8 __iomem *mmio_base; 300 301 /* fb start offset (in bytes) */ 302 u32 fb_start; 303 304 /* ring buffer */ 305 u32 ring_head; 306 u32 ring_tail; 307 u32 ring_tail_mask; 308 u32 ring_space; 309 u32 ring_lockup; 310 311 /* palette */ 312 u32 pseudo_palette[16]; 313 314 /* chip info */ 315 int pci_chipset; 316 int chipset; 317 const char *name; 318 int mobile; 319 320 /* current mode */ 321 int bpp, depth; 322 u32 visual; 323 int xres, yres, pitch; 324 int pixclock; 325 326 /* current pipe */ 327 int pipe; 328 329 /* some flags */ 330 int accel; 331 int hwcursor; 332 int fixed_mode; 333 int ring_active; 334 int flag; 335 unsigned long irq_flags; 336 int open; 337 338 /* vsync */ 339 struct intelfb_vsync vsync; 340 spinlock_t int_lock; 341 342 /* hw cursor */ 343 int cursor_on; 344 int cursor_blanked; 345 u8 cursor_src[64]; 346 347 /* initial parameters */ 348 int initial_vga; 349 struct fb_var_screeninfo initial_var; 350 u32 initial_fb_base; 351 u32 initial_video_ram; 352 u32 initial_pitch; 353 354 /* driver registered */ 355 int registered; 356 357 /* index into plls */ 358 int pll_index; 359 360 /* outputs */ 361 int num_outputs; 362 struct intelfb_output_rec output[MAX_OUTPUTS]; 363}; 364 365#define IS_I9XX(dinfo) (((dinfo)->chipset == INTEL_915G) || \ 366 ((dinfo)->chipset == INTEL_915GM) || \ 367 ((dinfo)->chipset == INTEL_945G) || \ 368 ((dinfo)->chipset == INTEL_945GM) || \ 369 ((dinfo)->chipset == INTEL_945GME) || \ 370 ((dinfo)->chipset == INTEL_965G) || \ 371 ((dinfo)->chipset == INTEL_965GM)) 372 373/*** function prototypes ***/ 374 375extern int intelfb_var_to_depth(const struct fb_var_screeninfo *var); 376 377#ifdef CONFIG_FB_INTEL_I2C 378extern void intelfb_create_i2c_busses(struct intelfb_info *dinfo); 379extern void intelfb_delete_i2c_busses(struct intelfb_info *dinfo); 380#endif 381 382#endif /* _INTELFB_H */