17dd7cddfSDavid du Colombier /* Copyright (C) 1989, 1995, 1998 Aladdin Enterprises. All rights reserved. 27dd7cddfSDavid du Colombier 3*593dc095SDavid du Colombier This software is provided AS-IS with no warranty, either express or 4*593dc095SDavid du Colombier implied. 57dd7cddfSDavid du Colombier 6*593dc095SDavid du Colombier This software is distributed under license and may not be copied, 7*593dc095SDavid du Colombier modified or distributed except as expressly authorized under the terms 8*593dc095SDavid du Colombier of the license contained in the file LICENSE in this distribution. 97dd7cddfSDavid du Colombier 10*593dc095SDavid du Colombier For more information about licensing, please refer to 11*593dc095SDavid du Colombier http://www.ghostscript.com/licensing/. For information on 12*593dc095SDavid du Colombier commercial licensing, go to http://www.artifex.com/licensing/ or 13*593dc095SDavid du Colombier contact Artifex Software, Inc., 101 Lucas Valley Road #110, 14*593dc095SDavid du Colombier San Rafael, CA 94903, U.S.A., +1(415)492-9861. 157dd7cddfSDavid du Colombier */ 167dd7cddfSDavid du Colombier 17*593dc095SDavid du Colombier /* $Id: gdevsvga.h,v 1.5 2002/06/16 07:25:26 lpd Exp $ */ 187dd7cddfSDavid du Colombier /* Common definitions and procedures for SuperVGA drivers */ 197dd7cddfSDavid du Colombier /* Requires gdevpcfb.h */ 207dd7cddfSDavid du Colombier 217dd7cddfSDavid du Colombier #ifndef gdevsvga_INCLUDED 227dd7cddfSDavid du Colombier # define gdevsvga_INCLUDED 237dd7cddfSDavid du Colombier 247dd7cddfSDavid du Colombier /* Common procedures */ 257dd7cddfSDavid du Colombier 267dd7cddfSDavid du Colombier /* See gxdevice.h for the definitions of the procedures. */ 277dd7cddfSDavid du Colombier 287dd7cddfSDavid du Colombier dev_proc_close_device(svga_close); 297dd7cddfSDavid du Colombier dev_proc_map_rgb_color(svga_map_rgb_color); 307dd7cddfSDavid du Colombier dev_proc_map_color_rgb(svga_map_color_rgb); 317dd7cddfSDavid du Colombier dev_proc_fill_rectangle(svga_fill_rectangle); 327dd7cddfSDavid du Colombier dev_proc_copy_mono(svga_copy_mono); 337dd7cddfSDavid du Colombier dev_proc_copy_color(svga_copy_color); 347dd7cddfSDavid du Colombier dev_proc_get_params(svga_get_params); 357dd7cddfSDavid du Colombier dev_proc_put_params(svga_put_params); 367dd7cddfSDavid du Colombier dev_proc_get_bits(svga_get_bits); 377dd7cddfSDavid du Colombier dev_proc_copy_alpha(svga_copy_alpha); 387dd7cddfSDavid du Colombier 397dd7cddfSDavid du Colombier /* Table structure for looking up graphics modes. */ 407dd7cddfSDavid du Colombier typedef struct { 417dd7cddfSDavid du Colombier int width, height; /* "key" */ 427dd7cddfSDavid du Colombier int mode; /* "value" */ 437dd7cddfSDavid du Colombier } mode_info; 447dd7cddfSDavid du Colombier 457dd7cddfSDavid du Colombier /* The device descriptor structure */ 467dd7cddfSDavid du Colombier typedef struct gx_device_svga_s gx_device_svga; 477dd7cddfSDavid du Colombier struct gx_device_svga_s { 487dd7cddfSDavid du Colombier gx_device_common; 49*593dc095SDavid du Colombier int (*get_mode) (void); 50*593dc095SDavid du Colombier void (*set_mode) (int); 51*593dc095SDavid du Colombier void (*set_page) (gx_device_svga * fbdev, int pnum, int wnum); 527dd7cddfSDavid du Colombier bool fixed_colors; /* if true, used a fixed palette */ 537dd7cddfSDavid du Colombier const mode_info *mode; /* BIOS display mode info */ 547dd7cddfSDavid du Colombier uint raster; /* frame buffer bytes per line */ 557dd7cddfSDavid du Colombier int current_page; /* current page */ 567dd7cddfSDavid du Colombier int wnum_read, wnum_write; /* window #s for read vs. write */ 577dd7cddfSDavid du Colombier /* Following are device-specific. */ 587dd7cddfSDavid du Colombier union { 597dd7cddfSDavid du Colombier struct { 60*593dc095SDavid du Colombier void (*bios_set_page) (int, int); /* set-page function */ 617dd7cddfSDavid du Colombier int pn_shift; /* log2(64K/granularity) */ 627dd7cddfSDavid du Colombier } vesa; 637dd7cddfSDavid du Colombier struct { 647dd7cddfSDavid du Colombier int select_reg; /* page-select register */ 657dd7cddfSDavid du Colombier } atiw; 667dd7cddfSDavid du Colombier struct { 677dd7cddfSDavid du Colombier int et_model; /* 4 for ET4000, */ 687dd7cddfSDavid du Colombier /* 3 for ET3000 */ 697dd7cddfSDavid du Colombier } tseng; 707dd7cddfSDavid du Colombier } info; 717dd7cddfSDavid du Colombier }; 727dd7cddfSDavid du Colombier 737dd7cddfSDavid du Colombier /* The initial parameters map an appropriate fraction of */ 747dd7cddfSDavid du Colombier /* the screen to a full-page coordinate space. */ 757dd7cddfSDavid du Colombier /* This may or may not be what is desired! */ 767dd7cddfSDavid du Colombier #define svga_color_device(procs, name, depth, maxv, dither, get_mode, set_mode, set_page) {\ 777dd7cddfSDavid du Colombier std_device_color_body(gx_device_svga, &procs, name,\ 787dd7cddfSDavid du Colombier 640, 480,\ 797dd7cddfSDavid du Colombier 480 / PAGE_HEIGHT_INCHES, 480 / PAGE_HEIGHT_INCHES,\ 807dd7cddfSDavid du Colombier /*dci_color(*/depth, maxv, dither/*)*/),\ 817dd7cddfSDavid du Colombier { 0 }, /* std_procs */\ 827dd7cddfSDavid du Colombier get_mode, set_mode, set_page,\ 837dd7cddfSDavid du Colombier 0 /*fixed_colors*/\ 847dd7cddfSDavid du Colombier } 857dd7cddfSDavid du Colombier #define svga_device(procs, name, get_mode, set_mode, set_page)\ 867dd7cddfSDavid du Colombier svga_color_device(procs, name, 8, 31, 4, get_mode, set_mode, set_page) 877dd7cddfSDavid du Colombier 887dd7cddfSDavid du Colombier /* Utility procedures */ 89*593dc095SDavid du Colombier void svga_init_colors(gx_device *); 90*593dc095SDavid du Colombier int svga_find_mode(gx_device *, const mode_info *); 91*593dc095SDavid du Colombier int svga_open(gx_device *); 927dd7cddfSDavid du Colombier 937dd7cddfSDavid du Colombier #endif /* gdevsvga_INCLUDED */ 94