linux-old/drivers/video/intel/intelfb.h
<<
>>
Prefs
   1#ifndef _INTELFB_H
   2#define _INTELFB_H
   3
   4/* $DHD: intelfb/intelfb.h,v 1.38 2003/02/06 17:29:41 dawes Exp $ */
   5/* $TG$ */
   6
   7
   8/*** Version/name ***/
   9#define INTELFB_VERSION                 "0.7.7"
  10#define INTELFB_MODULE_NAME             "intelfb"
  11#define SUPPORTED_CHIPSETS              "830M/845G/852GM/855GM/865G"
  12
  13
  14/*** Debug/feature defines ***/
  15
  16#ifndef DEBUG
  17#define DEBUG                           0
  18#endif
  19
  20#ifndef VERBOSE
  21#define VERBOSE                         1
  22#endif
  23
  24#ifndef REGDUMP
  25#define REGDUMP                         0
  26#endif
  27
  28#ifndef DETECT_VGA_CLASS_ONLY
  29#define DETECT_VGA_CLASS_ONLY           1
  30#endif
  31
  32#ifndef FIXED_MODE
  33#define FIXED_MODE                      0
  34#endif
  35
  36#ifndef ALLOCATE_FOR_PANNING
  37#define ALLOCATE_FOR_PANNING            0
  38#endif
  39
  40#ifndef BAILOUT_EARLY
  41#define BAILOUT_EARLY                   0
  42#endif
  43
  44#ifndef TEST_MODE_TO_HW
  45#define TEST_MODE_TO_HW                 0
  46#endif
  47
  48#ifndef USE_SYNC_PAGE
  49#define USE_SYNC_PAGE                   1
  50#endif
  51
  52#ifndef MOBILE_HW_CURSOR
  53#define MOBILE_HW_CURSOR                0
  54#endif
  55
  56#ifndef PREFERRED_MODE
  57#define PREFERRED_MODE                  "1024x768-16@60"
  58#endif
  59
  60/*** hw-related values ***/
  61
  62/* PCI ids for supported devices */
  63#define PCI_DEVICE_ID_INTEL_830M        0x3577
  64#define PCI_DEVICE_ID_INTEL_845G        0x2562
  65#define PCI_DEVICE_ID_INTEL_85XGM       0x3582
  66#define PCI_DEVICE_ID_INTEL_865G        0x2572
  67
  68/* Size of MMIO region */
  69#define INTEL_REG_SIZE                  0x80000
  70
  71#define STRIDE_ALIGNMENT                16
  72
  73#define PAT_ROP_GXCOPY                  0xf0
  74#define PAT_ROP_GXXOR                   0x5a
  75
  76#define PALETTE_8_ENTRIES               256
  77
  78
  79/*** Macros ***/
  80
  81/* basic arithmetic */
  82#define KB(x)                   ((x) * 1024)
  83#define MB(x)                   ((x) * 1024 * 1024)
  84#define BtoKB(x)                ((x) / 1024)
  85#define BtoMB(x)                ((x) / 1024 / 1024)
  86
  87#define ROUND_UP_TO(x, y)       (((x) + (y) - 1) / (y) * (y))
  88#define ROUND_DOWN_TO(x, y)     ((x) / (y) * (y))
  89#define ROUND_UP_TO_PAGE(x)     ROUND_UP_TO((x), PAGE_SIZE)
  90#define ROUND_DOWN_TO_PAGE(x)   ROUND_DOWN_TO((x), PAGE_SIZE)
  91
  92/* messages */
  93#define PFX                     INTELFB_MODULE_NAME ": "
  94
  95#define ERR_MSG(fmt, args...)   printk(KERN_ERR PFX fmt, ## args)
  96#define WRN_MSG(fmt, args...)   printk(KERN_WARNING PFX fmt, ## args)
  97#define NOT_MSG(fmt, args...)   printk(KERN_NOTICE PFX fmt, ## args)
  98#define INF_MSG(fmt, args...)   printk(KERN_INFO PFX fmt, ## args)
  99#if DEBUG
 100#define DBG_MSG(fmt, args...)   printk(KERN_DEBUG PFX fmt, ## args)
 101#else
 102#define DBG_MSG(fmt, args...)   while (0) printk(fmt, ## args)
 103#endif
 104
 105/* get commonly used pointers */
 106#define GET_DINFO(info)         (struct intelfb_info *)(info)
 107#define GET_DISP(info, con)     ((con) < 0) ? (info)->disp : &fb_display[con]
 108
 109/* module parameters */
 110#define INTELFB_INT_PARAM(name, default, desc)                          \
 111        static int name = default;                                      \
 112        MODULE_PARM(name, "i");                                         \
 113        MODULE_PARM_DESC(name, desc);
 114
 115#define INTELFB_STR_PARAM(name, default, desc)                          \
 116        static const char *name = default;                              \
 117        MODULE_PARM(name, "s");                                         \
 118        MODULE_PARM_DESC(name, desc);
 119
 120/* misc macros */
 121#define TEXT_ACCEL(d, v)                                                \
 122        ((d)->accel && (d)->ring_active &&                              \
 123         ((v)->accel_flags & FB_ACCELF_TEXT))
 124
 125#define USE_DRAWGLYPH(d)                                                \
 126        ((d)->chipset == INTEL_865G)
 127
 128#define NOACCEL_CHIPSET(d)                                              \
 129        ((d)->chipset != INTEL_865G)
 130
 131#ifndef LockPage
 132#define LockPage(page)          set_bit(PG_locked, &(page)->flags)
 133#endif
 134#ifndef UnlockPage
 135#define UnlockPage(page)        unlock_page(page)
 136#endif
 137
 138#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)
 139#define FB_SET_CMAP(a, b, c, d) fb_set_cmap(a, b, d)
 140#else
 141#define FB_SET_CMAP(a, b, c, d) fb_set_cmap(a, b, c, d)
 142#endif
 143
 144
 145/*** Driver paramters ***/
 146
 147#define RINGBUFFER_SIZE         KB(64)
 148#define HW_CURSOR_SIZE          KB(4)
 149
 150
 151/*** Data Types ***/
 152
 153/* supported chipsets */
 154enum intel_chips {
 155        INTEL_830M,
 156        INTEL_845G,
 157        INTEL_85XGM,
 158        INTEL_852GM,
 159        INTEL_852GME,
 160        INTEL_855GM,
 161        INTEL_855GME,
 162        INTEL_865G
 163};
 164
 165struct intelfb_hwstate {
 166        u32 vga0_divisor;
 167        u32 vga1_divisor;
 168        u32 vga_pd;
 169        u32 dpll_a;
 170        u32 dpll_b;
 171        u32 fpa0;
 172        u32 fpa1;
 173        u32 fpb0;
 174        u32 fpb1;
 175        u32 palette_a[PALETTE_8_ENTRIES];
 176        u32 palette_b[PALETTE_8_ENTRIES];
 177        u32 htotal_a;
 178        u32 hblank_a;
 179        u32 hsync_a;
 180        u32 vtotal_a;
 181        u32 vblank_a;
 182        u32 vsync_a;
 183        u32 src_size_a;
 184        u32 bclrpat_a;
 185        u32 htotal_b;
 186        u32 hblank_b;
 187        u32 hsync_b;
 188        u32 vtotal_b;
 189        u32 vblank_b;
 190        u32 vsync_b;
 191        u32 src_size_b;
 192        u32 bclrpat_b;
 193        u32 adpa;
 194        u32 dvoa;
 195        u32 dvob;
 196        u32 dvoc;
 197        u32 dvoa_srcdim;
 198        u32 dvob_srcdim;
 199        u32 dvoc_srcdim;
 200        u32 lvds;
 201        u32 pipe_a_conf;
 202        u32 pipe_b_conf;
 203        u32 disp_arb;
 204        u32 cursor_a_control;
 205        u32 cursor_b_control;
 206        u32 cursor_a_base;
 207        u32 cursor_b_base;
 208        u32 cursor_size;
 209        u32 disp_a_ctrl;
 210        u32 disp_b_ctrl;
 211        u32 disp_a_base;
 212        u32 disp_b_base;
 213        u32 cursor_a_palette[4];
 214        u32 cursor_b_palette[4];
 215        u32 disp_a_stride;
 216        u32 disp_b_stride;
 217        u32 vgacntrl;
 218        u32 add_id;
 219        u32 swf0x[7];
 220        u32 swf1x[7];
 221        u32 swf3x[3];
 222        u32 fence[8];
 223        u32 instpm;
 224        u32 mem_mode;
 225        u32 fw_blc_0;
 226        u32 fw_blc_1;
 227};
 228
 229struct intelfb_info {
 230        struct fb_info info;
 231
 232        const char *name;
 233
 234        u32 fb_base_phys;
 235        u32 mmio_base_phys;
 236
 237        u32 fb_base;
 238        u32 mmio_base;
 239
 240        u32 fb_offset;
 241
 242        struct pci_dev *pdev;
 243
 244        /* Ring buffer */
 245        u32 ring_base_phys;
 246        u32 ring_base;
 247        u32 ring_size;
 248        u32 ring_head;
 249        u32 ring_tail;
 250        u32 ring_tail_mask;
 251        u32 ring_space;
 252
 253        /* HW cursor */
 254        u32 cursor_base_phys;
 255        u32 cursor_offset;
 256        u32 cursor_base;
 257        u32 cursor_size;
 258        u32 cursor_page_virt;
 259        u32 cursor_base_real;
 260
 261#if USE_SYNC_PAGE
 262        /* 2D synchronisation */
 263        u32 syncpage_virt;
 264        u32 syncpage_phys;
 265#endif
 266
 267        struct display disp;
 268        int currcon;
 269        struct display *currcon_display;
 270
 271        struct { u8 red, green, blue, pad; } palette[256];
 272
 273        int pci_chipset;
 274        int chipset;
 275        int mobile;
 276
 277        int video_ram;
 278        int aperture_size;
 279        int stolen_size;
 280        int bpp, depth;
 281        u32 visual;
 282
 283        int xres, yres, pitch;
 284        int pixclock;
 285
 286        int pipe;
 287
 288        int accel;
 289        int hwcursor;
 290        int fixed_mode;
 291
 292        int ring_active;
 293
 294#if defined(FBCON_HAS_CFB16) || defined(FBCON_HAS_CFB32)
 295        union {
 296#if defined(FBCON_HAS_CFB16)
 297                u_int16_t cfb16[16];
 298#endif
 299#if defined(FBCON_HAS_CFB32)
 300                u_int32_t cfb32[16];
 301#endif
 302        } con_cmap;
 303#endif
 304
 305        int vc_mode;
 306
 307        struct intelfb_hwstate save_state;
 308
 309        int registered;
 310
 311        int initial_vga;
 312        struct fb_var_screeninfo initial_var;
 313        u32 initial_fb_base;
 314        u32 initial_video_ram;
 315        u32 initial_pitch;
 316
 317        struct {
 318                int type;
 319                int state;
 320                int on;
 321                int enabled;
 322                int blanked;
 323                int w, u, d;
 324                int x, y, redraw;
 325                unsigned long cursorimage;
 326                struct timer_list timer;
 327        } cursor;
 328        spinlock_t DAClock;
 329};
 330
 331
 332/*** Functions ***/
 333
 334/* intelfb.c */
 335extern int intelfb_var_to_depth(const struct fb_var_screeninfo *var);
 336extern void intelfb_create_cursor_shape(struct intelfb_info *dinfo,
 337                                        struct display *disp);
 338
 339/* intelfbhw.c */
 340
 341extern int intelfbhw_get_chipset(struct pci_dev *pdev, const char **name,
 342                                 int *chipset, int *mobile);
 343extern int intelfbhw_get_memory(struct pci_dev *pdev, int *aperture_size,
 344                                int *stolen_size);
 345extern const char *intelfbhw_check_non_crt(struct intelfb_info *dinfo);
 346extern int intelfbhw_validate_mode(struct intelfb_info *dinfo, int con,
 347                                   struct fb_var_screeninfo *var);
 348extern int intelfbhw_pan_display(struct fb_var_screeninfo *var, int con,
 349                                 struct fb_info *info);
 350extern void intelfbhw_do_blank(int blank, struct fb_info *info);
 351extern void intelfbhw_setcolreg(struct intelfb_info *dinfo, unsigned regno,
 352                                unsigned red, unsigned green, unsigned blue,
 353                                unsigned transp);
 354extern int intelfbhw_read_hw_state(struct intelfb_info *dinfo,
 355                                   struct intelfb_hwstate *hw, int flag);
 356extern void intelfbhw_print_hw_state(struct intelfb_info *dinfo,
 357                                     struct intelfb_hwstate *hw);
 358extern int intelfbhw_mode_to_hw(struct intelfb_info *dinfo,
 359                                struct intelfb_hwstate *hw,
 360                                struct fb_var_screeninfo *var);
 361extern int intelfbhw_program_mode(struct intelfb_info *dinfo,
 362                                  const struct intelfb_hwstate *hw, int blank);
 363extern void intelfbhw_do_sync(struct intelfb_info *dinfo);
 364extern void intelfbhw_2d_stop(struct intelfb_info *dinfo);
 365extern void intelfbhw_2d_start(struct intelfb_info *dinfo);
 366extern void intelfbhw_do_fillrect(struct intelfb_info *dinfo, u32 x, u32 y,
 367                                  u32 w, u32 h, u32 color, u32 pitch, u32 bpp,
 368                                  u32 rop);
 369extern void intelfbhw_do_bitblt(struct intelfb_info *dinfo, u32 curx, u32 cury,
 370                                u32 dstx, u32 dsty, u32 w, u32 h, u32 pitch,
 371                                u32 bpp);
 372extern int intelfbhw_do_drawglyph(struct intelfb_info *dinfo, u32 fg, u32 bg,
 373                                  u32 w, u32 h, u8* cdat, u32 x, u32 y,
 374                                  u32 pitch, u32 bpp);
 375extern void intelfbhw_cursor_init(struct intelfb_info *dinfo);
 376extern void intelfbhw_cursor_hide(struct intelfb_info *dinfo);
 377extern void intelfbhw_cursor_show(struct intelfb_info *dinfo);
 378extern void intelfbhw_cursor_setpos(struct intelfb_info *dinfo, int x, int y);
 379extern void intelfbhw_cursor_setcolor(struct intelfb_info *dinfo, u32 bg,
 380                                      u32 fg);
 381extern void intelfbhw_cursor_load(struct intelfb_info *dinfo,
 382                                  struct display *disp);
 383
 384
 385#endif /* _INTELFB_H */
 386
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.