/*
 * $Workfile: nsc_galproto.h $
 * $Revision: #1 $
 *
 * File Contents: This file contains the main functions of the Geode 
 *                frame buffer device drivers GAL function prototypes and  
 *                data structures.
 *
 * Project:       Geode Frame buffer device driver
 *
 */

/* NSC_LIC_ALTERNATIVE_PREAMBLE
 *
 * Revision 1.0
 *
 * National Semiconductor Alternative GPL-BSD License
 *
 * National Semiconductor Corporation licenses this software 
 * ("Software"):
 *
 * National Xfree frame buffer driver
 *
 * under one of the two following licenses, depending on how the 
 * Software is received by the Licensee.
 * 
 * If this Software is received as part of the Linux Framebuffer or
 * other GPL licensed software, then the GPL license designated 
 * NSC_LIC_GPL applies to this Software; in all other circumstances 
 * then the BSD-style license designated NSC_LIC_BSD shall apply.
 *
 * END_NSC_LIC_ALTERNATIVE_PREAMBLE */

/* NSC_LIC_BSD
 *
 * National Semiconductor Corporation Open Source License for 
 *
 * National Xfree frame buffer driver
 *
 * (BSD License with Export Notice)
 *
 * Copyright (c) 1999-2001
 * National Semiconductor Corporation.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without 
 * modification, are permitted provided that the following conditions 
 * are met: 
 *
 *   * Redistributions of source code must retain the above copyright 
 *     notice, this list of conditions and the following disclaimer. 
 *
 *   * Redistributions in binary form must reproduce the above 
 *     copyright notice, this list of conditions and the following 
 *     disclaimer in the documentation and/or other materials provided 
 *     with the distribution. 
 *
 *   * Neither the name of the National Semiconductor Corporation nor 
 *     the names of its contributors may be used to endorse or promote 
 *     products derived from this software without specific prior 
 *     written permission. 
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
 * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY 
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 
 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 
 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE,
 * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY 
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 
 * OF SUCH DAMAGE.
 *
 * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF 
 * YOUR JURISDICTION. It is licensee's responsibility to comply with 
 * any export regulations applicable in licensee's jurisdiction. Under 
 * CURRENT (2001) U.S. export regulations this software 
 * is eligible for export from the U.S. and can be downloaded by or 
 * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed 
 * destinations which include Cuba, Iraq, Libya, North Korea, Iran, 
 * Syria, Sudan, Afghanistan and any other country to which the U.S. 
 * has embargoed goods and services. 
 *
 * END_NSC_LIC_BSD */

/* NSC_LIC_GPL
 *
 * National Semiconductor Corporation Gnu General Public License for 
 *
 * National Xfree frame buffer driver
 *
 * (GPL License with Export Notice)
 *
 * Copyright (c) 1999-2001
 * National Semiconductor Corporation.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without 
 * modification, are permitted under the terms of the GNU General 
 * Public License as published by the Free Software Foundation; either 
 * version 2 of the License, or (at your option) any later version  
 *
 * In addition to the terms of the GNU General Public License, neither 
 * the name of the National Semiconductor Corporation nor the names of 
 * its contributors may be used to endorse or promote products derived 
 * from this software without specific prior written permission. 
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
 * NATIONAL SEMICONDUCTOR CORPORATION OR CONTRIBUTORS BE LIABLE FOR ANY 
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 
 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 
 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE, 
 * INTELLECTUAL PROPERTY INFRINGEMENT, OR OTHERWISE) ARISING IN ANY WAY 
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 
 * OF SUCH DAMAGE. See the GNU General Public License for more details. 
 *
 * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF 
 * YOUR JURISDICTION. It is licensee's responsibility to comply with 
 * any export regulations applicable in licensee's jurisdiction. Under 
 * CURRENT (2001) U.S. export regulations this software 
 * is eligible for export from the U.S. and can be downloaded by or 
 * otherwise exported or reexported worldwide EXCEPT to U.S. embargoed 
 * destinations which include Cuba, Iraq, Libya, North Korea, Iran, 
 * Syria, Sudan, Afghanistan and any other country to which the U.S. 
 * has embargoed goods and services. 
 *
 * You should have received a copy of the GNU General Public License 
 * along with this file; if not, write to the Free Software Foundation, 
 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
 *
 * END_NSC_LIC_GPL */

#ifndef __GALPROTO_SEP_20_2000
#define __GALPROTO_SEP_20_2000

/* durango reg definitions and type's */
#include <gfx_type.h>
#include <gfx_regs.h>

/* Panel related definition */
#include <pnl_defs.h>

typedef int SWORD;
typedef unsigned int DWORD;
typedef unsigned short WORD;
typedef unsigned char CHAR;
typedef unsigned char BOOLEAN;
typedef unsigned int *PDWORD;

/***************************************/
/* Applications/User mode drivers use this ioctl to
 * send a graphics device request to the frame buffer
 * driver
 */
#define FBIOGAL_API      0x4700

/*
 * Applications must sign the I/O packet with this value
 */

#define FBGAL_SIGNATURE 0xC0C0BABE

/*
 * Version is a 16:16 fixed value
 * Current version is 1.0000
 */

#define FBGAL_VERSION 0x10000

/*
 * Definitions for Graphics Subfunctions
 *
 */

typedef enum GALFN_CODES
{
/* General Adapter level functions */
   GALFN_GETADAPTERINFO = 0,
   GALFN_SETSOFTVGASTATE,
   GALFN_GETSOFTVGASTATE,
   GALFN_WAITUNTILIDLE,
   GALFN_WAITVERTICALBLANK,
   GALFN_SETCRTENABLE,
   GALFN_WRITEREG,
   GALFN_READREG,

/* Change/Get Display hardware state */

   GALFN_ISDISPLAYMODESUPPORTED,
   GALFN_SETDISPLAYMODE,
   GALFN_GETDISPLAYMODE,
   GALFN_SETBPP,
   GALFN_SETDISPLAYBPP,
   GALFN_GETDISPLAYBPP,
   GALFN_SETDISPLAYPITCH,
   GALFN_GETDISPLAYPITCH,
   GALFN_SETDISPLAYOFFSET,
   GALFN_GETDISPLAYOFFSET,
   GALFN_DOTCLKTOREFRESH,
   GALFN_GETDISPLAYTIMINGS,
   GALFN_SETDISPLAYTIMINGS,
   GALFN_SETPALETTE,
   GALFN_GETPALETTE,
   GALFN_SETPALETTE_ENTRY,
   GALFN_GETPALETTE_ENTRY,
   GALFN_SETFIXEDTIMINGS,

/* Hardware cursor funtions */

   GALFN_SETCURSORENABLE,
   GALFN_GETCURSORENABLE,
   GALFN_SETCURSORPOSITION,
   GALFN_GETCURSORPOSITION,
   GALFN_SETCURSORCOLORS,
   GALFN_GETCURSORCOLORS,
   GALFN_SETCURSORSHAPE,
   GALFN_SETCURSORSHAPE_RCLD,

/* grafix rendering funtions */
   GALFN_SETSOLIDPATTERN,
   GALFN_SETRASTEROPERATION,
   GALFN_SETSOLIDSOURCE,
   GALFN_PATTERNFILL,
   GALFN_SETMONOSOURCE,
   GALFN_SETMONOPATTERN,
   GALFN_SCREENTOSCREENBLT,
   GALFN_SCREENTOSCREENXBLT,
   GALFN_BRESENHAMLINE,
   GALFN_COLOR_PATTERNFILL,
   GALFN_COLOR_BITMAP_TO_SCREEN_BLT,
   GALFN_COLOR_BITMAP_TO_SCREEN_XBLT,
   GALFN_MONO_BITMAP_TO_SCREEN_BLT,
   GALFN_TEXT_BLT,

/* VGA Support functions */

   GALFN_VGAMODESWITCH,
   GALFN_VGACLEARCRTEXT,
   GALFN_VGASETPITCH,
   GALFN_VGARESTORE,
   GALFN_VGASAVE,
   GALFN_VGASETMODE,

/* Compression functions */
   GALFN_SETCOMPRESSIONSTATE,
   GALFN_GETCOMPRESSIONSTATE,
   GALFN_SETCOMPRESSIONPARAMS,
   GALFN_GETCOMPRESSIONPARAMS,

/* Panel Support functions */

   GALFN_PNLSETPARAMS,
   GALFN_PNLGETPARAMS,
   GALFN_PNLINITPANEL,
   GALFN_PNLSAVESTATE,
   GALFN_PNLRESTORESTATE,
   GALFN_PNLPOWERUP,
   GALFN_PNLPOWERDOWN,
   GALFN_PNLBIOSENABLE,
   GALFN_PNLBIOSINFO,
   GALFN_ENABLEPANNING,

/* TV Support functions */

   GALFN_SETTVPARAMS,
   GALFN_GETTVPARAMS,
   GALFN_SETTVTIMING,
   GALFN_GETTVTIMING,
   GALFN_SETENABLE,
   GALFN_GETENABLE,
   GALFN_ISTVMODESUPPORTED,

/* Video Support functions */

   GALFN_SETVIDEOENABLE,
   GALFN_SETVIDEOFORMAT,
   GALFN_SETVIDEOSIZE,
   GALFN_SETVIDEOOFFSET,
   GALFN_SETVIDEOWINDOW,
   GALFN_SETVIDEOSCALE,
   GALFN_SETVIDEOFILTER,
   GALFN_SETVIDEOCOLORKEY,
   GALFN_SETVIDEODOWNSCALEENABLE,
   GALFN_SETVIDEODOWNSCALECONFIG,
   GALFN_SETVIDEODOWNSCALECOEFF,
   GALFN_SETVIDEOSOURCE,
   GALFN_SETVIDEOINTERLACED,
   GALFN_SETVIDEOCURSOR,
   GALFN_SETVIDEOREQUEST,
   GALFN_SETALPHAENABLE,
   GALFN_SETALPHAWINDOW,
   GALFN_SETALPHAVALUE,
   GALFN_SETALPHAPRIORITY,
   GALFN_SETALPHACOLOR,
   GALFN_SETALPHAREGION,
   GALFN_SETVIDEOOUTSIDEALPHA,
   GALFN_SETVIDEOPALETTE,
   GALFN_GETVIDEOINFO,
   GALFN_SETVIDEOCOLORSPACE,

/* VIP Supported functions */

   GALFN_SETVIPENABLE,
   GALFN_SETVIPCAPTURERUNMODE,
   GALFN_SETVIPBASE,
   GALFN_SETVIPPITCH,
   GALFN_SETVIPMODE,
   GALFN_SETVIPBRTH,
   GALFN_SETVIPLASTLINE,
   GALFN_TESTVIPODDFIELD,
   GALFN_TESTVIPBASESUPDATED,
   GALFN_SETVBIENABLE,
   GALFN_SETVBIMODE,
   GALFN_SETVBIBASE,
   GALFN_SETVBIPITCH,
   GALFN_SETVBIDIRECT,
   GALFN_SETVBIINTERRUPT,
   GALFN_SETGENLOCKENABLE,
   GALFN_SETTOPLINEINODD,
   GALFN_SETGENLOCKDELAY,
   GALFN_SETMACROVISIONENABLE,

   GALFN_GETVIPENABLE,
   GALFN_GETVIPBASE,
   GALFN_GETVIPPITCH,
   GALFN_GETVIPMODE,
   GALFN_GETVIPBRTH,
   GALFN_GETVIPLINE,
   GALFN_GETVBIENABLE,
   GALFN_GETVBIBASE,
   GALFN_GETVBIPITCH,
   GALFN_GETVBIMODE,
   GALFN_GETVBIDIRECT,
   GALFN_GETVBIINTERRUPT,
   GALFN_TESTVIPFIFOOVERFLOW,

/* Second generation rendering routines */

   GALFN_SETICONENABLE,
   GALFN_SETICONCOLORS,
   GALFN_SETICONPOSITION,
   GALFN_SETICONSHAPE64,

   GALFN_SETSOURCESTRIDE,
   GALFN_SETDESTINATIONSTRIDE,
   GALFN_SETSOURCETRANSPARENCY,
   GALFN_SETPATTERNORIGIN,
   GALFN_GFX2SETALPHAMODE,
   GALFN_GFX2SETALPHAVALUE,
   GALFN_GFX2PATTERNFILL,
   GALFN_GFX2COLORPATTERNFILL,
   GALFN_GFX2SCREENTOSCREENBLT,
   GALFN_GFX2MONOEXPANDBLT,
   GALFN_GFX2COLORBMPTOSCRBLT,
   GALFN_GFX2MONOBMPTOSCRBLT,
   GALFN_GFX2TEXTBLT,
   GALFN_GFX2BRESENHAMLINE,
   GALFN_GFX2SYNCTOVBLANK,

/* Change/Get Video routines */

   GALFN_SETCOLORSPACEYUV,
   GALFN_SETVIDEOYUVPITCH,
   GALFN_SETVIDEOYUVOFFSETS,
   GALFN_SETVIDEOLEFTCROP,
   GALFN_SETVIDEOVERTICALDOWNSCALE,
   GALFN_SETVBISOURCE,
   GALFN_SETVBILINES,
   GALFN_SETVBITOTAL,
   GALFN_SETVSCALEROFFSET,

   GALFN_GETVBISOURCE,
   GALFN_GETVBILINES,
   GALFN_GETVBITOTAL,
   GALFN_GETVSCALEROFFSET,
   GALFN_GETVIDEOINTERLACED,
   GALFN_GETCOLORSPACEYUV,
   GALFN_GETGENLOCKENABLE,
   GALFN_GETGENLOCKDELAY,
   GALFN_GETVIDEOCURSOR,
   GALFN_READCRC,
   GALFN_READWINDOWCRC,
   GALFN_GETMACROVISIONENABLE,
   GALFN_GETALPHAENABLE,
   GALFN_GETALPHASIZE,
   GALFN_GETALPHAVALUE,
   GALFN_GETALPHAPRIORITY,
   GALFN_GETALPHACOLOR,
   GALFN_GETVIDEOYUVPITCH,
   GALFN_GETVIDEOYUVOFFSETS,

/* Additional VGA Support functions */

   GALFN_VGATESTPCI,
   GALFN_VGAGETPCICOMMAND,
   GALFN_VGASEQRESET,
   GALFN_VGASETGRAPHICSBITS,

/* This is last function supported.
 * If you want to define ioctl function. 
 * You should define before this function.
 * Update that the lastfunction supported to new value.
 */
   GALFN_LASTFUNCTION_SUPPORTED
}
GALFN_CODES;

/* end of GAL function list */

#define GAL_HEADER\
        DWORD  dwSignature;    /* Sign all structs with FBGAL_SIGNATURE    */\
        DWORD  dwSize;         /* Size of struct for that subfunction      */\
        DWORD  dwVersion;      /* Current version of the API               */\
        DWORD  dwSubfunction;  /* GAL subfunction                          */\
        DWORD  dwReturnValue;           /* Return value from subfunction */

/*
 * #define GALFN_PNLPOWERUP
 * #define GALFN_PNLPOWERDOWN
 */
typedef struct __GAL_BASE
{
GAL_HEADER}
GAL_BASE, *PGAL_BASE;

/*
 * #define GALFN_GETADAPTERINFO
 */
typedef struct __GAL_GETADAPTERINFO
{
   GAL_HEADER DWORD dwCPUVersion;
   DWORD dwCPUType;
   DWORD dwFrameBufferBase;
   DWORD dwFrameBufferSize;
   DWORD dwGfxRegisterBase;
   DWORD dwGpsRegisterBase;
   DWORD dwVidRegisterBase;
   DWORD dwVipRegisterBase;
   DWORD dwVideoVersion;
   DWORD dwMaxSupportedPixelClock;

}
GAL_ADAPTERINFO, *PGAL_ADAPTERINFO;

#define GAL_SOFTVGASTATE_ENABLE   1
#define GAL_SOFTVGASTATE_DISABLE  0
/*
 * #define GALFN_SOFTVGASTATE
 */
typedef struct __GAL_SOFTVGASTATE
{
   GAL_HEADER BOOLEAN bSoftVgaEnable;

}
GAL_SOFTVGASTATE, *PGAL_SOFTVGASTATE;

/*
 * #define GALFN_WAITUNTILIDLE
 */
typedef struct __GAL_WAITUNTILIDLE
{
GAL_HEADER}
GAL_WAITUNTILIDLE, *PGAL_WAITUNTILIDLE;

/*
 * #define GALFN_WAITVERTICALBLANK
 */
typedef struct __GAL_WAITVERTICALBLANK
{
GAL_HEADER}
GAL_WAITVERTICALBLANK, *PGAL_WAITVERTICALBLANK;

#define GAL_REG 0x1
#define GAL_VID 0x2
#define GAL_VIP 0x4
/*
 * #define GALFN_WRITEREG
 * #define GALFN_READREG
 */
typedef struct __GAL_HWACCESS
{
   GAL_HEADER DWORD dwType;
   DWORD dwOffset;
   DWORD dwValue;
   DWORD dwByteCount;

}
GAL_HWACCESS, *PGAL_HWACCESS;

/*
 * #define GALFN_ISDISPLAYMODESUPPORTED
 * #define GALFN_SETDISPLAYMODE
 * #define GALFN_GETDISPLAYMODE
 */
typedef struct __GAL_DISPLAYMODE
{
   GAL_HEADER WORD wXres;
   WORD wYres;
   WORD wBpp;
   WORD wRefresh;
   DWORD dwSupported;

}
GAL_DISPLAYMODE, *PGAL_DISPLAYMODE;

/*
 * #define GALFN_SETBPP
 * #define GALFN_GETBPP
 * #define GALFN_SETPITCH                  
 * #define GALFN_GETPITCH                  
 * #define GALFN_SETOFFSET                 
 * #define GALFN_GETOFFSET                 
 */
typedef struct __GAL_DISPLAYPARAMS
{
   GAL_HEADER DWORD dwOffset;
   WORD wBpp;
   WORD wPitch;

}
GAL_DISPLAYPARAMS, *PGAL_DISPLAYPARAMS;

/*
 * #define GALFN_DOTCLKTOREFRESH
 */
typedef struct __GAL_DOTCLKTOREFRESH
{
   GAL_HEADER DWORD dwDotClock;
   WORD wXres;
   WORD wYres;
   WORD wBpp;
   WORD wRefreshRate;

}
GAL_DOTCLKTOREFRESH, *PGAL_DOTCLKTOREFRESH;

/*
 * #define GALFN_GETDISPLAYTIMINGS
 * #define GALFN_SETDISPLAYTIMINGS
 */
typedef struct __GAL_DISPLAYTIMING
{
   GAL_HEADER DWORD dwDotClock;
   WORD wPitch;
   WORD wBpp;
   WORD wHTotal;
   WORD wHActive;
   WORD wHSyncStart;
   WORD wHSyncEnd;
   WORD wHBlankStart;
   WORD wHBlankEnd;
   WORD wVTotal;
   WORD wVActive;
   WORD wVSyncStart;
   WORD wVSyncEnd;
   WORD wVBlankStart;
   WORD wVBlankEnd;
   WORD wPolarity;

}
GAL_DISPLAYTIMING, *PGAL_DISPLAYTIMING;

/*
 * #define GALFN_SETPALETTE_ENTRY
 * #define GALFN_GETPALETTE_ENTRY
 */
typedef struct __GAL_PALETTE_ENTRY
{
   GAL_HEADER DWORD dwIndex;
   DWORD dwPalette;
}
GAL_PALETTE_ENTRY, *PGAL_PALETTE_ENTRY;

/*
 * #define GALFN_SETPALETTE
 * #define GALFN_GETPALETTE
 */
typedef struct __GAL_PALETTE
{
   GAL_HEADER DWORD dwColors[256];
}
GAL_PALETTE, *PGAL_PALETTE;

/*
 * #define GALFN_COMPRESSIONSTATE  
 */
typedef struct __GAL_COMPRESSIONSTATE
{
   GAL_HEADER BOOLEAN bCompressionState;
}
GAL_COMPRESSIONSTATE, *PGAL_COMPRESSIONSTATE;

#define GAL_COMPRESSION_ENABLE   1
#define GAL_COMPRESSION_DISABLE  0

#define GAL_COMPRESSION_OFFSET  1
#define GAL_COMPRESSION_PITCH   2
#define GAL_COMPRESSION_SIZE    4
#define GAL_COMPRESSION_ALL     7

/*
 * #define GALFN_COMPRESSIONPARAMS
 */
typedef struct __GAL_COMPRESSIONPARAMS
{
   GAL_HEADER DWORD dwFlags;
   DWORD dwCompOffset;
   WORD dwCompPitch;
   WORD dwCompSize;
}
GAL_COMPRESSIONPARAMS, *PGAL_COMPRESSIONPARAMS;

#define GAL_SETCURSORENABLE_ENABLE    1
#define GAL_SETCURSORENABLE_DISABLE   0
/*
 * #define GALFN_CURSORENABLE
 */
typedef struct __GAL_CURSORENABLE
{
   GAL_HEADER BOOLEAN bCursorEnable;
}
GAL_CURSORENABLE, *PGAL_CURSORENABLE;

/*
 * #define GALFN_CURSORPOSITION
 */
typedef struct __GAL_CURSORPOSITION
{
   GAL_HEADER DWORD dwMemOffset;
   WORD wXPos;
   WORD wYPos;
   WORD wXHot;
   WORD wYHot;
}
GAL_CURSORPOSITION, *PGAL_CURSORPOSITION;

/*
 * #define GALFN_SETCURSORSHAPE
 */
typedef struct __GAL_SETCURSORSHAPE
{
   GAL_HEADER DWORD dwMemOffset;
   DWORD dwAndMask[32];                 /* Most gfx hardware support only 32x32 */
   DWORD dwXorMask[32];
}
GAL_SETCURSORSHAPE, *PGAL_SETCURSORSHAPE;

/*
 * #define GALFN_SETCURSORCOLORS
 */
typedef struct __GAL_CURSORCOLORS
{
   GAL_HEADER DWORD dwBgColor;
   DWORD dwFgColor;
}
GAL_CURSORCOLORS, *PGAL_CURSORCOLORS;

/*
 * #define GALFN_SETSOLIDPATTERN
 */
typedef struct __GAL_SETSOLIDPATTERN
{
   GAL_HEADER DWORD dwColor;
}
GAL_SETSOLIDPATTERN, *PGAL_SETSOLIDPATTERN;

/*
 * #define GALFN_SETRASTEROPERATION
 */
typedef struct __GAL_SETRASTEROPERATION
{
   GAL_HEADER CHAR cRop;
}
GAL_RASTEROPERATION, *PGAL_RASTEROPERATION;

/*
 * #define GALFN_SETSOLIDSOURCE
 */
typedef struct __GAL_SETSOLIDSOURCE
{
   GAL_HEADER DWORD dwColor;
}
GAL_SETSOLIDSOURCE, *PGAL_SETSOLIDSOURCE;

/*
 * #define GALFN_PATTERNFILL
 */
typedef struct __GAL_PATTERNFILL
{
   GAL_HEADER WORD wXPos;
   WORD wYPos;
   WORD wWidth;
   WORD wHeight;
}
GAL_PATTERNFILL, *PGAL_PATTERNFILL;

/*
 * #define GALFN_SETMONOSOURCE
 */
typedef struct __GAL_SETMONOSOURCE
{
   GAL_HEADER DWORD dwBgColor;
   DWORD dwFgColor;
   CHAR cTransparency;
}
GAL_SETMONOSOURCE, *PGAL_SETMONOSOURCE;

/*
 * #define GALFN_SETMONOPATTERN
 */
typedef struct __GAL_SETMONOPATTERN
{
   GAL_HEADER DWORD dwBgColor;
   DWORD dwFgColor;
   DWORD dwData0;
   DWORD dwData1;
   CHAR cTransparency;
}
GAL_SETMONOPATTERN, *PGAL_SETMONOPATTERN;

/*
 * #define GALFN_SCREENTOSCREENBLT
 */
typedef struct __GAL_SCREENTOSCREENBLT
{
   GAL_HEADER WORD wXStart;
   WORD wYStart;
   WORD wXEnd;
   WORD wYEnd;
   WORD wWidth;
   WORD wHeight;
}
GAL_SCREENTOSCREENBLT, *PGAL_SCREENTOSCREENBLT;

/*
 * #define GALFN_SCREENTOSCREENXBLT
 */
typedef struct __GAL_SCREENTOSCREENXBLT
{
   GAL_HEADER WORD wXStart;
   WORD wYStart;
   WORD wXEnd;
   WORD wYEnd;
   WORD wWidth;
   WORD wHeight;
   DWORD dwColor;
}
GAL_SCREENTOSCREENXBLT, *PGAL_SCREENTOSCREENXBLT;

/*
 * #define GALFN_BRESENHAMLINE
 */
typedef struct __GAL_BRESENHAMLINE
{
   GAL_HEADER WORD wX1;
   WORD wY1;
   WORD wLength;
   WORD wErr;
   WORD wE1;
   WORD wE2;
   WORD wFlags;
}
GAL_BRESENHAMLINE, *PGAL_BRESENHAMLINE;

/*
 * #define GALFN_COLOR_PATTERNFILL
 */
typedef struct __GAL_COLOR_PATTERNFILL
{
   GAL_HEADER WORD wDsty;
   WORD wDstx;
   WORD wWidth;
   WORD wHeight;
   DWORD dwPattern;
}
GAL_COLOR_PATTERNFILL, *PGAL_COLOR_PATTERNFILL;

/*
 * #define GALFN_COLOR_BITMAP_TO_SCREEN_BLT
 */
typedef struct __GAL_COLOR_BITMAP_TO_SCREEN_BLT
{
   GAL_HEADER WORD wSrcx;
   WORD wSrcy;
   WORD wDstx;
   WORD wDsty;
   WORD wWidth;
   WORD wHeight;
   DWORD dwData;
   WORD wPitch;
}
GAL_COLOR_BITMAP_TO_SCREEN_BLT, *PGAL_COLOR_BITMAP_TO_SCREEN_BLT;

/*
 * #define GALFN_COLOR_BITMAP_TO_SCREEN_XBLT
 */
typedef struct __GAL_COLOR_BITMAP_TO_SCREEN_XBLT
{
   GAL_HEADER WORD wSrcx;
   WORD wSrcy;
   WORD wDstx;
   WORD wDsty;
   WORD wWidth;
   WORD wHeight;
   DWORD dwData;
   WORD wPitch;
   DWORD dwColor;
}
GAL_COLOR_BITMAP_TO_SCREEN_XBLT, *PGAL_COLOR_BITMAP_TO_SCREEN_XBLT;

/*
 * #define GALFN_MONO_BITMAP_TO_SCREEN_BLT
 */
typedef struct __GAL_MONO_BITMAP_TO_SCREEN_BLT
{
   GAL_HEADER WORD wSrcx;
   WORD wSrcy;
   WORD wDstx;
   WORD wDsty;
   WORD wWidth;
   WORD wHeight;
   DWORD dwData;
   WORD wPitch;
}
GAL_MONO_BITMAP_TO_SCREEN_BLT, *PGAL_MONO_BITMAP_TO_SCREEN_BLT;

/*
 * #define GALFN_TEXT_BLT
 */
typedef struct __GAL_TEXT_BLT
{
   GAL_HEADER WORD wDstx;
   WORD wDsty;
   WORD wWidth;
   WORD wHeight;
   DWORD dwData;
}
GAL_TEXT_BLT, *PGAL_TEXT_BLT;

 /*
  * * #define GALFN_VGAMODESWITCH 
  * * #define GALFN_VGACLEARCRTEXT
  * * #define GALFN_VGASETPITCH   
  * * #define GALFN_VGARESTORE
  * * #define GALFN_VGASAVE   
  * * #define GALFN_VGASETMODE
  */

typedef struct __GAL_VGAREGS
{
   int xsize;
   int ysize;
   int hz;
   int clock;
   unsigned char miscOutput;
   unsigned char stdCRTCregs[GFX_STD_CRTC_REGS];
   unsigned char extCRTCregs[GFX_EXT_CRTC_REGS];
}
GAL_VGAREGS, *PGAL_VGAREGS;

typedef struct __GAL_VGAMODEDATA
{
   GAL_HEADER DWORD dwFlags;            /* Flags for this subfunction */
   GAL_VGAREGS sVgaRegs;                /* CRT+SEQ+SEQ register data block */
   WORD wXres;
   WORD wYres;
   WORD wBpp;
   WORD wRefresh;
}
GAL_VGAMODEDATA, *PGAL_VGAMODEDATA;

typedef struct __GAL_VGATESTPCI
{
   GAL_HEADER SWORD softvga;
}
GAL_VGATESTPCI, *PGAL_VGATESTPCI;

typedef struct __GAL_VGAGETPCICOMMAND
{
   GAL_HEADER unsigned char value;
}
GAL_VGAGETPCICOMMAND, *PGAL_VGAGETPCICOMMAND;

typedef struct __GAL_VGASEQRESET
{
   GAL_HEADER SWORD reset;
   SWORD statusok;
}
GAL_VGASEQRESET, *PGAL_VGASEQRESET;

typedef struct __GAL_VGASETGRAPHICSBITS
{
   GAL_HEADER SWORD statusok;
}
GAL_VGASETGRAPHICSBITS, *PGAL_VGASETGRAPHICSBITS;

/******** Panel Support functions *********************/
/*
* #define GALFN_PNLSETPARAMS
* #define GALFN_PNLGETPARAMS
* #define GALFN_PNLINITPANEL
* #define GALFN_PNLSAVESTATE
* #define GALFN_PNLRESTORESTATE
*/
typedef struct __GAL_PNLPARAMS
{
   GAL_HEADER Pnl_PanelParams PanelParams;
}
GAL_PNLPARAMS, *PGAL_PNLPARAMS;

/*
* #define GALFN_PNLBIOSENABLE
* #define GALFN_PNLBIOSINFO
*/
typedef struct __GAL_PNLBIOS
{
   GAL_HEADER int state;
   int XRes;
   int YRes;
   int Bpp;
   int Freq;
}
GAL_PNLBIOS, *PGAL_PNLBIOS;

typedef struct __GAL_ENABLEPANNING
{
   GAL_HEADER int x;
   int y;
}
GAL_ENABLEPANNING, *PGAL_ENABLEPANNING;

/*
 * #define GALFN_SETCRTENABLE
 * #define GALFN_GETCRTENABLE
 */
typedef struct __GAL_CRTENABLE
{
   GAL_HEADER WORD wCrtEnable;
}
GAL_CRTENABLE, *PGAL_CRTENABLE;

#define GAL_TVSTATE       0x01
#define GAL_TVOUTPUT      0x02
#define GAL_TVFORMAT      0x04
#define GAL_TVRESOLUTION  0x08
#define GAL_TVALL         0x0F
/*
 * #define GALFN_SETTVPARAMS
 * #define GALFN_GETTVPARAMS
 * #define GALFN_SETENABLE
 * #define GALFN_GETENABLE
 * #define GALFN_ISTVMODESUPPORTED
 */
typedef struct __GAL_TVPARAMS
{
   GAL_HEADER DWORD dwFlags;
   WORD wWidth;
   WORD wHeight;
   WORD wStandard;
   WORD wType;
   WORD wOutput;
   WORD wResolution;
   BOOLEAN bState;

}
GAL_TVPARAMS, *PGAL_TVPARAMS;

/*
 * #define GALFN_SETTVTIMING
 * #define GALFN_GETTVTIMING
 */
typedef struct __GAL_TVTIMING
{
   GAL_HEADER DWORD dwFlags;            /* not used currently */
   unsigned long HorzTim;
   unsigned long HorzSync;
   unsigned long VertSync;
   unsigned long LineEnd;
   unsigned long VertDownscale;
   unsigned long HorzScaling;
   unsigned long TimCtrl1;
   unsigned long TimCtrl2;
   unsigned long Subfreq;
   unsigned long DispPos;
   unsigned long DispSize;
   unsigned long Debug;
   unsigned long DacCtrl;
   unsigned long DotClock;
}
GAL_TVTIMING, *PGAL_TVTIMING;

/******** Video Support functions *********************/

typedef struct __GAL_SETVIDEOENABLE
{
   GAL_HEADER BOOLEAN enable;
}
GAL_VIDEOENABLE, *PGAL_VIDEOENABLE;

typedef struct __GAL_SETVIDEOFORMAT
{
   GAL_HEADER int format;
}
GAL_VIDEOFORMAT, *PGAL_VIDEOFORMAT;

typedef struct __GAL_SETVIDEOSIZE
{
   GAL_HEADER unsigned short width;
   unsigned short height;
}
GAL_VIDEOSIZE, *PGAL_VIDEOSIZE;

typedef struct __GAL_SETVIDEOOFFSET
{
   GAL_HEADER unsigned long offset;
}
GAL_VIDEOOFFSET, *PGAL_VIDEOOFFSET;

typedef struct __GAL_SETVIDEOWINDOW
{
   GAL_HEADER short x;
   short y;
   short w;
   short h;
}
GAL_VIDEOWINDOW, *PGAL_VIDEOWINDOW;

typedef struct __GAL_SETVIDEOSCALE
{
   GAL_HEADER unsigned short srcw;
   unsigned short srch;
   unsigned short dstw;
   unsigned short dsth;
}
GAL_VIDEOSCALE, *PGAL_VIDEOSCALE;

typedef struct __GAL_SETVIDEOFILTER
{
   GAL_HEADER int xfilter;
   int yfilter;
}
GAL_VIDEOFILTER, *PGAL_VIDEOFILTER;

typedef struct __GAL_SETVIDEOCOLORKEY
{
   GAL_HEADER unsigned long key;
   unsigned long mask;
   int bluescreen;
}
GAL_VIDEOCOLORKEY, *PGAL_VIDEOCOLORKEY;

typedef struct __GAL_SETVIDEODOWNSCALEENABLE
{
   GAL_HEADER int enable;
}
GAL_VIDEODOWNSCALEENABLE, *PGAL_VIDEODOWNSCALEENABLE;

typedef struct __GAL_SETVIDEODOWNSCALECONFIG
{
   GAL_HEADER unsigned short type;
   unsigned short m;
}
GAL_VIDEODOWNSCALECONFIG, *PGAL_VIDEODOWNSCALECONFIG;

typedef struct __GAL_SETVIDEODOWNSCALECOEFF
{
   GAL_HEADER unsigned short coef1;
   unsigned short coef2;
   unsigned short coef3;
   unsigned short coef4;
}
GAL_VIDEODOWNSCALECOEFF, *PGAL_VIDEODOWNSCALECOEFF;

#define GAL_VIDEO_SOURCE_MEMORY 0x0
#define GAL_VIDEO_SOURCE_DVIP   0x1
typedef struct __GAL_SETVIDEOSOURCE
{
   GAL_HEADER int source;
}
GAL_VIDEOSOURCE, *PGAL_VIDEOSOURCE;

typedef struct __GAL_SETVIDEOINTERLACED
{
   GAL_HEADER int enable;
}
GAL_SETVIDEOINTERLACED, *PGAL_SETVIDEOINTERLACED;

typedef struct __GAL_GETVIDEOINTERLACED
{
   GAL_HEADER int interlaced;
}
GAL_GETVIDEOINTERLACED, *PGAL_GETVIDEOINTERLACED;

typedef struct __GAL_COLORSPACEYUV
{
   GAL_HEADER int colorspace;
}
GAL_COLORSPACEYUV, *PGAL_COLORSPACEYUV;

typedef struct __GAL_SETGENLOCKENABLE
{
   GAL_HEADER int enable;
}
GAL_GENLOCKENABLE, *PGAL_GENLOCKENABLE;

typedef struct __GAL_SETGENLOCKDELAY
{
   GAL_HEADER int delay;
}
GAL_GENLOCKDELAY, *PGAL_GENLOCKDELAY;

typedef struct __GAL_SETTOPLINEINODD
{
   GAL_HEADER int enable;
}
GAL_TOPLINEINODD, *PGAL_TOPLINEINODD;

typedef struct __GAL_SETVIDEOCURSOR
{
   GAL_HEADER unsigned long key;
   unsigned long mask;
   unsigned short select_color2;
   unsigned long color1;
   unsigned long color2;
}
GAL_VIDEOCURSOR, *PGAL_VIDEOCURSOR;

typedef struct __GAL_READCRC
{
   GAL_HEADER DWORD crc;
}
GAL_READCRC, *PGAL_READCRC;

typedef struct __GAL_READWINDOWCRC
{
   GAL_HEADER SWORD source;
   WORD x;
   WORD y;
   WORD width;
   WORD height;
   SWORD crc32;
   DWORD crc;
}
GAL_READWINDOWCRC, *PGAL_READWINDOWCRC;

typedef struct __GAL_GETALPHASIZE
{
   GAL_HEADER WORD * x;
   WORD *y;
   WORD *width;
   WORD *height;
}
GAL_ALPHASIZE, *PGAL_ALPHASIZE;

typedef struct __GAL_SETMACROVISIONENABLE
{
   GAL_HEADER SWORD enable;
}
GAL_MACROVISIONENABLE, *PGAL_MACROVISIONENABLE;

typedef struct __GAL_SETVIDEOREQUEST
{
   GAL_HEADER short x;
   short y;
}
GAL_VIDEOREQUEST, *PGAL_VIDEOREQUEST;

typedef struct __GAL_ALPHAENABLE
{
   GAL_HEADER int enable;
}
GAL_ALPHAENABLE, *PGAL_ALPHAENABLE;

typedef struct __GAL_SETALPHAWINDOW
{
   GAL_HEADER short x;
   short y;
   unsigned short width;
   unsigned short height;
}
GAL_ALPHAWINDOW, *PGAL_ALPHAWINDOW;

typedef struct __GAL_ALPHAVALUE
{
   GAL_HEADER unsigned char alpha;
   char delta;
}
GAL_ALPHAVALUE, *PGAL_ALPHAVALUE;

typedef struct __GAL_ALPHAPRIORITY
{
   GAL_HEADER int priority;
}
GAL_ALPHAPRIORITY, *PGAL_ALPHAPRIORITY;

typedef struct __GAL_ALPHACOLOR
{
   GAL_HEADER unsigned long color;
}
GAL_ALPHACOLOR, *PGAL_ALPHACOLOR;

typedef struct __GAL_SETALPHAREGION
{
   GAL_HEADER int region;
}
GAL_ALPHAREGION, *PGAL_ALPHAREGION;

typedef struct __GAL_SETVIDEOOUTSIDEALPHA
{
   GAL_HEADER int enable;
}
GAL_VIDEOOUTSIDEALPHA, *PGAL_VIDEOOUTSIDEALPHA;

typedef struct __GAL_SETVIDEOPALETTE
{
   GAL_HEADER int identity;
   unsigned long palette[256];
}
GAL_VIDEOPALETTE, *PGAL_VIDEOPALETTE;

typedef struct __GAL_VIDEOINFO
{
   GAL_HEADER int enable;
   int format;
   int filter;

   unsigned long src_size;
   unsigned long dst_size;
   unsigned long line_size;
   unsigned long xclip;
   unsigned long offset;
   unsigned long scale;
   unsigned long position;

   int color_key_src;
   unsigned long color_key;
   unsigned long color_key_mask;

   int downscale_enable;

   unsigned short downscale_type;

   unsigned short downscale_mask;
   unsigned short downscale_coef1;
   unsigned short downscale_coef2;
   unsigned short downscale_coef3;
   unsigned short downscale_coef4;
}
GAL_VIDEOINFO, *PGAL_VIDEOINFO;

/* ICON related data strucures */
typedef struct __GAL_SETICONENABLE
{
   GAL_HEADER SWORD enable;
}
GAL_ICONENABLE, *PGAL_ICONENABLE;

typedef struct __GAL_SETICONCOLORS
{
   GAL_HEADER DWORD color0;
   DWORD color1;
   DWORD color2;
}
GAL_ICONCOLORS, *PGAL_ICONCOLORS;

typedef struct __GAL_SETICONPOSITION
{
   GAL_HEADER DWORD memoffset;
   WORD xpos;
}
GAL_ICONPOSITION, *PGAL_ICONPOSITION;

typedef struct __GAL_SETICONSHAPE64
{
   GAL_HEADER DWORD memoffset;
   DWORD *andmask;
   DWORD *xormask;
   DWORD lines;
}
GAL_ICONSHAPE64, *PGAL_ICONSHAPE64;

/* VIP related data strucures */

typedef struct __GAL_SETVIPENABLE
{
   GAL_HEADER SWORD enable;
}
GAL_VIPENABLE, *PGAL_VIPENABLE;

typedef struct __GAL_SETVIPCAPTURERUNMODE
{
   GAL_HEADER SWORD mode;
}
GAL_VIPCAPTURERUNMODE, *PGAL_VIPCAPTURERUNMODE;

typedef struct __GAL_SETVIPBASE
{
   GAL_HEADER DWORD even;
   DWORD odd;
   DWORD address;
}
GAL_VIPBASE, *PGAL_VIPBASE;

typedef struct __GAL_SETVIPPITCH
{
   GAL_HEADER DWORD pitch;
}
GAL_VIPPITCH, *PGAL_VIPPITCH;

typedef struct __GAL_SETVIPMODE
{
   GAL_HEADER SWORD mode;
}
GAL_VIPMODE, *PGAL_VIPMODE;

typedef struct __GAL_SETVIPBUS_RTH
{
   GAL_HEADER SWORD enable;
}
GAL_VIPBUS_RTH, *PGAL_VIPBUS_RTH;

typedef struct __GAL_SETVIPLASTLINE
{
   GAL_HEADER SWORD last_line;
}
GAL_VIPLASTLINE, *PGAL_VIPLASTLINE;

typedef struct __GAL_TESTVIPODDFIELD
{
   GAL_HEADER SWORD status;
}
GAL_TESTVIPODDFIELD, *PGAL_TESTVIPODDFIELD;

typedef struct __GAL_TESTVIPBASESUPDATED
{
   GAL_HEADER SWORD status;
}
GAL_TESTVIPBASESUPDATED, *PGAL_TESTVIPBASESUPDATED;

typedef struct __GAL_TESTVIPFIFOOVERFLOW
{
   GAL_HEADER SWORD status;
}
GAL_TESTVIPOVERFLOW, *PGAL_TESTVIPOVERFLOW;

typedef struct __GAL_GETVIPLINE
{
   GAL_HEADER SWORD status;
}
GAL_VIPLINE, *PGAL_VIPLINE;

/* VBI related data strucures */

typedef struct __GAL_VBIENABLE
{
   GAL_HEADER SWORD enable;
}
GAL_VBIENABLE, *PGAL_VBIENABLE;

typedef struct __GAL_VBIBASE
{
   GAL_HEADER DWORD even;
   DWORD odd;
   DWORD address;
}
GAL_VBIBASE, *PGAL_VBIBASE;

typedef struct __GAL_VBIPITCH
{
   GAL_HEADER DWORD pitch;
}
GAL_VBIPITCH, *PGAL_VBIPITCH;

typedef struct __GAL_VBIMODE
{
   GAL_HEADER SWORD mode;
}
GAL_VBIMODE, *PGAL_VBIMODE;

typedef struct __GAL_SETVBIDIRECT
{
   GAL_HEADER DWORD even_lines;
   DWORD odd_lines;
}
GAL_SETVBIDIRECT, *PGAL_SETVBIDIRECT;

typedef struct __GAL_GETVBIDIRECT
{
   GAL_HEADER SWORD odd;
   DWORD direct_lines;
}
GAL_GETVBIDIRECT, *PGAL_GETVBIDIRECT;

typedef struct __GAL_VBIINTERRUPT
{
   GAL_HEADER SWORD enable;
}
GAL_VBIINTERRUPT, *PGAL_VBIINTERRUPT;

/* Second generation rendering routines data structures */

typedef struct __GAL_SETSTRIDE
{
   GAL_HEADER WORD stride;
}
GAL_STRIDE, *PGAL_STRIDE;

typedef struct __GAL_SETPATTERNORIGIN
{
   GAL_HEADER int x;
   int y;
}
GAL_PATTERNORIGIN, *PGAL_PATTERNORIGIN;

typedef struct __GAL_SETSOURCETRANSPARENCY
{
   GAL_HEADER DWORD color;
   DWORD mask;
}
GAL_SOURCETRANSPARENCY, *PGAL_SOURCETRANSPARENCY;

typedef struct __GAL_GFX2SETALPHAMODE
{
   GAL_HEADER SWORD mode;
}
GAL_GFX2ALPHAMODE, *PGAL_GFX2ALPHAMODE;

typedef struct __GAL_GFX2SETALPHAVALUE
{
   GAL_HEADER CHAR value;
}
GAL_GFX2ALPHAVALUE, *PGAL_GFX2ALPHAVALUE;

typedef struct __GAL_GFX2PATTERNFILL
{
   GAL_HEADER DWORD dstoffset;
   WORD width;
   WORD height;
}
GAL_GFX2PATTERNFILL, *PGAL_GFX2PATTERNFILL;

typedef struct __GAL_GFX2COLORPATTERNFILL
{
   GAL_HEADER DWORD dstoffset;
   WORD width;
   WORD height;
   DWORD pattern;
}
GAL_GFX2COLORPATTERNFILL, *PGAL_GFX2COLORPATTERNFILL;

typedef struct __GAL_GFX2SCREENTOSCREENBLT
{
   GAL_HEADER DWORD srcoffset;
   DWORD dstoffset;
   WORD width;
   WORD height;
   SWORD flags;
}
GAL_GFX2SCREENTOSCREENBLT, *PGAL_GFX2SCREENTOSCREENBLT;

typedef struct __GAL_GFX2MONOEXPANDBLT
{
   GAL_HEADER unsigned long srcbase;
   WORD srcx;
   WORD srcy;
   DWORD dstoffset;
   WORD width;
   WORD height;
   WORD byte_packed;
}
GAL_GFX2MONOEXPANDBLT, *PGAL_GFX2MONOEXPANDBLT;

typedef struct __GAL_GFX2COLORBMPTOSCRBLT
{
   GAL_HEADER WORD srcx;
   WORD srcy;
   DWORD dstoffset;
   WORD width;
   WORD height;
   DWORD data;
   WORD pitch;
}
GAL_GFX2COLORBMPTOSCRBLT, *PGAL_GFX2COLORBMPTOSCRBLT;

typedef struct __GAL_GFX2MONOBMPTOSCRBLT
{
   GAL_HEADER WORD srcbase;
   WORD srcx;
   WORD srcy;
   DWORD dstoffset;
   WORD width;
   WORD height;
   DWORD data;
   WORD pitch;
}
GAL_GFX2MONOBMPTOSCRBLT, *PGAL_GFX2MONOBMPTOSCRBLT;

typedef struct __GAL_GFX2TEXTBLT
{
   GAL_HEADER DWORD dstoffset;
   WORD width;
   WORD height;
   DWORD data;
}
GAL_GFX2TEXTBLT, *PGAL_GFX2TEXTBLT;

typedef struct __GAL_GFX2BRESENHAMLINE
{
   GAL_HEADER DWORD dstoffset;
   WORD length;
   WORD initerr;
   WORD axialerr;
   WORD diagerr;
   WORD flags;
}
GAL_GFX2BRESENHAMLINE, *PGAL_GFX2BRESENHAMLINE;

typedef struct __GAL_GFX2SYNCTOVBLANK
{
GAL_HEADER}
GAL_GFX2SYNCTOVBLANK, *PGAL_GFX2SYNCTOVBLANK;

/*
 GALFN_SETVIDEOYUVPITCH
 */
typedef struct _GAL_SETVIDEOYUVPITCH
{
   GAL_HEADER unsigned long y_pitch;
   unsigned long uv_pitch;
}
GAL_VIDEOYUVPITCH, *PGAL_VIDEOYUVPITCH;

/*
  GALFN_SETVIDEOYUVOFFSETS
*/
typedef struct _GAL_VIDEOYUVOFFSETS
{
   GAL_HEADER unsigned long dwYoffset;
   unsigned long dwUoffset;
   unsigned long dwVoffset;
}
GAL_VIDEOYUVOFFSETS, *PGAL_VIDEOYUVOFFSETS;

typedef struct __GAL_SETVIDEOLEFTCROP
{
   GAL_HEADER WORD x;
   SWORD status;
}
GAL_VIDEOLEFTCROP, *PGAL_VIDEOLEFTCROP;

typedef struct __GAL_SETVIDEOVERTICALDOWNSCALE
{
   GAL_HEADER WORD srch;
   WORD dsth;
   SWORD status;
}
GAL_VIDEOVERTICALDOWNSCALE, *PGAL_VIDEOVERTICALDOWNSCALE;

typedef struct __GAL_VBISOURCE
{
   GAL_HEADER VideoSourceType source;
   SWORD status;
}
GAL_VBISOURCE, *PGAL_VBISOURCE;

typedef struct __GAL_VBILINES
{
   GAL_HEADER DWORD even;
   DWORD odd;
   SWORD status;
   DWORD lines;
}
GAL_VBILINES, *PGAL_VBILINES;

typedef struct __GAL_VBITOTAL
{
   GAL_HEADER DWORD even;
   DWORD odd;
   SWORD status;
   DWORD total;
}
GAL_VBITOTAL, *PGAL_VBITOTAL;

typedef struct __GAL_VSCALEROFFSET
{
   GAL_HEADER char offset;
   SWORD status;
}
GAL_VSCALEROFFSET, *PGAL_VSCALEROFFSET;

/* MSR  data strucures */

typedef struct __GAL_IDMSRDEVICE
{
   GAL_HEADER MSR * pDev;
   DWORD address;
   DEV_STATUS dev_status;
}
GAL_IDMSRDEVICE, *PGAL_IDMSRDEVICE;

typedef struct __GAL_GETMSRDEVADDRESS
{
   GAL_HEADER WORD device;
   unsigned long address;
   DEV_STATUS dev_status;
}
GAL_GETMSRDEVADDRESS, *PGAL_GETMSRDEVADDRESS;

typedef struct __GAL_GETMBUSIDATADDRESS
{
   GAL_HEADER unsigned int device;
   unsigned long address;
   DEV_STATUS dev_status;
}
GAL_GETMBUSIDATADDRESS, *PGAL_GETMBUSIDATADDRESS;

/* Gal device function's prototye declarations */

/** Init **********************************************************/
BOOLEAN Gal_initialize_interface(void);
BOOLEAN Gal_cleanup_interface(void);
BOOLEAN Gal_get_adapter_info(PGAL_ADAPTERINFO pAdapterInfo);
BOOLEAN Gal_set_softvga_state(BOOLEAN);
BOOLEAN Gal_get_softvga_state(int *bState);
BOOLEAN Gal_set_crt_enable(int);
BOOLEAN Gal_wait_until_idle(void);
BOOLEAN Gal_wait_vertical_blank(void);
BOOLEAN Gal_write_register(int type, unsigned long offset,
                           unsigned long value, int size);

BOOLEAN Gal_read_register(int type, unsigned long offset,
                          unsigned long *value, int size);
/** Display Engine ******************************************************/
BOOLEAN Gal_is_display_mode_supported(int xres, int yres, int bpp, int hz,
                                      int *supported);
BOOLEAN Gal_set_display_mode(int xres, int yres, int bpp, int hz);
BOOLEAN Gal_get_display_mode(int *xres, int *yres, int *bpp, int *hz);
BOOLEAN Gal_set_bpp(unsigned short bpp);
BOOLEAN Gal_set_display_bpp(unsigned short bpp);
BOOLEAN Gal_get_display_bpp(unsigned short *bpp);
BOOLEAN Gal_set_display_pitch(unsigned short pitch);
BOOLEAN Gal_get_display_pitch(unsigned short *pitch);
BOOLEAN Gal_set_display_offset(unsigned long offset);
BOOLEAN Gal_get_display_offset(unsigned long *offset);
BOOLEAN Gal_get_refreshrate_from_dotclock(int xres, int yres, int bpp,
                                          int *hz, unsigned long frequency);
BOOLEAN Gal_get_display_timing(PGAL_DISPLAYTIMING pDisplayTiming);
BOOLEAN Gal_set_display_timing(PGAL_DISPLAYTIMING pDisplayTiming);
BOOLEAN Gal_set_fixed_timings(int pnlXres, int pnlYres, int totXres,
                              int totYres, int bpp);
BOOLEAN Gal_set_display_palette_entry(unsigned long index,
                                      unsigned long palette);
BOOLEAN Gal_get_display_palette_entry(unsigned long index,
                                      unsigned long *palette);
BOOLEAN Gal_set_display_palette(PGAL_PALETTE);
BOOLEAN Gal_get_display_palette(PGAL_PALETTE);
BOOLEAN Gal_set_cursor_enable(int enable);
BOOLEAN Gal_get_cursor_enable(int *enable);
BOOLEAN Gal_set_cursor_colors(unsigned long bkcolor, unsigned long fgcolor);
BOOLEAN Gal_get_cursor_colors(unsigned long *bkcolor, unsigned long *fgcolor);
BOOLEAN Gal_set_cursor_position(unsigned long memoffset,
                                unsigned short xpos, unsigned short ypos,
                                unsigned short xhotspot,
                                unsigned short yhotspot);
BOOLEAN Gal_get_cursor_position(unsigned long *memoffset,
                                unsigned short *xpos, unsigned short *ypos,
                                unsigned short *xhotspot,
                                unsigned short *yhotspot);
BOOLEAN Gal_set_cursor_shape32(unsigned long memoffset,
                               unsigned long *andmask,
                               unsigned long *xormask);

BOOLEAN Gal_set_cursor_shape64(unsigned long memoffset,
                               unsigned long *andmask,
                               unsigned long *xormask);

/** Render ********************************************************/
BOOLEAN Gal_set_solid_pattern(unsigned long color);

BOOLEAN Gal_set_mono_source(unsigned long bgcolor, unsigned long fgcolor,
                            unsigned char transparency);
BOOLEAN Gal_set_mono_pattern(unsigned long bgcolor, unsigned long fgcolor,
                             unsigned long data0, unsigned long data1,
                             unsigned char transparency);

BOOLEAN Gal_set_raster_operation(unsigned char rop);

BOOLEAN Gal_pattern_fill(unsigned short x, unsigned short y,
                         unsigned short width, unsigned short height);

BOOLEAN Gal_set_solid_source(unsigned long color);

BOOLEAN Gal_screen_to_screen_blt(unsigned short srcx, unsigned short srcy,
                                 unsigned short dstx, unsigned short dsty,
                                 unsigned short width, unsigned short height);

BOOLEAN Gal_screen_to_screen_xblt(unsigned short srcx,
                                  unsigned short srcy,
                                  unsigned short dstx,
                                  unsigned short dsty,
                                  unsigned short width,
                                  unsigned short height, unsigned long color);

BOOLEAN Gal_bresenham_line(unsigned short x, unsigned short y,
                           unsigned short length, unsigned short initerr,
                           unsigned short axialerr, unsigned short diagerr,
                           unsigned short flags);

BOOLEAN Gal_color_pattern_fill(unsigned short x, unsigned short y,
                               unsigned short width, unsigned short height,
                               unsigned long pattern);

BOOLEAN Gal_color_bitmap_to_screen_blt(unsigned short srcx,
                                       unsigned short srcy,
                                       unsigned short dstx,
                                       unsigned short dsty,
                                       unsigned short width,
                                       unsigned short height,
                                       unsigned long data, long pitch);

BOOLEAN Gal_color_bitmap_to_screen_xblt(unsigned short srcx,
                                        unsigned short srcy,
                                        unsigned short dstx,
                                        unsigned short dsty,
                                        unsigned short width,
                                        unsigned short height,
                                        unsigned long data, long pitch,
                                        unsigned long color);

BOOLEAN Gal_mono_bitmap_to_screen_blt(unsigned short srcx,
                                      unsigned short srcy,
                                      unsigned short dstx,
                                      unsigned short dsty,
                                      unsigned short width,
                                      unsigned short height,
                                      unsigned long data, short pitch);

BOOLEAN Gal_text_blt(unsigned short dstx, unsigned short dsty,
                     unsigned short width, unsigned short height,
                     unsigned long data);

/** Compression*******************************************************/
BOOLEAN Gal_set_compression_enable(BOOLEAN);
BOOLEAN Gal_get_compression_enable(int *flag);
BOOLEAN Gal_set_compression_parameters(unsigned long flags,
                                       unsigned long offset,
                                       unsigned short pitch,
                                       unsigned short size);
BOOLEAN Gal_get_compression_parameters(unsigned long flags,
                                       unsigned long *offset,
                                       unsigned short *pitch,
                                       unsigned short *size);

/** VGA **********************************************************/
BOOLEAN Gal_vga_mode_switch(int active);
BOOLEAN Gal_vga_clear_extended(void);
BOOLEAN Gal_vga_pitch(PGAL_VGAMODEDATA pvregs, unsigned short pitch);
BOOLEAN Gal_vga_restore(PGAL_VGAMODEDATA pvregs);
BOOLEAN Gal_vga_save(PGAL_VGAMODEDATA pvregs);
BOOLEAN Gal_vga_mode(PGAL_VGAMODEDATA pvregs);
BOOLEAN Gal_vga_test_pci(int *softvga);
BOOLEAN Gal_vga_get_pci_command(unsigned char *value);
BOOLEAN Gal_vga_seq_reset(int reset);
BOOLEAN Gal_vga_set_graphics_bits(void);

/** Panel **********************************************************/
BOOLEAN Gal_pnl_set_params(unsigned long flags, PPnl_PanelParams pParam);
BOOLEAN Gal_pnl_get_params(unsigned long flags, PPnl_PanelParams pParam);
BOOLEAN Gal_pnl_init(PPnl_PanelParams pParam);
BOOLEAN Gal_pnl_save(void);
BOOLEAN Gal_pnl_restore(void);
BOOLEAN Gal_pnl_powerup(void);
BOOLEAN Gal_pnl_powerdown(void);
BOOLEAN Gal_enable_panning(int x, int y);
BOOLEAN Gal_pnl_enabled_in_bios(int *state);
BOOLEAN Gal_pnl_info_from_bios(int *xres, int *yres, int *bpp, int *hz);

/** TV **********************************************************/
BOOLEAN Gal_tv_set_params(unsigned long flags, PGAL_TVPARAMS pTV);
BOOLEAN Gal_tv_get_params(unsigned long flags, PGAL_TVPARAMS pTV);
BOOLEAN Gal_tv_set_timings(unsigned long flags, PGAL_TVTIMING pTV);
BOOLEAN Gal_tv_get_timings(unsigned long flags, PGAL_TVTIMING pTV);
BOOLEAN Gal_set_tv_enable(int bState);
BOOLEAN Gal_get_tv_enable(unsigned int *bState);
BOOLEAN Gal_is_tv_mode_supported(unsigned long flags, PGAL_TVPARAMS pTV,
                                 int *bState);

/** Video **********************************************************/
BOOLEAN Gal_set_video_enable(int enable);
BOOLEAN Gal_set_video_format(int format);
BOOLEAN Gal_set_video_size(unsigned short width, unsigned short height);
BOOLEAN Gal_set_video_offset(unsigned long offset);
BOOLEAN Gal_set_video_yuv_offsets(unsigned long yoffset,
                                  unsigned long uoffset,
                                  unsigned long voffset);
BOOLEAN Gal_set_video_yuv_pitch(unsigned long ypitch, unsigned long uvpitch);

BOOLEAN Gal_set_video_window(short x, short y, short w, short h);
BOOLEAN Gal_set_video_scale(unsigned short srcw, unsigned short srch,
                            unsigned short dstw, unsigned short dsth);
BOOLEAN Gal_set_video_filter(int xfilter, int yfilter);
BOOLEAN Gal_set_video_color_key(unsigned long key,
                                unsigned long mask, int bluescreen);
BOOLEAN Gal_set_video_downscale_enable(int enable);
BOOLEAN Gal_set_video_downscale_config(unsigned short type, unsigned short m);
BOOLEAN Gal_set_video_downscale_coefficients(unsigned short coef1,
                                             unsigned short coef2,
                                             unsigned short coef3,
                                             unsigned short coef4);
BOOLEAN Gal_set_video_source(int source);
BOOLEAN Gal_set_video_interlaced(int enable);
BOOLEAN Gal_get_video_interlaced(int *interlaced);
BOOLEAN Gal_set_color_space_YUV(int enable);
BOOLEAN Gal_get_color_space_YUV(int *colorspace);
BOOLEAN Gal_set_video_cursor(unsigned long key,
                             unsigned long mask,
                             unsigned short select_color2,
                             unsigned long color1, unsigned long color2);
BOOLEAN Gal_get_video_cursor(unsigned long *key,
                             unsigned long *mask,
                             unsigned short *select_color2,
                             unsigned long *color1, unsigned long *color2);
BOOLEAN Gal_set_video_request(short x, short y);
BOOLEAN Gal_set_alpha_enable(int enable);
BOOLEAN Gal_get_alpha_enable(int *enable);
BOOLEAN Gal_get_alpha_size(unsigned short *x, unsigned short *y,
                           unsigned short *width, unsigned short *height);

BOOLEAN Gal_set_video_request(short x, short y);
BOOLEAN Gal_set_alpha_window(short x, short y,
                             unsigned short width, unsigned short height);
BOOLEAN Gal_set_alpha_value(unsigned char alpha, char delta);
BOOLEAN Gal_get_alpha_value(unsigned char *alpha, char *delta);
BOOLEAN Gal_set_alpha_priority(int priority);
BOOLEAN Gal_get_alpha_priority(int *priority);
BOOLEAN Gal_set_alpha_color(unsigned long color);
BOOLEAN Gal_get_alpha_color(unsigned long *color);
BOOLEAN Gal_select_alpha_region(int region);
BOOLEAN Gal_set_video_outside_alpha(int enable);
BOOLEAN Gal_set_video_palette(unsigned long *palette);

/* Icon related prototypes */

BOOLEAN Gal_set_icon_enable(int enable);
BOOLEAN Gal_set_icon_colors(unsigned long color0, unsigned long color1,
                            unsigned long color2);

BOOLEAN Gal_set_icon_position(unsigned long memoffset, unsigned short xpos);
BOOLEAN Gal_set_icon_shape64(unsigned long memoffset, unsigned long *andmask,
                             unsigned long *xormask, unsigned int lines);

/* Icon related prototypes */

BOOLEAN Gal_set_vip_enable(int enable);
BOOLEAN Gal_get_vip_enable(int *enable);
BOOLEAN Gal_set_vip_capture_run_mode(int mode);
BOOLEAN Gal_set_vip_base(unsigned long even, unsigned long odd);
BOOLEAN Gal_get_vip_base(unsigned long *address, int odd);
BOOLEAN Gal_set_vip_pitch(unsigned long pitch);
BOOLEAN Gal_get_vip_pitch(unsigned long *pitch);
BOOLEAN Gal_set_vip_mode(int mode);
BOOLEAN Gal_get_vip_mode(int *mode);
BOOLEAN Gal_set_vbi_enable(int enable);
BOOLEAN Gal_get_vbi_enable(int *enable);
BOOLEAN Gal_set_vbi_mode(int mode);
BOOLEAN Gal_get_vbi_mode(int *mode);
BOOLEAN Gal_set_vbi_base(unsigned long even, unsigned long odd);
BOOLEAN Gal_get_vbi_base(unsigned long *address, int odd);
BOOLEAN Gal_set_vbi_pitch(unsigned long pitch);
BOOLEAN Gal_get_vbi_pitch(unsigned long *pitch);
BOOLEAN Gal_set_vbi_direct(unsigned long even_lines, unsigned long odd_lines);
BOOLEAN Gal_get_vbi_direct(int odd, unsigned long *vbi_direct);
BOOLEAN Gal_set_vbi_interrupt(int enable);
BOOLEAN Gal_get_vbi_interrupt(int *enable);
BOOLEAN Gal_set_vip_bus_request_threshold_high(int enable);
BOOLEAN Gal_get_vip_bus_request_threshold_high(int *enable);
BOOLEAN Gal_set_vip_last_line(int last_line);
BOOLEAN Gal_test_vip_odd_field(int *status);
BOOLEAN Gal_test_vip_bases_updated(int *status);
BOOLEAN Gal_test_vip_fifo_overflow(int *status);
BOOLEAN Gal_get_vip_line(int *status);

/* Second generation rendering routines  */

BOOLEAN Gal_set_source_stride(unsigned short stride);
BOOLEAN Gal_set_destination_stride(unsigned short stride);
BOOLEAN Gal_set_source_transparency(unsigned long color, unsigned long mask);
BOOLEAN Gal2_set_source_transparency(unsigned long color, unsigned long mask);
BOOLEAN Gal2_set_source_stride(unsigned short stride);
BOOLEAN Gal2_set_destination_stride(unsigned short stride);
BOOLEAN Gal2_set_pattern_origin(int x, int y);
BOOLEAN Gal2_set_alpha_mode(int mode);
BOOLEAN Gal2_set_alpha_value(unsigned char value);
BOOLEAN Gal2_pattern_fill(unsigned long dstoffset, unsigned short width,
                          unsigned short height);
BOOLEAN Gal2_color_pattern_fill(unsigned long dstoffset, unsigned short width,
                                unsigned short height, unsigned long pattern);
BOOLEAN Gal2_screen_to_screen_blt(unsigned long srcoffset,
                                  unsigned long dstoffset,
                                  unsigned short width, unsigned short height,
                                  int flags);

BOOLEAN Gal2_mono_expand_blt(unsigned long srcbase, unsigned short srcx,
                             unsigned short srcy, unsigned long dstoffset,
                             unsigned short width, unsigned short height,
                             int byte_packed);

BOOLEAN Gal2_color_bitmap_to_screen_blt(unsigned short srcx,
                                        unsigned short srcy,
                                        unsigned long dstoffset,
                                        unsigned short width,
                                        unsigned short height,
                                        unsigned char *data,
                                        unsigned short pitch);
BOOLEAN Gal2_mono_bitmap_to_screen_blt(unsigned short srcx,
                                       unsigned short srcy,
                                       unsigned long dstoffset,
                                       unsigned short width,
                                       unsigned short height,
                                       unsigned char *data,
                                       unsigned short pitch);

BOOLEAN Gal2_text_blt(unsigned long dstoffset,
                      unsigned short width,
                      unsigned short height, unsigned long data);
BOOLEAN Gal2_bresenham_line(unsigned long dstoffset,
                            unsigned short length, unsigned short initerr,
                            unsigned short axialerr, unsigned short diagerr,
                            unsigned short flags);
BOOLEAN Gal2_sync_to_vblank(void);

/* Video routines */

BOOLEAN Gal_set_video_yuv_pitch(unsigned long ypitch, unsigned long uvpitch);
BOOLEAN Gal_get_video_yuv_pitch(unsigned long *ypitch,
                                unsigned long *uvpitch);

BOOLEAN Gal_set_video_yuv_offsets(unsigned long yoffset,
                                  unsigned long uoffset,
                                  unsigned long voffset);
BOOLEAN Gal_get_video_yuv_offsets(unsigned long *yoffset,
                                  unsigned long *uoffset,
                                  unsigned long *voffset);

BOOLEAN Gal_set_video_left_crop(unsigned short x);
BOOLEAN Gal_set_video_vertical_downscale(unsigned short srch,
                                         unsigned short dsth);

BOOLEAN Gal_set_vbi_source(VbiSourceType source);
BOOLEAN Gal_get_vbi_source(VbiSourceType * source);

BOOLEAN Gal_set_vbi_lines(unsigned long even, unsigned long odd);
BOOLEAN Gal_get_vbi_lines(int odd, unsigned long *lines);

BOOLEAN Gal_set_vbi_total(unsigned long even, unsigned long odd);
BOOLEAN Gal_get_vbi_total(int odd, unsigned long *total);

BOOLEAN Gal_set_vertical_scaler_offset(char offset);
BOOLEAN Gal_get_vertical_scaler_offset(char *offset);
BOOLEAN Gal_get_genlock_enable(int *enable);
BOOLEAN Gal_set_genlock_enable(int flags);
BOOLEAN Gal_get_genlock_delay(unsigned long *delay);
BOOLEAN Gal_set_genlock_delay(unsigned long delay);
BOOLEAN Gal_set_top_line_in_odd(int enable);

BOOLEAN Gal_read_crc(unsigned long *crc);
BOOLEAN Gal_read_window_crc(int source, unsigned short x, unsigned short y,
                            unsigned short width, unsigned short height,
                            int crc32, unsigned long *crc);

BOOLEAN Gal_set_macrovision_enable(int enable);
BOOLEAN Gal_get_macrovision_enable(int *enable);

/* MSR routines */

BOOLEAN Gal_id_msr_dev_address(MSR * pDev, unsigned long address);
BOOLEAN Gal_get_msr_dev_address(unsigned int device, unsigned long *address);

#endif
