#include <linux/config.h>
#include "initdef.h"

USHORT SetFlag,RVBHCFACT,RVBHCMAX,VGAVT,VGAHT,VT,HT,VGAVDE,VGAHDE;
USHORT VDE,HDE,RVBHRS,NewFlickerMode,RY1COE,RY2COE,RY3COE,RY4COE;                
extern USHORT LCDResInfo,LCDTypeInfo,LCDInfo;
USHORT VCLKLen;
USHORT LCDHDES,LCDVDES;

USHORT StResInfo[5][2]={{640,400},{640,350},{720,400},{720,350},{640,480}};

USHORT ModeResInfo[15][4]={{320,200,8,8},{320,240,8,8},{320,400,8,8},
                       {400,300,8,8},{512,384,8,8},{640,400,8,16},
                       {640,480,8,16},{800,600,8,16},{1024,768,8,16},
                       {1280,1024,8,16},{1600,1200,8,16},{1920,1440,8,16},
                       {720,480,8,16},{720,576,8,16},{1280,960,8,16}};


USHORT NTSCTiming[61]={0x017,0x01D,0x003,0x009,0x005,0x006,0x00C,0x00C,
                    0x094,0x049,0x001,0x00A,0x006,0x00D,0x004,0x00A,
                    0x006,0x014,0x00D,0x004,0x00A,0x000,0x085,0x01B,
                    0x00C,0x050,0x000,0x099,0x000,0x0EC,0x04A,0x017,
                    0x088,0x000,0x04B,0x000,0x000,0x0E2,0x000,0x002,
                    0x003,0x00A,0x065,0x09D,0x008,
                    0x092,0x08F,0x040,0x060,0x080,0x014,0x090,0x08C,
                    0x060,0x014,0x050,0x000,0x040,
                    0x00044,0x002DB,0x0003B};//Ajust xxx

USHORT PALTiming[61]={ 0x019,0x052,0x035,0x06E,0x004,0x038,0x03D,0x070,
                    0x094,0x049,0x001,0x012,0x006,0x03E,0x035,0x06D,
                    0x006,0x014,0x03E,0x035,0x06D,0x000,0x045,0x02B,
                    0x070,0x050,0x000,0x097,0x000,0x0D7,0x05D,0x017,
                    0x088,0x000,0x045,0x000,0x000,0x0E8,0x000,0x002,
                    0x00D,0x000,0x068,0x0B0,0x00B,
                    0x092,0x08F,0x040,0x060,0x080,0x014,0x090,0x08C,
                    0x060,0x014,0x063,0x000,0x040,
                    0x0003E,0x002E1,0x00028};//Ajust xxx

USHORT HiTVTiming[61]={0x017,0x01D,0x003,0x009,0x005,0x006,0x00C,0x00C,
                    0x094,0x049,0x001,0x00A,0x006,0x00D,0x004,0x00A,
                    0x006,0x014,0x00D,0x004,0x00A,0x000,0x085,0x01B,
                    0x00C,0x050,0x000,0x099,0x000,0x0EC,0x04A,0x017,
                    0x088,0x000,0x04B,0x000,0x000,0x0E2,0x000,0x002,
                    0x003,0x00A,0x065,0x09D,0x008,
                    0x092,0x08F,0x040,0x060,0x080,0x014,0x090,0x08C,
                    0x060,0x014,0x050,0x000,0x040,
                    0x00027,0x0FFFC,0x0003B};//Ajust xxx

USHORT HiTVTimingSimu[61]={0x020,0x054,0x02C,0x060,0x008,0x031,0x03A,0x061,
                        0x028,0x002,0x001,0x03D,0x006,0x00D,0x004,0x00A,
                        0x006,0x014,0x00D,0x004,0x00A,0x000,0x0C5,0x03F,
                        0x064,0x090,0x000,0x0AA,0x000,0x006,0x060,0x003,
                        0x011,0x005,0x011,0x00F,0x010,0x011,0x000,0x000,
                        0x005,0x005,0x034,0x034,0x008,
                        0x092,0x00F,0x040,0x060,0x080,0x014,0x090,0x08C,
                        0x060,0x004,0x05F,0x000,0x060,
                        0x0000E,0x0FFFC,0x00042};//Ajust xxx

USHORT HiTVGroup3Data[63]={0x000,0x01A,0x022,0x063,0x062,0x022,0x008,0x05B,
                        0x0FF,0x021,0x0AD,0x0AD,0x055,0x077,0x02A,0x0A6,
                        0x025,0x02F,0x047,0x0FA,0x0C8,0x0FF,0x08E,0x020,
                        0x08C,0x06E,0x060,0x02D,0x056,0x047,0x070,0x044,
                        0x056,0x036,0x04F,0x06E,0x03F,0x080,0x000,0x080,
                        0x045,0x07D,0x003,0x0A5,0x076,0x020,0x01A,0x0A4,
                        0x014,0x005,0x003,0x07E,0x064,0x031,0x014,0x075,
                        0x018,0x005,0x018,0x005,0x04C,0x0A8,0x001};

USHORT HiTVGroup3Simu[63]={0x000,0x01A,0x022,0x063,0x062,0x022,0x008,0x094,
                        0x0DA,0x020,0x0B7,0x0B7,0x055,0x047,0x02A,0x0A6,
                        0x025,0x02F,0x047,0x0FA,0x0C8,0x0FF,0x08E,0x020,
                        0x08C,0x06E,0x060,0x015,0x026,0x0D3,0x0E4,0x011,
                        0x056,0x036,0x04F,0x06E,0x03F,0x080,0x000,0x080,
                        0x066,0x035,0x001,0x047,0x00E,0x010,0x0BE,0x0B4,
                        0x001,0x005,0x003,0x07E,0x065,0x031,0x014,0x075,
                        0x018,0x005,0x018,0x005,0x04C,0x0A8,0x001};

USHORT NTSCGroup3Data[63]= {0x000,0x014,0x015,0x025,0x055,0x015,0x00B,0x089,
                         0x0D7,0x040,0x0B0,0x0B0,0x0FF,0x0C4,0x045,0x0A6,
                         0x025,0x02F,0x067,0x0F6,0x0BF,0x0FF,0x08E,0x020,
                         0x08C,0x0DA,0x060,0x092,0x0C8,0x055,0x08B,0x000,
                         0x051,0x004,0x018,0x00A,0x0F8,0x087,0x000,0x080,
                         0x03B,0x03B,0x000,0x0F0,0x0F0,0x000,0x0F0,0x0F0,
                         0x000,0x051,0x00F,0x00F,0x008,0x00F,0x008,0x06F,
                         0x018,0x005,0x005,0x005,0x04C,0x0AA,0x001};

USHORT PALGroup3Data[63]={0x000,0x01A,0x022,0x063,0x062,0x022,0x008,0x085,
                       0x0C3,0x020,0x0A4,0x0A4,0x055,0x047,0x02A,0x0A6,
                       0x025,0x02F,0x047,0x0FA,0x0C8,0x0FF,0x08E,0x020,
                       0x08C,0x0DC,0x060,0x092,0x0C8,0x04F,0x085,0x000,
                       0x056,0x036,0x04F,0x06E,0x0FE,0x083,0x054,0x081,
                       0x030,0x030,0x000,0x0F3,0x0F3,0x000,0x0A2,0x0A2,
                       0x000,0x048,0x0FE,0x07E,0x008,0x040,0x008,0x091,
                       0x018,0x005,0x018,0x005,0x04C,0x0A8,0x001};

VOID overwriteregs(ULONG ROMAddr, USHORT BaseAddr);
VOID SetDefCRT2ExtRegs(USHORT BaseAddr);
BOOLEAN SetCRT2Group(USHORT BaseAddr,ULONG ROMAddr,USHORT ModeNo,
	PHW_DEVICE_EXTENSION HwDeviceExtension);
USHORT GetRatePtrCRT2(ULONG ROMAddr, USHORT ModeNo);
BOOLEAN AjustCRT2Rate(ULONG ROMAddr);
VOID SaveCRT2Info(USHORT ModeNo);
VOID DisableLockRegs(VOID);
VOID DisableCRT2(VOID);
VOID DisableBridge(USHORT  BaseAddr);
VOID GetCRT2Data(ULONG ROMAddr,USHORT ModeNo);
VOID GetResInfo(ULONG ROMAddr,USHORT ModeNo);
VOID GetRAMDAC2DATA(ULONG ROMAddr,USHORT ModeNo);
VOID GetCRT2Ptr(ULONG ROMAddr,USHORT ModeNo);
VOID UnLockCRT2(USHORT BaseAddr);
VOID SetCRT2ModeRegs(USHORT BaseAddr,USHORT ModeNo);
VOID SetGroup1(USHORT  BaseAddr,ULONG ROMAddr,USHORT ModeNo,
	PHW_DEVICE_EXTENSION HwDeviceExtension);
VOID SetCRT2Offset(USHORT Part1Port,ULONG ROMAddr);
USHORT GetOffset(ULONG ROMAddr);
USHORT GetColorDepth(ULONG ROMAddr);
VOID SetCRT2FIFO(USHORT  Part1Port,ULONG ROMAddr,USHORT ModeNo,
	PHW_DEVICE_EXTENSION HwDeviceExtension);
USHORT GetVCLK(ULONG ROMAddr,USHORT ModeNo,
	PHW_DEVICE_EXTENSION HwDeviceExtension);
USHORT GetVCLKPtr(ULONG ROMAddr,USHORT ModeNo);
USHORT GetColorTh(ULONG ROMAddr);
USHORT GetMCLK(ULONG ROMAddr);
USHORT GetMCLKPtr(ULONG ROMAddr);
USHORT GetDRAMType(ULONG ROMAddr);
#ifndef CONFIG_FB_SIS_LINUXBIOS
static USHORT CalcDelay(VOID);
#endif
USHORT GetVCLK2Ptr(ULONG ROMAddr,USHORT ModeNo);
VOID SetCRT2Sync(USHORT BaseAddr,ULONG ROMAddr,USHORT ModeNo);
VOID GetCRT1Ptr(ULONG ROMAddr);
VOID SetRegANDOR(USHORT Port,USHORT Index,USHORT DataAND,USHORT DataOR);
USHORT GetVGAHT2(VOID);
VOID SetGroup2(USHORT  BaseAddr,ULONG ROMAddr);
VOID SetGroup3(USHORT  BaseAddr);
VOID SetGroup4(USHORT  BaseAddr,ULONG ROMAddr,USHORT ModeNo);
VOID SetCRT2VCLK(USHORT BaseAddr,ULONG ROMAddr,USHORT ModeNo);
VOID SetGroup5(USHORT  BaseAddr,ULONG ROMAddr);
VOID EnableCRT2(VOID);
VOID LoadDAC2(ULONG ROMAddr,USHORT Part5Port);
VOID WriteDAC2(USHORT Pdata,USHORT dl, USHORT ah, USHORT al, USHORT dh);
VOID LockCRT2(USHORT BaseAddr);
VOID SetLockRegs(VOID);
VOID EnableBridge(USHORT BaseAddr);
USHORT GetLockInfo(USHORT pattern);
VOID GetVBInfo(USHORT BaseAddr,ULONG ROMAddr);
BOOLEAN BridgeIsEnable(USHORT BaseAddr);
BOOLEAN BridgeInSlave(VOID);
BOOLEAN GetLCDResInfo(ULONG ROMAddr,USHORT P3d4);
VOID PresetScratchregister(USHORT P3d4,PHW_DEVICE_EXTENSION HwDeviceExtension);
BOOLEAN GetLCDDDCInfo(PHW_DEVICE_EXTENSION HwDeviceExtension);
VOID SetTVSystem(PHW_DEVICE_EXTENSION HwDeviceExtension,ULONG ROMAddr);
BOOLEAN GetSenseStatus(PHW_DEVICE_EXTENSION HwDeviceExtension,USHORT BaseAddr,ULONG ROMAddr);
BOOLEAN Sense(USHORT Part4Port,USHORT inputbx,USHORT inputcx);
BOOLEAN SenseLCD(PHW_DEVICE_EXTENSION HwDeviceExtension,USHORT Part4Port,ULONG ROMAddr);
BOOLEAN TestMonitorType(USHORT d1,USHORT d2,USHORT d3);
VOID WaitDisplay(VOID);
BOOLEAN DetectMonitor(PHW_DEVICE_EXTENSION HwDeviceExtension);
VOID LongWait(VOID);
//VOID ClearALLBuffer(PHW_DEVICE_EXTENSION HwDeviceExtension);
USHORT GetQueueConfig(VOID);
VOID VBLongWait(VOID);
USHORT GetVCLKLen(ULONG ROMAddr);
BOOLEAN WaitVBRetrace(USHORT  BaseAddr);
VOID GetLVDSDesData(ULONG ROMAddr,USHORT ModeNo);
VOID ModCRT1CRTC(ULONG ROMAddr,USHORT ModeNo);
VOID SetCRT2ECLK(ULONG ROMAddr, USHORT ModeNo);
VOID GetCRT2Data301(ULONG ROMAddr,USHORT ModeNo);
VOID GetCRT2DataLVDS(ULONG ROMAddr,USHORT ModeNo);
USHORT GetLVDSDesPtr(ULONG ROMAddr,USHORT ModeNo);
VOID SetGroup1_301(USHORT  BaseAddr,ULONG ROMAddr,USHORT ModeNo,
	PHW_DEVICE_EXTENSION HwDeviceExtension);
VOID SetGroup1_LVDS(USHORT  BaseAddr,ULONG ROMAddr,USHORT ModeNo,
	PHW_DEVICE_EXTENSION HwDeviceExtension);
VOID SetTPData(VOID);
BOOLEAN GetPanelID(VOID);
BOOLEAN GetLVDSCRT1Ptr(ULONG ROMAddr,USHORT ModeNo);

extern USHORT DRAMType[17][5];
extern USHORT MDA_DAC[];
extern USHORT CGA_DAC[];
extern USHORT EGA_DAC[];
extern USHORT VGA_DAC[];

extern USHORT   P3c4,P3d4,P3c0,P3ce,P3c2,P3ca,P3c6,P3c7,P3c8,P3c9,P3da;
extern USHORT	flag_clearbuffer; //0:no clear frame buffer 1:clear frame buffer
extern int      RAMType;
extern int      ModeIDOffset,StandTable,CRT1Table,ScreenOffset,VCLKData,MCLKData, ECLKData;
extern int      REFIndex,ModeType;
extern USHORT VBInfo,LCDResInfo,LCDTypeInfo,LCDInfo;
extern USHORT	 IF_DEF_LVDS,IF_DEF_TRUMPION;

extern VOID     SetMemoryClock(ULONG);
extern VOID     SetDRAMSize(PHW_DEVICE_EXTENSION);
extern BOOLEAN  SearchModeID(ULONG, USHORT);
extern BOOLEAN  CheckMemorySize(ULONG);
extern VOID     GetModePtr(ULONG, USHORT);
extern BOOLEAN  GetRatePtr(ULONG, USHORT);
extern VOID     SetSeqRegs(ULONG);
extern VOID     SetMiscRegs(ULONG);
extern VOID     SetCRTCRegs(ULONG);
extern VOID     SetATTRegs(ULONG);
extern VOID     SetGRCRegs(ULONG);
extern VOID     ClearExt1Regs(VOID);
extern VOID     SetSync(ULONG);
extern VOID     SetCRT1CRTC(ULONG);
extern VOID     SetCRT1Offset(ULONG);
extern VOID     SetCRT1FIFO(ULONG);
extern VOID     SetCRT1VCLK(ULONG);
extern VOID     LoadDAC(ULONG);
extern VOID     DisplayOn(VOID);
extern VOID     SetCRT1ModeRegs(ULONG, USHORT);
extern VOID     SetVCLKState(ULONG, USHORT);
extern VOID     WriteDAC(USHORT, USHORT, USHORT, USHORT);
extern VOID     ClearBuffer(PHW_DEVICE_EXTENSION);
//extern VOID 	ClearDAC(ULONG);
extern void 	ClearDAC(u16 port);
extern BOOLEAN SiSSetMode(PHW_DEVICE_EXTENSION HwDeviceExtension,
					USHORT ModeNo);
extern void SetReg1(u16 port, u16 index, u16 data);
extern void SetReg3(u16 port, u16 data);
extern void SetReg4(u16 port, unsigned long data);
extern u8 GetReg1(u16 port, u16 index);
extern u8 GetReg2(u16 port);
extern u32 GetReg3(u16 port);
