/* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */
/*
 * General structure definitions for universal mode switching modules
 *
 * Copyright (C) 2001-2005 by Thomas Winischhofer, Vienna, Austria
 *
 * If distributed as part of the Linux kernel, the following license terms
 * apply:
 *
 * * This program is free software; you can redistribute it and/or modify
 * * it under the terms of the GNU General Public License as published by
 * * the Free Software Foundation; either version 2 of the named License,
 * * or any later version.
 * *
 * * This program is distributed in the hope that it will be useful,
 * * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * * GNU General Public License for more details.
 * *
 * * You should have received a copy of the GNU General Public License
 * * along with this program; if not, write to the Free Software
 * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
 *
 * Otherwise, the following license terms apply:
 *
 * * Redistribution and use in source and binary forms, with or without
 * * modification, are permitted provided that the following conditions
 * * are met:
 * * 1) Redistributions of source code must retain the above copyright
 * *    notice, this list of conditions and the following disclaimer.
 * * 2) 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.
 * * 3) The name of the author may not be used to endorse or promote products
 * *    derived from this software without specific prior written permission.
 * *
 * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * Author:	Thomas Winischhofer <thomas@winischhofer.net>
 *
 */

#ifndef _SISUSB_STRUCT_H_
#define _SISUSB_STRUCT_H_

struct SiS_St {
	unsigned char St_ModeID;
	unsigned short St_ModeFlag;
	unsigned char St_StTableIndex;
	unsigned char St_CRT2CRTC;
	unsigned char St_ResInfo;
	unsigned char VB_StTVFlickerIndex;
	unsigned char VB_StTVEdgeIndex;
	unsigned char VB_StTVYFilterIndex;
	unsigned char St_PDC;
};

struct SiS_StandTable {
	unsigned char CRT_COLS;
	unsigned char ROWS;
	unsigned char CHAR_HEIGHT;
	unsigned short CRT_LEN;
	unsigned char SR[4];
	unsigned char MISC;
	unsigned char CRTC[0x19];
	unsigned char ATTR[0x14];
	unsigned char GRC[9];
};

struct SiS_StResInfo_S {
	unsigned short HTotal;
	unsigned short VTotal;
};

struct SiS_Ext {
	unsigned char Ext_ModeID;
	unsigned short Ext_ModeFlag;
	unsigned short Ext_VESAID;
	unsigned char Ext_RESINFO;
	unsigned char VB_ExtTVFlickerIndex;
	unsigned char VB_ExtTVEdgeIndex;
	unsigned char VB_ExtTVYFilterIndex;
	unsigned char VB_ExtTVYFilterIndexROM661;
	unsigned char REFindex;
	signed char ROMMODEIDX661;
};

struct SiS_Ext2 {
	unsigned short Ext_InfoFlag;
	unsigned char Ext_CRT1CRTC;
	unsigned char Ext_CRTVCLK;
	unsigned char Ext_CRT2CRTC;
	unsigned char Ext_CRT2CRTC_NS;
	unsigned char ModeID;
	unsigned short XRes;
	unsigned short YRes;
	unsigned char Ext_PDC;
	unsigned char Ext_FakeCRT2CRTC;
	unsigned char Ext_FakeCRT2Clk;
};

struct SiS_CRT1Table {
	unsigned char CR[17];
};

struct SiS_VCLKData {
	unsigned char SR2B, SR2C;
	unsigned short CLOCK;
};

struct SiS_ModeResInfo {
	unsigned short HTotal;
	unsigned short VTotal;
	unsigned char XChar;
	unsigned char YChar;
};

struct SiS_Private {
	void *sisusb;

	unsigned long IOAddress;

	unsigned long SiS_P3c4;
	unsigned long SiS_P3d4;
	unsigned long SiS_P3c0;
	unsigned long SiS_P3ce;
	unsigned long SiS_P3c2;
	unsigned long SiS_P3ca;
	unsigned long SiS_P3c6;
	unsigned long SiS_P3c7;
	unsigned long SiS_P3c8;
	unsigned long SiS_P3c9;
	unsigned long SiS_P3cb;
	unsigned long SiS_P3cc;
	unsigned long SiS_P3cd;
	unsigned long SiS_P3da;
	unsigned long SiS_Part1Port;

	unsigned char SiS_MyCR63;
	unsigned short SiS_CRT1Mode;
	unsigned short SiS_ModeType;
	unsigned short SiS_SetFlag;

	const struct SiS_StandTable *SiS_StandTable;
	const struct SiS_St *SiS_SModeIDTable;
	const struct SiS_Ext *SiS_EModeIDTable;
	const struct SiS_Ext2 *SiS_RefIndex;
	const struct SiS_CRT1Table *SiS_CRT1Table;
	const struct SiS_VCLKData *SiS_VCLKData;
	const struct SiS_ModeResInfo *SiS_ModeResInfo;
};

#endif
