2005-04-17 02:20:36 +04:00
# ifndef _INTELFB_H
# define _INTELFB_H
/* $DHD: intelfb/intelfb.h,v 1.40 2003/06/27 15:06:25 dawes Exp $ */
# include <linux/agp_backend.h>
# include <linux/fb.h>
2006-06-20 22:55:55 +04:00
# ifdef CONFIG_FB_INTEL_I2C
# include <linux/i2c.h>
# include <linux/i2c-algo-bit.h>
# endif
2005-04-17 02:20:36 +04:00
/*** Version/name ***/
2006-03-23 13:53:05 +03:00
# define INTELFB_VERSION "0.9.4"
2005-04-17 02:20:36 +04:00
# define INTELFB_MODULE_NAME "intelfb"
2006-03-23 13:53:05 +03:00
# define SUPPORTED_CHIPSETS "830M / 845G / 852GM / 855GM / 865G / 915G / 915GM / 945G / 945GM"
2005-04-17 02:20:36 +04:00
/*** Debug/feature defines ***/
# ifndef DEBUG
# define DEBUG 0
# endif
# ifndef VERBOSE
# define VERBOSE 0
# endif
# ifndef REGDUMP
# define REGDUMP 0
# endif
# ifndef DETECT_VGA_CLASS_ONLY
# define DETECT_VGA_CLASS_ONLY 1
# endif
# ifndef ALLOCATE_FOR_PANNING
# define ALLOCATE_FOR_PANNING 1
# endif
# ifndef PREFERRED_MODE
# define PREFERRED_MODE "1024x768-32@70"
# endif
/*** hw-related values ***/
2005-12-19 10:11:40 +03:00
/* Resource Allocation */
# define INTELFB_FB_ACQUIRED 1
# define INTELFB_MMIO_ACQUIRED 2
2005-04-17 02:20:36 +04:00
/* PCI ids for supported devices */
# define PCI_DEVICE_ID_INTEL_830M 0x3577
# define PCI_DEVICE_ID_INTEL_845G 0x2562
# define PCI_DEVICE_ID_INTEL_85XGM 0x3582
# define PCI_DEVICE_ID_INTEL_865G 0x2572
# define PCI_DEVICE_ID_INTEL_915G 0x2582
2005-11-07 12:00:33 +03:00
# define PCI_DEVICE_ID_INTEL_915GM 0x2592
2006-03-23 03:23:55 +03:00
# define PCI_DEVICE_ID_INTEL_945G 0x2772
2006-03-23 13:53:05 +03:00
# define PCI_DEVICE_ID_INTEL_945GM 0x27A2
2005-04-17 02:20:36 +04:00
/* Size of MMIO region */
# define INTEL_REG_SIZE 0x80000
# define STRIDE_ALIGNMENT 16
2006-05-27 12:17:52 +04:00
# define STRIDE_ALIGNMENT_I9XX 64
2005-04-17 02:20:36 +04:00
# define PALETTE_8_ENTRIES 256
/*** Macros ***/
/* basic arithmetic */
# define KB(x) ((x) * 1024)
# define MB(x) ((x) * 1024 * 1024)
# define BtoKB(x) ((x) / 1024)
# define BtoMB(x) ((x) / 1024 / 1024)
# define GTT_PAGE_SIZE KB(4)
# define ROUND_UP_TO(x, y) (((x) + (y) - 1) / (y) * (y))
# define ROUND_DOWN_TO(x, y) ((x) / (y) * (y))
# define ROUND_UP_TO_PAGE(x) ROUND_UP_TO((x), GTT_PAGE_SIZE)
# define ROUND_DOWN_TO_PAGE(x) ROUND_DOWN_TO((x), GTT_PAGE_SIZE)
/* messages */
# define PFX INTELFB_MODULE_NAME ": "
# define ERR_MSG(fmt, args...) printk(KERN_ERR PFX fmt, ## args)
# define WRN_MSG(fmt, args...) printk(KERN_WARNING PFX fmt, ## args)
# define NOT_MSG(fmt, args...) printk(KERN_NOTICE PFX fmt, ## args)
# define INF_MSG(fmt, args...) printk(KERN_INFO PFX fmt, ## args)
# if DEBUG
# define DBG_MSG(fmt, args...) printk(KERN_DEBUG PFX fmt, ## args)
# else
# define DBG_MSG(fmt, args...) while (0) printk(fmt, ## args)
# endif
/* get commonly used pointers */
# define GET_DINFO(info) (info)->par
/* misc macros */
# define ACCEL(d, i) \
( ( d ) - > accel & & ! ( d ) - > ring_lockup & & \
( ( i ) - > var . accel_flags & FB_ACCELF_TEXT ) )
/*#define NOACCEL_CHIPSET(d) \
( ( d ) - > chipset ! = INTEL_865G ) */
# define NOACCEL_CHIPSET(d) \
( 0 )
# define FIXED_MODE(d) ((d)->fixed_mode)
/*** Driver paramters ***/
# define RINGBUFFER_SIZE KB(64)
# define HW_CURSOR_SIZE KB(4)
/* Intel agpgart driver */
# define AGP_PHYSICAL_MEMORY 2
/*** Data Types ***/
/* supported chipsets */
enum intel_chips {
INTEL_830M ,
INTEL_845G ,
INTEL_85XGM ,
INTEL_852GM ,
INTEL_852GME ,
INTEL_855GM ,
INTEL_855GME ,
INTEL_865G ,
2005-11-07 12:00:33 +03:00
INTEL_915G ,
2006-03-23 03:23:55 +03:00
INTEL_915GM ,
2006-03-23 13:53:05 +03:00
INTEL_945G ,
INTEL_945GM ,
2005-04-17 02:20:36 +04:00
} ;
struct intelfb_hwstate {
u32 vga0_divisor ;
u32 vga1_divisor ;
u32 vga_pd ;
u32 dpll_a ;
u32 dpll_b ;
u32 fpa0 ;
u32 fpa1 ;
u32 fpb0 ;
u32 fpb1 ;
u32 palette_a [ PALETTE_8_ENTRIES ] ;
u32 palette_b [ PALETTE_8_ENTRIES ] ;
u32 htotal_a ;
u32 hblank_a ;
u32 hsync_a ;
u32 vtotal_a ;
u32 vblank_a ;
u32 vsync_a ;
u32 src_size_a ;
u32 bclrpat_a ;
u32 htotal_b ;
u32 hblank_b ;
u32 hsync_b ;
u32 vtotal_b ;
u32 vblank_b ;
u32 vsync_b ;
u32 src_size_b ;
u32 bclrpat_b ;
u32 adpa ;
u32 dvoa ;
u32 dvob ;
u32 dvoc ;
u32 dvoa_srcdim ;
u32 dvob_srcdim ;
u32 dvoc_srcdim ;
u32 lvds ;
u32 pipe_a_conf ;
u32 pipe_b_conf ;
u32 disp_arb ;
u32 cursor_a_control ;
u32 cursor_b_control ;
u32 cursor_a_base ;
u32 cursor_b_base ;
u32 cursor_size ;
u32 disp_a_ctrl ;
u32 disp_b_ctrl ;
u32 disp_a_base ;
u32 disp_b_base ;
u32 cursor_a_palette [ 4 ] ;
u32 cursor_b_palette [ 4 ] ;
u32 disp_a_stride ;
u32 disp_b_stride ;
u32 vgacntrl ;
u32 add_id ;
u32 swf0x [ 7 ] ;
u32 swf1x [ 7 ] ;
u32 swf3x [ 3 ] ;
u32 fence [ 8 ] ;
u32 instpm ;
u32 mem_mode ;
u32 fw_blc_0 ;
u32 fw_blc_1 ;
2006-06-20 22:36:41 +04:00
u16 hwstam ;
u16 ier ;
u16 iir ;
u16 imr ;
2005-04-17 02:20:36 +04:00
} ;
struct intelfb_heap_data {
u32 physical ;
u8 __iomem * virtual ;
u32 offset ; // in GATT pages
u32 size ; // in bytes
} ;
2006-06-20 22:55:55 +04:00
# ifdef CONFIG_FB_INTEL_I2C
struct intelfb_i2c_chan {
struct intelfb_info * dinfo ;
u32 reg ;
struct i2c_adapter adapter ;
struct i2c_algo_bit_data algo ;
} ;
# endif
2006-06-20 22:36:41 +04:00
struct intelfb_vsync {
wait_queue_head_t wait ;
unsigned int count ;
2006-06-20 22:36:42 +04:00
int pan_display ;
u32 pan_offset ;
2006-06-20 22:36:41 +04:00
} ;
2005-04-17 02:20:36 +04:00
struct intelfb_info {
struct fb_info * info ;
struct fb_ops * fbops ;
struct pci_dev * pdev ;
struct intelfb_hwstate save_state ;
/* agpgart structs */
struct agp_memory * gtt_fb_mem ; // use all stolen memory or vram
struct agp_memory * gtt_ring_mem ; // ring buffer
struct agp_memory * gtt_cursor_mem ; // hw cursor
/* use a gart reserved fb mem */
u8 fbmem_gart ;
/* mtrr support */
u32 mtrr_reg ;
u32 has_mtrr ;
/* heap data */
struct intelfb_heap_data aperture ;
struct intelfb_heap_data fb ;
struct intelfb_heap_data ring ;
struct intelfb_heap_data cursor ;
/* mmio regs */
u32 mmio_base_phys ;
u8 __iomem * mmio_base ;
/* fb start offset (in bytes) */
u32 fb_start ;
/* ring buffer */
2006-06-23 09:05:39 +04:00
u32 ring_head ;
2005-04-17 02:20:36 +04:00
u32 ring_tail ;
u32 ring_tail_mask ;
u32 ring_space ;
u32 ring_lockup ;
/* palette */
u32 pseudo_palette [ 17 ] ;
/* chip info */
int pci_chipset ;
int chipset ;
const char * name ;
int mobile ;
/* current mode */
int bpp , depth ;
u32 visual ;
int xres , yres , pitch ;
int pixclock ;
/* current pipe */
int pipe ;
/* some flags */
int accel ;
int hwcursor ;
int fixed_mode ;
int ring_active ;
2005-12-19 10:11:40 +03:00
int flag ;
2006-06-20 22:36:41 +04:00
unsigned long irq_flags ;
int open ;
/* vsync */
struct intelfb_vsync vsync ;
spinlock_t int_lock ;
2005-04-17 02:20:36 +04:00
/* hw cursor */
int cursor_on ;
int cursor_blanked ;
u8 cursor_src [ 64 ] ;
/* initial parameters */
int initial_vga ;
struct fb_var_screeninfo initial_var ;
u32 initial_fb_base ;
u32 initial_video_ram ;
u32 initial_pitch ;
/* driver registered */
int registered ;
2006-03-20 12:26:45 +03:00
/* index into plls */
int pll_index ;
2005-04-17 02:20:36 +04:00
} ;
2006-03-31 11:08:52 +04:00
# define IS_I9XX(dinfo) (((dinfo)->chipset == INTEL_915G)||(dinfo->chipset == INTEL_915GM)||((dinfo)->chipset == INTEL_945G)||(dinfo->chipset==INTEL_945GM))
2006-03-23 05:06:32 +03:00
2006-06-20 22:36:42 +04:00
# ifndef FBIO_WAITFORVSYNC
# define FBIO_WAITFORVSYNC _IOW('F', 0x20, __u32)
# endif
2005-04-17 02:20:36 +04:00
/*** function prototypes ***/
extern int intelfb_var_to_depth ( const struct fb_var_screeninfo * var ) ;
# endif /* _INTELFB_H */