⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sis.c

📁 nucleus_arm.rar
💻 C
字号:
#include <video/graphic.h>
#include <video/graph.h>
#include <drivers/pci.h>
#include <support.h>

#define SIS_UNKNOWN 0x00
#define SIS_201	 	0x01
#define SIS_530	 	0x02
#define SIS_6202	0x03
#define SIS_6205	0x04
#define SIS_6215	0x05
#define SIS_6225	0x06
#define SIS_5596	0x07
#define SIS_5598	0x08
#define SIS_6326	0x09

unsigned int sis_chip, sis_mem;

char sis_test(void)
{
	unsigned int old, sub;
	unsigned char counter;

	old = rdinx(SEQ_I, 5);
	wrinx(SEQ_I, 5, 0);
	if (rdinx(SEQ_I, 5) == 0x21)
	{
		wrinx(SEQ_I, 5, 0x86);
		if ((rdinx(SEQ_I, 5) == 0xA1))
		{
			if (CheckPCI() && GetSpecialVendor(0x1039))
			{
				for (counter=0; counter<cfg_max; counter++)
				{
					if (pci_list[counter].vendorID != 0x1039)
						continue;
					sub = pci_list[counter].deviceID;
					switch (sub)
					{
						case 1: sis_chip = SIS_201; break;
						case 2: sis_chip = SIS_6202; break;
						case 0x200: sis_chip = SIS_5598; break;
						case 0x205: switch (pci_list[counter].revisionID)
									{
										case 13: sis_chip = SIS_6205; break;
										case 14: sis_chip = SIS_5596; break;
										default: sis_chip = SIS_6215;
									}
						case 0x0530: sis_chip = SIS_530; break;
						case 0x6225: sis_chip = SIS_6225; break;
						case 0x6326: sis_chip = SIS_6326; break;
					}
					sis_mem = 0;
					switch (rdinx(SEQ_I, 0xC) & 6)
					{
						case 0: sis_mem = 1024; break;
						case 2: sis_mem = 2048; break;
						case 4: sis_mem = 4096; break;
						case 6: sis_mem = 8192; break;
					}
					if (! sis_mem)
					switch (rdinx(SEQ_I, 0xF) & 3)
					{
						case 0: sis_mem = 1024; break;
						case 1: sis_mem = 2048; break;
						case 2: sis_mem = 4096; break;
						// 5596/98 shared memory
						case 3: sis_mem = (rdinx(SEQ_I, 0x25) >> 4)*512+512; break;
					}
					if (sis_chip) break;
				}
			}
		}
	}
	wrinx(SEQ_I, 5, old);
	return (sis_chip != 0);
}

char * sis_get_name(void)
{
	switch (sis_chip)
	{
		case SIS_201  : return "SiS SG86c201";
		case SIS_530  : return "SiS 530";
		case SIS_6202 : return "SiS 6202";
		case SIS_6205 : return "SiS 6205";
		case SIS_6215 : return "SiS 6215";
		case SIS_6225 : return "SiS 6225";
		case SIS_6326 : return "SiS 6326";
		case SIS_5596 : return "SiS 5596";
		case SIS_5598 : return "SiS 5598";
	}
	return "SiS Unknown";
}

void sis_setbank(unsigned int bank)
{
	if (current_bank == bank)
		return;
	current_bank = bank;
	outportb(0x3CD, bank);
	outportb(0x3CB, bank);
}

unsigned int sis_chiptype(void)
{
	return sis_chip;
}

unsigned int sis_memory(void)
{
	return sis_mem;
}

GraphicDriver sis_driver =
{
	sis_chiptype,
	sis_get_name,
	sis_memory,
	NULL,
	NULL,
	sis_setbank
};

char Check_SiS(GraphicDriver * driver)
{
	*driver = sis_driver;
	return (sis_test());
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -